From ca59c9652f0a09b1298c328b6bc0306108ddb085 Mon Sep 17 00:00:00 2001 From: Lemon Date: Mon, 31 Mar 2025 15:08:53 +0800 Subject: [PATCH] =?UTF-8?q?update=20=20=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E4=B8=AA=E4=BA=BA=E6=A1=A9=E5=8A=A0=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../uniapp/customer/PersonPileController.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java index 0741c89e1..4baac1193 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/PersonPileController.java @@ -6,10 +6,12 @@ import com.jsowell.common.UserAgentUtils; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.core.page.PageResponse; +import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.response.RestApiResponse; import com.jsowell.common.util.StringUtils; +import com.jsowell.common.util.id.IdUtils; import com.jsowell.pile.dto.*; import com.jsowell.pile.service.PileBasicInfoService; import com.jsowell.pile.service.PileFirmwareInfoService; @@ -56,6 +58,9 @@ public class PersonPileController extends BaseController { @Autowired private PileFirmwareInfoService pileFirmwareInfoService; + @Autowired + private RedisCache redisCache; + /** * 用户绑定个人桩 @@ -69,11 +74,18 @@ public class PersonPileController extends BaseController { public RestApiResponse pileMemberBinding(HttpServletRequest request, @RequestBody PileMemberBindingDTO dto) { logger.info("绑定个人桩信息 params:{}", JSON.toJSONString(dto)); RestApiResponse response = null; + String memberId = getMemberIdByAuthorization(request); + dto.setMemberId(memberId); + // 2025.03.29发现有同一人同时绑定两次桩,因此需要加锁 + String lockKey = "bind_pile_" + dto.getPileSn() + memberId; + String uuid = IdUtils.fastUUID(); try { - String memberId = getMemberIdByAuthorization(request); - dto.setMemberId(memberId); - int i = pileService.pileMemberBinding(dto); - response = new RestApiResponse<>(i); + Boolean lockStatus = redisCache.lock(lockKey, uuid, 60); + if (lockStatus) { + int i = pileService.pileMemberBinding(dto); + response = new RestApiResponse<>(i); + } + } catch (BusinessException e) { logger.error("绑定个人桩信息 error,", e); response = new RestApiResponse<>(e.getCode(), e.getMessage()); @@ -81,6 +93,8 @@ public class PersonPileController extends BaseController { logger.error("绑定个人桩信息 error,", exception); response = new RestApiResponse<>(ReturnCodeEnum.CODE_BINDING_PERSONAL_PILE_ERROR); } + // 解锁 + redisCache.unLock(lockKey); logger.info("绑定个人桩信息 result:{}", response); return response; }