diff --git a/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeController.java b/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeController.java index 1d78f37..b0029d1 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeController.java @@ -29,6 +29,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ArrayUtils; import org.apache.poi.ss.formula.functions.T; import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.ioc.aop.Aop; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; @@ -134,6 +136,7 @@ public class ActivityBasicScopeController { @At @SLog(tag = "活动人员设置", msg = "设置活动人员") @SaCheckPermission("activity.basic.scope") + @Aop(TransAop.READ_COMMITTED) public Object doSetActivityUser(@Param("data") ActivityUserScopePageParam activityUserScopePageParam) { Sql sql = Sqls.create(""" SELECT DISTINCT @@ -243,6 +246,8 @@ public class ActivityBasicScopeController { public Result getRolesAndUnion() { return Result.success(new NutMap() {{ addv("is_A06", StpUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name())); + addv("is_H02", StpUtil.hasRole(RoleConstant.SCHOOL_UNION_CLUB_ADMIN.name())); + addv("is_CLUB_PRESIDENT", StpUtil.hasRole(RoleConstant.CLUB_PRESIDENT.name())); addv("is_H04", StpUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())); addv("is_sysadmin", StpUtil.hasRole(RoleConstant.SYSADMIN.name())); addv("unionid", SecurityUtil.getUnionId()); @@ -376,9 +381,8 @@ public class ActivityBasicScopeController { try { - if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())){ - cnd.andEX("u.unionid", "=", SecurityUtil.getUnionId()); - } + // 授权范围独立于筛选条件,反选或清空协会不能扩大当前账号的数据权限。 + activityBasicScopeService.appendRoleUserScope(cnd); cnd.andEX("u.unionid", EQ_OR_NEQ_OP, activityUserScopePageParam.getUnionId()); cnd.andEX("u.unitid", EQ_OR_NEQ_OP, activityUserScopePageParam.getUnitId()); cnd.andEX("u.personType", IN_OR_NIN_OP, activityUserScopePageParam.getPersonTypes()); diff --git a/src/main/java/com/budwk/app/zhgh/activity/basic/service/ActivityBasicScopeService.java b/src/main/java/com/budwk/app/zhgh/activity/basic/service/ActivityBasicScopeService.java index 9e25367..839c276 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/basic/service/ActivityBasicScopeService.java +++ b/src/main/java/com/budwk/app/zhgh/activity/basic/service/ActivityBasicScopeService.java @@ -16,6 +16,13 @@ public interface ActivityBasicScopeService extends BaseService unionData = activityCultureService.getUnionData(activityScopeGroupId); return Result.success(unionData); @@ -102,8 +103,16 @@ public class ActivityCultureApplyActivityController { @At @ApiOperation("保存活动申报") @SLog(tag = "文化活动-活动申报", msg = "保存了一条文化活动记录") - @SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR) - public Result save(@Param("data") ActivityTissue tissue) { + @SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club", "activity.culture.infoManage.club"}, mode = SaMode.OR) + @Aop(TransAop.READ_COMMITTED) + public Result save(@Param("data") ActivityTissue tissue, @Param("manageClubEdit") boolean manageClubEdit) { + // data 为活动表单;manageClubEdit=true 表示管理员只保存业务信息,返回 Result 成功状态。 + if (manageClubEdit) { + activityCultureService.saveManagedClubActivity(tissue); + return Result.success(); + } + // 管理权限只允许走服务端校验的编辑分支,不能借此新增申请。 + StpUtil.checkPermissionOr("activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"); if (tissue.getActivity_type() == 40002) { tissue.setUnionId(SecurityUtil.getUnionId()); @@ -188,7 +197,7 @@ public class ActivityCultureApplyActivityController { } @At - @SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR) + @SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club", "activity.culture.infoManage.club"}, mode = SaMode.OR) public Result findUser(String serachWord, Integer activity_type) { Cnd cnd = Cnd.NEW(); @@ -224,7 +233,7 @@ public class ActivityCultureApplyActivityController { } @At - @SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR) + @SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club", "activity.culture.infoManage.club"}, mode = SaMode.OR) public Result queryUserByIds(String[] ids) { Sql sql = Sqls.create("select id,loginname,username,unitname,unionname,sex from vw_user where id in (@id)"); sql.setParam("id", ids); diff --git a/src/main/java/com/budwk/app/zhgh/activity/culture/service/ActivityCultureService.java b/src/main/java/com/budwk/app/zhgh/activity/culture/service/ActivityCultureService.java index 8c38bed..7e2256e 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/culture/service/ActivityCultureService.java +++ b/src/main/java/com/budwk/app/zhgh/activity/culture/service/ActivityCultureService.java @@ -21,6 +21,13 @@ public interface ActivityCultureService extends BaseService { void doEditActivity(ActivityTissue tissue); + /** + * 管理员修改已有协会活动,不推进工作流。 + * @param tissue 完整活动表单,id 必须为已存在的协会活动;申请和审核字段以数据库为准 + * @return 无返回值,权限不足或活动不合法时抛出业务异常 + */ + void saveManagedClubActivity(ActivityTissue tissue); + Object pageData(PageForm page, String year, String name, String unionId, Integer activity_type); NutMap findOne(String id); diff --git a/src/main/java/com/budwk/app/zhgh/activity/culture/service/impl/ActivityCultureServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/culture/service/impl/ActivityCultureServiceImpl.java index 8d59a9e..fb63aff 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/culture/service/impl/ActivityCultureServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/culture/service/impl/ActivityCultureServiceImpl.java @@ -1,6 +1,10 @@ package com.budwk.app.zhgh.activity.culture.service.impl; import cn.hutool.core.util.StrUtil; +import cn.dev33.satoken.stp.StpUtil; +import com.budwk.app.base.exception.BaseException; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.ioc.aop.Aop; import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.model.Audit; import com.budwk.app.base.param.PageForm; @@ -79,6 +83,48 @@ public class ActivityCultureServiceImpl extends BaseServiceImpl update(tissue); } + /** + * tissue 为管理员提交的完整活动表单,无返回值;仅允许两类管理员编辑已有协会活动。 + * 申请人、申请时间、审核及开启状态取数据库原值,保存不启动或执行任何 wf 任务。 + */ + @Override + @Aop(TransAop.READ_COMMITTED) + public void saveManagedClubActivity(ActivityTissue tissue) { + StpUtil.checkPermission("activity.culture.infoManage.club"); + if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) { + throw new BaseException("仅系统管理员和校工会管理员可执行此操作"); + } + if (tissue == null || StrUtil.isBlank(tissue.getId())) { + throw new BaseException("请选择需要编辑的协会活动"); + } + ActivityTissue original = fetch(tissue.getId()); + if (original == null || !Integer.valueOf(40003).equals(original.getActivity_type())) { + throw new BaseException("只能编辑已存在的协会活动"); + } + if ("50004".equals(original.getProjectTypeCode()) || "50004".equals(tissue.getProjectTypeCode())) { + throw new BaseException("此活动项目类型不允许编辑"); + } + tissue.setActivity_type(original.getActivity_type()); + tissue.setUserId(original.getUserId()); + tissue.setApplyTime(original.getApplyTime()); + tissue.setUnionId(original.getUnionId()); + tissue.setState(original.getState()); + tissue.setAuditId(original.getAuditId()); + tissue.setIsUnseal(original.getIsUnseal()); + tissue.setCreatedBy(original.getCreatedBy()); + tissue.setCreatedAt(original.getCreatedAt()); + tissue.setDelFlag(original.getDelFlag()); + update(tissue); + // 未提交参与人明细时保留原记录;提交空数组表示明确清空,主从表同一事务更新。 + if (tissue.getTissuePersonList() != null) { + tissue.getTissuePersonList().forEach(person -> person.setTissueId(original.getId())); + dao().clear(ActivityTissuePerson.class, Cnd.where("tissueId", "=", original.getId())); + if (!tissue.getTissuePersonList().isEmpty()) { + insert(tissue.getTissuePersonList()); + } + } + } + @Override public Object pageData(PageForm page, String year, String name, String unionId, Integer activity_type) { Cnd cnd = Cnd.NEW(); @@ -146,7 +192,8 @@ public class ActivityCultureServiceImpl extends BaseServiceImpl } else { cnd.desc("tissue.startTime"); } - //cnd.groupBy("tissue.id"); + // 同一审核任务关联多个参与人时会展开多行,按活动主表 ID 分组保证每项活动仅展示一次。 + cnd.groupBy("tissue.id"); sql.setCondition(cnd); return this.listPageMap(page.getPageNumber(), page.getPageSize(), sql); } diff --git a/src/main/resources/static/components/module/activity/DrawerUserScope.vue b/src/main/resources/static/components/module/activity/DrawerUserScope.vue index 70839c1..6f63e7e 100644 --- a/src/main/resources/static/components/module/activity/DrawerUserScope.vue +++ b/src/main/resources/static/components/module/activity/DrawerUserScope.vue @@ -7,7 +7,7 @@ @@ -21,7 +21,13 @@ diff --git a/src/main/resources/views/platform/zhgh/activity/culture/common/applyActivity.js b/src/main/resources/views/platform/zhgh/activity/culture/common/applyActivity.js index e615f33..f674560 100644 --- a/src/main/resources/views/platform/zhgh/activity/culture/common/applyActivity.js +++ b/src/main/resources/views/platform/zhgh/activity/culture/common/applyActivity.js @@ -524,8 +524,8 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = { - 保存 -