From 49a29dab7bef4d4458be078f1d4344319a185268 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: Wed, 15 Oct 2025 10:33:33 +0800 Subject: [PATCH] .. --- .../flow/controller/FlowDefineController.java | 1 + ...ndMemberBranchUnionApprovalController.java | 99 +++ .../FundMemberCommonController.java | 94 +++ .../controller/FundMemberMineController.java | 96 +++ .../controller/FundMemberQueryController.java | 83 +++ ...ndMemberSchoolUnionApprovalController.java | 97 +++ .../controller/FundMemberWriteController.java | 106 +++ .../dayofficework/fund/models/FundMember.java | 90 +++ .../fund/service/FundMemberService.java | 7 + .../service/impl/FundMemberServiceImpl.java | 14 + ...tsCongressMeetingStatisticsController.java | 7 +- .../models/GrassrootsCongressMeetingInfo.java | 1 + .../ProposalDashboardController.java | 38 +- ...roposalQueryCollectProgressController.java | 49 +- .../ProposalCommissionerController.java | 107 +++ .../ProposalMasterUnitAssignmentHandler.java | 2 +- .../models/ProposalCommissionerOpinion.java | 57 ++ .../ProposalQueryComprehensiveParam.java | 3 + .../proposal/param/ProposalSearchParam.java | 14 +- .../common/ProposalCommonServiceImpl.java | 16 + .../SuggestionBoxQueryController.java | 5 +- .../controller/SuggestionXghController.java | 5 +- ...acherCongressDelegateManageController.java | 49 +- ...rCongressDelegateTransitionController.java | 101 +++ .../models/Teacher_congress_delegate.java | 3 + ...cherCongressDelegateManageUpdateParam.java | 31 + .../components/plugins/snaker/snakerChart.vue | 5 +- .../components/plugins/sysUpload/index.vue | 30 +- .../views/layouts/v4/baseLayout.html | 4 +- .../views/platform/flow/define/preview.html | 642 +++++++++--------- .../fundMember/branchUnionApproval/index.html | 156 +++++ .../zhgh/dayofficework/fundMember/info.js | 100 +++ .../fundMember/mine}/index.html | 69 +- .../dayofficework/fundMember/query/index.html | 166 +++++ .../fundMember/schoolUnionApproval/index.html | 156 +++++ .../dayofficework/fundMember/write/index.html | 256 +++++++ .../meeting/statistics/index.html | 7 + .../zhgh/democratic/proposal/common/info.js | 48 +- .../proposal/config/unit/index.html | 8 +- .../democratic/proposal/dashboard/index.html | 84 ++- .../proposal/query/collectProgress/index.html | 156 ++--- .../proposal/query/comprehensive/index.html | 153 ++--- .../proposal/query/history/index.html | 56 +- .../proposal/query/yearReport/index.html | 43 +- .../proposal/transact/apply/form.html | 309 --------- .../proposal/transact/commissioner/index.html | 219 ++++++ .../transact/committeeFiling/index.html | 40 +- .../proposal/transact/delegation/index.html | 6 +- .../proposal/transact/feedback/index.html | 57 +- .../proposal/transact/mine/index.html | 2 +- .../transact/schoolLeaderApproval/index.html | 78 ++- .../proposal/transact/seconded/index.html | 2 +- .../proposal/transact/unitReply/index.html | 41 +- .../transact/viceDelegation/index.html | 5 +- .../democratic/suggestionBox/mine/index.html | 2 +- .../democratic/suggestionBox/query/index.html | 27 +- .../democratic/suggestionBox/xgh/index.html | 24 +- .../delegate/manage/addForm.js | 108 ++- .../delegate/manage/editForm.js | 116 ++++ .../delegate/manage/index.html | 7 +- .../delegate/transition/index.html | 22 + .../teachercongress/prepare/file/index.html | 2 +- 62 files changed, 3250 insertions(+), 1131 deletions(-) create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberBranchUnionApprovalController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberCommonController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberMineController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberQueryController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberSchoolUnionApprovalController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberWriteController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/fund/models/FundMember.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/fund/service/FundMemberService.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/fund/service/impl/FundMemberServiceImpl.java create mode 100644 src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalCommissionerController.java create mode 100644 src/main/java/com/budwk/app/zhgh/democratic/proposal/models/ProposalCommissionerOpinion.java create mode 100644 src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateTransitionController.java create mode 100644 src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/param/TeacherCongressDelegateManageUpdateParam.java create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/fundMember/branchUnionApproval/index.html create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/fundMember/info.js rename src/main/resources/views/platform/zhgh/{democratic/proposal/transact/apply => dayofficework/fundMember/mine}/index.html (57%) create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/fundMember/query/index.html create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/fundMember/schoolUnionApproval/index.html create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/fundMember/write/index.html delete mode 100644 src/main/resources/views/platform/zhgh/democratic/proposal/transact/apply/form.html create mode 100644 src/main/resources/views/platform/zhgh/democratic/proposal/transact/commissioner/index.html create mode 100644 src/main/resources/views/platform/zhgh/democratic/teachercongress/delegate/manage/editForm.js create mode 100644 src/main/resources/views/platform/zhgh/democratic/teachercongress/delegate/transition/index.html diff --git a/src/main/java/com/budwk/app/flow/controller/FlowDefineController.java b/src/main/java/com/budwk/app/flow/controller/FlowDefineController.java index d80e4cbe..efcc828e 100644 --- a/src/main/java/com/budwk/app/flow/controller/FlowDefineController.java +++ b/src/main/java/com/budwk/app/flow/controller/FlowDefineController.java @@ -58,6 +58,7 @@ public class FlowDefineController { ProcessDefine define = dao.fetch(ProcessDefine.class, Cnd.where(ProcessDefine::getName, "=", defineKey).desc(ProcessDefine::getVersion)); if (define != null) { request.setAttribute("defineId", define.getId()); + request.setAttribute("showImg", true); } } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberBranchUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberBranchUnionApprovalController.java new file mode 100644 index 00000000..3682a836 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberBranchUnionApprovalController.java @@ -0,0 +1,99 @@ +package com.budwk.app.zhgh.dayofficework.fund.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.dayofficework.fund.models.FundMember; +import com.budwk.app.zhgh.dayofficework.fund.service.FundMemberService; +import io.swagger.annotations.Api; +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; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.List; + +@IocBean +@At("/platform/fundMember/branchUnionApproval") +@Ok("json:full") +@Api("基金会员-分工会审核") +public class FundMemberBranchUnionApprovalController { + + @Inject + private FundMemberService fundMemberService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/fundMember/branchUnionApproval/index.html") + @SaCheckPermission("fundMember.branchUnionApproval") + public void index() { + + } + + @At + @SaCheckPermission("fundMember.branchUnionApproval") + public Result pageData(PageForm pageForm, String taskId, String searchKeyword, Integer year, boolean approval) { + Sql sql = Sqls.create(""" + SELECT + info.*, + 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 fund_member 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 + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "fgh"); + if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){ + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + } + + if (approval) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + + + if (StrUtil.isNotBlank(searchKeyword)) { + cnd.where().andLike("info.title", searchKeyword); + } + + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); + sql.setCondition(cnd); + Pagination pagination = fundMemberService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberCommonController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberCommonController.java new file mode 100644 index 00000000..604ec336 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberCommonController.java @@ -0,0 +1,94 @@ +package com.budwk.app.zhgh.dayofficework.fund.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.base.utils.SysOfficeTemplateUtil; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.vo.ProcessTaskVO; +import com.budwk.app.zhgh.dayofficework.fund.models.FundMember; +import com.budwk.app.zhgh.dayofficework.fund.service.FundMemberService; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +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.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.ByteArrayOutputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@IocBean +@At("/platform/fundMember/common") +@Ok("json:full") +@Api(tags = "基金会员-公共") +@Slf4j +public class FundMemberCommonController { + + @Inject + private Dao dao; + @Inject + private FundMemberService fundMemberService; + @Inject + private FlowEngine flowEngine; + @Inject + private SysOfficeTemplateUtil sysOfficeTemplateUtil; + + @At + @SaCheckPermission("fundMember") + public Result info(@Valid String id) { + FundMember fundMember = fundMemberService.fetch(id); + return Result.success(fundMember); + } + + @At + @SaCheckPermission("fundMember") + @Ok("void") + @ApiOperation("导出申请表") + public void exportDocx(@Valid String id, HttpServletResponse response) { + FundMember fundMember = dao.fetch(FundMember.class, id); + Map docData = BeanUtil.beanToMap(fundMember); + + docData.put("birthday", DateUtil.format(fundMember.getBirthday(), "yyyy年MM月dd日")); + docData.put("joinWorkTime", DateUtil.format(fundMember.getJoinWorkTime(), "yyyy年MM月dd日")); + docData.put("retireTime", DateUtil.format(fundMember.getRetireTime(), "yyyy年MM月dd日")); + + // 流程实例 + ProcessInstance processInstance = dao.fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", id)); + List doneTaskVos = new ArrayList<>(); + List doneTaskList = flowEngine.processTaskService().getDoneTaskList(processInstance.getId(), null); + for (ProcessTask doneTask : doneTaskList) { + ProcessTaskVO taskVO = flowEngine.processTaskService().findById(doneTask.getId()); + doneTaskVos.add(taskVO); + } + + // 按任务节点分组 + Map> taskGroups = doneTaskVos.stream().collect(Collectors.groupingBy(ProcessTaskVO::getDisplayName)); + docData.putAll(taskGroups); + + Configure configure = Configure.builder().build(); + + try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { + XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("fundMember"), configure).render(docData).writeAndClose(byteArrayOutputStream); + CommonDownloadUtil.download(fundMember.getUserName() + "的医疗互助“爱心”基金入会申请表.docx", byteArrayOutputStream.toByteArray(), response); + } catch (Exception e) { + log.error("导出word异常", e); + } + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberMineController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberMineController.java new file mode 100644 index 00000000..6f2d580f --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberMineController.java @@ -0,0 +1,96 @@ +package com.budwk.app.zhgh.dayofficework.fund.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.dayofficework.fund.models.FundMember; +import com.budwk.app.zhgh.dayofficework.fund.service.FundMemberService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; +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.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +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; + +@IocBean +@At("/platform/fundMember/mine") +@Ok("json:full") +@Api("基金会员-我的申请") +public class FundMemberMineController { + + @Inject + private Dao dao; + @Inject + private FlowEngine flowEngine; + @Inject + private FundMemberService fundMemberService; + + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/fundMember/mine/index.html") + @SaCheckPermission("fundMember.mine") + public void index() { + + } + + @At + @SaCheckPermission("fundMember.mine") + public Result pageData(Integer pageNumber, Integer pageSize, String searchKeyword, Integer year) { + Sql sql = Sqls.create(""" + SELECT + info.*, + 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, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId + FROM + fund_member info + 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("info.createdBy", "=", SecurityUtil.getUserId()); + sql.setCondition(cnd); + Pagination pagination = fundMemberService.listPageMap(pageNumber, pageSize, sql); + return Result.success(pagination); + } + + @At + @SaCheckPermission("fundMember.mine") + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("删除") + @SLog(tag = "基金会员-我的申请", msg = "删除") + public Result delete(@Param("id") String id) { + dao.delete(FundMember.class, id); + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberQueryController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberQueryController.java new file mode 100644 index 00000000..a718047e --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberQueryController.java @@ -0,0 +1,83 @@ +package com.budwk.app.zhgh.dayofficework.fund.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.dayofficework.fund.service.FundMemberService; +import io.swagger.annotations.Api; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.SqlExpressionGroup; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import javax.servlet.http.HttpServletResponse; + +@IocBean +@At("/platform/fundMember/query") +@Ok("json:full") +@Api(tags = "基金会员-查询") +public class FundMemberQueryController { + + @Inject + private FundMemberService fundMemberService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/fundMember/query/index.html") + @SaCheckPermission("fundMember.query") + public void index() { + + } + + @At + @SaCheckPermission("fundMember.query") + public Result pageData(PageForm pageForm, Integer year) { + Sql sql = Sqls.create(""" + SELECT + info.*, + 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 + FROM + fund_member info + 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(); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("info.userName", pageForm.getSearchKeyword()); + seg.orLike("info.loginName", pageForm.getSearchKeyword()); + cnd.and(seg); + } + cnd.andEX("YEAR(info.submitTime)", "=", year); + sql.setCondition(cnd); + Pagination pagination = fundMemberService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @SaCheckPermission("fundMember.query") + @Ok("void") + public void exportExcel(Integer year, HttpServletResponse response) { + + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberSchoolUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberSchoolUnionApprovalController.java new file mode 100644 index 00000000..bd33d9d5 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberSchoolUnionApprovalController.java @@ -0,0 +1,97 @@ +package com.budwk.app.zhgh.dayofficework.fund.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.dayofficework.fund.service.FundMemberService; +import io.swagger.annotations.Api; +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; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.List; + +@IocBean +@At("/platform/fundMember/schoolUnionApproval") +@Ok("json:full") +@Api("基金会员-校工会审核") +public class FundMemberSchoolUnionApprovalController { + + @Inject + private FundMemberService fundMemberService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/fundMember/schoolUnionApproval/index.html") + @SaCheckPermission("fundMember.schoolUnionApproval") + public void index() { + + } + + @At + @SaCheckPermission("fundMember.schoolUnionApproval") + public Result pageData(PageForm pageForm, String taskId, String searchKeyword, Integer year, boolean approval) { + Sql sql = Sqls.create(""" + SELECT + info.*, + 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 fund_member 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 + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "xgh"); + if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){ + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + } + + if (approval) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + + + if (StrUtil.isNotBlank(searchKeyword)) { + cnd.where().andLike("info.title", searchKeyword); + } + + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); + sql.setCondition(cnd); + Pagination pagination = fundMemberService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberWriteController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberWriteController.java new file mode 100644 index 00000000..7d51cb05 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/controller/FundMemberWriteController.java @@ -0,0 +1,106 @@ +package com.budwk.app.zhgh.dayofficework.fund.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.lang.Dict; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.result.Result; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.flow.service.FlowCommonService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.dayofficework.fund.models.FundMember; +import com.budwk.app.zhgh.democratic.suggestionBox.models.SuggestionBox; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Dao; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.Date; +import java.util.List; + +@IocBean +@At("/platform/fundMember/write") +@Ok("json:full") +@Api(tags = "基金会员申请") +public class FundMemberWriteController { + + @Inject + private Dao dao; + @Inject + private FlowEngine flowEngine; + @Inject + private FlowCommonService flowCommonService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/fundMember/write/index.html") + @SaCheckPermission("fundMember.write") + public void index() { + + } + + @At + @SaCheckPermission("fundMember.write") + @ApiOperation("保存申请") + @SLog(tag = "建言献策-填写申请", msg = "保存申请") + public Result save(@Param("data") FundMember fundMember) { + dao.insertOrUpdate(fundMember); + return Result.success(); + } + + + @At + @SaCheckPermission("fundMember.write") + @ApiOperation("提交申请") + @Aop(TransAop.READ_COMMITTED) + @SLog(tag = "基金会员-填写申请", msg = "提交申请") + public Result submit(@Param("data") FundMember fundMember) { + fundMember.setSubmitTime(new Date()); + dao.insertOrUpdate(fundMember); + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, fundMember); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("FUND_MEMBER", fundMember.getId(), SecurityUtil.getUserId(), args); + + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + return Result.success(); + } + + @At + @SaCheckPermission("fundMember.write") + @ApiOperation("重新提交申请") + @Aop(TransAop.READ_COMMITTED) + @SLog(tag = "基金会员-填写申请", msg = "重新提交申请") + public Result submitAgain(@Param("data") FundMember fundMember, @Param("taskId") Long taskId) { + dao.insertOrUpdate(fundMember); + + Dict dict = Dict.create(); + dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); + dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + flowCommonService.executeTask(dict); + return Result.success(); + } + + @At + @SaCheckPermission("fundMember.write") + @ApiOperation("获取申请信息") + public Result info(@Param("id") String id) { + FundMember box = dao.fetch(FundMember.class, id); + return Result.success(box); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/models/FundMember.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/models/FundMember.java new file mode 100644 index 00000000..ccb1515b --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/models/FundMember.java @@ -0,0 +1,90 @@ +package com.budwk.app.zhgh.dayofficework.fund.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.Date; + +@Data +@Table("fund_member") +@EqualsAndHashCode(callSuper = true) +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("基金会员") +public class FundMember extends BaseModel { + + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("姓名") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String userName; + + @Column + @Comment("工资号") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String loginName; + + @Column + @Comment("性别") + @ColDefine(type = ColType.VARCHAR, width = 10) + private String sex; + + @Column + @Comment("出生日期") + @ColDefine(type = ColType.DATE) + private Date birthday; + + @Column + @Comment("身份证号") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String idCard; + + @Column + @Comment("参加工作时间") + @ColDefine(type = ColType.DATE) + private Date joinWorkTime; + + @Column + @Comment("退休时间") + @ColDefine(type = ColType.DATE) + private Date retireTime; + + @Column + @Comment("家庭住址") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String address; + + @Column + @Comment("手机号码") + @ColDefine(type = ColType.VARCHAR, width = 20) + private String mobile; + + @Column + @Comment("住宅号码") + @ColDefine(type = ColType.VARCHAR, width = 20) + private String homePhone; + + @Column + @Comment("照片") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String avatar; + + @Column + @Comment("加入、退出") + @ColDefine(type = ColType.BOOLEAN) + @Default("1") + private Boolean isJoin; + + @Column + @Comment("提交时间") + @ColDefine(type = ColType.DATETIME) + private Date submitTime; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/service/FundMemberService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/service/FundMemberService.java new file mode 100644 index 00000000..d365b853 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/service/FundMemberService.java @@ -0,0 +1,7 @@ +package com.budwk.app.zhgh.dayofficework.fund.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.fund.models.FundMember; + +public interface FundMemberService extends BaseService { +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/fund/service/impl/FundMemberServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/service/impl/FundMemberServiceImpl.java new file mode 100644 index 00000000..399a0a31 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/fund/service/impl/FundMemberServiceImpl.java @@ -0,0 +1,14 @@ +package com.budwk.app.zhgh.dayofficework.fund.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.dayofficework.fund.models.FundMember; +import com.budwk.app.zhgh.dayofficework.fund.service.FundMemberService; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +@IocBean(args = {"refer:dao"}) +public class FundMemberServiceImpl extends BaseServiceImpl implements FundMemberService { + public FundMemberServiceImpl(Dao dao) { + super(dao); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingStatisticsController.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingStatisticsController.java index b7b34509..d52d61a8 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingStatisticsController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingStatisticsController.java @@ -2,12 +2,9 @@ package com.budwk.app.zhgh.democratic.grassrootscongress.controller.meeting; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.util.StrUtil; -import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.flow.enums.ProcessInstanceStateEnum; -import com.budwk.app.web.commons.auth.utils.AuthUtil; -import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.democratic.grassrootscongress.param.GrassrootsCongressPageForm; import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService; import io.swagger.annotations.Api; @@ -16,7 +13,6 @@ import lombok.extern.slf4j.Slf4j; import org.nutz.dao.Cnd; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; -import org.nutz.dao.util.cri.Static; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.util.NutMap; @@ -58,11 +54,12 @@ public class GrassrootsCongressMeetingStatisticsController { $condition """); Cnd cnd = Cnd.NEW(); - cnd.and("ins.state","=", ProcessInstanceStateEnum.FINISHED.getCode()); + cnd.and("ins.state", "=", ProcessInstanceStateEnum.FINISHED.getCode()); cnd.andEX("YEAR(info.createTime)", "=", pageForm.getYear()); if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { cnd.and(Cnd.likeEX("info.meetingName", pageForm.getSearchKeyword())); } + cnd.andEX("info.unionId", "=", pageForm.getUnionId()); cnd.desc("info.createTime"); sql.setCondition(cnd); Pagination pagination = grassrootsCongressService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/models/GrassrootsCongressMeetingInfo.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/models/GrassrootsCongressMeetingInfo.java index 2dc54ff9..e9912256 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/models/GrassrootsCongressMeetingInfo.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/models/GrassrootsCongressMeetingInfo.java @@ -63,6 +63,7 @@ public class GrassrootsCongressMeetingInfo extends BaseModel { @Comment("所属工会") @ColDefine(type = ColType.VARCHAR, width = 32) private String unionId; + @Column @Comment("所属工会") @ColDefine(type = ColType.VARCHAR, width = 32) diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/dashboard/ProposalDashboardController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/dashboard/ProposalDashboardController.java index 8a16d65c..a75e2f3c 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/dashboard/ProposalDashboardController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/dashboard/ProposalDashboardController.java @@ -8,6 +8,7 @@ import com.budwk.app.base.result.Result; import com.budwk.app.flow.engine.model.ProcessModel; import com.budwk.app.flow.engine.model.TaskModel; import com.budwk.app.flow.entity.ProcessDefine; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.flow.service.ProcessDefineService; import com.budwk.app.sys.models.Sys_dict; import com.budwk.app.sys.services.SysDictService; @@ -72,7 +73,10 @@ public class ProposalDashboardController { .addv("name", taskModel.getDisplayName()) .addv("id", taskModel.getName()) .addv("type", "task") - .addv("count", 0)).toList(); + .addv("count", 0) + .addv("todoCount", 0) + .addv("doneCount", 0) + ).toList(); nodes.addAll(taskNodes); // 立案结果 @@ -88,22 +92,24 @@ public class ProposalDashboardController { // 查询待办任务 Sql todoSql = Sqls.create(""" SELECT - t.taskName + t.taskName, + t.taskState FROM wf_process_task t INNER JOIN wf_process_instance ins ON ins.id = t.processInstanceId INNER JOIN proposal_info info ON info.id = ins.businessNo WHERE - t.taskState = 10 - AND info.sessionId = @sessionId + info.sessionId = @sessionId """); todoSql.setParam("sessionId", sessionId); List todoTasks = processDefineService.listMap(todoSql); for (NutMap node : nodes) { if (node.getString("type").equals("task")) { - long count = todoTasks.stream().filter(task -> task.getString("taskName").equals(node.getString("id"))).count(); - node.put("count", count); + long todoCount = todoTasks.stream().filter(task -> task.getInt("taskState") == ProcessTaskStateEnum.DOING.getCode() && task.getString("taskName").equals(node.getString("id"))).count(); + node.put("todoCount", todoCount); + long doneCount = todoTasks.stream().filter(task -> task.getInt("taskState") == ProcessTaskStateEnum.FINISHED.getCode() && task.getString("taskName").equals(node.getString("id"))).count(); + node.put("doneCount", doneCount); } else if (node.getString("type").equals("total")) { int count = dao.count(ProposalInfo.class, Cnd.where(ProposalInfo::getSessionId, "=", sessionId)); node.put("count", count); @@ -119,11 +125,10 @@ public class ProposalDashboardController { @At @SaCheckPermission("proposal.dashboard") - public Result pageData(PageForm pageForm, String sessionId, String selectNodeId, String selectNodeType) { + public Result pageData(PageForm pageForm, String sessionId, String selectNodeId, String selectNodeType, String selectNodeMode) { Sql sql = Sqls.create(""" SELECT info.*, - COUNT(p.consolidationIds) > 0 AS isConsolidation, type.name AS typeName, tcs.fullName AS sessionName, tcd.`name` AS delegationName, @@ -137,24 +142,33 @@ public class ProposalDashboardController { GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) 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 proposal_reply_unit pru ON pru.proposalId = info.id - LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = @taskState $condition """); Cnd cnd = Cnd.NEW(); cnd.and("info.sessionId", "=", sessionId); cnd.groupBy("info.id"); - if(StrUtil.isNotBlank(selectNodeType) && StrUtil.isNotBlank(selectNodeId)){ - switch (selectNodeType){ + // 默认显示进行中的任务 + sql.setParam("taskState", ProcessTaskStateEnum.DOING.getCode()); + + if (StrUtil.isNotBlank(selectNodeType) && StrUtil.isNotBlank(selectNodeId)) { + switch (selectNodeType) { case "task": cnd.and("t.taskName", "=", selectNodeId); + + if (selectNodeMode.equals("todo")) { + sql.setParam("taskState", ProcessTaskStateEnum.DOING.getCode()); + } else { + sql.setParam("taskState", ProcessTaskStateEnum.FINISHED.getCode()); + } + break; case "total": break; diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryCollectProgressController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryCollectProgressController.java index a1a048c6..f480cf84 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryCollectProgressController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryCollectProgressController.java @@ -4,12 +4,15 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.util.ArrayUtil; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; -import com.budwk.app.base.service.BaseService; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam; +import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; import org.nutz.dao.util.cri.SqlExpressionGroup; @@ -36,12 +39,14 @@ public class ProposalQueryCollectProgressController { add(NutMap.NEW().addv("code", 10).addv("id", 10).addv("name", "撰写提案")); add(NutMap.NEW().addv("code", 20).addv("id", 20).addv("name", "附议提案")); add(NutMap.NEW().addv("code", 30).addv("id", 30).addv("name", "待团长审核")); - add(NutMap.NEW().addv("code", 40).addv("id", 40).addv("name", "团长审核退回")); - add(NutMap.NEW().addv("code", 50).addv("id", 50).addv("name", "团长审核通过")); + add(NutMap.NEW().addv("code", 40).addv("id", 40).addv("name", "团长已审核")); }}; @Inject - private BaseService baseService; + private ProposalCommonService proposalCommonService; + @Inject + private Dao dao; + @At("") @Ok("beetl:/platform/zhgh/democratic/proposal/query/collectProgress/index.html") @@ -61,43 +66,55 @@ public class ProposalQueryCollectProgressController { info.createUserName, type.NAME AS typeName, tcs.fullName AS sessionName, - tcd.`name` AS delegationName + tcd.`name` AS delegationName, + (SELECT count(1) FROM proposal_second WHERE proposalId = info.id) AS inviteCount, + (SELECT count(1) FROM wf_process_task WHERE processInstanceId = ins.id AND taskName = 'second' AND taskState = 20) finishCount, + ins.id AS instanceId, + ins.state instanceState, + t.displayName curTaskName 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 + 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 $condition """); sql.setParam("sessionId", pageForm.getSessionId()); Cnd cnd = Cnd.NEW(); + ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm); SqlExpressionGroup seg = new SqlExpressionGroup(); if (ArrayUtil.contains(pageForm.getCollectIds(), 10)) { - seg.or("inst.processInstanceNodeCode", "=", 10); + seg.or("t.taskName", "=", "startTask"); } if (ArrayUtil.contains(pageForm.getCollectIds(), 20)) { - seg.or("inst.processInstanceNodeCode", "=", 20); + seg.or("t.taskName", "=", "second"); } if (ArrayUtil.contains(pageForm.getCollectIds(), 30)) { - seg.or("inst.processInstanceNodeCode", "=", 30); + seg.or("t.taskName", "=", "delegation"); } if (ArrayUtil.contains(pageForm.getCollectIds(), 40)) { - seg.or("inst.processInstanceNodeCode", "=", 40); - } - if (ArrayUtil.contains(pageForm.getCollectIds(), 50)) { - seg.or("inst.processInstanceNodeCode", ">", 50); + seg.or("t.taskName", "not in", List.of("startTask", "second", "delegation")); + seg.and("t.taskName", "is not", null); } if (!seg.isEmpty()) { cnd.and(seg); } - -// cnd.and("inst.processInstanceNodeCode", "in", List.of(10, 20, 30, 40, 50)); - ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm); cnd.groupBy("info.id"); sql.setCondition(cnd); - Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + List list = (List) pagination.getList(); + for (NutMap row : list) { + int count = dao.count(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", row.getString("instanceId")) + .and(ProcessTask::getTaskName, "=", "second") + .and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.FINISHED.getCode()) + ); + + + } return Result.success(pagination); } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalCommissionerController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalCommissionerController.java new file mode 100644 index 00000000..a0247047 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalCommissionerController.java @@ -0,0 +1,107 @@ +package com.budwk.app.zhgh.democratic.proposal.controller.transact; + + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.democratic.proposal.models.ProposalCommissionerOpinion; +import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam; +import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +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.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import javax.validation.Valid; +import java.util.Date; + +@IocBean +@At("/platform/proposal/commissioner") +@Slf4j +@Ok("json:full") +@Api(tags = "提案委员会委员查询") +public class ProposalCommissionerController { + + @Inject + private Dao dao; + @Inject + private ProposalCommonService proposalCommonService; + + @At("") + @Ok("beetl:/platform/zhgh/democratic/proposal/transact/commissioner/index.html") + @SaCheckPermission("proposal.commissioner") + public void index() { + } + + @At + @SaCheckPermission("proposal.commissioner") + public Result pageData(@Valid ProposalSearchParam pageForm, boolean approval) { + Sql sql = Sqls.create(""" + SELECT + info.*, + 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 taskName, + (SELECT count(1) FROM proposal_commissioner_opinion WHERE proposalId = info.id AND caseFilingResult = 'CONFIRM_FILING') CONFIRM_FILING_COUNT, + (SELECT count(1) FROM proposal_commissioner_opinion WHERE proposalId = info.id AND caseFilingResult = 'SUGGESTION') SUGGESTION_COUNT, + (SELECT count(1) FROM proposal_commissioner_opinion WHERE proposalId = info.id AND caseFilingResult = 'NOT') NOT_COUNT, + pco.id pcoId + 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 `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 proposal_commissioner_opinion pco on pco.proposalId = info.id and pco.commissioner = @userId + $condition + """); + sql.setParam("userId", SecurityUtil.getUserId()); + + Cnd cnd = Cnd.NEW(); + ProposalSearchParam.buildSearch(cnd, pageForm); + cnd.and("pco.id", approval ? "is not" : "is", null); + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); + sql.setCondition(cnd); + Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @SaCheckPermission("proposal.commissioner") + @SLog(tag = "提案委员会委员意见", msg = "") + @Aop(TransAop.READ_COMMITTED) + public Result doApproval(String proposalId, String opinion, String caseFilingResult, String caseFilingType) { + dao.clear(ProposalCommissionerOpinion.class, Cnd.where(ProposalCommissionerOpinion::getProposalId, "=", proposalId).and(ProposalCommissionerOpinion::getCommissioner, "=", SecurityUtil.getUserId())); + + ProposalCommissionerOpinion commissionerOpinion = new ProposalCommissionerOpinion(); + commissionerOpinion.setProposalId(proposalId); + commissionerOpinion.setCommissioner(SecurityUtil.getUserId()); + commissionerOpinion.setOpinionText(opinion); + commissionerOpinion.setCaseFilingResult(caseFilingResult); + commissionerOpinion.setCaseFilingType(caseFilingType); + commissionerOpinion.setOpinionTime(new Date()); + dao.insert(commissionerOpinion); + + return Result.success(); + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalMasterUnitAssignmentHandler.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalMasterUnitAssignmentHandler.java index 7281b9ad..bce41a5e 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalMasterUnitAssignmentHandler.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalMasterUnitAssignmentHandler.java @@ -28,7 +28,7 @@ public class ProposalMasterUnitAssignmentHandler implements AssignmentHandler { // 提案ID String proposalId = execution.getProcessInstance().getBusinessNo(); - + // 主办单位 ProposalReplyUnit masterUnit = dao.fetch(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", proposalId).and(ProposalReplyUnit::getIsMaster, "=", 1)); if (masterUnit == null) { diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/models/ProposalCommissionerOpinion.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/models/ProposalCommissionerOpinion.java new file mode 100644 index 00000000..741e9c43 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/models/ProposalCommissionerOpinion.java @@ -0,0 +1,57 @@ +package com.budwk.app.zhgh.democratic.proposal.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = true) +@Table("proposal_commissioner_opinion") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("提案委员意见") +@TableIndexes(value = { + @Index(name = "INDEX_PROPOSAL_COMMISSIONER_OPINION_PROPOSAL_ID", fields = {"proposalId"}, unique = false) +}) +public class ProposalCommissionerOpinion extends BaseModel { + + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("提案ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String proposalId; + + @Column + @Comment("立案结果(字典表)") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String caseFilingResult; + + @Column + @Comment("立案类型(重点、普通提案)") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String caseFilingType; + + @Column + @Comment("委员意见") + @ColDefine(type = ColType.TEXT) + private String opinionText; + + @Column + @Comment("委员意见时间") + @ColDefine(type = ColType.DATETIME) + private Date opinionTime; + + @Column + @Comment("委员ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String commissioner; + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalQueryComprehensiveParam.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalQueryComprehensiveParam.java index 7fdf2342..25901f80 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalQueryComprehensiveParam.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalQueryComprehensiveParam.java @@ -50,6 +50,9 @@ public class ProposalQueryComprehensiveParam extends PageForm { @ApiModelProperty(name = "征集进度状态") private Integer[] collectIds; + @ApiModelProperty(name = "通用关键字") + private String commonKeyword; + /** * 构建通用查询参数 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 acc8d40b..2cca39d7 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 @@ -6,6 +6,7 @@ import com.budwk.app.base.utils.PageUtil; import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.Cnd; +import org.nutz.dao.util.cri.SqlExpressionGroup; /** * 提案通用搜索 @@ -20,6 +21,7 @@ public class ProposalSearchParam extends PageForm { private String delegationId; private String createUserName; private String createUserLoginName; + private String createUserKeyword; private String caseFilingResult; /** @@ -46,11 +48,19 @@ public class ProposalSearchParam extends PageForm { if (StrUtil.isNotBlank(searchParam.getCreateUserLoginName())) { cnd.where().andLike("info.createUserLoginName", searchParam.getCreateUserLoginName()); } + + if (StrUtil.isNotBlank(searchParam.getCreateUserKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("info.createUserName", searchParam.getCreateUserKeyword()); + seg.orLike("info.createUserLoginName", searchParam.getCreateUserKeyword()); + cnd.and(seg); + } + cnd.andEX("info.caseFilingResult", "=", searchParam.getCaseFilingResult()); - if(StrUtil.isAllNotBlank(searchParam.getPageOrderName(), searchParam.getPageOrderBy())){ + if (StrUtil.isAllNotBlank(searchParam.getPageOrderName(), searchParam.getPageOrderBy())) { cnd.orderBy(searchParam.getPageOrderName(), PageUtil.getOrder(searchParam.getPageOrderBy())); - }else{ + } else { cnd.asc("info.code"); } } 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 3de88df0..6761c507 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 @@ -125,6 +125,22 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl imp info.put("merges", mergeInfos); } + // 提案委员会成员意见 + Sql commissionerSql = Sqls.create(""" + SELECT + pco.*, + u.username commissionerName, + u.loginname commissionerLoginName + FROM + proposal_commissioner_opinion pco + LEFT JOIN vw_user u ON u.id = pco.commissioner + WHERE + pco.proposalId = @proposalId + """); + commissionerSql.setParam("proposalId", id); + List commissionerOpinions = listMap(commissionerSql); + info.put("commissionerOpinions", commissionerOpinions); + return info; } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxQueryController.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxQueryController.java index 5e57190e..f065bb65 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxQueryController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxQueryController.java @@ -1,6 +1,5 @@ package com.budwk.app.zhgh.democratic.suggestionBox.controller; -import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; import cn.hutool.core.util.StrUtil; @@ -53,7 +52,7 @@ public class SuggestionBoxQueryController { @At @SaCheckPermission(value = {"suggestionBox.query", "h5.suggestionBox.query"}, mode = SaMode.OR) - public Result pageData(Integer pageNumber, Integer pageSize, String searchKeyword, Integer year) { + public Result pageData(Integer pageNumber, Integer pageSize, String searchKeyword, Integer year, String unionId, String unitId) { Sql sql = Sqls.create(""" SELECT info.id, @@ -91,6 +90,8 @@ public class SuggestionBoxQueryController { if (StrUtil.isNotBlank(searchKeyword)) { cnd.where().andLike("info.title", searchKeyword); } + cnd.and("info.unionId", "=", unionId); + cnd.and("info.unitId", "=", unitId); cnd.desc("info.submitTime"); sql.setCondition(cnd); Pagination pagination = suggestionBoxService.listPageMap(pageNumber, pageSize, sql); 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 e85b1870..e4a80c86 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 @@ -51,7 +51,7 @@ public class SuggestionXghController { @At @SaCheckPermission(value = {"suggestionBox.xgh", "h5.suggestionBox.xgh"}, mode = SaMode.OR) - public Result pageData(PageForm pageForm, String taskId, String searchKeyword, Integer year, boolean approval) { + public Result pageData(PageForm pageForm, String taskId, String searchKeyword, Integer year, String unionId, String unitId, boolean approval) { Sql sql = Sqls.create(""" SELECT info.id, @@ -102,6 +102,9 @@ public class SuggestionXghController { cnd.where().andLike("info.title", searchKeyword); } + cnd.and("info.unionId", "=", unionId); + cnd.and("info.unitId", "=", unitId); + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { cnd.desc("info.submitTime"); } else { diff --git a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateManageController.java b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateManageController.java index 010ac794..b846de9b 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateManageController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateManageController.java @@ -115,16 +115,57 @@ public class TeacherCongressDelegateManageController { delegate.setSessionId(param.getSessionId()); delegate.setRoleId(param.getRoleId()); } - dao.insert(delegates); - for (String userId : userIds) { - dao.insert("sys_user_role", Chain.make("userId", userId).add("roleId", param.getRoleId()).add("tcSessionId", param.getSessionId()).add("tcDelegationId", param.getDelegationId())); - } + // 删除掉旧的权限 + dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getUserId, "in", userIds) + .and(Sys_user_role::getTcSessionId, "=", param.getSessionId()) + .and(Sys_user_role::getRoleId, "=", param.getRoleId())); + + List userRoles = userIds.stream().map(userId -> { + Sys_user_role role = new Sys_user_role(); + role.setUserId(userId); + role.setTcSessionId(param.getSessionId()); + role.setTcDelegationId(param.getDelegationId()); + role.setRoleId(param.getRoleId()); + return role; + }).toList(); + dao.insert(userRoles); + sysUserService.clearCache(); return Result.success(); } + + @At + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("tc.delegate.manage") + @SLog(tag = "民主管理", msg = "教代会代表管理修改代表") + public Result update(@Valid TeacherCongressDelegateManageUpdateParam param) { + // 查询原来的记录 + Teacher_congress_delegate old = dao.fetch(Teacher_congress_delegate.class, param.getId()); + // 删除掉旧的权限 + dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getUserId, "=", old.getUserId()) + .and(Sys_user_role::getRoleId, "=", old.getRoleId()) + .and(Sys_user_role::getTcSessionId, "=", old.getSessionId()) + .and(Sys_user_role::getTcDelegationId, "=", old.getDelegationId())); + + old.setDelegationId(param.getDelegationId()); + dao.update(old, "delegationId"); + + // 新增权限 + Sys_user_role role = new Sys_user_role(); + role.setUserId(param.getUserId()); + role.setTcSessionId(param.getSessionId()); + role.setTcDelegationId(param.getDelegationId()); + role.setRoleId(param.getRoleId()); + dao.insert(role); + + sysUserService.clearCache(); + return Result.success(); + } + + @At @Aop(TransAop.READ_COMMITTED) @SaCheckPermission("tc.delegate.manage") diff --git a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateTransitionController.java b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateTransitionController.java new file mode 100644 index 00000000..ac3b6fcf --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateTransitionController.java @@ -0,0 +1,101 @@ +package com.budwk.app.zhgh.democratic.teachercongress.delegate.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate; +import com.budwk.app.zhgh.democratic.teachercongress.delegation.models.Teacher_congress_delegation; +import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session; +import io.swagger.annotations.Api; +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.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.HashMap; +import java.util.List; + +@IocBean +@At("/platform/zhgh/democratic/teacherCongress/delegate/transition") +@Api(tags = "教代会代表换届变动信息") +@Ok("json:full") +public class TeacherCongressDelegateTransitionController { + + @Inject + private Dao dao; + + @At("") + @Ok("beetl:/platform/zhgh/democratic/teachercongress/delegate/transition/index.html") + @SaCheckPermission("tc.delegate.transition") + public void index() { + } + + @At + @SaCheckPermission("tc.delegate.transition") + public Result pageData(String sessionId) { + // 当前届次 + Teacher_congress_session session = dao.fetch(Teacher_congress_session.class, sessionId); + // 上一届次 + Teacher_congress_session lastSession = dao.fetch(Teacher_congress_session.class, Cnd.where(Teacher_congress_session::getStartDate, "<", session.getStartDate()).desc(Teacher_congress_session::getStartDate)); + // 当前届次代表团 + List delegations = dao.query(Teacher_congress_delegation.class, Cnd.where(Teacher_congress_delegation::getSessionId, "=", sessionId).asc(Teacher_congress_delegation::getCode)); + + // 当前届次代表 + List delegates = dao.query(Teacher_congress_delegate.class, Cnd.where(Teacher_congress_delegate::getSessionId, "=", sessionId)); + dao.fetchLinks(delegates, "delegation"); + // 上一届次代表 + List lastDelegates = dao.query(Teacher_congress_delegate.class, Cnd.where(Teacher_congress_delegate::getSessionId, "=", lastSession.getId())); + dao.fetchLinks(lastDelegates, "delegation"); + + // 代表数据 + List delegateFull = delegates.stream().map(delegate -> { + NutMap delegateMap = NutMap.NEW(); + delegateMap.put("userId", delegate.getUserId()); + delegateMap.put("userName", delegate.getUserName()); + + // 本届次代表团信息 + delegateMap.put("delegationId", delegate.getDelegationId()); + delegateMap.put("delegationName", delegate.getDelegation().getName()); + delegateMap.put("delegationCode", delegate.getDelegation().getCode()); + + // 上一届次代表团信息 + lastDelegates.stream().filter(lastDelegate -> lastDelegate.getUserId().equals(delegate.getUserId())).findFirst().ifPresentOrElse(lastDelegate -> { + delegateMap.put("lastDelegationId", lastDelegate.getDelegationId()); + delegateMap.put("lastDelegationName", lastDelegate.getDelegation().getName()); + delegateMap.put("lastDelegationCode", lastDelegate.getDelegation().getCode()); + }, () -> { + delegateMap.put("lastDelegationId", ""); + delegateMap.put("lastDelegationName", ""); + delegateMap.put("lastDelegationCode", ""); + }); + + return delegateMap; + }).toList(); + + + List> list = delegations.stream().map(delegation -> { + HashMap map = new HashMap<>(); + map.put("name", delegation.getName()); + map.put("code", delegation.getCode()); + // 上一届次人数 + map.put("lastCount", delegateFull.stream().filter(delegate -> delegate.getString("lastDelegationCode").equals(delegation.getCode())).count()); + // 增补代表数 (上一届次不是代表 但是本届次是代表) + map.put("addCount", delegateFull.stream().filter(delegate -> StrUtil.isBlank(delegate.getString("lastDelegationCode")) && delegate.getString("delegationCode").equals(delegation.getCode()))); + // 转入代表数 (上一届次是代表 但是在别的代表团) + map.put("transferCount", delegateFull.stream().filter(delegate -> !delegate.getString("lastDelegationCode").equals(delegation.getCode()) && delegate.getString("delegationCode").equals(delegation.getCode()))); + // 转出代表数 (上一届次在本团 本届次转出去了) + map.put("transferOutCount", delegateFull.stream().filter(delegate -> delegate.getString("lastDelegationCode").equals(delegation.getCode()) && StrUtil.isNotBlank(delegate.getString("delegationCode")) && !delegate.getString("delegationCode").equals(delegation.getCode()))); + // 减少代表数 (上一届次是代表 本届次不是代表) + map.put("reduceCount", delegateFull.stream().filter(delegate -> delegate.getString("lastDelegationCode").equals(delegation.getCode()) && StrUtil.isBlank(delegate.getString("delegationCode")))); + // 当前代表数 + map.put("currentCount", delegateFull.stream().filter(delegate -> delegate.getString("delegationCode").equals(delegation.getCode())).count()); + return map; + }).toList(); + + return Result.success(list); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/models/Teacher_congress_delegate.java b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/models/Teacher_congress_delegate.java index 74e4a68b..e40c91b8 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/models/Teacher_congress_delegate.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/models/Teacher_congress_delegate.java @@ -2,6 +2,7 @@ package com.budwk.app.zhgh.democratic.teachercongress.delegate.models; import com.budwk.app.base.model.BaseModel; +import com.budwk.app.zhgh.democratic.teachercongress.delegation.models.Teacher_congress_delegation; import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.entity.annotation.*; @@ -85,4 +86,6 @@ public class Teacher_congress_delegate extends BaseModel { @ColDefine(type = ColType.VARCHAR, width = 32) private String roleId; + @One(field = "delegationId") + private Teacher_congress_delegation delegation; } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/param/TeacherCongressDelegateManageUpdateParam.java b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/param/TeacherCongressDelegateManageUpdateParam.java new file mode 100644 index 00000000..1bc1564a --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/param/TeacherCongressDelegateManageUpdateParam.java @@ -0,0 +1,31 @@ +package com.budwk.app.zhgh.democratic.teachercongress.delegate.param; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * 教代会代表更新对象 + */ +@Data +public class TeacherCongressDelegateManageUpdateParam { + + @NotBlank(message = "主键不能为空") + private String id; + + @NotBlank(message = "教代会届次不能为空") + private String sessionId; + + @NotBlank(message = "代表团不能为空") + private String delegationId; + + @NotBlank(message = "代表类型不能为空") + private String roleId; + + @NotEmpty(message = "用户不能为空") + private String userId; + + +} diff --git a/src/main/resources/static/components/plugins/snaker/snakerChart.vue b/src/main/resources/static/components/plugins/snaker/snakerChart.vue index f730721c..9c67e557 100644 --- a/src/main/resources/static/components/plugins/snaker/snakerChart.vue +++ b/src/main/resources/static/components/plugins/snaker/snakerChart.vue @@ -21,7 +21,7 @@ module.exports = { + + +
@@ -118,10 +149,17 @@ const PROPOSAL_INFO = { {{ task.finishTime }} - - +
+ + + +
{{task.ext.tf_masterUnitName}} diff --git a/src/main/resources/views/platform/zhgh/democratic/proposal/config/unit/index.html b/src/main/resources/views/platform/zhgh/democratic/proposal/config/unit/index.html index 32d5f52a..121ff1a0 100644 --- a/src/main/resources/views/platform/zhgh/democratic/proposal/config/unit/index.html +++ b/src/main/resources/views/platform/zhgh/democratic/proposal/config/unit/index.html @@ -27,13 +27,13 @@ layout("/layouts/platform.html"){ - + diff --git a/src/main/resources/views/platform/zhgh/democratic/proposal/dashboard/index.html b/src/main/resources/views/platform/zhgh/democratic/proposal/dashboard/index.html index 3fbe2289..d6360f22 100644 --- a/src/main/resources/views/platform/zhgh/democratic/proposal/dashboard/index.html +++ b/src/main/resources/views/platform/zhgh/democratic/proposal/dashboard/index.html @@ -24,6 +24,7 @@ layout("/layouts/platform.html"){ display: flex; align-items: center; min-height: 80px; + position: relative; } .node-card:hover { @@ -32,6 +33,16 @@ layout("/layouts/platform.html"){ cursor: pointer; } + .node-card.selected { + transform: translateY(-2px); + box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); + border-top-width: 4px; + } + + .node-card.selected .node-icon { + transform: scale(1.1); + } + .node-icon { width: 50px; height: 50px; @@ -64,14 +75,33 @@ layout("/layouts/platform.html"){ line-height: 1; } - .node-card.selected { - transform: translateY(-2px); - box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); - border-top-width: 4px; + .task-toggle { + position: absolute; + top: 8px; + right: 8px; + display: flex; + background: rgba(255, 255, 255, 0.9); + padding: 2px; } - .node-card.selected .node-icon { - transform: scale(1.1); + .task-toggle-btn { + padding: 4px 8px; + font-size: 12px; + border: none; + background: transparent; + color: #666; + cursor: pointer; + transition: all 0.2s ease; + min-width: 36px; + } + + .task-toggle-btn.active { + background: var(--theme-color); + color: #fff; + } + + .task-toggle-btn:hover:not(.active) { + background: rgba(0, 0, 0, 0.05); } @media (max-width: 768px) { @@ -131,12 +161,30 @@ layout("/layouts/platform.html"){ :style="'--theme-color:' + getThemeColor(index)" @click="selectNode(node,index)" > + +
+ + +
+
{{ node.name || '未命名节点' }}
-
{{ node.count || 0 }}
+
{{ getNodeCount(node) }}
@@ -202,6 +250,7 @@ layout("/layouts/platform.html"){ return { sessionOptions: [], nodes: [], + nodeDisplayModes: {}, // 存储每个节点的显示模式 pageForm: { selectNodeId: null, selectNodeType: null, @@ -256,7 +305,28 @@ layout("/layouts/platform.html"){ selectNode(node, index) { this.pageForm.selectNodeId = node.id this.pageForm.selectNodeType = node.type + this.pageForm.selectNodeMode = this.getNodeDisplayMode(node.id) this.doSearch() + }, + + // 获取节点显示数量 + getNodeCount(node) { + if (node.type === 'task') { + const displayMode = this.getNodeDisplayMode(node.id) + return displayMode === 'todo' ? (node.todoCount || 0) : (node.doneCount || 0) + } + return node.count || 0 + }, + + // 获取节点显示模式 + getNodeDisplayMode(nodeId) { + return this.nodeDisplayModes[nodeId] || 'todo' // 默认显示待办 + }, + + // 设置节点显示模式 + setNodeDisplayMode(node, mode) { + this.$set(this.nodeDisplayModes, node.id, mode) + this.selectNode(node, null) } }, computed: { diff --git a/src/main/resources/views/platform/zhgh/democratic/proposal/query/collectProgress/index.html b/src/main/resources/views/platform/zhgh/democratic/proposal/query/collectProgress/index.html index cc071f47..52af9773 100644 --- a/src/main/resources/views/platform/zhgh/democratic/proposal/query/collectProgress/index.html +++ b/src/main/resources/views/platform/zhgh/democratic/proposal/query/collectProgress/index.html @@ -3,9 +3,7 @@ layout("/layouts/platform.html"){ #-->
@@ -13,102 +11,93 @@ layout("/layouts/platform.html"){ - - + + - - - - - + + - + - - + + - + + + + + + + + + + + + + + + + - -
-
提案类别
-
- - {{ item.name }} - -
-
-
-
立案结果
-
- - {{ item.label }} - -
-
-
- - - - - - - + + +