From 7d5e948e4c30ed056fa09c7aafded58b54421376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=9C=E5=AD=A6=E6=88=90?= <1274337408@qq.com> Date: Fri, 23 Oct 2026 17:22:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E5=9C=BA=E5=9C=B0=E9=A2=84?= =?UTF-8?q?=E7=BA=A6-=E9=A2=84=E7=BA=A6=E5=AE=A1=E6=A0=B8=EF=BC=88?= =?UTF-8?q?=E5=8C=85=E5=90=AB=E6=89=8B=E6=9C=BA=E7=AB=AF=EF=BC=89=EF=BC=9A?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A4=9A=E4=B8=AA=E5=9C=BA=E5=9C=B0=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E5=AE=A1=E6=A0=B8=E5=90=8C=E6=97=B6=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E7=9B=B8=E5=90=8C=E4=B8=80=E9=A1=B5=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=97=B6=EF=BC=88=E5=8C=85=E5=90=AB=E4=B8=80=E9=94=AE=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E5=92=8C=E4=B8=80=E9=94=AE=E9=A9=B3=E5=9B=9E=EF=BC=89?= =?UTF-8?q?=EF=BC=8C=E5=90=8E=E7=AB=AF=E5=BC=82=E5=B8=B8=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/site/SiteReviewController.java | 18 ++++++++- .../site/SiteAuditMobileController.java | 37 ++++++++++++++++--- .../views/mobile/activity/site/audit.html | 4 +- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/v/nutz/activity/controller/site/SiteReviewController.java b/src/main/java/io/v/nutz/activity/controller/site/SiteReviewController.java index a95d494..e16238d 100644 --- a/src/main/java/io/v/nutz/activity/controller/site/SiteReviewController.java +++ b/src/main/java/io/v/nutz/activity/controller/site/SiteReviewController.java @@ -19,6 +19,7 @@ import io.v.nutz.sys.services.SysUserService; import io.v.nutz.util.ShiroUtil; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.nutz.dao.Chain; import org.nutz.dao.Cnd; import org.nutz.dao.Sqls; import org.nutz.dao.entity.Record; @@ -179,11 +180,21 @@ public class SiteReviewController { siteReserveService.insert(audit); + int reviewCount = 0; for (int i = 0; i < reviewList.size(); i++) { ActivitySiteReserve fetch = reviewList.get(i); Integer stateCode = fetch.getReserve_state(); Integer afterStateCode = afterStateList.get(i); + // 按原审核状态更新,避免多个管理员同时审核时重复处理同一申请 + int updateCount = siteReserveService.update(Chain.make("reserve_state", afterStateCode), + Cnd.NEW().and("sqid", "=", fetch.getSqid()).and("reserve_state", "=", stateCode)); + if (updateCount == 0) { + skippedCount++; + continue; + } + reviewCount++; + List reserves = siteReserveService.query(Cnd.NEW().and("sqid", "=", fetch.getSqid())); String days = ""; for (ActivitySiteReserve siteReserve : reserves) { @@ -244,8 +255,13 @@ public class SiteReviewController { } } } + if (reviewCount == 0) { + siteReserveService.dao().delete(audit); + return Result.success("所选预约已被其他人审核,无需重复处理") + .addData(NutMap.NEW().setv("skippedCount", skippedCount)); + } if (skippedCount > 0) { - return Result.success("审核完成,成功处理" + reviewList.size() + "条,跳过" + skippedCount + "条状态已变化的预约") + return Result.success("审核完成,成功处理" + reviewCount + "条,跳过" + skippedCount + "条状态已变化的预约") .addData(NutMap.NEW().setv("skippedCount", skippedCount)); } return Result.success("审核成功"); diff --git a/src/main/java/io/v/nutz/mobile/activity/site/SiteAuditMobileController.java b/src/main/java/io/v/nutz/mobile/activity/site/SiteAuditMobileController.java index b66c1b7..7bd6c00 100644 --- a/src/main/java/io/v/nutz/mobile/activity/site/SiteAuditMobileController.java +++ b/src/main/java/io/v/nutz/mobile/activity/site/SiteAuditMobileController.java @@ -8,6 +8,7 @@ import io.v.nutz.activity.services.ActivityCommonService; import io.v.nutz.activity.services.SiteInfoService; import io.v.nutz.activity.services.SiteReserveService; import io.v.nutz.annontation.ViReturn; +import io.v.nutz.base.result.Result; import io.v.nutz.base.utils.MsgApi; import io.v.nutz.base.utils.SendMsg; import io.v.nutz.base.utils.Vi; @@ -20,6 +21,7 @@ import io.v.nutz.sys.models.Sys_user; import io.v.nutz.sys.services.SysUserService; import io.v.nutz.web.commons.utils.ShiroUtil; import org.apache.commons.lang3.StringUtils; +import org.nutz.dao.Chain; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; @@ -39,6 +41,7 @@ import org.nutz.mvc.annotation.Param; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; /** * @Author JyuHsin @@ -223,15 +226,34 @@ public class SiteAuditMobileController { @At("/audit") @Ok("json:full") @ViReturn - public Object audit(@Param("ids") String[] ids, Audit audit, - @Param("isPass") boolean isPass) { - dao.insert(audit); - for (String id : ids) { + public Object audit(@Param("ids") String[] ids, @Param("reserveState") Integer[] reserveState, Audit audit, + @Param("isPass") Boolean isPass) { + if (ids == null || reserveState == null || ids.length == 0 || ids.length != reserveState.length || isPass == null) { + return Result.error("审核参数错误,请刷新页面后重试"); + } - ActivitySiteReserve fetch = siteReserveService.fetch(id); + dao.insert(audit); + int reviewCount = 0; + for (int i = 0; i < ids.length; i++) { + + ActivitySiteReserve fetch = siteReserveService.fetch(ids[i]); + if (fetch == null || !Objects.equals(fetch.getReserve_state(), reserveState[i])) { + continue; + } Integer stateCode = fetch.getReserve_state(); Integer afterStateCode = activityCommonService.findAfterStateCode(stateCode, isPass); + if (afterStateCode == null) { + continue; + } + + // 按原审核状态更新,避免多个管理员同时审核时重复处理同一申请 + int updateCount = dao.update(ActivitySiteReserve.class, Chain.make("reserve_state", afterStateCode), + Cnd.NEW().and("sqid", "=", fetch.getSqid()).and("reserve_state", "=", stateCode)); + if (updateCount == 0) { + continue; + } + reviewCount++; List reserves = siteReserveService.query(Cnd.NEW().and("sqid", "=", fetch.getSqid())); String days = ""; @@ -292,7 +314,10 @@ public class SiteAuditMobileController { } } } - return null; + if (reviewCount == 0) { + dao.delete(audit); + } + return Result.success("操作完成"); } public List listMap(Sql sql) { diff --git a/src/main/resources/views/mobile/activity/site/audit.html b/src/main/resources/views/mobile/activity/site/audit.html index f176cb2..502e359 100644 --- a/src/main/resources/views/mobile/activity/site/audit.html +++ b/src/main/resources/views/mobile/activity/site/audit.html @@ -466,8 +466,10 @@ layout("/mobile/platform.html"){ if (this.type === 'all') { idList = this.userList.map(o => o.id) } + const reviewList = this.userList.filter(o => idList.includes(o.id)) const resp = await $.post('/mobile/activity/site/audit/audit', { - ids: JSON.stringify(idList), + ids: JSON.stringify(reviewList.map(o => o.id)), + reserveState: JSON.stringify(reviewList.map(o => o.reserve_state)), auditOpinion: this.reason, isPass: this.auditType === 'pass' })