diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java
index a03ccd22d..9f0155cab 100644
--- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java
+++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java
@@ -478,6 +478,18 @@ public enum ErrorCodeEnum {
IP_LIMIT(1840000, "IP访问次数超限", null),
+
+ CLOSE_UP_CLOSED_DOWN(1840000, "门店已歇业", null),
+ CLOSE_UP_ONLY_SUPPORT_OPEN(1840001, "仅支持在营门店发起歇业申请", null),
+ CLOSE_UP_EXIST_ONGOING_RECORD(18400002,"该日期下当前门店有进行中的申请,请确认!",null),
+ CLOSE_UP_AUDIT_RECORD_NOT_EXIST(1840003, "审批记录不存在", null),
+ CLOSE_UP_FORM_NOT_EXIST(1840004, "申请单不存在", null),
+ CLOSE_UP_AUDIT_ACCESS_DENIED(1840005, "无权限审批", null),
+ CLOSE_UP_STORE_OPEN(1840006, "门店已营业", null),
+ CLOSE_UP_ONLY_SUPPORT_CLOSE_UP(1840007, "仅支持歇业门店发起营业申请", null),
+ CLOSE_UP_CLOSED_AUDIT_NOT_PASS(1840008, "歇业申请未通过", null),
+ CLOSE_UP_EXIST_OPEN_APPLY(1840009, "该歇业申请单已存在开业申请", null),
+ CLOSE_UP_APPROVED(1840010, "该申请单已审批", null),
;
diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java
index defb4596d..2d6e80929 100644
--- a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java
+++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java
@@ -39,6 +39,7 @@ public enum RocketMqGroupEnum {
STORE_MASTER_ISSUE("store_master_issue", new ArrayList<>(Arrays.asList(RocketMqTagEnum.STORE_MASTER_ISSUE))),
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))),
+ CLOSE_UP_APPLY_STORE_UPDATE("close_up_apply_store_update", new ArrayList<>(Arrays.asList(RocketMqTagEnum.CLOSE_UP_APPLY_STORE_UPDATE))),
;
private final String group;
diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java
index 72a14d4c1..f5cc0d64f 100644
--- a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java
+++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java
@@ -23,6 +23,7 @@ public enum RocketMqTagEnum {
STORE_MASTER_ISSUE("store_master_issue","门店主数据下发"),
VISIT_RECORD_INVALID("visit_record_invalid", "拜访记录失效"),
TP_PENALTY_APPEAL_OVERDUE("tp_penalty_appeal_overdue", "十二分惩处单复议逾期"),
+ CLOSE_UP_APPLY_STORE_UPDATE("close_up_apply_store_update", "歇业申请修改门店状态"),
;
diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/SmsNoticeTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/SmsNoticeTypeEnum.java
new file mode 100644
index 000000000..90a233f65
--- /dev/null
+++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/SmsNoticeTypeEnum.java
@@ -0,0 +1,27 @@
+package com.cool.store.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ *
+ * 短信通知模板
+ *
+ *
+ * @author wangff
+ * @since 2026/4/13
+ */
+@Getter
+@AllArgsConstructor
+public enum SmsNoticeTypeEnum {
+ CLOSE_UP_CLOSE_NOTICE("SMS_504775487", "歇业通知", SmsSignEnum.ZHENGXIN),
+ CLOSE_UP_OPEN_NOTICE("SMS_504845455", "恢复营业通知", SmsSignEnum.ZHENGXIN),
+
+ ;
+
+ private final String templateCode;
+
+ private final String message;
+
+ private final SmsSignEnum smsSign;
+}
diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/SmsSignEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/SmsSignEnum.java
new file mode 100644
index 000000000..6f22559f0
--- /dev/null
+++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/SmsSignEnum.java
@@ -0,0 +1,24 @@
+package com.cool.store.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ *
+ * 短信签名
+ *
+ *
+ * @author wangff
+ * @since 2026/4/13
+ */
+@Getter
+@AllArgsConstructor
+public enum SmsSignEnum {
+
+ ZHENGXIN("正新", "正新"),
+ ;
+
+ private final String signName;
+
+ private final String message;
+}
diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/closeup/CloseUpPlatformEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/closeup/CloseUpPlatformEnum.java
new file mode 100644
index 000000000..1c1269e8f
--- /dev/null
+++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/closeup/CloseUpPlatformEnum.java
@@ -0,0 +1,43 @@
+package com.cool.store.enums.closeup;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ *
+ * 歇业开业平台账号
+ *
+ *
+ * @author wangff
+ * @since 2026/4/8
+ */
+@Getter
+@AllArgsConstructor
+public enum CloseUpPlatformEnum {
+ DOUYINTG("douyintg", "抖音", 0, "https://ossfilezx.coolstore.cn/icon/closeup/douyin.png"),
+ ELEMEWM("elemewm", "饿了么", 0, "https://ossfilezx.coolstore.cn/icon/closeup/ele.png"),
+ HUOMA("huoma", "火码POS", 0, "https://ossfilezx.coolstore.cn/icon/closeup/huoma.png"),
+ JINGDONGWM("jingdongwm", "京东外卖", 0, "https://ossfilezx.coolstore.cn/icon/closeup/jingdong.png"),
+ KUAISHOUTG("kuaishoutg", "快手团购", 0, "https://ossfilezx.coolstore.cn/icon/closeup/kuaishou.png"),
+ MEITUANTG("meituantg", "美团团购", 0, "https://ossfilezx.coolstore.cn/icon/closeup/meituan.png"),
+ MEITUANWM("meituanwm", "美团外卖", 0, "https://ossfilezx.coolstore.cn/icon/closeup/meituanwx.png"),
+ ZHIFUBAO("zhifubao", "支付宝团购", 0, "https://ossfilezx.coolstore.cn/icon/closeup/zhifubao.png"),
+ ;
+
+ /**
+ * 编码
+ */
+ private final String code;
+ /**
+ * 名称
+ */
+ private final String name;
+ /**
+ * 关闭类型
+ */
+ private final Integer type;
+ /**
+ * 图标地址
+ */
+ private final String icon;
+}
diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/closeup/CloseUpStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/closeup/CloseUpStatusEnum.java
new file mode 100644
index 000000000..003f2f618
--- /dev/null
+++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/closeup/CloseUpStatusEnum.java
@@ -0,0 +1,42 @@
+package com.cool.store.enums.closeup;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ *
+ * 歇业申请单状态
+ *
+ *
+ * @author wangff
+ * @since 2026/4/8
+ */
+@Getter
+@AllArgsConstructor
+public enum CloseUpStatusEnum {
+ APPROVAL(1, "审批中"),
+ REJECTED(5, "审批拒绝"),
+ PASS(10, "审批通过"),
+
+ APPLY_OPEN(15, "申请营业中"),
+ APPLY_OPEN_REJECTED(20, "申请营业审批拒绝"),
+ APPLY_OPEN_PASS(25, "申请营业审批通过"),
+ ;
+
+ private final Integer status;
+
+ private final String desc;
+
+ public static String getDesc(Integer status) {
+ for (CloseUpStatusEnum value : CloseUpStatusEnum.values()) {
+ if (value.status.equals(status)) {
+ return value.desc;
+ }
+ }
+ return null;
+ }
+
+ public static boolean unPass(Integer status) {
+ return REJECTED.getStatus().equals(status) || APPROVAL.getStatus().equals(status);
+ }
+}
diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/BeanUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/BeanUtil.java
index 60afd26c8..108a8fd40 100644
--- a/coolstore-partner-common/src/main/java/com/cool/store/utils/BeanUtil.java
+++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/BeanUtil.java
@@ -53,6 +53,16 @@ public class BeanUtil extends cn.hutool.core.bean.BeanUtil {
return newPage;
}
+ public static PageInfo toPage(PageInfo page, List list) {
+ PageInfo newPage = new PageInfo<>();
+ newPage.setPages(page.getPages());
+ newPage.setTotal(page.getTotal());
+ newPage.setPageNum(page.getPageNum());
+ newPage.setPageSize(page.getPageSize());
+ newPage.setList(list);
+ return newPage;
+ }
+
public static void copyPropertiesIgnoreId(Object source, Object target, String... ignoreProperties) {
if (source == null || target == null) {
return;
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreDao.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreDao.java
index 0a7f25f25..4e6ce8a7a 100644
--- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreDao.java
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreDao.java
@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollStreamUtil;
import com.cool.store.dto.store.StoreAddressDTO;
import com.cool.store.dto.store.StoreOrderTimeDTO;
import com.cool.store.entity.StoreDO;
+import com.cool.store.enums.StoreStatusEnum;
import com.cool.store.mapper.StoreMapper;
import com.cool.store.response.MiniShopsResponse;
import com.google.common.collect.Lists;
@@ -176,6 +177,26 @@ public class StoreDao {
storeMapper.updateStoreStatus(storeId,storeStatus,actualOpenDate);
}
+ /**
+ * 暂停营业
+ * @param storeId 门店id
+ * @param closeUpReason 暂停营业原因
+ */
+ public void closeUp(String storeId, String closeUpReason) {
+ if (storeMapper.updateStatus(storeId, StoreStatusEnum.CLOSE_UP.getValue()) > 0) {
+ storeMapper.insertOrUpdateCloseUpReason(storeId, closeUpReason);
+ }
+ }
+
+ /**
+ * 暂停营业门店转在营
+ */
+ public void closeUpToOpen(String storeId) {
+ if (storeMapper.updateStatus(storeId, StoreStatusEnum.OPEN.getValue()) > 0) {
+ storeMapper.insertOrUpdateCloseUpReason(storeId, null);
+ }
+ }
+
/**
* 门店状态改为闭店
* @param storeId 门店id
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/closeup/CloseUpApplyFormDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/closeup/CloseUpApplyFormDAO.java
new file mode 100644
index 000000000..508e1914a
--- /dev/null
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/closeup/CloseUpApplyFormDAO.java
@@ -0,0 +1,99 @@
+package com.cool.store.dao.closeup;
+
+import com.cool.store.entity.closeup.CloseUpApplyFormDO;
+import com.cool.store.mapper.closeup.CloseUpApplyFormMapper;
+import com.cool.store.request.closeup.CloseUpQueryRequest;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Repository;
+import tk.mybatis.mapper.entity.Example;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+import static com.cool.store.enums.closeup.CloseUpStatusEnum.APPROVAL;
+import static com.cool.store.enums.closeup.CloseUpStatusEnum.REJECTED;
+
+/**
+ *
+ * 歇业开业申请单DAO
+ *
+ *
+ * @author wangff
+ * @since 2026/4/8
+ */
+@Repository
+@RequiredArgsConstructor
+public class CloseUpApplyFormDAO {
+ private final CloseUpApplyFormMapper closeUpApplyFormMapper;
+
+ public void insertOrUpdate(CloseUpApplyFormDO record) {
+ closeUpApplyFormMapper.insertOrUpdate(record);
+ }
+
+ /**
+ * 是否存在进行中的申请
+ */
+ public boolean existOngoingRecord(String storeId, Integer type) {
+ Example example = new Example(CloseUpApplyFormDO.class);
+ example.createCriteria()
+ .andEqualTo("storeId", storeId)
+ .andEqualTo("type", type)
+ .andEqualTo("status", APPROVAL.getStatus());
+ return closeUpApplyFormMapper.selectCountByExample(example) > 0;
+ }
+
+ public CloseUpApplyFormDO getById(Long id) {
+ return closeUpApplyFormMapper.selectByPrimaryKey(id);
+ }
+
+ public List getByIds(List ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return Collections.emptyList();
+ }
+ Example example = new Example(CloseUpApplyFormDO.class);
+ example.createCriteria().andIn("id", ids);
+ return closeUpApplyFormMapper.selectByExample(example);
+ }
+
+ public void updateByPrimaryKeySelective(CloseUpApplyFormDO record) {
+ closeUpApplyFormMapper.updateByPrimaryKeySelective(record);
+ }
+
+ public List getList(Long lineId, Integer type, String storeId) {
+ Example example = new Example(CloseUpApplyFormDO.class);
+ example.createCriteria()
+ .andEqualTo("lineId", lineId)
+ .andEqualTo("type", type)
+ .andEqualTo("storeId", storeId);
+ example.setOrderByClause("create_time DESC");
+ return closeUpApplyFormMapper.selectByExample(example);
+ }
+
+ public List getList(CloseUpQueryRequest request) {
+ return closeUpApplyFormMapper.getList(request);
+ }
+
+ /**
+ * 歇业申请单存在开业申请
+ */
+ public boolean existOpenApply(Long sourceApplyId) {
+ Example example = new Example(CloseUpApplyFormDO.class);
+ example.createCriteria()
+ .andEqualTo("sourceApplyId", sourceApplyId)
+ .andNotEqualTo("status", REJECTED.getStatus());
+ return closeUpApplyFormMapper.selectCountByExample(example) > 0;
+ }
+
+ public CloseUpApplyFormDO getBySourceApplyId(Long sourceApplyId) {
+ return closeUpApplyFormMapper.selectOne(CloseUpApplyFormDO.builder().sourceApplyId(sourceApplyId).build());
+ }
+
+ /**
+ * 判断是否存在时间交集的歇业申请单(非审批拒绝状态)
+ */
+ public boolean existsTimeOverlap(String storeId, Date planCloseDate, Date planOpenDate) {
+ return closeUpApplyFormMapper.existsTimeOverlap(storeId, planCloseDate, planOpenDate) > 0;
+ }
+}
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/closeup/CloseUpAuditRecordDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/closeup/CloseUpAuditRecordDAO.java
new file mode 100644
index 000000000..4922bda94
--- /dev/null
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/closeup/CloseUpAuditRecordDAO.java
@@ -0,0 +1,136 @@
+package com.cool.store.dao.closeup;
+
+import com.cool.store.entity.closeup.CloseUpAuditRecordDO;
+import com.cool.store.enums.close.CloseStoreAuditStatusEnum;
+import com.cool.store.enums.close.RecordTypeEnum;
+import com.cool.store.mapper.closeup.CloseUpAuditRecordMapper;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Repository;
+import tk.mybatis.mapper.entity.Example;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 歇业开业审批记录DAO
+ *
+ *
+ * @author wangff
+ * @since 2026/4/8
+ */
+@Repository
+@RequiredArgsConstructor
+public class CloseUpAuditRecordDAO {
+ private final CloseUpAuditRecordMapper closeUpAuditRecordMapper;
+
+ /**
+ * 提交新增记录
+ */
+ public void addSubmitRecord(Long applyId, Integer applyType, String userId, String userName) {
+ CloseUpAuditRecordDO recordDO = CloseUpAuditRecordDO.builder()
+ .applyId(applyId)
+ .applyType(applyType)
+ .recordType(RecordTypeEnum.CLOSE_STORE_RECORD_TYPE_10.getRecordType())
+ .actionRemark("")
+ .finishTaskTime(new Date())
+ .receiveTaskTime(new Date())
+ .handlerUserId(userId)
+ .handlerUserName(userName)
+ .auditStatus(CloseStoreAuditStatusEnum.PASS.getStatus())
+ .handlerUserIds(getUserIds(Collections.singletonList(userId)))
+ .build();
+ closeUpAuditRecordMapper.insertSelective(recordDO);
+ }
+
+ /**
+ * 提交审批记录
+ */
+ public void addApproveRecord(Long applyId, Integer applyType, List userIdList) {
+ CloseUpAuditRecordDO recordDO = CloseUpAuditRecordDO.builder()
+ .applyId(applyId)
+ .applyType(applyType)
+ .recordType(RecordTypeEnum.CLOSE_STORE_RECORD_TYPE_20.getRecordType())
+ .receiveTaskTime(new Date())
+ .handlerUserIds(getUserIds(userIdList))
+ .auditStatus(CloseStoreAuditStatusEnum.PENDING.getStatus())
+ .build();
+ closeUpAuditRecordMapper.insertSelective(recordDO);
+ }
+
+ /**
+ * 首次发起流程 添加审批记录
+ */
+ public void addRecord(Long applyId, Integer applyType, String userId, String userName, List userIdList) {
+ //新增提交审批
+ addSubmitRecord(applyId, applyType, userId, userName);
+ //新增审批记录
+ addApproveRecord(applyId, applyType, userIdList);
+ }
+
+ private String getUserIds(List userIds) {
+ String userIdStr = userIds.stream()
+ .filter(StringUtils::isNotBlank)
+ .distinct()
+ .collect(Collectors.joining(","));
+ return "," + userIdStr + ",";
+ }
+
+ public CloseUpAuditRecordDO getById(Long id) {
+ CloseUpAuditRecordDO recordDO = closeUpAuditRecordMapper.selectByPrimaryKey(id);
+ if (Objects.nonNull(recordDO) && recordDO.getDeleted().equals(0)) {
+ return recordDO;
+ }
+ return null;
+ }
+
+ public CloseUpAuditRecordDO getOngoingRecordByApplyId(Long applyId) {
+ Example example = new Example(CloseUpAuditRecordDO.class);
+ example.createCriteria()
+ .andEqualTo("applyId", applyId)
+ .andEqualTo("auditStatus", CloseStoreAuditStatusEnum.PENDING.getStatus());
+ example.setOrderByClause("create_time desc limit 1");
+ return closeUpAuditRecordMapper.selectOneByExample(example);
+ }
+
+ public CloseUpAuditRecordDO getLatestRecordByStatus(Long applyId, Integer auditStatus) {
+ Example example = new Example(CloseUpAuditRecordDO.class);
+ example.createCriteria()
+ .andEqualTo("applyId", applyId)
+ .andEqualTo("auditStatus", auditStatus);
+ example.setOrderByClause("create_time desc limit 1");
+ return closeUpAuditRecordMapper.selectOneByExample(example);
+ }
+
+ public void updateByPrimaryKeySelective(CloseUpAuditRecordDO recordDO) {
+ closeUpAuditRecordMapper.updateByPrimaryKeySelective(recordDO);
+ }
+
+ public List getList(String userId, Integer applyType, Integer auditStatus) {
+ Example example = new Example(CloseUpAuditRecordDO.class);
+ example.createCriteria()
+ .andLike("handlerUserIds", "%," + userId + ",%")
+ .andEqualTo("applyType", applyType)
+ .andEqualTo("auditStatus", auditStatus);
+ example.setOrderByClause("create_time desc");
+ return closeUpAuditRecordMapper.selectByExample(example);
+ }
+
+ /**
+ * 根据申请id查询审批记录
+ * @param applyId 申请id
+ * @return 审批记录列表
+ */
+ public List getListByApplyId(Long applyId) {
+ Example example = new Example(CloseUpAuditRecordDO.class);
+ example.createCriteria()
+ .andEqualTo("applyId", applyId)
+ .andEqualTo("deleted", 0);
+ example.setOrderByClause("id ASC");
+ return closeUpAuditRecordMapper.selectByExample(example);
+ }
+}
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/closeup/CloseUpPlatformDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/closeup/CloseUpPlatformDAO.java
new file mode 100644
index 000000000..2359f7221
--- /dev/null
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/closeup/CloseUpPlatformDAO.java
@@ -0,0 +1,87 @@
+package com.cool.store.dao.closeup;
+
+import com.alibaba.excel.util.CollectionUtils;
+import com.cool.store.entity.closeup.CloseUpPlatformDO;
+import com.cool.store.enums.closeup.CloseUpPlatformEnum;
+import com.cool.store.mapper.closeup.CloseUpPlatformMapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Repository;
+import tk.mybatis.mapper.entity.Example;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 歇业开业平台账号DAO
+ *
+ *
+ * @author wangff
+ * @since 2026/4/8
+ */
+@Repository
+@RequiredArgsConstructor
+public class CloseUpPlatformDAO {
+ private final CloseUpPlatformMapper closeUpPlatformMapper;
+
+ public List init(Long applyId, Integer applyType, Date taskStartDate) {
+ List list = Arrays.stream(CloseUpPlatformEnum.values())
+ .map(v -> CloseUpPlatformDO.builder()
+ .applyId(applyId)
+ .applyType(applyType)
+ .code(v.getCode())
+ .name(v.getName())
+ .status(0)
+ .type(v.getType())
+ .icon(v.getIcon())
+ .taskStartDate(taskStartDate)
+ .build())
+ .collect(Collectors.toList());
+ closeUpPlatformMapper.insertBatch(list);
+ return list;
+ }
+
+ public List getList(Long applyId, Integer status, Integer type) {
+ Example example = new Example(CloseUpPlatformDO.class);
+ Example.Criteria criteria = example.createCriteria()
+ .andEqualTo("applyId", applyId);
+ if (Objects.nonNull(status)) {
+ criteria.andEqualTo("status", status);
+ }
+ if (Objects.nonNull(type)) {
+ criteria.andEqualTo("type", type);
+ }
+ return closeUpPlatformMapper.selectByExample(example);
+ }
+
+ /**
+ * 更新状态
+ */
+ public void updateStatusByIds(List ids, Integer status) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ Example example = new Example(CloseUpPlatformDO.class);
+ example.createCriteria()
+ .andIn("id", ids);
+ CloseUpPlatformDO update = CloseUpPlatformDO.builder().status(status).build();
+ closeUpPlatformMapper.updateByExampleSelective(update, example);
+ }
+
+ /**
+ * 根据申请单id删除
+ */
+ public void deleteByApplyId(Long applyId) {
+ closeUpPlatformMapper.delete(CloseUpPlatformDO.builder().applyId(applyId).build());
+ }
+
+ /**
+ * 查询待处理的申请单id
+ */
+ public List selectTodoApplyIds(Integer applyType, String storeKeyword) {
+ return closeUpPlatformMapper.selectTodoApplyIds(applyType, storeKeyword);
+ }
+}
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java
index 287c32701..7fbe58ee1 100644
--- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java
@@ -98,6 +98,9 @@ public interface StoreMapper {
@Param("storeStatus") String storeStatus,
@Param("actualOpenDate") Date actualOpenDate);
+ int updateStatus(@Param("storeId") String storeId,
+ @Param("storeStatus") String storeStatus);
+
/**
* 门店状态改为闭店
* @param storeId 门店id
@@ -113,6 +116,8 @@ public interface StoreMapper {
*/
int insertOrUpdateCloseInfo(@Param("storeId") String storeId, @Param("closeReason") Integer closeReason, @Param("closeNature") Integer closeNature);
+ int insertOrUpdateCloseUpReason(@Param("storeId") String storeId, @Param("closeUpReason") String closeUpReason);
+
/**
* 查询最近没有订货记录的门店
* @param latestDate 最近订货时间
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/closeup/CloseUpApplyFormMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/closeup/CloseUpApplyFormMapper.java
new file mode 100644
index 000000000..b5b3cfe5f
--- /dev/null
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/closeup/CloseUpApplyFormMapper.java
@@ -0,0 +1,24 @@
+package com.cool.store.mapper.closeup;
+
+import com.cool.store.entity.closeup.CloseUpApplyFormDO;
+import com.cool.store.request.closeup.CloseUpQueryRequest;
+import org.apache.ibatis.annotations.Param;
+import tk.mybatis.mapper.common.Mapper;
+
+import java.util.Date;
+import java.util.List;
+
+public interface CloseUpApplyFormMapper extends Mapper {
+
+ List getList(CloseUpQueryRequest request);
+
+ /**
+ * 新增或编辑,使用 ON DUPLICATE KEY UPDATE
+ */
+ int insertOrUpdate(CloseUpApplyFormDO record);
+
+ /**
+ * 判断是否存在时间交集的申请单(非审批拒绝状态)
+ */
+ int existsTimeOverlap(@Param("storeId") String storeId, @Param("planCloseDate") Date planCloseDate, @Param("planOpenDate") Date planOpenDate);
+}
\ No newline at end of file
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/closeup/CloseUpAuditRecordMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/closeup/CloseUpAuditRecordMapper.java
new file mode 100644
index 000000000..18790f9f3
--- /dev/null
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/closeup/CloseUpAuditRecordMapper.java
@@ -0,0 +1,7 @@
+package com.cool.store.mapper.closeup;
+
+import com.cool.store.entity.closeup.CloseUpAuditRecordDO;
+import tk.mybatis.mapper.common.Mapper;
+
+public interface CloseUpAuditRecordMapper extends Mapper {
+}
\ No newline at end of file
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/closeup/CloseUpPlatformMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/closeup/CloseUpPlatformMapper.java
new file mode 100644
index 000000000..b65c738b1
--- /dev/null
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/closeup/CloseUpPlatformMapper.java
@@ -0,0 +1,17 @@
+package com.cool.store.mapper.closeup;
+
+import com.cool.store.entity.closeup.CloseUpPlatformDO;
+import org.apache.ibatis.annotations.Param;
+import tk.mybatis.mapper.common.Mapper;
+
+import java.util.List;
+
+public interface CloseUpPlatformMapper extends Mapper {
+
+ int insertBatch(List list);
+
+ /**
+ * 查询待处理的申请单id
+ */
+ List selectTodoApplyIds(@Param("applyType") Integer applyType, @Param("storeKeyword") String storeKeyword);
+}
\ No newline at end of file
diff --git a/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml
index 57ee263d6..ed31da732 100644
--- a/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml
+++ b/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml
@@ -302,6 +302,12 @@
WHERE store_id = #{storeId} AND is_delete = 'effective'
+
+ UPDATE store_${enterpriseId}
+ SET store_status = #{storeStatus}
+ WHERE store_id = #{storeId} AND is_delete = 'effective'
+
+
UPDATE store_${enterpriseId}
SET store_status = 'closed',
@@ -317,6 +323,13 @@
close_nature = VALUES(close_nature)
+
+ INSERT INTO store_extend_info_${enterpriseId}(store_id, close_up_reason)
+ VALUES(#{storeId}, #{closeUpReason})
+ ON DUPLICATE KEY UPDATE
+ close_up_reason = VALUES(close_up_reason)
+
+