From b6a4a50e10c830bb273606ec0087d0d1399b7ce3 Mon Sep 17 00:00:00 2001 From: hongqiwei <1143662660@qq.com> Date: Fri, 11 Sep 2026 16:02:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=BA=E5=9C=B0=E9=A2=84=E7=BA=A6=E6=95=B4?= =?UTF-8?q?=E6=94=B9=EF=BC=9A=E5=AE=A1=E6=A0=B8=E9=BB=98=E8=AE=A4=E5=90=8C?= =?UTF-8?q?=E6=84=8F=20=E6=8B=89=E5=8F=96=E6=95=B0=E6=8D=AE=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E5=9C=A8=E8=81=8C=E7=8A=B6=E6=80=81=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E6=8B=89=E9=80=80=E4=BC=91=E4=BA=BA=E5=91=98=20=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E7=A6=8F=E5=88=A9=E7=95=8C=E9=9D=A2=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=B7=B2=E9=80=89=E6=8B=A9=E6=9C=AA=E9=80=89=E6=8B=A9=20?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E7=AB=AF=E4=B8=BB=E9=A1=B5=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E5=9B=9E=E6=98=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v/nutz/zhgh/data/constant/SourceData.java | 5 ++ .../WelfareUserChooseController.java | 50 ++++++------------- .../service/WelfareProjectService.java | 14 ++++++ .../impl/WelfareProjectServiceImpl.java | 44 ++++++++++++++++ .../views/mobile/activity/site/audit.html | 3 +- src/main/resources/views/mobile/home.html | 10 ++-- .../platform/activity/site/SiteReview.html | 3 +- .../views/platform/welfare/userChoose.html | 9 +++- 8 files changed, 95 insertions(+), 43 deletions(-) diff --git a/src/main/java/io/v/nutz/zhgh/data/constant/SourceData.java b/src/main/java/io/v/nutz/zhgh/data/constant/SourceData.java index 2ea089c..f28c715 100644 --- a/src/main/java/io/v/nutz/zhgh/data/constant/SourceData.java +++ b/src/main/java/io/v/nutz/zhgh/data/constant/SourceData.java @@ -104,6 +104,11 @@ public interface SourceData { // checkSuccess(map); List data = map.getAsList("data", NutMap.class); for (NutMap row : data) { + // 手动及定时拉取只保留源字段 ZZZTM 为 100 的人员,缺失或其他值均跳过。 + // 分页仍按源接口 totalCount 推进,当前页全部被过滤也必须继续读取后续页。 + if (!"100".equals(row.getString("ZZZTM"))) { + continue; + } Map entity = new HashMap(500); row.forEach((k, v) -> { diff --git a/src/main/java/io/v/nutz/zhgh/welfare/controller/WelfareUserChooseController.java b/src/main/java/io/v/nutz/zhgh/welfare/controller/WelfareUserChooseController.java index 5d42592..3f2f0de 100644 --- a/src/main/java/io/v/nutz/zhgh/welfare/controller/WelfareUserChooseController.java +++ b/src/main/java/io/v/nutz/zhgh/welfare/controller/WelfareUserChooseController.java @@ -1,7 +1,6 @@ package io.v.nutz.zhgh.welfare.controller; import cn.wizzer.framework.base.Result; -import cn.wizzer.framework.page.Pagination; import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.query.PageForm; import io.v.nutz.base.service.SimpleService; @@ -15,13 +14,10 @@ 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; import org.nutz.json.Json; -import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; @@ -57,43 +53,25 @@ public class WelfareUserChooseController { public void index() { } + /** + * 当前用户福利项目分页查询。 + * + * @param pageForm 分页参数,pageNumber 为页码,pageSize 为每页条数 + * @param year 选择开始时间所属年度,为空时不限制年度 + * @param isChoose 选择状态:1 为已选择,2 为未选择;未传时默认未选择 + * @return Pagination 分页对象;list 为项目列表,totalCount 为总条数, + * 列表中 isChoose 为 1 表示已选择、0 表示未选择,gist_list 为所选福利说明 + */ @At @ViReturn @RequiresPermissions("welfare.user.choose") - public Object pageData(PageForm pageForm, Integer year) { - Sql sql = Sqls.create(""" - SELECT - wp.*, - CASE - WHEN wus.selectUserId IS NOT NULL THEN 1 - ELSE 0 - END AS isChoose, - wus.selectTime, - GROUP_CONCAT( DISTINCT wuso.optionName, IF(wus.selectSpecs is not null, (CONCAT('—规格:', wus.selectSpecs)), ''), '(', wus.selectNum, '份)' ) AS gist_list, - wus.receiveAddress - FROM - welfare_project wp - LEFT JOIN welfare_project_user_selection wus ON wp.id = wus.welfareId AND wus.selectUserId = @selectUserId - LEFT JOIN welfare_list wl ON wp.id = wl.projectId AND wl.userId = @selectUserId - LEFT JOIN welfare_project_subject_option wuso ON wus.selectOptionId = wuso.id - $condition - """); - sql.setParam("selectUserId", ShiroUtil.getUserId()); - - Cnd cnd = Cnd.NEW(); - cnd.and("wp.provideMode", "in", "2,3"); - cnd.and("wl.userId", "=", ShiroUtil.getUserId()); - cnd.andEX("YEAR(wp.choiceTimeStart)", "in", year); - cnd.and("wp.isDisabled", "=", 0); - cnd.groupBy("wp.id"); - cnd.desc("YEAR(wp.choiceTimeStart)"); - sql.setCondition(cnd); - Pagination pagination = simpleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); - return pagination; - + public Object pageData(PageForm pageForm, Integer year, Integer isChoose) { + if (isChoose != null && !Integer.valueOf(1).equals(isChoose) && !Integer.valueOf(2).equals(isChoose)) { + return Result.error("选择状态只能为已选择或未选择"); + } + return welfareProjectService.userChoosePage(pageForm, year, isChoose, ShiroUtil.getUserId()); } - @At @ViReturn @Aop(TransAop.READ_COMMITTED) diff --git a/src/main/java/io/v/nutz/zhgh/welfare/service/WelfareProjectService.java b/src/main/java/io/v/nutz/zhgh/welfare/service/WelfareProjectService.java index 7ebbf12..01e82fe 100644 --- a/src/main/java/io/v/nutz/zhgh/welfare/service/WelfareProjectService.java +++ b/src/main/java/io/v/nutz/zhgh/welfare/service/WelfareProjectService.java @@ -1,5 +1,7 @@ package io.v.nutz.zhgh.welfare.service; +import cn.wizzer.framework.page.Pagination; +import io.v.nutz.base.query.PageForm; import io.v.nutz.base.service.ViService; import io.v.nutz.zhgh.welfare.model.WelfareProject; @@ -22,6 +24,18 @@ public interface WelfareProjectService extends ViService { */ WelfareProject projectInfo(String projectId); + /** + * 按选择状态查询用户有资格选择的福利项目。 + * + * @param pageForm 分页参数,pageNumber 为页码,pageSize 为每页条数 + * @param year 选择开始时间所属年度,为空时不限制年度 + * @param isChoose 1 为已选择,2 或 null 为未选择;调用方须校验其他值 + * @param userId 当前登录用户 ID,由服务端获取 + * @return Pagination:list 为项目列表,totalCount 为总条数; + * list 中 isChoose 为 1/0,分别表示已选择/未选择,gist_list 为所选福利说明 + */ + Pagination userChoosePage(PageForm pageForm, Integer year, Integer isChoose, String userId); + List getIngWelfareProject(); } diff --git a/src/main/java/io/v/nutz/zhgh/welfare/service/impl/WelfareProjectServiceImpl.java b/src/main/java/io/v/nutz/zhgh/welfare/service/impl/WelfareProjectServiceImpl.java index 3e4f1ee..873f69c 100644 --- a/src/main/java/io/v/nutz/zhgh/welfare/service/impl/WelfareProjectServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/welfare/service/impl/WelfareProjectServiceImpl.java @@ -1,6 +1,8 @@ package io.v.nutz.zhgh.welfare.service.impl; import cn.hutool.core.date.DateUtil; +import cn.wizzer.framework.page.Pagination; +import io.v.nutz.base.query.PageForm; import io.v.nutz.base.service.BaseService; import io.v.nutz.zhgh.data.model.MatchConditionStructure; import io.v.nutz.base.service.impl.ViServiceImpl; @@ -110,6 +112,48 @@ public class WelfareProjectServiceImpl extends ViServiceImpl imp return project; } + /** + * {@inheritDoc} + */ + @Override + public Pagination userChoosePage(PageForm pageForm, Integer year, Integer isChoose, String userId) { + Sql sql = Sqls.create(""" + SELECT + wp.*, + CASE + WHEN wus.selectUserId IS NOT NULL THEN 1 + ELSE 0 + END AS isChoose, + wus.selectTime, + GROUP_CONCAT( DISTINCT wuso.optionName, IF(wus.selectSpecs is not null, (CONCAT('—规格:', wus.selectSpecs)), ''), '(', wus.selectNum, '份)' ) AS gist_list, + wus.receiveAddress + FROM + welfare_project wp + LEFT JOIN welfare_project_user_selection wus ON wp.id = wus.welfareId AND wus.selectUserId = @selectUserId + LEFT JOIN welfare_list wl ON wp.id = wl.projectId AND wl.userId = @selectUserId + LEFT JOIN welfare_project_subject_option wuso ON wus.selectOptionId = wuso.id + $condition + """); + sql.setParam("selectUserId", userId); + + Cnd cnd = Cnd.NEW(); + cnd.and("wp.provideMode", "in", "2,3"); + cnd.and("wl.userId", "=", userId); + cnd.andEX("YEAR(wp.choiceTimeStart)", "in", year); + cnd.and("wp.isDisabled", "=", 0); + // 与列表状态一致:存在当前用户的选择记录为已选择,否则为未选择。 + if (Integer.valueOf(1).equals(isChoose)) { + cnd.and("wus.selectUserId", "is not", null); + } else { + cnd.and("wus.selectUserId", "is", null); + } + cnd.groupBy("wp.id"); + cnd.desc("YEAR(wp.choiceTimeStart)"); + sql.setCondition(cnd); + Pagination pagination = listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return pagination; + } + @Override public List getIngWelfareProject() { return dao().query(WelfareProject.class, Cnd.where("choiceTimeStart", "<=", DateUtil.date()) diff --git a/src/main/resources/views/mobile/activity/site/audit.html b/src/main/resources/views/mobile/activity/site/audit.html index da6f132..0fa2fdc 100644 --- a/src/main/resources/views/mobile/activity/site/audit.html +++ b/src/main/resources/views/mobile/activity/site/audit.html @@ -194,12 +194,13 @@ } }) }, + // 进入审核时默认同意;仅查看时不填意见,切换申请不保留上一条输入。 openDetail(row, approval) { this.$set(this, 'auditReady', false) this.$set(this, 'showApprovalForm', approval) this.$set(this, 'formData', { id: row.id, username: "${@shiro.getPrincipalProperty('username')}", - auditTime: moment().format('YYYY-MM-DD HH:mm:ss'), auditOpinion: '' + auditTime: moment().format('YYYY-MM-DD HH:mm:ss'), auditOpinion: approval ? '同意' : '' }) this.$set(this, 'detailShow', true) this.$nextTick(() => this.$refs.infoRef.onOpen(row.id)) diff --git a/src/main/resources/views/mobile/home.html b/src/main/resources/views/mobile/home.html index 4ad9fb5..32b6561 100644 --- a/src/main/resources/views/mobile/home.html +++ b/src/main/resources/views/mobile/home.html @@ -688,20 +688,24 @@ layout("/mobile/platform.html"){ }); }, initData() { + // 活动独立启动,返回其完成状态供首页选择默认栏目,不等待待办加载。 + const activityRequest = this.listActivity().catch(() => {}); this.loadLocalTasks(); // 保留原有业务待办;重复点击不并发追加旧接口的汇总记录。 if (!this.legacyTaskLoading) { this.$set(this, 'legacyTaskLoading', true); this.$set(this, 'legacyTaskError', false); - this.getNeedItems().then(() => this.getMemberCheckSelfAgenda()) + // jQuery 1.11 的请求链不支持catch/finally;先由原生Promise接管,并等待各待办请求依次完成。 + Promise.resolve().then(() => this.getNeedItems()) + .then(() => this.getMemberCheckSelfAgenda()) .then(() => this.getWelfareCheckSelfAgenda()) .then(() => this.getCompletes()) .catch(() => this.$set(this, 'legacyTaskError', true)) .finally(() => this.$set(this, 'legacyTaskLoading', false)); } - // 首页消息、活动请求不阻塞办理事项展示。 + // 消息独立加载,不阻塞活动和办理事项展示。 this.getMsg().catch(() => {}); - return this.listActivity().catch(() => {}); + return activityRequest; }, setNeedItems() { return $.get('/platform/needItems/getNeedItems', {mobile: true}).then(res => { diff --git a/src/main/resources/views/platform/activity/site/SiteReview.html b/src/main/resources/views/platform/activity/site/SiteReview.html index 5d3b50e..e400682 100644 --- a/src/main/resources/views/platform/activity/site/SiteReview.html +++ b/src/main/resources/views/platform/activity/site/SiteReview.html @@ -161,13 +161,14 @@ this.$refs.guava.view() this.$refs.viewInfoRef.onOpen(row.id) }, + // 每次打开审核都重置意见,默认同意,避免沿用上一条申请填写的内容。 openReview(row) { this.$set(this, 'auditReady', false) this.$set(this, 'formData', { id: row.id, username: "${@shiro.getPrincipalProperty('username')}", auditTime: moment().format('YYYY-MM-DD HH:mm:ss'), - auditOpinion: '' + auditOpinion: '同意' }) this.$refs.guava.edit() this.$nextTick(() => this.$refs.form.clearValidate()) diff --git a/src/main/resources/views/platform/welfare/userChoose.html b/src/main/resources/views/platform/welfare/userChoose.html index 62fa885..2e8d45d 100644 --- a/src/main/resources/views/platform/welfare/userChoose.html +++ b/src/main/resources/views/platform/welfare/userChoose.html @@ -78,7 +78,11 @@ layout("/layouts/platform.html"){ @@ -475,7 +479,8 @@ layout("/layouts/platform.html"){ projectInfo: {}, welfareSubject: {}, pageForm: { - isChoose: false, + // 与筛选按钮取值一致,首次进入默认查询未选择项目。 + isChoose: 2, year: moment().format('YYYY') }, tableColumns: [