活动场地预约-预约审核(包含手机端):修复多个场地管理员审核同时审核相同一页数据时(包含一键通过和一键驳回),后端异常报错的问题;
This commit is contained in:
@@ -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<ActivitySiteReserve> 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("审核成功");
|
||||
|
||||
@@ -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<ActivitySiteReserve> 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<NutMap> listMap(Sql sql) {
|
||||
|
||||
@@ -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'
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user