From 19bbd61436a83eaca4454038836a29e18e7611c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=8C=E5=85=88=E8=88=9C?= <2499071264@qq.com> Date: Wed, 19 Aug 2026 18:04:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=93=81=E7=89=8C=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E5=AE=A4=E8=BF=81=E7=A7=BB=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BrandStudioApplicationController.java | 26 +- .../domain/dto/BrandApplicationAuditDTO.java | 5 + .../dto/BrandStudioApplicationCreateDTO.java | 14 + .../dto/BrandStudioApplicationPageDTO.java | 5 + .../dto/BrandStudioApplicationUpdateDTO.java | 31 ++ .../domain/vo/BrandStudioApplicationVO.java | 50 +++ .../domain/vo/BrandStudioApplyFlowVO.java | 45 +++ .../BrandStudioApplicationService.java | 3 + .../impl/BrandApplicationFlowServiceImpl.java | 93 ++--- .../BrandStudioApplicationServiceImpl.java | 271 ++++++++++---- .../zhgh/brand/application/index.html | 190 ++++++++-- .../platform/zhgh/brand/apply/index.html | 312 +++++++++++++--- .../platform/zhgh/brand/office/index.html | 333 ++++++++++++++++-- .../platform/zhgh/brand/review/index.html | 290 ++++++++++++--- .../platform/zhgh/brand/summary/index.html | 127 +++++-- 15 files changed, 1512 insertions(+), 283 deletions(-) diff --git a/src/main/java/com/budwk/app/zhgh/brand/controller/BrandStudioApplicationController.java b/src/main/java/com/budwk/app/zhgh/brand/controller/BrandStudioApplicationController.java index 86b9c4b3..8dc7b6e8 100644 --- a/src/main/java/com/budwk/app/zhgh/brand/controller/BrandStudioApplicationController.java +++ b/src/main/java/com/budwk/app/zhgh/brand/controller/BrandStudioApplicationController.java @@ -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) request.get("data")); + List 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(); } diff --git a/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandApplicationAuditDTO.java b/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandApplicationAuditDTO.java index aba2b1e4..e2ffbfe9 100644 --- a/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandApplicationAuditDTO.java +++ b/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandApplicationAuditDTO.java @@ -50,6 +50,11 @@ public class BrandApplicationAuditDTO { */ private String bpmTaskApprovalType; + /** + * 流程提交类型 + */ + private Integer submitType; + /** * 下一个任务接收人 */ diff --git a/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandStudioApplicationCreateDTO.java b/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandStudioApplicationCreateDTO.java index 0732da8c..240f141e 100644 --- a/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandStudioApplicationCreateDTO.java +++ b/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandStudioApplicationCreateDTO.java @@ -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 brandStudioMembers; + + /** + * 工作室成员列表 JSON + */ + private String brandStudioMembersJson; + + public void setBrandStudioMembersJson(String brandStudioMembersJson) { + this.brandStudioMembersJson = brandStudioMembersJson; + if (Strings.isNotBlank(brandStudioMembersJson)) { + this.brandStudioMembers = Json.fromJsonAsList(BrandStudioMemberCreateDTO.class, brandStudioMembersJson); + } + } } diff --git a/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandStudioApplicationPageDTO.java b/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandStudioApplicationPageDTO.java index fd921f34..c1335e13 100644 --- a/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandStudioApplicationPageDTO.java +++ b/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandStudioApplicationPageDTO.java @@ -134,6 +134,11 @@ public class BrandStudioApplicationPageDTO extends PageForm { */ private Integer processStatus; + /** + * 是否已审核 + */ + private Boolean audit = false; + @Override public Integer getPageNumber() { Integer pageNumber = super.getPageNumber(); diff --git a/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandStudioApplicationUpdateDTO.java b/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandStudioApplicationUpdateDTO.java index a9d109ff..cf612899 100644 --- a/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandStudioApplicationUpdateDTO.java +++ b/src/main/java/com/budwk/app/zhgh/brand/domain/dto/BrandStudioApplicationUpdateDTO.java @@ -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 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 brandStudioHonors; + /** + * 添加的荣誉 JSON + */ + private String brandStudioHonorsJson; + + public void setBrandStudioHonorsJson(String brandStudioHonorsJson) { + this.brandStudioHonorsJson = brandStudioHonorsJson; + if (Strings.isNotBlank(brandStudioHonorsJson)) { + this.brandStudioHonors = Json.fromJsonAsList(BrandStudioHonorCreateDTO.class, brandStudioHonorsJson); + } + } + } diff --git a/src/main/java/com/budwk/app/zhgh/brand/domain/vo/BrandStudioApplicationVO.java b/src/main/java/com/budwk/app/zhgh/brand/domain/vo/BrandStudioApplicationVO.java index 28725081..51c4b776 100644 --- a/src/main/java/com/budwk/app/zhgh/brand/domain/vo/BrandStudioApplicationVO.java +++ b/src/main/java/com/budwk/app/zhgh/brand/domain/vo/BrandStudioApplicationVO.java @@ -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; + /** * 归档 */ diff --git a/src/main/java/com/budwk/app/zhgh/brand/domain/vo/BrandStudioApplyFlowVO.java b/src/main/java/com/budwk/app/zhgh/brand/domain/vo/BrandStudioApplyFlowVO.java index e1e19ee3..eee26a3a 100644 --- a/src/main/java/com/budwk/app/zhgh/brand/domain/vo/BrandStudioApplyFlowVO.java +++ b/src/main/java/com/budwk/app/zhgh/brand/domain/vo/BrandStudioApplyFlowVO.java @@ -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; diff --git a/src/main/java/com/budwk/app/zhgh/brand/service/BrandStudioApplicationService.java b/src/main/java/com/budwk/app/zhgh/brand/service/BrandStudioApplicationService.java index e49cac26..89960b9f 100644 --- a/src/main/java/com/budwk/app/zhgh/brand/service/BrandStudioApplicationService.java +++ b/src/main/java/com/budwk/app/zhgh/brand/service/BrandStudioApplicationService.java @@ -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 { @@ -43,6 +44,8 @@ public interface BrandStudioApplicationService extends BaseService queryLeaderHonor(); + List listMemberCandidates(String unionId, String keyword); + Pagination summaryPage(@Valid BrandStudioApplicationPageDTO pageDTO); List getHonorDetailById(String id); diff --git a/src/main/java/com/budwk/app/zhgh/brand/service/impl/BrandApplicationFlowServiceImpl.java b/src/main/java/com/budwk/app/zhgh/brand/service/impl/BrandApplicationFlowServiceImpl.java index 44aa69d0..c5cf150d 100644 --- a/src/main/java/com/budwk/app/zhgh/brand/service/impl/BrandApplicationFlowServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/brand/service/impl/BrandApplicationFlowServiceImpl.java @@ -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 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 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 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 page = listPage(pageDTO.getPageNumber(), pageDTO.getPageSize(), BrandStudioApplication.class, cnd); - List 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 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 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 flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id)); } @Override @@ -287,12 +342,51 @@ public class BrandStudioApplicationServiceImpl extends BaseServiceImpl 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 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 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 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 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); } diff --git a/src/main/resources/views/platform/zhgh/brand/application/index.html b/src/main/resources/views/platform/zhgh/brand/application/index.html index 045ff123..f33556d5 100644 --- a/src/main/resources/views/platform/zhgh/brand/application/index.html +++ b/src/main/resources/views/platform/zhgh/brand/application/index.html @@ -3,20 +3,26 @@ layout("/layouts/platform.html"){ #-->
+ + + + - - - 查询 - 新建 - + + + + + 申请品牌工作室 + + @@ -25,28 +31,100 @@ layout("/layouts/platform.html"){ - + - + + + +
+ + diff --git a/src/main/resources/views/platform/zhgh/brand/office/index.html b/src/main/resources/views/platform/zhgh/brand/office/index.html index f2dc4430..a83c3d21 100644 --- a/src/main/resources/views/platform/zhgh/brand/office/index.html +++ b/src/main/resources/views/platform/zhgh/brand/office/index.html @@ -3,34 +3,153 @@ layout("/layouts/platform.html"){ #-->
- - - - - - - - - - 查询 - - - - - - - - - - - - - - + + + + + + + + + + + 查询 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - +
+ 取消 + 确定 +
+
+ + diff --git a/src/main/resources/views/platform/zhgh/brand/review/index.html b/src/main/resources/views/platform/zhgh/brand/review/index.html index 29085871..7e16ac1b 100644 --- a/src/main/resources/views/platform/zhgh/brand/review/index.html +++ b/src/main/resources/views/platform/zhgh/brand/review/index.html @@ -3,82 +3,264 @@ layout("/layouts/platform.html"){ #-->
- - - - - - - - - - - - - - - - 查询 - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + + + + + + + +