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; }