活动场地预约-预约审核(包含手机端):修复多个场地管理员审核同时审核相同一页数据时(包含一键通过和一键驳回),后端异常报错的问题;
This commit is contained in:
@@ -19,6 +19,7 @@ import io.v.nutz.sys.services.SysUserService;
|
|||||||
import io.v.nutz.util.ShiroUtil;
|
import io.v.nutz.util.ShiroUtil;
|
||||||
import org.apache.shiro.authz.annotation.RequiresAuthentication;
|
import org.apache.shiro.authz.annotation.RequiresAuthentication;
|
||||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
|
import org.nutz.dao.Chain;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
import org.nutz.dao.Sqls;
|
import org.nutz.dao.Sqls;
|
||||||
import org.nutz.dao.entity.Record;
|
import org.nutz.dao.entity.Record;
|
||||||
@@ -179,11 +180,21 @@ public class SiteReviewController {
|
|||||||
|
|
||||||
siteReserveService.insert(audit);
|
siteReserveService.insert(audit);
|
||||||
|
|
||||||
|
int reviewCount = 0;
|
||||||
for (int i = 0; i < reviewList.size(); i++) {
|
for (int i = 0; i < reviewList.size(); i++) {
|
||||||
ActivitySiteReserve fetch = reviewList.get(i);
|
ActivitySiteReserve fetch = reviewList.get(i);
|
||||||
Integer stateCode = fetch.getReserve_state();
|
Integer stateCode = fetch.getReserve_state();
|
||||||
Integer afterStateCode = afterStateList.get(i);
|
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()));
|
List<ActivitySiteReserve> reserves = siteReserveService.query(Cnd.NEW().and("sqid", "=", fetch.getSqid()));
|
||||||
String days = "";
|
String days = "";
|
||||||
for (ActivitySiteReserve siteReserve : reserves) {
|
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) {
|
if (skippedCount > 0) {
|
||||||
return Result.success("审核完成,成功处理" + reviewList.size() + "条,跳过" + skippedCount + "条状态已变化的预约")
|
return Result.success("审核完成,成功处理" + reviewCount + "条,跳过" + skippedCount + "条状态已变化的预约")
|
||||||
.addData(NutMap.NEW().setv("skippedCount", skippedCount));
|
.addData(NutMap.NEW().setv("skippedCount", skippedCount));
|
||||||
}
|
}
|
||||||
return Result.success("审核成功");
|
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.SiteInfoService;
|
||||||
import io.v.nutz.activity.services.SiteReserveService;
|
import io.v.nutz.activity.services.SiteReserveService;
|
||||||
import io.v.nutz.annontation.ViReturn;
|
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.MsgApi;
|
||||||
import io.v.nutz.base.utils.SendMsg;
|
import io.v.nutz.base.utils.SendMsg;
|
||||||
import io.v.nutz.base.utils.Vi;
|
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.sys.services.SysUserService;
|
||||||
import io.v.nutz.web.commons.utils.ShiroUtil;
|
import io.v.nutz.web.commons.utils.ShiroUtil;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.nutz.dao.Chain;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
import org.nutz.dao.Dao;
|
import org.nutz.dao.Dao;
|
||||||
import org.nutz.dao.Sqls;
|
import org.nutz.dao.Sqls;
|
||||||
@@ -39,6 +41,7 @@ import org.nutz.mvc.annotation.Param;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author JyuHsin
|
* @Author JyuHsin
|
||||||
@@ -223,15 +226,34 @@ public class SiteAuditMobileController {
|
|||||||
@At("/audit")
|
@At("/audit")
|
||||||
@Ok("json:full")
|
@Ok("json:full")
|
||||||
@ViReturn
|
@ViReturn
|
||||||
public Object audit(@Param("ids") String[] ids, Audit audit,
|
public Object audit(@Param("ids") String[] ids, @Param("reserveState") Integer[] reserveState, Audit audit,
|
||||||
@Param("isPass") boolean isPass) {
|
@Param("isPass") Boolean isPass) {
|
||||||
dao.insert(audit);
|
if (ids == null || reserveState == null || ids.length == 0 || ids.length != reserveState.length || isPass == null) {
|
||||||
for (String id : ids) {
|
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 stateCode = fetch.getReserve_state();
|
||||||
Integer afterStateCode = activityCommonService.findAfterStateCode(stateCode, isPass);
|
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()));
|
List<ActivitySiteReserve> reserves = siteReserveService.query(Cnd.NEW().and("sqid", "=", fetch.getSqid()));
|
||||||
String days = "";
|
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) {
|
public List<NutMap> listMap(Sql sql) {
|
||||||
|
|||||||
@@ -466,8 +466,10 @@ layout("/mobile/platform.html"){
|
|||||||
if (this.type === 'all') {
|
if (this.type === 'all') {
|
||||||
idList = this.userList.map(o => o.id)
|
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', {
|
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,
|
auditOpinion: this.reason,
|
||||||
isPass: this.auditType === 'pass'
|
isPass: this.auditType === 'pass'
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user