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: [