Merge branch 'master' into cc_20250905_storeExtendInfo

# Conflicts:
#	coolstore-partner-service/src/main/java/com/cool/store/service/impl/StoreServiceImpl.java
This commit is contained in:
wangff
2025-09-23 14:11:42 +08:00
38 changed files with 598 additions and 44 deletions

View File

@@ -298,6 +298,10 @@ public enum ErrorCodeEnum {
MESSAGE_TEMPLATE_NOT_SUPPORT_DELETED(1610002,"只有未发布的消息能删除,请确认!",null),
STORE_MESSAGE_REVOKE(1610003,"当前门店消息已撤销,请务重复操作",null),
STORE_MESSAGE_HANDLED(1610004,"当前门店消息已处理,无法撤销!",null),
MATTER_STORE_OR_USER_IS_NULL(1610005,"当前事项门店或者人员为空,发布失败,请确认!",null),
CONFIG_NOT_EXIST(1610006,"配置不存在或被禁用,请确认!",null),
MESSAGE_NOT_EXIST(1610007,"消息模板不存在或已被删除",null),
MESSAGE_NOT_HANDLED(1610008,"当前消息无需处理,请确认消息处理类型!",null),
NOT_FLAGSHIP_STORE(16100005,"非直营店,无法跳过缴费阶段!",null),

View File

@@ -10,6 +10,10 @@ public enum MatterTypeEnum {
QUESTION(0,"门店违规工单"),
LICENSE(1,"证照过期提醒"),
NOTICE(2,"通知消息"),
LOGISTICS(3,"物流"),
SERVICE_PACKAGE(4,"服务包"),
RESTOCK(5,"补货"),
INVENTORY(6,"盘点"),
;
MatterTypeEnum(Integer code, String message) {

View File

@@ -10,10 +10,13 @@ import java.util.List;
*/
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)),
STORE_WORK(0,"店务日清/培训", Arrays.asList(MatterTypeEnum.QUESTION,MatterTypeEnum.LICENSE)),
PRODUCT_UPDATE(1,"营销政策/产品上新",Arrays.asList(MatterTypeEnum.SERVICE_PACKAGE)),
INVENTORY_MODULE(2,"原料订货与库存管理",Arrays.asList(MatterTypeEnum.RESTOCK,MatterTypeEnum.INVENTORY,MatterTypeEnum.LOGISTICS)),
DISH(3,"菜品",Arrays.asList(MatterTypeEnum.NOTICE)),
FRANCHISE(4,"加盟",Arrays.asList(MatterTypeEnum.NOTICE)),
//其他(投诉与客户服务、临时通知)
OTHER(5,"其他",Arrays.asList(MatterTypeEnum.NOTICE)),
;
ModuleCodeEnum(Integer code, String message,List<MatterTypeEnum> matterTypeEnums) {

View File

@@ -7,8 +7,8 @@ package com.cool.store.enums.notice;
*/
public enum RemindTypeEnum {
CONTINUOUS_REMINDER(0,"持续提醒"),
STAGE_REMINDER(1,"阶段提醒"),
CONTINUOUS_REMINDER(1,"持续提醒"),
STAGE_REMINDER(2,"阶段提醒"),
;
RemindTypeEnum(Integer code, String message) {

View File

@@ -0,0 +1,85 @@
package com.cool.store.enums.notice;
/**
* @Author suzhuhong
* @Date 2025/8/26 15:43
* @Version 1.0
*/
public enum SceneEnum {
SUBMIT_ORDER(0, "提交订单", "https://oss-cool.coolstore.cn/eid/214ac5a3a517472a87268e02a2e6410a/2508/j_l6em.jpg", MatterTypeEnum.LOGISTICS),
ASSIGNED_PICKING(5, "已分配拣货", "https://oss-cool.coolstore.cn/eid/214ac5a3a517472a87268e02a2e6410a/2508/YLjBkv.jpg", MatterTypeEnum.LOGISTICS),
PICKING_COMPLETED(10, "拣货完成", "https://oss-cool.coolstore.cn/eid/214ac5a3a517472a87268e02a2e6410a/2508/gG9Y-h.jpg", MatterTypeEnum.LOGISTICS),
SHIPPED(15, "已出库", "https://oss-cool.coolstore.cn/eid/214ac5a3a517472a87268e02a2e6410a/2508/Ehz8_n.jpg", MatterTypeEnum.LOGISTICS),
DELIVERY_IN_PROGRESS(20, "配送中", "https://oss-cool.coolstore.cn/eid/214ac5a3a517472a87268e02a2e6410a/2508/I6bAmA.jpg", MatterTypeEnum.LOGISTICS),
ORDER_SIGNING_AND_ACCEPTANCE(25, "订单签收", "https://oss-cool.coolstore.cn/eid/214ac5a3a517472a87268e02a2e6410a/2508/0z7jkU.jpg", MatterTypeEnum.LOGISTICS),
SERVICE_PACKAGE(30, "服务包", "", MatterTypeEnum.LOGISTICS),
RESTOCK(35, "补货", "", MatterTypeEnum.LOGISTICS),
INVENTORY(40, "盘点", "", MatterTypeEnum.LOGISTICS),
;
private Integer sceneCode;
private String sceneName;
private String scenePicture;
private MatterTypeEnum matterTypeEnum;
public Integer getSceneCode() {
return sceneCode;
}
public void setSceneCode(Integer sceneCode) {
this.sceneCode = sceneCode;
}
public String getSceneName() {
return sceneName;
}
public void setSceneName(String sceneName) {
this.sceneName = sceneName;
}
public String getScenePicture() {
return scenePicture;
}
public void setScenePicture(String scenePicture) {
this.scenePicture = scenePicture;
}
public MatterTypeEnum getMatterTypeEnum() {
return matterTypeEnum;
}
public void setMatterTypeEnum(MatterTypeEnum matterTypeEnum) {
this.matterTypeEnum = matterTypeEnum;
}
SceneEnum(Integer sceneCode, String sceneName, String scenePicture, MatterTypeEnum matterTypeEnum) {
this.sceneCode = sceneCode;
this.sceneName = sceneName;
this.scenePicture = scenePicture;
this.matterTypeEnum = matterTypeEnum;
}
/**
* 通过code获取枚举
* @param code
* @return
*/
public static SceneEnum getByCode(Integer code) {
for (SceneEnum value : values()) {
if (value.sceneCode.equals(code)) {
return value;
}
}
return null;
}
}

View File

@@ -35,6 +35,7 @@ public class CoolDateUtils {
public static final String DATE_FORMAT_SEC_6 = "yyyy.MM.dd";
public static final String DATE_FORMAT_SEC_7 = "yyyy/MM/dd HH:mm";
public static final String DATE_FORMAT_SEC_8 = "yyyyMMdd";
public static final String DATE_FORMAT_SEC_9 = "yyyyMMddHHmmssSSS";
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@@ -70,7 +71,7 @@ public class CoolDateUtils {
}
public static void main(String[] args) {
// 创建一个Date对象
//创建一个Date对象
Date date = new Date();
// 将Date对象转换为LocalDate对象
@@ -146,6 +147,13 @@ public class CoolDateUtils {
return LocalDate.now().format(DATE_FORMATTER);
}
public static final String getTodayMillis(){
DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(DATE_FORMAT_SEC_9);
return LocalDateTime.now().format(DATE_FORMATTER);
}
/**
* 获取当前日期字符串 (yyyy-MM-dd)
*/

View File

@@ -56,6 +56,13 @@ public class EnterpriseUserDAO {
return enterpriseUserMapper.getUserInfoByUserIds(userIdList);
}
public List<EnterpriseUserDO> getUserInfoByUserMobileList(List<String> mobileList) {
if (CollectionUtils.isEmpty(mobileList)) {
return Lists.newArrayList();
}
return enterpriseUserMapper.getUserInfoByUserMobileList(mobileList);
}
public List<EnterpriseUserDO> searchUserByRegionIdsAndKeyword(List<String> regionIds, String keyword, List<String> leaderRegionIds) {
if (CollectionUtils.isEmpty(regionIds)) {
return Lists.newArrayList();

View File

@@ -71,6 +71,13 @@ public class MessageTemplateDAO {
return messageTemplateMapper.batchUpdatePublishStatus(ids);
}
public MessageTemplateDO getByKeyword(String keyword) {
if (keyword == null){
return null;
}
return messageTemplateMapper.getByKeyword(keyword);
}
}

View File

@@ -72,8 +72,8 @@ public class StoreDao {
}
public List<StoreDO> list() {
return storeMapper.list();
public List<StoreDO> list(Integer isIot) {
return storeMapper.list(isIot);
}
public List<StoreDO> getStoreNumByStoreCodes(List<String> storeCodeIds) {

View File

@@ -87,4 +87,11 @@ public class StoreMessageDAO {
public MessageDetailVO getMessageDetail(Long id){
return storeMessageMapper.getMessageDetail(id);
}
public Integer batchUpdateHandle(Long id, List<String> storeCodeList){
if (id==null||CollectionUtils.isEmpty(storeCodeList)){
return 0;
}
return storeMessageMapper.batchUpdateHandle(id,storeCodeList);
}
}

View File

@@ -32,6 +32,8 @@ public interface EnterpriseUserMapper {
*/
List<EnterpriseUserDO> getUserInfoByUserIds( @Param("userIdList") List<String> userIdList);
List<EnterpriseUserDO> getUserInfoByUserMobileList( @Param("mobileList") List<String> mobileList);
/**
* 根据关键字搜索部门下的用户
* @param regionIds

View File

@@ -3,6 +3,7 @@ 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.entity.StoreMessageDO;
import com.cool.store.request.notice.MessageTemplateQueryRequest;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
@@ -25,6 +26,11 @@ public interface MessageTemplateMapper extends Mapper<MessageTemplateDO> {
int batchUpdatePublishStatus(@Param("ids") List<Long> ids);
/**
* 根据关键词查询
* @param keyword
* @return
*/
MessageTemplateDO getByKeyword(@Param("keyword") String keyword);
}

View File

@@ -39,7 +39,7 @@ public interface StoreMapper {
* 分页查询门店数据
* @return
*/
List<StoreDO> list();
List<StoreDO> list(@Param("isIot") Integer isIot);
List<StoreAreaDTO> getStoreAreaList( @Param("storeIds") List<String> storeIds);

View File

@@ -35,4 +35,11 @@ public interface StoreMessageMapper extends Mapper<StoreMessageDO> {
MessageDetailVO getMessageDetail(Long id);
/**
* 批量更新处理
* @param id
* @param storeCodeList
*/
int batchUpdateHandle(@Param("id") Long id, @Param("storeCodeList") List<String> storeCodeList);
}

View File

@@ -83,6 +83,21 @@
</where>
</select>
<select id="getUserInfoByUserMobileList" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>,
<include refid="Blob_Column_List"/>
from
enterprise_user_${enterpriseId}
<where>
<if test="mobileList !=null and mobileList.size>0">
<foreach collection="mobileList" item="mobile" open="and mobile in (" close=")" separator=",">
#{mobile}
</foreach>
</if>
</where>
</select>
<select id="searchUserByRegionIdsAndKeyword" resultMap="BaseResultMap">
select
user_id, name, mobile

View File

@@ -75,7 +75,11 @@
publish_time as publishTime,
publisher_user_id as publishUserId,
create_user_id as createUserId,
create_time as createTime
create_time as createTime,
handle_person_info as handlePersonInfo,
jump_type as jumpType,
jump_url as jumpUrl,
store_info as storeInfo
FROM zxjp_message_template
WHERE deleted = 0
<if test="request.moduleCode != null">
@@ -127,4 +131,14 @@
</foreach>
</update>
<select id="getByKeyword" resultMap="BaseResultMap">
SELECT
*
FROM zxjp_message_template
WHERE deleted = 0
<if test="keyword != null and keyword != ''">
AND handle_keyword = #{keyword,jdbcType=VARCHAR}
</if>
</select>
</mapper>

View File

@@ -44,6 +44,11 @@
<result column="join_brand" property="joinBrand" jdbcType="TINYINT"/>
<result column="store_type" property="storeType" jdbcType="TINYINT"/>
<result column="mini_program_order_store_name" property="miniProgramOrderStoreName"/>
<result column="is_iot" property="isIot" jdbcType="TINYINT"/>
<result column="addressee_name" property="addresseeName" jdbcType="VARCHAR"/>
<result column="addressee_mobile" property="addresseeMobile" jdbcType="VARCHAR"/>
<result column="addressee_area" property="addresseeArea" jdbcType="VARCHAR"/>
<result column="addressee_address" property="addresseeAddress" jdbcType="VARCHAR"/>
</resultMap>
<select id="getByStoreId" resultMap="BaseResultMap">
@@ -161,7 +166,12 @@
<select id="list" resultMap="BaseResultMap">
select *
from store_${enterpriseId} where is_delete = 'effective' order by id asc
from store_${enterpriseId}
where is_delete = 'effective'
<if test="isIot != null">
AND is_iot = #{isIot}
</if>
order by id asc
</select>
<select id="getStoreAreaList" resultType="com.cool.store.dto.store.StoreAreaDTO">

View File

@@ -160,9 +160,12 @@
a.process_status as processStatus,
a.create_time as createTime,
b.module_code as moduleCode,
b.matter_type as matterType,
b.message_title as messageTitle,
b.message_image as messageImage,
b.today_task as todayTask
b.today_task as todayTask,
b.jump_type as jumpType,
b.jump_url as jumpUrl
from zxjp_store_message a
left join zxjp_message_template b on a.message_template_id = b.id
<where>
@@ -205,7 +208,8 @@
b.deadline as deadline,
b.publisher_user_id as publishUserId,
b.message_content as messageContent,
b.process_type as processType
b.process_type as processType,
b.handle_keyword as handleKeyword
from
zxjp_store_message a
left join zxjp_message_template b on a.message_template_id = b.id
@@ -213,6 +217,24 @@
a.id = #{id}
</select>
<update id="batchUpdateHandle">
UPDATE zxjp_store_message
SET
process_status = 1,
process_time = NOW(),
read_status = 1,
read_time = NOW(),
update_time = NOW()
<where>
<if test="id != null">
AND message_template_id = #{id}
</if>
and store_code IN
<foreach item="item" collection="storeCodeList" index="index" separator="," close=")" open="(">
#{item}
</foreach>
</where>
</update>

View File

@@ -43,4 +43,13 @@ public class StoreDTO {
private String longitude;
private String latitude;
@ApiModelProperty("订货人")
private String addresseeName;
@ApiModelProperty("手机号")
private String addresseeMobile;
@ApiModelProperty("收件省市区")
private String addresseeArea;
@ApiModelProperty("订货地址")
private String addresseeAddress;
}

View File

@@ -0,0 +1,25 @@
package com.cool.store.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* <p>
* 门店名称DTO
* </p>
*
* @author wangff
* @since 2025/9/16
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StoreNameDTO {
@ApiModelProperty("门店名称")
private String storeName;
@ApiModelProperty("门店编码")
private String storeNum;
}

View File

@@ -75,4 +75,12 @@ public class NoticeDTO {
@ApiModelProperty("发布人时间")
private Date publishTime;
private String handlePersonInfo;
private String storeInfo;
private Integer jumpType;
private String jumpUrl;
}

View File

@@ -151,5 +151,13 @@ public class MessageTemplateDO {
@Column(name = "store_info")
private String storeInfo;
@Column(name = "jump_type")
private Integer jumpType;
@Column(name = "jump_url")
private String jumpUrl;
@Column(name = "handle_keyword")
private String handleKeyword;
}

View File

@@ -238,5 +238,28 @@ public class StoreDO {
private String miniProgramOrderStoreName;
/**
* 是否接入物联网
*/
private Integer isIot;
/**
* 收件人
*/
private String addresseeName;
/**
* 手机号
*/
private String addresseeMobile;
/**
* 收件省市区
*/
private String addresseeArea;
/**
* 收件详细地址
*/
private String addresseeAddress;
}

View File

@@ -219,6 +219,8 @@ public class ZxjpApiRequest {
private Long shopId;
@ApiModelProperty("合同编号")
private String contractCode;

View File

@@ -28,13 +28,13 @@ public class MatterConfigAddRequest {
private String systemSource;
@ApiModelProperty( "1:H5 2:小程序")
private Boolean jumpType;
private Integer jumpType;
@ApiModelProperty( "跳转链接")
private String jumpUrl;
@ApiModelProperty( "状态(0:禁用 1:启用)")
private Boolean status;
private Integer status;
@ApiModelProperty( "备注")
private String remark;

View File

@@ -0,0 +1,26 @@
package com.cool.store.request.notice;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @Author suzhuhong
* @Date 2025/8/29 11:10
* @Version 1.0
*/
@Data
public class ThirdHandleMessageRequest {
@ApiModelProperty("发起任务时 传的handleKeyword")
@NotBlank(message = "handleKeyword不能为空")
private String handleKeyword;
@ApiModelProperty("门店编码列表")
@NotNull(message = "门店编码列表不能为空")
private List<String> shopCodeList;
}

View File

@@ -0,0 +1,66 @@
package com.cool.store.request.notice;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
/**
* @Author suzhuhong
* @Date 2025/8/26 16:10
* @Version 1.0
*/
@Data
public class ThirdMatterRequest {
@ApiModelProperty("0-提交订单 5-已分配拣货 10-拣货完成 15-已出库 20-配送中 25-订单签收 30-服务包发布 35-补货 40-盘点通知 ")
@NotNull(message = "场景不能为空")
private Integer sceneCode;
@ApiModelProperty("事项配置ID CRM配置好部分信息 找CRM提供")
@NotNull(message = "事项配置ID不能为空")
private Long matterConfigId;
@ApiModelProperty("事项标题")
@NotBlank(message = "事项标题不能为空")
private String matterTitle;
@ApiModelProperty("处理类型(1:仅阅读 2:需要处理)")
@NotNull(message = "处理类型不能为空")
private Integer processType;
@ApiModelProperty("提醒类型(1:持续提醒 2:阶段提醒)")
@NotNull(message = "提醒类型不能为空")
private Integer remindType;
@ApiModelProperty("阶段提醒时 需要设置时间范围 开始时间")
private Date remindStartTime;
@ApiModelProperty("阶段提醒时 需要设置时间范围 结束时间")
private Date remindEndTime;
@ApiModelProperty("截止时间")
private Date deadline;
@ApiModelProperty("今日必办标识 0非必办 1必办")
@NotNull(message = "今日必办标识不能为空")
private Integer todayTask;
@ApiModelProperty("消息图片URL 物流crm自动匹配 无需传递")
private String messageImage;
@ApiModelProperty("门店范围 如果不传 默认取matterConfigId对应的门店范围 如果都没有 任务处于待发布状态")
List<String> shopCodeList;
@ApiModelProperty("手机号列表 如果不传 默认取matterConfigId配置的人员信息 如果都没有 任务处于待发布状态")
List<String> mobileList;
private String jumpUrl;
@ApiModelProperty("处理关键字 针对processType需要处理的字段 需要传递该关键字识别 注意 每个批次门店任务keyword不能重复")
private String handleKeyword;
}

View File

@@ -39,5 +39,7 @@ public class MessageDetailVO {
private Integer processStatus;
private Integer processType;
@ApiModelProperty("第三方id")
private String handleKeyword;
}

View File

@@ -51,6 +51,8 @@ public class MessageTemplateDetailVO {
private Integer totalNum;
@ApiModelProperty("系统来源")
private String systemSource;
@ApiModelProperty("第三方id")
private String handleKeyword;
}

View File

@@ -13,9 +13,11 @@ import java.util.Date;
@Data
public class StoreMessageVO {
private Long id;
@ApiModelProperty("模版COde")
@ApiModelProperty("模版Code")
private Integer moduleCode;
private Integer matterType;
@ApiModelProperty("模版ID")
private Long templateId;
@ApiModelProperty("已读状态")
@@ -33,4 +35,10 @@ public class StoreMessageVO {
@ApiModelProperty("今日必办")
private Integer todayTask;
private Integer jumpType;
private String jumpUrl;
private String resource;
}

View File

@@ -3,6 +3,7 @@ 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.response.bigdata.ApiResponse;
import com.cool.store.vo.PartnerUserInfoVO;
import com.cool.store.vo.notice.*;
import com.github.pagehelper.PageInfo;
@@ -51,11 +52,17 @@ public interface MessageTemplateService {
/**
* batch 批量发布
* @param request
* @param user
* @param userId
* @return
*/
Boolean batchPublishMessageTemplate(BatchPublishRequest request, LoginUserInfo user);
Boolean batchPublishMessageTemplate(BatchPublishRequest request, String userId);
/**
* thirdMatterHandle 第三方接口处理
* @param thirdMatterRequest
* @return
*/
ApiResponse<Boolean> thirdMatterHandle(ThirdMatterRequest thirdMatterRequest);
/**
* 获取列表
@@ -95,4 +102,5 @@ public interface MessageTemplateService {
Boolean handleMessage(Long id, PartnerUserInfoVO userInfoVO);
ApiResponse<Boolean> thirdHandleMessage(ThirdHandleMessageRequest request);
}

View File

@@ -1,6 +1,7 @@
package com.cool.store.service;
import com.cool.store.dto.StoreDTO;
import com.cool.store.dto.StoreNameDTO;
import com.cool.store.dto.store.AuthStoreUserDTO;
import com.cool.store.dto.store.StoreUserPositionDTO;
import com.cool.store.response.MiniShopsResponse;
@@ -24,6 +25,11 @@ public interface StoreService {
*/
PageInfo<StoreDTO> getStoreExtendFieldInfo(Integer pageSize,Integer pageNum);
/**
* 分页查询接入物联网的门店
*/
PageInfo<StoreNameDTO> getIotStoreList(Integer pageNum, Integer pageSize);
PageInfo<MiniShopsResponse> getStoreListByMobile(String mobile,Integer pageNum,Integer pageSize,String storeName,String storeNum);
List<StoreUserPositionDTO> getStoreUser(List<String> storeCodeList);

View File

@@ -5,6 +5,8 @@ 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.enums.ErrorCodeEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.request.notice.MatterConfigAddRequest;
import com.cool.store.request.notice.MatterConfigQueryRequest;
import com.cool.store.service.MatterConfigService;
@@ -36,19 +38,30 @@ public class MatterConfigServiceImpl implements MatterConfigService {
MatterConfigDO matterConfigDO = new MatterConfigDO();
BeanUtils.copyProperties(request, matterConfigDO);
matterConfigDO.setCreateUserId(currentUser.getUserId());
if (CollectionUtils.isNotEmpty(request.getStoreInfoList())){
matterConfigDO.setDefaultStoreInfo(JSONObject.toJSONString(request.getStoreInfoList()));
}
if (CollectionUtils.isNotEmpty(request.getUserInfoList())){
matterConfigDO.setDefaultHandlePersonInfo(JSONObject.toJSONString(request.getUserInfoList()));
}
return matterConfigDAO.insert(matterConfigDO);
}
@Override
public int editMatterConfig(MatterConfigAddRequest request, LoginUserInfo currentUser) {
if (request.getId() == null){
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR);
}
MatterConfigDO matterConfigDO = new MatterConfigDO();
BeanUtils.copyProperties(request, matterConfigDO);
matterConfigDO.setUpdateUserId(currentUser.getUserId());
matterConfigDO.setUpdateTime(new Date());
if (CollectionUtils.isNotEmpty(request.getStoreInfoList())){
matterConfigDO.setDefaultStoreInfo(JSONObject.toJSONString(request.getStoreInfoList()));
}
if (CollectionUtils.isNotEmpty(request.getUserInfoList())){
matterConfigDO.setDefaultHandlePersonInfo(JSONObject.toJSONString(request.getUserInfoList()));
}
return matterConfigDAO.updateForce(matterConfigDO);
}

View File

@@ -4,10 +4,7 @@ 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.dao.*;
import com.cool.store.dto.notice.CommonDTO;
import com.cool.store.dto.notice.MessageTemplateCountDTO;
import com.cool.store.dto.notice.NoticeDTO;
@@ -20,6 +17,7 @@ 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.response.bigdata.ApiResponse;
import com.cool.store.service.MessageTemplateService;
import com.cool.store.service.StoreService;
import com.cool.store.utils.CoolDateUtils;
@@ -65,6 +63,8 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
StoreMessageDAO storeMessageDAO;
@Resource
EnterpriseUserDAO enterpriseUserDAO;
@Resource
MatterConfigDAO matterConfigDAO;
@@ -82,8 +82,8 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
public String getMessageTemplateCode() {
//当前日期
String today = CoolDateUtils.getToday();
return "16" + today + String.format("%04d", ThreadLocalRandom.current().nextInt(10000));
String today = CoolDateUtils.getTodayMillis();
return "16" + today + String.format("%04d", ThreadLocalRandom.current().nextInt(100));
}
@Override
@@ -135,7 +135,7 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
@Override
public Boolean batchPublishMessageTemplate(BatchPublishRequest request, LoginUserInfo user) {
public Boolean batchPublishMessageTemplate(BatchPublishRequest request, String userId) {
if (CollectionUtils.isEmpty(request.getIds())||CollectionUtils.isEmpty(request.getStoreInfoList())||CollectionUtils.isEmpty(request.getUserInfoList())){
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
}
@@ -180,11 +180,107 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
messageTemplateDAO.batchUpdateStoreInfoAndUserInfo(updateIds,
JSONObject.toJSONString(request.getStoreInfoList()),
JSONObject.toJSONString(request.getUserInfoList()),
user.getUserId());
userId);
return Boolean.TRUE;
}
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResponse<Boolean> thirdMatterHandle(ThirdMatterRequest thirdMatterRequest) {
log.info("thirdMatterHandle request{}", JSONObject.toJSONString(thirdMatterRequest));
//第三方事项处理
MatterConfigDO matterConfig = matterConfigDAO.getById(thirdMatterRequest.getMatterConfigId());
if (matterConfig==null||matterConfig.getStatus()==0){
return ApiResponse.error(ErrorCodeEnum.CONFIG_NOT_EXIST);
}
//封装事项模版
MessageTemplateDO messageTemplateDO = new MessageTemplateDO();
messageTemplateDO.setMessageCode(getMessageTemplateCode());
messageTemplateDO.setModuleCode(matterConfig.getModuleCode());
messageTemplateDO.setMatterType(matterConfig.getMatterType());
messageTemplateDO.setMessageTitle(thirdMatterRequest.getMatterTitle());
messageTemplateDO.setSystemSource(matterConfig.getSystemSource());
messageTemplateDO.setProcessType(thirdMatterRequest.getProcessType());
messageTemplateDO.setRemindType(thirdMatterRequest.getRemindType());
if (RemindTypeEnum.STAGE_REMINDER.getCode().equals(thirdMatterRequest.getRemindType())){
messageTemplateDO.setRemindStartTime(thirdMatterRequest.getRemindStartTime());
messageTemplateDO.setRemindEndTime(thirdMatterRequest.getRemindEndTime());
}
messageTemplateDO.setDeadline(thirdMatterRequest.getDeadline());
messageTemplateDO.setTodayTask(thirdMatterRequest.getTodayTask());
messageTemplateDO.setMessageImage(thirdMatterRequest.getMessageImage());
messageTemplateDO.setPublishStatus(PublishStatusEnum.UNPUBLISHED.getCode());
messageTemplateDO.setJumpType(matterConfig.getJumpType());
messageTemplateDO.setJumpUrl(matterConfig.getJumpUrl());
messageTemplateDO.setHandleKeyword(thirdMatterRequest.getHandleKeyword());
if (MatterTypeEnum.LOGISTICS.getCode().equals(matterConfig.getMatterType())){
SceneEnum scene = SceneEnum.getByCode(thirdMatterRequest.getSceneCode());
messageTemplateDO.setMessageImage(scene.getScenePicture());
//物流直接使用传过来的地址
messageTemplateDO.setJumpUrl(thirdMatterRequest.getJumpUrl());
}
//如果是盘点 截止日期去当天
if (MatterTypeEnum.INVENTORY.getCode().equals(matterConfig.getMatterType())){
messageTemplateDO.setDeadline(new Date());
}
String storeInfo = matterConfig.getDefaultStoreInfo();
String userInfo = matterConfig.getDefaultHandlePersonInfo();
//门店
if (CollectionUtils.isNotEmpty(thirdMatterRequest.getShopCodeList())){
log.info("shopCodeList:{}",JSONObject.toJSONString(thirdMatterRequest.getShopCodeList()));
List<StoreDO> storeNumByStoreCodes = storeMapper.getStoreNumByStoreCodes(thirdMatterRequest.getShopCodeList());
if (CollectionUtils.isNotEmpty(storeNumByStoreCodes)){
//组装成门店信息
List<CommonDTO> storeList = new ArrayList<>();
storeNumByStoreCodes.forEach(x -> {
CommonDTO store = new CommonDTO("store", x.getStoreId(), x.getStoreName());
storeList.add(store);
});
storeInfo = JSONObject.toJSONString(storeList);
}
}
//人员
List<EnterpriseUserDO> userInfoByUserMobileList = enterpriseUserDAO.getUserInfoByUserMobileList(thirdMatterRequest.getMobileList());
if (CollectionUtils.isNotEmpty(userInfoByUserMobileList)){
//组装人员信息
List<CommonDTO> userList = new ArrayList<>();
userInfoByUserMobileList.forEach(x -> {
CommonDTO user = new CommonDTO("person", x.getUserId(), x.getName());
userList.add(user);
});
userInfo = JSONObject.toJSONString(userList);
}
Boolean publishFlag = Boolean.TRUE;
//校验是否发布
if (StringUtils.isEmpty(userInfo)|| StringUtils.isEmpty(storeInfo)){
publishFlag = Boolean.FALSE;
}
messageTemplateDO.setCreateUserId("system");
if (!publishFlag){
//如果不发布 保存门店人员信息
messageTemplateDO.setStoreInfo(storeInfo);
messageTemplateDO.setHandlePersonInfo(userInfo);
}
messageTemplateDAO.insert(messageTemplateDO);
//调用发布
if (publishFlag){
//开始计算人员门店
BatchPublishRequest batchPublishRequest = new BatchPublishRequest();
batchPublishRequest.setIds(Arrays.asList(messageTemplateDO.getId()));
batchPublishRequest.setStoreInfoList(JSONObject.parseArray(storeInfo, CommonDTO.class));
batchPublishRequest.setUserInfoList(JSONObject.parseArray(userInfo, CommonDTO.class));
try {
batchPublishMessageTemplate(batchPublishRequest,"");
} catch (ServiceException e) {
return new ApiResponse(e.getErrorCode(), e.getErrorMessage(), null);
}
return ApiResponse.success(Boolean.TRUE);
}
return ApiResponse.success(Boolean.TRUE);
}
@Override
public PageInfo<NoticeDTO> getMessageTemplateList(MessageTemplateQueryRequest request) {
@@ -312,8 +408,10 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
MessageDetailVO messageDetailVO = storeMessageDAO.getMessageDetail(id);
if (messageDetailVO!=null&&messageDetailVO.getPublishUserId()!=null){
EnterpriseUserDO userInfoById = enterpriseUserDAO.getUserInfoById(messageDetailVO.getPublishUserId());
if (userInfoById != null){
messageDetailVO.setPublishUserName(userInfoById.getName());
}
}
return messageDetailVO;
}
@@ -358,6 +456,20 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
return Boolean.TRUE;
}
@Override
public ApiResponse<Boolean> thirdHandleMessage(ThirdHandleMessageRequest request) {
log.info("thirdHandleMessage request:{}", JSONObject.toJSONString(request));
MessageTemplateDO message = messageTemplateDAO.getByKeyword(request.getHandleKeyword());
if (message==null){
return ApiResponse.error(ErrorCodeEnum.MESSAGE_NOT_EXIST);
}
if (!ProcessTypeEnum.HANDLE.getCode().equals(message.getProcessType())){
return ApiResponse.error(ErrorCodeEnum.MESSAGE_NOT_HANDLED);
}
storeMessageDAO.batchUpdateHandle(message.getId(), request.getShopCodeList());
return ApiResponse.success(Boolean.TRUE);
}
public Map<String, List<String>> getAuthUser(List<CommonDTO> personInfo, List<String> storeIds){
if (CollectionUtils.isEmpty(personInfo)){

View File

@@ -1,9 +1,11 @@
package com.cool.store.service.impl;
import cn.hutool.core.collection.CollStreamUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.dto.StoreNameDTO;
import com.cool.store.dao.store.StoreMasterSignerInfoDAO;
import com.cool.store.dto.store.AuthStoreUserDTO;
import com.cool.store.dao.EnterpriseUserDAO;
@@ -82,7 +84,7 @@ public class StoreServiceImpl implements StoreService {
throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE,"单次最多获取200条门店数据");
}
PageHelper.startPage(pageNum,pageSize);
List<StoreDO> list = storeDao.list();
List<StoreDO> list = storeDao.list(null);
PageInfo info = new PageInfo<>(list);
if (CollectionUtils.isEmpty(list)){
return info;
@@ -92,6 +94,22 @@ public class StoreServiceImpl implements StoreService {
return info;
}
@Override
public PageInfo<StoreNameDTO> getIotStoreList(Integer pageNum, Integer pageSize) {
if (pageSize > 200) {
throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE, "单次最多获取200条门店数据");
}
PageHelper.startPage(pageNum, pageSize);
List<StoreDO> list = storeDao.list(1);
PageInfo info = new PageInfo<>(list);
if (CollectionUtils.isEmpty(list)){
return info;
}
List<StoreNameDTO> result = list.stream().map(v -> new StoreNameDTO(v.getStoreName(), v.getStoreNum())).collect(Collectors.toList());
info.setList(result);
return info;
}
@Override
public PageInfo<MiniShopsResponse> getStoreListByMobile(String mobile,Integer pageNum,Integer pageSize,String storeName,String storeNum) {
//根据手机号查询 标品userId
@@ -362,22 +380,13 @@ public class StoreServiceImpl implements StoreService {
public static List<StoreDTO> processStores(List<StoreDO> stores) {
// 处理每个门店
return stores.stream().map(store -> {
StoreDTO dto = new StoreDTO();
dto.setStoreName(store.getStoreName());
StoreDTO dto = BeanUtil.toBean(store, StoreDTO.class);
dto.setStoreCode(store.getStoreNum());
dto.setStoreAddress(store.getStoreAddress());
dto.setStoreAvatar(store.getAvatar());
dto.setTelephone(store.getTelephone());
dto.setMonthlyRent(store.getMonthlyRent());
dto.setMonthlyPersonnelSalary(store.getMonthlyPersonnelSalary());
dto.setMonthlyOtherExpenses(store.getMonthlyOtherExpenses());
dto.setUnifiedManagement(store.getUnifiedManagement());
dto.setStoreType(StoreTypeEnum.getMessage(store.getStoreType()));
dto.setJoinMode(JoinModeEnum.getByCode(store.getJoinModel()));
dto.setBrand(FranchiseBrandEnum.getDescByCode(store.getJoinBrand()));
dto.setOrderMiniProgramName(store.getMiniProgramOrderStoreName());
dto.setLongitude(store.getLongitude());
dto.setLatitude(store.getLatitude());
return dto;
}).collect(Collectors.toList());
}

View File

@@ -119,6 +119,7 @@ public class SyncDataServiceImpl implements SyncDataService {
}
request.setPartnershipSignatory(partnershipSignatory);
request.setBusinessModel(signFranchiseDO.getBusinessModel());
request.setContractCode(signFranchiseDO.getContractCode());
}
request.setPartnerMobile(lineInfoDO.getMobile());
request.setShopCode(shopInfo.getShopCode());

View File

@@ -59,7 +59,7 @@ public class MessageTemplateController {
@PostMapping("/batchPublish")
@ApiOperation("批量发布")
public ResponseResult<Boolean> batchPublishMessageTemplate(@RequestBody BatchPublishRequest request) {
return ResponseResult.success(messageTemplateService.batchPublishMessageTemplate(request, CurrentUserHolder.getUser()));
return ResponseResult.success(messageTemplateService.batchPublishMessageTemplate(request, CurrentUserHolder.getUser().getUserId()));
}
@PostMapping("/getMessageTemplateList")

View File

@@ -1,11 +1,14 @@
package com.cool.store.controller.webb;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.context.PartnerUserHolder;
import com.cool.store.dto.*;
import com.cool.store.dto.store.StoreUserPositionDTO;
import com.cool.store.request.OpenApiStoreRequest;
import com.cool.store.request.StoreCodeDTO;
import com.cool.store.request.*;
import com.cool.store.request.notice.ThirdHandleMessageRequest;
import com.cool.store.request.notice.ThirdMatterRequest;
import com.cool.store.request.xgj.FranchiseFeeCallBackRequest;
import com.cool.store.request.xgj.ReceiptCallBackRequest;
import com.cool.store.response.ResponseResult;
@@ -44,6 +47,8 @@ public class OpenApiController {
ShopAccountService shopAccountService;
@Resource
StoreService storeService;
@Resource
MessageTemplateService messageTemplateService;
@PostMapping("/statusRefresh")
public ApiResponse<Boolean> statusRefresh(@RequestBody StatusRefreshDTO statusRefreshDTO){
@@ -63,6 +68,13 @@ public class OpenApiController {
public ApiResponse<PageInfo<StoreDTO>> getStoreList(@RequestBody @Validated OpenApiStoreRequest dto) {
return ApiResponse.success(storeService.getStoreExtendFieldInfo(dto.getPageSize(),dto.getPageNum()));
}
@ApiOperation("获取接入物联网门店信息")
@PostMapping("/getIoTStoreList")
public ApiResponse<PageInfo<StoreNameDTO>> getIotStoreList(@RequestBody @Validated OpenApiStoreRequest dto) {
return ApiResponse.success(storeService.getIotStoreList(dto.getPageNum(), dto.getPageSize()));
}
@ApiOperation("新管家回调 刷新收款单状态")
@PostMapping("/changeReceiptStatus")
public ApiResponse<Boolean> changeReceiptStatus(@RequestBody @Validated ReceiptCallBackRequest request){
@@ -151,4 +163,17 @@ public class OpenApiController {
return ApiResponse.success(decorationDesignInfoService.decorationAcceptance(request));
}
@ApiOperation("事项处理")
@PostMapping("/matterHandle")
public ApiResponse<Boolean> thirdMatterHandle(@RequestBody @Validated ThirdMatterRequest request) {
log.info("thirdMatterHandle request{}", JSONObject.toJSONString(request));
return messageTemplateService.thirdMatterHandle(request);
}
@ApiOperation("确认已处理")
@PostMapping("/handleMessage")
public ApiResponse<Boolean> handleMessage(@RequestBody @Validated ThirdHandleMessageRequest request) {
return messageTemplateService.thirdHandleMessage(request);
}
}