From a42a109b6c5bd8778491ba729fd2fe66c1851ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E9=9D=9E=E5=87=A1?= Date: Sun, 10 May 2026 13:41:41 +0000 Subject: [PATCH] Merge #120 into master from cc_20250922_closeStore_w MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix:闭店中止新增审批记录 * cc_20250922_closeStore_w: (100 commits squashed) - fix:新管家应退实退金额字段修改 - fix:启用禁用规则合并 - Merge branch 'refs/heads/master' into cc_2021104_twelve_points - fix:惩处规则列表新增描述字段 - fix:闭店支行测试环境mock - fix:新增用户管辖门店列表接口 - fix:门店列表接口新增门店积分字段 - fix:查询问题修复;新增草稿状态 - fix:申请单审批补充审批人字段 - fix:修改门店积分限制0-12 - fix:积分流水接口修复;申请单查询接口添加日期筛选 - fix:redis报错修复 - fix:惩处单查询提供惩处待处理、惩处已处理状态筛选 - fix:新管家关店原因字段补充 - fix:惩处单复议申请查询异常修复 - fix:小程序惩处单详情接口字段补充 - fix:查询字段补充 - fix - fix:转义 - fix - fix:新增撤销复议申请单接口 - fix:补充字段 - fix:补充字段 - fix:新增门店分数接口 - fix:申请单新增筛选条件 - fix:门店积分接口返回参数修改 - fix:小程序规则分页查询接口改为Post - fix:问题修复 - fix:十二分导入 - fix:导入状态部分失败改为失败 - fix:字段补充 - fix:异步下Excel导入图片临时文件被清理的问题 - fix:扣分申请导入图片路径修改并使用CDN - fix:导入图片上传oss文件类型修改为图片 - fix:批量审批 - fix:批量审批新增备注字段 - fix:字段补充 - Merge branch 'master' into cc_2021104_twelve_points # Conflicts: # coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java # coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java # coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreDao.java # coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java # coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml # coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCStoreController.java - fix:新增字段 - fix:字段补充 - fix:小程序新增接口根据闭店申请id获取闭店申请简单信息 - fix:小程序退款信息列表修改 - fix:闭店审批允许管理员审批 - fix:字典项新增排序、编辑删除权限、关联字典项 - Merge branch 'master' into cc_2021104_twelve_points - fix:十二分值-扣分列表申请复议截止日期格式 - fix:去除appealEndDate格式校验 - Merge remote-tracking branch 'origin/cc_20260128_dict_update' into cc_20260205_twelve_points_v2 - fix:阶段名称修改 - Merge branch 'refs/heads/master' into cc_20250922_closeStore_w # Conflicts: # coolstore-partner-common/src/main/java/com/cool/store/enums/close/CloseStoreSubStageStatusEnum.java - fix:闭店记录列表补充审批id;仅在营门店允许发起闭店 - fix:提交新管家字段取值逻辑修改 - Merge branch 'cc_20260128_dict_update' into cc_2021104_twelve_points - fix:字典回显包含已删除字典项 - Merge branch 'master' into cc_2021104_twelve_points - Merge remote-tracking branch 'origin/cc_20260205_twelve_points_v2' into cc_2021104_twelve_points - fix:去除惩处单审批阶段;复议申请单证明图片非必填 - fix:复议拒绝后惩处单直接生效 - fix:扣分申请单证明图片改为非必填 - fix - fix:字段转义 - fix:惩处待处理包含带生效数据 - fix:字段转义 - fix:警告单金额和积分初始化为0 - fix - fix:小程序接口字段转义 - Merge branch 'master' into cc_2021104_twelve_points - fix:十二分审批记录展示待审批人 - fix - fix:惩处单复议申请逾期检查改为延时队列 - Merge branch 'refs/heads/master' into cc_20250922_closeStore_w - fix:闭店定时任务过滤闭店状态补充 - Merge branch 'refs/heads/master' into cc_2021104_twelve_points # Conflicts: # coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java - Merge branch 'master' into cc_20250922_closeStore_w - fix:闭店材料新增字段 - fix - fix:小程序闭店材料详情新增字段 - fix:闭店流程流转校验除授权书外是否已邮寄 - fix:营帐通JWT生成 - fix:营帐通JWT改为post - fix:修改secret - fix:配置 - Merge branch 'master' into cc_2021104_twelve_points - fix:十二分流水导出;流水新增规则描述字段 - fix - fix:闭店新管家接口错误信息返回 - Merge branch 'master' into cc_20250922_closeStore_w - Merge branch 'cc_20260412_jwt_ge' into cc_20250922_closeStore_w - Merge branch 'master' into cc_20250922_closeStore_w - fix:闭店火码关闭账号不存在时忽略 - Merge branch 'cc_2021104_twelve_points' into cc_20250922_closeStore_w - Merge branch 'master' into cc_20250922_closeStore_w # Conflicts: # coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java # coolstore-partner-common/src/main/java/com/cool/store/enums/FileTypeEnum.java # coolstore-partner-service/src/main/java/com/cool/store/service/ExportRealizeService.java # coolstore-partner-service/src/main/java/com/cool/store/service/ExportService.java # coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportRealizeServiceImpl.java # coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportServiceImpl.java # coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ExportController.java - fix:闭店逻辑修改 - fix:闭店待办列表新增字段 - fix:计划闭店时间修改 - fix:闭店信息新增初审、复审、终审时间字段;闭店管理列表新增返回字段 - fix:删除字段 - fix:字段名称修改 - fix:闭店中止新增审批记录 - Merge branch 'master' into cc_20250922_closeStore_w # Conflicts: # coolstore-partner-common/src/main/java/com/cool/store/enums/UserRoleEnum.java Signed-off-by: 王非凡 Merged-by: 正新 CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/120 --- .../cool/store/constants/RedisConstant.java | 5 ++ .../com/cool/store/enums/ErrorCodeEnum.java | 1 + .../enums/close/CloseStoreStatusEnum.java | 14 +++-- .../enums/close/CloseStoreSubStageEnum.java | 4 +- .../store/dao/CloseStoreAuditRecordDAO.java | 25 +++++++- .../com/cool/store/dao/CloseStoreInfoDAO.java | 12 ++++ .../mapper/CloseStoreAuditRecordMapper.xml | 2 +- .../resources/mapper/CloseStoreInfoMapper.xml | 4 +- .../store/entity/CloseStoreAuditRecordDO.java | 6 +- .../cool/store/entity/CloseStoreInfoDO.java | 12 ++++ .../close/store/CloseStoreAuditRequest.java | 6 ++ .../close/store/CloseStoreInfoDetailVO.java | 11 ++++ .../vo/close/store/CloseStoreInfoListVO.java | 5 ++ .../service/close/CloseStoreService.java | 7 +++ .../close/impl/CloseStoreServiceImpl.java | 58 +++++++++++++++++-- .../controller/webb/CloseStoreController.java | 8 +++ .../controller/webb/PCTestController.java | 14 +++++ .../com/cool/store/job/XxlJobHandler.java | 14 +++++ 18 files changed, 190 insertions(+), 18 deletions(-) diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java index 59f92de59..bbde7df68 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java @@ -441,4 +441,9 @@ public class RedisConstant { public static final String PRE_ALLOCATION = "pre_allocation:{0}"; public static final String STORE_ID_MAPPING = "store_id_mapping"; + + /** + * 闭店审批拒绝原因-由分店订货 + */ + public static final String CLOSE_REJECT_OTHER_STORE = "close_reject_other_store"; } 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 0c9b00c83..1cf36fbcd 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 @@ -424,6 +424,7 @@ public enum ErrorCodeEnum { CLOSE_STORE_REFUND_EXIST_EFFECTIVE_RECORD(1710017, "存在生效中的退款申请!", null), CLOSE_STORE_REFUND_TYPE_ERROR(1710018, "退款类型错误", null), CLOSE_STORE_ONLY_SUPPORT_OPEN(1710019, "仅支持在营或暂停营业的门店发起闭店申请", null), + CLOSE_STORE_ONLY_APPROVAL_ENABLE_SUSPEND(1710020, "仅审批中申请允许中止", null), /** * 181 十二分制 diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/close/CloseStoreStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/close/CloseStoreStatusEnum.java index a0b54e7fe..9ba9d29b2 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/close/CloseStoreStatusEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/close/CloseStoreStatusEnum.java @@ -6,15 +6,18 @@ package com.cool.store.enums.close; * @Version 1.0 */ public enum CloseStoreStatusEnum { - // 督导审批中 + // 运营顾问审批中 UNDER_APPROVAL(1, "审批中"), - // 大区老总审批中 + // 运营片区总顾问审批中 MANAGER_UNDER_APPROVAL(2, "审批中"), + // 运营副总裁审批中 + OPERATION_VICE_PRESIDENT_APPROVAL(3, "审批中"), REVIEW_NOT_APPROVED(5, "审批拒绝"), CANCELED(10, "已取消"), CLOSING(15, "闭店中"), COMPLETED(20, "已完成"), - + // 审批阶段由管理角色触发,用于区别审批前还是审批中结束 + SUSPEND(25, "已终止"), ; private Integer closeStoreStatus; @@ -66,6 +69,8 @@ public enum CloseStoreStatusEnum { case UNDER_APPROVAL: return MANAGER_UNDER_APPROVAL.getCloseStoreStatus(); case MANAGER_UNDER_APPROVAL: + return OPERATION_VICE_PRESIDENT_APPROVAL.getCloseStoreStatus(); + case OPERATION_VICE_PRESIDENT_APPROVAL: return CLOSING.getCloseStoreStatus(); case CLOSING: return COMPLETED.getCloseStoreStatus(); @@ -76,6 +81,7 @@ public enum CloseStoreStatusEnum { public static boolean isApprove(Integer status) { return CloseStoreStatusEnum.UNDER_APPROVAL.getCloseStoreStatus().equals(status) - || CloseStoreStatusEnum.MANAGER_UNDER_APPROVAL.getCloseStoreStatus().equals(status); + || CloseStoreStatusEnum.MANAGER_UNDER_APPROVAL.getCloseStoreStatus().equals(status) + || CloseStoreStatusEnum.OPERATION_VICE_PRESIDENT_APPROVAL.getCloseStoreStatus().equals(status); } } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/close/CloseStoreSubStageEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/close/CloseStoreSubStageEnum.java index 37de0ec29..52eb2bff3 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/close/CloseStoreSubStageEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/close/CloseStoreSubStageEnum.java @@ -14,8 +14,8 @@ import java.util.Objects; */ public enum CloseStoreSubStageEnum { - CLOSE_STORE_SUB_STAGE_10(CloseStoreStageEnum.CLOSE_STORE_STAGE_1, 10, "关店所需材料上交", 1), - CLOSE_STORE_SUB_STAGE_20(CloseStoreStageEnum.CLOSE_STORE_STAGE_2, 20, "账号关闭", 2), + CLOSE_STORE_SUB_STAGE_10(CloseStoreStageEnum.CLOSE_STORE_STAGE_1, 10, "关店所需材料上交", 7), + CLOSE_STORE_SUB_STAGE_20(CloseStoreStageEnum.CLOSE_STORE_STAGE_2, 20, "账号关闭", 3), CLOSE_STORE_SUB_STAGE_30(CloseStoreStageEnum.CLOSE_STORE_STAGE_3, 30, "押金退款", 3), CLOSE_STORE_SUB_STAGE_40(CloseStoreStageEnum.CLOSE_STORE_STAGE_3, 40, "货款退款", 3), ; diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/CloseStoreAuditRecordDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/CloseStoreAuditRecordDAO.java index 461c667cf..444df016e 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/CloseStoreAuditRecordDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/CloseStoreAuditRecordDAO.java @@ -57,13 +57,32 @@ public class CloseStoreAuditRecordDAO { * @param userIdList * @return */ - public int addApproveRecord(Long closeStoreId, List userIdList) { + public int addApproveRecord(Long closeStoreId, List userIdList, Date planCompleteTime) { CloseStoreAuditRecordDO closeStoreAuditRecordDO = CloseStoreAuditRecordDO.builder() .closeStoreId(closeStoreId) .recordType(RecordTypeEnum.CLOSE_STORE_RECORD_TYPE_20.getRecordType()) .receiveTaskTime(new Date()) .handlerUserIds(getUserIds(userIdList)) .auditStatus(CloseStoreAuditStatusEnum.PENDING.getStatus()) + .planCompleteTime(planCompleteTime) + .build(); + return closeStoreAuditRecordMapper.insertSelective(closeStoreAuditRecordDO); + } + + /** + * 新增中止操作记录 + */ + public int addSuspendRecord(Long closeStoreId, String userId, String userName) { + CloseStoreAuditRecordDO closeStoreAuditRecordDO = CloseStoreAuditRecordDO.builder() + .closeStoreId(closeStoreId) + .recordType(RecordTypeEnum.CLOSE_STORE_RECORD_TYPE_20.getRecordType()) + .actionRemark("中止") + .finishTaskTime(new Date()) + .receiveTaskTime(new Date()) + .handlerUserId(userId) + .handlerUserName(userName) + .auditStatus(CloseStoreAuditStatusEnum.PASS.getStatus()) + .handlerUserIds(getUserIds(Collections.singletonList(userId))) .build(); return closeStoreAuditRecordMapper.insertSelective(closeStoreAuditRecordDO); } @@ -79,11 +98,11 @@ public class CloseStoreAuditRecordDAO { /** * 首次发起流程 添加审批记录 */ - public void addRecord(Long closeStoreId, String userId, String userName, List userIdList) { + public void addRecord(Long closeStoreId, String userId, String userName, List userIdList, Date planCompleteTime) { //新增提交审批 addSubmitRecord(closeStoreId, userId, userName); //新增审批记录 - addApproveRecord(closeStoreId, userIdList); + addApproveRecord(closeStoreId, userIdList, planCompleteTime); } /** diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/CloseStoreInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/CloseStoreInfoDAO.java index 1d2d39c2e..e631d16a8 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/CloseStoreInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/CloseStoreInfoDAO.java @@ -52,6 +52,7 @@ public class CloseStoreInfoDAO { example.createCriteria().andEqualTo("storeId", storeId) .andIn("closeStatus", Arrays.asList(CloseStoreStatusEnum.UNDER_APPROVAL.getCloseStoreStatus(), CloseStoreStatusEnum.MANAGER_UNDER_APPROVAL.getCloseStoreStatus(), + CloseStoreStatusEnum.OPERATION_VICE_PRESIDENT_APPROVAL.getCloseStoreStatus(), CloseStoreStatusEnum.CLOSING.getCloseStoreStatus())); return closeStoreInfoMapper.selectCountByExample(example) > 0; } @@ -85,4 +86,15 @@ public class CloseStoreInfoDAO { example.setOrderByClause("create_time DESC"); return closeStoreInfoMapper.selectByExample(example); } + + /** + * 查询最后一次拒绝的闭店申请 + */ + public CloseStoreInfoDO getRejectByStoreId(String storeId) { + Example example = new Example(CloseStoreInfoDO.class); + example.createCriteria().andEqualTo("storeId", storeId) + .andEqualTo("closeStatus", CloseStoreStatusEnum.REVIEW_NOT_APPROVED.getCloseStoreStatus()); + example.setOrderByClause("create_time DESC LIMIT 1"); + return closeStoreInfoMapper.selectOneByExample(example); + } } diff --git a/coolstore-partner-dao/src/main/resources/mapper/CloseStoreAuditRecordMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/CloseStoreAuditRecordMapper.xml index 6d4e77299..da3918f95 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/CloseStoreAuditRecordMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/CloseStoreAuditRecordMapper.xml @@ -29,7 +29,7 @@ @@ -38,7 +40,7 @@ - AND (b.close_status = 1 OR b.close_status = 2) + AND (b.close_status = 1 OR b.close_status = 2 OR b.close_status = 3) AND b.close_status = #{request.closeStatus} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/CloseStoreAuditRecordDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/CloseStoreAuditRecordDO.java index 71ae2a6c0..a67238387 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/CloseStoreAuditRecordDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/CloseStoreAuditRecordDO.java @@ -88,5 +88,9 @@ public class CloseStoreAuditRecordDO { @Column(name = "updated_time") private Date updatedTime; - + /** + * 预估完成时间 + */ + @Column(name = "plan_complete_time") + private Date planCompleteTime; } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/CloseStoreInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/CloseStoreInfoDO.java index b7ee3ee80..190cb834c 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/CloseStoreInfoDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/CloseStoreInfoDO.java @@ -95,4 +95,16 @@ public class CloseStoreInfoDO { */ @Column(name = "apply_user_id") private String applyUserId; + + /** + * 审批拒绝原因 + */ + @Column(name = "reject_reason") + private String rejectReason; + + /** + * 审批拒绝备注 + */ + @Column(name = "reject_remark") + private String rejectRemark; } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/close/store/CloseStoreAuditRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/close/store/CloseStoreAuditRequest.java index 3c3a9f818..cd60db841 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/close/store/CloseStoreAuditRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/close/store/CloseStoreAuditRequest.java @@ -28,4 +28,10 @@ public class CloseStoreAuditRequest { @ApiModelProperty("闭店原因") private Integer closeReason; + + @ApiModelProperty("未订货自动发起时拒绝原因,字典表close_store_reject_reason") + private String rejectReason; + + @ApiModelProperty("未订货自动发起时拒绝备注") + private String rejectRemark; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/close/store/CloseStoreInfoDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/close/store/CloseStoreInfoDetailVO.java index c64c7d2b4..7ce5d1711 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/close/store/CloseStoreInfoDetailVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/close/store/CloseStoreInfoDetailVO.java @@ -1,5 +1,6 @@ package com.cool.store.vo.close.store; +import com.cool.store.annotation.DictField; import com.cool.store.enums.close.CloseStoreStatusEnum; import com.cool.store.enums.master.BrandTypeEnum; import com.cool.store.enums.master.StoreCloseReasonEnum; @@ -81,6 +82,16 @@ public class CloseStoreInfoDetailVO { @ApiModelProperty("闭店状态名称") private String closeStatusName; + @ApiModelProperty("未订货自动发起时拒绝原因,字典表close_store_reject_reason") + private String rejectReason; + + @ApiModelProperty("未订货自动发起时拒绝原因,字典表close_store_reject_reason") + @DictField + private String rejectReasonName; + + @ApiModelProperty("未订货自动发起时拒绝备注") + private String rejectRemark; + public String getCloseStatusName() { return CloseStoreStatusEnum.getNameByStatus(closeStatus); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/close/store/CloseStoreInfoListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/close/store/CloseStoreInfoListVO.java index 198522069..fcda06fbf 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/close/store/CloseStoreInfoListVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/close/store/CloseStoreInfoListVO.java @@ -74,6 +74,11 @@ public class CloseStoreInfoListVO { @ApiModelProperty("总流程数量") private Integer totalProcessNum; + @ApiModelProperty("预估完成时间") + private Date planCompleteTime; + + @ApiModelProperty("创建时间") + private Date createTime; public String getCloseStatusName() { return CloseStoreStatusEnum.getNameByStatus(closeStatus); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/close/CloseStoreService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/close/CloseStoreService.java index b48a7e148..a5e378d75 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/close/CloseStoreService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/close/CloseStoreService.java @@ -59,6 +59,13 @@ public interface CloseStoreService { */ Boolean cancelApply(Long closeStoreId); + /** + * 中止闭店申请 + * @param closeStoreId 闭店申请id + * @return 是否成功 + */ + Boolean suspendApply(Long closeStoreId); + /** * 查询权限下的闭店申请审批记录 * @param request 闭店申请查询Request diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/close/impl/CloseStoreServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/close/impl/CloseStoreServiceImpl.java index 24279bb85..1bdd89142 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/close/impl/CloseStoreServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/close/impl/CloseStoreServiceImpl.java @@ -22,8 +22,10 @@ import com.cool.store.response.AuditInfoResponse; import com.cool.store.service.SysRoleService; import com.cool.store.service.UserAuthMappingService; import com.cool.store.service.close.CloseStoreService; +import com.cool.store.service.dict.impl.DictService; import com.cool.store.utils.BeanUtil; import com.cool.store.utils.CoolDateUtils; +import com.cool.store.utils.poi.DateUtils; import com.cool.store.utils.poi.StringUtils; import com.cool.store.vo.PartnerUserInfoVO; import com.cool.store.vo.close.store.*; @@ -37,6 +39,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -65,6 +68,7 @@ public class CloseStoreServiceImpl implements CloseStoreService { private final CloseStoreRefundInfoDAO closeStoreRefundInfoDAO; private final EnterpriseUserDAO enterpriseUserDAO; private final SysRoleService sysRoleService; + private final DictService dictService; @Value("${mybatis.configuration.variables.enterpriseId}") private String enterpriseId; @@ -116,9 +120,9 @@ public class CloseStoreServiceImpl implements CloseStoreService { closeStoreInfoDO.setCloseStatus(CloseStoreStatusEnum.UNDER_APPROVAL.getCloseStoreStatus()); closeStoreInfoDO.setApplyUserId(userId); closeStoreInfoDAO.insertSelective(closeStoreInfoDO); - // 查询督导 + // 查询运营顾问 List auditUserIds = getAuditUserIds(regionDO.getId(), UserRoleEnum.SUPERVISION); - closeStoreAuditRecordDAO.addRecord(closeStoreInfoDO.getId(), userId, userName, auditUserIds); + closeStoreAuditRecordDAO.addRecord(closeStoreInfoDO.getId(), userId, userName, auditUserIds, DateUtils.addDays(new Date(), 7)); return Boolean.TRUE; } @@ -176,11 +180,15 @@ public class CloseStoreServiceImpl implements CloseStoreService { auditRecordDO.setHandlerUserName(CurrentUserHolder.getUser().getName()); auditRecordDO.setFinishTaskTime(new Date()); closeStoreAuditRecordDAO.updateRecord(auditRecordDO); - // 督导审批结束后为大区经理审批 + // 运营顾问审批结束后为运营片区总顾问 if (CloseStoreStatusEnum.MANAGER_UNDER_APPROVAL.getCloseStoreStatus().equals(nextCloseStatus)) { - // 新增大区老总审批 + // 新增运营片区总顾问审批 List auditUserIds = getAuditUserIds(closeStoreInfoDO.getRegionId(), UserRoleEnum.OPERATION_GENERAL_CONSULTANT); - closeStoreAuditRecordDAO.addApproveRecord(closeStoreInfoDO.getId(), auditUserIds); + closeStoreAuditRecordDAO.addApproveRecord(closeStoreInfoDO.getId(), auditUserIds, DateUtils.addDays(new Date(), 7)); + } else if (CloseStoreStatusEnum.OPERATION_VICE_PRESIDENT_APPROVAL.getCloseStoreStatus().equals(nextCloseStatus)) { + // 新增运营副总裁审批 + List auditUserIds = getAuditUserIds(closeStoreInfoDO.getRegionId(), UserRoleEnum.OPERATION_VICE_PRESIDENT); + closeStoreAuditRecordDAO.addApproveRecord(closeStoreInfoDO.getId(), auditUserIds, DateUtils.addDays(new Date(), 14)); } else { // 完成闭店,再进入闭店流程 closeStoreFlowInit(closeStoreInfoDO, closeStoreInfoDO.getStoreId(), closeStoreInfoDO.getCloseReason()); @@ -199,6 +207,14 @@ public class CloseStoreServiceImpl implements CloseStoreService { throw new ServiceException(ErrorCodeEnum.CLOSE_STORE_INFO_NOT_EXIST); } closeStoreInfoDO.setCloseStatus(CloseStoreStatusEnum.REVIEW_NOT_APPROVED.getCloseStoreStatus()); + // 如果是未订货自动发起的话,更新闭店申请信息中的拒绝信息 + if (CloseTypeEnum.NO_ORDER_AUTO.getCloseType().equals(closeStoreInfoDO.getCloseType())) { + if (StringUtils.isBlank(request.getRejectReason())) { + throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE, "拒绝原因不能为空"); + } + closeStoreInfoDO.setRejectReason(request.getRejectReason()); + closeStoreInfoDO.setRejectRemark(request.getRejectRemark()); + } closeStoreInfoDAO.updateSelective(closeStoreInfoDO); // 修改闭店审批信息 auditRecordDO.setAuditStatus(CloseStoreAuditStatusEnum.REJECTED.getStatus()); @@ -236,6 +252,27 @@ public class CloseStoreServiceImpl implements CloseStoreService { return true; } + @Override + public Boolean suspendApply(Long closeStoreId) { + CloseStoreInfoDO closeStoreInfoDO = closeStoreInfoDAO.getById(closeStoreId); + if (Objects.isNull(closeStoreInfoDO)) { + throw new ServiceException(ErrorCodeEnum.CLOSE_STORE_INFO_NOT_EXIST); + } + // 仅审批中能够取消 + if (!CloseStoreStatusEnum.isApprove(closeStoreInfoDO.getCloseStatus())) { + throw new ServiceException(ErrorCodeEnum.CLOSE_STORE_ONLY_APPROVAL_ENABLE_SUSPEND); + } + // 修改闭店申请信息 + closeStoreInfoDO.setCloseStatus(CloseStoreStatusEnum.SUSPEND.getCloseStoreStatus()); + closeStoreInfoDAO.updateSelective(closeStoreInfoDO); + // 删除待处理的审批记录 + closeStoreAuditRecordDAO.deletePendingRecord(closeStoreId); + LoginUserInfo user = CurrentUserHolder.getUser(); + // 新增中止操作记录 + closeStoreAuditRecordDAO.addSuspendRecord(closeStoreId, user.getUserId(), user.getName()); + return true; + } + @Override public PageInfo closeStoreAuditList(CloseStoreQueryRequest request) { closeStoreRecordQueryBefore(request); @@ -364,6 +401,7 @@ public class CloseStoreServiceImpl implements CloseStoreService { vo.setAuditId(pendingAuditRecord.getId()); } } + dictService.fillDictField(vo); return vo; } @@ -422,7 +460,7 @@ public class CloseStoreServiceImpl implements CloseStoreService { @Override public List getCloseStoreStatusList() { return Arrays.stream(CloseStoreStatusEnum.values()) - .filter(v -> v != CloseStoreStatusEnum.MANAGER_UNDER_APPROVAL) + .filter(v -> v != CloseStoreStatusEnum.MANAGER_UNDER_APPROVAL && v != CloseStoreStatusEnum.OPERATION_VICE_PRESIDENT_APPROVAL) .map(v -> new CloseStoreStatusVO(v.getCloseStoreStatus(), v.getCloseStoreStatusName())) .collect(Collectors.toList()); } @@ -486,6 +524,14 @@ public class CloseStoreServiceImpl implements CloseStoreService { .id(stageInfoDO.getId()) .shopSubStageStatus(openStageStatus.getShopSubStageStatus()) .build(); + // 单独处理闭店资料待邮寄(7天)、闭店资料待审核(14天)、账号关闭(3天) + if (CloseStoreSubStageStatusEnum.CLOSE_STORE_SUB_STAGE_STATUS_15.equals(openStageStatus)) { + updateStageInfo.setPlanCompleteTime(LocalDate.now().plusDays(7).toString()); + } else if (CloseStoreSubStageStatusEnum.CLOSE_STORE_SUB_STAGE_STATUS_16.equals(openStageStatus)) { + updateStageInfo.setPlanCompleteTime(LocalDate.now().plusDays(14).toString()); + } else if (CloseStoreSubStageStatusEnum.CLOSE_STORE_SUB_STAGE_STATUS_25.equals(openStageStatus)) { + updateStageInfo.setPlanCompleteTime(LocalDate.now().plusDays(3).toString()); + } updateStageList.add(updateStageInfo); } } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/CloseStoreController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/CloseStoreController.java index 588c19ad0..91354b1fc 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/CloseStoreController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/CloseStoreController.java @@ -1,5 +1,6 @@ package com.cool.store.controller.webb; +import com.cool.store.request.close.store.CloseStoreCancelRequest; import com.cool.store.request.close.store.CloseStoreQueryRequest; import com.cool.store.request.close.store.CloseStoreAuditRequest; import com.cool.store.response.AuditInfoResponse; @@ -14,6 +15,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.util.List; @@ -97,4 +99,10 @@ public class CloseStoreController { public ResponseResult> getCloseStoreStatusList() { return ResponseResult.success(closeStoreService.getCloseStoreStatusList()); } + + @ApiOperation("中止") + @PostMapping("/suspend") + public ResponseResult suspendApply(@RequestBody @Valid CloseStoreCancelRequest request) { + return ResponseResult.success(closeStoreService.suspendApply(request.getCloseStoreId())); + } } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java index 0f713124d..a613910f3 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -152,6 +152,20 @@ public class PCTestController { @Resource BonusDistributionRuleDAO bonusRuleDAO; + @PostMapping("/normalStoreApplyClose") + @Debounce(timeMs = 10000, diffUser = false) + public ResponseResult normalStoreApplyClose() { + xxlJobHandler.normalStoreApplyClose(); + return ResponseResult.success(true); + } + + @PostMapping("/schoolStoreApplyClose") + @Debounce(timeMs = 10000, diffUser = false) + public ResponseResult schoolStoreApplyClose() { + xxlJobHandler.schoolStoreApplyClose(); + return ResponseResult.success(true); + } + @PostMapping("/processReceivedRule") @Debounce(timeMs = 10000, diffUser = false) public ResponseResult processReceivedRule(Long ruleId, String payMonth) { diff --git a/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java b/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java index 5bdace88f..6acd91f0f 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java @@ -1,8 +1,10 @@ package com.cool.store.job; import cn.hutool.core.collection.CollStreamUtil; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; +import com.cool.store.constants.RedisConstant; import com.cool.store.dao.*; import com.cool.store.dao.bonus.BonusDistributionRuleDAO; import com.cool.store.dao.tp.TpApplyFormDAO; @@ -147,6 +149,8 @@ public class XxlJobHandler { BonusDistributionRuleDAO ruleDAO; @Resource BonusService bonusService; + @Resource + CloseStoreInfoDAO closeStoreInfoDAO; private static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM"); private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @@ -525,6 +529,16 @@ public class XxlJobHandler { hasNext = storeList.size() >= pageSize; for (StoreDO storeDO : storeList) { try { + CloseStoreInfoDO lastRejectRecord = closeStoreInfoDAO.getRejectByStoreId(storeDO.getStoreId()); + // 存在审批拒绝原因的闭店申请则根据拒绝原因判断要间隔多少天发起 + // 原因为 由分店订货 的需要间隔21天,否则间隔14天 + if (Objects.nonNull(lastRejectRecord) && StringUtils.isNotBlank(lastRejectRecord.getRejectReason())) { + long betweenDays = DateUtil.betweenDay(new Date(), lastRejectRecord.getCreateTime(), true); + if (RedisConstant.CLOSE_REJECT_OTHER_STORE.equals(lastRejectRecord.getRejectReason()) && betweenDays < 21 + || betweenDays < 14) { + continue; + } + } CloseStoreApplyRequest applyRequest = CloseStoreApplyRequest.builder() .planCloseDate(DateUtils.parseDate(LocalDate.now().plusMonths(1).toString())) .closeReason(StoreCloseReasonEnum.REASON0.getCode())