From 84a12a6d8363db2144f417093d65d155ccf3ba45 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: Fri, 8 Aug 2025 09:04:31 +0800 Subject: [PATCH] .. --- .../com/budwk/app/bpm/service/BpmService.java | 5 + ...ranchUnionUserAuthorizationController.java | 89 ----- ...onUserAuthorizationApprovalController.java | 170 ++++++++ ...nionUserAuthorizationCommonController.java | 46 +++ ...ranchUnionUserAuthorizationController.java | 281 +++++++++++++ .../Sys_branch_union_user_permission.java | 10 + .../com/budwk/app/sys/models/Sys_task.java | 2 +- ...SysBranchUnionUserAuthorizationPageVO.java | 12 + .../infoManage/ClubInfoManageController.java | 93 ++++- .../budwk/app/zhgh/club/model/ClubUser.java | 7 +- .../impl/SysClubInfoManageServiceImpl.java | 6 +- .../club/service/impl/SysClubServiceImpl.java | 4 +- .../zhgh/club/vo/ClubUserCommonPageVo.java | 2 + .../BirthdayWishesPlanController.java | 127 ++++++ .../models/BirthdayWishesPlan.java | 41 ++ .../service/BirthdayWishesService.java | 7 + .../impl/BirthdayWishesServiceImpl.java | 14 + .../task/BirthdayWishesTask.java | 61 +++ .../HonorBasicSettingsController.java | 19 +- .../controller/HonorManageController.java | 18 +- .../dayofficework/honor/models/Honor.java | 7 +- .../rest/controller/RestQueryController.java | 18 +- .../rest/models/RestActSignUp.java | 5 + .../WarmthCondolenceApplyController.java | 83 ++++ ...ndolenceBranchUnionApprovalController.java | 136 +++++++ .../WarmthCondolenceCommonController.java | 61 +++ .../WarmthCondolenceMineController.java | 106 +++++ .../WarmthCondolenceNoticeController.java | 77 ++++ .../WarmthCondolenceQueryController.java | 122 ++++++ ...ndolenceSchoolUnionApprovalController.java | 122 ++++++ .../models/WarmthCondolence.java | 110 +++++ .../models/WarmthCondolenceNotice.java | 55 +++ .../param/WarmthCondolenceNoticePageForm.java | 21 + .../param/WarmthCondolencePageForm.java | 32 ++ .../WarmthCondolenceNoticeService.java | 7 + .../service/WarmthCondolenceService.java | 39 ++ .../WarmthCondolenceNoticeServiceImpl.java | 15 + .../impl/WarmthCondolenceServiceImpl.java | 181 +++++++++ .../vo/WarmthCondolencePageVO.java | 32 ++ .../vo/WarmthCondolenceVO.java | 20 + .../vo/WarmthCondolenceWordVO.java | 43 ++ .../static/assets/platform/css/a.css | 34 +- .../static/assets/platform/css/common.css | 20 + .../apply/index.html | 211 ++++++++++ .../approval/index.html | 165 ++++++++ .../sys/branchUnionUserAuthorization/info.js | 35 ++ .../sys/msg/msgManage/msgManageForm.js | 29 +- .../zhgh/club/applyJoin/apply/index.html | 10 +- .../club/infoManage/manage/clubInfoManage.js | 378 +++++++++++------- .../zhgh/club/infoManage/manage/index.html | 5 +- .../dayofficework/birthdayWishes/plan.html | 10 + .../birthdayWishes/plan/index.html | 135 +++++++ .../dayofficework/honor/manage/index.html | 60 ++- .../zhgh/dayofficework/rest/query/index.html | 8 +- .../dayofficework/rest/signUp/signForm.js | 6 +- .../warmthCondolence/apply/index.html | 188 +++++++++ .../branchUnionApproval/index.html | 185 +++++++++ .../warmthCondolence/common/info.js | 109 +++++ .../warmthCondolence/common/taskRecord.js | 21 + .../warmthCondolence/mine/index.html | 139 +++++++ .../warmthCondolence/notice/index.html | 155 +++++++ .../warmthCondolence/query/index.html | 240 +++++++++++ .../schoolUnionApproval/index.html | 187 +++++++++ .../staffmanage/member/info/board/index.html | 146 ++++--- src/test/java/com/budwk/app/HonorTest.java | 111 +++++ src/test/java/com/budwk/app/RestTest.java | 109 +++++ .../com/budwk/app/WarmthCondolenceTest.java | 152 +++++++ 67 files changed, 4717 insertions(+), 437 deletions(-) delete mode 100644 src/main/java/com/budwk/app/sys/controller/SysBranchUnionUserAuthorizationController.java create mode 100644 src/main/java/com/budwk/app/sys/controller/branchUnionUserAuthorization/SysBranchUnionUserAuthorizationApprovalController.java create mode 100644 src/main/java/com/budwk/app/sys/controller/branchUnionUserAuthorization/SysBranchUnionUserAuthorizationCommonController.java create mode 100644 src/main/java/com/budwk/app/sys/controller/branchUnionUserAuthorization/SysBranchUnionUserAuthorizationController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/controller/BirthdayWishesPlanController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/models/BirthdayWishesPlan.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/BirthdayWishesService.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/impl/BirthdayWishesServiceImpl.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/task/BirthdayWishesTask.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceApplyController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceBranchUnionApprovalController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceCommonController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceMineController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceNoticeController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceQueryController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceSchoolUnionApprovalController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/models/WarmthCondolence.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/models/WarmthCondolenceNotice.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/param/WarmthCondolenceNoticePageForm.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/param/WarmthCondolencePageForm.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/WarmthCondolenceNoticeService.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/WarmthCondolenceService.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/impl/WarmthCondolenceNoticeServiceImpl.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/impl/WarmthCondolenceServiceImpl.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/vo/WarmthCondolencePageVO.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/vo/WarmthCondolenceVO.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/vo/WarmthCondolenceWordVO.java create mode 100644 src/main/resources/views/platform/sys/branchUnionUserAuthorization/apply/index.html create mode 100644 src/main/resources/views/platform/sys/branchUnionUserAuthorization/approval/index.html create mode 100644 src/main/resources/views/platform/sys/branchUnionUserAuthorization/info.js create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/birthdayWishes/plan.html create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/birthdayWishes/plan/index.html create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/warmthCondolence/apply/index.html create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/warmthCondolence/branchUnionApproval/index.html create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/warmthCondolence/common/info.js create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/warmthCondolence/common/taskRecord.js create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/warmthCondolence/mine/index.html create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/warmthCondolence/notice/index.html create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/warmthCondolence/query/index.html create mode 100644 src/main/resources/views/platform/zhgh/dayofficework/warmthCondolence/schoolUnionApproval/index.html create mode 100644 src/test/java/com/budwk/app/HonorTest.java create mode 100644 src/test/java/com/budwk/app/RestTest.java create mode 100644 src/test/java/com/budwk/app/WarmthCondolenceTest.java diff --git a/src/main/java/com/budwk/app/bpm/service/BpmService.java b/src/main/java/com/budwk/app/bpm/service/BpmService.java index 3e34609..e6c477a 100644 --- a/src/main/java/com/budwk/app/bpm/service/BpmService.java +++ b/src/main/java/com/budwk/app/bpm/service/BpmService.java @@ -929,6 +929,11 @@ public class BpmService { */ public List getNodeTasks(BpmProcessConstant process, String processInstanceBusinessId) { BpmProcessInstance bpmProcessInstance = dao.fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", processInstanceBusinessId)); + + if(ObjectUtil.isEmpty(bpmProcessInstance)){ + return Collections.emptyList(); + } + List tasks = dao.query(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", bpmProcessInstance.getId()).and(BpmProcessTask::getTaskStatus, "!=", BpmProcessTaskStatusEnum.REVOKE.name()).and(BpmProcessTask::getTaskStatus, "!=", BpmProcessTaskStatusEnum.ACTIVE.name()).and(BpmProcessTask::getTaskStatus, "!=", BpmProcessTaskStatusEnum.TRANSFER.name()).asc(BpmProcessTask::getCreatedAt)); //流程定义 diff --git a/src/main/java/com/budwk/app/sys/controller/SysBranchUnionUserAuthorizationController.java b/src/main/java/com/budwk/app/sys/controller/SysBranchUnionUserAuthorizationController.java deleted file mode 100644 index 5ff6036..0000000 --- a/src/main/java/com/budwk/app/sys/controller/SysBranchUnionUserAuthorizationController.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.budwk.app.sys.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.result.Result; -import com.budwk.app.base.utils.PageUtil; -import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; -import com.budwk.app.bpm.service.BpmService; -import com.budwk.app.sys.services.SysUserService; -import com.budwk.app.sys.vo.SysBranchUnionUserAuthorizationPageVO; -import com.budwk.app.web.commons.auth.utils.AuthUtil; -import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.zhgh.dayofficework.article.param.ArticleInfoPageParam; -import com.budwk.app.zhgh.dayofficework.article.vo.ArticleInfoPageVO; -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; -import org.nutz.dao.util.cri.Static; -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; - -@IocBean -@At("/platform/branchUnionUser/authorization") -@Ok("json:full") -@Api(tags = "分工会人员授权") -public class SysBranchUnionUserAuthorizationController { - - @Inject - private SysUserService sysUserService; - @Inject - private BpmService bpmService; - - - @At - @SaCheckPermission("sys.branch.union.authorization") - @ApiOperation("分页查询") - public Result pageData(@Valid ArticleInfoPageParam pageForm, boolean approval) { - Sql sql = Sqls.create(""" - SELECT - info.*, - inst.id processInstanceId, - inst.processInstanceNodeId, - inst.processInstanceNodeName, - inst.processInstanceTaskIds, - inst.processInstanceStatus, - task.id processInstanceTaskId, - task.taskStatus processInstanceTaskStatus, - COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete\s - FROM - bpm_process_task task - INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId - INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId - INNER JOIN sys_branch_union_user_permission info ON info.id = inst.processInstanceBusinessId - LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE' - $condition - """); - Cnd cnd = Cnd.NEW(); - if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { - cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname()))); - } - cnd.and("nd.nodeCode", "=", 20); - if (approval) { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE); - } else { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE); - } - - cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear()); - cnd.and(Cnd.likeEX("info.title", pageForm.getTitle())); - - if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { - cnd.desc("info.createdAt"); - } else { - cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); - } - sql.setCondition(cnd); - Pagination pageVO = sysUserService.listPageVO(pageForm, sql, SysBranchUnionUserAuthorizationPageVO.class); - return Result.success(pageVO); - } - -} diff --git a/src/main/java/com/budwk/app/sys/controller/branchUnionUserAuthorization/SysBranchUnionUserAuthorizationApprovalController.java b/src/main/java/com/budwk/app/sys/controller/branchUnionUserAuthorization/SysBranchUnionUserAuthorizationApprovalController.java new file mode 100644 index 0000000..5b46b1c --- /dev/null +++ b/src/main/java/com/budwk/app/sys/controller/branchUnionUserAuthorization/SysBranchUnionUserAuthorizationApprovalController.java @@ -0,0 +1,170 @@ +package com.budwk.app.sys.controller.branchUnionUserAuthorization; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.bean.BeanUtil; +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.bpm.enums.BpmProcessTaskStatusEnum; +import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum; +import com.budwk.app.bpm.param.BpmTaskApprovalParam; +import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.sys.models.Sys_branch_union_user_permission; +import com.budwk.app.sys.models.Sys_user_role; +import com.budwk.app.sys.services.SysDictService; +import com.budwk.app.sys.services.SysRoleService; +import com.budwk.app.sys.services.SysUserService; +import com.budwk.app.sys.vo.SysBranchUnionUserAuthorizationPageVO; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +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.dao.util.cri.Static; +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 javax.validation.Valid; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@IocBean +@At("/platform/branchUnionUser/authorization/approval") +@Ok("json:full") +@Api(tags = "分工会人员授权校工会审核") +public class SysBranchUnionUserAuthorizationApprovalController { + + @Inject + private SysUserService sysUserService; + @Inject + private BpmService bpmService; + @Inject + private SysDictService sysDictService; + @Inject + private Dao dao; + @Inject + private SysRoleService sysRoleService; + + @At("") + @SaCheckPermission("sys.branch.union.authorization.approval") + @Ok("beetl:/platform/sys/branchUnionUserAuthorization/approval/index.html") + public void index() { + + } + + @At + @SaCheckPermission("sys.branch.union.authorization.approval") + @ApiOperation("分页查询") + public Result pageData(@Valid PageForm pageForm, String unionId, boolean approval) { + Sql sql = Sqls.create(""" + SELECT + info.*, + u.username as userName, + u.loginname as loginName, + u.mobile as mobile, + r.name as roleName, + gh.name as unionName, + inst.id processInstanceId, + inst.processInstanceNodeId, + inst.processInstanceNodeName, + inst.processInstanceTaskIds, + inst.processInstanceStatus, + task.id processInstanceTaskId, + task.taskStatus processInstanceTaskStatus, + COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete\s + FROM + bpm_process_task task + INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId + INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId + INNER JOIN sys_branch_union_user_permission info ON info.id = inst.processInstanceBusinessId + LEFT JOIN sys_user u on u.id = info.userId + LEFT JOIN sys_role r on r.id = info.roleId + LEFT JOIN sys_union gh on gh.id = info.unionId + LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE' + $condition + """); + Cnd cnd = Cnd.NEW(); + if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { + cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname()))); + } + cnd.and("nd.nodeCode", "=", 20); + if (approval) { + cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE); + } else { + cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE); + } + + cnd.andEX("info.unionId", "=", unionId); + + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + cnd.where().andLike("u.username", pageForm.getSearchKeyword()); + } + + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.orderBy("info.createdAt", "desc"); + } else { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + sql.setCondition(cnd); + Pagination pageVO = sysUserService.listPageVO(pageForm, sql, SysBranchUnionUserAuthorizationPageVO.class); + return Result.success(pageVO); + } + + @At + @SaCheckPermission("sys.branch.union.authorization.approval") + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("校工会审核") + public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam) { + approvalParam.getBpmTaskApprovalTypeEnum(); + Map variables = BeanUtil.beanToMap(approvalParam); + List assignments = new ArrayList<>(); + bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments); + + if (approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)) { + // 审核通过 + String businessId = approvalParam.getProcessInstanceBusinessId(); + Sys_branch_union_user_permission userPermission = dao.fetch(Sys_branch_union_user_permission.class, businessId); + if (userPermission != null) { + if (userPermission.getMode().equals("JOIN")) { + // 加入角色 + Sys_user_role userRole = new Sys_user_role(); + userRole.setRoleId(userPermission.getRoleId()); + userRole.setUserId(userPermission.getUserId()); + userRole.setUnionId(userPermission.getUnionId()); + dao.insert(userRole); + } else { + // 移除角色 + dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getUserId, "=", userPermission.getUserId()).and(Sys_user_role::getUnionId, "=", userPermission.getUnionId()) + .and(Sys_user_role::getRoleId, "=", userPermission.getRoleId())); + } + sysUserService.clearCache(); + } + } + + return Result.success(); + } + + + @At + @SaCheckPermission("sys.branch.union.authorization.approval") + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("校工会撤回") + public Result revoke(@Valid String taskId) { + bpmService.revokeTask(taskId); + return Result.success(); + } + + +} diff --git a/src/main/java/com/budwk/app/sys/controller/branchUnionUserAuthorization/SysBranchUnionUserAuthorizationCommonController.java b/src/main/java/com/budwk/app/sys/controller/branchUnionUserAuthorization/SysBranchUnionUserAuthorizationCommonController.java new file mode 100644 index 0000000..342c34a --- /dev/null +++ b/src/main/java/com/budwk/app/sys/controller/branchUnionUserAuthorization/SysBranchUnionUserAuthorizationCommonController.java @@ -0,0 +1,46 @@ +package com.budwk.app.sys.controller.branchUnionUserAuthorization; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.result.Result; +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.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import javax.validation.Valid; + +@IocBean +@At("/platform/branchUnionUser/authorization/common") +@Ok("json:full") +public class SysBranchUnionUserAuthorizationCommonController { + + @Inject + private Dao dao; + + @At + @SaCheckPermission("sys.branch.union.authorization") + public Result info(@Valid String id) { + Sql sql = Sqls.create(""" + SELECT + t1.*, + u.username userName, + u.loginname loginName, + u.mobile, + gh.NAME unionName + FROM + sys_branch_union_user_permission t1 + LEFT JOIN sys_user u ON u.id = t1.userId + LEFT JOIN sys_union gh ON gh.id = t1.unionId + WHERE t1.id = @id + """); + sql.setParam("id", id); + sql.setCallback(Sqls.callback.map()); + dao.execute(sql); + Object result = sql.getResult(); + return Result.success(result); + } + +} diff --git a/src/main/java/com/budwk/app/sys/controller/branchUnionUserAuthorization/SysBranchUnionUserAuthorizationController.java b/src/main/java/com/budwk/app/sys/controller/branchUnionUserAuthorization/SysBranchUnionUserAuthorizationController.java new file mode 100644 index 0000000..7ea3720 --- /dev/null +++ b/src/main/java/com/budwk/app/sys/controller/branchUnionUserAuthorization/SysBranchUnionUserAuthorizationController.java @@ -0,0 +1,281 @@ +package com.budwk.app.sys.controller.branchUnionUserAuthorization; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.constant.BpmProcessConstant; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.bpm.enums.BpmProcessInstanceStatusEnum; +import com.budwk.app.bpm.models.BpmProcessInstance; +import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.sys.models.Sys_branch_union_user_permission; +import com.budwk.app.sys.models.Sys_dict; +import com.budwk.app.sys.models.Sys_role; +import com.budwk.app.sys.models.Sys_user_role; +import com.budwk.app.sys.services.SysDictService; +import com.budwk.app.sys.services.SysRoleService; +import com.budwk.app.sys.services.SysUserService; +import com.budwk.app.sys.views.View_user; +import com.budwk.app.sys.vo.SysBranchUnionUserAuthorizationPageVO; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +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.dao.util.cri.SqlExpressionGroup; +import org.nutz.dao.util.cri.Static; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; +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.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@IocBean +@At("/platform/branchUnionUser/authorization/apply") +@Ok("json:full") +@Api(tags = "分工会人员授权") +public class SysBranchUnionUserAuthorizationController { + + @Inject + private SysUserService sysUserService; + @Inject + private BpmService bpmService; + @Inject + private SysDictService sysDictService; + @Inject + private Dao dao; + @Inject + private SysRoleService sysRoleService; + + @At("") + @SaCheckPermission("sys.branch.union.authorization") + @Ok("beetl:/platform/sys/branchUnionUserAuthorization/apply/index.html") + public void index() { + + } + + @At + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("分工会人员授权") + @SaCheckPermission("sys.branch.union.authorization") + public Result doApply(@Valid String userId, @Valid String roleCode, String reason) { + Sys_role role = sysRoleService.fetch(Cnd.where("code", "=", roleCode)); + if (Lang.isEmpty(role)) { + return Result.error("无法找到" + roleCode + "对应编码的角色"); + } + + int count = dao.count(Sys_user_role.class, Cnd.where(Sys_user_role::getUserId, "=", userId).and(Sys_user_role::getRoleId, "=", role.getId())); + if (count > 0) { + return Result.error("用户已授权"); + } + + Sys_branch_union_user_permission permission = dao.fetch(Sys_branch_union_user_permission.class, Cnd.where(Sys_branch_union_user_permission::getUserId, "=", userId).and(Sys_branch_union_user_permission::getRoleId, "=", role.getId())); + if (permission != null) { + // 查询流程实例信息 + BpmProcessInstance instance = dao.fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", permission.getId())); + if (instance.getProcessInstanceNodeCode() == 20) { + return Result.error("不能重复申请"); + } + // 其它的情况就是校工会拒绝了 那么可以再申请一条 + } + + // 插入数据 + Sys_branch_union_user_permission newPermission = new Sys_branch_union_user_permission(); + newPermission.setUserId(userId); + newPermission.setRoleId(role.getId()); + newPermission.setUnionId(SecurityUtil.getUnionId()); + newPermission.setMode("JOIN"); + newPermission.setReason(reason); + dao.insert(newPermission); + + List assignments = new ArrayList<>(); + assignments.add(SecurityUtil.getUserId()); + + // 启动流程实例 + bpmService.startSubmitProcessInstance(BpmProcessConstant.BRANCH_UNION_WEIYUAN_AUTHORIZATION.name(), "分工会人员授权", newPermission.getId(), assignments, null); + + return Result.success(); + } + + + @At + @SaCheckPermission("sys.manager.union") + @ApiOperation("分工会人员授权分页数据") + public Result branchUnionUserPageData(PageForm pageForm) { + List branchUnionRoles = sysDictService.getSubListByCode("BRANCH_UNION_ROLES"); + if (Lang.isEmpty(branchUnionRoles)) { + return Result.success(); + } + List branchUnionRoleCodes = branchUnionRoles.stream().map(Sys_dict::getCode).toList(); + + Sql sql = Sqls.create(""" + SELECT + t1.userId, + t1.roleId, + t1.unionId, + t2.username, + t2.loginname, + t2.mobile, + t3.`code` AS roleCode, + t3.`name` AS roleName + FROM + sys_user_role t1 + LEFT JOIN sys_user t2 ON t2.id = t1.userId + LEFT JOIN sys_role t3 ON t3.id = t1.roleId + $condition + """); + Cnd cnd = Cnd.where("t3.`code`", "in", branchUnionRoleCodes); + cnd.and("t1.unionId", "=", SecurityUtil.getUnionId()); + if (StrUtil.isAllNotBlank(pageForm.getSearchName(), pageForm.getSearchKeyword())) { + switch (pageForm.getSearchName()) { + case "loginname" -> cnd.where().andLike("t2.loginname", pageForm.getSearchKeyword()); + case "username" -> cnd.where().andLike("t2.username", pageForm.getSearchKeyword()); + case "roleName" -> cnd.where().andLike("t3.`name`", pageForm.getSearchKeyword()); + } + } + cnd.and(new Static("1=1 order by field(t3.code," + branchUnionRoleCodes.stream().map(code -> "'" + code + "'").collect(Collectors.joining(",")) + ")")); + sql.setCondition(cnd); + List list = sysUserService.listMap(sql); + return Result.success(list); + } + + @At + @ApiOperation("按关键字查询分工会下的人员") + @Ok("json:{ignoreNull:true}") + @SaCheckPermission("sys.manager.union") + public Result listUserSelect(@Valid String keyWord) { + Sql sql = Sqls.create("select id,loginname,username,unitname from vw_user $condition"); + Cnd cnd = Cnd.NEW(); + cnd.and(View_user::getUnionId, "=", SecurityUtil.getUnionId()); + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike(View_user::getLoginname, keyWord, true); + seg.orLike(View_user::getUsername, keyWord, true); + cnd.and(seg); + cnd.limit(1, 10); + sql.setCondition(cnd); + sql.setCallback(Sqls.callback.entities()); + sql.setEntity(dao.getEntity(View_user.class)); + dao.execute(sql); + List list = sql.getList(View_user.class); + return Result.success(list); + } + + + @At + @SaCheckPermission("sys.branch.union.authorization") + @ApiOperation("分页查询") + public Result pageData(@Valid PageForm pageForm, String mode) { + Sql sql = Sqls.create(""" + SELECT + info.*, + u.username as userName, + u.loginname as loginName, + u.mobile as mobile, + r.name as roleName, + inst.id processInstanceId, + inst.processInstanceNodeId, + inst.processInstanceNodeCode, + inst.processInstanceNodeName, + inst.processInstanceTaskIds, + inst.processInstanceStatus, + ( + SELECT + count(1) > 0 + FROM + bpm_process_task + WHERE + prevTaskId = (SELECT id FROM bpm_process_task WHERE processInstanceId = inst.id AND processTaskNodeCode IN (10, 30) ORDER BY createdAt DESC LIMIT 1) + AND taskStatus = 'COMPELTE') AS nextTaskIsComplete + FROM + sys_branch_union_user_permission info + LEFT JOIN sys_user u on u.id = info.userId + LEFT JOIN sys_role r on r.id = info.roleId + LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id + $condition + """); + Cnd cnd = Cnd.NEW(); + if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { + cnd.and("inst.processInstanceInitiatorLoginName", "=", SecurityUtil.getUserLoginname()); + } + if(StrUtil.isNotBlank(pageForm.getSearchKeyword())){ + cnd.where().andLike("u.username",pageForm.getSearchKeyword()); + } + cnd.andEX("info.mode", "=", mode); + sql.setCondition(cnd); + Pagination pageVO = sysUserService.listPageVO(pageForm, sql, SysBranchUnionUserAuthorizationPageVO.class); + return Result.success(pageVO); + } + + + @At + @SaCheckPermission("sys.branch.union.authorization") + @ApiOperation("取消授权") + @Aop(TransAop.READ_COMMITTED) + public Result cancel(@Valid String userId, @Valid String roleId, @Valid String unionId) { + + // 查询是否已经有退出的申请事项了 + List list = dao.query(Sys_branch_union_user_permission.class, Cnd.where(Sys_branch_union_user_permission::getUserId, "=", userId) + .and(Sys_branch_union_user_permission::getRoleId, "=", roleId) + .and(Sys_branch_union_user_permission::getUnionId, "=", unionId) + .and(Sys_branch_union_user_permission::getMode, "=", "EXIT")); + + List ids = list.stream().map(Sys_branch_union_user_permission::getId).toList(); + + // 查询流程实例 + List instances = dao.query(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "in", ids)); + + boolean b = instances.stream().anyMatch(instance -> instance.getProcessInstanceStatus().equals(BpmProcessInstanceStatusEnum.RUNNING.name())); + + if (b) { + return Result.error("当前有正在进行的退出申请流程,不能重复取消授权"); + } + + + // 插入数据 + Sys_branch_union_user_permission newPermission = new Sys_branch_union_user_permission(); + newPermission.setUserId(userId); + newPermission.setRoleId(roleId); + newPermission.setUnionId(unionId); + newPermission.setMode("EXIT"); + dao.insert(newPermission); + + List assignments = new ArrayList<>(); + assignments.add(SecurityUtil.getUserId()); + + // 启动流程实例 + bpmService.startSubmitProcessInstance(BpmProcessConstant.BRANCH_UNION_WEIYUAN_AUTHORIZATION.name(), "分工会人员授权", newPermission.getId(), assignments, null); + + return Result.success(); + } + + + @At + @SaCheckPermission("sys.branch.union.authorization") + @ApiOperation("取消申请") + @Aop(TransAop.READ_COMMITTED) + public Result cancelApply(@Param("id") String id) { + Sys_branch_union_user_permission userPermission = dao.fetch(Sys_branch_union_user_permission.class, id); + if (userPermission == null) { + return Result.error("授权不存在"); + } + // 删除 + dao.delete(userPermission); + // 删除流程实例 + bpmService.deleteInstance(userPermission.getId()); + return Result.success(); + } +} diff --git a/src/main/java/com/budwk/app/sys/models/Sys_branch_union_user_permission.java b/src/main/java/com/budwk/app/sys/models/Sys_branch_union_user_permission.java index dba112e..32ae6c5 100644 --- a/src/main/java/com/budwk/app/sys/models/Sys_branch_union_user_permission.java +++ b/src/main/java/com/budwk/app/sys/models/Sys_branch_union_user_permission.java @@ -33,4 +33,14 @@ public class Sys_branch_union_user_permission extends BaseModel { @ColDefine(type = ColType.VARCHAR, width = 32) private String unionId; + @Column + @Comment("权限模式(JOIN、EXIT)") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String mode; + + @Column + @Comment("申请理由") + @ColDefine(type = ColType.VARCHAR, width = 255) + private String reason; + } diff --git a/src/main/java/com/budwk/app/sys/models/Sys_task.java b/src/main/java/com/budwk/app/sys/models/Sys_task.java index 141554b..9d9d22c 100644 --- a/src/main/java/com/budwk/app/sys/models/Sys_task.java +++ b/src/main/java/com/budwk/app/sys/models/Sys_task.java @@ -20,7 +20,7 @@ public class Sys_task extends BaseModel implements Serializable { @Column @Name @ColDefine(type = ColType.VARCHAR, width = 32) - @PrevInsert(els = {@EL("uuid()")}) + @PrevInsert(uu32 = true) private String id; @Column diff --git a/src/main/java/com/budwk/app/sys/vo/SysBranchUnionUserAuthorizationPageVO.java b/src/main/java/com/budwk/app/sys/vo/SysBranchUnionUserAuthorizationPageVO.java index 031a165..e4f63ac 100644 --- a/src/main/java/com/budwk/app/sys/vo/SysBranchUnionUserAuthorizationPageVO.java +++ b/src/main/java/com/budwk/app/sys/vo/SysBranchUnionUserAuthorizationPageVO.java @@ -8,9 +8,21 @@ import lombok.EqualsAndHashCode; @Data public class SysBranchUnionUserAuthorizationPageVO extends BpmTaskApprovalVo { + private String userName; + + private String loginName; + + private String mobile; + + private String roleName; + private String userId; private String roleId; private String unionId; + + private String unionName; + + private String mode; } diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubInfoManageController.java b/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubInfoManageController.java index 3f9c4a6..5da5323 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubInfoManageController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubInfoManageController.java @@ -52,6 +52,7 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.ByteArrayOutputStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -166,13 +167,15 @@ public class ClubInfoManageController { @SLog(type = "infoManage", tag = "删除协会成员", msg = "删除协会成员", param = true) public Result userDelete(@Valid String id) { ClubUser clubUser = dao.fetch(ClubUser.class, id); - dao.delete(ClubUser.class,id); -// sysClubUserService.clear(Cnd.where("id", "=", id)); - Sys_role sysRole = sysRoleService.getByCode(clubUser.getRoleCode()); - if(ObjectUtil.isNotEmpty(sysRole)){ - dao.clear(Sys_user_role.class, Cnd.NEW().and("userId", "=", clubUser.getUserId()) - .and("roleId", "=", sysRole.getId()) - .and("clubId", "=", clubUser.getClubId())); + dao.delete(ClubUser.class, id); + List roleCodes = clubUser.getRoleCode(); + for (String roleCode : roleCodes) { + Sys_role sysRole = sysRoleService.getByCode(roleCode); + if (ObjectUtil.isNotEmpty(sysRole)) { + dao.clear(Sys_user_role.class, Cnd.NEW().and("userId", "=", clubUser.getUserId()) + .and("roleId", "=", sysRole.getId()) + .and("clubId", "=", clubUser.getClubId())); + } } sysUserService.clearCache(); sysRoleService.clearCache(); @@ -202,10 +205,22 @@ public class ClubInfoManageController { //如果变更为会员,则直接变更 if (Objects.equals(roleCode, RoleConstant.CLUB_MEMBER.name())) { - sysClubUserService.dao().update(ClubUser.class,Chain.make("roleCode", roleCode), Cnd.where("id", "=", id)); + sysClubUserService.dao().update(ClubUser.class, Chain.make("roleCode", roleCode), Cnd.where("id", "=", id)); //变更为会员则需要清除社团负责人角色 dao.clear(Sys_user_role.class, Cnd.where("clubId", "=", clubId).and("userId", "=", clubUser.getUserId()) .and("roleId", "in", roleList)); + } else if (Objects.equals(roleCode, RoleConstant.CLUB_OPERATOR.name())) { + // 变更为协会操作员添加角色即可 此用户可能是会长也可能是秘书长 + Sys_role operatorRole = sysRoleService.getByCode(RoleConstant.CLUB_OPERATOR); + dao.clear(Sys_user_role.class, Cnd.where("clubId", "=", clubId).and("userId", "=", clubUser.getUserId()).and("roleId", "=", operatorRole.getId())); + //插入新的身份角色 + Sys_user_role sysUserRole = new Sys_user_role(); + sysUserRole.setUserId(clubUser.getUserId()); + sysUserRole.setRoleId(operatorRole.getId()); + sysUserRole.setClubId(clubId); + dao.insert(sysUserRole); + clubUser.getRoleCode().add(roleCode); + dao.update(clubUser); } else { //先清除原始身份的角色 dao.clear(Sys_user_role.class, Cnd.where("clubId", "=", clubId).and("userId", "=", clubUser.getUserId()) @@ -218,7 +233,9 @@ public class ClubInfoManageController { sysUserRole.setClubId(clubId); dao.insert(sysUserRole); - clubUser.setRoleCode(roleCode); + // 添加新身份 + clubUser.getRoleCode().add(roleCode); + dao.update(clubUser); /* //变更社团负责人,如果是管理员直接变更完成 if (AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name(), RoleConstant.SCHOOL_CLUB_MANAGER.name())) { @@ -316,28 +333,70 @@ public class ClubInfoManageController { } cUser.setClubId(clubId); cUser.setUserId(user); - cUser.setRoleCode(roleCode); + cUser.setRoleCode(List.of(roleCode)); sysClubUserService.insertOrUpdate(cUser); } return Result.success(); } + + /*===============================20250806新增授权 zhaoxinyu==========================================*/ + + @At + @SaCheckPermission("club.infoManage.manage") + @ApiOperation("授权") + public Result doAuthRole(@Valid String userId, @Valid String clubId, @Param("roleCode") @Valid String[] roleCode) { + // 删除原来的身份 + List roleCodes = List.of(RoleConstant.CLUB_PRESIDENT.name(), + RoleConstant.CLUB_VICE_PRESIDENT.name(), + RoleConstant.CLUB_SECRETARY.name(), + RoleConstant.CLUB_VICE_SECRETARY.name(), + RoleConstant.CLUB_MEMBER.name()); + for (String code : roleCodes) { + String roleId = sysRoleService.getByCode(code).getId(); + dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getUserId, "=", userId).and(Sys_user_role::getClubId, "=", clubId).and(Sys_user_role::getRoleId, "=", roleId)); + } + + // 新增身份 + ClubUser clubUser = dao.fetch(ClubUser.class, Cnd.where(ClubUser::getClubId, "=", clubId).and(ClubUser::getUserId, "=", userId)); + clubUser.setRoleCode(Arrays.asList(roleCode)); + dao.update(clubUser,"roleCode"); + + // 新增权限 + for (String code : roleCode) { + Sys_role sysRole = sysRoleService.getByCode(code); + Sys_user_role userRole = new Sys_user_role(); + userRole.setUserId(userId); + userRole.setRoleId(sysRole.getId()); + userRole.setClubId(clubId); + dao.insert(userRole); + } + + sysUserService.clearCache(); + sysRoleService.clearCache(); + + return Result.success(); + } + + /*===============================20250806新增授权 zhaoxinyu==========================================*/ + + @At @SaCheckPermission("club.infoManage.manage") @ApiOperation("导出登记表") - public void exportRegistrationDoc(@Valid String clubId, HttpServletResponse response){ - clubInfoManageService.exportRegistrationDoc(clubId,response); + public void exportRegistrationDoc(@Valid String clubId, HttpServletResponse response) { + clubInfoManageService.exportRegistrationDoc(clubId, response); } @At @Ok("void") @SaCheckPermission("club.infoManage.manage") public void downloadUserImport(HttpServletResponse response) { - try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();){ + try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();) { EasyExcel.write(byteArrayOutputStream, ClubUserImportVo.class) .sheet("协会会员导入模版") .doWrite(ArrayList::new); - CommonDownloadUtil.download("协会会员导入模版.xlsx",byteArrayOutputStream.toByteArray() ,response); + CommonDownloadUtil.download("协会会员导入模版.xlsx", byteArrayOutputStream.toByteArray(), response); } catch (Exception e) { e.printStackTrace(); } @@ -353,7 +412,7 @@ public class ClubInfoManageController { List mdList = JSONUtil.parseArray(JSONUtil.toJsonStr(ts)).toList(ClubUserImportVo.class); List loginNames = mdList.stream().map(ClubUserImportVo::getLoginname).collect(Collectors.toList()); List sysUsers = sysClubUserService.dao().query(View_user.class, Cnd.where("loginname", "in", loginNames)); - List clubUsers = sysClubUserService.dao().query(ClubUser.class,Cnd.where("clubId", "=", businessId)); + List clubUsers = sysClubUserService.dao().query(ClubUser.class, Cnd.where("clubId", "=", businessId)); List clubUserList = new ArrayList<>(); @@ -365,7 +424,7 @@ public class ClubInfoManageController { List errorInfos = new ArrayList<>(); for (ClubUserImportVo v : mdList) { View_user user = sysUsers.stream().filter(s -> s.getLoginname().equals(v.getLoginname())).findFirst().orElse(null); - if (Lang.isEmpty(user)){ + if (Lang.isEmpty(user)) { v.setErrorInfo("数据库暂无此人请检查工号"); errorInfos.add(v); continue; @@ -379,7 +438,7 @@ public class ClubInfoManageController { cUser.setClubPosition(v.getClubPosition()); cUser.setUserId(user.getId()); cUser.setClubId(businessId); - cUser.setRoleCode(RoleConstant.CLUB_MEMBER.name()); + cUser.setRoleCode(List.of(RoleConstant.CLUB_MEMBER.name())); clubUserList.add(cUser); } sysClubUserService.insert(clubUserList); diff --git a/src/main/java/com/budwk/app/zhgh/club/model/ClubUser.java b/src/main/java/com/budwk/app/zhgh/club/model/ClubUser.java index fb0877a..3dce257 100644 --- a/src/main/java/com/budwk/app/zhgh/club/model/ClubUser.java +++ b/src/main/java/com/budwk/app/zhgh/club/model/ClubUser.java @@ -6,6 +6,9 @@ import lombok.EqualsAndHashCode; import org.nutz.dao.entity.annotation.*; import org.nutz.dao.interceptor.annotation.PrevInsert; +import java.util.ArrayList; +import java.util.List; + @Data @EqualsAndHashCode(callSuper = true) @Table("club_user") @@ -31,8 +34,8 @@ public class ClubUser extends BaseModel { @Column @Comment("身份") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String roleCode; + @ColDefine(type = ColType.MYSQL_JSON) + private List roleCode = new ArrayList<>(); @Column @Comment("协会职务") diff --git a/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubInfoManageServiceImpl.java b/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubInfoManageServiceImpl.java index 1d9c2b2..9b4b514 100644 --- a/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubInfoManageServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubInfoManageServiceImpl.java @@ -124,15 +124,17 @@ public class SysClubInfoManageServiceImpl extends BaseServiceImpl implements SysC List clubUsers = managePerson.stream().map(person -> { ClubUser clubUser = new ClubUser(); clubUser.setClubId(club.getId()); - clubUser.setRoleCode(person.getString("roleCode")); + clubUser.setRoleCode(List.of(person.getString("roleCode"))); clubUser.setUserId(person.getString("userId")); return clubUser; }).toList(); diff --git a/src/main/java/com/budwk/app/zhgh/club/vo/ClubUserCommonPageVo.java b/src/main/java/com/budwk/app/zhgh/club/vo/ClubUserCommonPageVo.java index 2081a09..fac82e6 100644 --- a/src/main/java/com/budwk/app/zhgh/club/vo/ClubUserCommonPageVo.java +++ b/src/main/java/com/budwk/app/zhgh/club/vo/ClubUserCommonPageVo.java @@ -31,4 +31,6 @@ public class ClubUserCommonPageVo extends SysClubUser { private String unionId; private String roleName; + + private String roleNames; } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/controller/BirthdayWishesPlanController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/controller/BirthdayWishesPlanController.java new file mode 100644 index 0000000..c0df1fb --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/controller/BirthdayWishesPlanController.java @@ -0,0 +1,127 @@ +package com.budwk.app.zhgh.dayofficework.birthdayWishes.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +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.sys.models.Sys_task; +import com.budwk.app.sys.services.SysTaskService; +import com.budwk.app.task.services.TaskPlatformService; +import com.budwk.app.zhgh.dayofficework.birthdayWishes.models.BirthdayWishesPlan; +import com.budwk.app.zhgh.dayofficework.birthdayWishes.service.BirthdayWishesService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +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.json.Json; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +@IocBean +@At("/platform/birthdayWishes/plan") +@Ok("json:full") +@Api(tags = "生日祝福") +public class BirthdayWishesPlanController { + + @Inject + private Dao dao; + @Inject + private BirthdayWishesService birthdayWishesService; + @Inject + private SysTaskService sysTaskService; + @Inject + private TaskPlatformService taskPlatformService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/birthdayWishes/plan/index.html") + @SaCheckPermission("birthdayWishes") + public void index() { + } + + @At + @Ok("json:full") + @SaCheckPermission("birthdayWishes") + public Result pageData(PageForm pageForm) { + Cnd cnd = Cnd.NEW(); + Pagination pagination = birthdayWishesService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); + return Result.success(pagination); + } + + @At + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("添加计划") + @SaCheckPermission("birthdayWishes") + public Result insert(BirthdayWishesPlan wishesPlan) { + dao.insert(wishesPlan); + + // 插入定时任务 + Sys_task sysTask = new Sys_task(); + sysTask.setId(wishesPlan.getId()); + sysTask.setName(wishesPlan.getName()); + sysTask.setJobClass("com.budwk.app.zhgh.dayofficework.birthdayWishes.task.BirthdayWishesTask"); + sysTask.setCron(wishesPlan.getCron()); + sysTask.setData(Json.toJson(wishesPlan)); + sysTask.setDisabled(!wishesPlan.getEnabled()); +// sysTaskService.fastInsert(sysTask); + sysTaskService.insert("sys_task", Chain.from(sysTask)); + + // 添加定时任务 + if (wishesPlan.getEnabled()) { + if (!taskPlatformService.isExist(sysTask.getId(), sysTask.getId())) { + taskPlatformService.add(sysTask.getId(), sysTask.getId(), sysTask.getJobClass(), sysTask.getCron(), sysTask.getNote(), sysTask.getData()); + } + } + + return Result.success(); + } + + @At + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("更新计划") + @SaCheckPermission("birthdayWishes") + public Result update(BirthdayWishesPlan wishesPlan) { + dao.update(wishesPlan); + + Sys_task sysTask = sysTaskService.fetch(wishesPlan.getId()); + sysTask.setName(wishesPlan.getName()); + sysTask.setCron(wishesPlan.getCron()); + sysTask.setData(Json.toJson(wishesPlan)); + sysTask.setDisabled(!wishesPlan.getEnabled()); + sysTaskService.update(sysTask); + + if (wishesPlan.getEnabled()) { + if (taskPlatformService.isExist(sysTask.getId(), sysTask.getId())) { + taskPlatformService.delete(sysTask.getId(), sysTask.getId()); + } + taskPlatformService.add(sysTask.getId(), sysTask.getId(), sysTask.getJobClass(), sysTask.getCron(), sysTask.getNote(), sysTask.getData()); + } else { + if (taskPlatformService.isExist(sysTask.getId(), sysTask.getId())) { + taskPlatformService.delete(sysTask.getId(), sysTask.getId()); + } + } + + + return Result.success(); + } + + @At + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("删除计划") + @SaCheckPermission("birthdayWishes") + public Result delete(@Param("id") String id) { + dao.delete(BirthdayWishesPlan.class, id); + dao.clear(Sys_task.class, Cnd.where(Sys_task::getId, "=", id)); + if (taskPlatformService.isExist(id, id)) { + taskPlatformService.delete(id, id); + } + return Result.success(); + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/models/BirthdayWishesPlan.java b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/models/BirthdayWishesPlan.java new file mode 100644 index 0000000..09444e7 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/models/BirthdayWishesPlan.java @@ -0,0 +1,41 @@ +package com.budwk.app.zhgh.dayofficework.birthdayWishes.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; + +@EqualsAndHashCode(callSuper = true) +@Data +@Table("birthday_wishes_plan") +@Comment("生日祝福计划") +public class BirthdayWishesPlan extends BaseModel { + + @Name + @Comment("ID") + @PrevInsert(uu32 = true) + private String id; + + @Comment("计划名称") + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + private String name; + + @Comment("定时任务") + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + private String cron; + + @Comment("模板") + @Column + @ColDefine(type = ColType.VARCHAR, width = 200) + private String template; + + @Comment("是否启用") + @Column + @ColDefine(type = ColType.BOOLEAN) + @Default("1") + private Boolean enabled; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/BirthdayWishesService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/BirthdayWishesService.java new file mode 100644 index 0000000..e5bf3da --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/BirthdayWishesService.java @@ -0,0 +1,7 @@ +package com.budwk.app.zhgh.dayofficework.birthdayWishes.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.birthdayWishes.models.BirthdayWishesPlan; + +public interface BirthdayWishesService extends BaseService { +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/impl/BirthdayWishesServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/impl/BirthdayWishesServiceImpl.java new file mode 100644 index 0000000..3d9b9d1 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/service/impl/BirthdayWishesServiceImpl.java @@ -0,0 +1,14 @@ +package com.budwk.app.zhgh.dayofficework.birthdayWishes.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.dayofficework.birthdayWishes.models.BirthdayWishesPlan; +import com.budwk.app.zhgh.dayofficework.birthdayWishes.service.BirthdayWishesService; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +@IocBean(args = {"refer:dao"}) +public class BirthdayWishesServiceImpl extends BaseServiceImpl implements BirthdayWishesService { + public BirthdayWishesServiceImpl(Dao dao) { + super(dao); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/task/BirthdayWishesTask.java b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/task/BirthdayWishesTask.java new file mode 100644 index 0000000..cb6d261 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/birthdayWishes/task/BirthdayWishesTask.java @@ -0,0 +1,61 @@ +package com.budwk.app.zhgh.dayofficework.birthdayWishes.task; + +import cn.hutool.core.date.DateUtil; +import com.budwk.app.sys.models.Sys_msg; +import com.budwk.app.sys.services.SysMsgService; +import lombok.extern.slf4j.Slf4j; +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.quartz.Job; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import java.util.List; + +@IocBean +@Slf4j +public class BirthdayWishesTask implements Job { + + @Inject + protected SysMsgService sysMsgService; + @Inject + protected Dao dao; + + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + log.info("=================================执行计划任务:{}", context.getJobDetail().getKey().getName()); + JobDataMap dataMap = context.getJobDetail().getJobDataMap(); + log.info("=================================参数:{}", Json.toJson(dataMap)); + + String planName = dataMap.getString("name"); + + String today = DateUtil.today(); + + Sys_msg msg = new Sys_msg(); + msg.setTitle(planName + today); + msg.setType("user"); + msg.setSendType("show"); + msg.setSendAt(DateUtil.current()); + msg.setNote(dataMap.getString("template")); + + // 查询今天生日的会员用户 + Sql sql = Sqls.create("SELECT loginname FROM sys_user WHERE member = 1 AND MONTH(birthday) = MONTH(CURRENT_DATE) AND DAY(birthday) = DAY(CURRENT_DATE)"); + sql.setCallback(Sqls.callback.strList()); + dao.execute(sql); + List users = sql.getList(String.class); + // 转为数组 + String[] userArray = users.toArray(String[]::new); + log.info("=================================查询今天生日会员用户:{}", users); + + if(userArray.length > 0){ + log.info("=================================发送消息:{}", msg); + sysMsgService.saveMsg(msg, userArray, true); + } + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/honor/controller/HonorBasicSettingsController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/honor/controller/HonorBasicSettingsController.java index 9a47ee8..d338728 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/honor/controller/HonorBasicSettingsController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/honor/controller/HonorBasicSettingsController.java @@ -85,7 +85,7 @@ public class HonorBasicSettingsController { } else { dao.updateIgnoreNull(honorBasicSettings); } - dao.update(Chain.make("hasChildren", true), Cnd.where("id", "=", honorBasicSettings.getParentId())); + dao.update(HonorBasicSettings.class, Chain.make("hasChildren", true), Cnd.where("id", "=", honorBasicSettings.getParentId())); return Result.success(); } catch (Exception e) { return Result.error(); @@ -101,11 +101,12 @@ public class HonorBasicSettingsController { /** * 获取荣誉类别 + * * @return */ @At @SaCheckLogin - public Result getHonorType(){ + public Result getHonorType() { List list = honorCommonService.getHonorBasicSettingsByQueryTypeCode(HonorTypeOrigin.HONOR_TYPE.name()); return Result.success(list); } @@ -113,6 +114,7 @@ public class HonorBasicSettingsController { /** * 获取获奖等级 + * * @return */ @At @@ -125,6 +127,7 @@ public class HonorBasicSettingsController { /** * 获取奖项介质 + * * @return */ @At @@ -136,6 +139,7 @@ public class HonorBasicSettingsController { /** * 获取个人荣誉 + * * @return */ @At @@ -147,6 +151,7 @@ public class HonorBasicSettingsController { /** * 获取集体荣誉 + * * @return */ @At @@ -173,10 +178,10 @@ public class HonorBasicSettingsController { cndGr.and("stateId", "=", stateId).and("honorTypeId", "=", "8a8b455b964a41f2bbf18a4896cbd83e"); Cnd cndJt = Cnd.NEW(); cndJt.and("stateId", "=", stateId).and("honorTypeId", "=", "6b9e26a9467f49ae88fbd3951377e0f8"); - if("1600".equals(stateId) && !AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name())) { + if ("1600".equals(stateId) && !AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name())) { cndGr.and("unionId", "=", SecurityUtil.getUnionId()); } - if("1700".equals(stateId) && !AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name())) { + if ("1700".equals(stateId) && !AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name())) { cndGr.and("unitId", "=", SecurityUtil.getUnionId()); } return null; @@ -218,12 +223,12 @@ public class HonorBasicSettingsController { LEFT JOIN `sys_user_role` sur ON u.id = sur.userId LEFT JOIN `sys_role` sr ON sr.id = sur.roleId $condition - """).setParam("unionId",id); + """).setParam("unionId", id); Cnd cnd = Cnd.NEW(); Sys_role role = dao.fetch(Sys_role.class, Cnd.where("`code`", "=", RoleConstant.BRANCH_UNION_CHAIRMAN)); - cnd.and("sur.roleId","=", role.getId()); - cnd.and("u.unionId","=",id); + cnd.and("sur.roleId", "=", role.getId()); + cnd.and("u.unionId", "=", id); sql.setCondition(cnd); sql.setCallback(Sqls.callback.map()); dao.execute(sql); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/honor/controller/HonorManageController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/honor/controller/HonorManageController.java index f594db8..c8e168b 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/honor/controller/HonorManageController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/honor/controller/HonorManageController.java @@ -64,7 +64,6 @@ public class HonorManageController { Sql sql = Sqls.create(""" SELECT h.*, - u.loginname, prize.`name` AS prizeName, type.`name` AS typeName, `level`.`name` AS levelName, @@ -75,7 +74,6 @@ public class HonorManageController { LEFT JOIN honor_basic_settings type ON type.id = h.honorType LEFT JOIN honor_basic_settings `level` ON `level`.id = h.honorLevel LEFT JOIN honor_basic_settings `award` ON `award`.id = h.awardType - LEFT JOIN `vw_user` u on u.id = h.userId $condition """); Cnd cnd = Cnd.NEW(); @@ -94,13 +92,6 @@ public class HonorManageController { cnd.andEX("h.unionName", "like", "%" + pageForm.getUnionName() + "%"); } - if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) { - if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { - cnd.and("u.unionId", "=", SecurityUtil.getUnionId()); - } else { - cnd.and("u.id", "=", SecurityUtil.getUserId()); - } - } sql.setCondition(cnd); Pagination pagination = honorViService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); List list = pagination.getList(); @@ -135,15 +126,12 @@ public class HonorManageController { Sql sql = Sqls.create(""" SELECT h.*, - u.sex, - u.loginName as loginname, prize.`name` AS prizeName, type.`name` AS typeName, `level`.`name` AS levelName, award.`name` AS awardName FROM `honor` h - left join `vw_user` u on h.userid = u.id LEFT JOIN honor_basic_settings prize ON prize.id = h.prize LEFT JOIN honor_basic_settings type ON type.id = h.honorType LEFT JOIN honor_basic_settings `level` ON `level`.id = h.honorLevel @@ -199,10 +187,6 @@ public class HonorManageController { v.setAwardMaterialsExcel(getBasicNameById(Json.toJson(v.getAwardMaterials())).toString()); } v.setHonorType(singleHonor.get().getName()); - if(StrUtil.isNotBlank(v.getUserId())) { - Sys_user user = dao.fetch(Sys_user.class, v.getUserId()); - v.setLoginname(user != null ? user.getLoginname() : ""); - } }); ExportParams exportParams = new ExportParams(); @@ -214,7 +198,7 @@ public class HonorManageController { private List getPersonalEntitys() { List excelExportEntity = new ArrayList<>(); excelExportEntity.add(new ExcelExportEntity("姓名", "userName", 10)); - excelExportEntity.add(new ExcelExportEntity("工号", "loginname", 10)); + excelExportEntity.add(new ExcelExportEntity("工号", "loginName", 10)); excelExportEntity.add(new ExcelExportEntity("性别", "userSex", 10)); excelExportEntity.add(new ExcelExportEntity("担任工会职务", "post", 10)); excelExportEntity.add(new ExcelExportEntity("职称", "title", 16)); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/honor/models/Honor.java b/src/main/java/com/budwk/app/zhgh/dayofficework/honor/models/Honor.java index c274048..1414601 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/honor/models/Honor.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/honor/models/Honor.java @@ -37,6 +37,11 @@ public class Honor extends BaseModel { @Comment("姓名") private String userName; + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("工号") + private String loginName; + @Column @Excel(name = "性别") @ColDefine(type = ColType.VARCHAR, width = 1) @@ -221,6 +226,4 @@ public class Honor extends BaseModel { @ColDefine(type = ColType.MYSQL_JSON) @Comment("附件") private List files; - - private String loginname; } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/rest/controller/RestQueryController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/rest/controller/RestQueryController.java index a8c6560..fe2b299 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/rest/controller/RestQueryController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/rest/controller/RestQueryController.java @@ -50,11 +50,23 @@ public class RestQueryController { @SaCheckPermission("rest.query") @ApiOperation("分页查询") public Result pageData(@Valid RestQueryPageForm pageForm) { + + +// Sql sql = Sqls.create(""" +// SELECT +// s.* +// FROM +// rest_act_signup s +// LEFT JOIN rest r ON r.id = s.restActId +// $condition +// """); Cnd cnd = Cnd.NEW(); cnd.andEX(RestActSignUp::getRestActId, "=", pageForm.getActId()); cnd.andEX(RestActSignUp::getUnionId, "=", pageForm.getUnionId()); cnd.andEX(RestActSignUp::getUnitId, "=", pageForm.getUnitId()); +// sql.setCondition(cnd); Pagination pagination = restActSignUpService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); + return Result.success(pagination); } @@ -64,11 +76,15 @@ public class RestQueryController { @Ok("void") public void exportExcel(@Valid RestQueryPageForm pageForm, HttpServletResponse response) { Cnd cnd = Cnd.NEW(); + cnd.andEX(RestActSignUp::getRestActId, "=", pageForm.getActId()); + cnd.andEX(RestActSignUp::getUnionId, "=", pageForm.getUnionId()); + cnd.andEX(RestActSignUp::getUnitId, "=", pageForm.getUnitId()); + cnd.desc(RestActSignUp::getUnionName).desc(RestActSignUp::getUnitName); List list = restActSignUpService.query(cnd); List entities = new ArrayList<>(); entities.add(new ExcelExportEntity("工号", "loginName", 20)); - entities.add(new ExcelExportEntity("姓名", "name", 20)); + entities.add(new ExcelExportEntity("姓名", "userName", 20)); entities.add(new ExcelExportEntity("单位", "unitName", 20)); entities.add(new ExcelExportEntity("分工会", "unionName", 20)); entities.add(new ExcelExportEntity("批次", "batch", 20)); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/rest/models/RestActSignUp.java b/src/main/java/com/budwk/app/zhgh/dayofficework/rest/models/RestActSignUp.java index 41c3e9b..5917ab2 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/rest/models/RestActSignUp.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/rest/models/RestActSignUp.java @@ -52,6 +52,11 @@ public class RestActSignUp extends BaseModel { @ColDefine(type = ColType.VARCHAR, width = 50) private String loginName; + @Column + @Comment("性别") + @ColDefine(type = ColType.VARCHAR, width = 10) + private String sex; + @Column @Comment("单位ID") @ColDefine(type = ColType.VARCHAR, width = 32) diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceApplyController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceApplyController.java new file mode 100644 index 0000000..66f18b5 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceApplyController.java @@ -0,0 +1,83 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.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.constant.BpmProcessConstant; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.result.Result; +import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.sys.models.Sys_user_role; +import com.budwk.app.web.controllers.open.commons.service.CommonService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.models.WarmthCondolence; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.service.WarmthCondolenceService; +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.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 javax.validation.Valid; +import java.util.List; + +@IocBean +@At("/platform/warmthCondolence/apply") +@Ok("json:full") +@Api(tags = "送温暖慰问申请") +public class WarmthCondolenceApplyController { + + @Inject + private WarmthCondolenceService warmthCondolenceService; + @Inject + private BpmService bpmService; + @Inject + private CommonService commonService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/warmthCondolence/apply/index.html") + @SaCheckPermission("warmthCondolence.apply") + public void index(){} + + @At + @SaCheckPermission("warmthCondolence.apply") + @ApiOperation("保存") + @Aop(TransAop.READ_COMMITTED) + @SLog(type = "warmthCondolenceApply", tag = "保存慰问申请", msg = "保存慰问申请") + public Result save(@Param("warmthCondolence")WarmthCondolence warmthCondolence){ + warmthCondolence.setNo(warmthCondolenceService.createNo(warmthCondolence)); + warmthCondolenceService.insertOrUpdate(warmthCondolence); + bpmService.startSaveProcessInstance(BpmProcessConstant.WARMTH_CONDOLENCE.name(), warmthCondolence.getUserName()+"的申请", warmthCondolence.getId(), null); + return Result.success(); + } + + @At + @SaCheckPermission("warmthCondolence.apply") + @ApiOperation("提交") + @Aop(TransAop.READ_COMMITTED) + @SLog(tag = "送温暖慰问申请", msg = "送温暖慰问申请") + public Result submit(@Param("warmthCondolence")@Valid WarmthCondolence warmthCondolence){ + warmthCondolence.setNo(warmthCondolenceService.createNo(warmthCondolence)); + warmthCondolenceService.insertOrUpdate(warmthCondolence); + //查询分工会审批人工号 + String branchUnionApprovalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.BRANCH_UNION_CHAIRMAN, Cnd.where(Sys_user_role::getUnionId, "=", warmthCondolence.getUnionId())); + if(StrUtil.isBlank(branchUnionApprovalLoginName)){ + return Result.error("分工会未配置审批人,请联系校工会!"); + } + bpmService.startSubmitProcessInstance(BpmProcessConstant.WARMTH_CONDOLENCE.name(), warmthCondolence.getUserName()+"的申请", warmthCondolence.getId(), List.of(branchUnionApprovalLoginName),null); + return Result.success(); + } + + @At + @SaCheckPermission("warmthCondolence.apply") + @ApiOperation("详情") + public Result info(@Valid String id){ + WarmthCondolence condolence = warmthCondolenceService.fetch(id); + return Result.success(condolence); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceBranchUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceBranchUnionApprovalController.java new file mode 100644 index 0000000..b7559f3 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceBranchUnionApprovalController.java @@ -0,0 +1,136 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.bean.BeanUtil; +import com.budwk.app.base.annotation.SLog; +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.bpm.enums.BpmProcessTaskStatusEnum; +import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum; +import com.budwk.app.bpm.param.BpmTaskApprovalParam; +import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.sys.models.Sys_user_role; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.web.controllers.open.commons.service.CommonService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.models.WarmthCondolence; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.param.WarmthCondolencePageForm; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.service.WarmthCondolenceService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.vo.WarmthCondolencePageVO; +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.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.Static; +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 javax.validation.Valid; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@IocBean +@At("/platform/warmthCondolence/branchUnionApproval") +@Ok("json:full") +@Api(tags = "送温暖慰问分工会审核") +public class WarmthCondolenceBranchUnionApprovalController { + + @Inject + private WarmthCondolenceService warmthCondolenceService; + @Inject + private CommonService commonService; + @Inject + private BpmService bpmService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/warmthCondolence/branchUnionApproval/index.html") + @SaCheckPermission("warmthCondolence.branchUnionApproval") + public void index() { + } + + @At + @SaCheckPermission("warmthCondolence.branchUnionApproval") + @ApiOperation("数据列表") + @Ok("json") + public Result pageData(@Valid WarmthCondolencePageForm pageForm, boolean approval){ + Sql sql = Sqls.create(""" + SELECT + wc.*, + inst.id processInstanceId, + inst.processInstanceNodeId, + inst.processInstanceNodeName, + inst.processInstanceTaskIds, + inst.processInstanceStatus, + task.id processInstanceTaskId, + task.taskStatus processInstanceTaskStatus, + COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete + FROM + bpm_process_task task + INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId + INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId + INNER JOIN warmth_condolence wc ON wc.id = inst.processInstanceBusinessId + LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE' + $condition + """); + Cnd cnd = Cnd.NEW(); + if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){ + cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname()))); + } + + cnd.and("nd.nodeCode","=",20); + if(approval){ + cnd.and("task.taskStatus","=",BpmProcessTaskStatusEnum.COMPLETE); + }else{ + cnd.and("task.taskStatus","=",BpmProcessTaskStatusEnum.ACTIVE); + } + + cnd.andEX("wc.noticeId","=",pageForm.getNoticeId()); + cnd.and(Cnd.likeEX("wc.userName", pageForm.getUserName())); + cnd.and(Cnd.likeEX("wc.loginName", pageForm.getLoginName())); + cnd.andEX("wc.unionId","=",pageForm.getUnionId()); + cnd.andEX("wc.unitId","=",pageForm.getUnitId()); + + sql.setCondition(cnd); + Pagination pageVO = warmthCondolenceService.listPageVO(pageForm, sql, WarmthCondolencePageVO.class); + return Result.success(pageVO); + } + + @At + @SaCheckPermission("warmthCondolence.branchUnionApproval") + @ApiOperation("审核") + @SLog(tag = "送温暖慰问分工会审核", msg = "分工会审核") + @Aop(TransAop.READ_COMMITTED) + public Result approval(@Valid @Param("approval")BpmTaskApprovalParam approvalParam){ + approvalParam.getBpmTaskApprovalTypeEnum(); + Map variables = BeanUtil.beanToMap(approvalParam); + + WarmthCondolence warmthCondolence = warmthCondolenceService.fetch(approvalParam.getProcessInstanceBusinessId()); + + List assignments = new ArrayList<>(); + if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){ + String schoolUnionApprovalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_ADMIN, Cnd.where(Sys_user_role::getUnionId, "=", warmthCondolence.getUnionId())); + assignments.add(schoolUnionApprovalLoginName); + } + bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments); + return Result.success(); + } + + @At + @SaCheckPermission("warmthCondolence.branchUnionApproval") + @ApiOperation("撤回") + @SLog(tag = "送温暖慰问分工会审核", msg = "撤回") + @Aop(TransAop.READ_COMMITTED) + public Result revoke(@Valid String taskId){ + bpmService.revokeTask(taskId); + return Result.success(); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceCommonController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceCommonController.java new file mode 100644 index 0000000..6346561 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceCommonController.java @@ -0,0 +1,61 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.models.WarmthCondolenceNotice; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.service.WarmthCondolenceNoticeService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.service.WarmthCondolenceService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.vo.WarmthCondolenceVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +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.util.List; + +@IocBean +@At("/platform/warmthCondolence/common") +@Ok("json:full") +@Api(tags = "送温暖慰问公共") +public class WarmthCondolenceCommonController { + + @Inject + private Dao dao; + @Inject + private WarmthCondolenceNoticeService warmthCondolenceNoticeService; + @Inject + private WarmthCondolenceService warmthCondolenceService; + + @At + @ApiOperation("申请详情") + @SaCheckPermission("warmthCondolence") + public Result info(@Valid String id){ + WarmthCondolenceVO condolenceVO = warmthCondolenceService.info(id); + return Result.success(condolenceVO); + } + + + @At + @ApiOperation("获取通知列表") + @SaCheckPermission("warmthCondolence") + public Result listNotice(){ + List list = warmthCondolenceNoticeService.query(Cnd.where(WarmthCondolenceNotice::getEnable, "=", 1) + .asc(WarmthCondolenceNotice::getStartTime)); + return Result.success(list); + } + + @At + @Ok("void") + @SaCheckPermission("warmthCondolence") + @ApiOperation("导出申请表") + public void exportApplyDocx(@Valid String id, HttpServletResponse response){ + warmthCondolenceService.exportApplyDocx(id,response); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceMineController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceMineController.java new file mode 100644 index 0000000..b367119 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceMineController.java @@ -0,0 +1,106 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.annotation.SLog; +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.bpm.service.BpmService; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.param.WarmthCondolencePageForm; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.service.WarmthCondolenceService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.vo.WarmthCondolencePageVO; +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.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; + +@IocBean +@At("/platform/warmthCondolence/mine") +@Ok("json:full") +@Api(tags = "送温暖慰问我的申请记录") +public class WarmthCondolenceMineController { + + @Inject + private WarmthCondolenceService warmthCondolenceService; + @Inject + private BpmService bpmService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/warmthCondolence/mine/index.html") + @SaCheckPermission("warmthCondolence.mine") + public void index() { + } + + @At + @SaCheckPermission("warmthCondolence.mine") + @ApiOperation("数据列表") + @Ok("json") + public Result pageData(@Valid WarmthCondolencePageForm pageForm) { + Sql sql = Sqls.create(""" + SELECT + info.*, + inst.processInstanceNodeId, + inst.processInstanceNodeCode, + inst.processInstanceNodeName, + inst.processInstanceTaskIds, + inst.processInstanceStatus, + nd.nodeType AS processInstanceTaskNodeType, + ( + SELECT + count( 1 ) > 0 + FROM + bpm_process_task + WHERE + prevTaskId = ( SELECT id FROM bpm_process_task WHERE processInstanceId = inst.id AND processTaskNodeCode IN ( 10, 40, 70 ) ORDER BY createdAt DESC LIMIT 1 ) + AND taskStatus = 'COMPELTE' + ) AS nextTaskIsComplete + FROM + warmth_condolence info + LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id + LEFT JOIN bpm_process_node_define nd ON nd.id = inst.processInstanceNodeId + $condition + """); + Cnd cnd = Cnd.NEW(); + if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { + cnd.and("info.loginName", "=", SecurityUtil.getUserLoginname()); + } + cnd.andEX("info.noticeId","=",pageForm.getNoticeId()); + cnd.groupBy("info.id"); + sql.setCondition(cnd); + Pagination pageVO = warmthCondolenceService.listPageVO(pageForm, sql, WarmthCondolencePageVO.class); + return Result.success(pageVO); + } + + @At + @SaCheckPermission("warmthCondolence.mine") + @ApiOperation("删除") + @Aop(TransAop.READ_COMMITTED) + @SLog(tag = "送温暖慰问申请", msg = "删除申请") + public Result delete(@Valid String id) { + warmthCondolenceService.delete(id); + bpmService.deleteInstance(id); + return Result.success(); + } + + @At + @SaCheckPermission("warmthCondolence.mine") + @ApiOperation("撤回") + @Aop(TransAop.READ_COMMITTED) + @SLog(tag = "送温暖慰问申请", msg = "撤回申请") + public Result revokeApply(@Valid String id) { + bpmService.revokeApply(id); + return Result.success(); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceNoticeController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceNoticeController.java new file mode 100644 index 0000000..acf0962 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceNoticeController.java @@ -0,0 +1,77 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.controller; + +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.zhgh.dayofficework.warmthCondolence.models.WarmthCondolence; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.models.WarmthCondolenceNotice; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.param.WarmthCondolenceNoticePageForm; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.service.WarmthCondolenceNoticeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nutz.dao.Cnd; +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; + +@IocBean +@At("/platform/warmthCondolenceNotice") +@Ok("json:full") +@Api(tags = "送温暖慰问通知") +public class WarmthCondolenceNoticeController { + + @Inject + private WarmthCondolenceNoticeService warmthCondolenceNoticeService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/warmthCondolence/notice/index.html") + @SaCheckPermission("warmthCondolence.notice") + public void index() { + } + + @At + @SaCheckPermission("warmthCondolence.notice") + @ApiOperation("分页查询") + public Result pageData(@Valid WarmthCondolenceNoticePageForm pageForm) { + Cnd cnd = Cnd.NEW(); + cnd.and(Cnd.likeEX(WarmthCondolenceNotice::getTitle, pageForm.getTitle())); + cnd.andEX(WarmthCondolenceNotice::getYear, "=", pageForm.getYear()); + cnd.desc(WarmthCondolenceNotice::getYear); + Pagination pagination = warmthCondolenceNoticeService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); + return Result.success(pagination); + } + + @At + @SaCheckPermission("warmthCondolence.notice") + @ApiOperation("新增") + @SLog(tag = "送温暖慰问通知", msg = "新增") + public Result insert(WarmthCondolenceNotice warmthCondolenceNotice) { + warmthCondolenceNoticeService.insert(warmthCondolenceNotice); + return Result.success(); + } + + @At + @SaCheckPermission("warmthCondolence.notice") + @SLog(tag = "送温暖慰问通知", msg = "修改") + public Result update(WarmthCondolenceNotice warmthCondolenceNotice) { + warmthCondolenceNoticeService.updateIgnoreNull(warmthCondolenceNotice); + return Result.success(); + } + + @At + @SaCheckPermission("warmthCondolence.notice") + @SLog(tag = "送温暖慰问通知", msg = "删除") + public Result delete(@Valid String id) { + int count = warmthCondolenceNoticeService.dao().count(WarmthCondolence.class, Cnd.where(WarmthCondolence::getNoticeId, "=", id)); + if (count > 0) { + return Result.error("该事项有关联的申请记录,无法删除!"); + } + warmthCondolenceNoticeService.delete(id); + return null; + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceQueryController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceQueryController.java new file mode 100644 index 0000000..485c2dd --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceQueryController.java @@ -0,0 +1,122 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.controller; + +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.bpm.service.BpmService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.param.WarmthCondolencePageForm; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.service.WarmthCondolenceService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.vo.WarmthCondolencePageVO; +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.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 javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.util.List; + +@IocBean +@At("/platform/warmthCondolence/query") +@Ok("json:full") +@Api(tags = "送温暖慰问综合查询") +public class WarmthCondolenceQueryController { + + @Inject + private WarmthCondolenceService warmthCondolenceService; + @Inject + private BpmService bpmService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/warmthCondolence/query/index.html") + @SaCheckPermission("warmthCondolence.query") + public void index() { + } + + @At + @SaCheckPermission("warmthCondolence.query") + @ApiOperation("数据列表") + @Ok("json") + public Result pageData(@Valid WarmthCondolencePageForm pageForm) { + Sql sql = Sqls.create(""" + SELECT + info.*, + inst.id processInstanceId, + inst.processInstanceNodeId, + inst.processInstanceNodeName, + inst.processInstanceTaskIds, + inst.processInstanceStatus + FROM + warmth_condolence info + LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id + LEFT JOIN bpm_process_node_define nd ON nd.id = inst.processInstanceNodeId + $condition + """); + Cnd cnd = Cnd.NEW(); +// cnd.and("inst.processInstanceNodeCode","=",80); + cnd.andEX("info.noticeId", "=", pageForm.getNoticeId()); + cnd.and(Cnd.likeEX("info.userName", pageForm.getUserName())); + cnd.and(Cnd.likeEX("info.loginName", pageForm.getLoginName())); + cnd.andEX("info.unionId", "=", pageForm.getUnionId()); + cnd.andEX("info.unitId", "=", pageForm.getUnitId()); + cnd.asc("info.no"); + cnd.asc("info.unionName"); + cnd.asc("info.unitName"); + cnd.groupBy("info.id"); + sql.setCondition(cnd); + Pagination pageVO = warmthCondolenceService.listPageVO(pageForm, sql, WarmthCondolencePageVO.class); + return Result.success(pageVO); + } + + @At + @SaCheckPermission("warmthCondolence.query") + @ApiOperation("图表数据") + public Result chartData() { + Sql sql = Sqls.create(""" + SELECT + wcn.year, + COUNT(wc.id) as user_count, + SUM(wc.amount) AS total_amount + FROM + warmth_condolence_notice wcn + LEFT JOIN + warmth_condolence wc ON wc.noticeId = wcn.id + GROUP BY + wcn.YEAR + ORDER BY + wcn.YEAR + """); + List list = warmthCondolenceService.listMap(sql); + return Result.success(list); + } + + + @At + @SaCheckPermission("warmthCondolence.query.delete") + @ApiOperation("删除") + @Aop(TransAop.READ_COMMITTED) + @SLog(tag = "送温暖慰问综合查询", msg = "删除申请") + public Result delete(@Valid String id) { + warmthCondolenceService.delete(id); + bpmService.deleteInstance(id); + return Result.success(); + } + + @At + @Ok("void") + @SaCheckPermission("warmthCondolence.query") + @ApiOperation("导出Excel") + public void exportExcel(@Valid WarmthCondolencePageForm pageForm, HttpServletResponse response) { + warmthCondolenceService.exportExcel(pageForm, response); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceSchoolUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceSchoolUnionApprovalController.java new file mode 100644 index 0000000..753d510 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/controller/WarmthCondolenceSchoolUnionApprovalController.java @@ -0,0 +1,122 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.bean.BeanUtil; +import com.budwk.app.base.annotation.SLog; +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.bpm.enums.BpmProcessTaskStatusEnum; +import com.budwk.app.bpm.param.BpmTaskApprovalParam; +import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.web.controllers.open.commons.service.CommonService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.param.WarmthCondolencePageForm; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.service.WarmthCondolenceService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.vo.WarmthCondolencePageVO; +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.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.Static; +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 javax.validation.Valid; +import java.util.Map; + +@IocBean +@At("/platform/warmthCondolence/schoolUnionApproval") +@Ok("json:full") +@Api(tags = "送温暖慰问校工会审核") +public class WarmthCondolenceSchoolUnionApprovalController { + + @Inject + private WarmthCondolenceService warmthCondolenceService; + @Inject + private CommonService commonService; + @Inject + private BpmService bpmService; + + @At("") + @Ok("beetl:/platform/zhgh/dayofficework/warmthCondolence/schoolUnionApproval/index.html") + @SaCheckPermission("warmthCondolence.schoolUnionApproval") + public void index() { + } + + @At + @SaCheckPermission("warmthCondolence.schoolUnionApproval") + @ApiOperation("数据列表") + @Ok("json") + public Result pageData(@Valid WarmthCondolencePageForm pageForm, boolean approval) { + Sql sql = Sqls.create(""" + SELECT + wc.*, + inst.id processInstanceId, + inst.processInstanceNodeId, + inst.processInstanceNodeName, + inst.processInstanceTaskIds, + inst.processInstanceStatus, + task.id processInstanceTaskId, + task.taskStatus processInstanceTaskStatus, + COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete + FROM + bpm_process_task task + INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId + INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId + INNER JOIN warmth_condolence wc ON wc.id = inst.processInstanceBusinessId + LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE' + $condition + """); + Cnd cnd = Cnd.NEW(); + if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){ + cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname()))); + } + cnd.and("nd.nodeCode", "=", 50); + if (approval) { + cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE); + } else { + cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE); + } + + cnd.andEX("wc.noticeId", "=", pageForm.getNoticeId()); + cnd.and(Cnd.likeEX("wc.userName", pageForm.getUserName())); + cnd.and(Cnd.likeEX("wc.loginName", pageForm.getLoginName())); + cnd.andEX("wc.unionId", "=", pageForm.getUnionId()); + cnd.andEX("wc.unitId", "=", pageForm.getUnitId()); + + sql.setCondition(cnd); + Pagination pageVO = warmthCondolenceService.listPageVO(pageForm, sql, WarmthCondolencePageVO.class); + return Result.success(pageVO); + } + + @At + @SaCheckPermission("warmthCondolence.schoolUnionApproval") + @ApiOperation("审核") + @SLog(tag = "送温暖慰问校工会审核", msg = "校工会审核") + @Aop(TransAop.READ_COMMITTED) + public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam) { + approvalParam.getBpmTaskApprovalTypeEnum(); + Map variables = BeanUtil.beanToMap(approvalParam); + bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, null); + return Result.success(); + } + + @At + @SaCheckPermission("warmthCondolence.schoolUnionApproval") + @ApiOperation("撤回") + @SLog(tag = "送温暖慰问校工会审核", msg = "撤回") + @Aop(TransAop.READ_COMMITTED) + public Result revoke(@Valid String taskId) { + bpmService.revokeTask(taskId); + return Result.success(); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/models/WarmthCondolence.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/models/WarmthCondolence.java new file mode 100644 index 0000000..fc309a1 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/models/WarmthCondolence.java @@ -0,0 +1,110 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.models; + +import cn.hutool.json.JSONObject; +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.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = true) +@Table("warmth_condolence") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("送温暖慰问") +public class WarmthCondolence 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 noticeId; + + @Column + @Comment("编号") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String no; + + @Column + @Comment("工号") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String loginName; + + @Column + @Comment("姓名") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String userName; + + @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 = 11) + private String mobile; + + @Column + @Comment("职务(职称)") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String technicalTitle; + + @Column + @Comment("单位") + @ColDefine(type = ColType.VARCHAR, width = 500) + private String unitName; + + @Column + @Comment("单位ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String unitId; + + @Column + @Comment("分工会") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String unionName; + + @Column + @Comment("分工会ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String unionId; + + @Column + @Comment("申请理由") + @ColDefine(type = ColType.VARCHAR, width = 1000) + private String applyReason; + + @Column + @Comment("申请时间") + @ColDefine(type = ColType.DATETIME) + private String applyDateTime; + + @Column + @Comment("补助金额") + @ColDefine(customType = "decimal", width = 10, precision = 2) + private BigDecimal amount; + + @Column + @Comment("附件") + @ColDefine(type = ColType.MYSQL_JSON) + private List files; + + @One(field = "noticeId") + private WarmthCondolenceNotice warmthCondolenceNotice; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/models/WarmthCondolenceNotice.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/models/WarmthCondolenceNotice.java new file mode 100644 index 0000000..0a2cf89 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/models/WarmthCondolenceNotice.java @@ -0,0 +1,55 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.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("warmth_condolence_notice") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("送温暖慰问通知") +public class WarmthCondolenceNotice extends BaseModel { + + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("标题") + private String title; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 500) + @Comment("内容") + private String content; + + @Column + @ColDefine(type = ColType.INT) + @Comment("年份") + private Integer year; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("开始时间") + private Date startTime; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("结束时间") + private Date endTime; + + @Column + @Comment("是否启用") + @ColDefine(type = ColType.BOOLEAN) + @Default("1") + private Boolean enable; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/param/WarmthCondolenceNoticePageForm.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/param/WarmthCondolenceNoticePageForm.java new file mode 100644 index 0000000..8124740 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/param/WarmthCondolenceNoticePageForm.java @@ -0,0 +1,21 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.param; + +import com.budwk.app.base.param.PageForm; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.models.WarmthCondolenceNotice; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@ApiModel("送温暖慰问通知分页参数") +@Data +public class WarmthCondolenceNoticePageForm extends PageForm { + + @ApiModelProperty("标题") + private String title; + + @ApiModelProperty("年份") + private Integer year; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/param/WarmthCondolencePageForm.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/param/WarmthCondolencePageForm.java new file mode 100644 index 0000000..337c5ed --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/param/WarmthCondolencePageForm.java @@ -0,0 +1,32 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.param; + +import com.budwk.app.base.param.PageForm; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.models.WarmthCondolence; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@ApiModel("送温暖慰问分页参数") +@Data +public class WarmthCondolencePageForm extends PageForm { + + @ApiModelProperty("通知") + private String noticeId; + + @ApiModelProperty("姓名") + private String userName; + + @ApiModelProperty("工号") + private String loginName; + + @ApiModelProperty("分工会") + private String unionId; + + @ApiModelProperty("单位") + private String unitId; + + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/WarmthCondolenceNoticeService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/WarmthCondolenceNoticeService.java new file mode 100644 index 0000000..3089284 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/WarmthCondolenceNoticeService.java @@ -0,0 +1,7 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.models.WarmthCondolenceNotice; + +public interface WarmthCondolenceNoticeService extends BaseService { +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/WarmthCondolenceService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/WarmthCondolenceService.java new file mode 100644 index 0000000..2e6ae29 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/WarmthCondolenceService.java @@ -0,0 +1,39 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.models.WarmthCondolence; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.param.WarmthCondolencePageForm; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.vo.WarmthCondolenceVO; + +import javax.servlet.http.HttpServletResponse; + +public interface WarmthCondolenceService extends BaseService { + + /** + * 生成编号 + * @param warmthCondolence + * @return + */ + String createNo(WarmthCondolence warmthCondolence); + + /** + * 获取详情 + * @param id + * @return + */ + WarmthCondolenceVO info(String id); + + /** + * 导出word + * @param id + * @param response + */ + void exportApplyDocx(String id, HttpServletResponse response); + + /** + * 导出excel + * @param pageForm + * @param response + */ + void exportExcel(WarmthCondolencePageForm pageForm, HttpServletResponse response); +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/impl/WarmthCondolenceNoticeServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/impl/WarmthCondolenceNoticeServiceImpl.java new file mode 100644 index 0000000..edb1159 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/impl/WarmthCondolenceNoticeServiceImpl.java @@ -0,0 +1,15 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.models.WarmthCondolenceNotice; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.service.WarmthCondolenceNoticeService; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +@IocBean(args = {"refer:dao"}) +public class WarmthCondolenceNoticeServiceImpl extends BaseServiceImpl implements WarmthCondolenceNoticeService { + + public WarmthCondolenceNoticeServiceImpl(Dao dao) { + super(dao); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/impl/WarmthCondolenceServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/impl/WarmthCondolenceServiceImpl.java new file mode 100644 index 0000000..78d446c --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/service/impl/WarmthCondolenceServiceImpl.java @@ -0,0 +1,181 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.service.impl; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.constant.BpmProcessConstant; +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.bpm.service.BpmService; +import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.models.WarmthCondolence; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.models.WarmthCondolenceNotice; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.param.WarmthCondolencePageForm; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.service.WarmthCondolenceService; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.vo.WarmthCondolenceVO; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.vo.WarmthCondolenceWordVO; +import com.deepoove.poi.XWPFTemplate; +import org.apache.poi.ss.usermodel.Workbook; +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.lang.util.NutMap; + +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@IocBean(args = {"refer:dao"}) +public class WarmthCondolenceServiceImpl extends BaseServiceImpl implements WarmthCondolenceService { + + @Inject + private SysOfficeTemplateUtil sysOfficeTemplateUtil; + @Inject + private BpmService bpmService; + + public WarmthCondolenceServiceImpl(Dao dao) { + super(dao); + } + + @Override + public String createNo(WarmthCondolence warmthCondolence) { + if (ObjectUtil.isNull(warmthCondolence) || StrUtil.isBlank(warmthCondolence.getNo())) { + WarmthCondolenceNotice condolenceNotice = dao().fetch(WarmthCondolenceNotice.class, warmthCondolence.getNoticeId()); + Integer year = condolenceNotice.getYear(); + int count = dao().count(WarmthCondolence.class, Cnd.where(WarmthCondolence::getNoticeId, "=", warmthCondolence.getId())); + return String.format("%04d", year) + String.format("%03d", count + 1); + } + return warmthCondolence.getNo(); + } + + @Override + public WarmthCondolenceVO info(String id) { + Sql sql = Sqls.create(""" + SELECT + wc.*, + wcn.title AS noticeTitle + FROM + warmth_condolence wc + LEFT JOIN warmth_condolence_notice wcn ON wcn.id = wc.noticeId + WHERE wc.id = @id + """); + sql.setParam("id", id); + WarmthCondolenceVO warmthCondolenceVO = fetchVO(sql, WarmthCondolenceVO.class); + warmthCondolenceVO.setNodeTasks(bpmService.getNodeTasks(BpmProcessConstant.WARMTH_CONDOLENCE, id)); + return warmthCondolenceVO; + } + + @Override + public void exportApplyDocx(String id, HttpServletResponse response) { + Sql sql = Sqls.create(""" + SELECT + wc.no, + wc.userName, + wc.sex, + DATE_FORMAT(wc.birthday,'%Y年%m月%d日') birthday, + wc.technicalTitle, + wc.loginName, + wc.unitName, + wc.unionName, + wc.applyReason, + DATE_FORMAT(wc.applyDateTime,'%Y年%m月%d日') applyDate + FROM + warmth_condolence wc + WHERE wc.id = @id + """); + sql.setParam("id", id); + WarmthCondolenceWordVO wordVO = fetchVO(sql, WarmthCondolenceWordVO.class); + Map renderData = BeanUtil.beanToMap(wordVO); + + List nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.WARMTH_CONDOLENCE, id); + + renderData.put("branchUnionApproval", nodeTasks.stream().filter(v -> v.getNodeCode() == 20).flatMap(v -> v.getTasks().stream()).map(v -> { + HashMap map = new HashMap<>(); + if(ObjectUtil.isNotNull(v.getEndOn())){ + map.put("endOn", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); + } + if(ObjectUtil.isNotEmpty(v.getExtVariable())){ + map.put("approvalOpinion", v.getExtVariable().getStr("approvalOpinion")); + map.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature"))); + } + return map; + }).toList()); + renderData.put("schoolUnionApproval", nodeTasks.stream().filter(v -> v.getNodeCode() == 50).flatMap(v -> v.getTasks().stream()).map(v -> { + HashMap map = new HashMap<>(); + if(ObjectUtil.isNotNull(v.getEndOn())){ + map.put("endOn", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); + } + if(ObjectUtil.isNotEmpty(v.getExtVariable())){ + map.put("approvalOpinion", v.getExtVariable().getStr("approvalOpinion")); + map.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature"))); + } + return map; + }).toList()); + + try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { + XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("warmthCondolence")).render(renderData).write(byteArrayOutputStream); + CommonDownloadUtil.download(wordVO.getUserName()+"的送温暖慰问申请表.docx", byteArrayOutputStream.toByteArray(), response); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void exportExcel(WarmthCondolencePageForm pageForm, HttpServletResponse response) { + Sql sql = Sqls.create(""" + SELECT + info.no, + info.userName, + info.sex, + info.mobile, + info.loginName, + info.unitName, + info.unionName, + DATE_FORMAT(info.birthday,'%Y年%m月%d日') birthday, + FROM + warmth_condolence info + LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("inst.processInstanceNodeCode", "=", 80); + cnd.andEX("info.noticeId","=",pageForm.getNoticeId()); + cnd.and(Cnd.likeEX("info.userName", pageForm.getUserName())); + cnd.and(Cnd.likeEX("info.loginName", pageForm.getLoginName())); + cnd.and(Cnd.likeEX("info.unionId", pageForm.getUnionId())); + cnd.and(Cnd.likeEX("info.unitId", pageForm.getUnitId())); + cnd.asc("info.unionName"); + cnd.asc("info.unitName"); + cnd.groupBy("info.id"); + sql.setCondition(cnd); + List list = listMap(sql); + + List exportEntities = new ArrayList<>(); + exportEntities.add(new ExcelExportEntity("编号", "no", 20)); + exportEntities.add(new ExcelExportEntity("工号", "loginName", 20)); + exportEntities.add(new ExcelExportEntity("姓名", "userName", 20)); + exportEntities.add(new ExcelExportEntity("性别", "sex", 20)); + exportEntities.add(new ExcelExportEntity("单位", "unitName", 20)); + exportEntities.add(new ExcelExportEntity("分工会", "unionName", 20)); + exportEntities.add(new ExcelExportEntity("联系电话", "mobile", 20)); + exportEntities.add(new ExcelExportEntity("出生年月", "birthday", 20)); + + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list); + CommonDownloadUtil.download("送温暖慰问名单.xlsx", workbook, response); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/vo/WarmthCondolencePageVO.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/vo/WarmthCondolencePageVO.java new file mode 100644 index 0000000..97143b8 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/vo/WarmthCondolencePageVO.java @@ -0,0 +1,32 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.vo; + +import com.budwk.app.bpm.vo.BpmTaskApprovalVo; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.Date; + +@EqualsAndHashCode(callSuper = true) +@Data +public class WarmthCondolencePageVO extends BpmTaskApprovalVo { + + private String id; + private String noticeId; + private String no; + private String loginName; + private String userName; + private String sex; + private Date birthday; + private String mobile; + private String technicalTitle; + private String unitName; + private String unitId; + private String unionName; + private String unionId; + private String applyReason; + private Date applyDateTime; + private BigDecimal amount; + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/vo/WarmthCondolenceVO.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/vo/WarmthCondolenceVO.java new file mode 100644 index 0000000..9f1ebb9 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/vo/WarmthCondolenceVO.java @@ -0,0 +1,20 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.vo; + +import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo; +import com.budwk.app.zhgh.dayofficework.warmthCondolence.models.WarmthCondolence; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@EqualsAndHashCode(callSuper = true) +@Data +public class WarmthCondolenceVO extends WarmthCondolence { + + @ApiModelProperty("通知标题") + private String noticeTitle; + + @ApiModelProperty("节点审批记录") + private List nodeTasks; +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/vo/WarmthCondolenceWordVO.java b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/vo/WarmthCondolenceWordVO.java new file mode 100644 index 0000000..6513756 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/warmthCondolence/vo/WarmthCondolenceWordVO.java @@ -0,0 +1,43 @@ +package com.budwk.app.zhgh.dayofficework.warmthCondolence.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class WarmthCondolenceWordVO { + + @ApiModelProperty("编号") + private String no; + + @ApiModelProperty("工号") + private String loginName; + + @ApiModelProperty("姓名") + private String userName; + + @ApiModelProperty("性别") + private String sex; + + @ApiModelProperty("出生年月") + private String birthday; + + @ApiModelProperty("联系电话") + private String mobile; + + @ApiModelProperty("职务(职称)") + private String technicalTitle; + + @ApiModelProperty("单位") + private String unitName; + + @ApiModelProperty("分工会") + private String unionName; + + @ApiModelProperty("申请理由") + private String applyReason; + + @ApiModelProperty("申请时间") + private String applyDate; + + +} diff --git a/src/main/resources/static/assets/platform/css/a.css b/src/main/resources/static/assets/platform/css/a.css index 0a14d01..c437363 100644 --- a/src/main/resources/static/assets/platform/css/a.css +++ b/src/main/resources/static/assets/platform/css/a.css @@ -445,29 +445,17 @@ } :root { - /*--color-primary: #1890ff;*/ - /*--color-primary-1: #e6f7ff;*/ - /*--color-primary-2: #bae7ff;*/ - /*--color-primary-3: #91d5ff;*/ - /*--color-primary-4: #69c0ff;*/ - /*--color-primary-5: #73d13d;*/ - /*--color-primary-6: #1890ff;*/ - /*--color-primary-7: #096dd9;*/ - /*--color-primary-8: #0050b3;*/ - /*--color-primary-9: #003a8c;*/ - /*--color-primary-10: #002766;*/ - - --color-primary: #217050; - --color-primary-1: #e8f5eb; - --color-primary-2: #c3e6d1; - --color-primary-3: #9dd7b7; - --color-primary-4: #78c89d; - --color-primary-5: #53b983; - --color-primary-6: #217050; /* 主色 */ - --color-primary-7: #1a5a40; - --color-primary-8: #134330; - --color-primary-9: #0d2d20; - --color-primary-10: #061610; + --color-primary: #006db9; /* 主色 */ + --color-primary-1: #e6f3ff; /* 最浅,用于浅色背景 */ + --color-primary-2: #b3d9ff; /* 较浅,用于 hover/light-bg */ + --color-primary-3: #80c0ff; /* 轻微强调 */ + --color-primary-4: #4da6ff; /* 中等强调 */ + --color-primary-5: #1a8cff; /* 较强强调 */ + --color-primary-6: #006db9; /* 主色(默认) */ + --color-primary-7: #005aa3; /* 点击/active 状态 */ + --color-primary-8: #00468c; /* 较深,用于文字/强调 */ + --color-primary-9: #003370; /* 更深,用于深色模式 */ + --color-primary-10: #002054; /* 最深,用于特殊强调 */ --color-success: #52c41a; --color-success-1: #f6ffed; diff --git a/src/main/resources/static/assets/platform/css/common.css b/src/main/resources/static/assets/platform/css/common.css index 5afa31b..60960b5 100644 --- a/src/main/resources/static/assets/platform/css/common.css +++ b/src/main/resources/static/assets/platform/css/common.css @@ -51,6 +51,7 @@ flex-wrap: wrap; column-gap: 50px; row-gap: 10px; + container-type: inline-size; } .search .search-item { @@ -120,6 +121,25 @@ } } +@container (max-width: 800px) { + .search .search-item { + width: calc((100%) / 3); + } +} + +@container (max-width: 600px) { + .search .search-item { + width: calc((100%) / 2); + } +} + +@container (max-width: 400px) { + .search .search-item { + width: 100%; + } +} + + /* * Text Color Variant * diff --git a/src/main/resources/views/platform/sys/branchUnionUserAuthorization/apply/index.html b/src/main/resources/views/platform/sys/branchUnionUserAuthorization/apply/index.html new file mode 100644 index 0000000..f1dec42 --- /dev/null +++ b/src/main/resources/views/platform/sys/branchUnionUserAuthorization/apply/index.html @@ -0,0 +1,211 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 新增 + 退出 + + 新增授权 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/src/main/resources/views/platform/sys/branchUnionUserAuthorization/approval/index.html b/src/main/resources/views/platform/sys/branchUnionUserAuthorization/approval/index.html new file mode 100644 index 0000000..442d7fb --- /dev/null +++ b/src/main/resources/views/platform/sys/branchUnionUserAuthorization/approval/index.html @@ -0,0 +1,165 @@ + + +
+ + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + + + + +
+
{{formData.processInstanceNodeName}}
+ + + + + + + 取消 + 拒绝 + 同意 + +
+
+
+ + + + diff --git a/src/main/resources/views/platform/sys/branchUnionUserAuthorization/info.js b/src/main/resources/views/platform/sys/branchUnionUserAuthorization/info.js new file mode 100644 index 0000000..067f566 --- /dev/null +++ b/src/main/resources/views/platform/sys/branchUnionUserAuthorization/info.js @@ -0,0 +1,35 @@ +const info = { + template: /*language=HTML*/ ` +
+
+ 申请信息 +
+ + {{ viewData.userName }} + {{ viewData.loginName }} + {{ viewData.mobile }} + {{ viewData.unionName }} + + 加入 + 退出 + + {{ viewData.reason }} + +
+ `, + data() { + return { + visible: false, + viewData: {} + } + }, + methods: { + onOpen(id) { + this.$axios.post("/platform/branchUnionUser/authorization/common/info", { id }).then((res) => { + if (res.code === 0) { + this.viewData = res.data + } + }) + } + } +} diff --git a/src/main/resources/views/platform/sys/msg/msgManage/msgManageForm.js b/src/main/resources/views/platform/sys/msg/msgManage/msgManageForm.js index 443f5b8..6c4d4d9 100644 --- a/src/main/resources/views/platform/sys/msg/msgManage/msgManageForm.js +++ b/src/main/resources/views/platform/sys/msg/msgManage/msgManageForm.js @@ -1,5 +1,5 @@ const MSG_FORM_TEMPLATE = { - template: ` + template: /*language=HTML*/ `
@@ -20,6 +20,13 @@ const MSG_FORM_TEMPLATE = { 用户消息 + + + + + 选择用户 @@ -169,16 +176,16 @@ const MSG_FORM_TEMPLATE = { return false } - if(loginNames.length > 100){ + if (loginNames.length > 100) { this.$message.warning("单条消息最多发送100人,请分批次发送。") return false } - this.$confirm('您确定要发送吗, 是否继续?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning' - }).then(()=>{ + this.$confirm("您确定要发送吗, 是否继续?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(() => { this.$axios .post("/platform/sys/msg/addDo", { msg: JSON.stringify(this.formData), @@ -226,7 +233,7 @@ const MSG_FORM_TEMPLATE = { }, clearSelect() { this.userTableData = [] - if(this.$refs.tableRef){ + if (this.$refs.tableRef) { this.$refs.tableRef.clearSelection() } }, @@ -242,13 +249,13 @@ const MSG_FORM_TEMPLATE = { const self = this console.log(this.selectUsers) console.log(this.userTableData) - const tableLoginNames = this.userTableData.map(v=>v.loginname) + const tableLoginNames = this.userTableData.map((v) => v.loginname) this.selectUsers.forEach(function (o) { - if(!tableLoginNames.includes(o.loginname)){ + if (!tableLoginNames.includes(o.loginname)) { self.userTableData.push(o) } }) - if(this.$refs.tableRef){ + if (this.$refs.tableRef) { this.$refs.tableRef.clearSelection() } this.selectDialogVisible = false diff --git a/src/main/resources/views/platform/zhgh/club/applyJoin/apply/index.html b/src/main/resources/views/platform/zhgh/club/applyJoin/apply/index.html index 32e1b46..22390f8 100644 --- a/src/main/resources/views/platform/zhgh/club/applyJoin/apply/index.html +++ b/src/main/resources/views/platform/zhgh/club/applyJoin/apply/index.html @@ -97,7 +97,7 @@ layout("/layouts/platform.html"){ -
+ + diff --git a/src/main/resources/views/platform/zhgh/dayofficework/honor/manage/index.html b/src/main/resources/views/platform/zhgh/dayofficework/honor/manage/index.html index ce77886..bcfdbe8 100644 --- a/src/main/resources/views/platform/zhgh/dayofficework/honor/manage/index.html +++ b/src/main/resources/views/platform/zhgh/dayofficework/honor/manage/index.html @@ -44,7 +44,7 @@ layout("/layouts/platform.html"){ 导出 - + - + - +