feat:事项

This commit is contained in:
苏竹红
2025-07-27 22:20:33 +08:00
parent 5035a7e054
commit 00f883192a
23 changed files with 1040 additions and 39 deletions

View File

@@ -1,10 +1,13 @@
package com.cool.store.service;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.request.notice.BatchDeletedRequest;
import com.cool.store.request.notice.BatchPublishRequest;
import com.cool.store.request.notice.MessageTemplateAddRequest;
import com.cool.store.vo.notice.MessageTemplateDetailVO;
import com.cool.store.dto.notice.NoticeDTO;
import com.cool.store.request.notice.*;
import com.cool.store.vo.PartnerUserInfoVO;
import com.cool.store.vo.notice.*;
import com.github.pagehelper.PageInfo;
import java.util.List;
/**
* @Author suzhuhong
@@ -54,9 +57,40 @@ public interface MessageTemplateService {
Boolean batchPublishMessageTemplate(BatchPublishRequest request, LoginUserInfo user);
/**
* 获取列表
* @param request
* @return
*/
PageInfo<NoticeDTO> getMessageTemplateList(MessageTemplateQueryRequest request);
PageInfo<StoreMessageDetailVO> getStoreMessageListByTemplateId(StoreMessageRequest request);
/**
* 批量撤销
* @param request
* @param user
* @return
*/
Boolean batchRevokeNotice(BatchRevokeRequest request, LoginUserInfo user);
/**
* 撤销单个门店通知
* @param id
* @param user
* @return
*/
Boolean revokeById(Long id, LoginUserInfo user);
List<ModuleAndMatterVO> getModuleList(String storeId);
PageInfo<StoreMessageVO> getStorePendingList(StoreMessagePendingRequest request);
MessageDetailVO getMessageDetail(Long id);
Boolean readMessage(Long id, PartnerUserInfoVO userInfoVO);
}

View File

@@ -1,40 +1,43 @@
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.EnterpriseUserDAO;
import com.cool.store.dao.MessageTemplateDAO;
import com.cool.store.dao.RegionDao;
import com.cool.store.dao.StoreMessageDAO;
import com.cool.store.dto.notice.CommonDTO;
import com.cool.store.dto.notice.MessageTemplateCountDTO;
import com.cool.store.dto.notice.NoticeDTO;
import com.cool.store.dto.store.AuthStoreUserDTO;
import com.cool.store.dto.store.StoreAreaDTO;
import com.cool.store.entity.MessageTemplateDO;
import com.cool.store.entity.RegionDO;
import com.cool.store.entity.StoreGroupMappingDO;
import com.cool.store.entity.StoreMessageDO;
import com.cool.store.entity.*;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.enums.notice.ProcessStatusEnum;
import com.cool.store.enums.notice.PublishStatusEnum;
import com.cool.store.enums.notice.ReadStatusEnum;
import com.cool.store.enums.notice.TypeEnum;
import com.cool.store.enums.notice.*;
import com.cool.store.exception.ServiceException;
import com.cool.store.mapper.StoreGroupMappingMapper;
import com.cool.store.mapper.StoreMapper;
import com.cool.store.request.notice.BatchDeletedRequest;
import com.cool.store.request.notice.BatchPublishRequest;
import com.cool.store.request.notice.MessageTemplateAddRequest;
import com.cool.store.request.notice.*;
import com.cool.store.service.MessageTemplateService;
import com.cool.store.service.StoreService;
import com.cool.store.vo.notice.MessageTemplateDetailVO;
import com.cool.store.utils.CoolDateUtils;
import com.cool.store.vo.PartnerUserInfoVO;
import com.cool.store.vo.notice.*;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
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.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;
/**
@@ -59,6 +62,8 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
StoreService storeService;
@Resource
StoreMessageDAO storeMessageDAO;
@Resource
EnterpriseUserDAO enterpriseUserDAO;
@@ -66,11 +71,20 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
public Boolean addMessageTemplate(MessageTemplateAddRequest request, LoginUserInfo user) {
MessageTemplateDO messageTemplateDO = new MessageTemplateDO();
BeanUtils.copyProperties(request, messageTemplateDO);
messageTemplateDO.setMessageCode(getMessageTemplateCode());
messageTemplateDO.setMatterType(MatterTypeEnum.NOTICE.getCode());
messageTemplateDO.setCreateUserId(user.getUserId());
messageTemplateDO.setSystemSource("CRM");
messageTemplateDAO.insert(messageTemplateDO);
return Boolean.TRUE;
}
public String getMessageTemplateCode() {
//当前日期
String today = CoolDateUtils.getToday();
return "16" + today + String.format("%04d", ThreadLocalRandom.current().nextInt(10000));
}
@Override
public Boolean editMessageTemplate(MessageTemplateAddRequest request, LoginUserInfo user) {
if (request.getId()==null){
@@ -97,6 +111,12 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
BeanUtils.copyProperties(messageTemplateDO, messageTemplateDetailVO);
messageTemplateDetailVO.setUserInfoList(JSONObject.parseArray(messageTemplateDO.getHandlePersonInfo(), CommonDTO.class));
messageTemplateDetailVO.setStoreInfoList(JSONObject.parseArray(messageTemplateDO.getStoreInfo(), CommonDTO.class));
List<MessageTemplateCountDTO> messageTemplateCountList = storeMessageDAO.getMessageTemplateCountList(Arrays.asList(messageTemplateDO.getId()));
if (CollectionUtils.isNotEmpty(messageTemplateCountList)){
messageTemplateDetailVO.setTotalNum(messageTemplateCountList.get(0).getTotalStoreCount());
messageTemplateDetailVO.setHandleNum(messageTemplateCountList.get(0).getProcessedStoreCount());
}
return messageTemplateDetailVO;
}
@@ -118,6 +138,7 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
if (CollectionUtils.isEmpty(request.getIds())||CollectionUtils.isEmpty(request.getStoreInfoList())||CollectionUtils.isEmpty(request.getUserInfoList())){
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
}
List<StoreAreaDTO> storeAreaDTOS = getStoreRange(request.getStoreInfoList());
List<String> storeIds = storeAreaDTOS.stream().map(StoreAreaDTO::getStoreId).collect(Collectors.toList());
@@ -127,6 +148,10 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
//过滤 只保留未发布的
list = list.stream().filter(x -> PublishStatusEnum.UNPUBLISHED.getCode().equals(x.getPublishStatus())).collect(Collectors.toList());
if (CollUtil.isEmpty(list)){
log.info("未找到待发布消息模板");
}
list.stream().forEach(x -> {
List<StoreMessageDO> result = new ArrayList<>();
storeAreaDTOS.forEach(y->{
@@ -136,6 +161,7 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
}
StoreMessageDO storeMessageDO = new StoreMessageDO();
storeMessageDO.setStoreId(y.getStoreId());
storeMessageDO.setStoreName(y.getStoreName());
storeMessageDO.setStoreCode(y.getStoreCode());
storeMessageDO.setMessageTemplateId(x.getId());
storeMessageDO.setReadStatus(ReadStatusEnum.UNREAD.getCode());
@@ -148,24 +174,166 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
});
storeMessageDAO.batchInsert(result);
});
List<Long> updateIds = list.stream().map(MessageTemplateDO::getId).collect(Collectors.toList());
messageTemplateDAO.batchUpdateStoreInfoAndUserInfo(updateIds,
JSONObject.toJSONString(request.getStoreInfoList()),
JSONObject.toJSONString(request.getUserInfoList()),
user.getUserId());
return Boolean.TRUE;
}
@Override
public PageInfo<NoticeDTO> getMessageTemplateList(MessageTemplateQueryRequest request) {
PageHelper.startPage(request.getPageNum(), request.getPageSize());
List<NoticeDTO> list = messageTemplateDAO.getMessageTemplateList(request);
if (CollectionUtils.isEmpty(list)){
return new PageInfo<>(list);
}
//将列表中的创建人id与发布人id 放到同一个list 去重
Set<String> userIdSet = new HashSet<>();
list.forEach(notice -> {
if (notice.getCreateUserId() != null) {
userIdSet.add(String.valueOf(notice.getCreateUserId()));
}
if (notice.getPublishUserId() != null) {
userIdSet.add(String.valueOf(notice.getPublishUserId()));
}
});
List<String> uniqueUserIds = new ArrayList<>(userIdSet);
List<EnterpriseUserDO> userInfoByUserIds = enterpriseUserDAO.getUserInfoByUserIds(uniqueUserIds);
Map<String, String> userMap = userInfoByUserIds.stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId, EnterpriseUserDO::getName));
List<Long> templateIds = list.stream().map(NoticeDTO::getId).collect(Collectors.toList());
List<MessageTemplateCountDTO> messageTemplateCountList = storeMessageDAO.getMessageTemplateCountList(templateIds);
//根据模板id查询 转为map
Map<Long, MessageTemplateCountDTO> messageTemplateCountMap = messageTemplateCountList.stream().collect(Collectors.toMap(MessageTemplateCountDTO::getTemplateId, x -> x));
list.forEach(x -> {
x.setCreateUserName(userMap.get(x.getCreateUserId()));
x.setPublishUserName(userMap.get(x.getPublishUserId()));
MessageTemplateCountDTO count = messageTemplateCountMap.getOrDefault(x.getId(), new MessageTemplateCountDTO());
x.setHandleNum(count.getProcessedStoreCount());
x.setTotalNum(count.getTotalStoreCount());
});
return new PageInfo<>(list);
}
@Override
public PageInfo<StoreMessageDetailVO> getStoreMessageListByTemplateId(StoreMessageRequest request) {
PageHelper.startPage(request.getPageNum(),request.getPageSize());
List<StoreMessageDO> list = storeMessageDAO.getStoreMessageList(request);
if (CollectionUtils.isEmpty(list)){
return new PageInfo<>();
}
StoreMessageDetailVO storeMessageDetailVO = new StoreMessageDetailVO();
List<StoreMessageDetailVO> result = new ArrayList<>();
list.forEach(x->{
BeanUtils.copyProperties(x,storeMessageDetailVO);
result.add(storeMessageDetailVO);
});
PageInfo storeMessageDOPageInfo = new PageInfo<>(list);
storeMessageDOPageInfo.setList(result);
return storeMessageDOPageInfo;
}
@Override
public Boolean batchRevokeNotice(BatchRevokeRequest request, LoginUserInfo user) {
log.info("batchRevokeNotice request:{}", JSONObject.toJSONString(request));
List<Long> ids = request.getIds();
if (ids == null || ids.size() == 0) {
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
}
//将消息置为撤销状态
messageTemplateDAO.batchUpdatePublishStatus(ids);
//将门店未处理的消息置为撤销状态 已处理和撤销的保持不变
storeMessageDAO.batchRevoke(ids, user.getUserId(), user.getName());
return Boolean.TRUE;
}
@Override
public Boolean revokeById(Long id, LoginUserInfo user) {
//查询门店消息
StoreMessageDO storeMessage = storeMessageDAO.getById(id);
if (storeMessage == null){
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
}
if (RevokeStatusEnum.REVOKE.getCode().equals(storeMessage.getRevokeStatus())){
throw new ServiceException(ErrorCodeEnum.STORE_MESSAGE_REVOKE);
}
if (ProcessStatusEnum.PROCESSED.getCode().equals(storeMessage.getProcessStatus())){
throw new ServiceException(ErrorCodeEnum.STORE_MESSAGE_HANDLED);
}
storeMessageDAO.revokeById(id,user.getUserId(),user.getName());
return Boolean.TRUE;
}
@Override
public List<ModuleAndMatterVO> getModuleList(String storeId) {
List<ModuleAndMatterVO> moduleAndMatterList = ModuleAndMatterVO.getModuleAndMatterList();
List<ModuleAndMatterVO> list= new ArrayList<>();
moduleAndMatterList.forEach(x->{
Integer integer = storeMessageDAO.queryStoreModuleCount(storeId, x.getModuleCode());
if (integer > 0){
list.add(x);
}
});
return list;
}
@Override
public PageInfo<StoreMessageVO> getStorePendingList(StoreMessagePendingRequest request) {
EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(request.getMobile());
PageHelper.startPage(request.getPageNum(), request.getPageSize());
List<StoreMessageVO> storeMessageListByCondition = storeMessageDAO.getStoreMessageListByCondition(request.getStoreId(), request.getModuleCode(),
request.getTodayTask(), request.getPendingFlag(), enterpriseUserDO.getUserId());
return new PageInfo<>(storeMessageListByCondition);
}
@Override
public MessageDetailVO getMessageDetail(Long id) {
MessageDetailVO messageDetailVO = storeMessageDAO.getMessageDetail(id);
return messageDetailVO;
}
@Override
public Boolean readMessage(Long id, PartnerUserInfoVO userInfoVO) {
StoreMessageDO message = storeMessageDAO.getById(id);
if (ProcessStatusEnum.PROCESSED.getCode().equals(message.getProcessStatus())){
log.info("当前消息已读已处理:{}",JSONObject.toJSONString( message));
return Boolean.TRUE;
}
message.setReadStatus(ProcessStatusEnum.PROCESSED.getCode());
message.setReadTime(new Date());
MessageTemplateDO template = messageTemplateDAO.getById(message.getMessageTemplateId());
if (ProcessTypeEnum.READ.getCode().equals(template.getProcessType())){
message.setProcessStatus(ProcessStatusEnum.PROCESSED.getCode());
message.setProcessTime(new Date());
EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(userInfoVO.getMobile());
if (enterpriseUserDO != null){
message.setActualOperatorId(enterpriseUserDO.getId());
message.setActualOperatorName(enterpriseUserDO.getName());
}
}
storeMessageDAO.update( message);
return Boolean.TRUE;
}
public Map<String, List<String>> getAuthUser(List<CommonDTO> personInfo, List<String> storeIds){
if (CollectionUtils.isEmpty(personInfo)){
return new HashMap<>();
}
List<String> personIds = personInfo.stream().filter(x -> TypeEnum.PERSON.equals(x.getType()))
List<String> personIds = personInfo.stream().filter(x -> TypeEnum.PERSON.getType().equals(x.getType()))
.map(CommonDTO::getValue).collect(Collectors.toList());
List<String> positionIds = personInfo.stream().filter(x -> TypeEnum.POSITION.equals(x.getType()))
List<String> positionIds = personInfo.stream().filter(x -> TypeEnum.POSITION.getType().equals(x.getType()))
.map(CommonDTO::getValue).collect(Collectors.toList());
List<String> groupIdList = personInfo.stream().filter(x -> TypeEnum.USER_GROUP.equals(x.getType()))
List<String> groupIdList = personInfo.stream().filter(x -> TypeEnum.USER_GROUP.getType().equals(x.getType()))
.map(CommonDTO::getValue).collect(Collectors.toList());
List<String> regionIdList = personInfo.stream().filter(x -> TypeEnum.ORGANIZATION.equals(x.getType()))
List<String> regionIdList = personInfo.stream().filter(x -> TypeEnum.ORGANIZATION.getType().equals(x.getType()))
.map(CommonDTO::getValue).collect(Collectors.toList());
//权限
List<AuthStoreUserDTO> authStoreUserList = storeService.getStorePositionUserList(storeIds, positionIds, personIds, groupIdList, regionIdList);
@@ -183,7 +351,7 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
* @return
*/
private List<StoreAreaDTO> getStoreRange( List<CommonDTO> commonDTOS){
List<String> regionIds = commonDTOS.stream().filter(x -> TypeEnum.REGION.equals(x.getType()))
List<String> regionIds = commonDTOS.stream().filter(x -> TypeEnum.REGION.getType().equals(x.getType()))
.map(CommonDTO::getValue).collect(Collectors.toList());
List<RegionDO> regionDOsByRegionIds = new ArrayList<>();
@@ -196,13 +364,13 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
List<StoreAreaDTO> storeAreaDTOS = storeMapper.listStoreByRegionPathList(regionFullRegionPathList);
storeIdSet = storeAreaDTOS.stream().map(StoreAreaDTO::getStoreId).collect(Collectors.toSet());
}
List<String> storeIdList = commonDTOS.stream().filter(x -> TypeEnum.STORE.equals(x.getType()))
List<String> storeIdList = commonDTOS.stream().filter(x -> TypeEnum.STORE.getType().equals(x.getType()))
.map(CommonDTO::getValue).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(storeIdList)){
//将寻找的门店添加到set中
storeIdSet.addAll(storeIdList);
}
List<String> groupList = commonDTOS.stream().filter(x -> TypeEnum.GROUP.equals(x.getType()))
List<String> groupList = commonDTOS.stream().filter(x -> TypeEnum.GROUP.getType().equals(x.getType()))
.map(CommonDTO::getValue).collect(Collectors.toList());
//分组
if (CollectionUtils.isNotEmpty(groupList)) {