diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index d62aa0fbc..ae56b9f3a 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -293,6 +293,11 @@ public enum ErrorCodeEnum { PRODUCTS_SALES_COMPLETED(1511034,"含有销售完成的产品,无法批量报销",null), STORE_IS_EXIST(1511035,"该门店已存在",null), + + MESSAGE_TEMPLATE_NOT_SUPPORT_EDIT(1610001,"当前消息已发布,不支持编辑!",null), + MESSAGE_TEMPLATE_NOT_SUPPORT_DELETED(1610002,"只有未发布的消息能删除,请确认!",null), + STORE_MESSAGE_REVOKE(1610003,"当前门店消息已撤销,请务重复操作",null), + STORE_MESSAGE_HANDLED(1610004,"当前门店消息已处理,无法撤销!",null), ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/MatterTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/MatterTypeEnum.java new file mode 100644 index 000000000..9d94dde40 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/MatterTypeEnum.java @@ -0,0 +1,43 @@ +package com.cool.store.enums.notice; + +/** + * @Author suzhuhong + * @Date 2025/7/24 14:03 + * @Version 1.0 + */ +public enum MatterTypeEnum { + + QUESTION(0,"门店违规工单"), + LICENSE(1,"证照过期提醒"), + NOTICE(2,"通知消息"), + ; + + MatterTypeEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + private Integer code; + + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/ModuleCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/ModuleCodeEnum.java new file mode 100644 index 000000000..22b696bcf --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/ModuleCodeEnum.java @@ -0,0 +1,54 @@ +package com.cool.store.enums.notice; + +import java.util.Arrays; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/24 13:59 + * @Version 1.0 + */ +public enum ModuleCodeEnum { + + STORE_WORK(0,"店务", Arrays.asList(MatterTypeEnum.QUESTION,MatterTypeEnum.LICENSE,MatterTypeEnum.NOTICE)), + PRODUCT_UPDATE(1,"营销政策/产品上新",Arrays.asList(MatterTypeEnum.NOTICE)), + INVENTORY_MODULE(2,"库存模块",Arrays.asList(MatterTypeEnum.NOTICE)), + DISH(3,"菜品",Arrays.asList(MatterTypeEnum.NOTICE)), + ; + + ModuleCodeEnum(Integer code, String message,List matterTypeEnums) { + this.code = code; + this.message = message; + this.matterTypeEnums = matterTypeEnums; + } + + private Integer code; + + private String message; + + private List matterTypeEnums; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getMatterTypeEnums() { + return matterTypeEnums; + } + + public void setMatterTypeEnums(List matterTypeEnums) { + this.matterTypeEnums = matterTypeEnums; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/ProcessStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/ProcessStatusEnum.java new file mode 100644 index 000000000..e33277017 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/ProcessStatusEnum.java @@ -0,0 +1,40 @@ +package com.cool.store.enums.notice; + +/** + * @Author suzhuhong + * @Date 2025/7/24 13:50 + * @Version 1.0 + */ +public enum ProcessStatusEnum { + + UNTREATED(0,"未处理"), + PROCESSED(1,"已处理"), + ; + + ProcessStatusEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + private Integer code; + + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/ProcessTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/ProcessTypeEnum.java new file mode 100644 index 000000000..84316ddf6 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/ProcessTypeEnum.java @@ -0,0 +1,40 @@ +package com.cool.store.enums.notice; + +/** + * @Author suzhuhong + * @Date 2025/7/24 13:54 + * @Version 1.0 + */ +public enum ProcessTypeEnum { + + READ(1,"仅阅读"), + HANDLE(2,"需处理"), + ; + + ProcessTypeEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + private Integer code; + + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/PublishStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/PublishStatusEnum.java new file mode 100644 index 000000000..a80c447c6 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/PublishStatusEnum.java @@ -0,0 +1,42 @@ +package com.cool.store.enums.notice; + +/** + * @Author suzhuhong + * @Date 2025/7/24 13:52 + * @Version 1.0 + */ +public enum PublishStatusEnum { + + UNPUBLISHED(0,"未发布"), + PUBLISHED(1,"已发布"), + REVOKED(2,"已撤销"), + ; + + PublishStatusEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + private Integer code; + + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/ReadStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/ReadStatusEnum.java new file mode 100644 index 000000000..d2de9afbd --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/ReadStatusEnum.java @@ -0,0 +1,39 @@ +package com.cool.store.enums.notice; + +/** + * @Author suzhuhong + * @Date 2025/7/24 11:29 + * @Version 1.0 + */ +public enum ReadStatusEnum { + + UNREAD(0,"未读"), + READ(1,"已读"), + ; + + + ReadStatusEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + private Integer code; + + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/RemindTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/RemindTypeEnum.java new file mode 100644 index 000000000..86edff063 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/RemindTypeEnum.java @@ -0,0 +1,40 @@ +package com.cool.store.enums.notice; + +/** + * @Author suzhuhong + * @Date 2025/7/24 13:57 + * @Version 1.0 + */ +public enum RemindTypeEnum { + + CONTINUOUS_REMINDER(0,"持续提醒"), + STAGE_REMINDER(1,"阶段提醒"), + ; + + RemindTypeEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + private Integer code; + + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/RevokeStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/RevokeStatusEnum.java new file mode 100644 index 000000000..dacb4f011 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/RevokeStatusEnum.java @@ -0,0 +1,39 @@ +package com.cool.store.enums.notice; + +/** + * @Author suzhuhong + * @Date 2025/7/24 11:33 + * @Version 1.0 + */ +public enum RevokeStatusEnum { + + NOT_REVOKE(0,"未撤销"), + REVOKE(1,"已撤销"), + ; + + RevokeStatusEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + private Integer code; + + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/SystemSourceEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/SystemSourceEnum.java new file mode 100644 index 000000000..a3bacbf7a --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/SystemSourceEnum.java @@ -0,0 +1,38 @@ +package com.cool.store.enums.notice; + +/** + * @Author suzhuhong + * @Date 2025/7/24 14:41 + * @Version 1.0 + */ +public enum SystemSourceEnum { + + QUESTION(0,"CRM"), + ; + + SystemSourceEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + private Integer code; + + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/TypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/TypeEnum.java new file mode 100644 index 000000000..a83ca9df5 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/notice/TypeEnum.java @@ -0,0 +1,44 @@ +package com.cool.store.enums.notice; + +/** + * @Author suzhuhong + * @Date 2025/7/25 10:05 + * @Version 1.0 + */ +public enum TypeEnum { + + + PERSON("人员","person", "按人员"), + POSITION("人员","position", "按职位"), + USER_GROUP("人员","userGroup", "按人员分组"), + ORGANIZATION("人员","organization", "按组织架构"), + REGION("门店","region", "按区域架构"), + STORE("门店","store", "按门店架构"), + GROUP("门店","group", "按门店分钟"), + + ; + private String group; + + private String type; + + private String message; + + + TypeEnum(String group, String type, String message) { + this.group = group; + this.type = type; + this.message = message; + } + + public String getGroup() { + return group; + } + + public String getType() { + return type; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/MatterConfigDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/MatterConfigDAO.java new file mode 100644 index 000000000..be2112491 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/MatterConfigDAO.java @@ -0,0 +1,54 @@ +package com.cool.store.dao; + +import com.cool.store.entity.MatterConfigDO; +import com.cool.store.mapper.MatterConfigMapper; +import com.cool.store.request.notice.MatterConfigQueryRequest; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/24 14:22 + * @Version 1.0 + */ +@Slf4j +@Repository +public class MatterConfigDAO { + + @Resource + MatterConfigMapper matterConfigMapper; + + public int insert(MatterConfigDO matterConfigDO){ + return matterConfigMapper.insertSelective(matterConfigDO); + } + + public int update(MatterConfigDO matterConfigDO){ + return matterConfigMapper.updateByPrimaryKeySelective(matterConfigDO); + } + + public MatterConfigDO getById(Long id){ + return matterConfigMapper.selectByPrimaryKey(id); + } + + public int updateForce(MatterConfigDO matterConfigDO){ + return matterConfigMapper.updateForce(matterConfigDO); + } + + public int batchDelete(List ids, String userId){ + if (CollectionUtils.isEmpty(ids)){ + return 0; + } + return matterConfigMapper.updateDeleteStatus(ids,userId); + } + + public List ListByCondition(MatterConfigQueryRequest request){ + return matterConfigMapper.ListByCondition(request); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/MessageTemplateDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/MessageTemplateDAO.java new file mode 100644 index 000000000..904343a6d --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/MessageTemplateDAO.java @@ -0,0 +1,76 @@ +package com.cool.store.dao; + +import com.cool.store.dto.notice.NoticeDTO; +import com.cool.store.entity.MessageTemplateDO; +import com.cool.store.mapper.MessageTemplateMapper; +import com.cool.store.request.notice.MessageTemplateQueryRequest; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/25 9:40 + * @Version 1.0 + */ +@Slf4j +@Repository +public class MessageTemplateDAO { + + @Resource + private MessageTemplateMapper messageTemplateMapper; + + + public int insert(MessageTemplateDO messageTemplateDO) { + return messageTemplateMapper.insertSelective(messageTemplateDO); + } + + public int update(MessageTemplateDO messageTemplateDO) { + return messageTemplateMapper.updateByPrimaryKeySelective(messageTemplateDO); + } + + public MessageTemplateDO getById(Long id) { + return messageTemplateMapper.selectByPrimaryKey(id); + } + + public List getByIds(List ids) { + if (CollectionUtils.isEmpty(ids)){ + return new ArrayList<>(); + } + return messageTemplateMapper.selectByIds(ids); + } + + public int updateDeleteStatusBatch(List ids,String userId) { + return messageTemplateMapper.updateDeleteStatusBatch(ids,userId); + } + + + public List getMessageTemplateList(MessageTemplateQueryRequest request) { + return messageTemplateMapper.getMessageTemplateList(request); + } + + public int batchUpdateStoreInfoAndUserInfo(List ids, + String storeInfo, + String userInfo, + String userId) { + if (CollectionUtils.isEmpty(ids)){ + return 0; + } + return messageTemplateMapper.batchUpdateStoreInfoAndUserInfo(ids,storeInfo,userInfo,userId); + } + + + public int batchUpdatePublishStatus(List ids) { + if (CollectionUtils.isEmpty(ids)){ + return 0; + } + return messageTemplateMapper.batchUpdatePublishStatus(ids); + } + + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreMessageDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreMessageDAO.java new file mode 100644 index 000000000..888cec788 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreMessageDAO.java @@ -0,0 +1,90 @@ +package com.cool.store.dao; + +import cn.hutool.core.collection.CollUtil; +import com.cool.store.dto.notice.MessageTemplateCountDTO; +import com.cool.store.entity.StoreMessageDO; +import com.cool.store.mapper.StoreMessageMapper; +import com.cool.store.request.notice.StoreMessageRequest; +import com.cool.store.vo.notice.MessageDetailVO; +import com.cool.store.vo.notice.StoreMessageVO; +import io.swagger.models.auth.In; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/25 15:04 + * @Version 1.0 + */ +@Repository +public class StoreMessageDAO { + + @Resource + StoreMessageMapper storeMessageMapper; + + + + public StoreMessageDO getById(Long id){ + return storeMessageMapper.selectByPrimaryKey(id); + } + + public int update(StoreMessageDO storeMessageDO){ + return storeMessageMapper.updateByPrimaryKey(storeMessageDO); + } + + /** + * 批量新增 + * @param list + * @return + */ + public int batchInsert(List list){ + if (CollectionUtils.isEmpty(list)){ + return 0; + } + return storeMessageMapper.insertBatch(list); + } + + public List getMessageTemplateCountList(List templateIds){ + if (CollUtil.isEmpty(templateIds)){ + return new ArrayList<>(); + } + return storeMessageMapper.getMessageTemplateCountList(templateIds); + } + + public List getStoreMessageList(StoreMessageRequest request){ + return storeMessageMapper.getStoreMessageList(request); + } + + public Integer batchRevoke(List ids, String userId, String userName){ + if (CollectionUtils.isEmpty(ids)){ + return 0; + } + return storeMessageMapper.batchRevoke(ids,userId,userName); + } + + public Integer revokeById(Long id, String userId, String userName){ + if (id == null){ + return 0; + } + return storeMessageMapper.revokeById(id,userId,userName); + } + + public Integer queryStoreModuleCount(String storeId,String userId, Integer moduleCode){ + if (storeId == null|| userId == null){ + return 0; + } + return storeMessageMapper.queryStoreModuleCount(storeId,userId,moduleCode); + } + + public List getStoreMessageListByCondition(String storeId, Integer moduleCode, Integer todayTask, Integer pendingFlag, String userId){ + return storeMessageMapper.getStoreMessageListByCondition(storeId,moduleCode,todayTask,pendingFlag,userId); + } + + public MessageDetailVO getMessageDetail(Long id){ + return storeMessageMapper.getMessageDetail(id); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserGroupMappingMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserGroupMappingMapper.java new file mode 100644 index 000000000..fa65cc62c --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserGroupMappingMapper.java @@ -0,0 +1,18 @@ +package com.cool.store.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/25 11:03 + * @Version 1.0 + */ +@Mapper +public interface EnterpriseUserGroupMappingMapper { + + List getUserIdsByGroupIdList(@Param("groupIdList") List groupIdList); + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java index 7ae2a3d59..882a9f452 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java @@ -99,4 +99,6 @@ public interface EnterpriseUserMapper { * @return */ List searchUserByUserIdsAndKeyword( @Param("userIdList") List userIdList, @Param("keyword") String keyword); + + List getUserIdsByRegionIdList( @Param("regionIdList") List regionIdList); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/MatterConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/MatterConfigMapper.java new file mode 100644 index 000000000..7f41993f9 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/MatterConfigMapper.java @@ -0,0 +1,33 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.MatterConfigDO; +import com.cool.store.request.notice.MatterConfigQueryRequest; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface MatterConfigMapper extends Mapper { + + + /** + * 强制修改 + * @param matterConfigDO + * @return + */ + int updateForce(@Param("matterConfigDO") MatterConfigDO matterConfigDO); + + /** + * 批量修改删除状态 + */ + int updateDeleteStatus(@Param("ids") List ids, @Param("userId") String userId); + + + /** + * 条件查询 + * @param request + * @return + */ + List ListByCondition(@Param("request") MatterConfigQueryRequest request); + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/MessageTemplateMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/MessageTemplateMapper.java new file mode 100644 index 000000000..d038d22cf --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/MessageTemplateMapper.java @@ -0,0 +1,30 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.notice.CommonDTO; +import com.cool.store.dto.notice.NoticeDTO; +import com.cool.store.entity.MessageTemplateDO; +import com.cool.store.request.notice.MessageTemplateQueryRequest; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface MessageTemplateMapper extends Mapper { + + List selectByIds(@Param("ids") List ids); + + int updateDeleteStatusBatch(@Param("ids") List ids, @Param("userId") String userId); + + List getMessageTemplateList(@Param("request") MessageTemplateQueryRequest request); + + int batchUpdateStoreInfoAndUserInfo(@Param("ids") List ids, + @Param("storeInfo") String storeInfo, + @Param("userInfo") String userInfo, + @Param("userId") String userId); + + int batchUpdatePublishStatus(@Param("ids") List ids); + + + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopAccountMapper.java.1 b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopAccountMapper.java.1 deleted file mode 100644 index 1bbdba602..000000000 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopAccountMapper.java.1 +++ /dev/null @@ -1,7 +0,0 @@ -package com.cool.store.mapper; - -import com.cool.store.entity.ShopAccountDO; -import tk.mybatis.mapper.common.Mapper; - -public interface ShopAccountMapper extends Mapper { -} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreGroupMappingMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreGroupMappingMapper.java new file mode 100644 index 000000000..ba980ccf9 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreGroupMappingMapper.java @@ -0,0 +1,19 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.StoreGroupMappingDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/25 10:21 + * @Version 1.0 + */ +@Mapper +public interface StoreGroupMappingMapper { + + List getStoreGroupMappingByGroupIDs( @Param("groupIds")List groupIds); + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java index 35b8fe785..16b33d5ab 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java @@ -45,4 +45,6 @@ public interface StoreMapper { List getStoreNumByStoreCodes(@Param("storeCodeIds") List storeCodeIds); + List listStoreByRegionPathList(@Param("regionPathList") List regionPathList); + } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMessageMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMessageMapper.java new file mode 100644 index 000000000..54a01ecf9 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMessageMapper.java @@ -0,0 +1,38 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.notice.MessageTemplateCountDTO; +import com.cool.store.entity.StoreMessageDO; +import com.cool.store.request.notice.StoreMessageRequest; +import com.cool.store.vo.notice.MessageDetailVO; +import com.cool.store.vo.notice.StoreMessageVO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface StoreMessageMapper extends Mapper { + + int insertBatch(@Param("list") List list); + + + List getMessageTemplateCountList(@Param("templateIds") List templateIds); + + List getStoreMessageList(@Param("request") StoreMessageRequest request); + + int batchRevoke(@Param("ids") List ids, @Param("userId") String userId, @Param("userName") String userName); + + int revokeById(@Param("id") Long id, @Param("userId") String userId, @Param("userName") String userName); + + Integer queryStoreModuleCount(@Param("storeId") String storeId, + @Param("userId") String userId, + @Param("moduleCode") Integer moduleCode); + + List getStoreMessageListByCondition(@Param("storeId") String storeId, + @Param("moduleCode") Integer moduleCode, + @Param("todayTask") Integer todayTask, + @Param("pendingFlag") Integer pendingFlag, + @Param("userId") String userId); + + MessageDetailVO getMessageDetail(Long id); + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml index 27d7afd1a..33c3daa89 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml @@ -203,4 +203,15 @@ + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/MatterConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/MatterConfigMapper.xml new file mode 100644 index 000000000..997727da5 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/MatterConfigMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + UPDATE zxjp_matter_config + SET + module_code = #{matterConfigDO.moduleCode,jdbcType=TINYINT}, + matter_type = #{matterConfigDO.matterType,jdbcType=TINYINT}, + system_source = #{matterConfigDO.systemSource,jdbcType=VARCHAR}, + jump_type = #{matterConfigDO.jumpType,jdbcType=BIT}, + jump_url = #{matterConfigDO.jumpUrl,jdbcType=VARCHAR}, + status = #{matterConfigDO.status,jdbcType=BIT}, + remark = #{matterConfigDO.remark,jdbcType=VARCHAR}, + update_time = now(), + update_user_id = #{matterConfigDO.updateUserId,jdbcType=VARCHAR}, + default_handle_person_info = #{matterConfigDO.defaultHandlePersonInfo,jdbcType=LONGVARCHAR}, + default_store_info = #{matterConfigDO.defaultStoreInfo,jdbcType=LONGVARCHAR} + WHERE id = #{matterConfigDO.id,jdbcType=BIGINT} + + + + + UPDATE zxjp_matter_config + SET + deleted = 1, + update_time = now(), + update_user_id = #{userId,jdbcType=VARCHAR} + WHERE id IN + + #{id,jdbcType=BIGINT} + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/MessageTemplateMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/MessageTemplateMapper.xml new file mode 100644 index 000000000..d550593d8 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/MessageTemplateMapper.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE zxjp_message_template + SET + deleted = 1, + update_time = NOW(), updater_user_id = #{userId,jdbcType=VARCHAR} + WHERE id IN + + #{id,jdbcType=BIGINT} + + + + + + + + UPDATE zxjp_message_template + SET + store_info = #{storeInfo,jdbcType=LONGVARCHAR}, + handle_person_info = #{userInfo,jdbcType=LONGVARCHAR}, + update_time = NOW(), + publish_status = 1, + publish_time = NOW(), + publisher_user_id = #{userId} + WHERE id IN + + #{id,jdbcType=BIGINT} + + + + + UPDATE zxjp_message_template + SET + publish_status = 2 + WHERE id IN + + #{id,jdbcType=BIGINT} + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/StoreGroupMappingMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/StoreGroupMappingMapper.xml new file mode 100644 index 000000000..03145cebc --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/StoreGroupMappingMapper.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml index 3cc819371..c01282e13 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml @@ -126,6 +126,7 @@ + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/StoreMessageMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/StoreMessageMapper.xml new file mode 100644 index 000000000..ff44f4388 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/StoreMessageMapper.xml @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO zxjp_store_message ( + store_id, + store_code, + store_name, + message_template_id, + read_status, + read_time, + process_status, + process_time, + operator_list + ) + VALUES + + ( + #{item.storeId}, + #{item.storeCode}, + #{item.storeName}, + #{item.messageTemplateId}, + #{item.readStatus}, + #{item.readTime}, + #{item.processStatus}, + #{item.processTime}, + #{item.operatorList} + ) + + + + + + + + + UPDATE zxjp_store_message + SET + revoke_status = 1, + revoke_time = NOW(), + revoke_operator_id = #{userId}, + revoke_operator_name = #{userName}, + update_time = NOW() + + message_template_id IN + + #{item} + + AND process_status = 0 + AND revoke_status = 0 + + + + + UPDATE zxjp_store_message + SET + revoke_status = 1, + revoke_time = NOW(), + revoke_operator_id = #{userId}, + revoke_operator_name = #{userName}, + update_time = NOW() + WHERE + id = #{id} + AND process_status = 0 + AND revoke_status = 0 + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/enterpriseUserGroupMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/enterpriseUserGroupMapper.xml new file mode 100644 index 000000000..2be7a2841 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/enterpriseUserGroupMapper.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/StoreDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/StoreDTO.java index 876ac8795..64e64ff6a 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/StoreDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/StoreDTO.java @@ -3,6 +3,8 @@ package com.cool.store.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.math.BigDecimal; + /** * @Author suzhuhong * @Date 2025/5/13 10:56 @@ -33,5 +35,17 @@ public class StoreDTO { private String storeType; @ApiModelProperty("品牌") private String brand; + @ApiModelProperty("门店地址") + private String storeAddress; + @ApiModelProperty("门店联系方式") + private String telephone; + @ApiModelProperty("门头照") + private String storeAvatar; + @ApiModelProperty("月租金") + private BigDecimal monthlyRent; + @ApiModelProperty("月人员工资") + private BigDecimal monthlyPersonnelSalary; + @ApiModelProperty("月水电费") + private BigDecimal monthlyOtherExpenses; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/notice/CommonDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/notice/CommonDTO.java new file mode 100644 index 000000000..180fe33de --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/notice/CommonDTO.java @@ -0,0 +1,25 @@ +package com.cool.store.dto.notice; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author suzhuhong + * @Date 2025/7/24 15:27 + * @Version 1.0 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CommonDTO { + + @ApiModelProperty("类型") + private String type; + @ApiModelProperty("ID值") + private String value; + @ApiModelProperty("名称") + private String name; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/notice/MessageTemplateCountDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/notice/MessageTemplateCountDTO.java new file mode 100644 index 000000000..83923515c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/notice/MessageTemplateCountDTO.java @@ -0,0 +1,26 @@ +package com.cool.store.dto.notice; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/7/26 19:47 + * @Version 1.0 + */ +@Data +public class MessageTemplateCountDTO { + + /** + * 模版ID + */ + private Long templateId; + /** + * 总门店数据 + */ + private Integer totalStoreCount; + /** + * 已处理门店数据 + */ + private Integer processedStoreCount; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/notice/NoticeDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/notice/NoticeDTO.java new file mode 100644 index 000000000..76f35729e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/notice/NoticeDTO.java @@ -0,0 +1,78 @@ +package com.cool.store.dto.notice; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2025/7/25 16:49 + * @Version 1.0 + */ +@Data +public class NoticeDTO { + + private Long id ; + + @ApiModelProperty("消息编码") + private String messageCode; + + @ApiModelProperty("模块") + private Integer moduleCode; + + @ApiModelProperty("事项类型") + private Integer matterType; + + @ApiModelProperty("消息标题") + private String messageTitle; + + @ApiModelProperty("系统来源") + private String systemSource; + + @ApiModelProperty("处理类型") + private Integer processType; + + @ApiModelProperty("提醒") + private Integer remindType; + + @ApiModelProperty("提醒时间段 开始时间") + private Date remindStartTime; + + @ApiModelProperty("提醒时间段 结束时间") + private Date remindEndTime; + + @ApiModelProperty("截止日期") + private Date deadline; + + @ApiModelProperty("今日必办标识") + private Boolean todayTask; + + @ApiModelProperty("发布状态") + private Integer publishStatus; + + @ApiModelProperty("处理完数据") + private Integer handleNum; + @ApiModelProperty("总数") + private Integer totalNum; + + @ApiModelProperty("创建人") + private String createUserId; + + @ApiModelProperty("创建名称") + private String createUserName; + + @ApiModelProperty("总数") + private Date createTime; + + @ApiModelProperty("发布人id") + private String publishUserId; + + @ApiModelProperty("发布人名称") + private String publishUserName; + + @ApiModelProperty("发布人时间") + private Date publishTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/store/StoreAreaDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/store/StoreAreaDTO.java index 4cfe69b92..5b124b388 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/store/StoreAreaDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/store/StoreAreaDTO.java @@ -12,6 +12,7 @@ import java.util.List; */ @Data public class StoreAreaDTO { + private String storeCode; private String storeId; private String storeName; /** diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/MatterConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/MatterConfigDO.java new file mode 100644 index 000000000..b9f2cbe21 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/MatterConfigDO.java @@ -0,0 +1,99 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "zxjp_matter_config") +@Data +public class MatterConfigDO { + /** + * 主键ID + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 模块编码 + */ + @Column(name = "module_code") + private Integer moduleCode; + + /** + * 事项类型 + */ + @Column(name = "matter_type") + private Integer matterType; + + /** + * 系统来源 + */ + @Column(name = "system_source") + private String systemSource; + + /** + * 跳转方式(1:H5 2:小程序 ) + */ + @Column(name = "jump_type") + private Integer jumpType; + + /** + * 跳转链接 + */ + @Column(name = "jump_url") + private String jumpUrl; + + /** + * 状态(0:禁用 1:启用) + */ + private Integer status; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 创建人 + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 更新人 + */ + @Column(name = "update_user_id") + private String updateUserId; + + /** + * 删除标记(0:未删除 1:已删除) + */ + private Boolean deleted; + + /** + * 默认处理人信息 [{type:person,value:}{type:position,value:}] + */ + @Column(name = "default_handle_person_info") + private String defaultHandlePersonInfo; + + /** + * 默认门店范围 [{type:store,value:}{type:region,value:}] + */ + @Column(name = "default_store_info") + private String defaultStoreInfo; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/MessageTemplateDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/MessageTemplateDO.java new file mode 100644 index 000000000..fc0f7b28b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/MessageTemplateDO.java @@ -0,0 +1,155 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "zxjp_message_template") +@Data +public class MessageTemplateDO { + /** + * 主键ID + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 消息编码(唯一标识) + */ + @Column(name = "message_code") + private String messageCode; + + /** + * 模块编码 + */ + @Column(name = "module_code") + private Integer moduleCode; + + /** + * 事项类型 + */ + @Column(name = "matter_type") + private Integer matterType; + + /** + * 消息标题 + */ + @Column(name = "message_title") + private String messageTitle; + + /** + * 系统来源 + */ + @Column(name = "system_source") + private String systemSource; + + /** + * 处理类型(1:仅阅读 2:需要处理) + */ + @Column(name = "process_type") + private Integer processType; + + /** + * 提醒类型(1:持续提醒 2:阶段提醒 ) + */ + @Column(name = "remind_type") + private Integer remindType; + + /** + * 提醒时间段 开始时间 + */ + @Column(name = "remind_start_time") + private Date remindStartTime; + + /** + * 提醒时间段 结束时间 + */ + @Column(name = "remind_end_time") + private Date remindEndTime; + + /** + * 截止日期 + */ + private Date deadline; + + /** + * 今日必办标识(0:否 1:是) + */ + @Column(name = "today_task") + private Integer todayTask; + + /** + * 消息图片URL + */ + @Column(name = "message_image") + private String messageImage; + + /** + * 发布状态(0:未发布 1:已发布 2:已撤销) + */ + @Column(name = "publish_status") + private Integer publishStatus; + + /** + * 发布时间 + */ + @Column(name = "publish_time") + private Date publishTime; + + /** + * 发布人ID + */ + @Column(name = "publisher_user_id") + private String publisherUserId; + + /** + * 创建人ID + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新人ID + */ + @Column(name = "updater_user_id") + private String updaterUserId; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 删除标记(0:未删除 1:已删除) + */ + private Boolean deleted; + + /** + * 消息详情(富文本内容) + */ + @Column(name = "message_content") + private String messageContent; + + /** + * 处理人信息 [{type:person,value:}{type:position,value:}] + */ + @Column(name = "handle_person_info") + private String handlePersonInfo; + + /** + * 门店范围 [{type:store,value:}{type:region,value:}] + */ + @Column(name = "store_info") + private String storeInfo; + + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreGroupMappingDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreGroupMappingDO.java new file mode 100644 index 000000000..f1612bb0c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreGroupMappingDO.java @@ -0,0 +1,62 @@ +package com.cool.store.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * @Author suzhuhong + * @Date 2025/7/25 10:23 + * @Version 1.0 + */ +@Data +@Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor +public class StoreGroupMappingDO { + /** + * 自增id + */ + private Long id; + + /** + * 门店id + */ + @JsonProperty("store_id") + private String storeId; + + /** + * 组别id + */ + @JsonProperty("group_id") + private String groupId; + + /** + * 创建时间 + */ + private Long createTime; + + /** + * 创建人 + */ + private String createUser; + + /** + * 修改时间 + */ + private Long updateTime; + + /** + * 修改人 + */ + private String updateUser; + + public StoreGroupMappingDO(String storeId, String groupId, Long createTime, String createUser) { + this.storeId = storeId; + this.groupId = groupId; + this.createTime = createTime; + this.createUser = createUser; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreMessageDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreMessageDO.java new file mode 100644 index 000000000..5a70e2823 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreMessageDO.java @@ -0,0 +1,121 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "zxjp_store_message") +@Data +public class StoreMessageDO { + /** + * 主键ID + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 门店编码 + */ + @Column(name = "store_id") + private String storeId; + + /** + * 门店编码 + */ + @Column(name = "store_code") + private String storeCode; + + /** + * 门店名称 + */ + @Column(name = "store_name") + private String storeName; + + /** + * 关联的消息模板ID + */ + @Column(name = "message_template_id") + private Long messageTemplateId; + + /** + * 阅读状态(0:未读 1:已读) + */ + @Column(name = "read_status") + private Integer readStatus; + + /** + * 阅读时间 + */ + @Column(name = "read_time") + private Date readTime; + + /** + * 处理状态(0:未处理 1:处理中) + */ + @Column(name = "process_status") + private Integer processStatus; + + /** + * 处理时间 + */ + @Column(name = "process_time") + private Date processTime; + + /** + * 实际操作人ID + */ + @Column(name = "actual_operator_id") + private String actualOperatorId; + + /** + * 实际操作人姓名 + */ + @Column(name = "actual_operator_name") + private String actualOperatorName; + + /** + * 撤销状态(0:未撤销 1:已撤销) + */ + @Column(name = "revoke_status") + private Integer revokeStatus; + + /** + * 撤销时间 + */ + @Column(name = "revoke_time") + private Date revokeTime; + + /** + * 撤销操作人ID + */ + @Column(name = "revoke_operator_id") + private String revokeOperatorId; + + /** + * 撤销操作人姓名 + */ + @Column(name = "revoke_operator_name") + private String revokeOperatorName; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 操作人列表 逗号隔开 + */ + @Column(name = "operator_list") + private String operatorList; + + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/notice/BatchDeletedRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/BatchDeletedRequest.java new file mode 100644 index 000000000..a9ee2bab0 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/BatchDeletedRequest.java @@ -0,0 +1,18 @@ +package com.cool.store.request.notice; + +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/24 16:47 + * @Version 1.0 + */ +@Data +public class BatchDeletedRequest { + + private List ids; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/notice/BatchPublishRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/BatchPublishRequest.java new file mode 100644 index 000000000..2d824e021 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/BatchPublishRequest.java @@ -0,0 +1,25 @@ +package com.cool.store.request.notice; + +import com.cool.store.dto.notice.CommonDTO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/25 13:47 + * @Version 1.0 + */ +@Data +public class BatchPublishRequest { + + private List ids; + + @ApiModelProperty( "默认门店范围 type[region store group]") + List storeInfoList; + + @ApiModelProperty( "默认处理人信息 type[person position userGroup organization]") + List userInfoList; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/notice/BatchRevokeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/BatchRevokeRequest.java new file mode 100644 index 000000000..925d7d738 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/BatchRevokeRequest.java @@ -0,0 +1,19 @@ +package com.cool.store.request.notice; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/27 20:07 + * @Version 1.0 + */ +@Data +public class BatchRevokeRequest { + + @ApiModelProperty("批量撤销的消息ID列表") + private List ids; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/notice/MatterConfigAddRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/MatterConfigAddRequest.java new file mode 100644 index 000000000..788ff839a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/MatterConfigAddRequest.java @@ -0,0 +1,49 @@ +package com.cool.store.request.notice; + +import com.aliyun.teautil.Common; +import com.cool.store.dto.notice.CommonDTO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/24 15:23 + * @Version 1.0 + */ +@Data +public class MatterConfigAddRequest { + + @ApiModelProperty( "Id 新增忽略") + private Long id; + + @ApiModelProperty( "模块CODE") + private Integer moduleCode; + + @ApiModelProperty( "事项类型") + private Integer matterType; + + @ApiModelProperty( "系统来源") + private String systemSource; + + @ApiModelProperty( "1:H5 2:小程序") + private Boolean jumpType; + + @ApiModelProperty( "跳转链接") + private String jumpUrl; + + @ApiModelProperty( "状态(0:禁用 1:启用)") + private Boolean status; + + @ApiModelProperty( "备注") + private String remark; + + @ApiModelProperty( "默认门店范围 type[region store group]") + List storeInfoList; + + @ApiModelProperty( "默认处理人信息 type[person position userGroup organization]") + List userInfoList; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/notice/MatterConfigQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/MatterConfigQueryRequest.java new file mode 100644 index 000000000..751e6b7e3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/MatterConfigQueryRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request.notice; + +import com.cool.store.common.PageBasicInfo; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/7/24 14:36 + * @Version 1.0 + */ +@Data +public class MatterConfigQueryRequest extends PageBasicInfo { + + private Integer moduleCode; + + private Integer matterType; + + private String systemSource; + + private Integer status; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/notice/MessageTemplateAddRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/MessageTemplateAddRequest.java new file mode 100644 index 000000000..a9617c9ac --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/MessageTemplateAddRequest.java @@ -0,0 +1,42 @@ +package com.cool.store.request.notice; + +import com.cool.store.dto.notice.CommonDTO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/25 11:10 + * @Version 1.0 + */ +@Data +public class MessageTemplateAddRequest { + + private Long id; + + @ApiModelProperty("模块") + private Integer moduleCode; + @ApiModelProperty("提醒类型") + private Integer remindType; + @ApiModelProperty("提醒时间段 开始时间 阶段提醒时传") + private Date remindStartTime; + @ApiModelProperty("提醒时间段 结束时间 阶段提醒时传") + private Date remindEndTime; + @ApiModelProperty("截止时间") + private Date deadline; + @ApiModelProperty("处理类型(1:仅阅读 2:需要处理)") + private Integer processType; + @ApiModelProperty("今日必办标识 0非必办 1必办") + private Integer todayTask; + @ApiModelProperty("消息标题") + private String messageTitle; + @ApiModelProperty("消息图片URL") + private String messageImage; + @ApiModelProperty("消息详情(富文本内容)") + private String messageContent; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/notice/MessageTemplateQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/MessageTemplateQueryRequest.java new file mode 100644 index 000000000..5d5de1d7c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/MessageTemplateQueryRequest.java @@ -0,0 +1,32 @@ +package com.cool.store.request.notice; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/7/26 19:09 + * @Version 1.0 + */ +@Data +public class MessageTemplateQueryRequest extends PageBasicInfo { + + + @ApiModelProperty("模块") + private Integer moduleCode; + @ApiModelProperty("事项类型") + private Integer matterType; + @ApiModelProperty("事项标题") + private String messageTitle; + @ApiModelProperty("今日必办") + private Integer todayTask; + @ApiModelProperty("系统来源") + private String systemSource; + @ApiModelProperty("发布用户ID") + private String publishUserId; + @ApiModelProperty("发布状态") + private Integer publishStatus; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/notice/StoreMessageListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/StoreMessageListRequest.java new file mode 100644 index 000000000..bde709af2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/StoreMessageListRequest.java @@ -0,0 +1,18 @@ +package com.cool.store.request.notice; + +import com.cool.store.common.PageBasicInfo; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/7/27 21:21 + * @Version 1.0 + */ +@Data +public class StoreMessageListRequest extends PageBasicInfo { + + private String storeId; + + private Integer moduleCode; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/notice/StoreMessagePendingRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/StoreMessagePendingRequest.java new file mode 100644 index 000000000..825f74169 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/StoreMessagePendingRequest.java @@ -0,0 +1,32 @@ +package com.cool.store.request.notice; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +/** + * @Author suzhuhong + * @Date 2025/7/27 21:23 + * @Version 1.0 + */ +@Data +public class StoreMessagePendingRequest extends PageBasicInfo { + + private String storeId; + + @ApiModelProperty("待办列表时 不需要传") + private Integer moduleCode; + + @ApiModelProperty("手机号") + @NotEmpty + private String mobile; + + @ApiModelProperty("是否今日必办") + private Integer todayTask; + + @ApiModelProperty("待办标识") + private Integer pendingFlag; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/notice/StoreMessageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/StoreMessageRequest.java new file mode 100644 index 000000000..b935d0df2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/notice/StoreMessageRequest.java @@ -0,0 +1,27 @@ +package com.cool.store.request.notice; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/7/26 20:13 + * @Version 1.0 + */ +@Data +public class StoreMessageRequest extends PageBasicInfo { + + @ApiModelProperty("模板ID") + private Long templateId; + + @ApiModelProperty("阅读状态 0未读 1-已读") + private Integer readStatus; + + @ApiModelProperty("处理状态 0未处理 1-已处理") + private Integer processStatus; + + @ApiModelProperty("关键字查询") + private String keyword; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/MatterAndMatterDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/MatterAndMatterDetailVO.java new file mode 100644 index 000000000..d313d4f70 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/MatterAndMatterDetailVO.java @@ -0,0 +1,46 @@ +package com.cool.store.vo.notice; + +import com.cool.store.dto.notice.CommonDTO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/24 16:50 + * @Version 1.0 + */ +@Data +public class MatterAndMatterDetailVO { + + private Long id; + + @ApiModelProperty( "模块CODE") + private Integer moduleCode; + + @ApiModelProperty( "事项类型") + private Integer matterType; + + @ApiModelProperty( "系统来源") + private String systemSource; + + @ApiModelProperty( "1:H5 2:小程序") + private Integer jumpType; + + @ApiModelProperty( "跳转链接") + private String jumpUrl; + + @ApiModelProperty( "状态(0:禁用 1:启用)") + private Integer status; + + @ApiModelProperty( "备注") + private String remark; + + @ApiModelProperty( "默认门店范围 type[region store group]") + List storeInfoList; + + @ApiModelProperty( "默认处理人信息 type[person position userGroup organization]") + List userInfoList; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/MessageDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/MessageDetailVO.java new file mode 100644 index 000000000..78fa5049a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/MessageDetailVO.java @@ -0,0 +1,43 @@ +package com.cool.store.vo.notice; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2025/7/27 21:16 + * @Version 1.0 + */ +@Data +public class MessageDetailVO { + + private Long id; + + @ApiModelProperty("消息标题") + private String messageTitle; + + @ApiModelProperty("消息图片URL") + private String messageImage; + + @ApiModelProperty("消息详情") + private String messageContent; + + @ApiModelProperty("发布时间") + private Date createTime; + + @ApiModelProperty("发布人") + private String publishUserName; + + private String publishUserId; + + private Date deadline; + + private Integer readStatus; + + private Integer processStatus; + + private Integer processType; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/MessageTemplateDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/MessageTemplateDetailVO.java new file mode 100644 index 000000000..793fda56d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/MessageTemplateDetailVO.java @@ -0,0 +1,56 @@ +package com.cool.store.vo.notice; + +import com.cool.store.dto.notice.CommonDTO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/25 13:23 + * @Version 1.0 + */ +@Data +public class MessageTemplateDetailVO { + + private Long id; + + @ApiModelProperty("模块") + private Integer moduleCode; + @ApiModelProperty("事项类型") + private Integer matterType; + @ApiModelProperty("提醒类型") + private Integer remindType; + @ApiModelProperty("提醒时间段 开始时间 阶段提醒时传") + private Date remindStartTime; + @ApiModelProperty("提醒时间段 结束时间 阶段提醒时传") + private Date remindEndTime; + @ApiModelProperty("截止时间") + private Date deadline; + @ApiModelProperty("处理类型(1:仅阅读 2:需要处理)") + private Integer processType; + @ApiModelProperty("今日必办标识 0非必办 1必办") + private Integer todayTask; + @ApiModelProperty("消息标题") + private String messageTitle; + @ApiModelProperty("消息图片URL") + private String messageImage; + @ApiModelProperty("消息详情(富文本内容)") + private String messageContent; + @ApiModelProperty( "默认门店范围 type[region store group]") + List storeInfoList; + @ApiModelProperty( "默认处理人信息 type[person position userGroup organization]") + List userInfoList; + @ApiModelProperty("发布时间") + private Date publishTime; + @ApiModelProperty("处理完数据") + private Integer handleNum; + @ApiModelProperty("总数") + private Integer totalNum; + @ApiModelProperty("系统来源") + private String systemSource; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/ModuleAndMatterVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/ModuleAndMatterVO.java new file mode 100644 index 000000000..d924c1492 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/ModuleAndMatterVO.java @@ -0,0 +1,59 @@ +package com.cool.store.vo.notice; + +import com.cool.store.enums.notice.MatterTypeEnum; +import com.cool.store.enums.notice.ModuleCodeEnum; +import lombok.Data; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2025/7/24 16:26 + * @Version 1.0 + */ +@Data +public class ModuleAndMatterVO { + + private Integer moduleCode; + + private String moduleName; + + private List matterTypeList; + + public ModuleAndMatterVO(Integer moduleCode, String moduleName, List matterTypeList) { + this.moduleCode = moduleCode; + this.moduleName = moduleName; + this.matterTypeList = matterTypeList; + } + + @Data + static class MatterTypeVO{ + private Integer matterTypeCode; + private String matterTypeName; + public MatterTypeVO(Integer matterTypeCode, String matterTypeName) { + this.matterTypeCode = matterTypeCode; + this.matterTypeName = matterTypeName; + } + } + + public static List getModuleAndMatterList() { + return Arrays.stream(ModuleCodeEnum.values()) + .map(module -> new ModuleAndMatterVO( + module.getCode(), + module.getMessage(), + convertMatterTypes(module.getMatterTypeEnums()) + )) + .collect(Collectors.toList()); + } + + private static List convertMatterTypes(List matterTypeEnums) { + return matterTypeEnums.stream() + .map(matterType -> new MatterTypeVO( + matterType.getCode(), + matterType.getMessage() + )) + .collect(Collectors.toList()); + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/StoreMessageDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/StoreMessageDetailVO.java new file mode 100644 index 000000000..ed8cafb55 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/StoreMessageDetailVO.java @@ -0,0 +1,102 @@ +package com.cool.store.vo.notice; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2025/7/26 20:21 + * @Version 1.0 + */ +@Data +public class StoreMessageDetailVO{ + + private Long id; + + /** + * 门店编码 + */ + @ApiModelProperty("门店编码") + private String storeCode; + + /** + * 门店名称 + */ + @ApiModelProperty("门店名称") + private String storeName; + + /** + * 关联的消息模板ID + */ + @ApiModelProperty("关联的消息模板ID") + private Long messageTemplateId; + + /** + * 阅读状态(0:未读 1:已读) + */ + @ApiModelProperty("阅读状态(0:未读 1:已读)") + private Integer readStatus; + + /** + * 阅读时间 + */ + @ApiModelProperty("阅读时间") + private Date readTime; + + /** + * 处理状态(0:未处理 1:处理中) + */ + @ApiModelProperty("处理状态(0:未处理 1:处理中)") + private Integer processStatus; + + /** + * 处理时间 + */ + @ApiModelProperty("处理时间") + private Date processTime; + + /** + * 实际操作人ID + */ + @ApiModelProperty("操作人ID") + private String actualOperatorId; + + /** + * 实际操作人姓名 + */ + @ApiModelProperty("操作人姓名") + private String actualOperatorName; + + /** + * 撤销状态(0:未撤销 1:已撤销) + */ + @ApiModelProperty("撤销状态(0:未撤销 1:已撤销)") + private Integer revokeStatus; + + /** + * 撤销时间 + */ + @ApiModelProperty("撤销时间") + private Date revokeTime; + + /** + * 撤销操作人ID + */ + @ApiModelProperty("撤销操作人ID") + private String revokeOperatorId; + + /** + * 撤销操作人姓名 + */ + @ApiModelProperty("撤销操作人姓名") + private String revokeOperatorName; + + + + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/StoreMessageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/StoreMessageVO.java new file mode 100644 index 000000000..4d614441c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/notice/StoreMessageVO.java @@ -0,0 +1,36 @@ +package com.cool.store.vo.notice; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2025/7/27 21:10 + * @Version 1.0 + */ +@Data +public class StoreMessageVO { + private Long id; + @ApiModelProperty("模版COde") + private Integer moduleCode; + + @ApiModelProperty("模版ID") + private Long templateId; + @ApiModelProperty("已读状态") + private Integer readStatus; + @ApiModelProperty("处理状态") + private Integer processStatus; + + @ApiModelProperty("消息标题") + private String messageTitle; + + @ApiModelProperty("消息图片URL") + private String messageImage; + @ApiModelProperty("发布时间") + private Date createTime; + @ApiModelProperty("今日必办") + private Integer todayTask; + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/MatterConfigService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/MatterConfigService.java new file mode 100644 index 000000000..9072e7e0c --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/MatterConfigService.java @@ -0,0 +1,57 @@ +package com.cool.store.service; + + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.MatterConfigDAO; +import com.cool.store.entity.MatterConfigDO; +import com.cool.store.request.notice.MatterConfigAddRequest; +import com.cool.store.request.notice.MatterConfigQueryRequest; +import com.cool.store.userholder.CurrentUser; +import com.cool.store.vo.notice.MatterAndMatterDetailVO; +import com.github.pagehelper.PageInfo; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/24 15:21 + * @Version 1.0 + */ +public interface MatterConfigService { + + + /** + * 新增配置 + * @param request + * @param currentUser + * @return + */ + int addMatterConfig(MatterConfigAddRequest request, LoginUserInfo currentUser); + + /** + * 编辑 + * @param request + * @param currentUser + * @return + */ + int editMatterConfig(MatterConfigAddRequest request, LoginUserInfo currentUser); + + /** + * 删除配置 + * @param ids + * @param currentUser + * @return + */ + Boolean deleteMatterConfig(List ids, LoginUserInfo currentUser); + + + /** + * 查询配置 + * @param request + * @return + */ + PageInfo listByCondition(MatterConfigQueryRequest request); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/MessageTemplateService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/MessageTemplateService.java new file mode 100644 index 000000000..dd9424a70 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/MessageTemplateService.java @@ -0,0 +1,98 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +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 + * @Date 2025/7/25 9:58 + * @Version 1.0 + */ +public interface MessageTemplateService { + + + /** + * 新增消息模版 + * @param request + * @param user + * @return + */ + Boolean addMessageTemplate(MessageTemplateAddRequest request , LoginUserInfo user); + + /** + * 编辑消息模版 + * @param request + * @param user + * @return + */ + Boolean editMessageTemplate(MessageTemplateAddRequest request , LoginUserInfo user); + + + /** + * 获取详情 + * @param id + * @return + */ + MessageTemplateDetailVO getMessageTemplateDetail(Long id); + + /** + * 批量删除 未发布可以删除 + * @param request + * @return + */ + Boolean batchDeleteMessageTemplate(BatchDeletedRequest request, LoginUserInfo user); + + /** + * batch 批量发布 + * @param request + * @param user + * @return + */ + Boolean batchPublishMessageTemplate(BatchPublishRequest request, LoginUserInfo user); + + + /** + * 获取列表 + * @param request + * @return + */ + PageInfo getMessageTemplateList(MessageTemplateQueryRequest request); + + + PageInfo 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 getModuleList(String storeId,PartnerUserInfoVO userInfoVO); + + PageInfo getStorePendingList(StoreMessagePendingRequest request); + + MessageDetailVO getMessageDetail(Long id); + + Boolean readMessage(Long id, PartnerUserInfoVO userInfoVO); + + Boolean handleMessage(Long id, PartnerUserInfoVO userInfoVO); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/StoreService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/StoreService.java index 01f5b00c4..d916b61a7 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/StoreService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/StoreService.java @@ -1,6 +1,7 @@ package com.cool.store.service; import com.cool.store.dto.StoreDTO; +import com.cool.store.dto.store.AuthStoreUserDTO; import com.cool.store.dto.store.StoreUserPositionDTO; import com.cool.store.response.MiniShopsResponse; import com.github.pagehelper.PageInfo; @@ -27,4 +28,12 @@ public interface StoreService { List getStoreUser(List storeCodeList); + List authStoreUser(List storeIdList, String positionType); + + List getStorePositionUserList(List storeIds, + List positionIds, + List nodePersonList, + List groupIdList, + List regionIdList); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/MatterConfigServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/MatterConfigServiceImpl.java new file mode 100644 index 000000000..4875e39fe --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/MatterConfigServiceImpl.java @@ -0,0 +1,83 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.MatterConfigDAO; +import com.cool.store.dto.notice.CommonDTO; +import com.cool.store.entity.MatterConfigDO; +import com.cool.store.request.notice.MatterConfigAddRequest; +import com.cool.store.request.notice.MatterConfigQueryRequest; +import com.cool.store.service.MatterConfigService; +import com.cool.store.vo.notice.MatterAndMatterDetailVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/24 16:41 + * @Version 1.0 + */ +@Service +public class MatterConfigServiceImpl implements MatterConfigService { + + @Resource + MatterConfigDAO matterConfigDAO; + + @Override + public int addMatterConfig(MatterConfigAddRequest request, LoginUserInfo currentUser) { + MatterConfigDO matterConfigDO = new MatterConfigDO(); + BeanUtils.copyProperties(request, matterConfigDO); + matterConfigDO.setCreateUserId(currentUser.getUserId()); + matterConfigDO.setDefaultStoreInfo(JSONObject.toJSONString(request.getStoreInfoList())); + matterConfigDO.setDefaultHandlePersonInfo(JSONObject.toJSONString(request.getUserInfoList())); + return matterConfigDAO.insert(matterConfigDO); + } + + @Override + public int editMatterConfig(MatterConfigAddRequest request, LoginUserInfo currentUser) { + MatterConfigDO matterConfigDO = new MatterConfigDO(); + BeanUtils.copyProperties(request, matterConfigDO); + matterConfigDO.setUpdateUserId(currentUser.getUserId()); + matterConfigDO.setUpdateTime(new Date()); + matterConfigDO.setDefaultStoreInfo(JSONObject.toJSONString(request.getStoreInfoList())); + matterConfigDO.setDefaultHandlePersonInfo(JSONObject.toJSONString(request.getUserInfoList())); + return matterConfigDAO.updateForce(matterConfigDO); + } + + @Override + public Boolean deleteMatterConfig(List ids, LoginUserInfo currentUser) { + matterConfigDAO.batchDelete(ids,currentUser.getUserId()); + return Boolean.TRUE; + } + + @Override + public PageInfo listByCondition(MatterConfigQueryRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List matterConfigDOS = matterConfigDAO.ListByCondition(request); + + if (CollectionUtils.isEmpty(matterConfigDOS)){ + return new PageInfo<>(); + } + PageInfo result = new PageInfo<>(matterConfigDOS); + List list = new ArrayList<>(); + matterConfigDOS.forEach(x->{ + MatterAndMatterDetailVO matterAndMatterDetailVO = new MatterAndMatterDetailVO(); + BeanUtils.copyProperties(x,matterAndMatterDetailVO); + matterAndMatterDetailVO.setStoreInfoList(JSONObject.parseArray(x.getDefaultStoreInfo(), CommonDTO.class)); + matterAndMatterDetailVO.setUserInfoList(JSONObject.parseArray(x.getDefaultHandlePersonInfo(),CommonDTO.class)); + list.add(matterAndMatterDetailVO); + }); + result.setList(list); + return result; + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/MessageTemplateServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/MessageTemplateServiceImpl.java new file mode 100644 index 000000000..e321196a6 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/MessageTemplateServiceImpl.java @@ -0,0 +1,434 @@ +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.*; +import com.cool.store.enums.ErrorCodeEnum; +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.*; +import com.cool.store.service.MessageTemplateService; +import com.cool.store.service.StoreService; +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 org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2025/7/25 9:59 + * @Version 1.0 + */ +@Service +@Slf4j +public class MessageTemplateServiceImpl implements MessageTemplateService { + + + @Resource + MessageTemplateDAO messageTemplateDAO; + @Resource + StoreMapper storeMapper; + @Resource + RegionDao RegionDao; + @Resource + StoreGroupMappingMapper storeGroupMappingMapper; + @Resource + StoreService storeService; + @Resource + StoreMessageDAO storeMessageDAO; + @Resource + EnterpriseUserDAO enterpriseUserDAO; + + + + @Override + 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){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + MessageTemplateDO messageTemplateDO = messageTemplateDAO.getById(request.getId()); + //只有待发布状态能编辑 + if (messageTemplateDO.getPublishStatus()!=0){ + throw new ServiceException(ErrorCodeEnum.MESSAGE_TEMPLATE_NOT_SUPPORT_EDIT); + } + BeanUtils.copyProperties(request, messageTemplateDO); + messageTemplateDO.setUpdaterUserId(user.getUserId()); + messageTemplateDAO.update(messageTemplateDO); + return Boolean.TRUE; + } + + @Override + public MessageTemplateDetailVO getMessageTemplateDetail(Long id) { + MessageTemplateDetailVO messageTemplateDetailVO = new MessageTemplateDetailVO(); + MessageTemplateDO messageTemplateDO = messageTemplateDAO.getById(id); + if(messageTemplateDO==null){ + return messageTemplateDetailVO; + } + BeanUtils.copyProperties(messageTemplateDO, messageTemplateDetailVO); + messageTemplateDetailVO.setUserInfoList(JSONObject.parseArray(messageTemplateDO.getHandlePersonInfo(), CommonDTO.class)); + messageTemplateDetailVO.setStoreInfoList(JSONObject.parseArray(messageTemplateDO.getStoreInfo(), CommonDTO.class)); + List 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; + } + + @Override + public Boolean batchDeleteMessageTemplate(BatchDeletedRequest request, LoginUserInfo user) { + List list = messageTemplateDAO.getByIds(request.getIds()); + //校验是否都是未发布状态 + if (list.stream().anyMatch(x -> x.getPublishStatus()!= PublishStatusEnum.UNPUBLISHED.getCode())){ + throw new ServiceException(ErrorCodeEnum.MESSAGE_TEMPLATE_NOT_SUPPORT_DELETED); + } + messageTemplateDAO.updateDeleteStatusBatch(request.getIds(),user.getUserId()); + return Boolean.TRUE; + } + + + + @Override + public Boolean batchPublishMessageTemplate(BatchPublishRequest request, LoginUserInfo user) { + if (CollectionUtils.isEmpty(request.getIds())||CollectionUtils.isEmpty(request.getStoreInfoList())||CollectionUtils.isEmpty(request.getUserInfoList())){ + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + + List storeAreaDTOS = getStoreRange(request.getStoreInfoList()); + List storeIds = storeAreaDTOS.stream().map(StoreAreaDTO::getStoreId).collect(Collectors.toList()); + + Map> authUser = getAuthUser(request.getUserInfoList(), storeIds); + + List list = messageTemplateDAO.getByIds(request.getIds()); + //过滤 只保留未发布的 + 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 result = new ArrayList<>(); + storeAreaDTOS.forEach(y->{ + if (CollectionUtils.isEmpty(authUser.get(y.getStoreId()))){ + log.info("当前门店没有人员 门店名称:{}",y.getStoreName()); + return; + } + 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()); + storeMessageDO.setReadTime(new Date()); + storeMessageDO.setProcessStatus(ProcessStatusEnum.UNTREATED.getCode()); + storeMessageDO.setProcessTime(new Date()); + String userIdStr = authUser.get(y.getStoreId()).stream().collect(Collectors.joining(",")); + storeMessageDO.setOperatorList(userIdStr); + result.add(storeMessageDO); + }); + storeMessageDAO.batchInsert(result); + }); + + List 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 getMessageTemplateList(MessageTemplateQueryRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List list = messageTemplateDAO.getMessageTemplateList(request); + if (CollectionUtils.isEmpty(list)){ + return new PageInfo<>(list); + } + //将列表中的创建人id与发布人id 放到同一个list 去重 + Set 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 uniqueUserIds = new ArrayList<>(userIdSet); + List userInfoByUserIds = enterpriseUserDAO.getUserInfoByUserIds(uniqueUserIds); + Map userMap = userInfoByUserIds.stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId, EnterpriseUserDO::getName)); + + + List templateIds = list.stream().map(NoticeDTO::getId).collect(Collectors.toList()); + List messageTemplateCountList = storeMessageDAO.getMessageTemplateCountList(templateIds); + //根据模板id查询 转为map + Map 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 getStoreMessageListByTemplateId(StoreMessageRequest request) { + PageHelper.startPage(request.getPageNum(),request.getPageSize()); + List list = storeMessageDAO.getStoreMessageList(request); + if (CollectionUtils.isEmpty(list)){ + return new PageInfo<>(); + } + + List result = new ArrayList<>(); + list.forEach(x->{ + StoreMessageDetailVO storeMessageDetailVO = new StoreMessageDetailVO(); + BeanUtils.copyProperties(x,storeMessageDetailVO); + result.add(storeMessageDetailVO); + }); + PageInfo storeMessageDOPageInfo = new PageInfo<>(list); + storeMessageDOPageInfo.setList(result); + return storeMessageDOPageInfo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchRevokeNotice(BatchRevokeRequest request, LoginUserInfo user) { + log.info("batchRevokeNotice request:{}", JSONObject.toJSONString(request)); + List 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 getModuleList(String storeId,PartnerUserInfoVO userInfoVO) { + List moduleAndMatterList = ModuleAndMatterVO.getModuleAndMatterList(); + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(userInfoVO.getMobile()); + if (enterpriseUserDO == null){ + enterpriseUserDO = new EnterpriseUserDO(); + } + List list= new ArrayList<>(); + EnterpriseUserDO finalEnterpriseUserDO = enterpriseUserDO; + moduleAndMatterList.forEach(x->{ + Integer integer = storeMessageDAO.queryStoreModuleCount(storeId, finalEnterpriseUserDO.getUserId(), x.getModuleCode()); + if (integer > 0){ + list.add(x); + } + }); + return list; + } + + @Override + public PageInfo getStorePendingList(StoreMessagePendingRequest request) { + if(request.getMobile()==null||StringUtils.isEmpty(request.getStoreId())){ + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.selectByMobile(request.getMobile()); + if (enterpriseUserDO == null){ + return new PageInfo<>(); + } + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List 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); + if (messageDetailVO!=null&&messageDetailVO.getPublishUserId()!=null){ + EnterpriseUserDO userInfoById = enterpriseUserDAO.getUserInfoById(messageDetailVO.getPublishUserId()); + messageDetailVO.setPublishUserName(userInfoById.getName()); + } + 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; + } + + @Override + public Boolean handleMessage(Long id, PartnerUserInfoVO userInfoVO) { + log.info("handleMessage request:{},处理人:{}", JSONObject.toJSONString(id), userInfoVO.getUsername()); + 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()); + if (enterpriseUserDO != null){ + message.setActualOperatorId(enterpriseUserDO.getId()); + message.setActualOperatorName(enterpriseUserDO.getName()); + } + storeMessageDAO.update( message); + return Boolean.TRUE; + } + + + public Map> getAuthUser(List personInfo, List storeIds){ + if (CollectionUtils.isEmpty(personInfo)){ + return new HashMap<>(); + } + List personIds = personInfo.stream().filter(x -> TypeEnum.PERSON.getType().equals(x.getType())) + .map(CommonDTO::getValue).collect(Collectors.toList()); + List positionIds = personInfo.stream().filter(x -> TypeEnum.POSITION.getType().equals(x.getType())) + .map(CommonDTO::getValue).collect(Collectors.toList()); + List groupIdList = personInfo.stream().filter(x -> TypeEnum.USER_GROUP.getType().equals(x.getType())) + .map(CommonDTO::getValue).collect(Collectors.toList()); + List regionIdList = personInfo.stream().filter(x -> TypeEnum.ORGANIZATION.getType().equals(x.getType())) + .map(CommonDTO::getValue).collect(Collectors.toList()); + //权限 + List authStoreUserList = storeService.getStorePositionUserList(storeIds, positionIds, personIds, groupIdList, regionIdList); + Map> storeUserMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(authStoreUserList)) { + storeUserMap = authStoreUserList.stream().collect(Collectors.toMap(AuthStoreUserDTO::getStoreId, + AuthStoreUserDTO::getUserIdList, (a, b) -> a)); + } + return storeUserMap; + } + + /** + * 获取门店范围 + * @param commonDTOS + * @return + */ + private List getStoreRange( List commonDTOS){ + List regionIds = commonDTOS.stream().filter(x -> TypeEnum.REGION.getType().equals(x.getType())) + .map(CommonDTO::getValue).collect(Collectors.toList()); + + List regionDOsByRegionIds = new ArrayList<>(); + Set storeIdSet = new HashSet<>(); + if (CollectionUtils.isNotEmpty(regionIds)){ + regionDOsByRegionIds = RegionDao.getRegionByRegionIds(regionIds); + //区域全路径地址集合 ["/1/37139128281/","/1/37139128283/"] + List regionFullRegionPathList = regionDOsByRegionIds.stream().map(RegionDO::getFullRegionPath).collect(Collectors.toList()); + //根据regionFullRegionPathList查询区域下所有的门店(包括子区域门店) + List storeAreaDTOS = storeMapper.listStoreByRegionPathList(regionFullRegionPathList); + storeIdSet = storeAreaDTOS.stream().map(StoreAreaDTO::getStoreId).collect(Collectors.toSet()); + } + List 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 groupList = commonDTOS.stream().filter(x -> TypeEnum.GROUP.getType().equals(x.getType())) + .map(CommonDTO::getValue).collect(Collectors.toList()); + //分组 + if (CollectionUtils.isNotEmpty(groupList)) { + List groupStoreList = storeGroupMappingMapper.getStoreGroupMappingByGroupIDs(groupList); + if (CollectionUtils.isNotEmpty(groupStoreList)) { + Set groupStoreSet = groupStoreList.stream().map(StoreGroupMappingDO::getStoreId).collect(Collectors.toSet()); + if(CollectionUtils.isNotEmpty(groupStoreSet)){ + //将寻找的门店添加到set中 + storeIdSet.addAll(groupStoreSet); + } + } + } + if(CollectionUtils.isEmpty(storeIdSet)){ + return new ArrayList<>(); + } + List storeDTOList = storeMapper.getStoreAreaList(new ArrayList<>(storeIdSet)); + if(CollectionUtils.isNotEmpty(storeDTOList)){ + storeDTOList = storeDTOList.stream().filter(o -> "open".equals(o.getStoreStatus())).collect(Collectors.toList()); + } + return storeDTOList; + } + + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/StoreServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/StoreServiceImpl.java index 3d0e4a904..32d445fad 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/StoreServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/StoreServiceImpl.java @@ -2,6 +2,7 @@ package com.cool.store.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; import com.cool.store.dto.store.AuthStoreUserDTO; import com.cool.store.dao.EnterpriseUserDAO; import com.cool.store.dao.EnterpriseUserRoleDao; @@ -17,10 +18,7 @@ import com.cool.store.entity.SysRoleDO; import com.cool.store.entity.UserAuthMappingDO; import com.cool.store.enums.*; import com.cool.store.exception.ServiceException; -import com.cool.store.mapper.RegionMapper; -import com.cool.store.mapper.StoreMapper; -import com.cool.store.mapper.SysRoleMapper; -import com.cool.store.mapper.UserAuthMappingMapper; +import com.cool.store.mapper.*; import com.cool.store.response.MiniShopsResponse; import com.cool.store.service.StoreService; import com.cool.store.service.UserAuthMappingService; @@ -68,6 +66,10 @@ public class StoreServiceImpl implements StoreService { StoreMapper storeMapper; @Resource UserAuthMappingMapper userAuthMappingMapper; + @Resource + EnterpriseUserMapper enterpriseUserMapper; + @Resource + EnterpriseUserGroupMappingMapper enterpriseUserGroupMappingMapper; @Override public PageInfo getStoreExtendFieldInfo(Integer pageSize, Integer pageNum) { @@ -169,7 +171,54 @@ public class StoreServiceImpl implements StoreService { return result; } - private List authStoreUser(List storeIdList, String positionType) { + + + @Override + public List getStorePositionUserList( List storeIds, + List positionIds, + List nodePersonList, + List groupIdList, + List regionIdList) { + log.info("StoreServiceImpl getStorePositionUserList param storeIds:{},positionIds:{},nodePersonList:{},groupIdList:{},regionIdList:{}", + JSONObject.toJSONString(storeIds), + JSONObject.toJSONString(positionIds), JSONObject.toJSONString(nodePersonList), + JSONObject.toJSONString(groupIdList), JSONObject.toJSONString(regionIdList)); + List authStoreUsers = this.authStoreUser(storeIds, null); + if (CollUtil.isEmpty(authStoreUsers)) { + return new ArrayList<>(); + } + List allUserIds = Lists.newArrayList(); + if (CollectionUtils.isNotEmpty(positionIds)) { + List userIds = sysRoleMapper.getPositionUserIds(positionIds); + allUserIds.addAll(userIds); + } + if (CollectionUtils.isNotEmpty(groupIdList)) { + List groupUserIdList = enterpriseUserGroupMappingMapper.getUserIdsByGroupIdList(groupIdList); + if (CollectionUtils.isNotEmpty(groupUserIdList)) { + allUserIds.addAll(groupUserIdList); + } + } + if (CollectionUtils.isNotEmpty(regionIdList)) { + List regionUserIdList = enterpriseUserMapper.getUserIdsByRegionIdList(regionIdList); + if (CollectionUtils.isNotEmpty(regionUserIdList)) { + allUserIds.addAll(regionUserIdList); + } + } + if (CollectionUtils.isNotEmpty(nodePersonList)) { + allUserIds.addAll(nodePersonList); + } + List finalAllUserIds = allUserIds; + authStoreUsers.forEach(f -> f.getUserIdList().retainAll(finalAllUserIds)); + if (CollectionUtils.isNotEmpty(authStoreUsers)) { + authStoreUsers = authStoreUsers.stream().distinct().collect(Collectors.toList()); + } + return authStoreUsers; + } + + + + @Override + public List authStoreUser(List storeIdList, String positionType) { List result = new ArrayList<>(); if (CollectionUtils.isEmpty(storeIdList)) { return result; @@ -304,7 +353,9 @@ public class StoreServiceImpl implements StoreService { StoreDTO dto = new StoreDTO(); dto.setStoreName(store.getStoreName()); dto.setStoreCode(store.getStoreNum()); - + dto.setStoreAddress(store.getStoreAddress()); + dto.setStoreAvatar(store.getAvatar()); + dto.setTelephone(store.getTelephone()); try { // 解析门店的扩展字段 Map extendFields = objectMapper.readValue( diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/CommonEnumController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/CommonEnumController.java new file mode 100644 index 000000000..48416a59a --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/CommonEnumController.java @@ -0,0 +1,39 @@ +package com.cool.store.controller.webb; + +import com.cool.store.response.ResponseResult; +import com.cool.store.vo.notice.ModuleAndMatterVO; +import com.cool.store.vo.shop.ShopStageVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/24 16:19 + * @Version 1.0 + */ +@RestController +@RequestMapping("/pc/udc") +@Api(tags = "PC枚举值") +@Slf4j +public class CommonEnumController { + + + @ApiOperation("获取模块与消息类型") + @GetMapping("/getModuleAndMatter") + public ResponseResult> getShopSubStageStatusEnum() { + return ResponseResult.success(ModuleAndMatterVO.getModuleAndMatterList()); + } + + + + + + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/MatterConfigController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/MatterConfigController.java new file mode 100644 index 000000000..6dd7342dd --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/MatterConfigController.java @@ -0,0 +1,65 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.request.notice.BatchDeletedRequest; +import com.cool.store.request.notice.MatterConfigAddRequest; +import com.cool.store.request.notice.MatterConfigQueryRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.MatterConfigService; +import com.cool.store.vo.LineInfoVO; +import com.cool.store.vo.notice.MatterAndMatterDetailVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Author suzhuhong + * @Date 2025/7/24 16:40 + * @Version 1.0 + */ +@RestController +@RequestMapping("/pc/matter/config") +@Api(tags = "PC事项配置") +@Slf4j +public class MatterConfigController { + + @Resource + MatterConfigService matterConfigService; + + @PostMapping("/add") + @ApiOperation("新增事项配置") + public ResponseResult addMatterConfig(@RequestBody MatterConfigAddRequest request) { + return ResponseResult.success(matterConfigService.addMatterConfig(request, CurrentUserHolder.getUser())); + } + + @PostMapping("/edit") + @ApiOperation("编辑事项配置") + public ResponseResult editMatterConfig(@RequestBody MatterConfigAddRequest request) { + return ResponseResult.success(matterConfigService.editMatterConfig(request, CurrentUserHolder.getUser())); + } + + + @PostMapping("/deleteMatterConfig") + @ApiOperation("批量删除事项配置") + public ResponseResult addMatterConfig(@RequestBody BatchDeletedRequest request) { + return ResponseResult.success(matterConfigService.deleteMatterConfig(request.getIds(), CurrentUserHolder.getUser())); + } + + @PostMapping("/list") + @ApiOperation("事项配置列表") + public ResponseResult> listByCondition(@RequestBody MatterConfigQueryRequest request) { + return ResponseResult.success(matterConfigService.listByCondition(request)); + } + + + + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/MessageTemplateController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/MessageTemplateController.java new file mode 100644 index 000000000..a431ab605 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/MessageTemplateController.java @@ -0,0 +1,90 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.dto.notice.NoticeDTO; +import com.cool.store.request.notice.*; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.MessageTemplateService; +import com.cool.store.vo.notice.MessageTemplateDetailVO; +import com.cool.store.vo.notice.StoreMessageDetailVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/25 15:08 + * @Version 1.0 + */ +@RestController +@RequestMapping("/pc/notice") +@Api(tags = "PC事项/通知管理") +@Slf4j +public class MessageTemplateController { + + + @Resource + MessageTemplateService messageTemplateService; + + + @PostMapping("/add") + @ApiOperation("新增消息通知") + public ResponseResult messageTemplateService(@RequestBody MessageTemplateAddRequest request) { + return ResponseResult.success(messageTemplateService.addMessageTemplate(request, CurrentUserHolder.getUser())); + } + + @PostMapping("/edit") + @ApiOperation("编辑消息通知") + public ResponseResult editMessageTemplate(@RequestBody MessageTemplateAddRequest request) { + return ResponseResult.success(messageTemplateService.editMessageTemplate(request, CurrentUserHolder.getUser())); + } + + @ApiOperation("通知详情") + @GetMapping("/getMessageTemplateDetail") + public ResponseResult getMessageTemplateDetail(@RequestParam("id")Long id) { + return ResponseResult.success(messageTemplateService.getMessageTemplateDetail(id)); + } + + @PostMapping("/batchDelete") + @ApiOperation("批量删除") + public ResponseResult editMessageTemplate(@RequestBody BatchDeletedRequest request) { + return ResponseResult.success(messageTemplateService.batchDeleteMessageTemplate(request, CurrentUserHolder.getUser())); + } + + @PostMapping("/batchPublish") + @ApiOperation("批量发布") + public ResponseResult batchPublishMessageTemplate(@RequestBody BatchPublishRequest request) { + return ResponseResult.success(messageTemplateService.batchPublishMessageTemplate(request, CurrentUserHolder.getUser())); + } + + @PostMapping("/getMessageTemplateList") + @ApiOperation("通知管理列表/事项管理列表") + public ResponseResult> getMessageTemplateList(@RequestBody MessageTemplateQueryRequest request) { + return ResponseResult.success(messageTemplateService.getMessageTemplateList(request)); + } + + @PostMapping("/getStoreMessageListByTemplateId") + @ApiOperation("进度管理") + public ResponseResult> getStoreMessageListByTemplateId(@RequestBody StoreMessageRequest request) { + return ResponseResult.success(messageTemplateService.getStoreMessageListByTemplateId(request)); + } + + @PostMapping("/batchRevokeNotice") + @ApiOperation("批量撤销") + public ResponseResult batchRevokeNotice(@RequestBody BatchRevokeRequest request) { + return ResponseResult.success(messageTemplateService.batchRevokeNotice(request,CurrentUserHolder.getUser())); + } + + @ApiOperation("撤销单个门店消息") + @GetMapping("/revokeById") + public ResponseResult revokeById(@RequestParam("id")Long id) { + return ResponseResult.success(messageTemplateService.revokeById(id,CurrentUserHolder.getUser())); + } + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniMessageTemplateController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniMessageTemplateController.java new file mode 100644 index 000000000..9d46ede11 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniMessageTemplateController.java @@ -0,0 +1,64 @@ +package com.cool.store.controller.webc; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.request.notice.StoreMessagePendingRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.MessageTemplateService; +import com.cool.store.vo.notice.MessageDetailVO; +import com.cool.store.vo.notice.ModuleAndMatterVO; +import com.cool.store.vo.notice.StoreMessageVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/7/27 21:04 + * @Version 1.0 + */ +@RestController +@RequestMapping("/mini/notice") +@Api(tags = "mini事项/通知管理") +@Slf4j +public class MiniMessageTemplateController { + + @Resource + private MessageTemplateService messageTemplateService; + + @ApiOperation("获取每个门店需要展示的模块") + @GetMapping("/getModuleListByStoreId") + public ResponseResult> getModuleListByStoreId(@RequestParam("id")String storeId) { + return ResponseResult.success(messageTemplateService.getModuleList(storeId, PartnerUserHolder.getUser())); + } + + @ApiOperation("获取消息详情") + @GetMapping("/getMessageDetail") + public ResponseResult getMessageDetail(@RequestParam("id")Long id) { + return ResponseResult.success(messageTemplateService.getMessageDetail(id)); + } + + @ApiOperation("待办列表/模块列表") + @PostMapping("/getStorePendingList") + public ResponseResult> getStorePendingList(@RequestBody StoreMessagePendingRequest request) { + return ResponseResult.success(messageTemplateService.getStorePendingList(request)); + } + + @ApiOperation("确认已读") + @GetMapping("/readMessage") + public ResponseResult readMessage(@RequestParam("id")Long id) { + return ResponseResult.success(messageTemplateService.readMessage(id, PartnerUserHolder.getUser())); + } + + @ApiOperation("确认已处理") + @GetMapping("/handleMessage") + public ResponseResult handleMessage(@RequestParam("id")Long id) { + return ResponseResult.success(messageTemplateService.handleMessage(id, PartnerUserHolder.getUser())); + } + +} diff --git a/coolstore-partner-web/src/main/resources/application-test.properties b/coolstore-partner-web/src/main/resources/application-test.properties index 57aa32c47..40fb95fc6 100644 --- a/coolstore-partner-web/src/main/resources/application-test.properties +++ b/coolstore-partner-web/src/main/resources/application-test.properties @@ -5,7 +5,7 @@ default.datasource.username=coolstore default.datasource.password=CSCErYcXniNYm7bT #redis -redis.host.uri=http://userInfo:Cx111111@tstore-coolcollege.redis.rds.aliyuncs.com:6379/0 +redis.host.uri=http://userInfo:Cx111111@tstore-coolcollege-open.redis.rds.aliyuncs.com:6379/0 #pagehelper pagehelper.helper-dialect=mysql