Commit b5c8c19d by xieshaohua

工单修改

parent 91fdf5aa
package com.keymobile.governworkorder;
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
\ No newline at end of file
...@@ -14,49 +14,66 @@ import lombok.Data; ...@@ -14,49 +14,66 @@ import lombok.Data;
public class WorkOrderDataVO { public class WorkOrderDataVO {
/** /**
* 资产id * id
*/ */
@Schema(description = "id")
private String id; private String id;
/** /**
* 工单id * 工单id
*/ */
@Schema(description = "工单id")
private String workOrderId; private String workOrderId;
@Schema(description = "关联资产id")
private String dataId;
/** /**
* 资产名称 * 资产名称
*/ */
@Schema(description = "资产名称")
private String name; private String name;
/** /**
* 资产编号 * 资产编号
*/ */
@Schema(description = "资产编号")
private String code; private String code;
/** /**
* 资产描述 * 资产描述
*/ */
@Schema(description = "资产描述")
private String desc; private String desc;
/** /**
* 处理意见 * 处理意见
*/ */
@Schema(description = "处理意见")
private String opinion; private String opinion;
/** /**
* 工单类型 资产属性变更、资产下架、资产新增等 待讨论 资产转移 * 工单类型 资产属性变更、资产下架、资产新增等 待讨论 资产转移
*/ */
@Schema(description = "工单类型 资产属性变更、资产下架、资产新增等 待讨论 资产转移")
private String type; private String type;
/** /**
* 资产类型 数据指标、数据资产 * 资产类型 数据指标、数据资产、元数据、标准
*/ */
@Schema(description = "资产类型 数据指标、数据资产、元数据、标准")
private String dataType; private String dataType;
/** /**
* 处理状态 是、否 * 处理状态 是、否
*/ */
@Schema(description = "处理状态 是、否")
private String handleStatus; private String handleStatus;
/** /**
* 确认状态 是、否 * 确认状态 是、否
*/ */
@Schema(description = "确认状态 是、否")
private String confirmStatus; private String confirmStatus;
@Schema(description = "创建时间")
private String createTime;
@Schema(description = "更新时间")
private String updateTime;
} }
package com.keymobile.governworkorder.common.bo; package com.keymobile.governworkorder.common.bo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
...@@ -12,80 +13,120 @@ import java.util.List; ...@@ -12,80 +13,120 @@ import java.util.List;
*/ */
@Data @Data
@Schema(description = "工单信息")
public class WorkOrderInfoVO { public class WorkOrderInfoVO {
/** /**
* id * id
*/ */
@Schema(description = "id")
private String id; private String id;
private String name;
/** /**
* 工单标题 * 工单标题
*/ */
@Schema(description = "工单标题")
private String title; private String title;
/** /**
* 工单描述 * 工单描述
*/ */
@Schema(description = "工单描述")
private String desc; private String desc;
/** /**
* 工单级别 * 工单级别
*/ */
@Schema(description = "工单级别")
private String level; private String level;
/** /**
* 工单状态 待处理、处理中 * 工单状态 待处理、处理中
*/ */
@Schema(description = "工单状态 待处理、处理中")
private String status; private String status;
/** /**
* 流程环节 发起人、处理人、审批人
*/
@Schema(description = "流程环节 发起人、处理人、审批人")
private String stage;
/**
* 工单创建时间 * 工单创建时间
*/ */
@Schema(description = "工单创建时间")
private String createTime; private String createTime;
/** /**
* 创建毫秒 * 创建毫秒
*/ */
@Schema(description = "创建毫秒")
private long createTimeMill; private long createTimeMill;
/** /**
* 工单类型 资产变更、资产下架、资产新增等 待讨论 资产转移 * 工单类型 资产变更、资产下架、资产新增等 待讨论 资产转移
*/ */
@Schema(description = "工单类型 资产变更、资产下架、资产新增等 待讨论 资产转移")
private String type; private String type;
/** /**
* 资产类型 数据指标、数据资产 * 资产类型 数据指标、数据资产、元数据、数据标准
*/ */
@Schema(description = "资产类型 数据指标、数据资产、元数据、数据标准")
private String dataType; private String dataType;
/** /**
* 处理人 * 处理人
*/ */
@Schema(description = "处理人")
private String handleUserName; private String handleUserName;
/** /**
* 处理人展示名 * 处理人展示名
*/ */
private String handleUserDName; @Schema(description = "处理人展示名")
private String handleUserDname;
/** /**
* 下一步操作人展示名 * 下一步操作人展示名
*/ */
private String nextUserDName; @Schema(description = "下一步操作人展示名")
private String nextUserDname;
/** /**
* 下一步操作人账号 * 下一步操作人账号
*/ */
@Schema(description = "下一步操作人账号")
private String nextUserName; private String nextUserName;
/** /**
* 创建人展示名 * 创建人展示名
*/ */
private String createUserDName; @Schema(description = "创建人展示名")
private String createUserDname;
/** /**
* 创建人账号 * 创建人账号
*/ */
@Schema(description = "创建人账号")
private String createUserName; private String createUserName;
/**
* 文件id
*/
@Schema(description = "文件id")
private String fileId; private String fileId;
/**
* 结束时间
*/
@Schema(description = "结束时间")
private String endTime; private String endTime;
/**
* 结束时间毫秒
*/
@Schema(description = "结束时间毫秒")
private String endTimeMill;
/**
* 期望结束时间
*/
@Schema(description = "结束时间")
private String expectedEndTime;
/**
* 更新时间
*/
@Schema(description = "更新时间")
private String updateTime; private String updateTime;
@Schema(description = "关联资产数据")
private List<WorkOrderDataVO> data; private List<WorkOrderDataVO> data;
@Schema(description = "关联审批数据")
private List<WorkOrderProcessVO> process; private List<WorkOrderProcessVO> process;
} }
package com.keymobile.governworkorder.common.bo; package com.keymobile.governworkorder.common.bo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
/** /**
* @author xiesh * @author xiesh
* @version 1.0.0 * @version 1.0.0
* @date 2025/8/14 * @date 2025/8/14
* @desc * @desc 流程审批信息
*/ */
@Data @Data
@Schema(description = "工单信息")
public class WorkOrderProcessVO { public class WorkOrderProcessVO {
@Schema(description = "id")
private String id; private String id;
/** /**
* 工单id * 工单id
*/ */
@Schema(description = "工单id")
private String workOrderId; private String workOrderId;
/** /**
* 流程环节 发起人、处理人、审批人
*/
@Schema(description = "流程环节 发起人、处理人、审批人")
private String stage;
/**
* 类型 通过、驳回 * 类型 通过、驳回
*/ */
@Schema(description = "类型 通过、驳回")
private String type; private String type;
/** /**
* 处理意见 * 处理意见
*/ */
@Schema(description = "处理意见")
private String content; private String content;
/** /**
* 处理人账号 * 处理人账号
*/ */
@Schema(description = "处理人账号")
private String userName; private String userName;
/** /**
* 处理人展示名 * 处理人展示名
*/ */
private String userDName; @Schema(description = "处理人展示名")
private String userDname;
/** /**
* 下一步处理人 * 下一步处理人
*/ */
@Schema(description = "下一步处理人")
private String nextUserName; private String nextUserName;
/** /**
* 下一步处理人展示名 * 下一步处理人展示名
*/ */
private String nextUserDName; @Schema(description = "下一步处理人展示名")
private String nextUserDname;
/** /**
* 创建时间 * 创建时间
*/ */
@Schema(description = "createTime")
private String createTime; private String createTime;
......
...@@ -3,10 +3,6 @@ package com.keymobile.governworkorder.common.type; ...@@ -3,10 +3,6 @@ package com.keymobile.governworkorder.common.type;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
@JsonFormat(shape = JsonFormat.Shape.OBJECT) @JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum OrderDataTypeEnum { public enum OrderDataTypeEnum {
......
...@@ -13,7 +13,8 @@ public enum OrderMessageTypeEnum { ...@@ -13,7 +13,8 @@ public enum OrderMessageTypeEnum {
MSG_CREATE("create", "工单创建"), MSG_CREATE("create", "工单创建"),
MSG_UPDATE("update", "工单更新"), MSG_UPDATE("update", "工单更新"),
MSG_DELETE("delete", "工单删除"), MSG_DELETE("delete", "工单删除"),
MSG_FINISH("finish", "工单完成"); MSG_FINISH("finish", "工单完成"),
MSG_INVALIDATE("invalidate", "工单失效");
public static final String[] ARRAYS = Arrays.stream(values()).map(OrderMessageTypeEnum::getType).toArray(String[]::new); public static final String[] ARRAYS = Arrays.stream(values()).map(OrderMessageTypeEnum::getType).toArray(String[]::new);
......
package com.keymobile.governworkorder.common.type;
/**
* @author xiesh
* @version 1.0.0
* @date 2025/8/15
* @desc
*/
public enum OrderProcessStageTypeEnum {
PROCESS_CREATE("发起人"),
PROCESS_HANDLER("处理人"),
PROCESS_APPROVER("审批人");
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
OrderProcessStageTypeEnum() {
}
OrderProcessStageTypeEnum(String name) {
this.name = name;
}
}
...@@ -4,7 +4,8 @@ public enum OrderStatusTypeEnum { ...@@ -4,7 +4,8 @@ public enum OrderStatusTypeEnum {
STATUS_TO_BE_START("待发起"), STATUS_TO_BE_START("待发起"),
STATUS_PROCESSING("处理中"), STATUS_PROCESSING("处理中"),
STATUS_DONE("工单关闭"); STATUS_DONE("工单关闭"),
STATUS_INVALIDATE("工单失效");
public String getName() { public String getName() {
return name; return name;
......
...@@ -97,7 +97,10 @@ public class WorkOrderApi { ...@@ -97,7 +97,10 @@ public class WorkOrderApi {
} }
@RequestMapping(value = "/checkCreate", method = {RequestMethod.GET})
@Operation(summary = "校验是否具有创建工单的权限", description = "")
public boolean checkCreatePermission(@RequestParam(required = false) String userName) {
return workOrderService.checkCreatePermission(userName);
}
} }
package com.keymobile.governworkorder.core.dto; package com.keymobile.governworkorder.core.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
...@@ -10,20 +11,32 @@ import org.springframework.data.domain.Sort; ...@@ -10,20 +11,32 @@ import org.springframework.data.domain.Sort;
* @desc * @desc
*/ */
@Data @Data
@Schema(description = "工单查询条件")
public class WorkOrdeQueryDto { public class WorkOrdeQueryDto {
@Schema(description = "分页页数")
private int page = 1; private int page = 1;
@Schema(description = "分页大小")
private int size = 10; private int size = 10;
@Schema(description = "排序字段")
private String sort = "createTime"; private String sort = "createTime";
@Schema(description = "排序 DESC 降序、ASC 升序")
private Sort.Direction direction = Sort.Direction.DESC; private Sort.Direction direction = Sort.Direction.DESC;
@Schema(description = "工单级别")
private String level; private String level;
@Schema(description = "工单状态")
private String status; private String status;
@Schema(description = "工单类型")
private String type; private String type;
@Schema(description = "关键字")
private String keyword; private String keyword;
@Schema(description = "创建开始时间")
private String startTime; private String startTime;
@Schema(description = "创建结束时间")
private String endTime; private String endTime;
/** /**
* 待办已办类型: 1待办、2待办 * 待办已办类型: 1待办、2待办
*/ */
@Schema(description = "待办已办类型: 1待办、2待办")
private String doType; private String doType;
} }
...@@ -28,25 +28,12 @@ public class WorkOrderMessageService { ...@@ -28,25 +28,12 @@ public class WorkOrderMessageService {
@Autowired @Autowired
private FanoutExchange exchange; private FanoutExchange exchange;
public void create(WorkOrderInfoVO vo) { public void sendMsg(String type, WorkOrderInfoVO vo) {
CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString()); CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());
String content = toMessage(OrderMessageTypeEnum.MSG_CREATE.getType(), vo); String content = toMessage(type, vo);
log.info("sendMessage.exchange:{},content:{}", exchange.getName(), content); log.info("sendMessage.exchange:{},content:{}", exchange.getName(), content);
this.rabbitTemplate.convertAndSend(exchange.getName(), null, content, correlationId); this.rabbitTemplate.convertAndSend(exchange.getName(), null, content, correlationId);
}
public void delete(WorkOrderInfoVO vo) {
CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());
String content = toMessage(OrderMessageTypeEnum.MSG_DELETE.getType(), vo);
log.info("sendMessage.exchange:{},content:{}", exchange.getName(), content);
this.rabbitTemplate.convertAndSend(exchange.getName(), null, content, correlationId);
}
public void finsh(WorkOrderInfoVO vo) {
CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());
String content = toMessage(OrderMessageTypeEnum.MSG_FINISH.getType(), vo);
log.info("sendMessage.exchange:{},content:{}", exchange.getName(), content);
this.rabbitTemplate.convertAndSend(exchange.getName(), null, content, correlationId);
} }
private String toMessage(String type, WorkOrderInfoVO vo) { private String toMessage(String type, WorkOrderInfoVO vo) {
......
...@@ -23,6 +23,11 @@ public class WorkOrderData { ...@@ -23,6 +23,11 @@ public class WorkOrderData {
private String workOrderId; private String workOrderId;
/** /**
* 资产id
*/
private String dataId;
/**
* 资产名称 * 资产名称
*/ */
private String name; private String name;
......
...@@ -23,7 +23,6 @@ public class WorkOrderInfo { ...@@ -23,7 +23,6 @@ public class WorkOrderInfo {
@Id @Id
private String id; private String id;
private String name;
/** /**
* 工单标题 * 工单标题
*/ */
...@@ -41,6 +40,10 @@ public class WorkOrderInfo { ...@@ -41,6 +40,10 @@ public class WorkOrderInfo {
*/ */
private String status; private String status;
/** /**
* 流程环节 发起人、处理人、审批人
*/
private String stage;
/**
* 工单创建时间 * 工单创建时间
*/ */
private String createTime; private String createTime;
...@@ -65,11 +68,11 @@ public class WorkOrderInfo { ...@@ -65,11 +68,11 @@ public class WorkOrderInfo {
/** /**
* 处理人展示名 * 处理人展示名
*/ */
private String handleUserDName; private String handleUserDname;
/** /**
* 下一步操作人展示名 * 下一步操作人展示名
*/ */
private String nextUserDName; private String nextUserDname;
/** /**
* 下一步操作人账号 * 下一步操作人账号
*/ */
...@@ -77,18 +80,33 @@ public class WorkOrderInfo { ...@@ -77,18 +80,33 @@ public class WorkOrderInfo {
/** /**
* 创建人展示名 * 创建人展示名
*/ */
private String createUserDName; private String createUserDname;
/** /**
* 创建人账号 * 创建人账号
*/ */
private String createUserName; private String createUserName;
/**
* 文件id
*/
private String fileId;
/**
* 结束时间
*/
private String endTime; private String endTime;
/**
* 结束时间毫秒
*/
private String endTimeMill;
/**
* 期望结束时间
*/
private String expectedEndTime;
/**
* 更新时间
*/
private String updateTime; private String updateTime;
private String fileId;
@Transient @Transient
private List<WorkOrderData> data; private List<WorkOrderData> data;
......
...@@ -22,6 +22,10 @@ public class WorkOrderProcess { ...@@ -22,6 +22,10 @@ public class WorkOrderProcess {
*/ */
private String workOrderId; private String workOrderId;
/** /**
* 环节
*/
private String stage;
/**
* 类型 通过、驳回 * 类型 通过、驳回
*/ */
private String type; private String type;
...@@ -36,7 +40,7 @@ public class WorkOrderProcess { ...@@ -36,7 +40,7 @@ public class WorkOrderProcess {
/** /**
* 处理人展示名 * 处理人展示名
*/ */
private String userDName; private String userDname;
/** /**
* 下一步处理人 * 下一步处理人
...@@ -45,7 +49,7 @@ public class WorkOrderProcess { ...@@ -45,7 +49,7 @@ public class WorkOrderProcess {
/** /**
* 下一步处理人展示名 * 下一步处理人展示名
*/ */
private String nextUserDName; private String nextUserDname;
/** /**
* 创建时间 * 创建时间
*/ */
......
package com.keymobile.governworkorder.core.remote;
import com.keymobile.governworkorder.core.remote.user.User;
import com.keymobile.governworkorder.core.remote.user.UserGroup;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
@FeignClient(name = "AuthService")
public interface AuthService {
@GetMapping(value = "/users")
List<User> getUserList();
@GetMapping(value = "/userGroups")
List<UserGroup> getUserGroups();
@GetMapping(value = "/userGroups/{userGroupId}/users")
List<User> getUserListByGroupId(@PathVariable("userGroupId") Long userGroupId);
}
package com.keymobile.governworkorder.core.remote.user;
import lombok.Data;
import java.io.Serializable;
@Data
public class User implements Serializable {
private Long id;
private String name;
private String dname;
}
\ No newline at end of file
package com.keymobile.governworkorder.core.remote.user;
import lombok.Data;
import java.io.Serializable;
@Data
public class UserGroup implements Serializable {
private Long id;
private String name;
private String desc;
private Integer membersCount;
}
\ No newline at end of file
...@@ -36,4 +36,6 @@ public interface WorkOrderService { ...@@ -36,4 +36,6 @@ public interface WorkOrderService {
WorkOrderInfoVO getById(String workOrderId); WorkOrderInfoVO getById(String workOrderId);
boolean checkCreatePermission(String userName);
} }
...@@ -3,14 +3,15 @@ package com.keymobile.governworkorder.core.service.impl; ...@@ -3,14 +3,15 @@ package com.keymobile.governworkorder.core.service.impl;
import com.keymobile.governworkorder.common.bo.WorkOrderDataVO; import com.keymobile.governworkorder.common.bo.WorkOrderDataVO;
import com.keymobile.governworkorder.common.bo.WorkOrderInfoVO; import com.keymobile.governworkorder.common.bo.WorkOrderInfoVO;
import com.keymobile.governworkorder.common.bo.WorkOrderProcessVO; import com.keymobile.governworkorder.common.bo.WorkOrderProcessVO;
import com.keymobile.governworkorder.common.type.OrderApprovalTypeEnum; import com.keymobile.governworkorder.common.type.*;
import com.keymobile.governworkorder.common.type.OrderStatusTypeEnum;
import com.keymobile.governworkorder.common.type.OrderTypeEnum;
import com.keymobile.governworkorder.core.dto.WorkOrdeQueryDto; import com.keymobile.governworkorder.core.dto.WorkOrdeQueryDto;
import com.keymobile.governworkorder.core.messaging.WorkOrderMessageService; import com.keymobile.governworkorder.core.messaging.WorkOrderMessageService;
import com.keymobile.governworkorder.core.persistence.model.WorkOrderProcess; import com.keymobile.governworkorder.core.persistence.model.WorkOrderProcess;
import com.keymobile.governworkorder.core.persistence.model.WorkOrderData; import com.keymobile.governworkorder.core.persistence.model.WorkOrderData;
import com.keymobile.governworkorder.core.persistence.model.WorkOrderInfo; import com.keymobile.governworkorder.core.persistence.model.WorkOrderInfo;
import com.keymobile.governworkorder.core.remote.AuthService;
import com.keymobile.governworkorder.core.remote.user.User;
import com.keymobile.governworkorder.core.remote.user.UserGroup;
import com.keymobile.governworkorder.core.service.FileService; import com.keymobile.governworkorder.core.service.FileService;
import com.keymobile.governworkorder.core.service.WorkOrderService; import com.keymobile.governworkorder.core.service.WorkOrderService;
import com.keymobile.governworkorder.core.util.*; import com.keymobile.governworkorder.core.util.*;
...@@ -18,6 +19,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -18,6 +19,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.bson.Document; import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
...@@ -31,8 +33,10 @@ import org.springframework.util.CollectionUtils; ...@@ -31,8 +33,10 @@ import org.springframework.util.CollectionUtils;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.ZoneId; import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -51,6 +55,15 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -51,6 +55,15 @@ public class WorkOrderServiceImpl implements WorkOrderService {
private WorkOrderMessageService messageService; private WorkOrderMessageService messageService;
@Autowired @Autowired
private FileService fileService; private FileService fileService;
@Autowired
private AuthService authService;
@Value("${process.createGroup:治理工单创建组}")
private String createGroup;
@Value("${process.approvalGroup:治理工单审批组}")
private String approvalGroup;
@Value("${process.superAdmin:root}")
private String superAdmin;
public Page<WorkOrderInfoVO> page(WorkOrdeQueryDto param) { public Page<WorkOrderInfoVO> page(WorkOrdeQueryDto param) {
Pageable pageable = PageRequest.of(param.getPage() - 1, param.getSize(), Pageable pageable = PageRequest.of(param.getPage() - 1, param.getSize(),
...@@ -69,8 +82,8 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -69,8 +82,8 @@ public class WorkOrderServiceImpl implements WorkOrderService {
query.addCriteria(new Criteria().orOperator( query.addCriteria(new Criteria().orOperator(
Criteria.where("desc").regex(param.getKeyword()), Criteria.where("desc").regex(param.getKeyword()),
Criteria.where("name").regex(param.getKeyword()), Criteria.where("name").regex(param.getKeyword()),
Criteria.where("userDName").regex(param.getKeyword()), Criteria.where("userDname").regex(param.getKeyword()),
Criteria.where("handleUserDName").regex(param.getKeyword()), Criteria.where("handleUserDname").regex(param.getKeyword()),
Criteria.where("title").regex(param.getKeyword()))); Criteria.where("title").regex(param.getKeyword())));
} }
...@@ -105,9 +118,10 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -105,9 +118,10 @@ public class WorkOrderServiceImpl implements WorkOrderService {
} }
String userName = LogManager.getUserName(); String userName = LogManager.getUserName();
//待办、已办 //待办
if (StringUtils.equals(param.getDoType(), "1")) { if (StringUtils.equals(param.getDoType(), "1")) {
query.addCriteria(Criteria.where("nextUserName").is(userName)); query.addCriteria(Criteria.where("nextUserName").regex("(^|,)"+userName+"(,|$)"));
//已办
} else if (StringUtils.equals(param.getDoType(), "2")) { } else if (StringUtils.equals(param.getDoType(), "2")) {
Query processQuery = new Query(); Query processQuery = new Query();
processQuery.addCriteria(Criteria.where("userName").is(userName)); processQuery.addCriteria(Criteria.where("userName").is(userName));
...@@ -117,9 +131,28 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -117,9 +131,28 @@ public class WorkOrderServiceImpl implements WorkOrderService {
return PageableExecutionUtils.getPage(Collections.emptyList(), pageable, () -> 0); return PageableExecutionUtils.getPage(Collections.emptyList(), pageable, () -> 0);
} }
List<String> workOrderIds = processDocs.stream().map(e -> e.getString("workOrderId")).collect(Collectors.toList()); List<String> workOrderIds = processDocs.stream().map(e -> e.getString("workOrderId")).collect(Collectors.toList());
query.addCriteria(Criteria.where("workOrderId").in(workOrderIds)); query.addCriteria(Criteria.where("_id").in(workOrderIds));
} else {
//如果非待办和已办,则根据账号权限查询关联数据。 自理工单创建组成员可以查看所有数据,其他则只能查看自己相关数据(待办、已办)
boolean createUserFlag = checkCreatePermission(userName);
if (!createUserFlag) {
Query processQuery = new Query();
processQuery.addCriteria(Criteria.where("userName").is(userName));
processQuery.fields().include("workOrderId");
List<Document> processDocs = mongoTemplate.findDistinct(processQuery, "workOrderId", WorkOrderInfo.class, Document.class);
if (CollectionUtils.isEmpty(processDocs)) {
query.addCriteria(Criteria.where("nextUserName").regex("(^|,)" + userName + "(,|$)"));
} else {
List<String> workOrderIds = processDocs.stream().map(e -> e.getString("workOrderId")).collect(Collectors.toList());
query.addCriteria(Criteria.where("workOrderId").in(workOrderIds));
query.addCriteria(new Criteria().orOperator(
Criteria.where("nextUserName").regex("(^|,)" + userName + "(,|$)"),
Criteria.where("_id").in(workOrderIds)));
}
}
} }
long count = mongoTemplate.count(query, WorkOrderInfo.class); long count = mongoTemplate.count(query, WorkOrderInfo.class);
query.with(pageable);
List<WorkOrderInfo> list = mongoTemplate.find(query, WorkOrderInfo.class); List<WorkOrderInfo> list = mongoTemplate.find(query, WorkOrderInfo.class);
List<WorkOrderInfoVO> voList = list.stream().map(e -> BeanUtil.map(e, WorkOrderInfoVO.class)) List<WorkOrderInfoVO> voList = list.stream().map(e -> BeanUtil.map(e, WorkOrderInfoVO.class))
.collect(Collectors.toList()); .collect(Collectors.toList());
...@@ -144,7 +177,11 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -144,7 +177,11 @@ public class WorkOrderServiceImpl implements WorkOrderService {
fillWorkOrderData(workOrder, data); fillWorkOrderData(workOrder, data);
mongoTemplate.save(data); mongoTemplate.save(data);
} }
return BeanUtil.map(workOrder, WorkOrderInfoVO.class);
//启动流程
startProcess(workOrder.getId());
return getById(workOrder.getId());
} }
@Override @Override
...@@ -169,13 +206,9 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -169,13 +206,9 @@ public class WorkOrderServiceImpl implements WorkOrderService {
Assert.notNull(workOrder, "找不到对应工单"); Assert.notNull(workOrder, "找不到对应工单");
WorkOrderData workOrderData = mongoTemplate.findById(workOrderDataId, WorkOrderData.class); WorkOrderData workOrderData = mongoTemplate.findById(workOrderDataId, WorkOrderData.class);
Assert.notNull(workOrderData, "找不到对应数据"); Assert.notNull(workOrderData, "找不到对应数据");
//非发起人和处理人无法操作 if (!StringUtils.equals(OrderProcessStageTypeEnum.PROCESS_APPROVER.getName(), workOrder.getStage())
if (!StringUtils.equals(LogManager.getUserName(), workOrder.getCreateUserName())) { || contains(workOrder.getNextUserName(), LogManager.getUserName())) {
throw new RuntimeException("非发起人无法确认"); throw new RuntimeException("非审批人无法确认工单");
}
//非当前审批人无法确认数据
if (!StringUtils.equals(LogManager.getUserName(), workOrder.getNextUserName())) {
throw new RuntimeException("非当前审批人无法确认数据");
} }
workOrderData.setConfirmStatus(confirmStatus); workOrderData.setConfirmStatus(confirmStatus);
mongoTemplate.save(workOrderData); mongoTemplate.save(workOrderData);
...@@ -197,7 +230,7 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -197,7 +230,7 @@ public class WorkOrderServiceImpl implements WorkOrderService {
//发送消息 //发送消息
WorkOrderInfoVO messageVO = convertMessage(workOrder); WorkOrderInfoVO messageVO = convertMessage(workOrder);
messageService.delete(messageVO); messageService.sendMsg(OrderMessageTypeEnum.MSG_DELETE.getType(), messageVO);
//删除关联数据 //删除关联数据
String fileId = workOrder.getFileId(); String fileId = workOrder.getFileId();
...@@ -207,8 +240,6 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -207,8 +240,6 @@ public class WorkOrderServiceImpl implements WorkOrderService {
mongoTemplate.remove(query, WorkOrderData.class); mongoTemplate.remove(query, WorkOrderData.class);
mongoTemplate.remove(Query.query(Criteria.where("_id").is(workOrderId)), WorkOrderInfo.class); mongoTemplate.remove(Query.query(Criteria.where("_id").is(workOrderId)), WorkOrderInfo.class);
} }
@Override @Override
...@@ -238,11 +269,11 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -238,11 +269,11 @@ public class WorkOrderServiceImpl implements WorkOrderService {
List<WorkOrderProcess> processList = mongoTemplate.find(query, WorkOrderProcess.class); List<WorkOrderProcess> processList = mongoTemplate.find(query, WorkOrderProcess.class);
WorkOrderInfoVO workOrderVO = BeanUtil.map(workOrder, WorkOrderInfoVO.class); WorkOrderInfoVO workOrderVO = BeanUtil.map(workOrder, WorkOrderInfoVO.class);
if(!CollectionUtils.isEmpty(dataList)){ if (!CollectionUtils.isEmpty(dataList)) {
List<WorkOrderDataVO> dataVOList = dataList.stream().map(e -> BeanUtil.map(e, WorkOrderDataVO.class)).collect(Collectors.toList()); List<WorkOrderDataVO> dataVOList = dataList.stream().map(e -> BeanUtil.map(e, WorkOrderDataVO.class)).collect(Collectors.toList());
workOrderVO.setData(dataVOList); workOrderVO.setData(dataVOList);
} }
if(!CollectionUtils.isEmpty(processList)){ if (!CollectionUtils.isEmpty(processList)) {
List<WorkOrderProcessVO> dataVOList = processList.stream().map(e -> BeanUtil.map(e, WorkOrderProcessVO.class)).collect(Collectors.toList()); List<WorkOrderProcessVO> dataVOList = processList.stream().map(e -> BeanUtil.map(e, WorkOrderProcessVO.class)).collect(Collectors.toList());
workOrderVO.setProcess(dataVOList); workOrderVO.setProcess(dataVOList);
} }
...@@ -250,33 +281,58 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -250,33 +281,58 @@ public class WorkOrderServiceImpl implements WorkOrderService {
} }
@Override @Override
public boolean checkCreatePermission(String userName) {
String userNameTemp;
if (StringUtils.isBlank(userName)) {
userNameTemp = LogManager.getUserName();
} else {
userNameTemp = userName;
}
if (checkSuperAdmin(userNameTemp)) {
return true;
}
List<User> users = getUserNameByGroup(createGroup);
User user = users.stream().filter(e -> StringUtils.equals(userNameTemp, e.getName())).findFirst().orElse(null);
return !(user == null);
}
private boolean checkSuperAdmin(String userName) {
return StringUtils.equals(superAdmin, userName);
}
@Override
public void startProcess(String workOrderId) { public void startProcess(String workOrderId) {
WorkOrderInfo workOrder = mongoTemplate.findById(workOrderId, WorkOrderInfo.class); WorkOrderInfo workOrder = mongoTemplate.findById(workOrderId, WorkOrderInfo.class);
Assert.notNull(workOrder, "找不到对应工单"); Assert.notNull(workOrder, "找不到对应工单");
if (!StringUtils.equals(LogManager.getUserName(), workOrder.getCreateUserName())) { if (!StringUtils.equals(LogManager.getUserName(), workOrder.getCreateUserName())) {
throw new RuntimeException("非本人无法发起工单流程"); throw new RuntimeException("非本人无法发起工单流程");
} }
if (!StringUtils.equals(OrderStatusTypeEnum.STATUS_TO_BE_START.getName(), workOrder.getStatus())) {
throw new RuntimeException("非待发起的工单无法启动流程");
}
WorkOrderProcess process = new WorkOrderProcess(); WorkOrderProcess process = new WorkOrderProcess();
process.setId(IdUtil.generateId()); process.setId(IdUtil.generateId());
process.setUserName(LogManager.getUserName()); process.setUserName(LogManager.getUserName());
process.setUserDName(LogManager.getDUserName()); process.setUserDname(LogManager.getDUserName());
process.setStage(OrderProcessStageTypeEnum.PROCESS_CREATE.getName());
process.setContent("发起流程"); process.setContent("发起流程");
process.setType(OrderApprovalTypeEnum.APPROVAL_PASS.getName()); process.setType(OrderApprovalTypeEnum.APPROVAL_PASS.getName());
process.setNextUserName(workOrder.getHandleUserName()); process.setNextUserName(workOrder.getHandleUserName());
process.setNextUserDName(workOrder.getHandleUserDName()); process.setNextUserDname(workOrder.getHandleUserDname());
process.setCreateTime(DateUtil.getDateTime()); process.setCreateTime(DateUtil.getDateTime());
process.setWorkOrderId(workOrder.getId()); process.setWorkOrderId(workOrder.getId());
mongoTemplate.save(process); mongoTemplate.save(process);
workOrder.setStatus(OrderStatusTypeEnum.STATUS_PROCESSING.getName()); workOrder.setStatus(OrderStatusTypeEnum.STATUS_PROCESSING.getName());
workOrder.setStage(OrderProcessStageTypeEnum.PROCESS_CREATE.getName());
workOrder.setUpdateTime(DateUtil.getDateTime()); workOrder.setUpdateTime(DateUtil.getDateTime());
workOrder.setNextUserName(workOrder.getHandleUserName()); workOrder.setNextUserName(workOrder.getHandleUserName());
workOrder.setNextUserDName(workOrder.getHandleUserDName()); workOrder.setNextUserDname(workOrder.getHandleUserDname());
mongoTemplate.save(workOrder); mongoTemplate.save(workOrder);
//发送消息 //发送消息
WorkOrderInfoVO messageVO = convertMessage(workOrder); WorkOrderInfoVO messageVO = convertMessage(workOrder);
messageService.create(messageVO); messageService.sendMsg(OrderMessageTypeEnum.MSG_CREATE.getType(), messageVO);
} }
...@@ -284,62 +340,88 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -284,62 +340,88 @@ public class WorkOrderServiceImpl implements WorkOrderService {
log.debug("workOrderId:{},process:{}", workOrderId, ObjectUtil.toJson(processVO)); log.debug("workOrderId:{},process:{}", workOrderId, ObjectUtil.toJson(processVO));
WorkOrderInfo workOrder = mongoTemplate.findById(workOrderId, WorkOrderInfo.class); WorkOrderInfo workOrder = mongoTemplate.findById(workOrderId, WorkOrderInfo.class);
Assert.notNull(workOrder, "找不到对应工单"); Assert.notNull(workOrder, "找不到对应工单");
if (!StringUtils.equals(LogManager.getUserName(), workOrder.getCreateUserName())) {
throw new RuntimeException("无权限发起审批");
}
if (StringUtils.equals(OrderStatusTypeEnum.STATUS_DONE.getName(), workOrder.getStatus())) { if (!StringUtils.equals(OrderStatusTypeEnum.STATUS_PROCESSING.getName(), workOrder.getStatus())) {
throw new RuntimeException("工单已关闭,无法审批"); throw new RuntimeException(workOrder.getStatus() + ",无法审批");
} }
if (StringUtils.equals(OrderStatusTypeEnum.STATUS_TO_BE_START.getName(), workOrder.getStatus())) { if (!contains(workOrder.getNextUserName(), LogManager.getUserName())) {
throw new RuntimeException("流程待发起,无法审批"); throw new RuntimeException("无权限发起审批");
} }
//处理人无法驳回 //处理人无法驳回
if (StringUtils.equals(LogManager.getUserName(), workOrder.getHandleUserName()) if (StringUtils.equals(OrderProcessStageTypeEnum.PROCESS_HANDLER.getName(), workOrder.getStage())
&& StringUtils.equals(OrderApprovalTypeEnum.APPROVAL_PASS.getName(), processVO.getType())) { && StringUtils.equals(OrderApprovalTypeEnum.APPROVAL_PASS.getName(), processVO.getType())) {
throw new RuntimeException("处理人不能驳回"); throw new RuntimeException("处理人无法驳回");
} }
WorkOrderProcess process = BeanUtil.map(processVO, WorkOrderProcess.class); WorkOrderProcess process = BeanUtil.map(processVO, WorkOrderProcess.class);
process.setId(IdUtil.generateId()); process.setId(IdUtil.generateId());
process.setUserName(LogManager.getUserName()); process.setUserName(LogManager.getUserName());
process.setUserDName(LogManager.getDUserName()); process.setUserDname(LogManager.getDUserName());
process.setStage(workOrder.getStage());
process.setCreateTime(DateUtil.getDateTime()); process.setCreateTime(DateUtil.getDateTime());
process.setWorkOrderId(workOrder.getId()); process.setWorkOrderId(workOrder.getId());
if (StringUtils.equals(OrderApprovalTypeEnum.APPROVAL_REJECT.getName(), processVO.getType()) //驳回
&& StringUtils.equals(LogManager.getUserName(), workOrder.getCreateUserName())) { if (StringUtils.equals(OrderApprovalTypeEnum.APPROVAL_REJECT.getName(), processVO.getType())) {
process.setNextUserName(workOrder.getHandleUserName()); //资产变更工单审批人驳回返回处理人处理,否则工单失效
process.setNextUserDName(workOrder.getHandleUserDName()); if (StringUtils.equals(OrderTypeEnum.DATA_UPDATE.getName(), workOrder.getType())) {
workOrder.setNextUserName(workOrder.getHandleUserName()); process.setNextUserName(workOrder.getHandleUserName());
workOrder.setNextUserDName(workOrder.getHandleUserDName()); process.setNextUserDname(workOrder.getHandleUserDname());
mongoTemplate.save(process); workOrder.setNextUserName(workOrder.getHandleUserName());
mongoTemplate.save(workOrder); workOrder.setNextUserDname(workOrder.getHandleUserDname());
workOrder.setStage(OrderProcessStageTypeEnum.PROCESS_HANDLER.getName());
} else if (StringUtils.equals(OrderApprovalTypeEnum.APPROVAL_PASS.getName(), processVO.getType()) mongoTemplate.save(process);
&& StringUtils.equals(LogManager.getUserName(), workOrder.getCreateUserName())) { mongoTemplate.save(workOrder);
process.setNextUserName(null); } else {
process.setNextUserDName(null); process.setNextUserName(null);
workOrder.setNextUserName(null); process.setNextUserDname(null);
workOrder.setNextUserDName(null); workOrder.setNextUserName(null);
workOrder.setStatus(OrderStatusTypeEnum.STATUS_DONE.getName()); workOrder.setNextUserDname(null);
mongoTemplate.save(process); workOrder.setStage(null);
mongoTemplate.save(workOrder); workOrder.setStatus(OrderStatusTypeEnum.STATUS_INVALIDATE.getName());
mongoTemplate.save(process);
WorkOrderInfoVO messageVO = convertMessage(workOrder); mongoTemplate.save(workOrder);
messageService.finsh(messageVO); WorkOrderInfoVO messageVO = convertMessage(workOrder);
messageService.sendMsg(OrderMessageTypeEnum.MSG_INVALIDATE.getType(), messageVO);
} else if (StringUtils.equals(OrderApprovalTypeEnum.APPROVAL_PASS.getName(), processVO.getType()) }
&& StringUtils.equals(LogManager.getUserName(), workOrder.getHandleUserName())) {
process.setNextUserName(workOrder.getCreateUserName()); //通过
process.setNextUserDName(workOrder.getCreateUserDName()); } else {
workOrder.setNextUserName(workOrder.getCreateUserName()); //审批人通过,工单结束,发送消息
workOrder.setNextUserDName(workOrder.getCreateUserDName()); if (StringUtils.equals(OrderApprovalTypeEnum.APPROVAL_PASS.getName(), processVO.getType())
mongoTemplate.save(process); && StringUtils.equals(OrderProcessStageTypeEnum.PROCESS_APPROVER.getName(), workOrder.getStage())) {
mongoTemplate.save(workOrder); process.setNextUserName(null);
process.setNextUserDname(null);
workOrder.setNextUserName(null);
workOrder.setNextUserDname(null);
workOrder.setStage(null);
workOrder.setStatus(OrderStatusTypeEnum.STATUS_DONE.getName());
mongoTemplate.save(process);
mongoTemplate.save(workOrder);
WorkOrderInfoVO messageVO = convertMessage(workOrder);
messageService.sendMsg(OrderMessageTypeEnum.MSG_FINISH.getType(), messageVO);
//处理人通过,发送审批人审批
} else if (StringUtils.equals(OrderApprovalTypeEnum.APPROVAL_PASS.getName(), processVO.getType())
&& StringUtils.equals(OrderProcessStageTypeEnum.PROCESS_HANDLER.getName(), workOrder.getStage())) {
List<User> users = getUserNameByGroup(approvalGroup);
Assert.notEmpty(users, "未配置用户组:" + approvalGroup);
List<String> userNameList = users.stream().map(User::getName).collect(Collectors.toUnmodifiableList());
List<String> userDnameList = users.stream().map(User::getDname).collect(Collectors.toUnmodifiableList());
String userNameStr = StringUtils.join(userNameList,",");
String userDnameStr = StringUtils.join(userDnameList,",");
process.setNextUserName(userNameStr);
process.setNextUserDname(userDnameStr);
workOrder.setNextUserName(userNameStr);
workOrder.setNextUserDname(userDnameStr);
workOrder.setStage(OrderProcessStageTypeEnum.PROCESS_APPROVER.getName());
mongoTemplate.save(process);
mongoTemplate.save(workOrder);
}
} }
...@@ -369,7 +451,7 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -369,7 +451,7 @@ public class WorkOrderServiceImpl implements WorkOrderService {
workOrder.setUpdateTime(DateUtil.getDateTime()); workOrder.setUpdateTime(DateUtil.getDateTime());
workOrder.setCreateTime(DateUtil.getDateTime()); workOrder.setCreateTime(DateUtil.getDateTime());
workOrder.setCreateUserName(LogManager.getUserName()); workOrder.setCreateUserName(LogManager.getUserName());
workOrder.setCreateUserDName(LogManager.getDUserName()); workOrder.setCreateUserDname(LogManager.getDUserName());
workOrder.setCreateTimeMill(System.currentTimeMillis()); workOrder.setCreateTimeMill(System.currentTimeMillis());
if (StringUtils.isBlank(workOrder.getId())) { if (StringUtils.isBlank(workOrder.getId())) {
workOrder.setId(IdUtil.generateId()); workOrder.setId(IdUtil.generateId());
...@@ -406,4 +488,23 @@ public class WorkOrderServiceImpl implements WorkOrderService { ...@@ -406,4 +488,23 @@ public class WorkOrderServiceImpl implements WorkOrderService {
return workOrderVo; return workOrderVo;
} }
private List<User> getUserNameByGroup(String groupName) {
List<UserGroup> groupList = authService.getUserGroups();
UserGroup group = groupList.stream().filter(e -> StringUtils.equals(groupName, e.getName())).findFirst().orElse(null);
if (group == null) {
return new ArrayList<>();
}
List<User> userList = authService.getUserListByGroupId(group.getId());
if (CollectionUtils.isEmpty(userList)) {
return new ArrayList<>();
}
return userList;
}
private boolean contains(String nextUsers, String userName) {
return Pattern.compile("(^|,)" + userName + "(,|$)").matcher(nextUsers).find();
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment