feat:handleDecorationTeam

This commit is contained in:
苏竹红
2025-11-03 15:09:54 +08:00
parent 18fb551a72
commit 614f42f7ca
17 changed files with 493 additions and 14 deletions

View File

@@ -8,6 +8,7 @@ import com.aliyun.openservices.ons.api.bean.Subscription;
import com.cool.store.constants.CommonConstants;
import com.cool.store.enums.RocketMqGroupEnum;
import com.cool.store.mq.RocketMqConfig;
import com.cool.store.mq.consumer.listener.ShopDecorationAssignListener;
import com.cool.store.mq.consumer.listener.StoreUserUpdateListener;
import com.cool.store.mq.consumer.listener.XfsgTrainingPersonSyncListener;
import com.google.common.collect.Maps;
@@ -35,6 +36,8 @@ public class ConsumerClient {
private XfsgTrainingPersonSyncListener xfsgTrainingPersonSyncListener;
@Resource
private StoreUserUpdateListener storeUserUpdateListener;
@Resource
private ShopDecorationAssignListener shopDecorationAssignListener;
/**
* 获取通用配置
@@ -101,4 +104,17 @@ public class ConsumerClient {
return consumerBean;
}
@Bean(initMethod = "start", destroyMethod = "shutdown")
public ConsumerBean shopDecorationAssign() {
RocketMqGroupEnum groupEnum = RocketMqGroupEnum.SHOP_DECORATION_ASSIGN;
ConsumerBean consumerBean = new ConsumerBean();
//配置文件
Properties properties = getCommonProperties(groupEnum);
consumerBean.setProperties(properties);
Map<Subscription, MessageListener> commonSubscriptionTable = getCommonSubscriptionTable(groupEnum, shopDecorationAssignListener);
//订阅多个topic如上面设置
consumerBean.setSubscriptionTable(commonSubscriptionTable);
return consumerBean;
}
}

View File

@@ -0,0 +1,60 @@
package com.cool.store.mq.consumer.listener;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.openservices.ons.api.Action;
import com.aliyun.openservices.ons.api.ConsumeContext;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.MessageListener;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dto.store.StoreUserPositionDTO;
import com.cool.store.dto.store.StoreUserUpdateDTO;
import com.cool.store.service.DecorationHandleService;
import com.cool.store.utils.RedisUtilPool;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
/**
* @Author suzhuhong
* @Date 2025/11/3 10:13
* @Version 1.0
*/
@Slf4j
@Service
public class ShopDecorationAssignListener implements MessageListener {
@Autowired
public RedisUtilPool redisUtilPool;
@Resource
DecorationHandleService decorationHandleService;
@Override
public Action consume(Message message, ConsumeContext context) {
String text = new String(message.getBody());
if(StringUtils.isBlank(text)){
log.info("消息体为空,tag:{},messageId:{}",message.getTag(),message.getMsgID());
return Action.CommitMessage;
}
String lockKey = "ShopDecorationAssignListener:" + message.getMsgID();
boolean lock = redisUtilPool.setNxExpire(lockKey, message.getMsgID(), CommonConstants.NORMAL_LOCK_TIMES);
if(lock){
try {
decorationHandleService.handleDecorationTeam(Long.valueOf(text));
}catch (Exception e){
log.error("ShopDecorationAssignListener consume error",e);
return Action.ReconsumeLater;
}finally {
redisUtilPool.delKey(lockKey);
}
log.info("消费成功,tag:{},messageId:{},reqBody={}",message.getTag(),message.getMsgID(),text);
return Action.CommitMessage;
}
return Action.ReconsumeLater;
}
}

View File

@@ -1,8 +1,10 @@
package com.cool.store.service;
import com.cool.store.common.PageBasicInfo;
import com.cool.store.dto.decoration.DecorationListDTO;
import com.cool.store.dto.decoration.DecorationTeamDTO;
import com.cool.store.request.decoration.AddTeamRequest;
import com.cool.store.request.decoration.DecorationListRequest;
import com.cool.store.request.decoration.UpdateTeamRequest;
import com.github.pagehelper.PageInfo;
@@ -51,6 +53,20 @@ public interface DecorationHandleService {
*/
Long getDecorationTeamIdByCityId(Long openCityId);
/**
* 处理团队
* @param teamId
* @return
*/
Boolean handleDecorationTeam(Long decorationAssignId);
/**
* 列表
* @param request
* @return
*/
PageInfo<DecorationListDTO> listByCondition(DecorationListRequest request);

View File

@@ -4,6 +4,7 @@ import com.cool.store.context.LoginUserInfo;
import com.cool.store.request.AddSignFranchiseRequest;
import com.cool.store.request.AuditApproveRequest;
import com.cool.store.request.AuditResultRequest;
import com.cool.store.request.HqtBuildRequest;
import com.cool.store.response.AddSignFranchiseResponse;
import com.cool.store.response.ResponseResult;
@@ -42,4 +43,6 @@ public interface SignFranchiseService {
Boolean rePay(Long shopId);
Integer dateHandle();
HqtBuildRequest getHqtBuildRequest(Long shopId);
}

View File

@@ -1,29 +1,43 @@
package com.cool.store.service.impl;
import com.cool.store.common.PageBasicInfo;
import com.cool.store.dao.RegionDao;
import com.cool.store.dao.ShopInfoDAO;
import com.cool.store.dao.ShopStageInfoDAO;
import com.cool.store.dao.decoration.DecorationTeamConfigDAO;
import com.cool.store.dao.decoration.ShopDecorationAssignDAO;
import com.cool.store.dao.decoration.TeamAreaMappingDAO;
import com.cool.store.dto.decoration.DecorationListDTO;
import com.cool.store.dto.decoration.DecorationTeamDTO;
import com.cool.store.dto.decoration.TeamAreaMappingDTO;
import com.cool.store.entity.RegionDO;
import com.cool.store.entity.ShopInfoDO;
import com.cool.store.entity.decoration.DecorationTeamConfigDO;
import com.cool.store.entity.decoration.ShopDecorationAssignDO;
import com.cool.store.entity.decoration.TeamAreaMappingDO;
import com.cool.store.enums.Decoration.DecorationDescStatus;
import com.cool.store.enums.Decoration.DecorationUseSystemEnum;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.enums.JoinModeEnum;
import com.cool.store.enums.point.ShopSubStageStatusEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.request.decoration.AddTeamRequest;
import com.cool.store.request.decoration.DecorationListRequest;
import com.cool.store.request.decoration.UpdateTeamRequest;
import com.cool.store.service.DecorationHandleService;
import com.cool.store.service.HqtAPIService;
import com.cool.store.service.SignFranchiseService;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.utils.StringUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import springfox.documentation.service.ApiListing;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -32,6 +46,7 @@ import java.util.stream.Collectors;
* @Version 1.0
*/
@Service
@Slf4j
public class DecorationHandleServiceImpl implements DecorationHandleService {
@@ -40,7 +55,19 @@ public class DecorationHandleServiceImpl implements DecorationHandleService {
@Resource
private TeamAreaMappingDAO teamAreaMappingDAO;
@Resource
ShopDecorationAssignDAO shopDecorationAssignDAO;
@Resource
RedisUtilPool redisUtilPool;
@Resource
private HqtAPIService hqtAPIService;
@Resource
ShopStageInfoDAO shopStageInfoDAO;
@Resource
ShopInfoDAO shopInfoDAO;
@Resource
SignFranchiseService signFranchiseService;
@Resource
RegionDao regionDao;
@Override
public Boolean addTeam(AddTeamRequest request) {
@@ -85,6 +112,11 @@ public class DecorationHandleServiceImpl implements DecorationHandleService {
if (teamConfigDO==null){
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR);
}
//查询当前团队是否有门店使用 有的话 不能删除
Integer count = shopDecorationAssignDAO.countByTeamId(teamId);
if (count != null && count > 0){
throw new ServiceException(ErrorCodeEnum.TEAM_USED);
}
teamConfigDO.setDeleted(1);
teamAreaMappingDAO.deletedByTeamId(teamId);
decorationTeamConfigDAO.updateTeam(teamConfigDO);
@@ -120,6 +152,54 @@ public class DecorationHandleServiceImpl implements DecorationHandleService {
return teamInfo.getId();
}
@Override
public Boolean handleDecorationTeam(Long decorationAssignId) {
//先查询
ShopDecorationAssignDO shopDecorationAssign = shopDecorationAssignDAO.getById(decorationAssignId);
if (shopDecorationAssign == null){
log.info("handleDecorationTeam_error data not exist");
return Boolean.FALSE;
}
//如果门店是已经分配状态 则不能再次分配
if (DecorationDescStatus.ASSIGNED.getCode().equals(shopDecorationAssign.getDecorationDescStatus())){
log.info("handleDecorationTeam id:{},门店已分配",decorationAssignId);
}
//没有分配的门店 开始分配
ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(shopDecorationAssign.getShopId());
//查询装修团队
DecorationTeamConfigDO teamInfo = decorationTeamConfigDAO.getById(shopDecorationAssign.getDecorationTeamId());
if (teamInfo == null){
log.info("handleDecorationTeam_error team not exist");
return Boolean.FALSE;
}
//配置的系统是红圈通 且不是加盟公司自有店 则推送数据 也就是配置了crm或者是加盟公司自有店 走crm流程
if (teamInfo.getUseSystem().equals(DecorationUseSystemEnum.HQT.getCode())&&!shopInfoDO.getJoinMode().equals(JoinModeEnum.OWN_STORE.getCode())){
hqtAPIService.pushHqtBuild(signFranchiseService.getHqtBuildRequest(shopInfoDO.getId()));
}
shopDecorationAssign.setDecorationDescStatus(DecorationDescStatus.ASSIGNED.getCode());
shopDecorationAssignDAO.update(shopDecorationAssign);
//阶段
shopStageInfoDAO.updateShopStageInfo(shopInfoDO.getId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_861);
return Boolean.TRUE;
}
@Override
public PageInfo<DecorationListDTO> listByCondition(DecorationListRequest request) {
PageHelper.startPage(request.getPageNum(), request.getPageSize());
List<DecorationListDTO> decorationListDTOS = shopDecorationAssignDAO.listByCondition(request);
if (CollectionUtils.isEmpty(decorationListDTOS)){
return new PageInfo<>();
}
Set<String> regionIds = decorationListDTOS.stream().map(DecorationListDTO::getRegionId).collect(Collectors.toSet());
List<RegionDO> regionList = regionDao.getRegionByRegionIds(new ArrayList<>(regionIds));
//转为map
Map<String, String> regionMap = regionList.stream().collect(Collectors.toMap(RegionDO::getRegionId, RegionDO::getName));
decorationListDTOS.forEach(x->{
x.setRegionName(regionMap.get(x.getRegionId()));
});
return new PageInfo<>(decorationListDTOS);
}
public String getNextNumber() {
Long current = redisUtilPool.incrby("counter_key", 1);

View File

@@ -5,13 +5,21 @@ import com.alibaba.fastjson.JSONObject;
import com.cool.store.constants.CommonConstants;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.dao.*;
import com.cool.store.dao.decoration.DecorationTeamConfigDAO;
import com.cool.store.dao.decoration.ShopDecorationAssignDAO;
import com.cool.store.dao.decoration.TeamAreaMappingDAO;
import com.cool.store.dto.PartnerBankInfoDTO;
import com.cool.store.entity.*;
import com.cool.store.entity.decoration.DecorationTeamConfigDO;
import com.cool.store.entity.decoration.ShopDecorationAssignDO;
import com.cool.store.entity.decoration.TeamAreaMappingDO;
import com.cool.store.enums.*;
import com.cool.store.enums.Decoration.DecorationDescStatus;
import com.cool.store.enums.point.ShopSubStageEnum;
import com.cool.store.enums.point.ShopSubStageStatusEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.mapper.*;
import com.cool.store.mq.producer.SimpleMessageService;
import com.cool.store.request.*;
import com.cool.store.response.AddSignFranchiseResponse;
import com.cool.store.response.ResponseResult;
@@ -27,6 +35,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import sun.font.Decoration;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -119,6 +128,14 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
OperationLogService operationLogService;
@Resource
OperationLogDAO operationLogDAO;
@Resource
TeamAreaMappingDAO teamAreaMappingDAO;
@Resource
DecorationTeamConfigDAO decorationTeamConfigDAO;
@Resource
ShopDecorationAssignDAO shopDecorationAssignDAO;
@Resource
private SimpleMessageService simpleMessageService;
@Override
@@ -390,10 +407,26 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
));
}else{
//,加盟公司自有店->加盟公司建店 不推送数据 再crm中完成
if ( !shopInfoDO.getJoinMode().equals(JoinModeEnum.OWN_STORE.getCode())){
hqtAPIService.pushHqtBuild(getHqtBuildRequest(request.getShopId()));
//v2.0.0 先确认装修团队
TeamAreaMappingDO city = teamAreaMappingDAO.getByCityId(shopInfoDO.getWantShopAreaId());
//默认团队
Long teamId = 1L;
if (Objects.nonNull(city)) {
//v2.0.0 确认团队
DecorationTeamConfigDO decorationTeamConfigDO = decorationTeamConfigDAO.getById(city.getTeamId());
if (Objects.nonNull(decorationTeamConfigDO)) {
//v2.0.0 确认团队
teamId = decorationTeamConfigDO.getId();
}
}
shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_861);
ShopDecorationAssignDO shopDecorationAssignDO = new ShopDecorationAssignDO();
shopDecorationAssignDO.setDecorationDescStatus(DecorationDescStatus.TO_BE_ASSIGNED.getCode());
shopDecorationAssignDO.setDecorationTeamId(teamId);
shopDecorationAssignDO.setShopId(shopId);
shopDecorationAssignDAO.insert(shopDecorationAssignDO);
//新增一个延迟队列 四个小时之后确定是否手动分配 没有手动分配 直接自动分配 红圈通推送和下一个流程开始改为分配团队之后 触发
simpleMessageService.send(String.valueOf(shopDecorationAssignDO.getId()), RocketMqTagEnum.DELAY_SHOP_DECORATION_ASSIGN,System.currentTimeMillis() + 4*60 * 1000);
}
shopAuditInfoDO.setResultType(Constants.ZERO_INTEGER);
shopAuditInfoDO.setPassReason(request.getCause());
@@ -449,6 +482,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
}
}
@Override
public HqtBuildRequest getHqtBuildRequest(Long shopId) {
ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId);
LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfo.getLineId());