Merge branch 'master' into cc_20251010_wxnotice
# Conflicts: # coolstore-partner-service/src/main/java/com/cool/store/service/impl/MessageTemplateServiceImpl.java
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
package com.cool.store.service;
|
||||
|
||||
import com.cool.store.userholder.CurrentUser;
|
||||
import com.cool.store.userholder.RefreshUser;
|
||||
|
||||
/**
|
||||
* @Author suzhuhong
|
||||
* @Date 2025/5/29 16:34
|
||||
@@ -13,7 +16,17 @@ public interface EnterpriseService {
|
||||
* @param mobile
|
||||
* @return
|
||||
*/
|
||||
String getAccessToken(String mobile);
|
||||
CurrentUser getLoginInfo(String mobile);
|
||||
|
||||
/**
|
||||
* 获取并缓存refreshToken
|
||||
*/
|
||||
RefreshUser getRefreshUser(String userId, String mobile);
|
||||
|
||||
/**
|
||||
* 校验用户新建分店/新建线索 可以选择加盟类型类型
|
||||
* @param userId
|
||||
* @param joinMode
|
||||
*/
|
||||
void checkUser(String userId,Integer joinMode);
|
||||
}
|
||||
|
||||
@@ -91,15 +91,15 @@ public interface MessageTemplateService {
|
||||
*/
|
||||
Boolean revokeById(Long id, LoginUserInfo user);
|
||||
|
||||
List<ModuleAndMatterVO> getModuleList(String storeId,PartnerUserInfoVO userInfoVO);
|
||||
List<ModuleAndMatterVO> getModuleList(String storeId,String mobile);
|
||||
|
||||
PageInfo<StoreMessageVO> getStorePendingList(StoreMessagePendingRequest request);
|
||||
|
||||
MessageDetailVO getMessageDetail(Long id);
|
||||
|
||||
Boolean readMessage(Long id, PartnerUserInfoVO userInfoVO);
|
||||
Boolean readMessage(Long id, String mobile);
|
||||
|
||||
Boolean handleMessage(Long id, PartnerUserInfoVO userInfoVO);
|
||||
Boolean handleMessage(Long id, String userName,String mobile);
|
||||
|
||||
|
||||
ApiResponse<Boolean> thirdHandleMessage(ThirdHandleMessageRequest request);
|
||||
|
||||
@@ -48,6 +48,12 @@ public interface PreparationService {
|
||||
* @param shopId
|
||||
*/
|
||||
void sysStoreCompleted(Long shopId);
|
||||
|
||||
/**
|
||||
* 营业执照和建店资料收集阶段完成后推进POS和营帐通开通
|
||||
* @param shopId 店铺id
|
||||
*/
|
||||
void businessLicenseAndBuildStoreCompleted(Long shopId);
|
||||
/**
|
||||
* 证照办理+建店资料 都完成 初始化平台建店数据
|
||||
* @param shopId
|
||||
@@ -89,6 +95,7 @@ public interface PreparationService {
|
||||
/**
|
||||
* POS 建店昨天完成
|
||||
* 选址与建店资料完成(加盟合同完成)
|
||||
* v20251024 选址与建店资料完成与营业执照完成
|
||||
* @param shopId
|
||||
* @return
|
||||
*/
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package com.cool.store.service;
|
||||
|
||||
import com.cool.store.request.bigdata.LatestOrderDateRequest;
|
||||
import com.cool.store.request.bigdata.ProfitDataRequest;
|
||||
import com.cool.store.request.oppty.CityRequest;
|
||||
import com.cool.store.response.bigdata.ActDataResponse;
|
||||
import com.cool.store.response.bigdata.LatestOrderDateResponse;
|
||||
import com.cool.store.response.bigdata.ProfitDataResponse;
|
||||
import com.cool.store.response.bigdata.ProfitRateResponse;
|
||||
import com.cool.store.response.oppty.CityResponse;
|
||||
@@ -53,5 +55,11 @@ public interface ThirdBigDataService {
|
||||
*/
|
||||
ActDataResponse getActData(ProfitDataRequest requestBody);
|
||||
|
||||
/**
|
||||
* 获取门店最新订货日期
|
||||
* @param requestBody 最新订货日期Request
|
||||
* @return 最新订货日期Response列表
|
||||
*/
|
||||
List<LatestOrderDateResponse> getLatestOrderDate(LatestOrderDateRequest requestBody);
|
||||
|
||||
}
|
||||
|
||||
@@ -138,9 +138,11 @@ public class ApplyLicenseServiceImpl implements ApplyLicenseService {
|
||||
ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_3);
|
||||
if (Constants.ONE_INTEGER.equals(request.getSubmitStatus()) && shopSubStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_30.getShopSubStageStatus())) {
|
||||
shopStageInfoDAO.updateShopStageAndAuditInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_33, null);
|
||||
preparationService.businessLicenseAndBuildStoreCompleted(request.getShopId());
|
||||
preparationService.licenseCompleted(request.getShopId());
|
||||
preparationService.updateShopStatus(request.getShopId());
|
||||
preparationService.buildStoreAndDecorationComplete(request.getShopId());
|
||||
preparationService.selectSiteAndBuildStoreComplete(request.getShopId());
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
@@ -73,6 +73,8 @@ public class BuildInformationServiceImpl implements BuildInformationService {
|
||||
private OrderSysInfoDAO orderSysInfoDAO;
|
||||
@Autowired
|
||||
private BigRegionDAO bigRegionDAO;
|
||||
@Resource
|
||||
private AcceptanceInfoDAO acceptanceInfoDAO;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -252,7 +254,14 @@ public class BuildInformationServiceImpl implements BuildInformationService {
|
||||
if (StringUtils.isBlank(response.getAddresseeAddress())) {
|
||||
response.setAddresseeAddress(shopInfo.getDetailAddress());
|
||||
}
|
||||
|
||||
// 不存在的情况下从装修验收中获取
|
||||
if (StringUtils.isBlank(response.getDoorPhoto()) || StringUtils.isBlank(response.getInStorePhoto())) {
|
||||
AcceptanceInfoDO acceptanceInfoDO = acceptanceInfoDAO.selectByShopId(shopId);
|
||||
if (Objects.nonNull(acceptanceInfoDO)) {
|
||||
response.setDoorPhoto(StringUtils.isNotBlank(response.getDoorPhoto()) ? response.getDoorPhoto() : acceptanceInfoDO.getShopDoorwayPhoto());
|
||||
response.setInStorePhoto(StringUtils.isNotBlank(response.getInStorePhoto()) ? response.getInStorePhoto() : acceptanceInfoDO.getShopInteriorPhoto());
|
||||
}
|
||||
}
|
||||
return response;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.cool.store.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.dao.*;
|
||||
import com.cool.store.entity.*;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
@@ -10,14 +12,12 @@ import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.request.*;
|
||||
import com.cool.store.service.DecorationDesignInfoService;
|
||||
import com.cool.store.utils.poi.StringUtils;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -40,6 +40,8 @@ public class DecorationDesignInfoServiceImpl implements DecorationDesignInfoServ
|
||||
private ShopStageInfoDAO shopStageInfoDAO;
|
||||
@Resource
|
||||
private LineInfoDAO lineInfoDAO;
|
||||
@Resource
|
||||
private BuildInformationDAO buildInformationDAO;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@@ -277,8 +279,28 @@ public class DecorationDesignInfoServiceImpl implements DecorationDesignInfoServ
|
||||
if (shopSubStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_122.getShopSubStageStatus())) {
|
||||
shopStageInfoDAO.updateShopStageInfo(shopInfoDO.getId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_123);
|
||||
}
|
||||
// 覆盖建店资料中的门头照和内景照
|
||||
BuildInformationDO buildInformation = BuildInformationDO.builder().shopId(request.getShopId()).doorPhoto(buildJson(request.getShopDoorwayPhotoUrl()))
|
||||
.inStorePhoto(buildJson(request.getShopInteriorPhotoUrl())).build();
|
||||
buildInformationDAO.updateByShopIdSelective(buildInformation);
|
||||
return true;
|
||||
}
|
||||
|
||||
public String buildJson(List<String> urls) {
|
||||
if (CollectionUtils.isEmpty(urls)) {
|
||||
return null;
|
||||
}
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
for (String url : urls) {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("url", url);
|
||||
jsonObject.put("type", extractImageSuffix(url));
|
||||
jsonArray.add(jsonObject);
|
||||
}
|
||||
return jsonArray.toJSONString();
|
||||
}
|
||||
|
||||
public String extractImageSuffix(String url) {
|
||||
return url.substring(url.lastIndexOf(".") + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,23 @@
|
||||
package com.cool.store.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.cool.store.constants.CommonConstants;
|
||||
import com.cool.store.constants.RedisConstant;
|
||||
import com.cool.store.dao.EnterpriseUserDAO;
|
||||
import com.cool.store.entity.EnterpriseUserDO;
|
||||
import com.cool.store.entity.SysRoleDO;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.enums.JoinModeEnum;
|
||||
import com.cool.store.enums.Role;
|
||||
import com.cool.store.enums.UserStatusEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.mapper.SysRoleMapper;
|
||||
import com.cool.store.service.EnterpriseService;
|
||||
import com.cool.store.userholder.CurrentUser;
|
||||
import com.cool.store.userholder.RefreshUser;
|
||||
import com.cool.store.utils.RedisUtilPool;
|
||||
import com.cool.store.utils.poi.DateUtils;
|
||||
import com.cool.store.utils.poi.constant.Constants;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.shiro.crypto.RandomNumberGenerator;
|
||||
@@ -48,7 +52,7 @@ public class EnterpriseServiceImpl implements EnterpriseService {
|
||||
private String eid;
|
||||
|
||||
@Override
|
||||
public String getAccessToken(String mobile) {
|
||||
public CurrentUser getLoginInfo(String mobile) {
|
||||
CurrentUser currentUser = new CurrentUser();
|
||||
EnterpriseUserDO enterpriseUser = enterpriseUserDAO.selectByMobile(mobile);
|
||||
if (Objects.isNull(enterpriseUser)){
|
||||
@@ -107,8 +111,36 @@ public class EnterpriseServiceImpl implements EnterpriseService {
|
||||
currentUser.setAppType("qw_self_dkf");
|
||||
currentUser.setUnionid(enterpriseUser.getUnionid());
|
||||
currentUser.setUserType(enterpriseUser.getUserType());
|
||||
redisUtilPool.setString(RedisConstant.ACCESS_TOKEN_PREFIX + currentUser.getAccessToken(), JSON.toJSONString(currentUser), 24 * 60 * 60);
|
||||
return currentUser.getAccessToken();
|
||||
redisUtilPool.setString(RedisConstant.ACCESS_TOKEN_PREFIX + currentUser.getAccessToken(), JSON.toJSONString(currentUser), CommonConstants.ACTION_TOKEN_EXPIRE);
|
||||
return currentUser;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RefreshUser getRefreshUser(String userId, String mobile) {
|
||||
if (StringUtils.isBlank(mobile)) {
|
||||
EnterpriseUserDO userInfo = enterpriseUserDAO.getUserInfoById(userId);
|
||||
mobile = userInfo.getMobile();
|
||||
}
|
||||
String refreshToken = getToken();
|
||||
RefreshUser refreshUser = new RefreshUser(userId, refreshToken, mobile);
|
||||
redisUtilPool.setString(RedisConstant.REFRESH_TOKEN_PREFIX + refreshToken, JSON.toJSONString(refreshUser), CommonConstants.REFRESH_TOKEN_EXPIRE);
|
||||
return refreshUser;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkUser(String userId,Integer joinMode) {
|
||||
EnterpriseUserDO userInfo = enterpriseUserDAO.getUserInfoById(userId);
|
||||
if (userInfo !=null){
|
||||
//校验当前人员是否是加盟部 581
|
||||
String departments = userInfo.getDepartments();
|
||||
//如果departments包含/581/ 加盟部
|
||||
if (com.cool.store.utils.poi.StringUtils.isNotBlank(departments) && departments.contains("/581/")) {
|
||||
//加盟部 FRANCHISE_COMPANIES
|
||||
if (!JoinModeEnum.isFranchise(joinMode)){
|
||||
throw new ServiceException(ErrorCodeEnum.JOIN_MODE_NOT_ALLOW_OPERATE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
@@ -88,6 +88,8 @@ public class LineServiceImpl implements LineService {
|
||||
private RegionQrcodeConfigDao regionQrcodeConfigDao;
|
||||
@Resource
|
||||
QualificationsInfoDAO qualificationsInfoDAO;
|
||||
@Resource
|
||||
EnterpriseService enterpriseService;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -514,6 +516,7 @@ public class LineServiceImpl implements LineService {
|
||||
public Boolean addLine(AddLineRequest addLineRequest, LoginUserInfo userInfo) {
|
||||
//必填参数
|
||||
log.info("addLine:{}", JSONObject.toJSONString(addLineRequest));
|
||||
enterpriseService.checkUser(userInfo.getUserId(), addLineRequest.getJoinMode());
|
||||
if (!StringUtil.isNoneBlank(addLineRequest.getMobile(), addLineRequest.getUserName())) {
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.cool.store.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollStreamUtil;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.dao.MessageTemplateDAO;
|
||||
import com.cool.store.entity.MessageTemplateDO;
|
||||
import com.cool.store.entity.StoreMessageDO;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.vo.notice.StoreMessageVO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.messaging.MessagingException;
|
||||
import org.springframework.messaging.simp.SimpMessagingTemplate;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 消息下发 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author wangff
|
||||
* @since 2025/9/5
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class MessageIssueService {
|
||||
private final MessageTemplateDAO messageTemplateDAO;
|
||||
private final SimpMessagingTemplate simpMessagingTemplate;
|
||||
|
||||
/**
|
||||
* 下发即时通知消息
|
||||
*
|
||||
* @param list 门店消息列表
|
||||
*/
|
||||
@Async("generalThreadPool")
|
||||
public void issueMessage(List<StoreMessageDO> list) {
|
||||
if (CollectionUtils.isEmpty(list)) return;
|
||||
log.info("下发即时通知, messageList:{}", JSONObject.toJSONString(list));
|
||||
try {
|
||||
Set<Long> messageTemplateIds = CollStreamUtil.toSet(list, StoreMessageDO::getMessageTemplateId);
|
||||
List<MessageTemplateDO> messageTemplateList = messageTemplateDAO.getByIds(new ArrayList<>(messageTemplateIds));
|
||||
Map<Long, MessageTemplateDO> messageTemplateMap = CollStreamUtil.toMap(messageTemplateList, MessageTemplateDO::getId, v -> v);
|
||||
|
||||
for (StoreMessageDO storeMessageDO : list) {
|
||||
if (StringUtils.isNotBlank(storeMessageDO.getOperatorList())) {
|
||||
String[] userIds = storeMessageDO.getOperatorList().split(",");
|
||||
if (ArrayUtil.isNotEmpty(userIds)) {
|
||||
MessageTemplateDO messageTemplateDO = messageTemplateMap.get(storeMessageDO.getMessageTemplateId());
|
||||
if (Objects.isNull(messageTemplateDO)) {
|
||||
throw new ServiceException(ErrorCodeEnum.MESSAGE_NOT_EXIST);
|
||||
}
|
||||
StoreMessageVO storeMessageVO = BeanUtil.toBean(storeMessageDO, StoreMessageVO.class);
|
||||
BeanUtil.copyProperties(messageTemplateDO, storeMessageVO, "id");
|
||||
String message = JSONObject.toJSONString(storeMessageVO);
|
||||
for (String userId : userIds) {
|
||||
try {
|
||||
simpMessagingTemplate.convertAndSend("/queue/message/" + userId, message);
|
||||
} catch (MessagingException e) {
|
||||
log.info("即时通知下发异常, userId:{}, error:{}", userId, e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.info("即时通知下发异常", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,6 @@ package com.cool.store.service.impl;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.context.LoginUserInfo;
|
||||
import com.cool.store.context.PartnerUserHolder;
|
||||
import com.cool.store.dao.*;
|
||||
import com.cool.store.dto.notice.CommonDTO;
|
||||
import com.cool.store.dto.notice.MessageTemplateCountDTO;
|
||||
@@ -36,7 +35,6 @@ import com.google.gson.JsonObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.core.task.TaskExecutor;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
@@ -83,6 +81,8 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
|
||||
TaskExecutor noticeThreadPool;
|
||||
@Resource
|
||||
HyPartnerUserInfoDAO hyPartnerUserInfoDAO;
|
||||
@Resource
|
||||
MessageIssueService messageIssueService;
|
||||
|
||||
|
||||
|
||||
@@ -188,6 +188,7 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
|
||||
List<StoreAreaDTO> storeAreaDTOS = getStoreRange(request.getStoreInfoList());
|
||||
List<String> storeIds = storeAreaDTOS.stream().map(StoreAreaDTO::getStoreId).collect(Collectors.toList());
|
||||
Map<String, List<String>> authUser = getAuthUser(request.getUserInfoList(), storeIds);
|
||||
List<StoreMessageDO> realtimeMessageList = new ArrayList<>();
|
||||
list.stream().forEach(x -> {
|
||||
List<StoreMessageDO> result = new ArrayList<>();
|
||||
storeAreaDTOS.forEach(y->{
|
||||
@@ -209,6 +210,9 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
|
||||
result.add(storeMessageDO);
|
||||
});
|
||||
storeMessageDAO.batchInsert(result);
|
||||
if (MatterTypeEnum.REALTIME.getCode().equals(request.getMatterType())) {
|
||||
realtimeMessageList.addAll(result);
|
||||
}
|
||||
});
|
||||
|
||||
//存在第一个成功 第二个失败 会有问题 todo
|
||||
@@ -245,6 +249,8 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
|
||||
openIdList.forEach(x->{
|
||||
wechatTemplateService.sendMiniAppTemplate(x, WechatTemplateEnum.NEW_QUESTION_NOTICE,data,"pages/notification/index");
|
||||
});
|
||||
// 即时消息下发
|
||||
messageIssueService.issueMessage(realtimeMessageList);
|
||||
} catch (Exception e) {
|
||||
log.info("发布流程异常 e:{}",e.getMessage());
|
||||
} finally {
|
||||
@@ -395,6 +401,7 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
|
||||
batchPublishRequest.setIds(Arrays.asList(messageTemplateDO.getId()));
|
||||
batchPublishRequest.setStoreInfoList(JSONObject.parseArray(storeInfo, CommonDTO.class));
|
||||
batchPublishRequest.setUserInfoList(JSONObject.parseArray(userInfo, CommonDTO.class));
|
||||
batchPublishRequest.setMatterType(matterConfig.getMatterType());
|
||||
try {
|
||||
batchPublishMessageTemplate(batchPublishRequest,"");
|
||||
} catch (ServiceException e) {
|
||||
@@ -495,9 +502,9 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ModuleAndMatterVO> getModuleList(String storeId,PartnerUserInfoVO userInfoVO) {
|
||||
public List<ModuleAndMatterVO> getModuleList(String storeId,String mobile) {
|
||||
List<ModuleAndMatterVO> moduleAndMatterList = ModuleAndMatterVO.getModuleAndMatterList();
|
||||
EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(userInfoVO.getMobile());
|
||||
EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(mobile);
|
||||
if (enterpriseUserDO == null){
|
||||
enterpriseUserDO = new EnterpriseUserDO();
|
||||
}
|
||||
@@ -540,7 +547,7 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean readMessage(Long id, PartnerUserInfoVO userInfoVO) {
|
||||
public Boolean readMessage(Long id, String mobile) {
|
||||
StoreMessageDO message = storeMessageDAO.getById(id);
|
||||
if (ProcessStatusEnum.PROCESSED.getCode().equals(message.getProcessStatus())){
|
||||
log.info("当前消息已读已处理:{}",JSONObject.toJSONString( message));
|
||||
@@ -552,7 +559,7 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
|
||||
if (ProcessTypeEnum.READ.getCode().equals(template.getProcessType())){
|
||||
message.setProcessStatus(ProcessStatusEnum.PROCESSED.getCode());
|
||||
message.setProcessTime(new Date());
|
||||
EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(userInfoVO.getMobile());
|
||||
EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(mobile);
|
||||
if (enterpriseUserDO != null){
|
||||
message.setActualOperatorId(enterpriseUserDO.getId());
|
||||
message.setActualOperatorName(enterpriseUserDO.getName());
|
||||
@@ -563,15 +570,15 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean handleMessage(Long id, PartnerUserInfoVO userInfoVO) {
|
||||
log.info("handleMessage request:{},处理人:{}", JSONObject.toJSONString(id), userInfoVO.getUsername());
|
||||
public Boolean handleMessage(Long id, String userName,String mobile) {
|
||||
log.info("handleMessage request:{},处理人:{}", JSONObject.toJSONString(id), userName);
|
||||
StoreMessageDO message = storeMessageDAO.getById(id);
|
||||
if (message==null){
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
message.setProcessStatus(ProcessStatusEnum.PROCESSED.getCode());
|
||||
message.setProcessTime(new Date());
|
||||
EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(userInfoVO.getMobile());
|
||||
EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(mobile);
|
||||
if (enterpriseUserDO != null){
|
||||
message.setActualOperatorId(enterpriseUserDO.getId());
|
||||
message.setActualOperatorName(enterpriseUserDO.getName());
|
||||
|
||||
@@ -293,6 +293,7 @@ public class OrderSysInfoServiceImpl implements OrderSysInfoService {
|
||||
//初始化数据
|
||||
preparationService.licenseCompleted(shopId);
|
||||
preparationService.sysStoreCompleted(shopId);
|
||||
preparationService.businessLicenseAndBuildStoreCompleted(shopId);
|
||||
preparationService.buildStoreAndDecorationComplete(shopId);
|
||||
preparationService.selectSiteAndBuildStoreComplete(shopId);
|
||||
preparationService.buildStoreComplete(shopId);
|
||||
|
||||
@@ -220,9 +220,25 @@ public class PreparationServiceImpl implements PreparationService {
|
||||
equals(shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_15.getShopSubStage()).getShopSubStageStatus());
|
||||
if (flag3) {
|
||||
List<ShopSubStageStatusEnum> list = new ArrayList<>();
|
||||
list.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_160);
|
||||
list.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_170);
|
||||
list.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_230);
|
||||
shopStageInfoDAO.batchUpdateShopStageStatus(shopId, list);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void businessLicenseAndBuildStoreCompleted(Long shopId) {
|
||||
List<ShopStageInfoDO> shopStageInfo = shopStageInfoDAO.getShopStageInfo(shopId, null);
|
||||
if (CollectionUtils.isNotEmpty(shopStageInfo)) {
|
||||
Map<Integer, ShopStageInfoDO> shopStageInfoDOMap = shopStageInfo.stream().collect(Collectors.toMap(ShopStageInfoDO::getShopSubStage, data -> data));
|
||||
boolean flag1 = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_156.getShopSubStageStatus().
|
||||
equals(shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_15.getShopSubStage()).getShopSubStageStatus());
|
||||
boolean flag2 = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_33.getShopSubStageStatus().
|
||||
equals(shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_3.getShopSubStage()).getShopSubStageStatus());
|
||||
if (flag1 && flag2) {
|
||||
List<ShopSubStageStatusEnum> list = new ArrayList<>();
|
||||
list.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_160);
|
||||
list.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_240);
|
||||
shopStageInfoDAO.batchUpdateShopStageStatus(shopId, list);
|
||||
}
|
||||
@@ -345,10 +361,12 @@ public class PreparationServiceImpl implements PreparationService {
|
||||
equals(shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_1.getShopSubStage()).getShopSubStageStatus());
|
||||
Boolean flag3 = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_156.getShopSubStageStatus().
|
||||
equals(shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_15.getShopSubStage()).getShopSubStageStatus());
|
||||
Boolean flag4 = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_33.getShopSubStageStatus().
|
||||
equals(shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_3.getShopSubStage()).getShopSubStageStatus());
|
||||
|
||||
log.info("selectSiteAndBuildStoreComplete flag2->{} flag3->{}",flag2,flag3);
|
||||
log.info("selectSiteAndBuildStoreComplete flag2->{} flag3->{} flag4->{}",flag2,flag3, flag4);
|
||||
//都完成了 状态修改
|
||||
if (flag2 && flag3) {
|
||||
if (flag2 && flag3 && flag4) {
|
||||
shopAccountDAO.updateStatusByShopIdAndSystemName(shopId, Arrays.asList(ShopAccountEnum.HUOMA.getSystemName()), OpenStatusEnum.OPENSTATUSENUM_2.getCode(),null,null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,6 +110,8 @@ public class ShopServiceImpl implements ShopService {
|
||||
DecorationDesignInfoDAO decorationDesignInfoDAO;
|
||||
@Resource
|
||||
StoreService storeService;
|
||||
@Resource
|
||||
EnterpriseService enterpriseService;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -330,6 +332,7 @@ public class ShopServiceImpl implements ShopService {
|
||||
if (StringUtils.isBlank(request.getInvestmentManagerUserId())) {
|
||||
request.setInvestmentManagerUserId(userId);
|
||||
}
|
||||
enterpriseService.checkUser(userId, request.getJoinMode());
|
||||
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId());
|
||||
if (lineInfo.getWorkflowSubStageStatus() < WorkflowSubStageStatusEnum.PAY_DEPOSIT_45.getCode()) {
|
||||
throw new ServiceException(ErrorCodeEnum.LINE_STATUS_NOT_ALLOW_OPERATE);
|
||||
|
||||
@@ -273,6 +273,18 @@ public class SyncDataServiceImpl implements SyncDataService {
|
||||
} catch (Exception e) {
|
||||
log.info("getUrl error:{},JSON:{}", e.getMessage(), json);
|
||||
}
|
||||
return getUrlListByComma(json);
|
||||
}
|
||||
|
||||
private static List<String> getUrlListByComma(String str) {
|
||||
if (StringUtils.isBlank(str)) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return Arrays.asList(str.split(","));
|
||||
} catch (Exception e) {
|
||||
log.info("getUrlListByComma error:{},str:{}", e.getMessage(), str);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -289,43 +301,31 @@ public class SyncDataServiceImpl implements SyncDataService {
|
||||
if (String.valueOf(FranchiseBrandEnum.ZXJP.getCode()).equals(shopInfoDO.getFranchiseBrand())) {
|
||||
//M10001
|
||||
if (shopCode.matches("M\\d*")) {
|
||||
return partnershipSignatorySecondIsNull
|
||||
? "MX" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + ")"
|
||||
: "MX" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + "/"+signFranchiseDO.getPartnershipSignatorySecond()+")";
|
||||
return "MX" + shopInfoDO.getShopName();
|
||||
}
|
||||
//FS10001
|
||||
if (shopCode.matches("FS\\d*")) {
|
||||
return partnershipSignatorySecondIsNull
|
||||
? "FS" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + ")"
|
||||
: "FS" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + "/"+signFranchiseDO.getPartnershipSignatorySecond()+")";
|
||||
return "FS" + shopInfoDO.getShopName();
|
||||
}
|
||||
// MS10001
|
||||
if (shopCode.matches("MS\\d*")) {
|
||||
return partnershipSignatorySecondIsNull
|
||||
? "MS" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + ")"
|
||||
: "MS" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + "/"+signFranchiseDO.getPartnershipSignatorySecond()+")";
|
||||
return "MS" + shopInfoDO.getShopName();
|
||||
}
|
||||
// S10001
|
||||
if (shopCode.matches("S\\d*")) {
|
||||
return partnershipSignatorySecondIsNull
|
||||
? "S" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + ")"
|
||||
: "S" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + "/"+signFranchiseDO.getPartnershipSignatorySecond()+")";
|
||||
return "S" + shopInfoDO.getShopName();
|
||||
}
|
||||
// ZX0001
|
||||
if (shopCode.matches("ZX\\d*")) {
|
||||
return "ZX" + shopInfoDO.getShopName();
|
||||
}
|
||||
if(shopCode.matches("HL\\d*")){
|
||||
return partnershipSignatorySecondIsNull
|
||||
? "HL" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + ")"
|
||||
: "HL" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + "/"+signFranchiseDO.getPartnershipSignatorySecond()+")";
|
||||
return "HL" + shopInfoDO.getShopName();
|
||||
}
|
||||
}
|
||||
if (String.valueOf(FranchiseBrandEnum.MZG.getCode()).equals(shopInfoDO.getFranchiseBrand())) {
|
||||
if (shopCode.matches("MZGM\\d*")) {
|
||||
return partnershipSignatorySecondIsNull
|
||||
? "MZGM" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + ")"
|
||||
: "MZGM" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + "/"+signFranchiseDO.getPartnershipSignatorySecond()+")";
|
||||
return "MZGM" + shopInfoDO.getShopName();
|
||||
}
|
||||
if (shopCode.matches("MZGS\\d*")) {
|
||||
return FranchiseBrandEnum.MZG.getDesc() + shopInfoDO.getShopName();
|
||||
@@ -333,19 +333,13 @@ public class SyncDataServiceImpl implements SyncDataService {
|
||||
}
|
||||
if (String.valueOf(FranchiseBrandEnum.ZJS.getCode()).equals(shopInfoDO.getFranchiseBrand())) {
|
||||
if (shopCode.matches("LX\\d*")) {
|
||||
return partnershipSignatorySecondIsNull
|
||||
? "LX" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + ")"
|
||||
: "LX" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + "/"+signFranchiseDO.getPartnershipSignatorySecond()+")";
|
||||
return "LX" + shopInfoDO.getShopName();
|
||||
}
|
||||
if (shopCode.matches("X\\d*")) {
|
||||
return partnershipSignatorySecondIsNull
|
||||
? "X" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + ")"
|
||||
: "X" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + "/"+signFranchiseDO.getPartnershipSignatorySecond()+")";
|
||||
return "X" + shopInfoDO.getShopName();
|
||||
}
|
||||
if (shopCode.matches("Q\\d*")) {
|
||||
return partnershipSignatorySecondIsNull
|
||||
? "Q" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + ")"
|
||||
: "Q" + shopInfoDO.getShopName() + "(" + signFranchiseDO.getPartnershipSignatoryFirst() + "/"+signFranchiseDO.getPartnershipSignatorySecond()+")";
|
||||
return "Q" + shopInfoDO.getShopName();
|
||||
}
|
||||
if (shopCode.matches("Z\\d*")) {
|
||||
return FranchiseBrandEnum.ZJS.getDesc() + shopInfoDO.getShopName();
|
||||
|
||||
@@ -160,6 +160,9 @@ public class SyncMainSysServerImpl implements SyncMainSysServer {
|
||||
PointDetailInfoDO pointDetail = pointDetailDAO.getPointDetailInfoByPointId(shopInfo.getPointId());
|
||||
if (info != null){
|
||||
storeMasterDTO.setArea(info.getProvince()+info.getCity()+info.getDistrict());
|
||||
storeMasterDTO.setProvince(info.getProvince());
|
||||
storeMasterDTO.setCity(info.getCity());
|
||||
storeMasterDTO.setDistrict(info.getDistrict());
|
||||
storeMasterDTO.setTown(info.getTownship());
|
||||
storeMasterDTO.setStoreAddress(info.getAddress());
|
||||
storeMasterDTO.setLocationAddress(info.getAddress());
|
||||
|
||||
@@ -3,12 +3,10 @@ package com.cool.store.service.impl;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.request.bigdata.LatestOrderDateRequest;
|
||||
import com.cool.store.request.bigdata.ProfitDataRequest;
|
||||
import com.cool.store.request.oppty.CityRequest;
|
||||
import com.cool.store.response.bigdata.ActDataResponse;
|
||||
import com.cool.store.response.bigdata.ApiResponse;
|
||||
import com.cool.store.response.bigdata.ProfitDataResponse;
|
||||
import com.cool.store.response.bigdata.ProfitRateResponse;
|
||||
import com.cool.store.response.bigdata.*;
|
||||
import com.cool.store.response.oppty.CityResponse;
|
||||
import com.cool.store.response.oppty.OpportunityApiResponse;
|
||||
import com.cool.store.response.oppty.OpportunityDetailResponse;
|
||||
@@ -96,6 +94,15 @@ public class ThirdBigDataServiceImpl implements ThirdBigDataService {
|
||||
return executeApiCall(url, requestBody, ActDataResponse.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LatestOrderDateResponse> getLatestOrderDate(LatestOrderDateRequest requestBody) {
|
||||
String url = apiUrl + "api/web/v1/buy/latest_buy_date";
|
||||
JavaType javaType = objectMapper.getTypeFactory()
|
||||
.constructParametricType(ApiPageResponse.class, LatestOrderDateResponse.class);
|
||||
ApiPageResponse<LatestOrderDateResponse> response = executeApiCallWithGenericType(url, requestBody, javaType);
|
||||
return response.getList();
|
||||
}
|
||||
|
||||
|
||||
private <T> T executeApiCall(String url, Object requestBody, Class<T> responseType) {
|
||||
// 1. 打印请求前日志
|
||||
@@ -136,6 +143,44 @@ public class ThirdBigDataServiceImpl implements ThirdBigDataService {
|
||||
}
|
||||
}
|
||||
|
||||
private <T> T executeApiCallWithGenericType(String url, Object requestBody, JavaType responseType) {
|
||||
// 1. 打印请求前日志
|
||||
logRequest(url, requestBody);
|
||||
|
||||
try {
|
||||
Request request = buildRequest(requestBody, url);
|
||||
|
||||
try (Response response = okHttpClient.newCall(request).execute()) {
|
||||
// 2. 获取原始响应内容
|
||||
String responseBody = response.body().string();
|
||||
|
||||
// 3. 打印响应日志
|
||||
logResponse(url, response.code(), responseBody);
|
||||
|
||||
if (!response.isSuccessful()) {
|
||||
throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR,
|
||||
"HTTP请求失败,状态码: " + response.code());
|
||||
}
|
||||
|
||||
// 4. 解析响应
|
||||
JavaType javaType = objectMapper.getTypeFactory()
|
||||
.constructParametricType(OpportunityApiResponse.class, responseType);
|
||||
|
||||
OpportunityApiResponse<T> apiResponse = objectMapper.readValue(responseBody, javaType);
|
||||
|
||||
if (apiResponse.getCode() != 0) {
|
||||
throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, apiResponse.getMsg());
|
||||
}
|
||||
|
||||
return apiResponse.getData();
|
||||
}
|
||||
} catch (ServiceException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
log.error("API调用异常 - URL: {}, 错误: {}", url, e.getMessage(), e);
|
||||
throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "接口调用异常: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private Request buildRequest(Object requestBody, String url) {
|
||||
Map<String, Object> params = JsonUtils.parseJsonToMap(JSONObject.toJSONString(requestBody));
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
package com.cool.store.service.login;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.constants.CommonConstants;
|
||||
import com.cool.store.constants.RedisConstant;
|
||||
import com.cool.store.context.CurrentUserHolder;
|
||||
import com.cool.store.context.LoginUserInfo;
|
||||
import com.cool.store.dao.EnterpriseUserDAO;
|
||||
import com.cool.store.dto.login.UserLoginDTO;
|
||||
import com.cool.store.dto.login.UserRefreshLoginDTO;
|
||||
import com.cool.store.entity.EnterpriseUserDO;
|
||||
import com.cool.store.entity.login.UserLoginDO;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.response.ResponseResult;
|
||||
import com.cool.store.service.EnterpriseService;
|
||||
import com.cool.store.userholder.CurrentUser;
|
||||
import com.cool.store.userholder.RefreshUser;
|
||||
import com.cool.store.utils.RedisUtilPool;
|
||||
import com.cool.store.utils.poi.constant.Constants;
|
||||
import com.cool.store.vo.login.UserBaseInfoVO;
|
||||
import com.cool.store.vo.login.UserLoginVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.text.MessageFormat;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 登录基础服务类
|
||||
* </p>
|
||||
*
|
||||
* @author wangff
|
||||
* @since 2025/9/3
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public abstract class LoginBaseService implements LoginStrategy {
|
||||
@Resource
|
||||
private RedisUtilPool redisUtilPool;
|
||||
@Resource
|
||||
private EnterpriseUserDAO enterpriseUserDAO;
|
||||
@Resource
|
||||
private EnterpriseService enterpriseService;
|
||||
|
||||
/**
|
||||
* 策略登录实现方法
|
||||
*/
|
||||
public abstract ResponseResult userLogin(UserLoginDTO param, UserLoginDO userLoginDO);
|
||||
|
||||
@Override
|
||||
public ResponseResult login(UserLoginDTO param) {
|
||||
log.info("login:{}", JSONObject.toJSONString(param));
|
||||
String errorPasswordCountKey = MessageFormat.format(RedisConstant.ERROR_PASSWORD_COUNT_KEY, LocalDate.now(), param.getMobile());
|
||||
String errorCount = redisUtilPool.getString(errorPasswordCountKey);
|
||||
//判断密码错误次数
|
||||
if (StringUtils.isNotBlank(errorCount)) {
|
||||
if (Integer.parseInt(errorCount) >= CommonConstants.MAX_ERROR_PASSWORD_COUNT) {
|
||||
return ResponseResult.fail(ErrorCodeEnum.PASSWORD_ERROR_MAX_COUNT, errorCount);
|
||||
}
|
||||
}
|
||||
EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(param.getMobile());
|
||||
UserLoginDO userLoginDO = enterpriseUserDAO.getUserLoginByUnionid(enterpriseUserDO.getUnionid());
|
||||
return userLogin(param, userLoginDO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseResult refreshLogin(UserRefreshLoginDTO param) {
|
||||
String refreshTokenKey = RedisConstant.REFRESH_TOKEN_PREFIX + param.getRefreshToken();
|
||||
String refreshUserStr = redisUtilPool.getString(refreshTokenKey);
|
||||
if (StringUtils.isBlank(refreshUserStr)) {
|
||||
return ResponseResult.fail(ErrorCodeEnum.REFRESH_TOKEN_INVALID);
|
||||
}
|
||||
RefreshUser refreshUser = JSONObject.parseObject(refreshUserStr, RefreshUser.class);
|
||||
if (StringUtils.isBlank(refreshUser.getMobile())) {
|
||||
return ResponseResult.fail(ErrorCodeEnum.REFRESH_TOKEN_INVALID);
|
||||
}
|
||||
UserLoginDO userLoginDO = new UserLoginDO(refreshUser.getUserId(), refreshUser.getMobile(), null);
|
||||
return ResponseResult.success(getUserLoginInfo(userLoginDO));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseResult logout() {
|
||||
LoginUserInfo currentUser = CurrentUserHolder.getUser();
|
||||
String accessToken = currentUser.getAccessToken();
|
||||
String key = RedisConstant.ACCESS_TOKEN_PREFIX + accessToken;
|
||||
redisUtilPool.delKey(key);
|
||||
return ResponseResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取登录accessToken
|
||||
*
|
||||
* @param userLoginDO 用户登录信息
|
||||
* @return accessToken
|
||||
*/
|
||||
public UserLoginVO getUserLoginInfo(UserLoginDO userLoginDO) {
|
||||
CurrentUser currentUser = enterpriseService.getLoginInfo(userLoginDO.getMobile());
|
||||
UserBaseInfoVO userBAseInfoVO = BeanUtil.toBean(currentUser, UserBaseInfoVO.class);
|
||||
RefreshUser refreshUser = enterpriseService.getRefreshUser(userLoginDO.getUserId(), userLoginDO.getMobile());
|
||||
return new UserLoginVO(currentUser.getAccessToken(), refreshUser.getRefreshToken(), CommonConstants.ACTION_TOKEN_EXPIRE, userBAseInfoVO);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.cool.store.service.login;
|
||||
|
||||
import com.cool.store.dto.login.UserLoginDTO;
|
||||
import com.cool.store.dto.login.UserRefreshLoginDTO;
|
||||
import com.cool.store.response.ResponseResult;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 登录策略
|
||||
* </p>
|
||||
*
|
||||
* @author wangff
|
||||
* @since 2025/9/3
|
||||
*/
|
||||
public interface LoginStrategy {
|
||||
/**
|
||||
* 登录基础方法
|
||||
*/
|
||||
ResponseResult login(UserLoginDTO param);
|
||||
|
||||
/**
|
||||
* refreshToken登录
|
||||
*/
|
||||
ResponseResult refreshLogin(UserRefreshLoginDTO param);
|
||||
|
||||
/**
|
||||
* 登出
|
||||
*/
|
||||
ResponseResult logout();
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.cool.store.service.login.impl;
|
||||
|
||||
import com.aliyun.core.utils.StringUtils;
|
||||
import com.cool.store.constants.CommonConstants;
|
||||
import com.cool.store.constants.RedisConstant;
|
||||
import com.cool.store.dto.login.UserLoginDTO;
|
||||
import com.cool.store.entity.login.UserLoginDO;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.response.ResponseResult;
|
||||
import com.cool.store.service.login.LoginBaseService;
|
||||
import com.cool.store.utils.Md5Utils;
|
||||
import com.cool.store.utils.RedisUtilPool;
|
||||
import com.cool.store.utils.poi.constant.Constants;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 密码登录服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author wangff
|
||||
* @since 2025/9/4
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class PasswordLoginServiceImpl extends LoginBaseService {
|
||||
private final RedisUtilPool redisUtilPool;
|
||||
|
||||
@Override
|
||||
public ResponseResult userLogin(UserLoginDTO param, UserLoginDO userLoginDO) {
|
||||
if (StringUtils.isBlank(param.getPassword())) {
|
||||
return ResponseResult.fail(ErrorCodeEnum.PASSWORD_MISSING);
|
||||
}
|
||||
if (StringUtils.isBlank(userLoginDO.getPassword())) {
|
||||
return ResponseResult.fail(ErrorCodeEnum.IMPROVE_USER_INFO);
|
||||
}
|
||||
String password = Md5Utils.md5(param.getPassword() + CommonConstants.USER_AUTH_KEY);
|
||||
if (!password.equals(userLoginDO.getPassword())) {
|
||||
String errorPasswordCountKey = MessageFormat.format(RedisConstant.ERROR_PASSWORD_COUNT_KEY, LocalDate.now(), param.getMobile());
|
||||
Long errorNum = redisUtilPool.incrby(errorPasswordCountKey, 1);
|
||||
redisUtilPool.expire(errorPasswordCountKey, 24 * 60 * 60);
|
||||
if(errorNum == 1){
|
||||
return ResponseResult.fail(ErrorCodeEnum.PASSWORD_ERROR);
|
||||
}
|
||||
return ResponseResult.fail(ErrorCodeEnum.PASSWORD_ERROR_MULTI, errorNum.toString());
|
||||
}
|
||||
return ResponseResult.success(getUserLoginInfo(userLoginDO));
|
||||
}
|
||||
}
|
||||
@@ -220,6 +220,4 @@ public class Constants
|
||||
|
||||
public static final String WANG_LEI_JOB_NUMBER = "19060164";
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user