From 7665726c84979d4db2b5a9a38f5bd2724bb8c7df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=A3=E4=BA=9B=E8=8A=B1=E5=84=BF?= <1156921458@qq.com> Date: Tue, 2 Sep 2025 15:35:28 +0800 Subject: [PATCH] .. --- .../com/budwk/app/base/param/PageForm.java | 13 +- .../budwk/app/base/service/BaseService.java | 9 +- .../base/service/impl/BaseServiceImpl.java | 8 + .../bpm/param/BpmProcessInstancePageForm.java | 3 +- ...ter.java => FlowTodoCenterController.java} | 4 +- ...wClubPresidentByArgsAssignmentHandler.java | 41 +++ .../ProcessInstanceStartEventListener.java | 21 ++ .../ProcessTaskEndEventListener.java | 28 ++ .../ProcessTaskStartEventListener.java | 64 +++++ .../sys/param/SysDataUserPullPageForm.java | 3 +- .../sys/param/SysDataUserUpdatePageForm.java | 3 +- .../sys/param/SysHomeActivityPageForm.java | 3 +- .../vo/CommonPageParam.java | 3 +- .../ArticleClubApprovalController.java | 2 + .../controller/ArticleQueryController.java | 27 +- .../controller/ArticleWriteController.java | 3 + .../article/param/ArticleInfoPageParam.java | 3 +- .../EvaluateActivityController.java | 2 +- .../evaluation/vo/EvaluatePageForm.java | 3 +- .../param/GrassrootsCongressPageForm.java | 2 +- ...ProposalExportComprehensiveController.java | 44 ++- .../ProposalQueryComprehensiveController.java | 2 +- .../query/ProposalQueryHistoryController.java | 2 +- .../ProposalQueryUnitReplyController.java | 16 +- .../proposal/models/ProposalInfo.java | 5 + .../proposal/param/ProposalSearchParam.java | 3 +- .../service/ProposalExportService.java | 24 +- .../service/common/ProposalCommonService.java | 8 + .../common/ProposalCommonServiceImpl.java | 261 ++++++------------ .../impl/ProposalExportServiceImpl.java | 223 +++++++++++++-- .../param/SuggestionSearchParam.java | 3 +- .../controller/SuggestionXghController.java | 48 +++- .../vo/DifficultHelpPageParam.java | 3 +- .../param/pageform/MemberApplyPageForm.java | 3 +- .../param/pageform/MemberChangePageForm.java | 3 +- .../param/SourceChangePageForm.java | 3 +- .../param/SpecialStaffPageForm.java | 3 +- .../assets/platform/js/mixin/flowMixins.js | 46 +++ .../views/layouts/v4/baseLayout.html | 1 + .../views/platform/flow/todoCenter/index.html | 17 +- .../article/clubApproval/index.html | 141 ++++++---- .../proposal/export/comprehensive/index.html | 33 ++- .../transact/committeeFiling/index.html | 28 +- .../proposal/transact/delegation/index.html | 19 +- .../transact/feedbackEvaluation/index.html | 28 +- .../proposal/transact/mine/index.html | 9 +- .../transact/schoolLeaderApproval/index.html | 28 +- .../proposal/transact/seconded/index.html | 19 +- .../proposal/transact/unitReply/index.html | 39 +-- .../proposal/transact/write/index.html | 44 +-- .../democratic/suggestionBox/xgh/index.html | 14 +- 51 files changed, 893 insertions(+), 472 deletions(-) rename src/main/java/com/budwk/app/flow/controller/{FlowTodoCenter.java => FlowTodoCenterController.java} (98%) create mode 100644 src/main/java/com/budwk/app/flow/handler/FlowClubPresidentByArgsAssignmentHandler.java create mode 100644 src/main/java/com/budwk/app/flow/listenter/ProcessInstanceStartEventListener.java create mode 100644 src/main/java/com/budwk/app/flow/listenter/ProcessTaskEndEventListener.java create mode 100644 src/main/java/com/budwk/app/flow/listenter/ProcessTaskStartEventListener.java create mode 100644 src/main/resources/static/assets/platform/js/mixin/flowMixins.js diff --git a/src/main/java/com/budwk/app/base/param/PageForm.java b/src/main/java/com/budwk/app/base/param/PageForm.java index 979eec18..1b12d287 100644 --- a/src/main/java/com/budwk/app/base/param/PageForm.java +++ b/src/main/java/com/budwk/app/base/param/PageForm.java @@ -11,7 +11,7 @@ import javax.validation.constraints.Positive; * @Digits注解 验证注解的元素值的整数位数和小数位数上限 ,并且类型为float,double,BigDecimal。 */ @Data -public class PageForm { +public class PageForm { @NotNull(message = "pageNumber不能为空") @Min(value = 1, message = "pageNumber最小为1") @@ -30,8 +30,19 @@ public class PageForm { private String searchKeyword; + /*======================流程参数==============================*/ + + /** + * 是否审核 + */ private Boolean audit; + /** + * 业务ID + */ + private String bizId; + + public PageForm defaultSort(String column, String order) { this.setPageOrderName(column); this.setPageOrderBy(order); diff --git a/src/main/java/com/budwk/app/base/service/BaseService.java b/src/main/java/com/budwk/app/base/service/BaseService.java index 86f54302..9f51a75e 100644 --- a/src/main/java/com/budwk/app/base/service/BaseService.java +++ b/src/main/java/com/budwk/app/base/service/BaseService.java @@ -884,7 +884,6 @@ public interface BaseService { */ Pagination listPageMap(Integer pageNumber, int pageSize, Condition cnd); - /** * DataTable Page * @@ -950,4 +949,12 @@ public interface BaseService { * @return */ NutMap data(int length, int start, int draw, Cnd cnd, String linkName); + + /** + * 获取Map + * @param sql + * @return + */ + NutMap fetchMap(Sql sql); + } diff --git a/src/main/java/com/budwk/app/base/service/impl/BaseServiceImpl.java b/src/main/java/com/budwk/app/base/service/impl/BaseServiceImpl.java index e02fe83f..8d99b411 100644 --- a/src/main/java/com/budwk/app/base/service/impl/BaseServiceImpl.java +++ b/src/main/java/com/budwk/app/base/service/impl/BaseServiceImpl.java @@ -1436,4 +1436,12 @@ public class BaseServiceImpl extends EntityService implements BaseService< re.put("recordsTotal", length); return re; } + + @Override + public NutMap fetchMap(Sql sql) { + sql.setCallback(Sqls.callback.map()); + execute(sql); + NutMap result = (NutMap)sql.getResult(); + return result; + } } diff --git a/src/main/java/com/budwk/app/bpm/param/BpmProcessInstancePageForm.java b/src/main/java/com/budwk/app/bpm/param/BpmProcessInstancePageForm.java index e7b7f8c2..875ea991 100644 --- a/src/main/java/com/budwk/app/bpm/param/BpmProcessInstancePageForm.java +++ b/src/main/java/com/budwk/app/bpm/param/BpmProcessInstancePageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.bpm.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.bpm.models.BpmProcessInstance; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @ApiModel(description = "流程实例查询参数") @Data -public class BpmProcessInstancePageForm extends PageForm { +public class BpmProcessInstancePageForm extends PageForm { @ApiModelProperty("流程实例名称") private String processInstanceName; diff --git a/src/main/java/com/budwk/app/flow/controller/FlowTodoCenter.java b/src/main/java/com/budwk/app/flow/controller/FlowTodoCenterController.java similarity index 98% rename from src/main/java/com/budwk/app/flow/controller/FlowTodoCenter.java rename to src/main/java/com/budwk/app/flow/controller/FlowTodoCenterController.java index 4cf7d75a..4443724f 100644 --- a/src/main/java/com/budwk/app/flow/controller/FlowTodoCenter.java +++ b/src/main/java/com/budwk/app/flow/controller/FlowTodoCenterController.java @@ -25,7 +25,7 @@ import java.util.Map; @IocBean @At("/flow/todoCenter") @Ok("json:full") -public class FlowTodoCenter { +public class FlowTodoCenterController { @Inject private Dao dao; @@ -44,6 +44,7 @@ public class FlowTodoCenter { Sql sql = Sqls.create(""" SELECT t.id AS taskId, + t.taskName AS taskKey, t.displayName AS taskName, t.taskState, t.formKey, @@ -79,6 +80,7 @@ public class FlowTodoCenter { Sql sql = Sqls.create(""" SELECT t.id AS taskId, + t.taskName AS taskKey, t.displayName AS taskName, t.taskState, t.formKey, diff --git a/src/main/java/com/budwk/app/flow/handler/FlowClubPresidentByArgsAssignmentHandler.java b/src/main/java/com/budwk/app/flow/handler/FlowClubPresidentByArgsAssignmentHandler.java new file mode 100644 index 00000000..60ee7a12 --- /dev/null +++ b/src/main/java/com/budwk/app/flow/handler/FlowClubPresidentByArgsAssignmentHandler.java @@ -0,0 +1,41 @@ +package com.budwk.app.flow.handler; + +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.exception.BaseException; +import com.budwk.app.flow.engine.AssignmentHandler; +import com.budwk.app.flow.engine.core.Execution; +import com.budwk.app.flow.engine.core.ServiceContext; +import com.budwk.app.flow.engine.model.TaskModel; +import com.budwk.app.sys.models.Sys_user; +import com.budwk.app.sys.models.Sys_user_role; +import com.budwk.app.web.controllers.open.commons.service.CommonService; + +import java.util.List; + +/** + * 获取协会审批人根据流程变量参数(clubId) 必传 + */ +public class FlowClubPresidentByArgsAssignmentHandler implements AssignmentHandler { + @Override + public List assign(TaskModel model, Execution execution) { + String clubId = execution.getArgs().getStr("clubId"); + if (StrUtil.isBlank(clubId)) { + throw new BaseException("参数 clubId 不能为空"); + } + + CommonService commonService = ServiceContext.find(CommonService.class); + List users = commonService.findUserInfoByRoleCode(Sys_user_role::getClubId, clubId, RoleConstant.CLUB_PRESIDENT); + return users.stream().map(Sys_user::getId).toList(); + } + + @Override + public String getMessage() { + return "获取协会会长(根据args中的clubId)"; + } + + @Override + public int getOrder() { + return AssignmentHandler.super.getOrder(); + } +} diff --git a/src/main/java/com/budwk/app/flow/listenter/ProcessInstanceStartEventListener.java b/src/main/java/com/budwk/app/flow/listenter/ProcessInstanceStartEventListener.java new file mode 100644 index 00000000..95809f28 --- /dev/null +++ b/src/main/java/com/budwk/app/flow/listenter/ProcessInstanceStartEventListener.java @@ -0,0 +1,21 @@ +package com.budwk.app.flow.listenter; + +import com.budwk.app.flow.engine.event.ProcessEvent; +import com.budwk.app.flow.engine.event.ProcessEventListener; +import com.budwk.app.flow.enums.ProcessEventTypeEnum; +import org.nutz.ioc.loader.annotation.IocBean; + +/** + * 流程实例开始事件监听器 + */ +@IocBean +public class ProcessInstanceStartEventListener implements ProcessEventListener { + @Override + public void onEvent(ProcessEvent event) { + // TODO: 可以对接到学校OA的流程实例进行同步 + if (event.getEventType() == ProcessEventTypeEnum.PROCESS_INSTANCE_START) { + Long sourceId = event.getSourceId(); + System.out.println("流程实例开始事件:" + sourceId); + } + } +} diff --git a/src/main/java/com/budwk/app/flow/listenter/ProcessTaskEndEventListener.java b/src/main/java/com/budwk/app/flow/listenter/ProcessTaskEndEventListener.java new file mode 100644 index 00000000..553c49f3 --- /dev/null +++ b/src/main/java/com/budwk/app/flow/listenter/ProcessTaskEndEventListener.java @@ -0,0 +1,28 @@ +package com.budwk.app.flow.listenter; + +import com.budwk.app.flow.engine.event.ProcessEvent; +import com.budwk.app.flow.engine.event.ProcessEventListener; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessEventTypeEnum; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; + +/** + * 流程任务完成事件监听器 + */ +@IocBean +public class ProcessTaskEndEventListener implements ProcessEventListener { + + @Inject + private Dao dao; + + @Override + public void onEvent(ProcessEvent event) { + if (event.getEventType() == ProcessEventTypeEnum.PROCESS_TASK_END) { + Long sourceId = event.getSourceId(); + ProcessTask task = dao.fetch(ProcessTask.class, sourceId); + System.out.println("流程任务完成事件:" + task.getDisplayName()); + } + } +} diff --git a/src/main/java/com/budwk/app/flow/listenter/ProcessTaskStartEventListener.java b/src/main/java/com/budwk/app/flow/listenter/ProcessTaskStartEventListener.java new file mode 100644 index 00000000..fa56f367 --- /dev/null +++ b/src/main/java/com/budwk/app/flow/listenter/ProcessTaskStartEventListener.java @@ -0,0 +1,64 @@ +package com.budwk.app.flow.listenter; + +import cn.hutool.core.util.StrUtil; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.event.ProcessEvent; +import com.budwk.app.flow.engine.event.ProcessEventListener; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.entity.ProcessTaskActor; +import com.budwk.app.flow.enums.ProcessEventTypeEnum; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +/** + * 流程任务开始监听器 + */ +@IocBean +public class ProcessTaskStartEventListener implements ProcessEventListener { + + @Inject + private Dao dao; + + @Override + public void onEvent(ProcessEvent event) { + if (event.getEventType() == ProcessEventTypeEnum.PROCESS_TASK_START) { + Long sourceId = event.getSourceId(); + ProcessTask task = dao.fetch(ProcessTask.class, sourceId); + sendMessage( task); + } + } + + + private void sendMessage(ProcessTask task) { + // 说明是流程开始 用户首次完成任务 + if (task.getTaskParentId() == 0 && task.getTaskName().equals("startTask")) { + return; + } + + // 节点名称 + String taskDisplayName = task.getDisplayName(); + // 实例名称 + Long instanceId = task.getProcessInstanceId(); + ProcessInstance instance = dao.fetch(ProcessInstance.class, instanceId); + String instanceName = Json.fromJson(NutMap.class, instance.getVariable()).getString(FlowConst.PROCESS_INSTANCE_NAME); + + // 任务接收人 + List taskActors = dao.query(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "=", task.getId())); + + for (ProcessTaskActor taskActor : taskActors) { + // 模拟发送消息 + String message = StrUtil.format("{}您有一条待办任务,实例:{},任务:{}", taskActor.getActorName(), instanceName, taskDisplayName); + System.out.println(message); + } + + + } + +} diff --git a/src/main/java/com/budwk/app/sys/param/SysDataUserPullPageForm.java b/src/main/java/com/budwk/app/sys/param/SysDataUserPullPageForm.java index c35614fb..b43b21e3 100644 --- a/src/main/java/com/budwk/app/sys/param/SysDataUserPullPageForm.java +++ b/src/main/java/com/budwk/app/sys/param/SysDataUserPullPageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.sys.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.sys.models.Sys_user_source; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data @ApiModel("用户数据拉取分页参数") -public class SysDataUserPullPageForm extends PageForm { +public class SysDataUserPullPageForm extends PageForm { @ApiModelProperty("拉取日期") private String pullTime; diff --git a/src/main/java/com/budwk/app/sys/param/SysDataUserUpdatePageForm.java b/src/main/java/com/budwk/app/sys/param/SysDataUserUpdatePageForm.java index 580cfca7..b7d6d3c5 100644 --- a/src/main/java/com/budwk/app/sys/param/SysDataUserUpdatePageForm.java +++ b/src/main/java/com/budwk/app/sys/param/SysDataUserUpdatePageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.sys.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.sys.views.View_user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data @ApiModel("用户数据更新分页参数") -public class SysDataUserUpdatePageForm extends PageForm { +public class SysDataUserUpdatePageForm extends PageForm { @ApiModelProperty("姓名") private String userName; diff --git a/src/main/java/com/budwk/app/sys/param/SysHomeActivityPageForm.java b/src/main/java/com/budwk/app/sys/param/SysHomeActivityPageForm.java index 0e466b48..c2e6a60e 100644 --- a/src/main/java/com/budwk/app/sys/param/SysHomeActivityPageForm.java +++ b/src/main/java/com/budwk/app/sys/param/SysHomeActivityPageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.sys.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.sys.models.Sys_home_activity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data @ApiModel("系统首页活动管理查询参数") -public class SysHomeActivityPageForm extends PageForm { +public class SysHomeActivityPageForm extends PageForm { @ApiModelProperty("活动名称") private String name; diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/CommonPageParam.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/CommonPageParam.java index b58e4a19..7f9e45a5 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/CommonPageParam.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/CommonPageParam.java @@ -5,7 +5,6 @@ import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.param.PageForm; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.zhgh.activity.declarereimbursement.declare.models.ActivityDeclareInfo; import com.budwk.app.zhgh.activity.declarereimbursement.enums.ActivityDeclareReimbursement; import io.swagger.annotations.ApiModel; import lombok.Data; @@ -23,7 +22,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup; @Data @ApiModel("通用分页参数") @EqualsAndHashCode(callSuper = true) -public class CommonPageParam extends PageForm { +public class CommonPageParam extends PageForm { private Integer year; diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleClubApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleClubApprovalController.java index dcbbcab5..2539b66d 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleClubApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleClubApprovalController.java @@ -114,6 +114,8 @@ public class ArticleClubApprovalController { } else { cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); sql.setCondition(cnd); Pagination pageVO = articleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pageVO); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleQueryController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleQueryController.java index 89d6e629..c191c596 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleQueryController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleQueryController.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessInstanceStateEnum; import com.budwk.app.zhgh.dayofficework.article.param.ArticleInfoPageParam; import com.budwk.app.zhgh.dayofficework.article.service.ArticleService; import com.budwk.app.zhgh.dayofficework.article.vo.ArticleInfoPageVO; @@ -42,15 +43,34 @@ public class ArticleQueryController { public Result pageData(@Valid ArticleInfoPageParam pageForm) { Sql sql = Sqls.create(""" SELECT - info.*, + info.id, + info.title, + info.userName, + info.loginName, + info.unitName, + info.unionName, + info.submitTime, + info.origin, ins.id AS instanceId, - ins.processDefineId instanceProcessDefineId + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime FROM article info - LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id $condition """); Cnd cnd = Cnd.NEW(); + cnd.and("ins.state","=", ProcessInstanceStateEnum.FINISHED.getCode()); cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear()); if (StrUtil.isNotBlank(pageForm.getTitle())) { cnd.and(Cnd.likeEX("info.title", pageForm.getTitle())); @@ -65,7 +85,6 @@ public class ArticleQueryController { }else{ cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } - cnd.groupBy("info.id"); sql.setCondition(cnd); Pagination pageVO = articleService.listPageVO(pageForm, sql, ArticleInfoPageVO.class); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleWriteController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleWriteController.java index f94981e9..9daa058c 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleWriteController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleWriteController.java @@ -87,6 +87,7 @@ public class ArticleWriteController { args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); args.set(FlowConst.FORM_DATA, article); args.set("origin", article.getOrigin()); + args.set("clubId",article.getClubId()); ProcessInstance instance = flowEngine.startProcessInstanceByKey("XWTG", article.getId(), SecurityUtil.getUserId(), args); // 自动完成第一个申请任务 @@ -109,6 +110,8 @@ public class ArticleWriteController { Dict dict = Dict.create(); dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + dict.set("origin", article.getOrigin()); + dict.set("clubId",article.getClubId()); flowCommonService.executeTask(dict); return Result.success(); } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/param/ArticleInfoPageParam.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/param/ArticleInfoPageParam.java index 0c2a27a7..d59cd719 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/param/ArticleInfoPageParam.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/param/ArticleInfoPageParam.java @@ -1,7 +1,6 @@ package com.budwk.app.zhgh.dayofficework.article.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.zhgh.dayofficework.article.models.Article; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data @ApiModel(value = "稿件分页查询参数") -public class ArticleInfoPageParam extends PageForm
{ +public class ArticleInfoPageParam extends PageForm { @ApiModelProperty("稿件标题") private String title; diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateActivityController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateActivityController.java index b4d8e171..deb8a0ee 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateActivityController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateActivityController.java @@ -58,7 +58,7 @@ public class EvaluateActivityController { @At @SaCheckPermission("evaluation.activity") @ApiOperation("获取评优评先活动列表") - public Result pageData(@Valid PageForm pageForm, Integer year, String searchKeyword) { + public Result pageData(@Valid PageForm pageForm, Integer year, String searchKeyword) { Sql sql = Sqls.create(""" SELECT eva.*, diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/vo/EvaluatePageForm.java b/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/vo/EvaluatePageForm.java index 188d9d20..94ad602b 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/vo/EvaluatePageForm.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/vo/EvaluatePageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.zhgh.dayofficework.evaluation.vo; import com.budwk.app.base.param.PageForm; -import com.budwk.app.zhgh.dayofficework.evaluation.models.EvaluateApply; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @ApiModel("评优评先分页参数") @Data -public class EvaluatePageForm extends PageForm { +public class EvaluatePageForm extends PageForm { @ApiModelProperty("年度") private Integer year; diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/param/GrassrootsCongressPageForm.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/param/GrassrootsCongressPageForm.java index c72b7bf2..38ab256a 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/param/GrassrootsCongressPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/param/GrassrootsCongressPageForm.java @@ -13,7 +13,7 @@ import lombok.EqualsAndHashCode; */ @EqualsAndHashCode(callSuper = true) @Data -public class GrassrootsCongressPageForm extends PageForm { +public class GrassrootsCongressPageForm extends PageForm { private Integer year; diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/export/ProposalExportComprehensiveController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/export/ProposalExportComprehensiveController.java index d7577e8f..21609f7f 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/export/ProposalExportComprehensiveController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/export/ProposalExportComprehensiveController.java @@ -10,6 +10,7 @@ import com.budwk.app.zhgh.democratic.proposal.service.ProposalExportService; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; @@ -48,7 +49,34 @@ public class ProposalExportComprehensiveController { @SaCheckPermission("proposal.query.comprehensive") @ApiOperation(value = "分页列表") public Result pageData(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm) { - Sql sql = proposalExportService.exportComprehensiveSql(pageForm); + Sql sql = Sqls.create(""" + SELECT + info.*, + COUNT(p.consolidationIds) > 0 AS isConsolidation, + type.name AS typeName, + tcs.fullName AS sessionName, + tcd.`name` AS delegationName, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.displayName curTaskName, + JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName, + caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames + FROM + proposal_info info + LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id)) + LEFT JOIN proposal_type type on type.id = info.typeId + LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId + LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId + LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + LEFT JOIN (SELECT processInstanceId, MAX(finishTime) AS finishTime FROM wf_process_task WHERE taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND taskState = 20 GROUP BY processInstanceId) latestTasks ON latestTasks.processInstanceId = ins.id + LEFT JOIN wf_process_task caseTasks ON caseTasks.processInstanceId = ins.id AND caseTasks.taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND caseTasks.taskState = 20 AND caseTasks.finishTime = latestTasks.finishTime + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + $condition + """); Cnd cnd = Cnd.NEW(); ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm); cnd.groupBy("info.id"); @@ -60,10 +88,10 @@ public class ProposalExportComprehensiveController { @At @Ok("void") - @ApiOperation("导出提案汇总表excel") + @ApiOperation("导出汇总表excel") @SaCheckPermission("proposal.query.comprehensive") - public void exportProposalSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){ - proposalExportService.exportProposalSummaryAsExcel(pageForm, response); + public void exportSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){ + proposalExportService.exportSummaryAsExcel(pageForm, response); } @@ -91,4 +119,12 @@ public class ProposalExportComprehensiveController { proposalExportService.exportFeedBackAsZip(pageForm, response); } + @At + @Ok("void") + @ApiOperation("导出征集表ZIP") + @SaCheckPermission("proposal.query.comprehensive") + public void exportCollectZip(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){ + proposalExportService.exportCollectZip(pageForm, response); + } + } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryComprehensiveController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryComprehensiveController.java index e1373c54..7e233ae2 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryComprehensiveController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryComprehensiveController.java @@ -60,7 +60,7 @@ public class ProposalQueryComprehensiveController { ins.processDefineId instanceProcessDefineId, t.displayName curTaskName, JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName, - JSON_EXTRACT(caseTasks.variable, '$.tf_helpUnitNames') AS slaveUnitNames + caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames FROM proposal_info info LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id)) diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryHistoryController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryHistoryController.java index e536676f..00363d62 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryHistoryController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryHistoryController.java @@ -53,7 +53,7 @@ public class ProposalQueryHistoryController { ins.processDefineId instanceProcessDefineId, t.displayName curTaskName, JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName, - JSON_EXTRACT(caseTasks.variable, '$.tf_helpUnitNames') AS slaveUnitNames + caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames FROM proposal_info info LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id)) diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryUnitReplyController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryUnitReplyController.java index 8b390f1a..5c8f090f 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryUnitReplyController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryUnitReplyController.java @@ -91,11 +91,12 @@ public class ProposalQueryUnitReplyController { for (String underTakeId : underTakeIds) { NutMap tableRow = NutMap.NEW(); tableRow.put("id", underTakeId); + if(undertakeMap.get(underTakeId) == null){ + continue; + } tableRow.put("name", undertakeMap.get(underTakeId).getName()); //找出承办提案总数 -// long sum = caseTasks.stream().filter(v -> (Json.fromJson(NutMap.class, v.getVariable())).getString("tf_hostUnitId").equals(underTakeId) || (Json.fromJson(NutMap.class, v.getVariable())).getAsList("helpUnitIds", String.class).contains(underTakeId)).map(ProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size(); - long sum = caseTasks.stream() .filter(v -> { NutMap variable = Json.fromJson(NutMap.class, v.getVariable()); @@ -115,17 +116,22 @@ public class ProposalQueryUnitReplyController { .distinct() .count(); - //找出主办提案数量 + // 主办提案数量 long hostSum = masterUnitTasks.stream().map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && variable.getBoolean("isMaster")).count(); - //主办已答复的数量 + // 主办已答复的数量 long hostReplySum = masterUnitTasks.stream().filter(v -> Objects.equals(v.getTaskState(), ProcessTaskStateEnum.FINISHED.getCode())).map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && variable.getBoolean("isMaster")).count(); - //主办未答复的数量 + // 主办未答复的数量 long hostNoReplySum = hostSum - hostReplySum; + + // 协办提案数量 + long slaveSum = slaveUnitTasks.stream().map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && !variable.getBoolean("isMaster")).count(); + tableRow.put("sum", sum); tableRow.put("hostSum", hostSum); tableRow.put("hostReplySum", hostReplySum); tableRow.put("hostNoReplySum", hostNoReplySum); + tableRow.put("slaveSum", slaveSum); // if (slaveNeedReply) { // //协办提案数量 diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/models/ProposalInfo.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/models/ProposalInfo.java index 5416a698..0f43d33c 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/models/ProposalInfo.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/models/ProposalInfo.java @@ -112,6 +112,11 @@ public class ProposalInfo extends BaseModel { @ColDefine(type = ColType.TEXT) private String excerpt; + @Column + @Comment("调研情况") + @ColDefine(type = ColType.TEXT) + private String researchFindings; + @Column @Comment("案由") @ColDefine(type = ColType.TEXT) diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalSearchParam.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalSearchParam.java index cf7f4dea..acc8d40b 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalSearchParam.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalSearchParam.java @@ -3,7 +3,6 @@ package com.budwk.app.zhgh.democratic.proposal.param; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.utils.PageUtil; -import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo; import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.Cnd; @@ -13,7 +12,7 @@ import org.nutz.dao.Cnd; */ @EqualsAndHashCode(callSuper = true) @Data -public class ProposalSearchParam extends PageForm { +public class ProposalSearchParam extends PageForm { private String name; private String code; diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/ProposalExportService.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/ProposalExportService.java index 068e4dc8..3f0c9d51 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/ProposalExportService.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/ProposalExportService.java @@ -6,6 +6,7 @@ import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensivePa import org.nutz.dao.sql.Sql; import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; /** * @version 1.0 @@ -18,6 +19,7 @@ public interface ProposalExportService extends BaseService { /** * 某些页面的公共SQL,用于导出或者综合查询 + * * @param pageForm * @return */ @@ -25,13 +27,15 @@ public interface ProposalExportService extends BaseService { /** * 导出提案汇总表excel + * * @param pageForm * @param response */ - void exportProposalSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response); + void exportSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response); /** * 导出提案立案汇总表excel + * * @param pageForm * @param response */ @@ -39,6 +43,7 @@ public interface ProposalExportService extends BaseService { /** * 导出提案统计表zip + * * @param pageForm * @param response */ @@ -46,8 +51,25 @@ public interface ProposalExportService extends BaseService { /** * 导出反馈表 + * * @param pageForm * @param response */ void exportFeedBackAsZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response); + + + /** + * 导出征集表docx + * @param id + * @param byteArrayOutputStream + */ + void exportCollectDocx(String id, ByteArrayOutputStream byteArrayOutputStream); + + /** + * 导出征集表zip + * + * @param pageForm + * @param response + */ + void exportCollectZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response); } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonService.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonService.java index af8eccb5..90d9b39d 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonService.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonService.java @@ -32,6 +32,14 @@ public interface ProposalCommonService extends BaseService { */ void exportProposalFeedBackAsDocx(String id,ByteArrayOutputStream byteArrayOutputStream); + + /** + * 导出征集表 + * @param id + * @param byteArrayOutputStream + */ + void exportCollectAsDocx(String id, ByteArrayOutputStream byteArrayOutputStream); + /** * 根据提案id查询团长 * diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonServiceImpl.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonServiceImpl.java index b5dc92e3..794e1abb 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonServiceImpl.java @@ -18,11 +18,17 @@ import com.budwk.app.bpm.models.BpmProcessTask; import com.budwk.app.bpm.service.BpmService; import com.budwk.app.bpm.vo.BpmProcessTaskVo; import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessInstanceStateEnum; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.sys.models.Sys_role; import com.budwk.app.sys.models.Sys_user; import com.budwk.app.sys.models.Sys_user_role; import com.budwk.app.sys.services.SysRoleService; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.web.commons.base.Globals; import com.budwk.app.zhgh.democratic.proposal.models.ProposalConsolidation; import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo; import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session; @@ -204,187 +210,6 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl imp docData.put("info", info); - //查询附议人信息 - BpmProcessInstance bpmProcessInstance = dao().fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", id)); - BpmProcessTask lastestWriteTask = dao().fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", bpmProcessInstance.getId()) - .and(BpmProcessTask::getTaskStatus, "=", BpmProcessTaskStatusEnum.COMPLETE.name()) - .and(BpmProcessTask::getProcessTaskNodeCode, "=", 10) - .and(BpmProcessTask::getDelFlag, "=", 0) - .desc(BpmProcessTask::getEndOn) - ); - - if (ObjectUtil.isNotEmpty(lastestWriteTask)) { - String lastestWriteTaskId = lastestWriteTask.getId(); - List seconderTasks = dao().query(BpmProcessTask.class, Cnd.where(BpmProcessTask::getPrevTaskId, "=", lastestWriteTaskId) - .and(BpmProcessTask::getProcessInstanceId, "=", bpmProcessInstance.getId()) - .and(BpmProcessTask::getTaskStatus, "!=", BpmProcessTaskStatusEnum.REVOKE.name()) - .and(BpmProcessTask::getDelFlag, "=", 0) - .asc(BpmProcessTask::getCreatedOn) - ); - List> seconders = seconderTasks.stream().filter(v -> v.getTaskStatus().equals(BpmProcessTaskStatusEnum.COMPLETE.name()) && ObjectUtil.isNotEmpty(v.getExtVariable().getStr("bpmTaskApprovalType").equals("PASS"))).map(v -> { - HashMap seconderApproval = new HashMap<>(); - seconderApproval.put("userName", v.getCreateVariable().getStr("userName")); - seconderApproval.put("loginName", v.getCreateVariable().getStr("loginName")); - seconderApproval.put("unitName", v.getCreateVariable().getStr("unitName")); - return seconderApproval; - }).toList(); - - docData.put("seconders", seconders); - } - - //审批记录 - List nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.PROPOSAL, id); - - //团长审核 - nodeTasks.stream().filter(v -> v.getNodeCode() == 30) - .flatMap(v -> v.getTasks().stream()) - .max(Comparator.comparing(BpmProcessTaskVo::getEndOn)) - .ifPresent(v -> { - HashMap delegationApproval = new HashMap<>(); - delegationApproval.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); - delegationApproval.put("user", v.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v.getExtVariable())) { - delegationApproval.put("opinion", v.getExtVariable().getStr("approvalOpinion")); - delegationApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature"))); - } - docData.put("tz", delegationApproval); - }); - - //委员会立案 - nodeTasks.stream().filter(v -> v.getNodeCode() == 60) - .flatMap(v -> v.getTasks().stream()) - .max(Comparator.comparing(BpmProcessTaskVo::getEndOn)) - .ifPresent(v -> { - HashMap committeeApproval = new HashMap<>(); - committeeApproval.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); - committeeApproval.put("user", v.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v.getExtVariable())) { - committeeApproval.put("opinion", v.getExtVariable().getStr("approvalOpinion")); - committeeApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature"))); - committeeApproval.put("hostUnit", v.getExtVariable().getStr("hostUnit")); - if (ObjectUtil.isNotEmpty(v.getExtVariable().getBeanList("helpUnits", String.class))) { - committeeApproval.put("helpUnits", String.join("、", v.getExtVariable().getBeanList("helpUnits", String.class))); - } - } - docData.put("wyh", committeeApproval); - }); - - //委员会确认承办单位 - nodeTasks.stream().filter(v -> v.getNodeCode() == 70) - .flatMap(v -> v.getTasks().stream()) - .max(Comparator.comparing(BpmProcessTaskVo::getEndOn)) - .ifPresent(v -> { - HashMap committeeConfirm = new HashMap<>(); - committeeConfirm.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); - committeeConfirm.put("user", v.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v.getExtVariable())) { - committeeConfirm.put("opinion", v.getExtVariable().getStr("approvalOpinion")); - committeeConfirm.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature"))); - committeeConfirm.put("hostUnit", v.getExtVariable().getStr("hostUnit")); - if (ObjectUtil.isNotEmpty(v.getExtVariable().getBeanList("helpUnits", String.class))) { - committeeConfirm.put("helpUnits", String.join("、", v.getExtVariable().getBeanList("helpUnits", String.class))); - } - } - docData.put("wyhConfirm", committeeConfirm); - }); - - //主办单位答复 - nodeTasks.stream().filter(v -> v.getNodeCode() == 80) - .flatMap(v -> v.getTasks().stream()) - .filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && v1.getCreateVariable().getBool("isMaster")) - .max(Comparator.comparing(BpmProcessTaskVo::getEndOn)) - .ifPresent(v -> { - HashMap masterUnderTakeReply = new HashMap<>(); - masterUnderTakeReply.put("name", v.getCreateVariable().getStr("underTakeName")); - masterUnderTakeReply.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); - masterUnderTakeReply.put("user", v.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v.getExtVariable())) { - masterUnderTakeReply.put("opinion", v.getExtVariable().getStr("approvalOpinion")); - masterUnderTakeReply.put("implementState", v.getExtVariable().getStr("implementState")); - masterUnderTakeReply.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature"))); - } - docData.put("zbdf", masterUnderTakeReply); - }); - - //协办单位答复 - List> slaveUnderTakeReplyList = new ArrayList<>(); - nodeTasks.stream().filter(v -> v.getNodeCode() == 80).flatMap(v -> v.getTasks().stream()) - .filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && !v1.getCreateVariable().getBool("isMaster")) - .collect(Collectors.groupingBy(v1 -> v1.getCreateVariable().getStr("underTakeId"))) - .forEach((k, v1) -> { - v1.stream().max(Comparator.comparing(BpmProcessTask::getEndOn)).ifPresent(v2 -> { - HashMap slaveUnderTakeReply = new HashMap<>(); - slaveUnderTakeReply.put("name", v2.getCreateVariable().getStr("underTakeName")); - slaveUnderTakeReply.put("date", DateUtil.format(v2.getEndOn(), "yyyy年MM月dd日")); - slaveUnderTakeReply.put("user", v2.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v2.getExtVariable())) { - slaveUnderTakeReply.put("opinion",HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(v2.getExtVariable().getStr("approvalOpinion"), ""))); - slaveUnderTakeReply.put("implementState", v2.getExtVariable().getStr("implementState")); - slaveUnderTakeReply.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v2.getExtVariable().getStr("approvalSignature"))); - } - slaveUnderTakeReplyList.add(slaveUnderTakeReply); - }); - }); - docData.put("xbdf", slaveUnderTakeReplyList); - - //主办校领导审批 - nodeTasks.stream().filter(v -> v.getNodeCode() == 90) - .flatMap(v -> v.getTasks().stream()) - .filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && v1.getCreateVariable().getBool("isMaster")) - .max(Comparator.comparing(BpmProcessTaskVo::getEndOn)) - .ifPresent(v -> { - HashMap masterLeaderApproval = new HashMap<>(); - masterLeaderApproval.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); - masterLeaderApproval.put("user", v.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v.getExtVariable())) { - masterLeaderApproval.put("opinion", v.getExtVariable().getStr("approvalOpinion")); - masterLeaderApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature"))); - } - docData.put("zbldsp", masterLeaderApproval); - }); - - List> slaveLeaderApprovalList = new ArrayList<>(); - - //协办校领导审批 - nodeTasks.stream().filter(v -> v.getNodeCode() == 90).flatMap(v -> v.getTasks().stream()) - .filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && !v1.getCreateVariable().getBool("isMaster")) - .collect(Collectors.groupingBy(v1 -> v1.getCreateVariable().getStr("underTakeId"))) - .forEach((k, v1) -> { - v1.stream().max(Comparator.comparing(BpmProcessTask::getEndOn)).ifPresent(v2 -> { - HashMap slaveLeaderApproval = new HashMap<>(); - slaveLeaderApproval.put("name", v2.getCreateVariable().getStr("underTakeName")); - slaveLeaderApproval.put("date", DateUtil.format(v2.getEndOn(), "yyyy年MM月dd日")); - slaveLeaderApproval.put("user", v2.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v2.getExtVariable())) { - slaveLeaderApproval.put("opinion", v2.getExtVariable().getStr("approvalOpinion")); - slaveLeaderApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v2.getExtVariable().getStr("approvalSignature"))); - } - slaveLeaderApprovalList.add(slaveLeaderApproval); - }); - }); - docData.put("xbldsp", slaveLeaderApprovalList); - - //反馈评分 - nodeTasks.stream().filter(v -> v.getNodeCode() == 100) - .flatMap(v -> v.getTasks().stream()) - .max(Comparator.comparing(BpmProcessTaskVo::getEndOn)) - .ifPresent(v -> { - HashMap feedbackScore = new HashMap<>(); - feedbackScore.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); - feedbackScore.put("user", v.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v.getExtVariable())) { - feedbackScore.put("opinion", v.getExtVariable().getStr("approvalOpinion")); - String feedBackScore = v.getExtVariable().getStr("feedBackScore", ""); - feedbackScore.put("manyi", feedBackScore.equals("满意") ? "√" : ""); - feedbackScore.put("jibenmanyi", feedBackScore.equals("基本满意") ? "√" : ""); - feedbackScore.put("bumanyi", feedBackScore.equals("不满意") ? "√" : ""); - } - docData.put("fk", feedbackScore); - }); - - AttachmentRenderData attachmentRenderData = Attachments.ofLocal("C:\\Users\\zxy\\Desktop\\1.七届二次教代会提案反馈表(xxx部门).docx").create(); - docData.put("attachment", attachmentRenderData); - LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy(); htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true); @@ -517,6 +342,80 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl imp } } + @Override + public void exportCollectAsDocx(String id, ByteArrayOutputStream byteArrayOutputStream) { + if (id == null || id.isEmpty()) { + throw new BaseException("提案信息不存在"); + } + + //基本信息 + Sql sql = Sqls.create(""" + SELECT + info.name, + info.code, + info.researchFindings, + info.brief, + info.measures, + info.createUserName, + tcde.unitName, + tcde.mobile, + type.name AS typeName, + tcs.j, + tcs.c, + tcs.fullName AS sessionName, + tcd.`name` AS delegationName + FROM + proposal_info info + LEFT JOIN proposal_type type on type.id = info.typeId + LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId + LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId + LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName + WHERE info.id = @id + """).setParam("id", id); + sql.setCallback(Sqls.callback.map()); + execute(sql); + NutMap info = (NutMap) sql.getResult(); + HashMap docData = new HashMap<>(info); + + //处理下富文本 + String brief = info.getString("brief"); + String measures = info.getString("measures"); + info.put("brief", sysOfficeTemplateUtil.convertRichTextToDocText(brief)); + info.put("measures", sysOfficeTemplateUtil.convertRichTextToDocText(measures)); + + // 高校 + info.put("schoolName", Globals.AppName); + + // 附议人信息 + ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", id)); + + // 查询附议人信息 + ProcessTask inviteTask = dao().fetch(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId()) + .and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819") + .and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode())) + .desc(ProcessTask::getCreatedAt)); + NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable()); + List seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class); + docData.put("seconders", seconders); + + LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); + HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy(); + htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true); + + Configure config = Configure.builder() + .bind("seconders", policy) + .bind("brief", htmlRenderPolicy) + .bind("measures", htmlRenderPolicy) + .build(); + + try { + XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("proposal"), config).render(docData).writeAndClose(byteArrayOutputStream); + } catch (IOException e) { + log.error("提案导出失败{},提案id:{}", e.getMessage(), id); + } + + } + @Override public String getDelegationHeadByProposalId(String proposalId) { ProposalInfo proposalInfo = dao().fetch(ProposalInfo.class, proposalId); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalExportServiceImpl.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalExportServiceImpl.java index b15e3594..01076f66 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalExportServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalExportServiceImpl.java @@ -8,40 +8,52 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.http.HtmlUtil; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.base.utils.SysOfficeTemplateUtil; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.base.Globals; import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo; import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam; import com.budwk.app.zhgh.democratic.proposal.service.ProposalExportService; import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService; import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; +import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Workbook; +import org.ddr.poi.html.HtmlRenderPolicy; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; import org.nutz.lang.util.NutMap; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -/** - * @version 1.0 - * @Author zzr - * @name:ProposalExportServiceImpl - * @Date 2024/10/10 10:28 - * @注释 - */ @IocBean(args = {"refer:dao"}) +@Slf4j public class ProposalExportServiceImpl extends BaseServiceImpl implements ProposalExportService { @Inject private ProposalCommonService proposalCommonService; + @Inject + private SysOfficeTemplateUtil sysOfficeTemplateUtil; + public ProposalExportServiceImpl(Dao dao) { super(dao); @@ -139,37 +151,77 @@ public class ProposalExportServiceImpl extends BaseServiceImpl imp } @Override - public void exportProposalSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) { - // 自定义导出 excel - Sql sql = exportComprehensiveSql(pageForm); + public void exportSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) { + // 基本信息查询 + Sql sql = Sqls.create(""" + SELECT + info.id, + info.name, + info.code, + info.researchFindings, + info.brief, + info.measures, + info.createUserName, + tcde.unitName, + tcde.mobile, + type.name AS typeName, + tcs.j, + tcs.c, + tcs.fullName AS sessionName, + tcd.`name` AS delegationName + FROM + proposal_info info + LEFT JOIN proposal_type type on type.id = info.typeId + LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId + LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId + LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName + $condition + """); Cnd cnd = Cnd.NEW(); ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm); cnd.groupBy("info.id"); sql.setCondition(cnd); // 导出的数据 List list = listMap(sql); - for (NutMap row : list) { - String content = HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(row.getString("masterUnderTakeReply"), "")); - row.put("masterUnderTakeReply", content); + // 添加序号,去除富文本,获取附议人 + for (int i = 0; i < list.size(); i++) { + list.get(i).put("index", i + 1); + list.get(i).put("brief",HtmlUtil.cleanHtmlTag(list.get(i).getString("brief"))); + list.get(i).put("measures",HtmlUtil.cleanHtmlTag(list.get(i).getString("measures"))); + + // 流程实例 + ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", list.get(i).getString("id"))); + + // 查询附议人信息 + ProcessTask inviteTask = dao().fetch(ProcessTask.class, + Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId()) + .and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819") + .and(ProcessTask::getTaskState, "in", + List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode())) + .desc(ProcessTask::getCreatedAt)); + + if (inviteTask != null) { + NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable()); + List seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class); + list.get(i).put("secondedUserNames", seconders.stream().map(v->v.getString("userName")).collect(Collectors.joining(","))); + } } List exportEntities = new ArrayList<>(); + exportEntities.add(new ExcelExportEntity("序号", "index", 10)); exportEntities.add(new ExcelExportEntity("提案编号", "code", 20)); exportEntities.add(new ExcelExportEntity("提案名称", "name", 20)); - exportEntities.add(new ExcelExportEntity("提案类别", "typeName", 20)); - exportEntities.add(new ExcelExportEntity("提案摘要", "excerpt", 100)); - exportEntities.add(new ExcelExportEntity("单位", "unitName", 20)); + exportEntities.add(new ExcelExportEntity("提案案由", "brief", 40)); + exportEntities.add(new ExcelExportEntity("代表调研情况", "researchFindings", 40)); + exportEntities.add(new ExcelExportEntity("代表建议措施", "measures", 40)); exportEntities.add(new ExcelExportEntity("提案人", "createUserName", 20)); - exportEntities.add(new ExcelExportEntity("附议人", "secondedUserNames", 40)); - exportEntities.add(new ExcelExportEntity("立案结果", "caseFilingResultName", 20)); - exportEntities.add(new ExcelExportEntity("主办单位", "masterUnderTakeName", 20)); - exportEntities.add(new ExcelExportEntity("协办单位", "slaveUnderTakeNamesStr", 30)); - exportEntities.add(new ExcelExportEntity("承办单位答复", "masterUnderTakeReply", 30)); - exportEntities.add(new ExcelExportEntity("备注", "remark", 30)); - exportEntities.add(new ExcelExportEntity("提案状态", "processInstanceNodeName", 20)); + exportEntities.add(new ExcelExportEntity("提案人电话", "mobile", 20)); + exportEntities.add(new ExcelExportEntity("附议人(两名)", "secondedUserNames", 20)); + exportEntities.add(new ExcelExportEntity("提案单位", "unitName", 20)); + exportEntities.add(new ExcelExportEntity("拟交办单位", "", 20)); Teacher_congress_session session = dao().fetch(Teacher_congress_session.class, pageForm.getSessionId()); - String title = StrUtil.format("第{}届教职工代表大会第{}次会议提案汇总表", session.getJ(), session.getC()); + String title = StrUtil.format("{}第{}{}教代会提案征集汇总表", Globals.AppName, session.getJ(), session.getC()); ExportParams exportParams = new ExportParams(); exportParams.setType(ExcelType.XSSF); @@ -324,6 +376,129 @@ public class ProposalExportServiceImpl extends BaseServiceImpl imp } catch (Exception e) { e.printStackTrace(); } + } + + @Override + public void exportCollectDocx(String id, ByteArrayOutputStream byteArrayOutputStream) { + // 基本信息查询 + Sql sql = Sqls.create(""" + SELECT + info.name, + info.code, + info.researchFindings, + info.brief, + info.measures, + info.createUserName, + tcde.unitName, + tcde.mobile, + type.name AS typeName, + tcs.j, + tcs.c, + tcs.fullName AS sessionName, + tcd.`name` AS delegationName + FROM + proposal_info info + LEFT JOIN proposal_type type on type.id = info.typeId + LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId + LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId + LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName + WHERE info.id = @id + """).setParam("id", id); + sql.setCallback(Sqls.callback.map()); + execute(sql); + + NutMap info = (NutMap) sql.getResult(); + // 处理富文本内容 + info.put("brief", sysOfficeTemplateUtil.convertRichTextToDocText(info.getString("brief"))); + info.put("measures", sysOfficeTemplateUtil.convertRichTextToDocText(info.getString("measures"))); + + // 添加高校信息 + info.put("schoolName", Globals.AppName); + + // 创建docData,直接复用info中的数据 + HashMap docData = new HashMap<>(info); + + // 流程实例 + ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", id)); + + if (instance != null) { + // 查询附议人信息 + ProcessTask inviteTask = dao().fetch(ProcessTask.class, + Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId()) + .and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819") + .and(ProcessTask::getTaskState, "in", + List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode())) + .desc(ProcessTask::getCreatedAt)); + + if (inviteTask != null) { + NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable()); + if (variable != null) { + List seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class); + docData.put("seconders", seconders != null ? seconders : Collections.emptyList()); + } + } + } + + // 配置渲染策略 + LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); + HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy(); + htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true); + + Configure config = Configure.builder() + .bind("seconders", policy) + .bind("brief", htmlRenderPolicy) + .bind("measures", htmlRenderPolicy) + .build(); + + try { + XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("proposal_collect"), config) + .render(docData) + .writeAndClose(byteArrayOutputStream); + } catch (IOException e) { + log.error("提案导出失败,提案id:{},错误信息:{}", id, e.getMessage()); + } } + + @Override + public void exportCollectZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.code, + info.name + FROM + proposal_info info + LEFT JOIN proposal_type type on type.id = info.typeId + LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId + LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId + LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName + $condition + """); + Cnd cnd = Cnd.NEW(); + ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm); + sql.setCondition(cnd); + List list = listMap(sql); + + try { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ZipOutputStream zipOutputStream = new ZipOutputStream(bos); + for (NutMap proposalRow : list) { + try (ByteArrayOutputStream docxByteArrayOutputStream = new ByteArrayOutputStream()) { + exportCollectDocx(proposalRow.getString("id"), docxByteArrayOutputStream); + ZipEntry zipEntry = new ZipEntry("征集表-" + proposalRow.getString("code") + "-" + proposalRow.getString("name") + ".docx"); + zipOutputStream.putNextEntry(zipEntry); + docxByteArrayOutputStream.writeTo(zipOutputStream); + zipOutputStream.closeEntry(); + } catch (IOException e) { + // 处理单个文件生成失败的情况 + e.printStackTrace(); + } + } + zipOutputStream.close(); + CommonDownloadUtil.download("提案征集表压缩包.zip", bos.toByteArray(), response); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestion/param/SuggestionSearchParam.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestion/param/SuggestionSearchParam.java index 3d4e0785..c6339a9d 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestion/param/SuggestionSearchParam.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/suggestion/param/SuggestionSearchParam.java @@ -3,7 +3,6 @@ package com.budwk.app.zhgh.democratic.suggestion.param; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.utils.PageUtil; -import com.budwk.app.zhgh.democratic.suggestion.models.SuggestionInfo; import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.Cnd; @@ -13,7 +12,7 @@ import org.nutz.dao.Cnd; */ @EqualsAndHashCode(callSuper = true) @Data -public class SuggestionSearchParam extends PageForm { +public class SuggestionSearchParam extends PageForm { private String name; private String code; diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionXghController.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionXghController.java index e4dd2061..12fd8278 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionXghController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionXghController.java @@ -10,6 +10,7 @@ import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.democratic.suggestionBox.service.SuggestionBoxService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.nutz.dao.Cnd; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; @@ -18,7 +19,9 @@ import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; +import javax.validation.Valid; import java.util.List; @IocBean @@ -39,7 +42,7 @@ public class SuggestionXghController { @At @SaCheckLogin - public Result pageData(PageForm pageForm, String title, Integer year, boolean approval) { + public Result pageData(PageForm pageForm, String taskId, String title, Integer year, boolean approval) { Sql sql = Sqls.create(""" SELECT info.id, @@ -99,5 +102,46 @@ public class SuggestionXghController { return Result.success(pageVO); } - + @At + @SaCheckLogin + @ApiOperation("查询任务") + public Result queryTask(@Valid @Param("taskId") String taskId) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.title, + info.userName, + info.loginName, + info.unitName, + info.unionName, + info.submitTime, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN suggestion_box info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + WHERE t.id = @taskId + """); + sql.setParam("taskId", taskId); + NutMap data = suggestionBoxService.fetchMap(sql); + return Result.success(data); + } } diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/vo/DifficultHelpPageParam.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/vo/DifficultHelpPageParam.java index 1f5e65ef..888278b8 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/vo/DifficultHelpPageParam.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/vo/DifficultHelpPageParam.java @@ -5,7 +5,6 @@ import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.param.PageForm; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.zhgh.staffbenefit.difficulthelp.models.DifficultHelpInfo; import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.Cnd; @@ -23,7 +22,7 @@ import java.util.List; */ @Data @EqualsAndHashCode(callSuper = true) -public class DifficultHelpPageParam extends PageForm { +public class DifficultHelpPageParam extends PageForm { private String year; diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberApplyPageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberApplyPageForm.java index 56ebdc47..e1e8fd6f 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberApplyPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberApplyPageForm.java @@ -2,7 +2,6 @@ package com.budwk.app.zhgh.staffmanage.member.param.pageform; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.param.PageForm; -import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord; import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.Cnd; @@ -17,7 +16,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup; */ @Data @EqualsAndHashCode(callSuper = true) -public class MemberApplyPageForm extends PageForm { +public class MemberApplyPageForm extends PageForm { private String unionId; diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberChangePageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberChangePageForm.java index 0522a4c0..f6ae3c32 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberChangePageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberChangePageForm.java @@ -2,7 +2,6 @@ package com.budwk.app.zhgh.staffmanage.member.param.pageform; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.param.PageForm; -import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -18,7 +17,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup; */ @Data @EqualsAndHashCode(callSuper = true) -public class MemberChangePageForm extends PageForm { +public class MemberChangePageForm extends PageForm { // 工会id @ApiModelProperty("工会id") diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/sourcechange/param/SourceChangePageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/sourcechange/param/SourceChangePageForm.java index 2fb56312..493fc088 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/sourcechange/param/SourceChangePageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/sourcechange/param/SourceChangePageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.zhgh.staffmanage.sourcechange.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.sys.models.Sys_user_history; import lombok.Data; import lombok.EqualsAndHashCode; @@ -16,7 +15,7 @@ import java.util.List; */ @EqualsAndHashCode(callSuper = true) @Data -public class SourceChangePageForm extends PageForm { +public class SourceChangePageForm extends PageForm { private String unionId; diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/specialstaff/param/SpecialStaffPageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/specialstaff/param/SpecialStaffPageForm.java index 6491de2e..7dec0016 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/specialstaff/param/SpecialStaffPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/specialstaff/param/SpecialStaffPageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.zhgh.staffmanage.specialstaff.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff; import lombok.Data; import lombok.EqualsAndHashCode; @@ -14,7 +13,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper = true) -public class SpecialStaffPageForm extends PageForm { +public class SpecialStaffPageForm extends PageForm { private String unionId; diff --git a/src/main/resources/static/assets/platform/js/mixin/flowMixins.js b/src/main/resources/static/assets/platform/js/mixin/flowMixins.js new file mode 100644 index 00000000..b2a92fe9 --- /dev/null +++ b/src/main/resources/static/assets/platform/js/mixin/flowMixins.js @@ -0,0 +1,46 @@ +const flowMixins = { + created() { + this.$nextTick(async ()=>{ + await httpVueLoader("/components/plugins/Guava.vue?v=" + new Date().getTime())() + this.checkFlowTask(); + }) + }, + methods: { + checkFlowTask() { + const taskId = GetQueryString("taskId") + if (!taskId) return + + // 如果是开始任务,用户自己处理(编辑、删除、撤销等等) + const taskKey = GetQueryString("taskKey") + if (taskKey === 'startTask') return; + + // 增加loading动画 + const loading = this.$loading({ + lock: true, + text: 'Loading', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }); + + console.log(this.$refs) + console.log(this.$refs.guava) + + // this.oepnAudit({}) + // + // + // this.$axios.post(location.pathname + '/queryTask', {taskId}).then(res => { + // if (res.code === 0) { + // // 延迟1.5秒 显示loading动画 解决Guava异步加载 获取不到实例的问题 + // setTimeout(() => { + // if (res.data.taskState === 10) { + // this.openAudit(res.data); + // } else { + // this.openView(res.data); + // } + // loading.close(); + // }, 1500) + // } + // }) + }, + } +} diff --git a/src/main/resources/views/layouts/v4/baseLayout.html b/src/main/resources/views/layouts/v4/baseLayout.html index 667eb77e..7362177b 100644 --- a/src/main/resources/views/layouts/v4/baseLayout.html +++ b/src/main/resources/views/layouts/v4/baseLayout.html @@ -81,6 +81,7 @@ + diff --git a/src/main/resources/views/platform/flow/todoCenter/index.html b/src/main/resources/views/platform/flow/todoCenter/index.html index 3b4a8513..3bf71527 100644 --- a/src/main/resources/views/platform/flow/todoCenter/index.html +++ b/src/main/resources/views/platform/flow/todoCenter/index.html @@ -254,7 +254,8 @@ layout("/layouts/v4/baseLayout.html"){ - @@ -478,13 +479,13 @@ layout("/layouts/v4/baseLayout.html"){ // 处理任务 async openView(task) { - const {taskId, taskState, instanceId, businessNo} = task - // if (taskState === this.taskStateEnum.DOING) { - // window.open("/flow/common/approval/form?instanceId=" + instanceId + "&taskId=" + taskId + "&businessId=" + businessNo) - // } else { - // window.open("/flow/common/approval/form?instanceId=" + instanceId + "&businessId=" + businessNo) - // } - this.$message.error("功能开发中...") + console.log(task) + const {taskId, taskKey, taskState, instanceId, businessNo, formKey} = task + if (!formKey) { + this.$message.warning("当前流程没有配置地址") + return + } + window.open(formKey + "?taskId=" + taskId + "bizId=" + businessNo + "taskKey=" + taskKey) }, // 获取空状态文本 diff --git a/src/main/resources/views/platform/zhgh/dayofficework/article/clubApproval/index.html b/src/main/resources/views/platform/zhgh/dayofficework/article/clubApproval/index.html index 0476a0b4..0e49e604 100644 --- a/src/main/resources/views/platform/zhgh/dayofficework/article/clubApproval/index.html +++ b/src/main/resources/views/platform/zhgh/dayofficework/article/clubApproval/index.html @@ -7,7 +7,14 @@ layout("/layouts/platform.html"){ - + @@ -28,22 +35,20 @@ layout("/layouts/platform.html"){ - - - + + + + + @@ -51,21 +56,27 @@ layout("/layouts/platform.html"){ - - - - + + + + + +