Merge #126 into master from cc_20260408_close_up
歇业管理逻辑修改
* cc_20260408_close_up: (31 commits squashed)
- fix:歇业管理(部分)
- fix:歇业管理(部分)
- fix:审批逻辑修改;拒绝审批实现
- fix:恢复开业申请及审批
- fix:主流程补充
- fix:主流程补充
- fix:字段补充及逻辑修改
- fix:字段补充
- fix
- fix:平台处理新增字段
- fix
- Merge remote-tracking branch 'origin/cc_20260408_close_up' into cc_20260408_close_up
- fix:歇业营业发送短信
- fix:排序
- fix:详情接口新增加盟商手机号字段;申请单日期和已有申请单存在交集时申请失败
- fix:申请单详情接口新增品牌字段
- fix:新增列表筛选条件;审批单状态校验
- Merge branch 'master' into cc_20260408_close_up
# Conflicts:
#	coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java
- fix:歇业对接三方平台
- fix:歇业对接三方平台
- fix:日志
- fix:歇业后自动恢复营业;抖音自动歇业三方对接
- fix:歇业后自动恢复营业;抖音自动歇业三方对接
- fix:火码平台账号处理状态初始化为已处理
- Merge remote-tracking branch 'origin/cc_20260408_close_up' into cc_20260408_close_up
- fix:歇业管理逻辑修改
- Merge branch 'cc_20260511_close_up_modify' into cc_20260408_close_up
# Conflicts:
#	coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java
#	coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java
#	coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java
#	coolstore-partner-common/src/main/java/com/cool/store/enums/closeup/CloseUpPlatformEnum.java
#	coolstore-partner-dao/src/main/java/com/cool/store/dao/closeup/CloseUpPlatformDAO.java
#	coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java
#	coolstore-partner-dao/src/main/java/com/cool/store/mapper/closeup/CloseUpPlatformMapper.java
#	coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml
#	coolstore-partner-dao/src/main/resources/mapper/closeup/CloseUpApplyFormMapper.xml
#	coolstore-partner-dao/src/main/resources/mapper/closeup/CloseUpPlatformMapper.xml
#	coolstore-partner-model/src/main/java/com/cool/store/entity/closeup/CloseUpApplyFormDO.java
#	coolstore-partner-model/src/main/java/com/cool/store/entity/closeup/CloseUpPlatformDO.java
#	coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java
#	coolstore-partner-service/src/main/java/com/cool/store/service/closeup/CloseUpService.java
#	coolstore-partner-service/src/main/java/com/cool/store/service/closeup/impl/CloseUpServiceImpl.java
#	coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java
#	coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java
#	coolstore-partner-web/src/main/resources/application-ab.properties
#	coolstore-partner-web/src/main/resources/application-local.properties
#	coolstore-partner-web/src/main/resources/application-online.properties
#	coolstore-partner-web/src/main/resources/application-test.properties
- fix:合并冲突
- Merge branch 'master' into cc_20260408_close_up
- fix:火码歇业时机修改
- fix
Signed-off-by: 王非凡 <accounts_67eba0c5fee9c49c80c8e2b4@mail.teambition.com>
Merged-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>
CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/126
This commit is contained in:
@@ -423,7 +423,7 @@ public enum ErrorCodeEnum {
|
|||||||
CLOSE_STORE_REFUND_MK_USER_NOT_EXIST(1710016, "当前用户不存在每刻权限", null),
|
CLOSE_STORE_REFUND_MK_USER_NOT_EXIST(1710016, "当前用户不存在每刻权限", null),
|
||||||
CLOSE_STORE_REFUND_EXIST_EFFECTIVE_RECORD(1710017, "存在生效中的退款申请!", null),
|
CLOSE_STORE_REFUND_EXIST_EFFECTIVE_RECORD(1710017, "存在生效中的退款申请!", null),
|
||||||
CLOSE_STORE_REFUND_TYPE_ERROR(1710018, "退款类型错误", null),
|
CLOSE_STORE_REFUND_TYPE_ERROR(1710018, "退款类型错误", null),
|
||||||
CLOSE_STORE_ONLY_SUPPORT_OPEN(1710019, "仅支持在营或暂停营业的门店发起闭店申请", null),
|
CLOSE_STORE_ONLY_SUPPORT_OPEN(1710019, "仅支持在营门店发起闭店申请", null),
|
||||||
CLOSE_STORE_ONLY_APPROVAL_ENABLE_SUSPEND(1710020, "仅审批中申请允许中止", null),
|
CLOSE_STORE_ONLY_APPROVAL_ENABLE_SUSPEND(1710020, "仅审批中申请允许中止", null),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ public enum RocketMqGroupEnum {
|
|||||||
VISIT_RECORD_INVALID("visit_record_invalid", new ArrayList<>(Arrays.asList(RocketMqTagEnum.VISIT_RECORD_INVALID))),
|
VISIT_RECORD_INVALID("visit_record_invalid", new ArrayList<>(Arrays.asList(RocketMqTagEnum.VISIT_RECORD_INVALID))),
|
||||||
TP_PENALTY_APPEAL_OVERDUE("tp_penalty_appeal_overdue", new ArrayList<>(Arrays.asList(RocketMqTagEnum.TP_PENALTY_APPEAL_OVERDUE))),
|
TP_PENALTY_APPEAL_OVERDUE("tp_penalty_appeal_overdue", new ArrayList<>(Arrays.asList(RocketMqTagEnum.TP_PENALTY_APPEAL_OVERDUE))),
|
||||||
CLOSE_UP_APPLY_STORE_UPDATE("close_up_apply_store_update", new ArrayList<>(Arrays.asList(RocketMqTagEnum.CLOSE_UP_APPLY_STORE_UPDATE))),
|
CLOSE_UP_APPLY_STORE_UPDATE("close_up_apply_store_update", new ArrayList<>(Arrays.asList(RocketMqTagEnum.CLOSE_UP_APPLY_STORE_UPDATE))),
|
||||||
|
CLOSE_UP_PLAN_OPEN_STORE("close_up_plan_open_store", new ArrayList<>(Arrays.asList(RocketMqTagEnum.CLOSE_UP_PLAN_OPEN_STORE))),
|
||||||
;
|
;
|
||||||
|
|
||||||
private final String group;
|
private final String group;
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public enum RocketMqTagEnum {
|
|||||||
VISIT_RECORD_INVALID("visit_record_invalid", "拜访记录失效"),
|
VISIT_RECORD_INVALID("visit_record_invalid", "拜访记录失效"),
|
||||||
TP_PENALTY_APPEAL_OVERDUE("tp_penalty_appeal_overdue", "十二分惩处单复议逾期"),
|
TP_PENALTY_APPEAL_OVERDUE("tp_penalty_appeal_overdue", "十二分惩处单复议逾期"),
|
||||||
CLOSE_UP_APPLY_STORE_UPDATE("close_up_apply_store_update", "歇业申请修改门店状态"),
|
CLOSE_UP_APPLY_STORE_UPDATE("close_up_apply_store_update", "歇业申请修改门店状态"),
|
||||||
|
CLOSE_UP_PLAN_OPEN_STORE("close_up_plan_open_store", "歇业申请计划开店"),
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,14 +14,14 @@ import lombok.Getter;
|
|||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum CloseUpPlatformEnum {
|
public enum CloseUpPlatformEnum {
|
||||||
DOUYINTG("douyintg", "抖音", 0, "https://ossfilezx.coolstore.cn/icon/closeup/douyin.png"),
|
DOUYINTG("douyintg", "抖音", 1, 8, "https://ossfilezx.coolstore.cn/icon/closeup/douyin.png"),
|
||||||
ELEMEWM("elemewm", "饿了么", 0, "https://ossfilezx.coolstore.cn/icon/closeup/ele.png"),
|
ELEMEWM("elemewm", "饿了么", 1, 2, "https://ossfilezx.coolstore.cn/icon/closeup/ele.png"),
|
||||||
HUOMA("huoma", "火码POS", 0, "https://ossfilezx.coolstore.cn/icon/closeup/huoma.png"),
|
HUOMA("huoma", "火码POS", 1, null, "https://ossfilezx.coolstore.cn/icon/closeup/huoma.png"),
|
||||||
JINGDONGWM("jingdongwm", "京东外卖", 0, "https://ossfilezx.coolstore.cn/icon/closeup/jingdong.png"),
|
JINGDONGWM("jingdongwm", "京东外卖", 1, 4, "https://ossfilezx.coolstore.cn/icon/closeup/jingdong.png"),
|
||||||
KUAISHOUTG("kuaishoutg", "快手团购", 0, "https://ossfilezx.coolstore.cn/icon/closeup/kuaishou.png"),
|
KUAISHOUTG("kuaishoutg", "快手团购", 0, null, "https://ossfilezx.coolstore.cn/icon/closeup/kuaishou.png"),
|
||||||
MEITUANTG("meituantg", "美团团购", 0, "https://ossfilezx.coolstore.cn/icon/closeup/meituan.png"),
|
MEITUANTG("meituantg", "美团团购", 1, 1, "https://ossfilezx.coolstore.cn/icon/closeup/meituan.png"),
|
||||||
MEITUANWM("meituanwm", "美团外卖", 0, "https://ossfilezx.coolstore.cn/icon/closeup/meituanwx.png"),
|
MEITUANWM("meituanwm", "美团外卖", 1, 1, "https://ossfilezx.coolstore.cn/icon/closeup/meituanwx.png"),
|
||||||
ZHIFUBAO("zhifubao", "支付宝团购", 0, "https://ossfilezx.coolstore.cn/icon/closeup/zhifubao.png"),
|
ZHIFUBAO("zhifubao", "支付宝团购", 0, null, "https://ossfilezx.coolstore.cn/icon/closeup/zhifubao.png"),
|
||||||
;
|
;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,8 +36,21 @@ public enum CloseUpPlatformEnum {
|
|||||||
* 关闭类型
|
* 关闭类型
|
||||||
*/
|
*/
|
||||||
private final Integer type;
|
private final Integer type;
|
||||||
|
/**
|
||||||
|
* 平台关闭code
|
||||||
|
*/
|
||||||
|
private final Integer platformCode;
|
||||||
/**
|
/**
|
||||||
* 图标地址
|
* 图标地址
|
||||||
*/
|
*/
|
||||||
private final String icon;
|
private final String icon;
|
||||||
|
|
||||||
|
public static Integer getPlatformCodeByCode(String code) {
|
||||||
|
for (CloseUpPlatformEnum value : CloseUpPlatformEnum.values()) {
|
||||||
|
if (value.code.equals(code)) {
|
||||||
|
return value.getPlatformCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -199,18 +199,21 @@ public class StoreDao {
|
|||||||
* @param closeUpReason 暂停营业原因
|
* @param closeUpReason 暂停营业原因
|
||||||
*/
|
*/
|
||||||
public void closeUp(String storeId, String closeUpReason) {
|
public void closeUp(String storeId, String closeUpReason) {
|
||||||
if (storeMapper.updateStatus(storeId, StoreStatusEnum.CLOSE_UP.getValue()) > 0) {
|
storeMapper.insertOrUpdateCloseUpReason(storeId, closeUpReason, 1);
|
||||||
storeMapper.insertOrUpdateCloseUpReason(storeId, closeUpReason);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 暂停营业门店转在营
|
* 暂停营业门店转在营
|
||||||
*/
|
*/
|
||||||
public void closeUpToOpen(String storeId) {
|
public void closeUpToOpen(String storeId) {
|
||||||
if (storeMapper.updateStatus(storeId, StoreStatusEnum.OPEN.getValue()) > 0) {
|
storeMapper.insertOrUpdateCloseUpReason(storeId, null, 0);
|
||||||
storeMapper.insertOrUpdateCloseUpReason(storeId, null);
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* 获取门店歇业状态
|
||||||
|
*/
|
||||||
|
public Integer getCloseUpStatus(String storeId) {
|
||||||
|
return storeMapper.getCloseUpStatus(storeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public class CloseUpPlatformDAO {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<CloseUpPlatformDO> getList(Long applyId, Integer status, Integer type) {
|
public List<CloseUpPlatformDO> getList(Long applyId, Integer status, Integer type, Boolean hasTaskId) {
|
||||||
Example example = new Example(CloseUpPlatformDO.class);
|
Example example = new Example(CloseUpPlatformDO.class);
|
||||||
Example.Criteria criteria = example.createCriteria()
|
Example.Criteria criteria = example.createCriteria()
|
||||||
.andEqualTo("applyId", applyId);
|
.andEqualTo("applyId", applyId);
|
||||||
@@ -54,6 +54,9 @@ public class CloseUpPlatformDAO {
|
|||||||
if (Objects.nonNull(type)) {
|
if (Objects.nonNull(type)) {
|
||||||
criteria.andEqualTo("type", type);
|
criteria.andEqualTo("type", type);
|
||||||
}
|
}
|
||||||
|
if (Boolean.TRUE.equals(hasTaskId)) {
|
||||||
|
criteria.andIsNotNull("taskId").andNotEqualTo("taskId", "");
|
||||||
|
}
|
||||||
return closeUpPlatformMapper.selectByExample(example);
|
return closeUpPlatformMapper.selectByExample(example);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,6 +74,13 @@ public class CloseUpPlatformDAO {
|
|||||||
closeUpPlatformMapper.updateByExampleSelective(update, example);
|
closeUpPlatformMapper.updateByExampleSelective(update, example);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateStatusAndTaskId(List<CloseUpPlatformDO> list) {
|
||||||
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
closeUpPlatformMapper.updateStatusAndTaskId(list);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据申请单id删除
|
* 根据申请单id删除
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -129,7 +129,12 @@ public interface StoreMapper {
|
|||||||
*/
|
*/
|
||||||
int insertOrUpdateCloseInfo(@Param("storeId") String storeId, @Param("closeReason") Integer closeReason, @Param("closeNature") Integer closeNature);
|
int insertOrUpdateCloseInfo(@Param("storeId") String storeId, @Param("closeReason") Integer closeReason, @Param("closeNature") Integer closeNature);
|
||||||
|
|
||||||
int insertOrUpdateCloseUpReason(@Param("storeId") String storeId, @Param("closeUpReason") String closeUpReason);
|
int insertOrUpdateCloseUpReason(@Param("storeId") String storeId, @Param("closeUpReason") String closeUpReason, @Param("isCloseUp") Integer isCloseUp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取门店歇业状态
|
||||||
|
*/
|
||||||
|
Integer getCloseUpStatus(@Param("storeId") String storeId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询最近没有订货记录的门店
|
* 查询最近没有订货记录的门店
|
||||||
|
|||||||
@@ -14,4 +14,6 @@ public interface CloseUpPlatformMapper extends Mapper<CloseUpPlatformDO> {
|
|||||||
* 查询待处理的申请单id
|
* 查询待处理的申请单id
|
||||||
*/
|
*/
|
||||||
List<Long> selectTodoApplyIds(@Param("applyType") Integer applyType, @Param("storeKeyword") String storeKeyword);
|
List<Long> selectTodoApplyIds(@Param("applyType") Integer applyType, @Param("storeKeyword") String storeKeyword);
|
||||||
|
|
||||||
|
void updateStatusAndTaskId(@Param("list") List<CloseUpPlatformDO> list);
|
||||||
}
|
}
|
||||||
@@ -344,12 +344,19 @@
|
|||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
<insert id="insertOrUpdateCloseUpReason">
|
<insert id="insertOrUpdateCloseUpReason">
|
||||||
INSERT INTO store_extend_info_${enterpriseId}(store_id, close_up_reason)
|
INSERT INTO store_extend_info_${enterpriseId}(store_id, close_up_reason, is_close_up)
|
||||||
VALUES(#{storeId}, #{closeUpReason})
|
VALUES(#{storeId}, #{closeUpReason}, #{isCloseUp})
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
close_up_reason = VALUES(close_up_reason)
|
close_up_reason = VALUES(close_up_reason),
|
||||||
|
is_close_up = VALUES(is_close_up)
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
<select id="getCloseUpStatus" resultType="java.lang.Integer">
|
||||||
|
SELECT IFNULL(MAX(is_close_up), 0)
|
||||||
|
FROM store_extend_info_${enterpriseId}
|
||||||
|
WHERE store_id = #{storeId}
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="getNoOrderStore" resultType="com.cool.store.entity.StoreDO">
|
<select id="getNoOrderStore" resultType="com.cool.store.entity.StoreDO">
|
||||||
SELECT * FROM store_${enterpriseId} a
|
SELECT * FROM store_${enterpriseId} a
|
||||||
LEFT JOIN store_extend_info_${enterpriseId} b ON a.store_id = b.store_id
|
LEFT JOIN store_extend_info_${enterpriseId} b ON a.store_id = b.store_id
|
||||||
|
|||||||
@@ -21,10 +21,11 @@
|
|||||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
||||||
<result column="updated_time" jdbcType="TIMESTAMP" property="updatedTime" />
|
<result column="updated_time" jdbcType="TIMESTAMP" property="updatedTime" />
|
||||||
<result column="urls" jdbcType="LONGVARCHAR" property="urls" />
|
<result column="urls" jdbcType="LONGVARCHAR" property="urls" />
|
||||||
|
<result column="is_open" jdbcType="TINYINT" property="isOpen" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
<sql id="Base_Column_List_A">
|
<sql id="Base_Column_List_A">
|
||||||
a.id, a.type, a.store_id, a.apply_no, a.line_id, a.status, a.plan_close_date, a.actual_close_date, a.plan_open_date, a.actual_open_date,
|
a.id, a.type, a.store_id, a.apply_no, a.line_id, a.status, a.plan_close_date, a.actual_close_date, a.plan_open_date, a.actual_open_date,
|
||||||
a.user_id, a.reason, a.source_apply_id, a.create_time, a.updated_time, a.urls
|
a.user_id, a.reason, a.source_apply_id, a.create_time, a.updated_time, a.urls, a.is_open
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="getList" parameterType="com.cool.store.request.closeup.CloseUpQueryRequest" resultMap="BaseResultMap">
|
<select id="getList" parameterType="com.cool.store.request.closeup.CloseUpQueryRequest" resultMap="BaseResultMap">
|
||||||
|
|||||||
@@ -16,13 +16,14 @@
|
|||||||
<result column="icon" jdbcType="VARCHAR" property="icon" />
|
<result column="icon" jdbcType="VARCHAR" property="icon" />
|
||||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
||||||
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
|
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
|
||||||
|
<result column="task_id" jdbcType="VARCHAR" property="taskId" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
|
<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
|
||||||
INSERT INTO zxjp_close_up_platform(apply_id, apply_type, code, name, status, type, task_start_date, icon)
|
INSERT INTO zxjp_close_up_platform(apply_id, apply_type, code, name, status, type, task_start_date, icon, task_id)
|
||||||
VALUES
|
VALUES
|
||||||
<foreach collection="list" item="item" separator=",">
|
<foreach collection="list" item="item" separator=",">
|
||||||
(#{item.applyId}, #{item.applyType}, #{item.code}, #{item.name}, #{item.status}, #{item.type}, #{item.taskStartDate}, #{item.icon})
|
(#{item.applyId}, #{item.applyType}, #{item.code}, #{item.name}, #{item.status}, #{item.type}, #{item.taskStartDate}, #{item.icon}, #{item.taskId})
|
||||||
</foreach>
|
</foreach>
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
@@ -41,4 +42,22 @@
|
|||||||
</if>
|
</if>
|
||||||
ORDER BY a.create_time DESC
|
ORDER BY a.create_time DESC
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<update id="updateStatusAndTaskId">
|
||||||
|
UPDATE zxjp_close_up_platform
|
||||||
|
SET status = CASE id
|
||||||
|
<foreach collection="list" item="item">
|
||||||
|
WHEN #{item.id} THEN #{item.status}
|
||||||
|
</foreach>
|
||||||
|
END,
|
||||||
|
task_id = CASE id
|
||||||
|
<foreach collection="list" item="item">
|
||||||
|
WHEN #{item.id} THEN #{item.taskId}
|
||||||
|
</foreach>
|
||||||
|
END
|
||||||
|
WHERE id IN
|
||||||
|
<foreach collection="list" item="item" open="(" separator="," close=")">
|
||||||
|
#{item.id}
|
||||||
|
</foreach>
|
||||||
|
</update>
|
||||||
</mapper>
|
</mapper>
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package com.cool.store.dto.closeup;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 平台异步状态DTO
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author wangff
|
||||||
|
* @since 2026/4/27
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PlatformAsyncStatusDTO {
|
||||||
|
@ApiModelProperty("任务id")
|
||||||
|
private Long taskId;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态 1 - 待执行; 2 - 执行中; 50 - 执行成功; 60 - 执行失败")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@ApiModelProperty("结果消息")
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
@ApiModelProperty("门店编码")
|
||||||
|
private String shopSn;
|
||||||
|
|
||||||
|
@ApiModelProperty("平台编号")
|
||||||
|
private String platformCode;
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package com.cool.store.dto.closeup;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 平台营业状态修改DTO
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author wangff
|
||||||
|
* @since 2026/4/16
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PlatformStatusDTO {
|
||||||
|
@ApiModelProperty("门店编号")
|
||||||
|
private String shopSn;
|
||||||
|
|
||||||
|
@ApiModelProperty("门店名称")
|
||||||
|
private String shopName;
|
||||||
|
|
||||||
|
@ApiModelProperty("营业状态:1-营业,0-歇业")
|
||||||
|
private Integer isOpen;
|
||||||
|
|
||||||
|
@ApiModelProperty("各平台更新结果列表")
|
||||||
|
private List<PlatformUpdateResult> platformResults;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class PlatformUpdateResult {
|
||||||
|
@ApiModelProperty("平台编号")
|
||||||
|
private String platformCode;
|
||||||
|
|
||||||
|
@ApiModelProperty("平台名称")
|
||||||
|
private String platformName;
|
||||||
|
|
||||||
|
@ApiModelProperty("是否更新成功:true-成功,false-失败")
|
||||||
|
private Boolean success;
|
||||||
|
|
||||||
|
@ApiModelProperty("结果消息")
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务ID(仅抖音平台异步操作时返回,用于查询任务状态)")
|
||||||
|
private String taskId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -109,4 +109,10 @@ public class CloseUpApplyFormDO {
|
|||||||
*/
|
*/
|
||||||
@Column(name = "updated_time")
|
@Column(name = "updated_time")
|
||||||
private Date updatedTime;
|
private Date updatedTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否恢复营业,申请恢复营业通过或者到营业时间置1
|
||||||
|
*/
|
||||||
|
@Column(name = "is_open")
|
||||||
|
private Integer isOpen;
|
||||||
}
|
}
|
||||||
@@ -75,4 +75,10 @@ public class CloseUpPlatformDO {
|
|||||||
*/
|
*/
|
||||||
@Column(name = "update_time")
|
@Column(name = "update_time")
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务id
|
||||||
|
*/
|
||||||
|
@Column(name = "task_id")
|
||||||
|
private String taskId;
|
||||||
}
|
}
|
||||||
@@ -42,6 +42,8 @@ public class ConsumerClient {
|
|||||||
private TpPenaltyAppealListener tpPenaltyAppealListener;
|
private TpPenaltyAppealListener tpPenaltyAppealListener;
|
||||||
@Resource
|
@Resource
|
||||||
private CloseUpApplyStoreUpdateListener closeUpApplyStoreUpdateListener;
|
private CloseUpApplyStoreUpdateListener closeUpApplyStoreUpdateListener;
|
||||||
|
@Resource
|
||||||
|
private CloseUpPlanOpenStoreListener closeUpPlanOpenStoreListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取通用配置
|
* 获取通用配置
|
||||||
@@ -160,4 +162,17 @@ public class ConsumerClient {
|
|||||||
return consumerBean;
|
return consumerBean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean(initMethod = "start", destroyMethod = "shutdown")
|
||||||
|
public ConsumerBean closeUpPlanOpenStore() {
|
||||||
|
RocketMqGroupEnum groupEnum = RocketMqGroupEnum.CLOSE_UP_PLAN_OPEN_STORE;
|
||||||
|
ConsumerBean consumerBean = new ConsumerBean();
|
||||||
|
//配置文件
|
||||||
|
Properties properties = getCommonProperties(groupEnum);
|
||||||
|
consumerBean.setProperties(properties);
|
||||||
|
Map<Subscription, MessageListener> commonSubscriptionTable = getCommonSubscriptionTable(groupEnum, closeUpPlanOpenStoreListener);
|
||||||
|
//订阅多个topic如上面设置
|
||||||
|
consumerBean.setSubscriptionTable(commonSubscriptionTable);
|
||||||
|
return consumerBean;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package com.cool.store.mq.consumer.listener;
|
||||||
|
|
||||||
|
import com.aliyun.openservices.ons.api.Action;
|
||||||
|
import com.aliyun.openservices.ons.api.ConsumeContext;
|
||||||
|
import com.aliyun.openservices.ons.api.Message;
|
||||||
|
import com.aliyun.openservices.ons.api.MessageListener;
|
||||||
|
import com.cool.store.constants.CommonConstants;
|
||||||
|
import com.cool.store.service.closeup.CloseUpService;
|
||||||
|
import com.cool.store.utils.RedisUtilPool;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 歇业管理自动营业
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author wangff
|
||||||
|
* @since 2026/4/28
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class CloseUpPlanOpenStoreListener implements MessageListener {
|
||||||
|
private final RedisUtilPool redisUtilPool;
|
||||||
|
private final CloseUpService closeUpService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Action consume(Message message, ConsumeContext consumeContext) {
|
||||||
|
String text = new String(message.getBody());
|
||||||
|
if (StringUtils.isBlank(text)) {
|
||||||
|
log.info("消息体为空,tag:{},messageId:{}", message.getTag(), message.getMsgID());
|
||||||
|
return Action.CommitMessage;
|
||||||
|
}
|
||||||
|
String lockKey = "CloseUpPlanOpenStoreListener:" + message.getMsgID();
|
||||||
|
boolean lock = redisUtilPool.setNxExpire(lockKey, message.getMsgID(), CommonConstants.NORMAL_LOCK_TIMES);
|
||||||
|
if (lock) {
|
||||||
|
try {
|
||||||
|
closeUpService.closeUpAutoOpen(Long.valueOf(text));
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("CloseUpPlanOpenStoreListener consume error", e);
|
||||||
|
return Action.ReconsumeLater;
|
||||||
|
} finally {
|
||||||
|
redisUtilPool.delKey(lockKey);
|
||||||
|
}
|
||||||
|
log.info("消费成功,tag:{},messageId:{},reqBody={}", message.getTag(), message.getMsgID(), text);
|
||||||
|
return Action.CommitMessage;
|
||||||
|
}
|
||||||
|
return Action.ReconsumeLater;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.cool.store.service.closeup;
|
package com.cool.store.service.closeup;
|
||||||
|
|
||||||
|
import com.cool.store.entity.closeup.CloseUpPlatformDO;
|
||||||
import com.cool.store.request.closeup.*;
|
import com.cool.store.request.closeup.*;
|
||||||
import com.cool.store.response.AuditInfoResponse;
|
import com.cool.store.response.AuditInfoResponse;
|
||||||
import com.cool.store.vo.closeup.CloseUpApplyFormSimpleVO;
|
import com.cool.store.vo.closeup.CloseUpApplyFormSimpleVO;
|
||||||
@@ -84,4 +85,14 @@ public interface CloseUpService {
|
|||||||
* 平台关闭开启处理
|
* 平台关闭开启处理
|
||||||
*/
|
*/
|
||||||
Boolean handlePlatform(CloseUpPlatformHandleRequest request);
|
Boolean handlePlatform(CloseUpPlatformHandleRequest request);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据任务id查询平台状态
|
||||||
|
*/
|
||||||
|
void queryPlatformStatusByTaskId(CloseUpPlatformDO platformDO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 歇业申请门店自动恢复营业
|
||||||
|
*/
|
||||||
|
void closeUpAutoOpen(Long applyId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,261 @@
|
|||||||
|
package com.cool.store.service.closeup;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.cool.store.dto.closeup.PlatformAsyncStatusDTO;
|
||||||
|
import com.cool.store.dto.closeup.PlatformStatusDTO;
|
||||||
|
import com.cool.store.enums.ErrorCodeEnum;
|
||||||
|
import com.cool.store.exception.ServiceException;
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import okhttp3.FormBody;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.RequestBody;
|
||||||
|
import okhttp3.Response;
|
||||||
|
import org.apache.commons.collections4.MapUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.crypto.Mac;
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 平台接口请求
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author wangff
|
||||||
|
* @since 2026/4/16
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Slf4j
|
||||||
|
public class PlatformHttpClientRest {
|
||||||
|
@Autowired
|
||||||
|
private OkHttpClient okHttpClient;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ObjectMapper objectMapper;
|
||||||
|
|
||||||
|
@Value("${closeup.platform.url}")
|
||||||
|
private String baseUrl;
|
||||||
|
@Value("${closeup.platform.username}")
|
||||||
|
private String username;
|
||||||
|
@Value("${closeup.platform.secret}")
|
||||||
|
private String secret;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 门店外卖团购平台状态修改
|
||||||
|
* @param storeNum 门店编码
|
||||||
|
* @param platformCode 平台 1-美团, 2-饿了么,4-京东,允许二进制位组合进行批量关闭
|
||||||
|
* @param isOpen 营业状态:1-营业,0-歇业
|
||||||
|
* @return 平台营业状态修改DTO
|
||||||
|
*/
|
||||||
|
public PlatformStatusDTO platformCloseUp(String storeNum, String platformCode, Integer isOpen) {
|
||||||
|
String url = baseUrl + "/zx/wechat/food/updateShopOpenStatus/" + storeNum + "/" + platformCode;
|
||||||
|
try {
|
||||||
|
// 生成签名
|
||||||
|
SignatureInfo signatureInfo = generateSignature(storeNum, platformCode, isOpen);
|
||||||
|
|
||||||
|
FormBody formBody = new FormBody.Builder()
|
||||||
|
.add("isOpen", String.valueOf(isOpen))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// 发起HTTP请求
|
||||||
|
String responseJson = executePost(url, signatureInfo, formBody);
|
||||||
|
|
||||||
|
// 解析响应
|
||||||
|
return parseResponse(responseJson, PlatformStatusDTO.class);
|
||||||
|
} catch (ServiceException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("发送POST请求失败: {}", url, e);
|
||||||
|
throw new RuntimeException("接口调用异常: " + e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 门店外卖团购平台状态修改
|
||||||
|
* @param storeNum 门店编码
|
||||||
|
* @param platformCode 平台 1-美团, 2-饿了么,4-京东,允许二进制位组合进行批量关闭
|
||||||
|
* @param taskId 任务id
|
||||||
|
* @return 平台异步状态DTO
|
||||||
|
*/
|
||||||
|
public PlatformAsyncStatusDTO queryPlatformStatusByTaskId(String storeNum, String platformCode, Long taskId) {
|
||||||
|
String url = baseUrl + "/zx/wechat/food/queryUpdateShopOpenStatus/" + storeNum + "/" + platformCode;
|
||||||
|
try {
|
||||||
|
// 生成签名
|
||||||
|
SignatureInfo signatureInfo = generateSignature(storeNum, platformCode, taskId);
|
||||||
|
|
||||||
|
FormBody formBody = new FormBody.Builder()
|
||||||
|
.add("taskId", String.valueOf(taskId))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// 发起HTTP请求
|
||||||
|
String responseJson = executePost(url, signatureInfo, formBody);
|
||||||
|
|
||||||
|
// 解析响应
|
||||||
|
return parseResponse(responseJson, PlatformAsyncStatusDTO.class);
|
||||||
|
} catch (ServiceException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("发送POST请求失败: {}", url, e);
|
||||||
|
throw new RuntimeException("接口调用异常: " + e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String HMAC_SHA256_ALGORITHM = "HmacSHA256";
|
||||||
|
private static final String SHA256_ALGORITHM = "SHA-256";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成签名信息
|
||||||
|
*/
|
||||||
|
public SignatureInfo generateSignature(String shopSn, String platformCode, Object param) throws Exception {
|
||||||
|
// 1. 生成 x-date
|
||||||
|
String xDate = getCurrentGMTTime();
|
||||||
|
|
||||||
|
// 2. 构建请求数据
|
||||||
|
String data = shopSn + (platformCode != null ? platformCode : "") + (Objects.nonNull(param) ? param.toString() : "");
|
||||||
|
log.info("data: {}", data);
|
||||||
|
|
||||||
|
// 3. 计算 x-digest
|
||||||
|
String xDigest = computeSHA256Digest(data);
|
||||||
|
|
||||||
|
// 4. 构建签名字符串
|
||||||
|
String signingString = "x-date: " + xDate + "\n" + "digest: " + xDigest;
|
||||||
|
|
||||||
|
// 5. 计算 x-signature
|
||||||
|
String xSignature = computeHmacSignature(signingString, secret);
|
||||||
|
|
||||||
|
return new SignatureInfo(xDate, xDigest, xSignature);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前GMT时间字符串
|
||||||
|
*/
|
||||||
|
private static String getCurrentGMTTime() {
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
|
||||||
|
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||||
|
return sdf.format(new Date());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算SHA-256摘要并转换为Base64
|
||||||
|
*/
|
||||||
|
private static String computeSHA256Digest(String data) throws Exception {
|
||||||
|
if (data == null || data.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
MessageDigest digest = MessageDigest.getInstance(SHA256_ALGORITHM);
|
||||||
|
byte[] hash = digest.digest(data.getBytes("UTF-8"));
|
||||||
|
String base64sha256 = Base64.getEncoder().encodeToString(hash);
|
||||||
|
return "SHA-256=" + base64sha256;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算HMAC-SHA256签名并转换为Base64
|
||||||
|
*/
|
||||||
|
private static String computeHmacSignature(String data, String secret) throws Exception {
|
||||||
|
Mac mac = Mac.getInstance(HMAC_SHA256_ALGORITHM);
|
||||||
|
SecretKeySpec secretKeySpec = new SecretKeySpec(secret.getBytes("UTF-8"), HMAC_SHA256_ALGORITHM);
|
||||||
|
mac.init(secretKeySpec);
|
||||||
|
byte[] hmacBytes = mac.doFinal(data.getBytes("UTF-8"));
|
||||||
|
return Base64.getEncoder().encodeToString(hmacBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送HTTP请求
|
||||||
|
*/
|
||||||
|
private String executePost(String url, SignatureInfo signatureInfo, FormBody formBody) throws IOException {
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.post(formBody)
|
||||||
|
.header("x-date", signatureInfo.getXDate())
|
||||||
|
.header("x-digest", signatureInfo.getDigest())
|
||||||
|
.header("x-signature", signatureInfo.getSignature())
|
||||||
|
.header("Content-Type", "application/x-www-form-urlencoded")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
log.info("发送POST请求: {}, 数据: {}, formBody: {}", url, objectMapper.writeValueAsString(signatureInfo), JSONObject.toJSONString(formBody));
|
||||||
|
|
||||||
|
try (Response response = okHttpClient.newCall(request).execute()) {
|
||||||
|
if (!response.isSuccessful()) {
|
||||||
|
throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR,response.code() + " " + response.message());
|
||||||
|
}
|
||||||
|
|
||||||
|
String responseBody = response.body().string();
|
||||||
|
log.info("收到响应: {}", responseBody);
|
||||||
|
|
||||||
|
checkBusinessResponseCode(responseBody);
|
||||||
|
|
||||||
|
return responseBody;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkBusinessResponseCode(String responseJson) throws IOException {
|
||||||
|
try {
|
||||||
|
Map<String, Object> responseMap = objectMapper.readValue(responseJson,
|
||||||
|
new TypeReference<Map<String, Object>>() {
|
||||||
|
});
|
||||||
|
|
||||||
|
String code = MapUtils.getString(responseMap, "code");
|
||||||
|
if (StringUtils.isNotBlank(code) && !"000".equals(code)) {
|
||||||
|
String msg = MapUtils.getString(responseMap, "msg");
|
||||||
|
throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR,
|
||||||
|
"code: " + code + ", msg: " + msg);
|
||||||
|
}
|
||||||
|
} catch (ServiceException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (Exception e) {
|
||||||
|
// 如果解析失败,说明可能不是标准格式,继续处理
|
||||||
|
log.debug("无法解析响应码格式: {}", e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T> T parseResponse(String responseJson, Class<T> responseType) throws Exception {
|
||||||
|
// 解析为通用响应格式
|
||||||
|
Map<String, Object> responseMap = objectMapper.readValue(responseJson,
|
||||||
|
new TypeReference<Map<String, Object>>() {});
|
||||||
|
|
||||||
|
|
||||||
|
// 如果返回类型是Map,直接返回
|
||||||
|
if (responseType == Map.class) {
|
||||||
|
return (T) responseMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提取data字段
|
||||||
|
Object data = responseMap.get("data");
|
||||||
|
if (data != null && responseType != Object.class) {
|
||||||
|
if (data instanceof List) {
|
||||||
|
// 保持List结构,让调用方处理具体类型转换
|
||||||
|
return (T) JSONObject.toJSONString(data);
|
||||||
|
}
|
||||||
|
return objectMapper.convertValue(data, responseType);
|
||||||
|
}
|
||||||
|
|
||||||
|
return objectMapper.convertValue(responseMap, responseType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 签名信息封装类
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public static class SignatureInfo {
|
||||||
|
private String xDate;
|
||||||
|
private String digest;
|
||||||
|
private String signature;
|
||||||
|
|
||||||
|
public SignatureInfo(String xDate, String digest, String signature) {
|
||||||
|
this.xDate = xDate;
|
||||||
|
this.digest = digest;
|
||||||
|
this.signature = signature;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,6 +11,8 @@ import com.cool.store.dao.*;
|
|||||||
import com.cool.store.dao.closeup.CloseUpApplyFormDAO;
|
import com.cool.store.dao.closeup.CloseUpApplyFormDAO;
|
||||||
import com.cool.store.dao.closeup.CloseUpAuditRecordDAO;
|
import com.cool.store.dao.closeup.CloseUpAuditRecordDAO;
|
||||||
import com.cool.store.dao.closeup.CloseUpPlatformDAO;
|
import com.cool.store.dao.closeup.CloseUpPlatformDAO;
|
||||||
|
import com.cool.store.dto.closeup.PlatformAsyncStatusDTO;
|
||||||
|
import com.cool.store.dto.closeup.PlatformStatusDTO;
|
||||||
import com.cool.store.dto.store.StoreMasterIssueDTO;
|
import com.cool.store.dto.store.StoreMasterIssueDTO;
|
||||||
import com.cool.store.entity.*;
|
import com.cool.store.entity.*;
|
||||||
import com.cool.store.entity.closeup.CloseUpApplyFormDO;
|
import com.cool.store.entity.closeup.CloseUpApplyFormDO;
|
||||||
@@ -18,6 +20,7 @@ import com.cool.store.entity.closeup.CloseUpAuditRecordDO;
|
|||||||
import com.cool.store.entity.closeup.CloseUpPlatformDO;
|
import com.cool.store.entity.closeup.CloseUpPlatformDO;
|
||||||
import com.cool.store.enums.*;
|
import com.cool.store.enums.*;
|
||||||
import com.cool.store.enums.close.CloseStoreAuditStatusEnum;
|
import com.cool.store.enums.close.CloseStoreAuditStatusEnum;
|
||||||
|
import com.cool.store.enums.closeup.CloseUpPlatformEnum;
|
||||||
import com.cool.store.enums.closeup.CloseUpStatusEnum;
|
import com.cool.store.enums.closeup.CloseUpStatusEnum;
|
||||||
import com.cool.store.exception.ServiceException;
|
import com.cool.store.exception.ServiceException;
|
||||||
import com.cool.store.mq.producer.SimpleMessageService;
|
import com.cool.store.mq.producer.SimpleMessageService;
|
||||||
@@ -26,6 +29,7 @@ import com.cool.store.response.AuditInfoResponse;
|
|||||||
import com.cool.store.service.UserAuthMappingService;
|
import com.cool.store.service.UserAuthMappingService;
|
||||||
import com.cool.store.service.closeup.CloseUpService;
|
import com.cool.store.service.closeup.CloseUpService;
|
||||||
import com.cool.store.service.closeup.PlatformAutoStrategy;
|
import com.cool.store.service.closeup.PlatformAutoStrategy;
|
||||||
|
import com.cool.store.service.closeup.PlatformHttpClientRest;
|
||||||
import com.cool.store.service.sms.AliyunSmsService;
|
import com.cool.store.service.sms.AliyunSmsService;
|
||||||
import com.cool.store.utils.BeanUtil;
|
import com.cool.store.utils.BeanUtil;
|
||||||
import com.cool.store.vo.PartnerUserInfoVO;
|
import com.cool.store.vo.PartnerUserInfoVO;
|
||||||
@@ -73,6 +77,7 @@ public class CloseUpServiceImpl implements CloseUpService {
|
|||||||
private final LineInfoDAO lineInfoDAO;
|
private final LineInfoDAO lineInfoDAO;
|
||||||
private final EnterpriseUserDAO enterpriseUserDAO;
|
private final EnterpriseUserDAO enterpriseUserDAO;
|
||||||
private final AliyunSmsService aliyunSmsService;
|
private final AliyunSmsService aliyunSmsService;
|
||||||
|
private final PlatformHttpClientRest platformHttpClientRest;
|
||||||
|
|
||||||
@Value("${mybatis.configuration.variables.enterpriseId}")
|
@Value("${mybatis.configuration.variables.enterpriseId}")
|
||||||
private String enterpriseId;
|
private String enterpriseId;
|
||||||
@@ -199,19 +204,20 @@ public class CloseUpServiceImpl implements CloseUpService {
|
|||||||
simpleMessageService.send(String.valueOf(formDO.getId()), RocketMqTagEnum.CLOSE_UP_APPLY_STORE_UPDATE, formDO.getPlanOpenDate().getTime());
|
simpleMessageService.send(String.valueOf(formDO.getId()), RocketMqTagEnum.CLOSE_UP_APPLY_STORE_UPDATE, formDO.getPlanOpenDate().getTime());
|
||||||
} else {
|
} else {
|
||||||
log.info("直接变更");
|
log.info("直接变更");
|
||||||
storeStatusAndPlatformUpdate(formDO.getStoreId(), formDO.getId(), formDO.getType(), formDO.getSourceApplyId(), false);
|
storeStatusAndPlatformUpdate(formDO, false);
|
||||||
}
|
}
|
||||||
// 修改源歇业申请单
|
// 修改源歇业申请单
|
||||||
CloseUpApplyFormDO updateSourceForm = CloseUpApplyFormDO.builder()
|
CloseUpApplyFormDO updateSourceForm = CloseUpApplyFormDO.builder()
|
||||||
.id(formDO.getSourceApplyId())
|
.id(formDO.getSourceApplyId())
|
||||||
.actualOpenDate(formDO.getActualOpenDate())
|
.actualOpenDate(formDO.getActualOpenDate())
|
||||||
.status(CloseUpStatusEnum.APPLY_OPEN_PASS.getStatus())
|
.status(CloseUpStatusEnum.APPLY_OPEN_PASS.getStatus())
|
||||||
|
.isOpen(1)
|
||||||
.build();
|
.build();
|
||||||
applyFormDAO.updateByPrimaryKeySelective(updateSourceForm);
|
applyFormDAO.updateByPrimaryKeySelective(updateSourceForm);
|
||||||
// 初始化各外卖团购平台账号
|
// 初始化各外卖团购平台账号
|
||||||
List<CloseUpPlatformDO> platformList = platformDAO.init(formDO.getId(), formDO.getType(), formDO.getActualOpenDate());
|
List<CloseUpPlatformDO> platformList = platformDAO.init(formDO.getId(), formDO.getType(), formDO.getActualOpenDate());
|
||||||
// 根据平台类型自动开启
|
// 根据平台类型自动开启
|
||||||
autoPlatform(formDO.getType(), platformList);
|
autoPlatform(formDO.getStoreId(), formDO.getType(), platformList);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -222,6 +228,7 @@ public class CloseUpServiceImpl implements CloseUpService {
|
|||||||
// 过去的单据不处理
|
// 过去的单据不处理
|
||||||
if (Objects.nonNull(formDO.getActualOpenDate()) && formDO.getActualOpenDate().before(now)
|
if (Objects.nonNull(formDO.getActualOpenDate()) && formDO.getActualOpenDate().before(now)
|
||||||
|| Objects.isNull(formDO.getActualOpenDate()) && formDO.getPlanOpenDate().before(now)) {
|
|| Objects.isNull(formDO.getActualOpenDate()) && formDO.getPlanOpenDate().before(now)) {
|
||||||
|
log.info("过期单据不处理");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 根据实际闭店时间判断直接修改主数据还是定时任务修改主数据
|
// 根据实际闭店时间判断直接修改主数据还是定时任务修改主数据
|
||||||
@@ -231,12 +238,12 @@ public class CloseUpServiceImpl implements CloseUpService {
|
|||||||
simpleMessageService.send(String.valueOf(formDO.getId()), RocketMqTagEnum.CLOSE_UP_APPLY_STORE_UPDATE, formDO.getActualCloseDate().getTime());
|
simpleMessageService.send(String.valueOf(formDO.getId()), RocketMqTagEnum.CLOSE_UP_APPLY_STORE_UPDATE, formDO.getActualCloseDate().getTime());
|
||||||
} else {
|
} else {
|
||||||
log.info("直接变更");
|
log.info("直接变更");
|
||||||
storeStatusAndPlatformUpdate(formDO.getStoreId(), formDO.getId(), formDO.getType(), formDO.getSourceApplyId(), false);
|
storeStatusAndPlatformUpdate(formDO, false);
|
||||||
}
|
}
|
||||||
// 初始化各外卖团购平台账号
|
// 初始化各外卖团购平台账号
|
||||||
List<CloseUpPlatformDO> platformList = platformDAO.init(formDO.getId(), formDO.getType(), formDO.getActualCloseDate());
|
List<CloseUpPlatformDO> platformList = platformDAO.init(formDO.getId(), formDO.getType(), formDO.getActualCloseDate());
|
||||||
// 根据平台类型自动关闭
|
// 根据平台类型自动关闭
|
||||||
autoPlatform(formDO.getType(), platformList);
|
autoPlatform(formDO.getStoreId(), formDO.getType(), platformList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -395,7 +402,7 @@ public class CloseUpServiceImpl implements CloseUpService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CloseUpPlatformVO> getPlatformListByApplyId(Long applyId) {
|
public List<CloseUpPlatformVO> getPlatformListByApplyId(Long applyId) {
|
||||||
List<CloseUpPlatformDO> list = platformDAO.getList(applyId, null, null);
|
List<CloseUpPlatformDO> list = platformDAO.getList(applyId, null, null, null);
|
||||||
return BeanUtil.toList(list, CloseUpPlatformVO.class);
|
return BeanUtil.toList(list, CloseUpPlatformVO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -486,29 +493,61 @@ public class CloseUpServiceImpl implements CloseUpService {
|
|||||||
/**
|
/**
|
||||||
* 自动开启关闭各平台
|
* 自动开启关闭各平台
|
||||||
*/
|
*/
|
||||||
private void autoPlatform(Integer applyType, List<CloseUpPlatformDO> list) {
|
public void autoPlatform(String storeId, Integer applyType, List<CloseUpPlatformDO> list) {
|
||||||
List<Long> updateIds = new ArrayList<>();
|
try {
|
||||||
for (CloseUpPlatformDO platformDO : list) {
|
StoreDO storeDO = storeDao.getByStoreId(storeId);
|
||||||
// 待处理且自动关闭
|
if (Objects.isNull(storeDO)) {
|
||||||
if (platformDO.getStatus().equals(0) && platformDO.getType().equals(1) && (new Date()).after(platformDO.getTaskStartDate())) {
|
return;
|
||||||
PlatformAutoStrategy platformAuto = platformAutoFactory.getByCode(platformDO.getCode());
|
}
|
||||||
if (Objects.isNull(platformAuto)) {
|
int platformCode = 0;
|
||||||
log.info("平台不存在实现类, code:{} name:{}", platformDO.getCode(), platformDO.getName());
|
List<CloseUpPlatformDO> unClosePlatformList = list.stream()
|
||||||
} else {
|
.filter(platformDO -> platformDO.getStatus().equals(0)
|
||||||
boolean update = false;
|
&& platformDO.getType().equals(1)
|
||||||
if (applyType.equals(0)) {
|
&& !(new Date()).before(platformDO.getTaskStartDate()))
|
||||||
update = platformAuto.close();
|
.collect(Collectors.toList());
|
||||||
} else if (applyType.equals(1)) {
|
if (CollectionUtils.isEmpty(unClosePlatformList)) {
|
||||||
update = platformAuto.open();
|
log.info("未处理的自动关闭平台为空");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<CloseUpPlatformDO> updatePlatformList = new ArrayList<>();
|
||||||
|
// 歇业平台
|
||||||
|
for (CloseUpPlatformDO v : unClosePlatformList) {
|
||||||
|
Integer ongoingPlatformCode = CloseUpPlatformEnum.getPlatformCodeByCode(v.getCode());
|
||||||
|
if (Objects.nonNull(ongoingPlatformCode)) {
|
||||||
|
platformCode = platformCode | ongoingPlatformCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (platformCode == 0) {
|
||||||
|
log.info("未处理的自动关闭平台为空platformCode=0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PlatformStatusDTO platformStatusDTO = platformHttpClientRest.platformCloseUp(storeDO.getStoreNum(), String.valueOf(platformCode), applyType);
|
||||||
|
if (Objects.nonNull(platformStatusDTO) && CollectionUtils.isNotEmpty(platformStatusDTO.getPlatformResults())) {
|
||||||
|
Map<String, PlatformStatusDTO.PlatformUpdateResult> map = CollStreamUtil.toMap(platformStatusDTO.getPlatformResults(), PlatformStatusDTO.PlatformUpdateResult::getPlatformCode, v -> v);
|
||||||
|
for (CloseUpPlatformDO closeUpPlatformDO : unClosePlatformList) {
|
||||||
|
if (CloseUpPlatformEnum.HUOMA.getCode().equals(closeUpPlatformDO.getCode())) {
|
||||||
|
CloseUpPlatformDO updatePlatform = CloseUpPlatformDO.builder().id(closeUpPlatformDO.getId()).status(1).build();
|
||||||
|
updatePlatformList.add(updatePlatform);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
if (update) {
|
Integer platformCodeByCode = CloseUpPlatformEnum.getPlatformCodeByCode(closeUpPlatformDO.getCode());
|
||||||
updateIds.add(platformDO.getId());
|
PlatformStatusDTO.PlatformUpdateResult result = map.get(String.valueOf(platformCodeByCode));
|
||||||
|
if (Objects.nonNull(result) && Boolean.TRUE.equals(result.getSuccess())) {
|
||||||
|
CloseUpPlatformDO updatePlatform = CloseUpPlatformDO.builder()
|
||||||
|
.id(closeUpPlatformDO.getId())
|
||||||
|
.status(result.getPlatformCode().equals("8") ? 0 : 1)
|
||||||
|
.taskId(result.getPlatformCode().equals("8") ? result.getTaskId() : null)
|
||||||
|
.build();
|
||||||
|
updatePlatformList.add(updatePlatform);
|
||||||
|
} else {
|
||||||
|
log.info("平台更新失败, platformCodeByCode:{}: {}", platformCodeByCode, JSONObject.toJSONString(result));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
platformDAO.updateStatusAndTaskId(updatePlatformList);
|
||||||
if (CollectionUtils.isNotEmpty(updateIds)) {
|
} catch (Exception e) {
|
||||||
platformDAO.updateStatusByIds(updateIds, 1);
|
log.info("平台自动歇业/营业失败", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -519,7 +558,7 @@ public class CloseUpServiceImpl implements CloseUpService {
|
|||||||
public void storeStatusAndPlatformUpdate(Long formId) {
|
public void storeStatusAndPlatformUpdate(Long formId) {
|
||||||
CloseUpApplyFormDO formDO = applyFormDAO.getById(formId);
|
CloseUpApplyFormDO formDO = applyFormDAO.getById(formId);
|
||||||
if (Objects.nonNull(formDO)) {
|
if (Objects.nonNull(formDO)) {
|
||||||
storeStatusAndPlatformUpdate(formDO.getStoreId(), formDO.getId(), formDO.getType(), formDO.getSourceApplyId(), true);
|
storeStatusAndPlatformUpdate(formDO, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -529,29 +568,90 @@ public class CloseUpServiceImpl implements CloseUpService {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void queryPlatformStatusByTaskId(CloseUpPlatformDO platformDO) {
|
||||||
|
if (platformDO.getStatus().equals(1) || StringUtils.isBlank(platformDO.getTaskId())) {
|
||||||
|
log.info("任务已处理或不存在任务id");
|
||||||
|
}
|
||||||
|
CloseUpApplyFormDO formDO = applyFormDAO.getById(platformDO.getApplyId());
|
||||||
|
if (Objects.isNull(formDO)) {
|
||||||
|
log.error("申请单不存在");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
StoreDO storeDO = storeDao.getEffectiveByStoreId(formDO.getStoreId());
|
||||||
|
if (Objects.isNull(storeDO)) {
|
||||||
|
log.error("门店不存在");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Integer platformCode = CloseUpPlatformEnum.getPlatformCodeByCode(platformDO.getCode());
|
||||||
|
if (Objects.isNull(platformCode)) {
|
||||||
|
log.error("不存在对应平台编码");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PlatformAsyncStatusDTO result = platformHttpClientRest.queryPlatformStatusByTaskId(storeDO.getStoreNum(), String.valueOf(platformCode), Long.valueOf(platformDO.getTaskId()));
|
||||||
|
if (Objects.nonNull(result) && result.getStatus().equals("50")) {
|
||||||
|
platformDAO.updateStatusByIds(Collections.singletonList(platformDO.getId()), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void closeUpAutoOpen(Long applyId) {
|
||||||
|
CloseUpApplyFormDO formDO = applyFormDAO.getById(applyId);
|
||||||
|
if (Objects.isNull(formDO)) {
|
||||||
|
log.info("申请单不存在");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (formDO.getIsOpen().equals(1)) {
|
||||||
|
log.info("门店已经营业或提前申请恢复营业");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 校验门店是否为歇业状态
|
||||||
|
StoreDO storeDO = storeDao.getEffectiveByStoreId(formDO.getStoreId());
|
||||||
|
if (Objects.isNull(storeDO)) {
|
||||||
|
log.info("门店不存在");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!StoreStatusEnum.CLOSE_UP.getValue().equals(storeDO.getStoreStatus())) {
|
||||||
|
log.info("门店不是歇业状态");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CloseUpApplyFormDO update = CloseUpApplyFormDO.builder()
|
||||||
|
.id(applyId)
|
||||||
|
.isOpen(1)
|
||||||
|
.build();
|
||||||
|
applyFormDAO.updateByPrimaryKeySelective(update);
|
||||||
|
// 校验歇业单是否已经恢复过营业
|
||||||
|
storeDao.closeUpToOpen(formDO.getStoreId());
|
||||||
|
log.info("歇业申请后门店自动恢复营业, storeId:{}", formDO.getStoreId());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改主数据并处理各外卖团购平台开闭店
|
* 修改主数据并处理各外卖团购平台开闭店
|
||||||
*/
|
*/
|
||||||
private void storeStatusAndPlatformUpdate(String storeId, Long applyId, Integer applyType, Long sourceApplyId, boolean autoPlatform) {
|
private void storeStatusAndPlatformUpdate(CloseUpApplyFormDO formDO, boolean autoPlatform) {
|
||||||
|
String storeId = formDO.getStoreId();
|
||||||
|
Integer applyType = formDO.getType();
|
||||||
|
Long sourceApplyId = formDO.getSourceApplyId();
|
||||||
StoreDO storeDO = storeDao.getByStoreId(storeId);
|
StoreDO storeDO = storeDao.getByStoreId(storeId);
|
||||||
if (Objects.isNull(storeDO)) {
|
if (Objects.isNull(storeDO)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 主数据状态修改
|
// 主数据状态修改
|
||||||
boolean storeUpdate = false;
|
boolean storeUpdate = false;
|
||||||
|
Integer isCloseUp = storeDao.getCloseUpStatus(storeId);
|
||||||
if (applyType.equals(0)) {
|
if (applyType.equals(0)) {
|
||||||
if (StoreStatusEnum.OPEN.getValue().equals(storeDO.getStoreStatus())) {
|
if (StoreStatusEnum.OPEN.getValue().equals(storeDO.getStoreStatus()) && isCloseUp.equals(0)) {
|
||||||
storeDao.closeUp(storeId, "close_up_special_reason");
|
storeDao.closeUp(storeId, "close_up_special_reason");
|
||||||
storeUpdate = true;
|
storeUpdate = true;
|
||||||
} else {
|
Date openTime = Objects.nonNull(formDO.getActualOpenDate()) ? formDO.getActualOpenDate() : formDO.getPlanOpenDate();
|
||||||
log.info("门店不处于在营状态,修改为暂停营业失败");
|
if (Objects.nonNull(openTime)) {
|
||||||
|
simpleMessageService.send(String.valueOf(formDO.getId()), RocketMqTagEnum.CLOSE_UP_PLAN_OPEN_STORE, openTime.getTime());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (StoreStatusEnum.CLOSE_UP.getValue().equals(storeDO.getStoreStatus())) {
|
if (StoreStatusEnum.OPEN.getValue().equals(storeDO.getStoreStatus()) && isCloseUp.equals(1)) {
|
||||||
storeDao.closeUpToOpen(storeId);
|
storeDao.closeUpToOpen(storeId);
|
||||||
storeUpdate = true;
|
storeUpdate = true;
|
||||||
} else {
|
|
||||||
log.info("门店不处于暂停营业状态,修改为在营失败");
|
|
||||||
}
|
}
|
||||||
// 删除歇业申请的平台数据
|
// 删除歇业申请的平台数据
|
||||||
if (Objects.nonNull(sourceApplyId)) {
|
if (Objects.nonNull(sourceApplyId)) {
|
||||||
@@ -560,8 +660,8 @@ public class CloseUpServiceImpl implements CloseUpService {
|
|||||||
}
|
}
|
||||||
if (autoPlatform) {
|
if (autoPlatform) {
|
||||||
// 自动开关平台
|
// 自动开关平台
|
||||||
List<CloseUpPlatformDO> platformList = platformDAO.getList(applyId, 0, applyType);
|
List<CloseUpPlatformDO> platformList = platformDAO.getList(formDO.getId(), 0, 1, null);
|
||||||
autoPlatform(applyType, platformList);
|
autoPlatform(storeId, applyType, platformList);
|
||||||
}
|
}
|
||||||
if (StringUtils.isNotBlank(storeDO.getTelephone())) {
|
if (StringUtils.isNotBlank(storeDO.getTelephone())) {
|
||||||
aliyunSmsService.sendNotice(storeDO.getTelephone(), applyType.equals(0) ? SmsNoticeTypeEnum.CLOSE_UP_CLOSE_NOTICE : SmsNoticeTypeEnum.CLOSE_UP_OPEN_NOTICE);
|
aliyunSmsService.sendNotice(storeDO.getTelephone(), applyType.equals(0) ? SmsNoticeTypeEnum.CLOSE_UP_CLOSE_NOTICE : SmsNoticeTypeEnum.CLOSE_UP_OPEN_NOTICE);
|
||||||
@@ -575,6 +675,8 @@ public class CloseUpServiceImpl implements CloseUpService {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("mq通知主应用下发门店主数据失败");
|
log.error("mq通知主应用下发门店主数据失败");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
log.info("门店歇业状态修改失败,当前门店状态:{}, 歇业状态:{}", storeDO.getStoreStatus(), isCloseUp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import com.cool.store.annotation.Debounce;
|
import com.cool.store.annotation.Debounce;
|
||||||
import com.cool.store.constants.CommonConstants;
|
import com.cool.store.constants.CommonConstants;
|
||||||
import com.cool.store.dao.*;
|
import com.cool.store.dao.*;
|
||||||
|
import com.cool.store.dao.closeup.CloseUpApplyFormDAO;
|
||||||
|
import com.cool.store.dao.closeup.CloseUpPlatformDAO;
|
||||||
import com.cool.store.dao.bonus.BonusDistributionRuleDAO;
|
import com.cool.store.dao.bonus.BonusDistributionRuleDAO;
|
||||||
import com.cool.store.dao.fees.WalletPayInfoDAO;
|
import com.cool.store.dao.fees.WalletPayInfoDAO;
|
||||||
import com.cool.store.dto.*;
|
import com.cool.store.dto.*;
|
||||||
@@ -15,6 +17,8 @@ import com.cool.store.dto.xgj.XgjPartnerPageDTO;
|
|||||||
import com.cool.store.dto.wallet.*;
|
import com.cool.store.dto.wallet.*;
|
||||||
import com.cool.store.dto.xgj.XgjPayResultDTO;
|
import com.cool.store.dto.xgj.XgjPayResultDTO;
|
||||||
import com.cool.store.entity.*;
|
import com.cool.store.entity.*;
|
||||||
|
import com.cool.store.entity.closeup.CloseUpApplyFormDO;
|
||||||
|
import com.cool.store.entity.closeup.CloseUpPlatformDO;
|
||||||
import com.cool.store.entity.bonus.BonusDistributionRuleDO;
|
import com.cool.store.entity.bonus.BonusDistributionRuleDO;
|
||||||
import com.cool.store.entity.fees.WalletPayInfoDO;
|
import com.cool.store.entity.fees.WalletPayInfoDO;
|
||||||
import com.cool.store.enums.*;
|
import com.cool.store.enums.*;
|
||||||
@@ -52,6 +56,8 @@ import com.cool.store.response.storeopen.StoreRecipesResponse;
|
|||||||
import com.cool.store.service.*;
|
import com.cool.store.service.*;
|
||||||
import com.cool.store.service.bonus.BonusService;
|
import com.cool.store.service.bonus.BonusService;
|
||||||
import com.cool.store.service.close.CloseStoreService;
|
import com.cool.store.service.close.CloseStoreService;
|
||||||
|
import com.cool.store.service.closeup.PlatformHttpClientRest;
|
||||||
|
import com.cool.store.service.closeup.impl.CloseUpServiceImpl;
|
||||||
import com.cool.store.service.fees.WalletPayInfoService;
|
import com.cool.store.service.fees.WalletPayInfoService;
|
||||||
import com.cool.store.service.impl.CommonService;
|
import com.cool.store.service.impl.CommonService;
|
||||||
import com.cool.store.service.impl.UserAuthMappingServiceImpl;
|
import com.cool.store.service.impl.UserAuthMappingServiceImpl;
|
||||||
@@ -144,7 +150,12 @@ public class PCTestController {
|
|||||||
SignFranchiseService signFranchiseService;
|
SignFranchiseService signFranchiseService;
|
||||||
@Resource
|
@Resource
|
||||||
WalletPayInfoService walletPayInfoService;
|
WalletPayInfoService walletPayInfoService;
|
||||||
|
@Resource
|
||||||
|
CloseUpServiceImpl closeUpService;
|
||||||
|
@Resource
|
||||||
|
CloseUpApplyFormDAO closeUpApplyFormDAO;
|
||||||
|
@Resource
|
||||||
|
CloseUpPlatformDAO closeUpPlatformDAO;
|
||||||
@Resource
|
@Resource
|
||||||
ThirdStoreOpenDataService thirdStoreOpenDataService;
|
ThirdStoreOpenDataService thirdStoreOpenDataService;
|
||||||
@Resource
|
@Resource
|
||||||
@@ -152,6 +163,23 @@ public class PCTestController {
|
|||||||
@Resource
|
@Resource
|
||||||
BonusDistributionRuleDAO bonusRuleDAO;
|
BonusDistributionRuleDAO bonusRuleDAO;
|
||||||
|
|
||||||
|
@PostMapping("/closeUpAutoOpen")
|
||||||
|
public void closeUpAutoOpen(Long applyId) {
|
||||||
|
closeUpService.closeUpAutoOpen(applyId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/queryPlatformStatus")
|
||||||
|
public void queryPlatformStatus() {
|
||||||
|
xxlJobHandler.queryPlatformStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/autoPlatform")
|
||||||
|
public void autoPlatform(Long applyId) {
|
||||||
|
CloseUpApplyFormDO formDO = closeUpApplyFormDAO.getById(applyId);
|
||||||
|
List<CloseUpPlatformDO> platformList = closeUpPlatformDAO.getList(applyId, 0, 1, null);
|
||||||
|
closeUpService.autoPlatform(formDO.getStoreId(), formDO.getType(), platformList);
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/normalStoreApplyClose")
|
@PostMapping("/normalStoreApplyClose")
|
||||||
@Debounce(timeMs = 10000, diffUser = false)
|
@Debounce(timeMs = 10000, diffUser = false)
|
||||||
public ResponseResult<Boolean> normalStoreApplyClose() {
|
public ResponseResult<Boolean> normalStoreApplyClose() {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import com.cool.store.constants.CommonConstants;
|
import com.cool.store.constants.CommonConstants;
|
||||||
import com.cool.store.constants.RedisConstant;
|
import com.cool.store.constants.RedisConstant;
|
||||||
import com.cool.store.dao.*;
|
import com.cool.store.dao.*;
|
||||||
|
import com.cool.store.dao.closeup.CloseUpPlatformDAO;
|
||||||
import com.cool.store.dao.bonus.BonusDistributionRuleDAO;
|
import com.cool.store.dao.bonus.BonusDistributionRuleDAO;
|
||||||
import com.cool.store.dao.tp.TpApplyFormDAO;
|
import com.cool.store.dao.tp.TpApplyFormDAO;
|
||||||
import com.cool.store.dao.wallet.WalletTradeDAO;
|
import com.cool.store.dao.wallet.WalletTradeDAO;
|
||||||
@@ -14,6 +15,7 @@ import com.cool.store.dto.store.StoreExtendSoftOpenDTO;
|
|||||||
import com.cool.store.dto.store.StoreMasterIssueDTO;
|
import com.cool.store.dto.store.StoreMasterIssueDTO;
|
||||||
import com.cool.store.dto.store.StoreOrderTimeDTO;
|
import com.cool.store.dto.store.StoreOrderTimeDTO;
|
||||||
import com.cool.store.entity.*;
|
import com.cool.store.entity.*;
|
||||||
|
import com.cool.store.entity.closeup.CloseUpPlatformDO;
|
||||||
import com.cool.store.entity.bonus.BonusDistributionRuleDO;
|
import com.cool.store.entity.bonus.BonusDistributionRuleDO;
|
||||||
import com.cool.store.entity.tp.TpApplyFormDO;
|
import com.cool.store.entity.tp.TpApplyFormDO;
|
||||||
import com.cool.store.entity.wallet.WalletTradeDO;
|
import com.cool.store.entity.wallet.WalletTradeDO;
|
||||||
@@ -38,6 +40,7 @@ import com.cool.store.service.*;
|
|||||||
import com.cool.store.service.bonus.BonusService;
|
import com.cool.store.service.bonus.BonusService;
|
||||||
import com.cool.store.service.close.CloseStoreRefundService;
|
import com.cool.store.service.close.CloseStoreRefundService;
|
||||||
import com.cool.store.service.close.CloseStoreService;
|
import com.cool.store.service.close.CloseStoreService;
|
||||||
|
import com.cool.store.service.closeup.CloseUpService;
|
||||||
import com.cool.store.service.fees.WalletPayInfoService;
|
import com.cool.store.service.fees.WalletPayInfoService;
|
||||||
import com.cool.store.service.impl.CommonService;
|
import com.cool.store.service.impl.CommonService;
|
||||||
import com.cool.store.service.store.PreAllocationRecordService;
|
import com.cool.store.service.store.PreAllocationRecordService;
|
||||||
@@ -157,12 +160,17 @@ public class XxlJobHandler {
|
|||||||
CloseStoreInfoDAO closeStoreInfoDAO;
|
CloseStoreInfoDAO closeStoreInfoDAO;
|
||||||
@Resource
|
@Resource
|
||||||
ThirdStoreOpenDataService thirdStoreOpenDataService;
|
ThirdStoreOpenDataService thirdStoreOpenDataService;
|
||||||
|
@Resource
|
||||||
|
CloseUpPlatformDAO closeUpPlatformDAO;
|
||||||
|
@Resource
|
||||||
|
CloseUpService closeUpService;
|
||||||
|
|
||||||
private static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM");
|
private static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM");
|
||||||
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Auther: wangshuo
|
* @Auther: wangshuo
|
||||||
* @Date: 2024/4/29
|
* @Date: 2024/4/29
|
||||||
@@ -789,6 +797,32 @@ public class XxlJobHandler {
|
|||||||
log.info("------end withdrawUpdate------");
|
log.info("------end withdrawUpdate------");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@XxlJob("queryPlatformStatus")
|
||||||
|
public void queryPlatformStatus() {
|
||||||
|
MDCUtils.put(CommonConstants.REQUEST_ID, UUID.randomUUID().toString());
|
||||||
|
log.info("------start queryPlatformStatus------");
|
||||||
|
boolean hasNext = true;
|
||||||
|
int pageNum = 1;
|
||||||
|
int pageSize = CommonConstants.BATCH_SIZE;
|
||||||
|
while (hasNext) {
|
||||||
|
PageHelper.startPage(pageNum, pageSize);
|
||||||
|
List<CloseUpPlatformDO> list = closeUpPlatformDAO.getList(null, 0, null, true);
|
||||||
|
hasNext = list.size() >= pageSize;
|
||||||
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (CloseUpPlatformDO closeUpPlatformDO : list) {
|
||||||
|
try {
|
||||||
|
closeUpService.queryPlatformStatusByTaskId(closeUpPlatformDO);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("查询平台状态失败, closeUpPlatformId:{}", closeUpPlatformDO.getId(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pageNum++;
|
||||||
|
}
|
||||||
|
log.info("------end queryPlatformStatus------");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 每月统计上一个月门店的实收数据并入库
|
* 每月统计上一个月门店的实收数据并入库
|
||||||
* 建议每月1日凌晨执行
|
* 建议每月1日凌晨执行
|
||||||
|
|||||||
@@ -180,6 +180,10 @@ cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9
|
|||||||
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB
|
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB
|
||||||
wallet.org.id=140732221567301
|
wallet.org.id=140732221567301
|
||||||
|
|
||||||
|
closeup.platform.url=http://101.132.32.88:30081
|
||||||
|
closeup.platform.username=qcOasjPiy7Bsb6y
|
||||||
|
closeup.platform.secret=6ezC98lNx5b1IQt
|
||||||
|
|
||||||
store.open.url=https://zhengxin.zhidiansoft.com:5943
|
store.open.url=https://zhengxin.zhidiansoft.com:5943
|
||||||
store.open.appId=289704779317445
|
store.open.appId=289704779317445
|
||||||
store.open.appKey=IGSAEQoakR2HEaYx
|
store.open.appKey=IGSAEQoakR2HEaYx
|
||||||
|
|||||||
@@ -178,6 +178,10 @@ liePin.baseUrl=https://open-xhopen-qa53.qa.xunhou.cn
|
|||||||
liePin.tenantId=12833
|
liePin.tenantId=12833
|
||||||
liePin.mobile=13345565081
|
liePin.mobile=13345565081
|
||||||
|
|
||||||
|
closeup.platform.url=http://101.132.32.88:30081
|
||||||
|
closeup.platform.username=qcOasjPiy7Bsb6y
|
||||||
|
closeup.platform.secret=6ezC98lNx5b1IQt
|
||||||
|
|
||||||
store.open.url=https://zhengxin.zhidiansoft.com:5943
|
store.open.url=https://zhengxin.zhidiansoft.com:5943
|
||||||
store.open.appId=289704779317445
|
store.open.appId=289704779317445
|
||||||
store.open.appKey=IGSAEQoakR2HEaYx
|
store.open.appKey=IGSAEQoakR2HEaYx
|
||||||
|
|||||||
@@ -175,6 +175,10 @@ cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAleyT39qxm9Vi
|
|||||||
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB
|
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB
|
||||||
wallet.org.id=420289242456261
|
wallet.org.id=420289242456261
|
||||||
|
|
||||||
|
closeup.platform.url=https://zx-portal.huomayunping.com:3001
|
||||||
|
closeup.platform.username=qcOasjPiy7Bsb6y
|
||||||
|
closeup.platform.secret=6ezC98lNx5b1IQt
|
||||||
|
|
||||||
store.open.url=https://zhengxin.zhidiansoft.com:5943
|
store.open.url=https://zhengxin.zhidiansoft.com:5943
|
||||||
store.open.appId=289704779317445
|
store.open.appId=289704779317445
|
||||||
store.open.appKey=IGSAEQoakR2HEaYx
|
store.open.appKey=IGSAEQoakR2HEaYx
|
||||||
|
|||||||
@@ -180,6 +180,10 @@ cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4
|
|||||||
cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB
|
cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB
|
||||||
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB
|
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB
|
||||||
|
|
||||||
|
closeup.platform.url=http://101.132.32.88:30081
|
||||||
|
closeup.platform.username=qcOasjPiy7Bsb6y
|
||||||
|
closeup.platform.secret=6ezC98lNx5b1IQt
|
||||||
|
|
||||||
store.open.url=https://zhengxin.zhidiansoft.com:5943
|
store.open.url=https://zhengxin.zhidiansoft.com:5943
|
||||||
store.open.appId=289704779317445
|
store.open.appId=289704779317445
|
||||||
store.open.appKey=IGSAEQoakR2HEaYx
|
store.open.appKey=IGSAEQoakR2HEaYx
|
||||||
|
|||||||
Reference in New Issue
Block a user