From 811e35750e97ec705970bedb31f92de2fef9c08b Mon Sep 17 00:00:00 2001 From: hongqiwei <1143662660@qq.com> Date: Thu, 24 Sep 2026 14:51:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E5=9F=BA=E7=A1=80=E5=8D=95?= =?UTF-8?q?=E4=BD=8D=E6=9F=A5=E8=AF=A2=E4=B8=BA=E7=A9=BA=EF=BC=8C=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8=E5=8D=95=E4=BD=8D=E6=B2=A1=E6=9C=89=E5=90=8C=E6=AD=A5?= =?UTF-8?q?sys=5Funit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ActivityBasicUnitController.java | 57 +++---------- .../service/ActivityBasicUnitService.java | 27 ++++++ .../impl/ActivityBasicUnitServiceImpl.java | 63 ++++++++++++++ .../ActivitySportsApplyUserController.java | 15 +++- .../ActivitySportsApplyUserService.java | 4 + .../ActivitySportsApplyUserServiceImpl.java | 59 +++++++++---- .../zhgh/activity/basic/unit/index.html | 71 +++++++++++----- .../zhgh/activity/sports/applyUser/index.html | 84 +++++++++++++------ 8 files changed, 267 insertions(+), 113 deletions(-) create mode 100644 src/main/java/com/budwk/app/zhgh/activity/basic/service/ActivityBasicUnitService.java create mode 100644 src/main/java/com/budwk/app/zhgh/activity/basic/service/impl/ActivityBasicUnitServiceImpl.java diff --git a/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicUnitController.java b/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicUnitController.java index 4ebe016..64f2c4f 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicUnitController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicUnitController.java @@ -1,25 +1,14 @@ package com.budwk.app.zhgh.activity.basic.controller; import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.tree.Tree; -import cn.hutool.core.lang.tree.TreeNode; -import cn.hutool.core.lang.tree.TreeUtil; -import cn.hutool.core.util.StrUtil; -import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.result.Result; -import com.budwk.app.base.service.BaseService; -import com.budwk.app.sys.models.Sys_unit; -import com.budwk.app.sys.services.SysUnitService; -import com.budwk.app.zhgh.activity.basic.models.ActivityBasicUnion; import com.budwk.app.zhgh.activity.basic.models.ActivityBasicUnit; +import com.budwk.app.zhgh.activity.basic.service.ActivityBasicUnitService; 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.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; @@ -27,9 +16,7 @@ import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; -import java.util.ArrayList; import java.util.List; -import java.util.Map; /** * @ClassName ActivityBasicUnitController @@ -43,7 +30,7 @@ import java.util.Map; public class ActivityBasicUnitController { @Inject - private BaseService baseService; + private ActivityBasicUnitService activityBasicUnitService; @Inject private Dao dao; @@ -54,45 +41,25 @@ public class ActivityBasicUnitController { public void index() { } + /** + * 查询选中单位的直属下级;parentId 为空时查询学校 0000 下的单位。 + * pageForm 传入页码、页大小及单位名称或代码关键词,返回 Result,data 为包含 list、totalCount 的分页对象。 + */ @At @SaCheckPermission("activity.basic.unit") public Result pageData(@Param(value = "parentId") String parentId, PageForm pageForm) { - Cnd cnd = Cnd.NEW(); - if (StrUtil.isBlank(parentId)) { - cnd.and("parentId", "=", "1"); - } else { - cnd.and("parentId", "=", parentId); - } - if (StrUtil.isNotBlank(pageForm.getSearchName()) && StrUtil.isNotBlank(pageForm.getSearchKeyword())) { - cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword())); - } - Sql sql = Sqls.create("select id,parentId,name,unitcode,unitLevel,unionId from activity_basic_unit $condition"); - cnd.asc("unitcode"); - sql.setCondition(cnd); - Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); - return Result.success(pagination); + return Result.success(activityBasicUnitService.listUnitPage(parentId, pageForm)); } + /** + * pid 为空时返回整棵活动单位树,传入单位 ID 时返回其下级子树。 + * 返回 Result,data 为节点列表,节点包含 id、parentId、name、unitTypeCode,子节点字段为 children。 + */ @At @SaCheckPermission("activity.basic.unit") public Result tree(@Param("pid") String pid) { try { - Cnd cnd = Cnd.NEW(); - cnd.andEX("id", "=", pid); - cnd.asc("unitcode"); - List list = baseService.dao().query(ActivityBasicUnit.class, cnd); - - List> nodeList = CollUtil.newArrayList(); - for (int i = 0; i < list.size(); i++) { - nodeList.add(new TreeNode<>(list.get(i).getId(), list.get(i).getParentId(), list.get(i).getName(), i) - .setExtra( - Map.of( - "unitTypeCode", list.get(i).getUnitTypeCode() - ) - )); - } - List> treeList = TreeUtil.build(nodeList, StrUtil.blankToDefault(pid, "J")); - return Result.success(treeList); + return Result.success(activityBasicUnitService.getUnitTree(pid)); } catch (Exception e) { return Result.error(); } diff --git a/src/main/java/com/budwk/app/zhgh/activity/basic/service/ActivityBasicUnitService.java b/src/main/java/com/budwk/app/zhgh/activity/basic/service/ActivityBasicUnitService.java new file mode 100644 index 0000000..327b13e --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/basic/service/ActivityBasicUnitService.java @@ -0,0 +1,27 @@ +package com.budwk.app.zhgh.activity.basic.service; + +import cn.hutool.core.lang.tree.Tree; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.activity.basic.models.ActivityBasicUnit; + +import java.util.List; + +/** + * 活动单位查询,使用活动单位表中的层级及活动工会归属。 + */ +public interface ActivityBasicUnitService extends BaseService { + /** + * @param parentId 直属上级单位 ID,空值默认使用学校节点 0000 + * @param pageForm 页码、页大小及 name/unitcode 对应的搜索关键词 + * @return 包含 list 和 totalCount 的分页结果,list 中为单位字段映射 + */ + Pagination listUnitPage(String parentId, PageForm pageForm); + + /** + * @param pid 构树父节点 ID,空值使用与系统单位一致的虚拟根 0 + * @return 按单位代码排序的子树,节点的 children 字段包含下级单位 + */ + List> getUnitTree(String pid); +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/basic/service/impl/ActivityBasicUnitServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/basic/service/impl/ActivityBasicUnitServiceImpl.java new file mode 100644 index 0000000..8cd94d5 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/basic/service/impl/ActivityBasicUnitServiceImpl.java @@ -0,0 +1,63 @@ +package com.budwk.app.zhgh.activity.basic.service.impl; + +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNode; +import cn.hutool.core.lang.tree.TreeUtil; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.activity.basic.models.ActivityBasicUnit; +import com.budwk.app.zhgh.activity.basic.service.ActivityBasicUnitService; +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.IocBean; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 根据从 sys_unit 同步的完整单位层级提供活动单位树和直属下级列表。 + */ +@IocBean(args = {"refer:dao"}) +public class ActivityBasicUnitServiceImpl extends BaseServiceImpl implements ActivityBasicUnitService { + public ActivityBasicUnitServiceImpl(Dao dao) { + super(dao); + } + + /** {@inheritDoc} */ + @Override + public Pagination listUnitPage(String parentId, PageForm pageForm) { + // 0 是构树用的虚拟根,0000 才是学校实体;默认列表展示学校的直属单位。 + Cnd cnd = Cnd.where("parentId", "=", StrUtil.blankToDefault(parentId, "0000")); + String searchName = pageForm.getSearchName(); + if (("name".equals(searchName) || "unitcode".equals(searchName)) + && StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + cnd.and(Cnd.likeEX(searchName, pageForm.getSearchKeyword())); + } + cnd.asc("unitcode"); + Sql sql = Sqls.create("select id,parentId,name,unitcode,unitLevel,unionId from activity_basic_unit $condition"); + sql.setCondition(cnd); + return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + } + + /** {@inheritDoc} */ + @Override + public List> getUnitTree(String pid) { + // 必须保留完整父子关系;按 id = pid 过滤会丢失全部下级,无法构建子树。 + List units = query(Cnd.NEW().asc("unitcode")); + List> nodes = new ArrayList<>(); + for (int i = 0; i < units.size(); i++) { + ActivityBasicUnit unit = units.get(i); + // 机构类别可为空,使用可容纳 null 的映射避免整棵树返回失败。 + Map extra = new HashMap<>(); + extra.put("unitTypeCode", unit.getUnitTypeCode()); + nodes.add(new TreeNode<>(unit.getId(), unit.getParentId(), unit.getName(), i).setExtra(extra)); + } + return TreeUtil.build(nodes, StrUtil.blankToDefault(pid, "0")); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/sports/controller/ActivitySportsApplyUserController.java b/src/main/java/com/budwk/app/zhgh/activity/sports/controller/ActivitySportsApplyUserController.java index a18add0..53b7a6a 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/sports/controller/ActivitySportsApplyUserController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/sports/controller/ActivitySportsApplyUserController.java @@ -50,6 +50,16 @@ public class ActivitySportsApplyUserController { public void index() { } + /** + * 无请求参数;返回 Result,data.options 为活动工会 id/name 列表, + * data.defaultUnionId 为当前单位关联的活动工会 ID,未设置时为空字符串。 + */ + @At + @SaCheckPermission("activity.apply") + public Result unionOptions() { + return Result.success(activitySportsApplyUserService.getApplyUnionOptions()); + } + @@ -118,9 +128,7 @@ public class ActivitySportsApplyUserController { @At @SaCheckPermission("activity.apply") public Result getUniteApplyInfo(@Param("data") ActivitySportsApplyUserPageParam applyUserPageParam, Integer isMenWomenTwo) { - if (StrUtil.isBlank(activitySportsApplyUserService.getUnionId())) { - return Result.error("您暂未设置活动工会"); - } + // 由 service 校验所选活动工会;超管已选择工会时无需绑定本人单位的活动工会。 return Result.success(activitySportsApplyUserService.getUniteApplyInfo(applyUserPageParam, isMenWomenTwo)); } @@ -128,6 +136,7 @@ public class ActivitySportsApplyUserController { @At @SLog(tag = "体育活动", msg = "提交运动员") @SaCheckPermission("activity.apply") + @Aop(TransAop.READ_COMMITTED) public Result doApplyUser(@Param(value = "data") ActivitySchoolApply[] userList, String eventId, String activityId, diff --git a/src/main/java/com/budwk/app/zhgh/activity/sports/service/ActivitySportsApplyUserService.java b/src/main/java/com/budwk/app/zhgh/activity/sports/service/ActivitySportsApplyUserService.java index 694d2e1..cea5d19 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/sports/service/ActivitySportsApplyUserService.java +++ b/src/main/java/com/budwk/app/zhgh/activity/sports/service/ActivitySportsApplyUserService.java @@ -11,8 +11,12 @@ import java.util.List; public interface ActivitySportsApplyUserService extends BaseService { + /** 返回当前单位关联的有效活动工会 ID;未配置或关联失效时返回空字符串。 */ String getUnionId(); + /** 返回报名工会配置:options 为活动工会 id/name 列表,defaultUnionId 为当前单位的活动工会 ID。 */ + NutMap getApplyUnionOptions(); + Pagination pageData(ActivitySportsApplyUserPageParam pageParam); Pagination activityData(Integer year, Integer isActivity,Integer applyStatus); diff --git a/src/main/java/com/budwk/app/zhgh/activity/sports/service/impl/ActivitySportsApplyUserServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/sports/service/impl/ActivitySportsApplyUserServiceImpl.java index 32e5cd2..8455f18 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/sports/service/impl/ActivitySportsApplyUserServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/sports/service/impl/ActivitySportsApplyUserServiceImpl.java @@ -3,6 +3,7 @@ package com.budwk.app.zhgh.activity.sports.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.exception.BaseException; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.service.impl.BaseServiceImpl; @@ -49,20 +50,51 @@ public class ActivitySportsApplyUserServiceImpl extends BaseServiceImpl -
+
- +