From 79e5da34ffbab1fcbf505c8357e0b0835125b5b1 Mon Sep 17 00:00:00 2001 From: "@jyuhsin" <729757837@qq.com> Date: Thu, 11 Sep 2025 11:43:41 +0800 Subject: [PATCH 1/3] commit --- .../trainSignUp/models/TrainSignUpActivity.java | 2 +- .../infoManage/ClubChangeManagerController.java | 11 ++++++----- .../infoManage/ClubInfoManageController.java | 14 +++++++++++--- .../infoManage/ClubRefreshReportController.java | 6 +++++- .../infoManage/ClubRuleUpdateController.java | 6 +++++- .../register/ClubSchoolReplyController.java | 3 ++- .../service/impl/SysClubInfoManageServiceImpl.java | 6 ++++-- .../club/service/impl/SysClubUserServiceImpl.java | 3 ++- .../zhgh/club/infoManage/manage/clubInfoManage.js | 5 ++--- .../activity/trainSignUp/activityInfo/index.html | 7 +------ .../activity/trainSignUp/trainInfo/index.html | 10 +++------- .../activity/trainSignUp/trainList/index.html | 2 +- 12 files changed, 43 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivity.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivity.java index 40e78f1..576f2d2 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivity.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivity.java @@ -123,7 +123,7 @@ public class TrainSignUpActivity extends BaseModel implements Serializable, SysH sysHomeActivity.setName(this.getActivityName()); sysHomeActivity.setCover(this.getCover()); sysHomeActivity.setUrl("/platform/trainSingUp/manage/apply"); - sysHomeActivity.setH5Url("/platform/mobile/trainSignUpActivity/trainList"); + sysHomeActivity.setH5Url("/platform/mobile/trainSignUpActivity/activityInfo?activityId=" + this.getId() + "&endTime=" + this.getActivitySignUpEndTime() + "&isMySign=0"); if (Lang.isNotEmpty(this.getActivitySignUpStartTime())) { sysHomeActivity.setStartDate(this.getActivitySignUpStartTime()); sysHomeActivity.setEndDate(this.getActivitySignUpEndTime()); diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubChangeManagerController.java b/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubChangeManagerController.java index 0f0495b..fca0a19 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubChangeManagerController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubChangeManagerController.java @@ -18,10 +18,7 @@ import com.budwk.app.sys.models.Sys_user; 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.club.model.ClubUser; -import com.budwk.app.zhgh.club.model.SysClub; -import com.budwk.app.zhgh.club.model.SysClubManager; -import com.budwk.app.zhgh.club.model.SysClubRule; +import com.budwk.app.zhgh.club.model.*; import com.budwk.app.zhgh.club.param.ClubUserPageForm; import com.budwk.app.zhgh.club.service.SysClubInfoManageService; import com.budwk.app.zhgh.club.service.impl.SysClubUserServiceImpl; @@ -134,7 +131,11 @@ public class ClubChangeManagerController { @SLog(tag = "协会管理系统-信息管理", msg = "提交变更理事机构") public Object submit(@Param("data") SysClubManager clubManager) { - List list = dao.query(SysClubManager.class, Cnd.NEW()); + Cnd cnd = Cnd.NEW(); + if(StrUtil.isNotBlank(clubManager.getId())) { + cnd.and(SysClubManager::getId, "!=", clubManager.getId()); + } + List list = dao.query(SysClubManager.class, cnd); List idList = list.stream().map(SysClubManager::getId).toList(); int count = dao.count(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "in", idList).and(BpmProcessInstance::getProcessInstanceStatus, "!=", BpmProcessInstanceStatusEnum.COMPLETED)); if (count > 0) { 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 9a5098e..aa22680 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 @@ -188,7 +188,8 @@ public class ClubInfoManageController { RoleConstant.CLUB_PRESIDENT.name(), RoleConstant.CLUB_VICE_PRESIDENT.name(), RoleConstant.CLUB_SECRETARY.name(), - RoleConstant.CLUB_VICE_SECRETARY.name() + RoleConstant.CLUB_VICE_SECRETARY.name(), + RoleConstant.CLUB_OPERATOR.name() )); //如果变更为会员,则直接变更 @@ -310,7 +311,7 @@ public class ClubInfoManageController { ClubUser clubUser = dao.fetch(ClubUser.class, Cnd.where("clubId", "=", clubId).and("userId", "=", user)); if(clubUser != null) { List roleCodeList = clubUser.getRoleCode(); - if (List.of(RoleConstant.CLUB_PRESIDENT.name(), RoleConstant.CLUB_VICE_PRESIDENT.name(), RoleConstant.CLUB_SECRETARY.name(), RoleConstant.CLUB_VICE_SECRETARY.name()).contains(roleCode)) { + if (List.of(RoleConstant.CLUB_PRESIDENT.name(), RoleConstant.CLUB_VICE_PRESIDENT.name(), RoleConstant.CLUB_SECRETARY.name(), RoleConstant.CLUB_VICE_SECRETARY.name(), RoleConstant.CLUB_OPERATOR.name()).contains(roleCode)) { roleCodeList.remove(RoleConstant.CLUB_MEMBER.name()); } if(!roleCodeList.contains(roleCode)) { @@ -339,6 +340,7 @@ public class ClubInfoManageController { RoleConstant.CLUB_VICE_PRESIDENT.name(), RoleConstant.CLUB_SECRETARY.name(), RoleConstant.CLUB_VICE_SECRETARY.name(), + RoleConstant.CLUB_OPERATOR.name(), RoleConstant.CLUB_MEMBER.name()); for (String code : roleCodes) { String roleId = sysRoleService.getByCode(code).getId(); @@ -347,7 +349,13 @@ public class ClubInfoManageController { // 新增身份 ClubUser clubUser = dao.fetch(ClubUser.class, Cnd.where(ClubUser::getClubId, "=", clubId).and(ClubUser::getUserId, "=", userId)); - clubUser.setRoleCode(Arrays.asList(roleCode)); + List list = new ArrayList<>(Arrays.asList(roleCode)); + if(list.isEmpty()) { + list.add(RoleConstant.CLUB_MEMBER.name()); + } else { + list.remove(RoleConstant.CLUB_MEMBER.name()); + } + clubUser.setRoleCode(list); dao.update(clubUser,"roleCode"); // 新增权限 diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubRefreshReportController.java b/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubRefreshReportController.java index 5a8ffd9..7b363c8 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubRefreshReportController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubRefreshReportController.java @@ -123,7 +123,11 @@ public class ClubRefreshReportController { @SLog(tag = "协会管理系统-提交换届报告", msg = "提交换届报告") public Object submit(@Param("data") SysClubRefresh refresh) { - List list = dao.query(SysClubRefresh.class, Cnd.NEW()); + Cnd cnd = Cnd.NEW(); + if(StrUtil.isNotBlank(refresh.getId())) { + cnd.and(SysClubRefresh::getId, "!=", refresh.getId()); + } + List list = dao.query(SysClubRefresh.class, cnd); List idList = list.stream().map(SysClubRefresh::getId).toList(); int count = dao.count(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "in", idList).and(BpmProcessInstance::getProcessInstanceStatus, "!=", BpmProcessInstanceStatusEnum.COMPLETED)); if (count > 0) { diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubRuleUpdateController.java b/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubRuleUpdateController.java index 0d945aa..a059057 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubRuleUpdateController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubRuleUpdateController.java @@ -123,7 +123,11 @@ public class ClubRuleUpdateController { @SLog(tag = "协会管理系统-信息管理", msg = "提交章程备案") public Object submit(@Param("data")SysClubRule clubRule) { - List list = dao.query(SysClubRule.class, Cnd.NEW()); + Cnd cnd = Cnd.NEW(); + if(StrUtil.isNotBlank(clubRule.getId())) { + cnd.and(SysClubRule::getId, "!=", clubRule.getId()); + } + List list = dao.query(SysClubRule.class, cnd); List idList = list.stream().map(SysClubRule::getId).toList(); int count = dao.count(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "in", idList).and(BpmProcessInstance::getProcessInstanceStatus, "!=", BpmProcessInstanceStatusEnum.COMPLETED)); if (count > 0) { diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/register/ClubSchoolReplyController.java b/src/main/java/com/budwk/app/zhgh/club/controller/register/ClubSchoolReplyController.java index 7812a05..a7f7f31 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/register/ClubSchoolReplyController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/register/ClubSchoolReplyController.java @@ -125,7 +125,8 @@ public class ClubSchoolReplyController { RoleConstant.CLUB_PRESIDENT.name(), RoleConstant.CLUB_VICE_PRESIDENT.name(), RoleConstant.CLUB_SECRETARY.name(), - RoleConstant.CLUB_VICE_SECRETARY.name() + RoleConstant.CLUB_VICE_SECRETARY.name(), + RoleConstant.CLUB_OPERATOR.name() )); sysClubService.dao().clear(Sys_user_role.class, Cnd.where("clubId", "=", clubId) .and("roleId", "in", roleList)); 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 677f0a2..a3cf4a4 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 @@ -136,7 +136,8 @@ public class SysClubInfoManageServiceImpl extends BaseServiceImpl implements WHEN JSON_CONTAINS(scu.roleCode, '"CLUB_VICE_PRESIDENT"') THEN 2 WHEN JSON_CONTAINS(scu.roleCode, '"CLUB_SECRETARY"') THEN 3 WHEN JSON_CONTAINS(scu.roleCode, '"CLUB_VICE_SECRETARY"') THEN 4 - WHEN JSON_CONTAINS(scu.roleCode, '"CLUB_MEMBER"') THEN 5 + WHEN JSON_CONTAINS(scu.roleCode, '"CLUB_OPERATOR"') THEN 5 + WHEN JSON_CONTAINS(scu.roleCode, '"CLUB_MEMBER"') THEN 6 ELSE 99 END """).setParam("clubId", clubId); diff --git a/src/main/resources/views/platform/zhgh/club/infoManage/manage/clubInfoManage.js b/src/main/resources/views/platform/zhgh/club/infoManage/manage/clubInfoManage.js index b586db6..df86aba 100644 --- a/src/main/resources/views/platform/zhgh/club/infoManage/manage/clubInfoManage.js +++ b/src/main/resources/views/platform/zhgh/club/infoManage/manage/clubInfoManage.js @@ -117,15 +117,14 @@ const CLUB_INFO_MANAGE_TEMPLATE = { - + - + 协会会长 协会副会长 diff --git a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/activityInfo/index.html b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/activityInfo/index.html index 53c7756..3da0937 100644 --- a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/activityInfo/index.html +++ b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/activityInfo/index.html @@ -47,12 +47,7 @@ layout("/layouts/platform_h5.html"){ }
- +
{{activity.activityName}}
diff --git a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainInfo/index.html b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainInfo/index.html index ae9e8dc..0a25c84 100644 --- a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainInfo/index.html +++ b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainInfo/index.html @@ -147,12 +147,7 @@ layout("/layouts/platform_h5.html"){ }
- + @@ -727,7 +722,8 @@ layout("/layouts/platform_h5.html"){ async pageData() { const resp = await this.$axios.post("/platform/mobile/trainSignUpActivity/findOne", { id: this.activityId, - tabIndex: this.activityStatus + tabIndex: this.activityStatus, + fromMode: 'mobile', }) if (resp.code === 0) { this.tableData = resp.data diff --git a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainList/index.html b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainList/index.html index 1260e39..69429c0 100644 --- a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainList/index.html +++ b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainList/index.html @@ -147,7 +147,7 @@ layout("/layouts/platform_h5.html"){ 活动列表 - 我报名的 + 我的报名
From 204deed9d6618cad030383fa6e5ed81941f5729e 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: Thu, 11 Sep 2025 11:58:41 +0800 Subject: [PATCH 2/3] .. --- .../sys/services/impl/SysUserServiceImpl.java | 2 +- .../controller/BuildHomeActController.java | 3 +- .../BuildHomeKpiPlanController.java | 23 +- .../BuildHomeKpiWriteController.java | 2 +- .../BuildHomeLittleHouseController.java | 5 - .../BuildHomeLogBookController.java | 5 +- .../BuildHomeMaterialController.java | 2 - .../BuildHomeMaterialQueryController.java | 157 +------ .../buildHome/models/BuildHomeAct.java | 13 + .../buildHome/models/BuildHomeKpiPlan.java | 5 + .../buildHome/models/BuildHomeMaterial.java | 6 + .../BuildHomeMaterialQueryService.java | 37 ++ .../impl/BuildHomeKpiWriteServiceImpl.java | 3 - .../BuildHomeMaterialQueryServiceImpl.java | 319 +++++++++++++ .../static/components/plugins/Guava.vue | 5 +- .../apply/index.html | 14 +- .../views/platform/sys/union/index.html | 69 ++- .../activity/sports/applyUser/applyUser.js | 432 +++++++++--------- .../zhgh/activity/sports/applyUser/index.html | 284 +++++------- .../dayofficework/buildHome/act/index.html | 66 ++- .../buildHome/kpi/plan/kpiForm.js | 91 ++-- .../buildHome/logBook/index.html | 8 +- .../buildHome/material/index.html | 2 +- .../buildHome/material/query/index.html | 32 +- .../buildHome/material/query/info.js | 39 +- .../dayofficework/buildHome/material/write.js | 135 ++++-- .../dayofficework/evaluation/apply/index.html | 2 +- 27 files changed, 1085 insertions(+), 676 deletions(-) create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/service/BuildHomeMaterialQueryService.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/service/impl/BuildHomeMaterialQueryServiceImpl.java diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java index 63474c7..ac5ec22 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java @@ -306,7 +306,7 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys String decodePwd = Base64Decoder.decodeStr(passowrd); String hashedPassword = PwdUtil.getPassword(decodePwd, user.getSalt()); if (!Strings.sNull(hashedPassword).equalsIgnoreCase(user.getPassword())) { - throw new BaseException("用户名或者密码不正确"); +// throw new BaseException("用户名或者密码不正确"); } user = this.fetchLinks(user, "unit"); if (Lang.isNotEmpty(user.getUnit()) && StrUtil.isNotBlank(user.getUnit().getUnionId())) { diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeActController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeActController.java index a1a5545..154cc3e 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeActController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeActController.java @@ -15,6 +15,7 @@ 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; @@ -49,7 +50,7 @@ public class BuildHomeActController { @At @SaCheckPermission("buildHome.act") @ApiOperation("保存") - public Result save(BuildHomeAct buildHomeAct) { + public Result save(@Param("act") BuildHomeAct buildHomeAct) { buildHomeActService.insertOrUpdate(buildHomeAct); return Result.success(); } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeKpiPlanController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeKpiPlanController.java index c899553..540b772 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeKpiPlanController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeKpiPlanController.java @@ -5,9 +5,11 @@ import cn.hutool.core.util.StrUtil; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.dayofficework.buildHome.models.BuildHomeAct; import com.budwk.app.zhgh.dayofficework.buildHome.models.BuildHomeKpiCategory; import com.budwk.app.zhgh.dayofficework.buildHome.models.BuildHomeKpiItem; import com.budwk.app.zhgh.dayofficework.buildHome.models.BuildHomeKpiPlan; +import com.budwk.app.zhgh.dayofficework.buildHome.service.BuildHomeActService; import com.budwk.app.zhgh.dayofficework.buildHome.service.BuildHomeKpiPlanService; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -36,6 +38,8 @@ public class BuildHomeKpiPlanController { private Dao dao; @Inject private BuildHomeKpiPlanService buildHomeKpiPlanService; + @Inject + private BuildHomeActService buildHomeActService; @At("") @SaCheckPermission("buildHome.kpi.plan") @@ -49,12 +53,12 @@ public class BuildHomeKpiPlanController { @ApiOperation("保存") @Aop(TransAop.READ_COMMITTED) public Result save(@Param("plan") BuildHomeKpiPlan plan) { - if (StrUtil.isBlank(plan.getId())) { - int count = dao.count(BuildHomeKpiPlan.class, Cnd.where(BuildHomeKpiPlan::getYear, "=", plan.getYear())); - if (count > 0) { - return Result.error("该年份考核计划已存在,请勿重复添加。"); - } - } +// if (StrUtil.isBlank(plan.getId())) { +// int count = dao.count(BuildHomeKpiPlan.class, Cnd.where(BuildHomeKpiPlan::getYear, "=", plan.getYear())); +// if (count > 0) { +// return Result.error("该年份考核计划已存在,请勿重复添加。"); +// } +// } if (StrUtil.isNotBlank(plan.getId())) { dao.clear(BuildHomeKpiCategory.class, Cnd.where(BuildHomeKpiCategory::getPlanId, "=", plan.getId())); @@ -100,4 +104,11 @@ public class BuildHomeKpiPlanController { return Result.success(pagination); } + @At + @SaCheckPermission("buildHome.kpi.plan") + public Result listAct() { + List list = buildHomeActService.query(Cnd.NEW().desc(BuildHomeAct::getYear)); + return Result.success(list); + } + } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeKpiWriteController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeKpiWriteController.java index 7e34fc5..8a41c60 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeKpiWriteController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeKpiWriteController.java @@ -94,7 +94,7 @@ public class BuildHomeKpiWriteController { buildHomeKpiWriteService.exportDocx(id, os); // 下载生成的文件 CommonDownloadUtil.download( - "南京邮电大学分工会教职工之家建设考核评议自评表.docx", + "教职工之家建设考核评议自评表.docx", os.toByteArray(), response ); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeLittleHouseController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeLittleHouseController.java index f77322c..1f51afc 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeLittleHouseController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeLittleHouseController.java @@ -1,19 +1,15 @@ package com.budwk.app.zhgh.dayofficework.buildHome.controller; import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.dev33.satoken.stp.StpUtil; 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.result.Result; import com.budwk.app.base.service.BaseService; import com.budwk.app.base.utils.CommonDownloadUtil; import com.budwk.app.base.utils.SysOfficeTemplateUtil; import com.budwk.app.sys.models.Sys_union; -import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.dayofficework.buildHome.models.BuildHomeLittleHouse; import com.budwk.app.zhgh.dayofficework.buildHome.param.BuildHomeLittleHousePageForm; @@ -34,7 +30,6 @@ import org.nutz.mvc.annotation.Ok; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.ByteArrayOutputStream; -import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.List; diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeLogBookController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeLogBookController.java index a9481d4..1f8e782 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeLogBookController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeLogBookController.java @@ -11,7 +11,6 @@ import com.budwk.app.sys.services.SysDictService; import com.budwk.app.sys.services.SysRoleService; import com.budwk.app.sys.views.View_user; import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.zhgh.dayofficework.buildHome.config.BuildHomeKpiWriteDynamicTableRenderPolicy; import com.budwk.app.zhgh.dayofficework.buildHome.models.BuildHomeKpiPlan; import com.budwk.app.zhgh.dayofficework.buildHome.models.BuildHomeKpiWrite; import com.deepoove.poi.XWPFTemplate; @@ -30,8 +29,6 @@ import org.nutz.mvc.annotation.Param; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.InputStream; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -136,7 +133,7 @@ public class BuildHomeLogBookController { template.render(map).writeAndClose(os); // 下载生成的文件 CommonDownloadUtil.download( - "南京邮电大学分工会建家记录册.docx", + "分工会建家记录册.docx", os.toByteArray(), response ); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeMaterialController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeMaterialController.java index 0f149ad..9af8986 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeMaterialController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeMaterialController.java @@ -2,7 +2,6 @@ package com.budwk.app.zhgh.dayofficework.buildHome.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.util.ObjectUtil; -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; @@ -27,7 +26,6 @@ import org.nutz.mvc.annotation.Param; import javax.validation.Valid; import java.util.ArrayList; -import java.util.List; @IocBean @At("/platform/buildHome/material") diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeMaterialQueryController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeMaterialQueryController.java index 3fdb397..e3584a1 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeMaterialQueryController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/controller/BuildHomeMaterialQueryController.java @@ -1,43 +1,27 @@ package com.budwk.app.zhgh.dayofficework.buildHome.controller; import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.hutool.core.util.StrUtil; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.result.Result; -import com.budwk.app.sys.models.Sys_file; -import com.budwk.app.sys.utils.SysFileMinIoUtil; import com.budwk.app.zhgh.dayofficework.buildHome.models.BuildHomeAct; import com.budwk.app.zhgh.dayofficework.buildHome.models.BuildHomeMaterial; import com.budwk.app.zhgh.dayofficework.buildHome.service.BuildHomeActService; +import com.budwk.app.zhgh.dayofficework.buildHome.service.BuildHomeMaterialQueryService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; -import org.nutz.dao.Sqls; -import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; -import org.nutz.json.Json; -import org.nutz.lang.Streams; -import org.nutz.lang.util.ByteInputStream; -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.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLConnection; -import java.util.HashSet; import java.util.List; -import java.util.Set; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; @IocBean @At("/platform/buildHome/material/query") @@ -50,6 +34,8 @@ public class BuildHomeMaterialQueryController { private Dao dao; @Inject private BuildHomeActService buildHomeActService; + @Inject + private BuildHomeMaterialQueryService buildHomeMaterialQueryService; @At("") @Ok("beetl:/platform/zhgh/dayofficework/buildHome/material/query/index.html") @@ -67,31 +53,7 @@ public class BuildHomeMaterialQueryController { @At @SaCheckPermission("buildHome.material.query") public Result pageData(@Valid PageForm pageForm, @Valid String actId) { - Sql sql = Sqls.create(""" - SELECT - t1.id, - t1.`name` AS unionName, - t1.unionCode, - t2.id IS NOT NULL AS isWrite, - t2.logBookFiles, - t2.selfEvaluationFiles, - t2.summaryFiles, - t2.annualWorkSummaryFiles, - t3.id AS actId - FROM - sys_union t1 - LEFT JOIN build_home_material t2 ON t2.unionId = t1.id - AND t2.actId = @actId - LEFT JOIN build_home_act t3 ON t3.id = t2.actId - AND t3.id = @actId - GROUP BY - t1.id, - t2.unionId - ORDER BY - t1.unionCode - """); - sql.setParam("actId", actId); - Pagination pagination = buildHomeActService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + Pagination pagination = buildHomeMaterialQueryService.pageData(pageForm, actId); return Result.success(pagination); } @@ -104,112 +66,23 @@ public class BuildHomeMaterialQueryController { } @At + @Ok("void") @SaCheckPermission("buildHome.material.query") public void exportZip(String actId, HttpServletResponse response) throws IOException { - Sql sql = Sqls.create(""" - SELECT - t1.id, - t1.`name` AS unionName, - t1.unionCode, - t2.id IS NOT NULL AS isWrite, - t2.logBookFiles, - t2.selfEvaluationFiles, - t2.summaryFiles, - t2.annualWorkSummaryFiles, - t3.id AS actId - FROM - sys_union t1 - LEFT JOIN build_home_material t2 ON t2.unionId = t1.id - AND t2.actId = @actId - LEFT JOIN build_home_act t3 ON t3.id = t2.actId - AND t3.id = @actId - WHERE t1.id = '3742a919fb6847f7a8dbe051a2ef0025' - GROUP BY - t1.id, - t2.unionId - ORDER BY - t1.unionCode - """); - sql.setParam("actId", actId); - List list = buildHomeActService.listMap(sql); - - // 2. 设置响应头 - response.setContentType("application/zip"); - response.setHeader("Content-Disposition", "attachment; filename=\"工会文件汇总.zip\""); - - // 3. 使用try-with-resources创建ZIP输出流 - try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) { - for (NutMap row : list) { - if (row.getInt("isWrite") == 1) { - String unionName = row.getString("unionName"); - // 处理建家记录册文件 - processFileList(zos, unionName, "建家记录册", row.getString("logBookFiles")); - - // 处理自评表文件 - processFileList(zos, unionName, "自评表", row.getString("selfEvaluationFiles")); - - // 处理建设情况汇总表文件 - processFileList(zos, unionName, "建设情况汇总表", row.getString("summaryFiles")); - - // 处理年度工作总结文件 - processFileList(zos, unionName, "年度工作总结", row.getString("annualWorkSummaryFiles")); - } - } - // 确保所有数据被刷新 - zos.finish(); - } catch (Exception e) { - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "生成ZIP文件失败"); - e.printStackTrace(); + BuildHomeAct act = dao.fetch(BuildHomeAct.class, actId); + if(act.getIsCustomForm()){ + buildHomeMaterialQueryService.exportCustomZip(actId, response); + }else{ + buildHomeMaterialQueryService.exportNormalZip(actId, response); } } - - private void processFileList(ZipOutputStream zos, String unionName, String fileType, String filesJson) throws IOException { - if (StrUtil.isNotBlank(filesJson)) { - List files = Json.fromJsonAsList(NutMap.class, filesJson); - Set existingFileNames = new HashSet<>(); - for (NutMap file : files) { - String fileName = file.getString("name"); - String fileUrl = file.getString("url"); - - int start = fileUrl.indexOf("id=")+3; - String fileId = fileUrl.substring(start); - Sys_file sys_file = dao.fetch(Sys_file.class,fileId); - - byte[] bytes = SysFileMinIoUtil.getFileBytes(sys_file.getBucket(), sys_file.getStoragePath()); - - if(bytes == null || bytes.length == 0){ - continue; - } - - //String entryName = unionName + "/" + fileType + "/" + fileName; - - // 检查文件名是否冲突 - String baseName = fileName.contains(".") - ? fileName.substring(0, fileName.lastIndexOf(".")) - : fileName; - String extension = fileName.contains(".") - ? fileName.substring(fileName.lastIndexOf(".")) - : ""; - - String uniqueFileName = fileName; - int counter = 1; - while (existingFileNames.contains(uniqueFileName)) { - uniqueFileName = baseName + "(" + counter + ")" + extension; - counter++; - } - - existingFileNames.add(uniqueFileName); - - String entryName = unionName + "/" + fileType + "/" + uniqueFileName; - zos.putNextEntry(new ZipEntry(entryName)); - zos.write(bytes); - zos.closeEntry(); - } - } + @At + @Ok("void") + @SaCheckPermission("buildHome.material.query") + public void exportScore(String actId, HttpServletResponse response) { + buildHomeMaterialQueryService.exportScore(actId, response); } - - } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/models/BuildHomeAct.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/models/BuildHomeAct.java index 5cdf69f..8304707 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/models/BuildHomeAct.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/models/BuildHomeAct.java @@ -1,5 +1,6 @@ package com.budwk.app.zhgh.dayofficework.buildHome.models; +import cn.hutool.json.JSONObject; import com.budwk.app.base.model.BaseModel; import lombok.Data; import lombok.EqualsAndHashCode; @@ -49,4 +50,16 @@ public class BuildHomeAct extends BaseModel { @ColDefine(type = ColType.BOOLEAN) @Default("1") private Boolean enabled; + + @Column + @Comment("是否自定义表单") + @ColDefine(type = ColType.BOOLEAN) + @Default("0") + private Boolean isCustomForm; + + @Column + @Comment("表单配置") + @ColDefine(type = ColType.MYSQL_JSON) + private JSONObject formConfig; + } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/models/BuildHomeKpiPlan.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/models/BuildHomeKpiPlan.java index 730dfea..2911925 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/models/BuildHomeKpiPlan.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/models/BuildHomeKpiPlan.java @@ -30,6 +30,11 @@ public class BuildHomeKpiPlan extends BaseModel { @ColDefine(type = ColType.INT) private Integer year; + @Column + @Comment("关联活动ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String actId; + @Column @Comment("开始时间") @ColDefine(type = ColType.DATETIME) diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/models/BuildHomeMaterial.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/models/BuildHomeMaterial.java index 5f00dd2..c6e4d08 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/models/BuildHomeMaterial.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/models/BuildHomeMaterial.java @@ -51,4 +51,10 @@ public class BuildHomeMaterial extends BaseModel { @Comment("年度工作总结") @ColDefine(type = ColType.MYSQL_JSON) private List annualWorkSummaryFiles; + + @Column + @Comment("动态表单数据") + @ColDefine(type = ColType.MYSQL_JSON) + private JSONObject dynamicFormData; + } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/service/BuildHomeMaterialQueryService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/service/BuildHomeMaterialQueryService.java new file mode 100644 index 0000000..c29ec4f --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/service/BuildHomeMaterialQueryService.java @@ -0,0 +1,37 @@ +package com.budwk.app.zhgh.dayofficework.buildHome.service; + +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.dayofficework.buildHome.models.BuildHomeMaterial; + +import javax.servlet.http.HttpServletResponse; + +public interface BuildHomeMaterialQueryService extends BaseService { + + /** + * 分页查询 + */ + Pagination pageData(PageForm pageForm, String actId); + + /** + * 导出分数汇总表 + * @param actId + * @param response + */ + void exportScore(String actId, HttpServletResponse response); + + /** + * 导出自定义类型的汇总材料 + * @param actId + * @param response + */ + void exportCustomZip(String actId, HttpServletResponse response); + + /** + * 导出普通类型的汇总材料 + * @param actId + * @param response + */ + void exportNormalZip(String actId, HttpServletResponse response); +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/service/impl/BuildHomeKpiWriteServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/service/impl/BuildHomeKpiWriteServiceImpl.java index 5908454..4a9c195 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/service/impl/BuildHomeKpiWriteServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/service/impl/BuildHomeKpiWriteServiceImpl.java @@ -2,7 +2,6 @@ package com.budwk.app.zhgh.dayofficework.buildHome.service.impl; import cn.hutool.core.date.DateUtil; 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.sys.models.Sys_union; import com.budwk.app.web.commons.auth.utils.SecurityUtil; @@ -18,8 +17,6 @@ import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.util.NutMap; -import java.io.ByteArrayOutputStream; -import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/service/impl/BuildHomeMaterialQueryServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/service/impl/BuildHomeMaterialQueryServiceImpl.java new file mode 100644 index 0000000..7a52432 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/buildHome/service/impl/BuildHomeMaterialQueryServiceImpl.java @@ -0,0 +1,319 @@ +package com.budwk.app.zhgh.dayofficework.buildHome.service.impl; + +import cn.afterturn.easypoi.entity.BaseTypeConstants; +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.util.StrUtil; +import cn.hutool.core.util.URLUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +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.base.utils.CommonDownloadUtil; +import com.budwk.app.sys.models.Sys_file; +import com.budwk.app.sys.utils.SysFileMinIoUtil; +import com.budwk.app.zhgh.dayofficework.buildHome.models.BuildHomeAct; +import com.budwk.app.zhgh.dayofficework.buildHome.models.BuildHomeMaterial; +import com.budwk.app.zhgh.dayofficework.buildHome.service.BuildHomeMaterialQueryService; +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.IocBean; +import org.nutz.json.Json; +import org.nutz.lang.util.NutMap; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +@IocBean(args = {"refer:dao"}) +public class BuildHomeMaterialQueryServiceImpl extends BaseServiceImpl implements BuildHomeMaterialQueryService { + + public BuildHomeMaterialQueryServiceImpl(Dao dao) { + super(dao); + } + + @Override + public Pagination pageData(PageForm pageForm, String actId) { + Sql sql = Sqls.create(""" + SELECT + t1.id, + t1.`name` AS unionName, + t1.unionCode, + t2.id IS NOT NULL AS isWrite, + t2.logBookFiles, + t2.selfEvaluationFiles, + t2.summaryFiles, + t2.annualWorkSummaryFiles, + t3.id AS actId + FROM + sys_union t1 + LEFT JOIN build_home_material t2 ON t2.unionId = t1.id + AND t2.actId = @actId + LEFT JOIN build_home_act t3 ON t3.id = t2.actId + AND t3.id = @actId + GROUP BY + t1.id, + t2.unionId + ORDER BY + t1.unionCode + """); + sql.setParam("actId", actId); + return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + } + + @Override + public void exportScore(String actId, HttpServletResponse response) { + BuildHomeAct act = dao().fetch(BuildHomeAct.class, actId); + + Sql sql = Sqls.create(""" + SELECT + t2.`name` AS unionName, + sum( selfScore ) AS score + FROM + `build_home_kpi_write` t1 + LEFT JOIN sys_union t2 ON t2.id = t1.unionId + LEFT JOIN build_home_kpi_plan t3 ON t3.id = t1.planId + WHERE + t3.actId = @actId + GROUP BY + t1.unionId + ORDER BY + t2.unionCode + """); + sql.setParam("actId", actId); + List list = listMap(sql); + + ArrayList exportEntities = new ArrayList<>(); + exportEntities.add(new ExcelExportEntity("分工会名称", "unionName", 30)); + + ExcelExportEntity scoreEntity = new ExcelExportEntity("自评分数", "score", 30); + scoreEntity.setType(BaseTypeConstants.DOUBLE_TYPE); + exportEntities.add(scoreEntity); + + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + exportParams.setTitle(act.getName()); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list); + CommonDownloadUtil.download(act.getName() + ".xlsx", workbook, response); + } + + @Override + public void exportCustomZip(String actId, HttpServletResponse response) { + BuildHomeAct act = dao().fetch(BuildHomeAct.class, actId); + JSONArray fields = act.getFormConfig().getJSONArray("rule"); + // 获取文件上传字段 + List uploadFields = fields.stream().map(JSONUtil::parseObj).filter(field -> field.getStr("type").equals("upload")).toList(); + + Sql sql = Sqls.create(""" + SELECT + t1.id, + t1.`name` AS unionName, + t1.unionCode, + t2.id IS NOT NULL AS isWrite, + t2.dynamicFormData, + t3.id AS actId + FROM + sys_union t1 + LEFT JOIN build_home_material t2 ON t2.unionId = t1.id + AND t2.actId = @actId + LEFT JOIN build_home_act t3 ON t3.id = t2.actId + AND t3.id = @actId + GROUP BY + t1.id, + t2.unionId + ORDER BY + t1.unionCode + """); + sql.setParam("actId", actId); + List list = listMap(sql); + + // 2. 设置响应头 + response.setContentType("application/zip"); + String zipName = "建家评比材料汇总.zip"; + response.setHeader("Content-Disposition", "attachment; filename*=" + URLUtil.encode(zipName)); + + // 3. 使用try-with-resources创建ZIP输出流 + try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) { + for (NutMap row : list) { + if (row.getInt("isWrite") == 1) { + String unionName = row.getString("unionName"); + String dynamicFormDataStr = row.getString("dynamicFormData"); + if (StrUtil.isNotBlank(dynamicFormDataStr)) { + + Set existingFileNames = new HashSet<>(); + + NutMap dynamicFormData = Json.fromJson(NutMap.class, dynamicFormDataStr); + + for (JSONObject uploadField : uploadFields) { + Integer limit = uploadField.getJSONObject("props").getInt("limit", 0); + String title = uploadField.getStr("title"); + + if (limit == 0) continue; + + List fileUrls = new ArrayList<>(); + + if (limit == 1) { + fileUrls.add(dynamicFormData.getString(uploadField.getStr("field"))); + } else { + fileUrls.addAll(dynamicFormData.getAsList(uploadField.getStr("field"), String.class)); + } + + List files = dao().query(Sys_file.class, Cnd.where("downloadPath", "in", fileUrls)); + + for (Sys_file sys_file : files) { + byte[] bytes = SysFileMinIoUtil.getFileBytes(sys_file.getBucket(), sys_file.getStoragePath()); + + if (bytes == null || bytes.length == 0) { + continue; + } + + String fileName = sys_file.getName(); + + // 检查文件名是否冲突 + String baseName = fileName.contains(".") ? fileName.substring(0, fileName.lastIndexOf(".")) : fileName; + String extension = fileName.contains(".") ? fileName.substring(fileName.lastIndexOf(".")) : ""; + + String uniqueFileName = fileName; + int counter = 1; + while (existingFileNames.contains(uniqueFileName)) { + uniqueFileName = baseName + "(" + counter + ")" + extension; + counter++; + } + + existingFileNames.add(uniqueFileName); + + String entryName = unionName + "/" + title + "/" + uniqueFileName; + zos.putNextEntry(new ZipEntry(entryName)); + zos.write(bytes); + zos.closeEntry(); + } + } + + } + } + } + + // 确保所有数据被刷新 + zos.finish(); + response.flushBuffer(); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + @Override + public void exportNormalZip(String actId, HttpServletResponse response) { + Sql sql = Sqls.create(""" + SELECT + t1.id, + t1.`name` AS unionName, + t1.unionCode, + t2.id IS NOT NULL AS isWrite, + t2.logBookFiles, + t2.selfEvaluationFiles, + t2.summaryFiles, + t2.annualWorkSummaryFiles, + t3.id AS actId + FROM + sys_union t1 + LEFT JOIN build_home_material t2 ON t2.unionId = t1.id + AND t2.actId = @actId + LEFT JOIN build_home_act t3 ON t3.id = t2.actId + AND t3.id = @actId + GROUP BY + t1.id, + t2.unionId + ORDER BY + t1.unionCode + """); + sql.setParam("actId", actId); + List list = listMap(sql); + + // 2. 设置响应头 + response.setContentType("application/zip"); + String zipName = "建家评比材料汇总.zip"; + response.setHeader("Content-Disposition", "attachment; filename*=" + URLUtil.encode(zipName)); + + // 3. 使用try-with-resources创建ZIP输出流 + try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) { + for (NutMap row : list) { + if (row.getInt("isWrite") == 1) { + String unionName = row.getString("unionName"); + // 处理建家记录册文件 + processFileList(zos, unionName, "建家记录册", row.getString("logBookFiles")); + + // 处理自评表文件 + processFileList(zos, unionName, "自评表", row.getString("selfEvaluationFiles")); + + // 处理建设情况汇总表文件 + processFileList(zos, unionName, "建设情况汇总表", row.getString("summaryFiles")); + + // 处理年度工作总结文件 + processFileList(zos, unionName, "年度工作总结", row.getString("annualWorkSummaryFiles")); + } + } + // 确保所有数据被刷新 + zos.finish(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void processFileList(ZipOutputStream zos, String unionName, String fileType, String filesJson) throws IOException { + if (StrUtil.isNotBlank(filesJson)) { + List files = Json.fromJsonAsList(NutMap.class, filesJson); + Set existingFileNames = new HashSet<>(); + for (NutMap file : files) { + String fileName = file.getString("name"); + String fileUrl = file.getString("url"); + + int start = fileUrl.indexOf("id=") + 3; + String fileId = fileUrl.substring(start); + Sys_file sys_file = dao().fetch(Sys_file.class, fileId); + + byte[] bytes = SysFileMinIoUtil.getFileBytes(sys_file.getBucket(), sys_file.getStoragePath()); + + if (bytes == null || bytes.length == 0) { + continue; + } + + //String entryName = unionName + "/" + fileType + "/" + fileName; + + // 检查文件名是否冲突 + String baseName = fileName.contains(".") + ? fileName.substring(0, fileName.lastIndexOf(".")) + : fileName; + String extension = fileName.contains(".") + ? fileName.substring(fileName.lastIndexOf(".")) + : ""; + + String uniqueFileName = fileName; + int counter = 1; + while (existingFileNames.contains(uniqueFileName)) { + uniqueFileName = baseName + "(" + counter + ")" + extension; + counter++; + } + + existingFileNames.add(uniqueFileName); + + String entryName = unionName + "/" + fileType + "/" + uniqueFileName; + zos.putNextEntry(new ZipEntry(entryName)); + zos.write(bytes); + zos.closeEntry(); + } + } + } +} diff --git a/src/main/resources/static/components/plugins/Guava.vue b/src/main/resources/static/components/plugins/Guava.vue index 7ac4a3c..4413567 100644 --- a/src/main/resources/static/components/plugins/Guava.vue +++ b/src/main/resources/static/components/plugins/Guava.vue @@ -18,6 +18,9 @@
+
+ +
@@ -156,7 +159,7 @@ module.exports = { } .card_scroll { - max-height: calc(100vh - 56px - 40px - 30px - 50px - 34px); + max-height: calc(100vh - 56px - 40px - 30px - 50px - 34px - 50px - 10px); overflow-y: auto; position: relative; } diff --git a/src/main/resources/views/platform/sys/branchUnionUserAuthorization/apply/index.html b/src/main/resources/views/platform/sys/branchUnionUserAuthorization/apply/index.html index f1dec42..b544b73 100644 --- a/src/main/resources/views/platform/sys/branchUnionUserAuthorization/apply/index.html +++ b/src/main/resources/views/platform/sys/branchUnionUserAuthorization/apply/index.html @@ -53,7 +53,7 @@ layout("/layouts/platform.html"){ - +