Merge #140 into master from cc_20260513_minor_req

闭店H5新增闭店接口&私域二维码缓存时间延长

* cc_20260513_minor_req: (2 commits squashed)

  - fix:私域二维码新增SN反向映射关系

  - fix:新增pc闭店申请发起接口

Signed-off-by: 王非凡 <accounts_67eba0c5fee9c49c80c8e2b4@mail.teambition.com>
Merged-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>

CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/140
This commit is contained in:
王非凡
2026-05-18 09:30:59 +00:00
committed by 正新
parent 451b95f909
commit e6bcfac086
9 changed files with 61 additions and 28 deletions

View File

@@ -424,6 +424,11 @@ public class RedisConstant {
*/
public static final String PRIVATE_STORE_SN_BIND = "private_sphere_store_sn";
/**
* 私域门店id->设备SN
*/
public static final String PRIVATE_STORE_SN_REVERSE = "private_store_sn_reverse";
/**
* 私域设备SN->门店私域二维码地址
*/

View File

@@ -39,4 +39,9 @@ public class CloseStoreApplyRequest {
@NotBlank(message = "门店id不能为空")
private String storeId;
@ApiModelProperty(value = "用户id", hidden = true)
private String userId;
@ApiModelProperty(value = "用户名称",hidden = true)
private String userName;
}

View File

@@ -14,5 +14,9 @@ public class ReCloseStoreApplyRequest {
@ApiModelProperty("闭店信息ID")
private Long closeStoreId;
@ApiModelProperty(value = "用户id", hidden = true)
private String userId;
@ApiModelProperty(value = "用户名称",hidden = true)
private String userName;
}

View File

@@ -31,13 +31,6 @@ public interface CloseStoreService {
*/
Boolean reApplyCloseStore(ReCloseStoreApplyRequest request);
/**
* 第三方申请闭店
* @param request 三方闭店申请Request
* @return 是否成功
*/
Boolean thirdApplyCloseStore(ThirdCloseStoreApplyRequest request);
/**
* 审批通过
* @param request 闭店申请审批Request

View File

@@ -98,13 +98,8 @@ public class CloseStoreServiceImpl implements CloseStoreService {
}
String userId, userName;
if (CloseTypeEnum.INITIATE.getCloseType().equals(request.getCloseType())) {
// 主动发起的申请人为加盟商从C端登录用户信息中获取
PartnerUserInfoVO user = PartnerUserHolder.getUser();
userId = user.getPartnerId();
userName = user.getUsername();
if (StringUtils.isBlank(userName)) {
userName = user.getMobile();
}
userId = request.getUserId();
userName = request.getUserName();
} else {
userId = AIEnum.AI_ID.getCode();
userName = AIEnum.AI_NAME.getCode();
@@ -139,21 +134,12 @@ public class CloseStoreServiceImpl implements CloseStoreService {
.reasonDescription(closeStoreInfoDO.getReasonDescription())
.closeType(closeStoreInfoDO.getCloseType())
.storeId(closeStoreInfoDO.getStoreId())
.userId(request.getUserId())
.userName(request.getUserName())
.build();
return applyCloseStore(applyRequest);
}
@Override
@Transactional
public Boolean thirdApplyCloseStore(ThirdCloseStoreApplyRequest request) {
StoreDO storeDO = storeDao.getByStoreNum(request.getStoreNum());
if (Objects.isNull(storeDO)) {
throw new ServiceException(ErrorCodeEnum.STORE_NOT_EXIST);
}
CloseStoreApplyRequest closeRequest = request.convert(storeDO.getStoreId());
return applyCloseStore(closeRequest);
}
@Override
@Transactional
public Boolean auditPass(CloseStoreAuditRequest request) {

View File

@@ -42,9 +42,13 @@ public class PrivateSphereQrServiceImpl implements PrivateSphereQrService {
*/
private static final int QR_CODE_SIZE = 1280;
/**
* sn缓存时间
* sn和门店绑定关系缓存时间
*/
private static final int SN_CACHE_TIME = 86400 * 7;
private static final int SN_CACHE_TIME = 86400 * 30;
/**
* sn二维码缓存时间
*/
private static final int SN_RQ_LIMIT_TIME = 86400;
/**
* IP限制时间1小时
*/
@@ -66,7 +70,7 @@ public class PrivateSphereQrServiceImpl implements PrivateSphereQrService {
try {
String qrCodeUrl = generateAndUploadQrCode(request.getSn());
// 存储到Redis
redisUtilPool.hashSet(RedisConstant.PRIVATE_SN_QR_CODE, request.getSn(), qrCodeUrl, SN_CACHE_TIME);
redisUtilPool.hashSet(RedisConstant.PRIVATE_SN_QR_CODE, request.getSn(), qrCodeUrl, SN_RQ_LIMIT_TIME);
log.info("生成二维码并上传成功sn: {}, url: {}", request.getSn(), qrCodeUrl);
return new PrivateSphereVO(qrCodeUrl);
} catch (Exception e) {
@@ -91,7 +95,12 @@ public class PrivateSphereQrServiceImpl implements PrivateSphereQrService {
@Override
public Boolean bindStoreSn(PrivateSphereBindRequest request) {
String oldSn = redisUtilPool.hashGet(RedisConstant.PRIVATE_STORE_SN_REVERSE, request.getStoreId());
if (StringUtils.isNotBlank(oldSn)) {
redisUtilPool.hashDel(RedisConstant.PRIVATE_STORE_SN_BIND, oldSn);
}
redisUtilPool.hashSet(RedisConstant.PRIVATE_STORE_SN_BIND, request.getSn(), request.getStoreId(), SN_CACHE_TIME);
redisUtilPool.hashSet(RedisConstant.PRIVATE_STORE_SN_REVERSE, request.getStoreId(), request.getSn(), SN_CACHE_TIME);
return true;
}

View File

@@ -1,11 +1,16 @@
package com.cool.store.controller.webb;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.enums.close.CloseTypeEnum;
import com.cool.store.request.close.store.CloseStoreApplyRequest;
import com.cool.store.request.close.store.CloseStoreCancelRequest;
import com.cool.store.request.close.store.CloseStoreQueryRequest;
import com.cool.store.request.close.store.CloseStoreAuditRequest;
import com.cool.store.response.AuditInfoResponse;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.close.CloseStoreService;
import com.cool.store.utils.poi.StringUtils;
import com.cool.store.vo.close.store.*;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
@@ -105,4 +110,14 @@ public class CloseStoreController {
public ResponseResult<Boolean> suspendApply(@RequestBody @Valid CloseStoreCancelRequest request) {
return ResponseResult.success(closeStoreService.suspendApply(request.getCloseStoreId()));
}
@ApiOperation("申请闭店")
@PostMapping("/apply")
public ResponseResult<Boolean> applyCloseStore(@RequestBody @Valid CloseStoreApplyRequest request) {
request.setCloseType(CloseTypeEnum.INITIATE.getCloseType());
LoginUserInfo user = CurrentUserHolder.getUser();
request.setUserId(user.getUserId());
request.setUserName(StringUtils.isNotBlank(user.getName()) ? user.getName() : user.getMobile());
return ResponseResult.success(closeStoreService.applyCloseStore(request));
}
}

View File

@@ -3,6 +3,8 @@ package com.cool.store.controller.webb;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.annotation.Debounce;
import com.cool.store.constants.CommonConstants;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.dao.*;
import com.cool.store.dao.closeup.CloseUpApplyFormDAO;
import com.cool.store.dao.closeup.CloseUpPlatformDAO;
@@ -22,6 +24,7 @@ import com.cool.store.entity.closeup.CloseUpPlatformDO;
import com.cool.store.entity.bonus.BonusDistributionRuleDO;
import com.cool.store.entity.fees.WalletPayInfoDO;
import com.cool.store.enums.*;
import com.cool.store.enums.close.CloseTypeEnum;
import com.cool.store.enums.point.ShopSubStageStatusEnum;
import com.cool.store.enums.wechat.WechatTemplateEnum;
import com.cool.store.handler.WeChatHandler;
@@ -254,6 +257,10 @@ public class PCTestController {
@PostMapping("/applyCloseStore")
public ResponseResult<Boolean> applyCloseStore(@RequestBody @Valid CloseStoreApplyRequest request) {
request.setCloseType(CloseTypeEnum.INITIATE.getCloseType());
LoginUserInfo user = CurrentUserHolder.getUser();
request.setUserId(user.getUserId());
request.setUserName(StringUtils.isNotBlank(user.getName()) ? user.getName() : user.getMobile());
return ResponseResult.success(closeStoreService.applyCloseStore(request));
}

View File

@@ -1,5 +1,6 @@
package com.cool.store.controller.webc;
import com.cool.store.context.PartnerUserHolder;
import com.cool.store.enums.close.CloseTypeEnum;
import com.cool.store.request.close.store.CloseStoreApplyRequest;
import com.cool.store.request.close.store.CloseStoreCancelRequest;
@@ -8,12 +9,14 @@ import com.cool.store.request.close.store.ReCloseStoreApplyRequest;
import com.cool.store.response.AuditInfoResponse;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.close.CloseStoreService;
import com.cool.store.vo.PartnerUserInfoVO;
import com.cool.store.vo.close.store.*;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -41,12 +44,18 @@ public class MiniCloseStoreController {
@PostMapping("/apply")
public ResponseResult<Boolean> applyCloseStore(@RequestBody @Valid CloseStoreApplyRequest request) {
request.setCloseType(CloseTypeEnum.INITIATE.getCloseType());
PartnerUserInfoVO user = PartnerUserHolder.getUser();
request.setUserId(user.getPartnerId());
request.setUserName(StringUtils.isNotBlank(user.getUsername()) ? user.getUsername() : user.getMobile());
return ResponseResult.success(closeStoreService.applyCloseStore(request));
}
@ApiOperation("拒绝后重新提交申请闭店")
@PostMapping("/reapply")
public ResponseResult<Boolean> reApplyCloseStore(@RequestBody @Valid ReCloseStoreApplyRequest request) {
PartnerUserInfoVO user = PartnerUserHolder.getUser();
request.setUserId(user.getPartnerId());
request.setUserName(StringUtils.isNotBlank(user.getUsername()) ? user.getUsername() : user.getMobile());
return ResponseResult.success(closeStoreService.reApplyCloseStore(request));
}