From f0cd566d31c8760c97461ebaafe7f5da5265bf8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=9C=E5=AD=A6=E6=88=90?= <1274337408@qq.com> Date: Thu, 22 Oct 2026 16:12:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=85=B0=E9=97=AE=E7=94=B3=E8=AF=B7=E6=9D=BF?= =?UTF-8?q?=E5=9D=97=EF=BC=8C1.=E2=80=9C=E6=A0=A1=E5=B7=A5=E4=BC=9A?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E2=80=9D=E6=94=B9=E5=90=8D=E2=80=9C=E6=A0=A1?= =?UTF-8?q?=E5=B7=A5=E4=BC=9A=E5=8A=9E=E5=85=AC=E5=AE=A4=E5=AE=A1=E6=A0=B8?= =?UTF-8?q?=E2=80=9D=E5=B9=B6=E4=B8=94=E5=AE=A1=E6=A0=B8=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E4=B9=9F=E6=94=B9=E6=88=90=E6=96=B0=E5=A2=9E=E7=9A=84=E2=80=9C?= =?UTF-8?q?=E6=A0=A1=E5=B7=A5=E4=BC=9A=E5=8A=9E=E5=85=AC=E5=AE=A4=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E5=91=98=E2=80=9D=E6=9D=A5=E5=AE=A1=E6=A0=B8=E3=80=82?= =?UTF-8?q?2.=E5=9C=A8=E5=AE=A1=E6=89=B9=E6=84=8F=E8=A7=81=E6=97=B6?= =?UTF-8?q?=E4=B8=8D=E9=9C=80=E8=A6=81=E6=89=8B=E5=86=99=E5=90=8C=E6=84=8F?= =?UTF-8?q?=E3=80=81=E4=B8=8D=E5=90=8C=E6=84=8F=EF=BC=8C=E6=94=B9=E6=88=90?= =?UTF-8?q?=E5=8B=BE=E9=80=89=E9=A1=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/io/v/nutz/base/utils/Roles.java | 5 + .../condolence/CondolenceAuditControll.java | 4 +- .../condolence/CondolenceAgentController.java | 4 +- .../condolence/CondolenceVcrCon.java | 9 +- .../condolence/CondolenceMsgHandler.java | 48 +++++++--- .../condolence/CondolenceToDoHandler.java | 24 +++-- .../db/init_condolence_office_reviewer.sql | 91 +++++++++++++++++++ .../static/components/condolence/Info.vue | 2 +- .../components/condolence/mobile/common.vue | 2 +- .../views/mobile/condolence/school_Audit.html | 42 ++++----- .../views/platform/zgfw/condolence/apply.html | 2 +- .../views/platform/zgfw/condolence/vcr.html | 38 ++++---- 12 files changed, 197 insertions(+), 74 deletions(-) create mode 100644 src/main/resources/db/init_condolence_office_reviewer.sql diff --git a/src/main/java/io/v/nutz/base/utils/Roles.java b/src/main/java/io/v/nutz/base/utils/Roles.java index 8532cdd..f810137 100644 --- a/src/main/java/io/v/nutz/base/utils/Roles.java +++ b/src/main/java/io/v/nutz/base/utils/Roles.java @@ -190,6 +190,11 @@ public interface Roles { */ String XGHKJ = "4f72d9259837486a8092c19897fa9dd6"; + /** + * 校工会办公室审核员 + */ + String CONDOLENCE_OFFICE = "c8d7e6f5a4b34c2291d0e8f7a6b5c4d3"; + /** * 校工会管理员 */ diff --git a/src/main/java/io/v/nutz/mobile/condolence/CondolenceAuditControll.java b/src/main/java/io/v/nutz/mobile/condolence/CondolenceAuditControll.java index adbf5ad..e3ebf0f 100644 --- a/src/main/java/io/v/nutz/mobile/condolence/CondolenceAuditControll.java +++ b/src/main/java/io/v/nutz/mobile/condolence/CondolenceAuditControll.java @@ -73,7 +73,7 @@ public class CondolenceAuditControll { .and("sqr.unionid", "=", Vi.getUnionId())); hasAuditRole = true; } - if (ShiroUtil.hasAnyRoles("A06,sysadmin")) { + if (ShiroUtil.hasAnyRoles("A06,condolence_office,sysadmin")) { group.or(Cnd.exps("con.state_id", isAudit ? ">" : "=", 2020)); hasAuditRole = true; } @@ -121,7 +121,7 @@ public class CondolenceAuditControll { return "beetl:/mobile/condolence/union_Audit.html"; } else if (state_id == 2012 && (superadmin || ShiroUtil.hasAnyRoles("gh03,xghkj,sysadmin"))) { return "beetl:/mobile/condolence/fr_Audit.html"; - } else if (state_id == 2020 && (superadmin || ShiroUtil.hasAnyRoles("A06,sysadmin"))) { + } else if (state_id == 2020 && (superadmin || ShiroUtil.hasAnyRoles("A06,condolence_office,sysadmin"))) { return "beetl:/mobile/condolence/school_Audit.html"; } return "beetl:/mobile/condolence/apply_info.html"; diff --git a/src/main/java/io/v/nutz/zgfw/controller/condolence/CondolenceAgentController.java b/src/main/java/io/v/nutz/zgfw/controller/condolence/CondolenceAgentController.java index 2122c7a..42a3d1b 100644 --- a/src/main/java/io/v/nutz/zgfw/controller/condolence/CondolenceAgentController.java +++ b/src/main/java/io/v/nutz/zgfw/controller/condolence/CondolenceAgentController.java @@ -55,7 +55,7 @@ public class CondolenceAgentController { result.add(new NutMap().setv("title", title).setv("url", UCR).setv("iconClass", vi.getIconByPath(UCR)).setv("label", "待院级工会审核").setv("number", getUcrCount())); result.add(new NutMap().setv("title", title).setv("url", FR).setv("iconClass", vi.getIconByPath(FR)).setv("label", "待二级党组织审核").setv("number", getFrCount())); - result.add(new NutMap().setv("title", title).setv("url", VCR).setv("iconClass", vi.getIconByPath(VCR)).setv("label", "待校工会审核").setv("number", getVcrCount())); + result.add(new NutMap().setv("title", title).setv("url", VCR).setv("iconClass", vi.getIconByPath(VCR)).setv("label", "待校工会办公室审核").setv("number", getVcrCount())); result.add(new NutMap().setv("title", title).setv("url", ECR).setv("iconClass", vi.getIconByPath(ECR)).setv("label", "待工会常务副主席审核").setv("number", getEcrCount())); Sys_user user = (Sys_user) ShiroUtil.getPrincipal(); List menus = Optional.ofNullable(user).orElse(new Sys_user()).getMenus(); @@ -92,7 +92,7 @@ public class CondolenceAgentController { } /** - * 待校工会主席审核 + * 待校工会办公室审核 * * @return */ diff --git a/src/main/java/io/v/nutz/zgfw/controller/condolence/CondolenceVcrCon.java b/src/main/java/io/v/nutz/zgfw/controller/condolence/CondolenceVcrCon.java index c3f87bb..7dd3e5b 100644 --- a/src/main/java/io/v/nutz/zgfw/controller/condolence/CondolenceVcrCon.java +++ b/src/main/java/io/v/nutz/zgfw/controller/condolence/CondolenceVcrCon.java @@ -1,5 +1,6 @@ package io.v.nutz.zgfw.controller.condolence; +import cn.wizzer.framework.base.Result; import io.v.nutz.annontation.ViReturn; import io.v.nutz.base.utils.DateUtil; import io.v.nutz.base.utils.Vi; @@ -25,7 +26,7 @@ import org.nutz.mvc.annotation.Param; /** * @Author: 1V * @DateTime: 2020/11/20 11:49 - * @Description: 校工会审核 + * @Description: 校工会办公室审核 */ @At({"/platform/fw/condolence/vcr","/platform/fw/condolence/vcr/school"}) @IocBean @@ -112,9 +113,15 @@ public class CondolenceVcrCon { @ViReturn @RequiresPermissions("fw.condolence.vcr") public Object doReview(String id, Integer pass, Review review) { + if (!Integer.valueOf(1).equals(pass) && !Integer.valueOf(2).equals(pass) + && !Integer.valueOf(3).equals(pass)) { + return Result.error("请选择审批意见!"); + } review.setLoginname(ShiroUtil.getPrincipalProperty("loginname").toString()); review.setUsername(ShiroUtil.getPrincipalProperty("username").toString()); review.setTime(DateUtil.getDate()); + review.setOpinion(Integer.valueOf(3).equals(pass) ? "同意" + : Integer.valueOf(1).equals(pass) ? "不同意" : "返回修改"); review = reviewService.insert(review); Condolence condolence = condolenceService.fetch(id); condolence.setVice_chairman_review(review.getId()); diff --git a/src/main/java/io/v/nutz/zgfw/handler/condolence/CondolenceMsgHandler.java b/src/main/java/io/v/nutz/zgfw/handler/condolence/CondolenceMsgHandler.java index 0ac0e9c..1cc19e2 100644 --- a/src/main/java/io/v/nutz/zgfw/handler/condolence/CondolenceMsgHandler.java +++ b/src/main/java/io/v/nutz/zgfw/handler/condolence/CondolenceMsgHandler.java @@ -1,6 +1,7 @@ package io.v.nutz.zgfw.handler.condolence; import io.v.nutz.base.utils.MsgApi; +import io.v.nutz.base.utils.Roles; import io.v.nutz.base.utils.Vi; import io.v.nutz.util.ViResource; import io.v.nutz.web.commons.utils.ShiroUtil; @@ -11,7 +12,6 @@ import lombok.Getter; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; -import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; import java.util.List; @@ -32,7 +32,7 @@ public enum CondolenceMsgHandler { u.username, u.unionname, u.loginname, - type.`name` as typeName + type.`name` as typename FROM condolence c LEFT JOIN `user` u ON u.id = c.manager @@ -42,9 +42,8 @@ public enum CondolenceMsgHandler { sql.setParam("id", id); NutMap nutMap = condolenceService.fetch(sql); String msg = "您好!" + nutMap.getString("unionname") + "的" + nutMap.getString("username") + "申请的" - + nutMap.getString("typeName") + "慰问已经提交,请您登录到智慧工会系统职工服务>职工慰问下进行审核。"; - List schoolLoginNames = Lang.list("1996070092", "1987010012"); - for (String loginname : schoolLoginNames) { + + nutMap.getString("typename") + "慰问已经提交,请您登录到智慧工会系统职工服务>职工慰问下进行审核。"; + for (String loginname : getRoleLoginNames(Roles.CONDOLENCE_OFFICE)) { msgApi.sendMsg(loginname, msg); } } else { @@ -83,7 +82,7 @@ public enum CondolenceMsgHandler { u.username, u.unionname, u.loginname, - type.`name` as typeName + type.`name` as typename FROM condolence c LEFT JOIN `user` u ON u.id = c.manager @@ -93,9 +92,8 @@ public enum CondolenceMsgHandler { sql.setParam("id", id); NutMap nutMap = condolenceService.fetch(sql); String msg = "您好!" + nutMap.getString("unionname") + "的" + nutMap.getString("username") + "申请的" - + nutMap.getString("typeName") + "慰问分工会主席已经审批通过,请您登录到智慧工会系统职工服务>职工慰问下进行审核。"; - List schoolLoginNames = Lang.list("1986110082", "1996070092", "1987010012"); - for (String loginname : schoolLoginNames) { + + nutMap.getString("typename") + "慰问分工会主席已经审批通过,请您登录到智慧工会系统职工服务>职工慰问下进行审核。"; + for (String loginname : getRoleLoginNames(Roles.CONDOLENCE_OFFICE)) { msgApi.sendMsg(loginname, msg); } } @@ -112,7 +110,7 @@ public enum CondolenceMsgHandler { u.username, u.unionname, u.loginname, - type.`name` as typeName + type.`name` as typename FROM condolence c LEFT JOIN `user` u ON u.id = c.manager @@ -126,7 +124,7 @@ public enum CondolenceMsgHandler { if (opinion == null) { opinion = ""; } - String msg = "您好!您申请的" + nutMap.getString("typeName") + "慰问分工会主席拒绝了您的申请,拒绝理由:" + + String msg = "您好!您申请的" + nutMap.getString("typename") + "慰问分工会主席拒绝了您的申请,拒绝理由:" + opinion + "请您登录到智慧工会系统重新修改提交!"; msgApi.sendMsg(nutMap.getString("loginname"), msg); System.out.println(msg); @@ -144,7 +142,7 @@ public enum CondolenceMsgHandler { u.username, u.unionname, u.loginname, - type.`name` as typeName, + type.`name` as typename, c.way FROM condolence c @@ -154,7 +152,7 @@ public enum CondolenceMsgHandler { """); sql.setParam("id", id); NutMap nutMap = condolenceService.fetch(sql); - String msg = "您好!您申请的" + nutMap.getString("typeName") + "的慰问校工会已经审批通过!"; + String msg = "您好!您申请的" + nutMap.getString("typename") + "的慰问校工会办公室已经审批通过!"; // 慰问品审核通过后,提醒申请人等待礼品备好并按短信通知领取。 if ("慰问品 (C)".equals(nutMap.getString("way"))) { msg += "礼品备好后会发短信通知您前来领取。"; @@ -175,7 +173,7 @@ public enum CondolenceMsgHandler { u.username, u.unionname, u.loginname, - type.`name` as typeName + type.`name` as typename FROM condolence c LEFT JOIN `user` u ON u.id = c.manager @@ -184,7 +182,7 @@ public enum CondolenceMsgHandler { """); sql.setParam("id", id); NutMap nutMap = condolenceService.fetch(sql); - String msg = "您好!您申请的" + nutMap.getString("typeName") + "的慰问校工会审批拒绝了,请您登录智慧工会系统查看详情!"; + String msg = "您好!您申请的" + nutMap.getString("typename") + "的慰问校工会办公室审批拒绝了,请您登录智慧工会系统查看详情!"; String loginname = nutMap.getString("loginname"); msgApi.sendMsg(loginname, msg); } @@ -192,6 +190,26 @@ public enum CondolenceMsgHandler { public abstract void exec(String id, NutMap extra); + /** + * 查询指定角色下的用户工号。 + */ + public List getRoleLoginNames(String roleId) { + Sql sql = Sqls.create(""" + SELECT + u.loginname + FROM + sys_user_role sur + LEFT JOIN `user` u ON u.id = sur.userid + WHERE + sur.roleId = @roleId + GROUP BY + sur.userId + """).setParam("roleId", roleId); + sql.setCallback(Sqls.callback.strs()); + dao.execute(sql); + return sql.getList(String.class); + } + public Dao dao = ViResource.dao; public MsgApi msgApi = ViResource.ioc.get(MsgApi.class); public CondolenceService condolenceService = ViResource.ioc.get(CondolenceServiceImpl.class); diff --git a/src/main/java/io/v/nutz/zgfw/handler/condolence/CondolenceToDoHandler.java b/src/main/java/io/v/nutz/zgfw/handler/condolence/CondolenceToDoHandler.java index 1ddd6f9..4235c34 100644 --- a/src/main/java/io/v/nutz/zgfw/handler/condolence/CondolenceToDoHandler.java +++ b/src/main/java/io/v/nutz/zgfw/handler/condolence/CondolenceToDoHandler.java @@ -14,7 +14,6 @@ import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.entity.Record; import org.nutz.dao.sql.Sql; -import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; import java.util.List; @@ -135,16 +134,29 @@ public enum CondolenceToDoHandler { }, /** - * 创建校工会任务 + * 创建校工会办公室审核任务 */ CREATE_SCHOOL_TASK() { @Override public void exec(Condolence condolence, String option) { - List schoolLoginNames = Lang.list("1996070092", "1987010012"); + Sql sql = Sqls.create(""" + SELECT + u.loginname + FROM + sys_user_role sur + LEFT JOIN `user` u ON u.id = sur.userid + WHERE + sur.roleId = @roleId + GROUP BY + sur.userId + """).setParam("roleId", Roles.CONDOLENCE_OFFICE); + sql.setCallback(Sqls.callback.strs()); + dao.execute(sql); + List schoolLoginNames = sql.getList(String.class); localProcessService.createTask( "condolence@" + condolence.getId(), "vice_chairman_review", - "校工会审核", + "校工会办公室审核", (String) ShiroUtil.getPrincipalProperty("id"), schoolLoginNames, "/platform/fw/condolence/vcr/school", @@ -153,12 +165,12 @@ public enum CondolenceToDoHandler { "/platform/fw/condolence/vcr/school" ); - localProcessService.updateProcessNodeName("condolence@" + condolence.getId(), "校工会审核"); + localProcessService.updateProcessNodeName("condolence@" + condolence.getId(), "校工会办公室审核"); } }, /** - * 校工会完成 + * 校工会办公室审核完成 */ COMPLETE_SCHOOL_TASK() { @Override diff --git a/src/main/resources/db/init_condolence_office_reviewer.sql b/src/main/resources/db/init_condolence_office_reviewer.sql new file mode 100644 index 0000000..39df2aa --- /dev/null +++ b/src/main/resources/db/init_condolence_office_reviewer.sql @@ -0,0 +1,91 @@ +-- 慰问申请:将原校工会审核改名为校工会办公室审核,并创建独立审核角色 +-- 执行环境:MySQL + +SET @condolence_office_role_fixed_id := 'c8d7e6f5a4b34c2291d0e8f7a6b5c4d3'; + +-- 创建校工会办公室审核员角色。 +INSERT INTO `sys_role` + (`id`, `name`, `code`, `aliasName`, `disabled`, `unitid`, `system_name`, `note`, `serialNumber`, + `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`) +SELECT + @condolence_office_role_fixed_id, + '校工会办公室审核员', + 'condolence_office', + 'CondolenceOfficeReviewer', + 0, + '', + '', + '负责慰问申请的校工会办公室审核', + (SELECT IFNULL(MAX(r.`serialNumber`), 0) + 1 FROM (SELECT `serialNumber` FROM `sys_role`) r), + '', + UNIX_TIMESTAMP() * 1000, + '', + UNIX_TIMESTAMP() * 1000, + 0 +WHERE NOT EXISTS ( + SELECT 1 FROM `sys_role` WHERE `code` = 'condolence_office' +); + +SET @condolence_office_role_id := ( + SELECT `id` FROM `sys_role` WHERE `code` = 'condolence_office' LIMIT 1 +); + +-- 复用原校工会审核菜单,不增加新的流程菜单。 +SET @condolence_office_menu_id := ( + SELECT `id` + FROM `sys_menu` + WHERE `permission` = 'fw.condolence.vcr' + OR `href` IN ('/platform/fw/condolence/vcr', '/platform/fw/condolence/vcr/school') + ORDER BY CASE WHEN `permission` = 'fw.condolence.vcr' THEN 1 ELSE 2 END + LIMIT 1 +); + +UPDATE `sys_menu` +SET `name` = '校工会办公室审核', + `aliasName` = 'CondolenceOfficeReview', + `note` = '慰问申请校工会办公室审核', + `showit` = 1, + `disabled` = 0, + `updatedAt` = UNIX_TIMESTAMP() * 1000, + `delFlag` = 0 +WHERE `id` = @condolence_office_menu_id; + +-- 同步原审核节点的状态名称,不新增状态。 +UPDATE `state` +SET `state_name` = CASE `state_id` + WHEN 1995 THEN '校工会办公室返回修改' + WHEN 2020 THEN '待校工会办公室审核' + WHEN 2030 THEN '校工会办公室审核不通过' + WHEN 2040 THEN '校工会办公室审核通过' + ELSE `state_name` + END +WHERE `state_id` IN (1995, 2020, 2030, 2040); + +-- 给新角色授权原审核菜单及其全部上级菜单,保证菜单树正常显示。 +INSERT INTO `sys_role_menu` (`roleId`, `menuId`) +SELECT @condolence_office_role_id, ancestor.`id` +FROM `sys_menu` target +JOIN `sys_menu` ancestor ON target.`path` LIKE CONCAT(ancestor.`path`, '%') +WHERE target.`id` = @condolence_office_menu_id + AND NOT EXISTS ( + SELECT 1 + FROM `sys_role_menu` rm + WHERE rm.`roleId` = @condolence_office_role_id + AND rm.`menuId` = ancestor.`id` + ); + +-- 将工号为1986110082、姓名为路海松的人员分配为校工会办公室审核员。 +INSERT INTO `sys_user_role` (`userId`, `roleId`) +SELECT u.`id`, @condolence_office_role_id +FROM `sys_user` u +WHERE u.`loginname` = '1986110082' + AND u.`username` = '路海松' + AND NOT EXISTS ( + SELECT 1 + FROM `sys_user_role` ur + WHERE ur.`userId` = u.`id` + AND ur.`roleId` = @condolence_office_role_id + ); + +SELECT @condolence_office_role_id AS `roleId`, + @condolence_office_menu_id AS `menuId`; diff --git a/src/main/resources/static/components/condolence/Info.vue b/src/main/resources/static/components/condolence/Info.vue index 5222f0d..8415930 100644 --- a/src/main/resources/static/components/condolence/Info.vue +++ b/src/main/resources/static/components/condolence/Info.vue @@ -316,7 +316,7 @@ - + diff --git a/src/main/resources/static/components/condolence/mobile/common.vue b/src/main/resources/static/components/condolence/mobile/common.vue index 60ff19a..f80f3ff 100644 --- a/src/main/resources/static/components/condolence/mobile/common.vue +++ b/src/main/resources/static/components/condolence/mobile/common.vue @@ -91,7 +91,7 @@