feat: 品牌工作室迁移完成
This commit is contained in:
+24
-2
@@ -18,6 +18,7 @@ import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@@ -34,6 +35,11 @@ public class BrandStudioApplicationController {
|
||||
return Result.success(leaderHonorVO);
|
||||
}
|
||||
|
||||
@At("/members")
|
||||
public Result listMemberCandidates(String unionId, String keyword) {
|
||||
return Result.success(applicationService.listMemberCandidates(unionId, keyword));
|
||||
}
|
||||
|
||||
@At("/page")
|
||||
public Result page(@Valid BrandStudioApplicationPageDTO dto) {
|
||||
return Result.success(applicationService.page(dto));
|
||||
@@ -45,7 +51,7 @@ public class BrandStudioApplicationController {
|
||||
return Result.success(applicationVO);
|
||||
}
|
||||
|
||||
@At
|
||||
@At("")
|
||||
public Result save(@Param("..") @Valid BrandStudioApplicationCreateDTO dto) {
|
||||
applicationService.save(dto);
|
||||
return Result.success();
|
||||
@@ -59,7 +65,23 @@ public class BrandStudioApplicationController {
|
||||
|
||||
@At("/delete")
|
||||
public Result delete(@Param("..") NutMap request) {
|
||||
applicationService.delete((List<String>) request.get("data"));
|
||||
List<String> ids = new ArrayList<>();
|
||||
Object data = request.get("data");
|
||||
if (data instanceof List<?>) {
|
||||
((List<?>) data).forEach(item -> ids.add(String.valueOf(item)));
|
||||
} else if (data != null) {
|
||||
ids.add(String.valueOf(data));
|
||||
}
|
||||
Object id = request.get("id");
|
||||
if (id != null) {
|
||||
ids.add(String.valueOf(id));
|
||||
}
|
||||
request.forEach((key, value) -> {
|
||||
if (key != null && String.valueOf(key).startsWith("data[") && value != null) {
|
||||
ids.add(String.valueOf(value));
|
||||
}
|
||||
});
|
||||
applicationService.delete(ids);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@@ -50,6 +50,11 @@ public class BrandApplicationAuditDTO {
|
||||
*/
|
||||
private String bpmTaskApprovalType;
|
||||
|
||||
/**
|
||||
* 流程提交类型
|
||||
*/
|
||||
private Integer submitType;
|
||||
|
||||
/**
|
||||
* 下一个任务接收人
|
||||
*/
|
||||
|
||||
+14
@@ -1,6 +1,8 @@
|
||||
package com.budwk.app.zhgh.brand.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Strings;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.*;
|
||||
@@ -137,4 +139,16 @@ public class BrandStudioApplicationCreateDTO {
|
||||
@NotEmpty(message = "至少需要1位成员")
|
||||
@Valid
|
||||
private List<BrandStudioMemberCreateDTO> brandStudioMembers;
|
||||
|
||||
/**
|
||||
* 工作室成员列表 JSON
|
||||
*/
|
||||
private String brandStudioMembersJson;
|
||||
|
||||
public void setBrandStudioMembersJson(String brandStudioMembersJson) {
|
||||
this.brandStudioMembersJson = brandStudioMembersJson;
|
||||
if (Strings.isNotBlank(brandStudioMembersJson)) {
|
||||
this.brandStudioMembers = Json.fromJsonAsList(BrandStudioMemberCreateDTO.class, brandStudioMembersJson);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,6 +134,11 @@ public class BrandStudioApplicationPageDTO extends PageForm {
|
||||
*/
|
||||
private Integer processStatus;
|
||||
|
||||
/**
|
||||
* 是否已审核
|
||||
*/
|
||||
private Boolean audit = false;
|
||||
|
||||
@Override
|
||||
public Integer getPageNumber() {
|
||||
Integer pageNumber = super.getPageNumber();
|
||||
|
||||
+31
@@ -1,6 +1,8 @@
|
||||
package com.budwk.app.zhgh.brand.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Strings;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -67,6 +69,11 @@ public class BrandStudioApplicationUpdateDTO {
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 发起任务ID
|
||||
*/
|
||||
private String startTaskId;
|
||||
|
||||
/**
|
||||
* 归档
|
||||
*/
|
||||
@@ -107,6 +114,30 @@ public class BrandStudioApplicationUpdateDTO {
|
||||
* */
|
||||
private List<BrandStudioMemberCreateDTO> brandStudioMembers;
|
||||
|
||||
/**
|
||||
* 添加的成员 JSON
|
||||
*/
|
||||
private String brandStudioMembersJson;
|
||||
|
||||
public void setBrandStudioMembersJson(String brandStudioMembersJson) {
|
||||
this.brandStudioMembersJson = brandStudioMembersJson;
|
||||
if (Strings.isNotBlank(brandStudioMembersJson)) {
|
||||
this.brandStudioMembers = Json.fromJsonAsList(BrandStudioMemberCreateDTO.class, brandStudioMembersJson);
|
||||
}
|
||||
}
|
||||
|
||||
private List<BrandStudioHonorCreateDTO> brandStudioHonors;
|
||||
|
||||
/**
|
||||
* 添加的荣誉 JSON
|
||||
*/
|
||||
private String brandStudioHonorsJson;
|
||||
|
||||
public void setBrandStudioHonorsJson(String brandStudioHonorsJson) {
|
||||
this.brandStudioHonorsJson = brandStudioHonorsJson;
|
||||
if (Strings.isNotBlank(brandStudioHonorsJson)) {
|
||||
this.brandStudioHonors = Json.fromJsonAsList(BrandStudioHonorCreateDTO.class, brandStudioHonorsJson);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -85,6 +85,56 @@ public class BrandStudioApplicationVO implements Serializable {
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 流程实例ID
|
||||
*/
|
||||
private Long instanceId;
|
||||
|
||||
/**
|
||||
* 流程业务编号
|
||||
*/
|
||||
private String businessNo;
|
||||
|
||||
/**
|
||||
* 流程状态
|
||||
*/
|
||||
private Integer instanceState;
|
||||
|
||||
/**
|
||||
* 流程定义ID
|
||||
*/
|
||||
private String instanceProcessDefineId;
|
||||
|
||||
/**
|
||||
* 当前任务ID
|
||||
*/
|
||||
private String taskId;
|
||||
|
||||
/**
|
||||
* 当前任务标识
|
||||
*/
|
||||
private String taskKey;
|
||||
|
||||
/**
|
||||
* 当前任务名称
|
||||
*/
|
||||
private String taskName;
|
||||
|
||||
/**
|
||||
* 当前任务状态
|
||||
*/
|
||||
private Integer taskState;
|
||||
|
||||
/**
|
||||
* 是否可以撤回
|
||||
*/
|
||||
private Boolean canRevoke;
|
||||
|
||||
/**
|
||||
* 发起任务ID
|
||||
*/
|
||||
private String startTaskId;
|
||||
|
||||
/**
|
||||
* 归档
|
||||
*/
|
||||
|
||||
@@ -156,6 +156,51 @@ public class BrandStudioApplyFlowVO implements Serializable {
|
||||
|
||||
private String processTaskReason;
|
||||
|
||||
/**
|
||||
* 流程任务状态
|
||||
*/
|
||||
private Integer taskState;
|
||||
|
||||
/**
|
||||
* 当前任务ID
|
||||
*/
|
||||
private String taskId;
|
||||
|
||||
/**
|
||||
* 当前任务标识
|
||||
*/
|
||||
private String taskKey;
|
||||
|
||||
/**
|
||||
* 当前任务名称
|
||||
*/
|
||||
private String taskName;
|
||||
|
||||
/**
|
||||
* 当前节点
|
||||
*/
|
||||
private String curTaskName;
|
||||
|
||||
/**
|
||||
* 审核时间
|
||||
*/
|
||||
private Date finishTime;
|
||||
|
||||
/**
|
||||
* 是否可以撤回
|
||||
*/
|
||||
private Boolean canRevoke;
|
||||
|
||||
/**
|
||||
* 流程状态
|
||||
*/
|
||||
private Integer instanceState;
|
||||
|
||||
/**
|
||||
* 流程定义ID
|
||||
*/
|
||||
private String instanceProcessDefineId;
|
||||
|
||||
|
||||
private String processTaskNode;
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.budwk.app.zhgh.brand.models.BrandStudioApplication;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
public interface BrandStudioApplicationService extends BaseService<BrandStudioApplication> {
|
||||
|
||||
@@ -43,6 +44,8 @@ public interface BrandStudioApplicationService extends BaseService<BrandStudioAp
|
||||
|
||||
List<LeaderHonorGroupVO> queryLeaderHonor();
|
||||
|
||||
List<NutMap> listMemberCandidates(String unionId, String keyword);
|
||||
|
||||
Pagination<BrandStudioApplicationHonorVO> summaryPage(@Valid BrandStudioApplicationPageDTO pageDTO);
|
||||
|
||||
List<BrandStudioApplicationHonorVO> getHonorDetailById(String id);
|
||||
|
||||
+53
-40
@@ -1,17 +1,18 @@
|
||||
package com.budwk.app.zhgh.brand.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.bpm.enums.BpmProcessInstanceStatusEnum;
|
||||
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
|
||||
import com.budwk.app.bpm.models.BpmProcessInstance;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.FlowEngine;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
|
||||
import com.budwk.app.flow.service.FlowCommonService;
|
||||
import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.brand.convert.BrandApplicationFlowConvert;
|
||||
import com.budwk.app.zhgh.brand.domain.dto.BrandApplicationAuditDTO;
|
||||
import com.budwk.app.zhgh.brand.domain.dto.BrandApplicationRecallDTO;
|
||||
@@ -28,7 +29,6 @@ import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
@@ -38,10 +38,10 @@ import java.util.stream.Collectors;
|
||||
public class BrandApplicationFlowServiceImpl extends BaseServiceImpl<BrandApplicationFlow> implements BrandApplicationFlowService {
|
||||
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
private FlowCommonService flowCommonService;
|
||||
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
private FlowEngine flowEngine;
|
||||
|
||||
public BrandApplicationFlowServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
@@ -92,56 +92,68 @@ public class BrandApplicationFlowServiceImpl extends BaseServiceImpl<BrandApplic
|
||||
if (StrUtil.isBlank(taskId)) {
|
||||
throw new RuntimeException("流程任务ID不能为空");
|
||||
}
|
||||
BpmTaskApprovalTypeEnum approvalTypeEnum = getBpmTaskApprovalTypeEnum(dto);
|
||||
HashMap<String, Object> variables = new HashMap<>(BeanUtil.beanToMap(dto));
|
||||
variables.put("bpmTaskApprovalType", approvalTypeEnum.name());
|
||||
variables.put("approvalOpinion", dto.getRemark());
|
||||
bpmService.completeTask(taskId, approvalTypeEnum, variables, getAssignments(dto, approvalTypeEnum));
|
||||
ApplicationFlowStatusEnum statusEnum = getFlowStatusEnum(dto);
|
||||
Dict args = Dict.create();
|
||||
args.putAll(BeanUtil.beanToMap(dto));
|
||||
args.set(FlowConst.PROCESS_TASK_ID_KEY, Long.valueOf(taskId));
|
||||
args.set(FlowConst.APPROVAL_COMMENT, dto.getRemark());
|
||||
args.set("tf_remark", dto.getRemark());
|
||||
args.set(FlowConst.SUBMIT_TYPE, getProcessSubmitType(statusEnum));
|
||||
flowCommonService.executeTask(args);
|
||||
|
||||
BpmProcessInstance instance = dao().fetch(BpmProcessInstance.class, Cnd.where("processInstanceBusinessId", "=", applicationId));
|
||||
if (approvalTypeEnum == BpmTaskApprovalTypeEnum.REJECT) {
|
||||
ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where("businessNo", "=", applicationId));
|
||||
if (statusEnum == ApplicationFlowStatusEnum.REJECT) {
|
||||
dao().update(BrandStudioApplication.class,
|
||||
Chain.make("status", BrandApplicationStatusEnums.REJECT.getCode()),
|
||||
Cnd.where("id", "=", applicationId));
|
||||
} else if (approvalTypeEnum == BpmTaskApprovalTypeEnum.BACK || approvalTypeEnum == BpmTaskApprovalTypeEnum.BACK_OTHER_NODE) {
|
||||
} else if (statusEnum == ApplicationFlowStatusEnum.RECALL) {
|
||||
dao().update(BrandStudioApplication.class,
|
||||
Chain.make("status", BrandApplicationStatusEnums.IN_REVIEW.getCode()),
|
||||
Chain.make("status", BrandApplicationStatusEnums.DRAFT.getCode()),
|
||||
Cnd.where("id", "=", applicationId));
|
||||
} else if (instance != null && BpmProcessInstanceStatusEnum.COMPLETED.name().equals(instance.getProcessInstanceStatus())) {
|
||||
} else if (instance != null && ProcessInstanceStateEnum.FINISHED.getCode().equals(instance.getState())) {
|
||||
dao().update(BrandStudioApplication.class,
|
||||
Chain.make("status", BrandApplicationStatusEnums.PASSED.getCode()),
|
||||
Cnd.where("id", "=", applicationId));
|
||||
}
|
||||
}
|
||||
|
||||
private List<String> getAssignments(BrandApplicationAuditDTO dto, BpmTaskApprovalTypeEnum approvalTypeEnum) {
|
||||
if (dto.getAssignments() != null && !dto.getAssignments().isEmpty()) {
|
||||
return dto.getAssignments();
|
||||
private ApplicationFlowStatusEnum getFlowStatusEnum(BrandApplicationAuditDTO dto) {
|
||||
if (ProcessSubmitTypeEnum.AGREE.getCode().equals(dto.getSubmitType())) {
|
||||
return ApplicationFlowStatusEnum.PASSED;
|
||||
}
|
||||
if (approvalTypeEnum == BpmTaskApprovalTypeEnum.PASS) {
|
||||
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_ADMIN);
|
||||
if (StrUtil.isBlank(approvalLoginName)) {
|
||||
throw new RuntimeException("校工会未配置审批人,请联系管理员");
|
||||
}
|
||||
return List.of(approvalLoginName);
|
||||
if (ProcessSubmitTypeEnum.REJECT.getCode().equals(dto.getSubmitType())) {
|
||||
return ApplicationFlowStatusEnum.REJECT;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private BpmTaskApprovalTypeEnum getBpmTaskApprovalTypeEnum(BrandApplicationAuditDTO dto) {
|
||||
if (StrUtil.isNotBlank(dto.getBpmTaskApprovalType())) {
|
||||
return BpmTaskApprovalTypeEnum.valueOf(dto.getBpmTaskApprovalType());
|
||||
if (ProcessSubmitTypeEnum.ROLLBACK_TO_OPERATOR.getCode().equals(dto.getSubmitType())) {
|
||||
return ApplicationFlowStatusEnum.RECALL;
|
||||
}
|
||||
if (StrUtil.equalsIgnoreCase(dto.getBpmTaskApprovalType(), "PASS")) {
|
||||
return ApplicationFlowStatusEnum.PASSED;
|
||||
}
|
||||
if (StrUtil.equalsIgnoreCase(dto.getBpmTaskApprovalType(), "REJECT")) {
|
||||
return ApplicationFlowStatusEnum.REJECT;
|
||||
}
|
||||
if (StrUtil.equalsIgnoreCase(dto.getBpmTaskApprovalType(), "BACK")
|
||||
|| StrUtil.equalsIgnoreCase(dto.getBpmTaskApprovalType(), "BACK_OTHER_NODE")) {
|
||||
return ApplicationFlowStatusEnum.RECALL;
|
||||
}
|
||||
if (dto.getStatus() == null) {
|
||||
throw new RuntimeException("任务审批类型错误,请传入正确的任务审批类型。");
|
||||
}
|
||||
ApplicationFlowStatusEnum statusEnum = ApplicationFlowStatusEnum.getStatusEnumByValue(dto.getStatus());
|
||||
if (statusEnum == null) {
|
||||
throw new RuntimeException("任务审批类型错误,请传入正确的任务审批类型。");
|
||||
}
|
||||
return statusEnum;
|
||||
}
|
||||
|
||||
private Integer getProcessSubmitType(ApplicationFlowStatusEnum statusEnum) {
|
||||
if (statusEnum == ApplicationFlowStatusEnum.PASSED) {
|
||||
return BpmTaskApprovalTypeEnum.PASS;
|
||||
return ProcessSubmitTypeEnum.AGREE.getCode();
|
||||
} else if (statusEnum == ApplicationFlowStatusEnum.REJECT) {
|
||||
return BpmTaskApprovalTypeEnum.REJECT;
|
||||
return ProcessSubmitTypeEnum.REJECT.getCode();
|
||||
} else if (statusEnum == ApplicationFlowStatusEnum.RECALL) {
|
||||
return BpmTaskApprovalTypeEnum.BACK;
|
||||
return ProcessSubmitTypeEnum.ROLLBACK_TO_OPERATOR.getCode();
|
||||
}
|
||||
throw new RuntimeException("任务审批类型错误,请传入正确的任务审批类型。");
|
||||
}
|
||||
@@ -208,16 +220,17 @@ public class BrandApplicationFlowServiceImpl extends BaseServiceImpl<BrandApplic
|
||||
public void recall(BrandApplicationRecallDTO dto) {
|
||||
String taskId = StrUtil.blankToDefault(dto.getProcessInstanceTaskId(), dto.getFlowId());
|
||||
if (StrUtil.isNotBlank(taskId)) {
|
||||
bpmService.revokeTask(taskId);
|
||||
flowCommonService.revokeTask(Long.valueOf(taskId));
|
||||
dao().update(BrandStudioApplication.class,
|
||||
Chain.make("status", BrandApplicationStatusEnums.IN_REVIEW.getCode()),
|
||||
Chain.make("status", BrandApplicationStatusEnums.DRAFT.getCode()),
|
||||
Cnd.where("id", "=", dto.getApplicationId()));
|
||||
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(dto.getApplicationId());
|
||||
return;
|
||||
}
|
||||
bpmService.revokeApply(dto.getApplicationId());
|
||||
dao().update(BrandStudioApplication.class,
|
||||
Chain.make("status", BrandApplicationStatusEnums.DRAFT.getCode()),
|
||||
Cnd.where("id", "=", dto.getApplicationId()));
|
||||
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(dto.getApplicationId());
|
||||
}
|
||||
|
||||
public void recallOld(BrandApplicationRecallDTO dto) {
|
||||
|
||||
+209
-62
@@ -1,18 +1,22 @@
|
||||
package com.budwk.app.zhgh.brand.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.FlowEngine;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
import com.budwk.app.flow.service.FlowCommonService;
|
||||
import com.budwk.app.sys.models.Sys_union;
|
||||
import com.budwk.app.sys.models.Sys_unit;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.sys.models.Sys_user_role;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.brand.convert.BrandStudioApplicationConvert;
|
||||
import com.budwk.app.zhgh.brand.convert.BrandStudioHonorConvert;
|
||||
import com.budwk.app.zhgh.brand.convert.BrandStudioMemberConvert;
|
||||
@@ -30,8 +34,10 @@ import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.*;
|
||||
@@ -49,10 +55,9 @@ public class BrandStudioApplicationServiceImpl extends BaseServiceImpl<BrandStud
|
||||
private BrandApplicationFlowService flowService;
|
||||
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
|
||||
private FlowEngine flowEngine;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
private FlowCommonService flowCommonService;
|
||||
|
||||
public BrandStudioApplicationServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
@@ -63,28 +68,44 @@ public class BrandStudioApplicationServiceImpl extends BaseServiceImpl<BrandStud
|
||||
public Pagination<BrandStudioApplicationVO> page(BrandStudioApplicationPageDTO pageDTO) {
|
||||
String userId = SecurityUtil.getUserId();
|
||||
|
||||
Cnd cnd = Cnd.where("delFlag", "=", false);
|
||||
Sql sql = Sqls.create("""
|
||||
select bsa.*,
|
||||
ins.id as instanceId,
|
||||
ins.businessNo,
|
||||
ins.state as instanceState,
|
||||
ins.processDefineId as instanceProcessDefineId,
|
||||
task.id as taskId,
|
||||
task.taskName as taskKey,
|
||||
task.displayName as taskName,
|
||||
task.taskState,
|
||||
if((select taskName from wf_process_task tt where tt.id = task.taskParentId) = 'startTask', 1, 0) as canRevoke,
|
||||
(select max(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' and taskState in (10,20)) as startTaskId
|
||||
from brand_studio_application bsa
|
||||
left join wf_process_instance ins on ins.businessNo = bsa.id
|
||||
left join wf_process_task task on task.processInstanceId = ins.id and task.taskState = 10
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.where("bsa.delFlag", "=", false);
|
||||
/// 2. 先写“普通筛选”这一整组
|
||||
if (StrUtil.isNotBlank(pageDTO.getName())) {
|
||||
cnd.and("name", "like", "%" + pageDTO.getName() + "%");
|
||||
cnd.and("bsa.name", "like", "%" + pageDTO.getName() + "%");
|
||||
}
|
||||
if (StrUtil.isNotBlank(userId)) {
|
||||
cnd.and("createdBy", "=", userId);
|
||||
cnd.and("bsa.createdBy", "=", userId);
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageDTO.getCreateYear())) {
|
||||
cnd.and("createYear", "=", pageDTO.getCreateYear());
|
||||
cnd.and("bsa.createYear", "=", pageDTO.getCreateYear());
|
||||
}
|
||||
if (pageDTO.getStatus() != null) {
|
||||
cnd.and("status", "=", pageDTO.getStatus());
|
||||
cnd.and("bsa.status", "=", pageDTO.getStatus());
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageDTO.getLeadPeople())) {
|
||||
cnd.and("leadPeople", "like", "%" + pageDTO.getLeadPeople() + "%");
|
||||
cnd.and("bsa.leadPeople", "like", "%" + pageDTO.getLeadPeople() + "%");
|
||||
}
|
||||
cnd.desc("createYear");
|
||||
cnd.desc("createdAt");
|
||||
Pagination<BrandStudioApplication> page = listPage(pageDTO.getPageNumber(), pageDTO.getPageSize(), BrandStudioApplication.class, cnd);
|
||||
List<BrandStudioApplicationVO> list = BrandStudioApplicationConvert.convertList(page.getList());
|
||||
return new Pagination<>(page.getPageNo(), page.getPageSize(), page.getTotalCount(), list);
|
||||
cnd.desc("bsa.createYear");
|
||||
cnd.desc("bsa.createdAt");
|
||||
sql.setCondition(cnd);
|
||||
return listPageVO(pageDTO, sql, BrandStudioApplicationVO.class);
|
||||
}
|
||||
|
||||
private Sys_user getCheckedUserDetail() {
|
||||
@@ -147,16 +168,22 @@ public class BrandStudioApplicationServiceImpl extends BaseServiceImpl<BrandStud
|
||||
if (application == null) {
|
||||
throw new RuntimeException("提交申请失败");
|
||||
}
|
||||
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.BRANCH_UNION_CHAIRMAN, Cnd.where(Sys_user_role::getUnionId, "=", application.getUnionId()));
|
||||
if (StrUtil.isBlank(approvalLoginName)) {
|
||||
throw new RuntimeException("分工会未配置审批人,请联系管理员");
|
||||
}
|
||||
try {
|
||||
HashMap<String, Object> variables = new HashMap<>();
|
||||
variables.put("applicationId", application.getId());
|
||||
variables.put("status", BrandApplicationStatusEnums.IN_REVIEW.getCode());
|
||||
variables.put("userId", user.getId());
|
||||
bpmService.startSubmitProcessInstance(BpmProcessConstant.BRAND_STUDIO.name(), application.getName(), application.getId(), List.of(approvalLoginName), variables);
|
||||
Dict args = Dict.create();
|
||||
args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode());
|
||||
args.set(FlowConst.FORM_DATA, application);
|
||||
args.set("applicationId", application.getId());
|
||||
args.set("status", BrandApplicationStatusEnums.IN_REVIEW.getCode());
|
||||
args.set("userId", user.getId());
|
||||
|
||||
// 启动老工作流流程实例,复用 wf_process_define 中的 BRAND_STUDIO 流程定义
|
||||
ProcessInstance instance = flowEngine.startProcessInstanceByKey("BRAND_STUDIO", application.getId(), SecurityUtil.getUserId(), args);
|
||||
|
||||
// 自动完成第一个申请任务
|
||||
List<ProcessTask> doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null);
|
||||
for (ProcessTask task : doingTaskList) {
|
||||
flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args);
|
||||
}
|
||||
updateApplicationStatusToFail(application.getId(), true);
|
||||
} catch (RuntimeException e) {
|
||||
updateApplicationStatusToFail(application.getId(), false);
|
||||
@@ -203,11 +230,32 @@ public class BrandStudioApplicationServiceImpl extends BaseServiceImpl<BrandStud
|
||||
/// 再插入新的成员信息
|
||||
insertBatchBrandStudioMember(dto.getBrandStudioMembers(), dto.getId());
|
||||
if (statusByCode == BrandApplicationStatusEnums.CREATING) {
|
||||
/// 提交审核的话会记录在审核流表中
|
||||
submitAudit(fetch(dto.getId()), getCheckedUserDetail());
|
||||
if (StrUtil.isNotBlank(dto.getStartTaskId())) {
|
||||
submitAgain(fetch(dto.getId()), dto.getStartTaskId(), getCheckedUserDetail());
|
||||
} else {
|
||||
/// 提交审核的话会记录在审核流表中
|
||||
submitAudit(fetch(dto.getId()), getCheckedUserDetail());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void submitAgain(BrandStudioApplication application, String taskId, Sys_user user) {
|
||||
if (application == null) {
|
||||
throw new RuntimeException("提交申请失败");
|
||||
}
|
||||
Dict args = Dict.create();
|
||||
args.set(FlowConst.PROCESS_TASK_ID_KEY, Long.valueOf(taskId));
|
||||
args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode());
|
||||
args.set(FlowConst.FORM_DATA, application);
|
||||
args.set("applicationId", application.getId());
|
||||
args.set("status", BrandApplicationStatusEnums.IN_REVIEW.getCode());
|
||||
args.set("userId", user.getId());
|
||||
flowCommonService.executeTask(args);
|
||||
dao().update(BrandStudioApplication.class,
|
||||
Chain.make("status", BrandApplicationStatusEnums.IN_REVIEW.getCode()),
|
||||
Cnd.where("id", "=", application.getId()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMemberOrHonor(BrandStudioApplicationUpdateDTO dto) {
|
||||
dao().update(BrandStudioApplication.class, Chain.make("memberNum", dto.getMemberNum()), Cnd.where("id", "=", dto.getId()));
|
||||
@@ -228,10 +276,16 @@ public class BrandStudioApplicationServiceImpl extends BaseServiceImpl<BrandStud
|
||||
|
||||
@Override
|
||||
public void delete(List<String> ids) {
|
||||
if (ids == null || ids.isEmpty()) {
|
||||
throw new RuntimeException("请选择要删除的数据");
|
||||
}
|
||||
String userId = SecurityUtil.getUserId();
|
||||
|
||||
SqlExpressionGroup userGroup = new SqlExpressionGroup();
|
||||
userGroup.or("userId", "=", userId);
|
||||
userGroup.or("createdBy", "=", userId);
|
||||
List<String> validIds = dao().query(BrandStudioApplication.class, Cnd.where("id", "in", ids)
|
||||
.and("userId", "=", userId)
|
||||
.and(userGroup)
|
||||
.and("delFlag", "=", false))
|
||||
.stream().map(BrandStudioApplication::getId).collect(toList());
|
||||
|
||||
@@ -244,6 +298,7 @@ public class BrandStudioApplicationServiceImpl extends BaseServiceImpl<BrandStud
|
||||
dao().update(BrandStudioApplication.class, Chain.make("delFlag", true), Cnd.where("id", "in", validIds));
|
||||
((BrandStudioMemberServiceImpl) studioMemberService).deleteByApplicationIds(validIds);
|
||||
flowService.deleteByApplicationIds(validIds);
|
||||
validIds.forEach(id -> flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -287,12 +342,51 @@ public class BrandStudioApplicationServiceImpl extends BaseServiceImpl<BrandStud
|
||||
Integer age = list.get(0).getAge();
|
||||
List<String> honorNames = list.stream()
|
||||
.map(LeaderHonorVO::getHonorName)
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
return new LeaderHonorGroupVO(emplid, userName, age, honorNames);
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> listMemberCandidates(String unionId, String keyword) {
|
||||
Sql sql = Sqls.create("""
|
||||
select id,
|
||||
id as userId,
|
||||
loginname as emplid,
|
||||
loginname,
|
||||
username as name,
|
||||
username,
|
||||
date_format(birthday, '%Y-%m') as birthdate,
|
||||
academicDegree as grade,
|
||||
professionalTitle as professional,
|
||||
unitName as deptName,
|
||||
unitName,
|
||||
unionId
|
||||
from vw_user
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
boolean isAdmin = AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name());
|
||||
if (isAdmin) {
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
} else {
|
||||
cnd.and("unionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
if (StrUtil.isNotBlank(keyword)) {
|
||||
SqlExpressionGroup group = new SqlExpressionGroup();
|
||||
group.orLike("loginname", keyword, true);
|
||||
group.orLike("username", keyword, true);
|
||||
cnd.and(group);
|
||||
}
|
||||
cnd.asc("loginname");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = listPageMap(1, 50, sql);
|
||||
return pagination.getList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BrandStudioApplicationVO getDetailById(String id) {
|
||||
BrandStudioApplication entity = fetch(id);
|
||||
@@ -312,7 +406,21 @@ public class BrandStudioApplicationServiceImpl extends BaseServiceImpl<BrandStud
|
||||
applicationVO.setBrandStudioHonors(honorVOS);
|
||||
}
|
||||
|
||||
/// 查询当前工作流待审核 ID
|
||||
ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where("businessNo", "=", id).desc("createdAt"));
|
||||
if (instance != null) {
|
||||
applicationVO.setInstanceId(instance.getId());
|
||||
applicationVO.setBusinessNo(instance.getBusinessNo());
|
||||
applicationVO.setInstanceState(instance.getState());
|
||||
applicationVO.setInstanceProcessDefineId(String.valueOf(instance.getProcessDefineId()));
|
||||
ProcessTask startTask = dao().fetch(ProcessTask.class, Cnd.where("processInstanceId", "=", instance.getId())
|
||||
.and("taskName", "=", "startTask")
|
||||
.and("taskState", "=", ProcessTaskStateEnum.DOING.getCode())
|
||||
.desc("id"));
|
||||
if (startTask != null) {
|
||||
applicationVO.setStartTaskId(String.valueOf(startTask.getId()));
|
||||
}
|
||||
}
|
||||
|
||||
return applicationVO;
|
||||
}
|
||||
|
||||
@@ -334,18 +442,45 @@ public class BrandStudioApplicationServiceImpl extends BaseServiceImpl<BrandStud
|
||||
@Override
|
||||
public Pagination<BrandStudioApplyFlowVO> flowAuditPage(BrandStudioApplicationPageDTO dto) {
|
||||
Sql sql = Sqls.create("""
|
||||
select bsa.*, inst.id as processInstanceId, inst.processInstanceNodeName as processTaskNode,
|
||||
task.id as flowId, task.id as processInstanceTaskId, task.taskStatus as processTaskReason,
|
||||
task.createdOn as processTaskStartTime, task.endOn as processTaskEndTime
|
||||
from brand_studio_application bsa
|
||||
inner join bpm_process_instance inst on bsa.id = inst.processInstanceBusinessId
|
||||
inner join bpm_process_task task on inst.id = task.processInstanceId and task.delFlag = 0
|
||||
inner join bpm_process_define def on inst.processDefineId = def.id and def.code = 'BRAND_STUDIO'
|
||||
where bsa.delFlag = 0
|
||||
select bsa.*, inst.id as processInstanceId, inst.state as instanceState,
|
||||
inst.processDefineId as instanceProcessDefineId,
|
||||
task.id as taskId, task.id as flowId, task.id as processInstanceTaskId,
|
||||
task.taskName as taskKey, task.displayName as taskName, task.displayName as processTaskNode,
|
||||
task.taskState, task.finishTime,
|
||||
ifnull(group_concat(distinct nextTask.displayName), '结束') as curTaskName,
|
||||
if(revokeTask.id is not null, 1, 0) as canRevoke,
|
||||
case task.taskState
|
||||
when 10 then 'ACTIVE'
|
||||
when 20 then 'COMPLETE'
|
||||
when 30 then 'WITHDRAW'
|
||||
when 40 then 'INTERRUPT'
|
||||
when 50 then 'PENDING'
|
||||
when 60 then 'TRANSFER'
|
||||
when 99 then 'ABANDON'
|
||||
else cast(task.taskState as char)
|
||||
end as processTaskReason,
|
||||
from_unixtime(task.createdAt / 1000) as processTaskStartTime,
|
||||
task.finishTime as processTaskEndTime
|
||||
from wf_process_task task
|
||||
left join wf_process_instance inst on inst.id = task.processInstanceId
|
||||
left join brand_studio_application bsa on bsa.id = inst.businessNo
|
||||
left join wf_process_task_actor taskActor on taskActor.processTaskId = task.id
|
||||
left join wf_process_task nextTask on nextTask.processInstanceId = inst.id and nextTask.taskState = 10
|
||||
left join wf_process_task revokeTask on revokeTask.processInstanceId = inst.id and revokeTask.taskParentId = task.id and revokeTask.taskState = 10
|
||||
inner join wf_process_define def on inst.processDefineId = def.id and def.name = 'BRAND_STUDIO'
|
||||
$condition
|
||||
order by task.createdOn desc
|
||||
order by task.createdAt desc
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Cnd cnd = Cnd.where("bsa.delFlag", "=", 0);
|
||||
cnd.and("taskActor.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
cnd.and("task.taskName", "!=", "startTask");
|
||||
if (AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name(),
|
||||
RoleConstant.SCHOOL_UNION_CHAIRMAN.name(), RoleConstant.SCHOOL_UNION_VICE_CHAIRMAN.name())) {
|
||||
cnd.and("task.displayName", "like", "%校工会%");
|
||||
} else if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_ADMIN.name(), RoleConstant.BRANCH_UNION_CHAIRMAN.name(),
|
||||
RoleConstant.BRANCH_UNION_VICE_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name())) {
|
||||
cnd.and("task.displayName", "like", "%分工会%");
|
||||
}
|
||||
if (StrUtil.isNotBlank(dto.getName())) {
|
||||
cnd.and("bsa.name", "like", "%" + dto.getName() + "%");
|
||||
}
|
||||
@@ -355,37 +490,44 @@ public class BrandStudioApplicationServiceImpl extends BaseServiceImpl<BrandStud
|
||||
if (StrUtil.isNotBlank(dto.getLeadPeople())) {
|
||||
cnd.and("bsa.leadPeople", "like", "%" + dto.getLeadPeople() + "%");
|
||||
}
|
||||
if (Boolean.TRUE.equals(dto.getAudit())) {
|
||||
cnd.and("task.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
|
||||
} else {
|
||||
cnd.and("task.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
|
||||
cnd.and("bsa.status", "=", BrandApplicationStatusEnums.IN_REVIEW.getCode());
|
||||
}
|
||||
if (dto.getProcessStatus() != null) {
|
||||
cnd.and("task.taskStatus", "=", getProcessTaskStatus(dto.getProcessStatus()));
|
||||
cnd.and("task.taskState", "=", getProcessTaskStatus(dto.getProcessStatus()));
|
||||
}
|
||||
if (dto.getStatus() != null) {
|
||||
cnd.and("bsa.status", "=", dto.getStatus());
|
||||
}
|
||||
cnd.groupBy("task.id");
|
||||
sql.setCondition(cnd);
|
||||
return listPageVO(dto, sql, BrandStudioApplyFlowVO.class);
|
||||
}
|
||||
|
||||
private String getProcessTaskStatus(Integer processStatus) {
|
||||
private Integer getProcessTaskStatus(Integer processStatus) {
|
||||
if (Objects.equals(processStatus, 1)) {
|
||||
return BpmProcessTaskStatusEnum.ACTIVE.name();
|
||||
return ProcessTaskStateEnum.DOING.getCode();
|
||||
}
|
||||
if (Objects.equals(processStatus, 5)) {
|
||||
return BpmProcessTaskStatusEnum.COMPLETE.name();
|
||||
return ProcessTaskStateEnum.FINISHED.getCode();
|
||||
}
|
||||
return String.valueOf(processStatus);
|
||||
return processStatus;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pagination<BrandStudioApplicationHonorVO> summaryPage(BrandStudioApplicationPageDTO pageDTO) {
|
||||
Sql sql = Sqls.create("""
|
||||
select bsa.*, bsh.id as honorId, bsh.honorName, bsh.honorGrade, bsh.requireYear, bsh.honorCategory
|
||||
select bsa.*, group_concat(bsh.honorName order by bsh.requireYear desc separator ',') as honorName
|
||||
from brand_studio_application bsa
|
||||
left join brand_studio_honor bsh on bsa.id = bsh.applicationId and bsh.delFlag = 0
|
||||
where bsa.delFlag = 0
|
||||
$condition
|
||||
group by bsa.id
|
||||
order by bsa.createYear desc, bsa.createdAt desc
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Cnd cnd = Cnd.where("bsa.delFlag", "=", 0);
|
||||
if (StrUtil.isNotBlank(pageDTO.getName())) {
|
||||
cnd.and("bsa.name", "like", "%" + pageDTO.getName() + "%");
|
||||
}
|
||||
@@ -420,18 +562,23 @@ public class BrandStudioApplicationServiceImpl extends BaseServiceImpl<BrandStud
|
||||
|
||||
private List<LeaderHonorVO> selectLeaderHonor() {
|
||||
Sql sql = Sqls.create("""
|
||||
select su.id,
|
||||
su.loginname as emplid,
|
||||
su.username as userName,
|
||||
su.unitId as deptid,
|
||||
su.unitId,
|
||||
su.birthday,
|
||||
su.professionalTitle as honorName,
|
||||
u.unionId as unionId
|
||||
from sys_user su
|
||||
left join sys_unit u on su.unitId = u.id
|
||||
where su.delFlag = 0
|
||||
and su.disabled = 0
|
||||
select h.id,
|
||||
u.loginname as emplid,
|
||||
h.userName,
|
||||
timestampdiff(year, u.birthday, curdate()) as age,
|
||||
h.unitId as deptid,
|
||||
h.unionId,
|
||||
h.unitName as deptName,
|
||||
year(h.grantDate) as year,
|
||||
prize.name as honorName,
|
||||
h.prize as honorCode
|
||||
from honor h
|
||||
left join vw_user u on h.userId = u.id
|
||||
left join honor_basic_settings prize on prize.id = h.prize
|
||||
left join honor_basic_settings type on type.id = h.honorType
|
||||
where h.userId is not null
|
||||
and prize.name is not null
|
||||
and (type.queryTypeCode = 'HONOR_SINGLE' or type.name = '个人荣誉')
|
||||
""");
|
||||
return listVO(sql, LeaderHonorVO.class);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user