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
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