Merge #17 into master from cc_20251218_opening

Merge branch 'master' into cc_20251218_opening

* cc_20251218_opening: (11 commits squashed)

  - fix:信发查询bug

  - fix:信发查询bug

  - fix:测试

  - fix:老店新开不需要开业验收

  - feat:开业验收数据处理

  - fix:开业验收bug修复

  - fix:开业验收bug修复

  - fix:云流水权限开通

  - feat:开业验收数据处理

  - feat:开业验收数据处理

  - Merge branch 'master' into cc_20251218_opening

Signed-off-by: 苏竹红 <570057076@qq.com>
Merged-by: 苏竹红 <570057076@qq.com>

CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/17
This commit is contained in:
2025-12-25 10:50:38 +00:00
parent 32ae1b7315
commit e97c147fac
31 changed files with 824 additions and 13 deletions

View File

@@ -18,6 +18,7 @@ public enum AuditTypeEnum {
YING_ZHANG_TONG(14,"营帐通"),
BUILDINFORMATION(15,"建店资料信息"),
JINg_DONG_WAI_MAI(16,"京东外卖"),
OPENING_ACCEPTANCE(17,"开业验收"),
;
private Integer code;

View File

@@ -71,6 +71,8 @@ public enum UserRoleEnum {
JING_DONG_HEADQUARTERS_BUILD_CUSTOMER(510000000L,"京东总部建店客服"),
FRANCHISEES(530000000L,"加盟商"),
SERVICE_PACKAGE_DEDICATED(1762761165005L,"服务包专用"),
OPERATION_GENERAL_CONSULTANT(1764642515446L,"运营片区总顾问"),
ORDER_GROUP(1766387359609L,"订单组"),
;
private Long code;

View File

@@ -0,0 +1,41 @@
package com.cool.store.enums.opening;
/**
* @Auther zx_szh
* @Date 2025/12/22 10:29
* @Version 1.0
*/
public enum AcceptanceStatusEnum {
PENDING_ACCEPTANCE(1,"待验收"),
ACCEPTANCE_IS_UNQUALIFIED(5,"验收不合格"),
ACCEPTED(10,"已验收"),
;
AcceptanceStatusEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
private Integer code;
private String message;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

View File

@@ -18,7 +18,6 @@ public enum ShopSubStageEnum {
SHOP_STAGE_3(ShopStageEnum.SHOP_STAGE_2, 30, "营业执照办理", 23),
SHOP_STAGE_4(ShopStageEnum.SHOP_STAGE_2, 40, "食安许可证", 55),
SHOP_STAGE_5(ShopStageEnum.SHOP_STAGE_2, 50, "员工招聘", 23),
SHOP_STAGE_6(ShopStageEnum.SHOP_STAGE_2, 260, "开通门店平安钱包", 1),
SHOP_STAGE_7(ShopStageEnum.SHOP_STAGE_2, 70, "缴纳加盟费/保证金", 1),
SHOP_STAGE_8(ShopStageEnum.SHOP_STAGE_2, 80, "加盟合同签约", 4),
SHOP_STAGE_8_5(ShopStageEnum.SHOP_STAGE_2, 85, "发票回传", 5),
@@ -42,6 +41,10 @@ public enum ShopSubStageEnum {
SHOP_STAGE_22(ShopStageEnum.SHOP_STAGE_3, 220, "快手", null),
SHOP_STAGE_25(ShopStageEnum.SHOP_STAGE_3, 250, "京东外卖", null),
SHOP_STAGE_6(ShopStageEnum.SHOP_STAGE_2, 260, "开通门店平安钱包", 1),
SHOP_STAGE_27(ShopStageEnum.SHOP_STAGE_2, 270, "开业验收", 1),
;
//阶段
@@ -136,6 +139,7 @@ public enum ShopSubStageEnum {
case SHOP_STAGE_23:
case SHOP_STAGE_24:
case SHOP_STAGE_25:
case SHOP_STAGE_27:
return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00;
default:
return null;

View File

@@ -101,6 +101,8 @@ public enum ShopSubStageStatusEnum {
//订货系统
SHOP_SUB_STAGE_STATUS_170(ShopSubStageEnum.SHOP_STAGE_17, 1700, "待【IT部】提交", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_171(ShopSubStageEnum.SHOP_STAGE_17, 1710, "等待培训中", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_172(ShopSubStageEnum.SHOP_STAGE_17, 1720, "待授权账号", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_173(ShopSubStageEnum.SHOP_STAGE_17, 1730, "已完成", Boolean.TRUE),
//抖音
@@ -153,6 +155,12 @@ public enum ShopSubStageStatusEnum {
SHOP_SUB_STAGE_STATUS_254(ShopSubStageEnum.SHOP_STAGE_25, 2540,"开通失败", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_255(ShopSubStageEnum.SHOP_STAGE_25, 2550, "开通成功", Boolean.TRUE),
//开业验收
SHOP_SUB_STAGE_STATUS_270(ShopSubStageEnum.SHOP_STAGE_27, 2700, "待上传", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_272(ShopSubStageEnum.SHOP_STAGE_27, 2720, "待审批", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_274(ShopSubStageEnum.SHOP_STAGE_27, 2740,"待整改", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_276(ShopSubStageEnum.SHOP_STAGE_27, 2760,"已完成", Boolean.TRUE),
;
private ShopSubStageEnum shopSubStageEnum;

View File

@@ -0,0 +1,35 @@
package com.cool.store.dao;
import com.cool.store.entity.OpeningAcceptanceDO;
import com.cool.store.mapper.OpeningAcceptanceMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
@Slf4j
@Repository
public class OpeningAcceptanceMapperDAO {
@Resource
private OpeningAcceptanceMapper openingAcceptanceMapper;
public Integer addOpeningAcceptance(OpeningAcceptanceDO openingAcceptanceDO){
return openingAcceptanceMapper.insert(openingAcceptanceDO);
}
public Integer updateOpeningAcceptance(OpeningAcceptanceDO openingAcceptanceDO){
return openingAcceptanceMapper.updateByPrimaryKeySelective(openingAcceptanceDO);
}
public OpeningAcceptanceDO getOpeningAcceptanceByShopId(Long shopId){
if (shopId == null){
return null;
}
return openingAcceptanceMapper.getOpeningAcceptanceByShopId(shopId);
}
}

View File

@@ -0,0 +1,16 @@
package com.cool.store.mapper;
import com.cool.store.entity.OpeningAcceptanceDO;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
/**
* @Auther suzhuhong
* @Date ${DATE} ${TIME}
* @Version 1.0
*/
public interface OpeningAcceptanceMapper extends Mapper<OpeningAcceptanceDO> {
OpeningAcceptanceDO getOpeningAcceptanceByShopId(@Param("shopId") Long shopId);
}

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cool.store.mapper.OpeningAcceptanceMapper">
<resultMap id="BaseResultMap" type="com.cool.store.entity.OpeningAcceptanceDO">
<!--
WARNING - @mbg.generated
-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="shop_id" jdbcType="BIGINT" property="shopId" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="create_user" jdbcType="VARCHAR" property="createUser" />
<result column="update_user" jdbcType="VARCHAR" property="updateUser" />
<result column="storefront_photo" jdbcType="LONGVARCHAR" property="storefrontPhoto" />
<result column="interior_photo" jdbcType="LONGVARCHAR" property="interiorPhoto" />
<result column="monitor_photo" jdbcType="LONGVARCHAR" property="monitorPhoto" />
<result column="cash_register_photo" jdbcType="LONGVARCHAR" property="cashRegisterPhoto" />
<result column="info_screen_photo" jdbcType="LONGVARCHAR" property="infoScreenPhoto" />
</resultMap>
<select id="getOpeningAcceptanceByShopId" resultMap="BaseResultMap">
select * from zxjp_opening_acceptance where shop_id = #{shopId}
</select>
</mapper>

View File

@@ -269,6 +269,7 @@
and id = #{shopId}
</if>
</where>
order by id desc
</select>
<select id="getShopAndStoreList" resultType="com.cool.store.dto.LicenseSyncDTO">

View File

@@ -0,0 +1,85 @@
package com.cool.store.entity;
import lombok.Data;
import java.util.Date;
import javax.persistence.*;
@Table(name = "zxjp_opening_acceptance")
@Data
public class OpeningAcceptanceDO {
/**
* 主键ID
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 门店ID
*/
@Column(name = "shop_id")
private Long shopId;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
/**
* 更新时间
*/
@Column(name = "update_time")
private Date updateTime;
/**
* 创建人ID
*/
@Column(name = "create_user")
private String createUser;
/**
* 更新人ID
*/
@Column(name = "update_user")
private String updateUser;
/**
* 门头照URL
*/
@Column(name = "storefront_photo")
private String storefrontPhoto;
/**
* 店内照URL
*/
@Column(name = "interior_photo")
private String interiorPhoto;
/**
* 监控照URL
*/
@Column(name = "monitor_photo")
private String monitorPhoto;
/**
* 收银机照URL
*/
@Column(name = "cash_register_photo")
private String cashRegisterPhoto;
/**
* 信发屏照URL
*/
@Column(name = "info_screen_photo")
private String infoScreenPhoto;
/**
* 验收状态
*/
@Column(name = "status")
private Integer status;
}

View File

@@ -11,7 +11,7 @@ import lombok.Data;
@Data
public class AuditApproveRequest {
@ApiModelProperty("审核结果 1成功 0失败")
@ApiModelProperty("审核结果 1通过 0驳回")
private Integer auditResult;
@ApiModelProperty("通过/失败原因")

View File

@@ -0,0 +1,64 @@
package com.cool.store.request.opening;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @Auther zx_szh
* @Date 2025/12/22 10:04
* @Version 1.0
*/
@Data
public class OpeningAcceptanceRequest {
@ApiModelProperty( "ID")
private Long id;
/**
* 门店ID
*/
@ApiModelProperty( "门店ID")
@NotNull(message = "门店ID不能为空")
private Long shopId;
/**
* 门头照URL
*/
@ApiModelProperty( "门头照URL 多张用逗号隔开")
@NotBlank(message = "门头照URL不能为空")
private String storefrontPhoto;
/**
* 店内照URL
*/
@ApiModelProperty( "店内照URL 多张用逗号隔开")
@NotBlank(message = "店内照URL不能为空")
private String interiorPhoto;
/**
* 监控照URL
*/
@ApiModelProperty( "监控照URL 多张用逗号隔开")
@NotBlank(message = "监控照URL不能为空")
private String monitorPhoto;
/**
* 收银机照URL
*/
@ApiModelProperty( "收银机照URL 多张用逗号隔开")
@NotBlank(message = "收银机照URL不能为空")
private String cashRegisterPhoto;
/**
* 信发屏照URL
*/
@ApiModelProperty( "信发屏照URL 多张用逗号隔开")
@NotBlank(message = "信发屏照URL不能为空")
private String infoScreenPhoto;
}

View File

@@ -0,0 +1,68 @@
package com.cool.store.vo.opening;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @Auther zx_szh
* @Date 2025/12/22 11:19
* @Version 1.0
*/
@Data
public class OpeningAcceptanceDetailVO {
private Long id;
/**
* 门店ID
*/
@ApiModelProperty( "门店ID")
@NotNull(message = "门店ID不能为空")
private Long shopId;
/**
* 门头照URL
*/
@ApiModelProperty( "门头照URL 多张用逗号隔开")
@NotBlank(message = "门头照URL不能为空")
private String storefrontPhoto;
/**
* 店内照URL
*/
@ApiModelProperty( "店内照URL 多张用逗号隔开")
@NotBlank(message = "店内照URL不能为空")
private String interiorPhoto;
/**
* 监控照URL
*/
@ApiModelProperty( "监控照URL 多张用逗号隔开")
@NotBlank(message = "监控照URL不能为空")
private String monitorPhoto;
/**
* 收银机照URL
*/
@ApiModelProperty( "收银机照URL 多张用逗号隔开")
@NotBlank(message = "收银机照URL不能为空")
private String cashRegisterPhoto;
/**
* 信发屏照URL
*/
@ApiModelProperty( "信发屏照URL 多张用逗号隔开")
@NotBlank(message = "信发屏照URL不能为空")
private String infoScreenPhoto;
@ApiModelProperty("验收状态")
private Integer status;
}

View File

@@ -90,4 +90,11 @@ public interface DataHandlerServer {
*/
void dataHandlerPushHqt();
/**
* 开业验收
* 数据处理 每个门店新增开业验收
* @return
*/
Boolean openingAcceptanceDataHandle();
}

View File

@@ -171,6 +171,12 @@ public interface DeskService {
*/
PageInfo<PreparationCommonPendingVO> buildInformationPendingList(DeskRequest deskRequest, LoginUserInfo user );
/**
* 开业验收
*/
PageInfo<PreparationCommonPendingVO> openingAcceptance(DeskRequest deskRequest, LoginUserInfo user );
/**
* 测量阶段

View File

@@ -18,5 +18,12 @@ public interface PosAndOrderInfoService {
PosAndOrderResponse get(Long shopId, Integer type);
/**
* 云流水权限开通
* @param shopId
* @return
*/
Boolean openYlsAuth(Long shopId);
Boolean skip(Long shopId, Integer type);
}

View File

@@ -1275,6 +1275,59 @@ public class DataHandlerServerImpl implements DataHandlerServer {
}
}
}
@Override
public Boolean openingAcceptanceDataHandle() {
Integer pageSize = 100;
Integer pageNum = 1;
// 方式1使用while循环获取所有页数据
boolean hasNextPage = true;
while (hasNextPage) {
// 开启分页
PageHelper.startPage(pageNum, pageSize);
// 执行查询
List<ShopInfoDO> shopInfoDOS = shopInfoDAO.selectByIdOrSelectAll(null);
// 处理当前页数据
if (CollectionUtils.isNotEmpty(shopInfoDOS)) {
for (ShopInfoDO shopInfoDO : shopInfoDOS) {
//查询装修阶段 是否完成 完成=开业阶段完成 未完成=开业阶段未开始
ShopStageInfoDO stage = shopStageInfoDAO.getByShopIdAndSubStage(shopInfoDO.getId(), ShopSubStageEnum.SHOP_STAGE_12.getShopSubStage());
if (stage == null) {
log.info("装修阶段数据不存在 shopId:{}",shopInfoDO.getId());
continue;
}
ShopStageInfoDO stage27 = shopStageInfoDAO.getByShopIdAndSubStage(shopInfoDO.getId(), ShopSubStageEnum.SHOP_STAGE_27.getShopSubStage());
if (stage27 == null) {
ShopStageInfoDO shopStageInfo = null;
if (stage.getIsTerminated()){
shopStageInfo = getShopStageInfoDO(ShopSubStageEnum.SHOP_STAGE_27, stage, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_276);
}else {
shopStageInfo = getShopStageInfoDO(ShopSubStageEnum.SHOP_STAGE_27, stage, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00);
}
shopStageInfoDAO.batchInsert(Arrays.asList(shopStageInfo));
}
}
// 判断是否还有下一页
if (shopInfoDOS.size() < pageSize) {
hasNextPage = false; // 当前页数据不足一页,说明是最后一页
} else {
pageNum++; // 继续查询下一页
}
} else {
hasNextPage = false; // 没有数据,结束循环
}
// 清除分页参数(重要!防止影响其他查询)
PageHelper.clearPage();
}
return Boolean.TRUE;
}
public HqtBuildRequest getHqtBuildRequest(Long shopId) {
ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId);
LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfo.getLineId());

View File

@@ -280,7 +280,7 @@ public class DecorationDesignInfoServiceImpl implements DecorationDesignInfoServ
acceptanceInfoDAO.updateAcceptanceInfo(acceptanceInfoDO);
}
if (shopSubStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_122.getShopSubStageStatus())) {
shopStageInfoDAO.updateShopStageInfo(shopInfoDO.getId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_123);
shopStageInfoDAO.batchUpdateShopStageStatus(shopInfoDO.getId(),Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_123,ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_270));
preparationService.buildStoreAndDecorationComplete(shopInfoDO.getId());
}
// 覆盖建店资料中的门头照和内景照

View File

@@ -849,7 +849,7 @@ public class DecorationServiceImpl implements DecorationService {
if (CommonConstants.ONE == request.getOperationsAcceptance().getResult()
&& CommonConstants.ONE == partner.getResult()) {
//更新阶段状态验收完毕
shopStageInfoDAO.updateShopStageAndAuditInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_123, null);
shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(),Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_123,ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_270));
preparationService.updateShopStatus(request.getShopId());
preparationService.buildStoreAndDecorationComplete(request.getShopId());
} else {

View File

@@ -345,9 +345,16 @@ public class DeskServiceImpl implements DeskService {
@Override
public PageInfo<PreparationCommonPendingVO> orderSysPendingList(DeskRequest deskRequest, LoginUserInfo user) {
List<Long> userRoleIds = enterpriseUserRoleMapper.getUserRoleIds(user.getUserId());
//订单组 只查询待授权的数据
if (userRoleIds.contains(UserRoleEnum.ORDER_GROUP.getCode())) {
//只查管辖的待授权的数据
return commonPendingVOPageInfo(deskRequest, null, ShopSubStageEnum.SHOP_STAGE_17,
Collections.singletonList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_172.getShopSubStageStatus()), Boolean.TRUE);
}
//其他角色能看到
return commonPendingVOPageInfo(deskRequest, null, ShopSubStageEnum.SHOP_STAGE_17,
Collections.singletonList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_170.getShopSubStageStatus()), Boolean.FALSE);
}
@Override
@@ -532,6 +539,22 @@ public class DeskServiceImpl implements DeskService {
return commonPendingVOPage(deskRequest, isAdmin ? null : user, ShopSubStageEnum.SHOP_STAGE_15, subStageStatusList, isAdmin ? Boolean.FALSE : Boolean.TRUE, ownShopFlag);
}
@Override
public PageInfo<PreparationCommonPendingVO> openingAcceptance(DeskRequest deskRequest, LoginUserInfo user) {
List<Long> userRoleIds = enterpriseUserRoleMapper.getUserRoleIds(user.getUserId());
//如果是督导
List<Integer> stageList = new ArrayList<>();
Boolean flag = Boolean.FALSE;
if (userRoleIds.contains(UserRoleEnum.QW_SUPERVISION.getCode()) || userRoleIds.contains(UserRoleEnum.SUPERVISION.getCode())) {
stageList.addAll(Arrays.asList(SHOP_SUB_STAGE_STATUS_270.getShopSubStageStatus(),SHOP_SUB_STAGE_STATUS_274.getShopSubStageStatus()));
}
if (userRoleIds.contains(UserRoleEnum.OPERATION_GENERAL_CONSULTANT.getCode()) ) {
stageList.add(SHOP_SUB_STAGE_STATUS_272.getShopSubStageStatus());
flag = Boolean.TRUE;
}
return commonPendingVOPageInfo(deskRequest, user, ShopSubStageEnum.SHOP_STAGE_27, stageList, flag);
}
@Override
public PageInfo<PreparationCommonPendingVO> measurePendingList(DeskRequest deskRequest, LoginUserInfo user) {
List<Long> userRoleIds = enterpriseUserRoleMapper.getUserRoleIds(user.getUserId());

View File

@@ -58,7 +58,15 @@ public class PosAndOrderInfoServiceImpl implements PosAndOrderInfoService {
if (request.getType().equals(PosAndOrderEnum.POS.getCode())) {
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_163);
} else if (request.getType().equals(PosAndOrderEnum.ORDER.getCode())) {
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_173);
//校验培训是否完成 培训完成 账号->待授权 培训没完成 ->等待培训中
ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_5);
ShopSubStageStatusEnum subStageStatus = null;
if (shopSubStageInfo.getIsTerminated()){
subStageStatus = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_172;
}else {
subStageStatus = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_171;
}
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), subStageStatus);
} else if (request.getType().equals(PosAndOrderEnum.XIN_FA_SYS.getCode())) {
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_235);
} else if (request.getType().equals(PosAndOrderEnum.TENT_PASS.getCode())) {
@@ -98,6 +106,12 @@ public class PosAndOrderInfoServiceImpl implements PosAndOrderInfoService {
return response;
}
@Override
public Boolean openYlsAuth(Long shopId) {
shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_173);
return Boolean.TRUE;
}
@Override
public Boolean skip(Long shopId, Integer type) {
ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_24);

View File

@@ -822,6 +822,9 @@ public class ShopServiceImpl implements ShopService {
case SHOP_SUB_STAGE_STATUS_140:
case SHOP_SUB_STAGE_STATUS_141:
case SHOP_SUB_STAGE_STATUS_142:
case SHOP_SUB_STAGE_STATUS_171:
case SHOP_SUB_STAGE_STATUS_270:
case SHOP_SUB_STAGE_STATUS_274:
return getUserFromInvestmentManager(shopInfo.getInvestmentManager());
case SHOP_SUB_STAGE_STATUS_122:
case SHOP_SUB_STAGE_STATUS_110:
@@ -907,7 +910,10 @@ public class ShopServiceImpl implements ShopService {
return getUsersByRoleAndRegion(UserRoleEnum.JING_DONG_OPERATIONS_CUSTOMER, shopInfo.getRegionId());
case SHOP_SUB_STAGE_STATUS_253:
return getUsersByRoleAndRegion(UserRoleEnum.JING_DONG_HEADQUARTERS_BUILD_CUSTOMER, shopInfo.getRegionId());
case SHOP_SUB_STAGE_STATUS_272:
return getUsersByRoleAndRegion(OPERATION_GENERAL_CONSULTANT, shopInfo.getRegionId());
case SHOP_SUB_STAGE_STATUS_172:
return getUsersByRoleAndRegion(ORDER_GROUP, shopInfo.getRegionId());
default:
return Collections.emptyList();
}

View File

@@ -484,7 +484,8 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
if (shopInfoDO.getShopDecorationAttributes().equals(ShopDecorationAttributesEnum.OLD_NEW_OPEN.getCode())) {
//老店新开时装修与开业直接完成
shopStageInfoDAO.batchUpdateByShopIdsAndSubStageStatus(Arrays.asList(shopId), Arrays.asList(
SHOP_SUB_STAGE_STATUS_863, SHOP_SUB_STAGE_STATUS_91, SHOP_SUB_STAGE_STATUS_112, SHOP_SUB_STAGE_STATUS_123, SHOP_SUB_STAGE_STATUS_143
SHOP_SUB_STAGE_STATUS_863, SHOP_SUB_STAGE_STATUS_91, SHOP_SUB_STAGE_STATUS_112, SHOP_SUB_STAGE_STATUS_123, SHOP_SUB_STAGE_STATUS_143,
SHOP_SUB_STAGE_STATUS_276
));
}else{
//,加盟公司自有店->加盟公司建店 不推送数据 再crm中完成

View File

@@ -197,14 +197,21 @@ public class TempUserDetailServiceImpl implements TempUserDetailService {
@Override
public void registrationCompleted(Long shopId) {
ShopStageInfoDO shopStageInfoDO = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_5);
if (shopStageInfoDO == null) {
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR);
}
if (!shopStageInfoDO.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_50.getShopSubStageStatus())){
throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE);
}
if(shopStageInfoDO != null){
shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_51);
//状态结束
preparationService.whetherToOpenForAcceptance(shopId);
preparationService.updateShopStatus(shopId);
//不能放到下面
shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_51);
//状态结束
preparationService.whetherToOpenForAcceptance(shopId);
preparationService.updateShopStatus(shopId);
//培训完成,将订货状态为等待培训中的切为待授权
ShopStageInfoDO shopStage = shopStageInfoDAO.getByShopIdAndSubStage(shopId, ShopSubStageEnum.SHOP_STAGE_17.getShopSubStage());
if (shopStage!=null&&shopStage.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_171.getShopSubStageStatus())){
shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_172);
}
}

View File

@@ -0,0 +1,42 @@
package com.cool.store.service.opening;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.request.AuditApproveRequest;
import com.cool.store.request.opening.OpeningAcceptanceRequest;
import com.cool.store.vo.opening.OpeningAcceptanceDetailVO;
/**
* @Auther zx_szh
* @Date 2025/12/22 09:28
* @Version 1.0
*/
public interface OpeningAcceptanceService {
/**
* 提交门店验收
* @param request
* @return
*/
Boolean addOpeningAcceptance(OpeningAcceptanceRequest request, LoginUserInfo user);
/**
* 验收详情
* @param shopId
* @return
*/
OpeningAcceptanceDetailVO getAcceptanceDetail(Long shopId);
/**
* 审批数据
* @param request
* @param user
* @return
*/
Boolean auditOpeningAcceptance(AuditApproveRequest request, LoginUserInfo user);
}

View File

@@ -0,0 +1,154 @@
package com.cool.store.service.opening.impl;
import com.aliyun.ons20190214.models.OnsMessageTraceRequest;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.dao.OpeningAcceptanceMapperDAO;
import com.cool.store.dao.OperationLogDAO;
import com.cool.store.dao.ShopInfoDAO;
import com.cool.store.dao.ShopStageInfoDAO;
import com.cool.store.entity.EnterpriseUserDO;
import com.cool.store.entity.OpeningAcceptanceDO;
import com.cool.store.entity.OperationLogDO;
import com.cool.store.entity.ShopAuditInfoDO;
import com.cool.store.enums.*;
import com.cool.store.enums.opening.AcceptanceStatusEnum;
import com.cool.store.enums.point.ShopSubStageStatusEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.mapper.OpeningAcceptanceMapper;
import com.cool.store.mapper.ShopAuditInfoMapper;
import com.cool.store.request.AuditApproveRequest;
import com.cool.store.request.opening.OpeningAcceptanceRequest;
import com.cool.store.service.OperationLogService;
import com.cool.store.service.PreparationService;
import com.cool.store.service.UserAuthMappingService;
import com.cool.store.service.opening.OpeningAcceptanceService;
import com.cool.store.utils.BeanUtil;
import com.cool.store.utils.poi.constant.Constants;
import com.cool.store.vo.opening.OpeningAcceptanceDetailVO;
import com.sun.xml.bind.v2.TODO;
import org.apache.commons.collections.ArrayStack;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.sql.rowset.serial.SerialException;
import java.util.*;
import static com.cool.store.enums.UserRoleEnum.BRAND_HEAD;
import static com.cool.store.enums.UserRoleEnum.VICE_PRESIDENT_IN_CHARGE;
/**
* @Auther zx_szh
* @Date 2025/12/22 10:00
* @Version 1.0
*/
@Service
public class OpeningAcceptanceServiceImpl implements OpeningAcceptanceService {
@Resource
private OpeningAcceptanceMapperDAO openingAcceptanceMapperDAO;
@Resource
OperationLogService operationLogService;
@Resource
ShopStageInfoDAO shopStageInfoDAO;
@Resource
ShopAuditInfoMapper shopAuditInfoMapper;
@Resource
OperationLogDAO operationLogDAO;
@Resource
PreparationService preparationService;
@Resource
UserAuthMappingService userAuthMappingService;
@Resource
ShopInfoDAO shopInfoDAO;
@Override
public Boolean addOpeningAcceptance(OpeningAcceptanceRequest request,LoginUserInfo user) {
//新增开店验收数据
if (request.getId()==null) {
OpeningAcceptanceDO openingAcceptanceDO = new OpeningAcceptanceDO();
openingAcceptanceDO.setStatus(AcceptanceStatusEnum.PENDING_ACCEPTANCE.getCode());
openingAcceptanceDO.setCreateUser(user.getUserId());
BeanUtil.copyProperties(request,openingAcceptanceDO);
openingAcceptanceMapperDAO.addOpeningAcceptance(openingAcceptanceDO);
}else {
OpeningAcceptanceDO openingAcceptanceDO = new OpeningAcceptanceDO();
openingAcceptanceDO.setStatus(AcceptanceStatusEnum.PENDING_ACCEPTANCE.getCode());
openingAcceptanceDO.setUpdateUser(user.getUserId());
openingAcceptanceDO.setUpdateTime(new Date());
BeanUtil.copyProperties(request,openingAcceptanceDO);
openingAcceptanceMapperDAO.updateOpeningAcceptance(openingAcceptanceDO);
}
//阶段状态变更
shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(), Collections.singletonList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_272));
//新增审核记录
operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_270, user.getUserId(), user.getName(),
OperationTypeEnum.OPERATION_TYPE_0, "开业验收提交", OperationStatusEnum.PROCESSED);
//片区总顾问审核
List<EnterpriseUserDO> users = userAuthMappingService.getUserIdByRoleEnumAndRegionId(Collections.singletonList(UserRoleEnum.OPERATION_GENERAL_CONSULTANT), shopInfoDAO.getShopInfo(request.getShopId()).getRegionId());
operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_272,
user.getUserId(), users,
OperationTypeEnum.OPERATION_TYPE_1, "加盟签约合同审批", OperationStatusEnum.NOT_PROCESSED);
return Boolean.TRUE;
}
@Override
public OpeningAcceptanceDetailVO getAcceptanceDetail(Long shopId) {
if (shopId==null){
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR);
}
OpeningAcceptanceDO opening = openingAcceptanceMapperDAO.getOpeningAcceptanceByShopId(shopId);
OpeningAcceptanceDetailVO openingAcceptanceDetailVO = new OpeningAcceptanceDetailVO();
BeanUtil.copyProperties(opening,openingAcceptanceDetailVO);
return openingAcceptanceDetailVO;
}
@Override
public Boolean auditOpeningAcceptance(AuditApproveRequest request, LoginUserInfo user) {
OpeningAcceptanceDO open = openingAcceptanceMapperDAO.getOpeningAcceptanceByShopId(request.getShopId());
if (open==null){
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR);
}
Integer status = open.getStatus();
ShopSubStageStatusEnum nextStage = null;
Integer resultType = null;
if (Constants.ZERO_INTEGER.equals(request.getAuditResult())) {
//驳回
status = AcceptanceStatusEnum.ACCEPTANCE_IS_UNQUALIFIED.getCode();
nextStage = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_274;
resultType = Constants.ONE_INTEGER;
}else {
//通过
status = AcceptanceStatusEnum.ACCEPTED.getCode();
nextStage = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_276;
resultType = Constants.ZERO_INTEGER;
}
open.setStatus(status);
open.setUpdateUser(user.getUserId());
open.setUpdateTime(new Date());
openingAcceptanceMapperDAO.updateOpeningAcceptance(open);
//阶段
shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(), Arrays.asList(nextStage));
ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO();
shopAuditInfoDO.setShopId(request.getShopId());
shopAuditInfoDO.setAuditType(AuditTypeEnum.OPENING_ACCEPTANCE.getCode());
shopAuditInfoDO.setSubmittedUserId(user.getUserId());
shopAuditInfoDO.setSubmittedUserName(user.getName());
shopAuditInfoDO.setResultType(resultType);
shopAuditInfoDO.setRejectReason(request.getCause());
shopAuditInfoMapper.insertSelective(shopAuditInfoDO);
Long auditId = shopAuditInfoDO.getId();
List<OperationLogDO> operationLogs = operationLogDAO.getBySubStageStatusEnumAndsStatus(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_272, OperationTypeEnum.OPERATION_TYPE_1.getCode());
operationLogService.batchUpdateProcessed(operationLogs, auditId, user.getUserId(), request.getCause());
//开业验收完成之后 看门店整个流程是否完成
if (status == AcceptanceStatusEnum.ACCEPTED.getCode()){
preparationService.updateShopStatus(request.getShopId());
}
return Boolean.TRUE;
}
}

View File

@@ -207,6 +207,13 @@ public class DeskController {
return ResponseResult.success(deskService.buildInformationPendingList( deskRequest, userInfo ));
}
@ApiOperation("待处理-开业验收")
@PostMapping("/openingAcceptance")
public ResponseResult<PageInfo<PreparationCommonPendingVO>> openingAcceptance(@RequestBody DeskRequest deskRequest) {
LoginUserInfo userInfo = CurrentUserHolder.getUser();
return ResponseResult.success(deskService.openingAcceptance( deskRequest, userInfo ));
}
@ApiOperation("待处理-测量阶段")
@PostMapping("/measurePendingList")
public ResponseResult<PageInfo<PreparationCommonPendingVO>> measurePendingList(@RequestBody DeskRequest deskRequest) {
@@ -239,4 +246,7 @@ public class DeskController {
LoginUserInfo userInfo = CurrentUserHolder.getUser();
return ResponseResult.success(deskService.submitBusinessRemark(request,userInfo));
}
}

View File

@@ -0,0 +1,71 @@
package com.cool.store.controller.webb;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.request.AuditApproveRequest;
import com.cool.store.request.opening.OpeningAcceptanceRequest;
import com.cool.store.request.xgj.ReceiptCallBackRequest;
import com.cool.store.response.ResponseResult;
import com.cool.store.response.bigdata.ApiResponse;
import com.cool.store.service.opening.OpeningAcceptanceService;
import com.cool.store.vo.OpenAreaTreeVO;
import com.cool.store.vo.opening.OpeningAcceptanceDetailVO;
import groovy.util.logging.Slf4j;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.w3c.dom.UserDataHandler;
import javax.annotation.Resource;
import java.util.List;
/**
* @Auther zx_szh
* @Date 2025/12/22 14:14
* @Version 1.0
*/
@lombok.extern.slf4j.Slf4j
@RestController
@RequestMapping("pc/OpeningAcceptance")
@Api(tags = "PC-开业验收后")
@Slf4j
public class OpeningAcceptanceController {
@Resource
private OpeningAcceptanceService openingAcceptanceService;
@ApiOperation("开业验收提交/重新提交")
@PostMapping("/submitOpeningAcceptance")
public ResponseResult<Boolean> submitOpeningAcceptance(@RequestBody @Validated OpeningAcceptanceRequest request){
log.info("submitOpeningAcceptance request{}", JSONObject.toJSONString(request));
LoginUserInfo user = CurrentUserHolder.getUser();
return ResponseResult.success(openingAcceptanceService.addOpeningAcceptance(request,user));
}
@GetMapping(path = "/getAcceptanceDetail")
@ApiOperation("获取门店开业验收数据")
@ApiImplicitParams({
@ApiImplicitParam(name = "shopId", value = "门店ID", required = true)
})
public ResponseResult<OpeningAcceptanceDetailVO> getAcceptanceDetail(@RequestParam(value = "shopId",required = true)Long shopId){
return ResponseResult.success(openingAcceptanceService.getAcceptanceDetail(shopId));
}
@ApiOperation("开业验收审核")
@PostMapping("/auditOpeningAcceptance")
public ResponseResult<Boolean> auditOpeningAcceptance(@RequestBody @Validated AuditApproveRequest request){
log.info("auditOpeningAcceptance request{}", JSONObject.toJSONString(request));
LoginUserInfo user = CurrentUserHolder.getUser();
return ResponseResult.success(openingAcceptanceService.auditOpeningAcceptance(request,user));
}
}

View File

@@ -34,6 +34,12 @@ public class PCOrderSysController {
return ResponseResult.success(posAndOrderInfoService.submitOrUpdate(request, CurrentUserHolder.getUserId()));
}
@ApiOperation("开通云流水权限")
@GetMapping("/openYlsAuth")
public ResponseResult<Boolean> openYlsAuth(@RequestParam("shopId") Long shopId){
return ResponseResult.success(posAndOrderInfoService.openYlsAuth(shopId));
}
@ApiOperation("获取")
@GetMapping("/get")
public ResponseResult<PosAndOrderResponse> get(@RequestParam("shopId") Long shopId){

View File

@@ -53,6 +53,7 @@ import com.cool.store.utils.poi.StringUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.org.apache.xpath.internal.operations.Bool;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -97,6 +98,8 @@ public class PCTestController {
private XxlJobHandler xxlJobHandler;
@Resource
DataHandleService dataHandleService;
@Resource
DataHandlerServer dataHandlerServer;
static String url = "https://hzly.cloudcubic.net/ajaxHandle/synchronization/JCallBackSynchronizationHandler.ashx?action=app&controller=GetProjectDetails&projectid=";
@Resource
@@ -893,5 +896,14 @@ public class PCTestController {
}
@ApiOperation("开业验收数据处理")
@GetMapping("/openingAcceptanceDataHandle")
public ResponseResult<Boolean> openingAcceptanceDataHandle() {
dataHandlerServer.openingAcceptanceDataHandle();
return ResponseResult.success(Boolean.TRUE);
}
}

View File

@@ -0,0 +1,42 @@
package com.cool.store.controller.webc;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.opening.OpeningAcceptanceService;
import com.cool.store.vo.opening.OpeningAcceptanceDetailVO;
import groovy.util.logging.Slf4j;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @Auther zx_szh
* @Date 2025/12/22 14:22
* @Version 1.0
*/
@lombok.extern.slf4j.Slf4j
@RestController
@RequestMapping("mini/OpeningAcceptance")
@Api(tags = "小程序-开业验收后")
@Slf4j
public class MiniOpeningAcceptanceController {
@Resource
private OpeningAcceptanceService openingAcceptanceService;
@GetMapping(path = "/getAcceptanceDetail")
@ApiOperation("获取门店开业验收数据")
@ApiImplicitParams({
@ApiImplicitParam(name = "shopId", value = "门店ID", required = true)
})
public ResponseResult<OpeningAcceptanceDetailVO> getAcceptanceDetail(@RequestParam(value = "shopId",required = true)Long shopId){
return ResponseResult.success(openingAcceptanceService.getAcceptanceDetail(shopId));
}
}