Procházet zdrojové kódy

feat: 审批相关接口加redis锁

李学松 před 2 roky
rodič
revize
51eef2fc16

+ 57 - 8
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmReportController.java

@@ -39,6 +39,7 @@ import com.qunzhixinxi.hnqz.admin.entity.WmReport;
 import com.qunzhixinxi.hnqz.admin.service.WmReportService;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.security.access.prepost.PreAuthorize;
 import io.swagger.annotations.Api;
@@ -46,6 +47,7 @@ import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDateTime;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -61,6 +63,7 @@ import java.util.stream.Collectors;
  * @author pigx code generator
  * @date 2020-12-21 20:57:26
  */
+@Slf4j
 @RestController
 @AllArgsConstructor
 @RequestMapping("/wmreport" )
@@ -239,6 +242,8 @@ public class WmReportController {
 	@GetMapping("/approvalReport" )
 	public R approvalReport(WmReport wmReport, @RequestParam(value = "taskIds") List<String> taskIds,
 							String approvalOpinion,String approvalInfo) {
+		log.info("结算报告--审批 请求参数:taskIds={},approvalOpinion={},approvalInfo={} 操作人:{},操作时间:{}",
+				taskIds, approvalOpinion, approvalInfo, SecurityUtils.getUser().getId(), LocalDateTime.now());
 		WmReport wmReport1=wmReportService.getById(wmReport.getId());
 		if(null==wmReport1){
 			return R.failed("未查询到报告信息");
@@ -246,7 +251,22 @@ public class WmReportController {
 		if(taskIds.isEmpty()){
 			return R.failed("缺少参数:任务id");
 		}
-		return wmReportService.approvalReport(wmReport1,taskIds,approvalOpinion,approvalInfo);
+
+		taskIds.forEach(taskId -> {
+			String cacheKey = CacheConstants.TASK_APPROVAL_KEY + taskId;
+			Boolean absent = redisTemplate.opsForValue().setIfAbsent(cacheKey, String.format("report_approval_report_%s", taskId), 3, TimeUnit.SECONDS);
+			if (Boolean.FALSE.equals(absent)) {
+				throw new RuntimeException("正在处理");
+			}
+		});
+
+		R r = wmReportService.approvalReport(wmReport1, taskIds, approvalOpinion, approvalInfo);
+
+		Set<String> cahceKeys = taskIds.stream()
+				.map(taskId -> CacheConstants.TASK_APPROVAL_KEY + taskId).collect(Collectors.toSet());
+		redisTemplate.delete(cahceKeys);
+
+		return r;
 	}
 
 	/**
@@ -261,6 +281,8 @@ public class WmReportController {
 	@SysLog("快速批量任务审核")
 	@PostMapping("/batch-approval-task")
 	public R<?> batchApprovalTask(@RequestBody Map<String, String> requestMap) {
+		log.info("快速批量任务审核 请求参数:{}, 操作人:{},操作时间:{}",
+				requestMap, SecurityUtils.getUser().getId(), LocalDateTime.now());
 		String reportId = requestMap.get("reportId");
 		String taskIds = requestMap.get("taskIds");
 		String approvalOpinion = requestMap.get("approvalOpinion");
@@ -278,13 +300,21 @@ public class WmReportController {
 				.sorted(Comparator.comparingInt(Integer::parseInt))
 				.collect(Collectors.toList());
 
-		String cacheKey = CacheConstants.TASK_APPROVAL_KEY + String.join(StrUtil.COMMA, sortedIdList);
-		Boolean absent = redisTemplate.opsForValue().setIfAbsent(cacheKey, JSONUtil.toJsonStr(requestMap), 3, TimeUnit.SECONDS);
-		if (Boolean.FALSE.equals(absent)) {
-			return R.failed("正在处理");
-		}
+		sortedIdList.forEach(taskId -> {
+			String cacheKey = CacheConstants.TASK_APPROVAL_KEY + taskId;
+			Boolean absent = redisTemplate.opsForValue().setIfAbsent(cacheKey, String.format("report_batch_%s", taskId), 3, TimeUnit.SECONDS);
+			if (Boolean.FALSE.equals(absent)) {
+				throw new RuntimeException("正在处理");
+			}
+		});
+
+		Boolean approvalTask = wmReportService.batchApprovalTask(reportId, sortedIdList, approvalOpinion, approvalInfo);
 
-		return R.ok(wmReportService.batchApprovalTask(reportId, sortedIdList, approvalOpinion, approvalInfo));
+		Set<String> cahceKeys = sortedIdList.stream()
+				.map(taskId -> CacheConstants.TASK_APPROVAL_KEY + taskId).collect(Collectors.toSet());
+		redisTemplate.delete(cahceKeys);
+
+		return R.ok(approvalTask);
 	}
 
 	/**
@@ -299,6 +329,8 @@ public class WmReportController {
 	@SysLog("结算报告审批-任务复审")
 	@PostMapping("/review-task")
 	public R<?> reviewTask(@RequestBody Map<String, String> requestMap) {
+		log.info("结算报告审批-任务复审 请求参数:{}, 操作人:{},操作时间:{}",
+				requestMap, SecurityUtils.getUser().getId(), LocalDateTime.now());
 		String reportId = requestMap.get("reportId");
 		String taskId = requestMap.get("taskId");
 		String approvalOpinion = requestMap.get("approvalOpinion");
@@ -330,10 +362,27 @@ public class WmReportController {
 	@PostMapping("/approval-report-by-task")
 	public R approvalReportByTask(@RequestParam(value = "taskIds") List<String> taskIds,
 							String approvalOpinion,String approvalInfo) {
+		log.info("批量任务类型结算报告--审批 请求参数:taskIds={},approvalOpinion={},approvalInfo={} 操作人:{},操作时间:{}",
+				taskIds, approvalOpinion, approvalInfo, SecurityUtils.getUser().getId(), LocalDateTime.now());
 		if(CollUtil.isEmpty(taskIds)){
 			return R.failed("taskIds必填");
 		}
-		return wmReportService.approvalReportByTaskType(taskIds,  approvalOpinion, approvalInfo);
+
+		taskIds.forEach(taskId -> {
+			String cacheKey = CacheConstants.TASK_APPROVAL_KEY + taskId;
+			Boolean absent = redisTemplate.opsForValue().setIfAbsent(cacheKey, String.format("report_approval_report_by_task_%s", taskId), 3, TimeUnit.SECONDS);
+			if (Boolean.FALSE.equals(absent)) {
+				throw new RuntimeException("正在处理");
+			}
+		});
+
+		R<?> r = wmReportService.approvalReportByTaskType(taskIds, approvalOpinion, approvalInfo);
+
+		Set<String> cahceKeys = taskIds.stream()
+				.map(taskId -> CacheConstants.TASK_APPROVAL_KEY + taskId).collect(Collectors.toSet());
+		redisTemplate.delete(cahceKeys);
+
+		return r;
 	}
 
 

+ 33 - 6
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskController.java

@@ -1485,6 +1485,8 @@ public class WmTaskController {
 	@SysLog("个人承接积分值-任务复审")
 	@PostMapping("/review-task")
 	public R<?> reviewTask(@RequestBody WmTask wmTask) {
+		log.info("个人承接积分值-任务复审 请求参数:{}, 操作人:{},操作时间:{}",
+				wmTask, SecurityUtils.getUser().getId(), LocalDateTime.now());
 		if (!StrUtil.isAllNotBlank(wmTask.getId(), wmTask.getTaskStatus())) {
 			return R.failed("必填参数为空");
 		}
@@ -1510,6 +1512,8 @@ public class WmTaskController {
 	@SysLog("快速批量任务审核")
 	@PostMapping("/batch-approval-task")
 	public R<?> batchApprovalTask(@RequestBody WmTask wmTask) {
+		log.info("快速批量任务审核 请求参数:{}, 操作人:{},操作时间:{}",
+				wmTask, SecurityUtils.getUser().getId(), LocalDateTime.now());
 		if (!StrUtil.isAllNotBlank(wmTask.getId(), wmTask.getTaskStatus())) {
 			return R.failed("必填参数为空");
 		}
@@ -1518,13 +1522,21 @@ public class WmTaskController {
 				.sorted(Comparator.comparingInt(Integer::parseInt))
 				.collect(Collectors.toList());
 
-		String cacheKey = CacheConstants.TASK_APPROVAL_KEY + String.join(StrUtil.COMMA, sortedIdList);
-		Boolean absent = redisTemplate.opsForValue().setIfAbsent(cacheKey, JSONUtil.toJsonStr(wmTask), 3, TimeUnit.SECONDS);
-		if (Boolean.FALSE.equals(absent)) {
-			return R.failed("正在处理");
-		}
+		sortedIdList.forEach(taskId -> {
+			String cacheKey = CacheConstants.TASK_APPROVAL_KEY + taskId;
+			Boolean absent = redisTemplate.opsForValue().setIfAbsent(cacheKey, String.format("task_batch_%s", taskId), 3, TimeUnit.SECONDS);
+			if (Boolean.FALSE.equals(absent)) {
+				throw new RuntimeException("正在处理");
+			}
+		});
 
-		return R.ok(wmTaskService.batchApprovalTask(sortedIdList, wmTask.getTaskStatus(), wmTask.getTaskStatusInfo()));
+		Boolean approvalTask = wmTaskService.batchApprovalTask(sortedIdList, wmTask.getTaskStatus(), wmTask.getTaskStatusInfo());
+
+		Set<String> cahceKeys = sortedIdList.stream()
+				.map(taskId -> CacheConstants.TASK_APPROVAL_KEY + taskId).collect(Collectors.toSet());
+		redisTemplate.delete(cahceKeys);
+
+		return R.ok(approvalTask);
 	}
 
 	/**
@@ -1537,11 +1549,26 @@ public class WmTaskController {
 	@SysLog("任务审核")
 	@PostMapping("/approvalTask")
 	public R approvalTask(@RequestBody WmTask wmTask) {
+		log.info("任务审核 请求参数:{}, 操作人:{},操作时间:{}",
+				wmTask, SecurityUtils.getUser().getId(), LocalDateTime.now());
 		if (StringUtils.isEmpty(wmTask.getId())) {
 			R.failed("任务id不能为空");
 		}
+
+		List<String> taskIds = new ArrayList<>(StrUtil.split(wmTask.getId(), StrUtil.COMMA));
+		taskIds.forEach(taskId -> {
+			String cacheKey = CacheConstants.TASK_APPROVAL_KEY + taskId;
+			Boolean absent = redisTemplate.opsForValue().setIfAbsent(cacheKey, String.format("task_approval_task_%s", taskId), 3, TimeUnit.SECONDS);
+			if (Boolean.FALSE.equals(absent)) {
+				throw new RuntimeException("正在处理");
+			}
+		});
+
 		R result = wmTaskService.approvalTask(wmTask);
 
+		Set<String> cahceKeys = taskIds.stream()
+				.map(taskId -> CacheConstants.TASK_APPROVAL_KEY + taskId).collect(Collectors.toSet());
+		redisTemplate.delete(cahceKeys);
 
 		// 释放图片 和 初始化经纬度
 		if (result.getCode() == CommonConstants.SUCCESS){