装修阶段

This commit is contained in:
苏竹红
2024-06-25 15:09:16 +08:00
parent 50ae1f4ce4
commit 06666ea419
18 changed files with 313 additions and 331 deletions

View File

@@ -219,6 +219,8 @@ public enum ErrorCodeEnum {
FITMENT_FAIL(12003,"装修款阶段未完成",null), FITMENT_FAIL(12003,"装修款阶段未完成",null),
SEE_ACCEPTANCE_ERROR(12004,"获取鲜丰撤场数据失败",null), SEE_ACCEPTANCE_ERROR(12004,"获取鲜丰撤场数据失败",null),
SEE_ACCEPTANCE_AUDIT_NULL(12005,"视觉验收结果为空",null), SEE_ACCEPTANCE_AUDIT_NULL(12005,"视觉验收结果为空",null),
STATUS_NOT_SUPPORT_SUMMIT(121006,"该状态不支持上传",null),
DESIGN_NO_COMPLETE(121007,"请先完成设计阶段!",null),
; ;

View File

@@ -20,7 +20,6 @@ public enum ShopSubStageEnum {
SHOP_STAGE_7(ShopStageEnum.SHOP_STAGE_2, 70, "缴纳加盟费/保证金", 1), SHOP_STAGE_7(ShopStageEnum.SHOP_STAGE_2, 70, "缴纳加盟费/保证金", 1),
SHOP_STAGE_8(ShopStageEnum.SHOP_STAGE_2, 80, "加盟合同签约", 4), SHOP_STAGE_8(ShopStageEnum.SHOP_STAGE_2, 80, "加盟合同签约", 4),
SHOP_STAGE_9(ShopStageEnum.SHOP_STAGE_2, 90, "设计阶段", 21), SHOP_STAGE_9(ShopStageEnum.SHOP_STAGE_2, 90, "设计阶段", 21),
SHOP_STAGE_10(ShopStageEnum.SHOP_STAGE_2, 100, "装修款", 24),
SHOP_STAGE_11(ShopStageEnum.SHOP_STAGE_2, 110, "施工阶段", 31), SHOP_STAGE_11(ShopStageEnum.SHOP_STAGE_2, 110, "施工阶段", 31),
SHOP_STAGE_12(ShopStageEnum.SHOP_STAGE_2, 120, "三方验收", 32), SHOP_STAGE_12(ShopStageEnum.SHOP_STAGE_2, 120, "三方验收", 32),
SHOP_STAGE_14(ShopStageEnum.SHOP_STAGE_2, 140, "开业运营方案", 23), SHOP_STAGE_14(ShopStageEnum.SHOP_STAGE_2, 140, "开业运营方案", 23),

View File

@@ -51,7 +51,7 @@ public enum ShopSubStageStatusEnum {
//设计阶段 //设计阶段
SHOP_SUB_STAGE_STATUS_90(ShopSubStageEnum.SHOP_STAGE_9, 900, "待上传", Boolean.FALSE), SHOP_SUB_STAGE_STATUS_90(ShopSubStageEnum.SHOP_STAGE_9, 900, "待上传", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_92(ShopSubStageEnum.SHOP_STAGE_9, 920, "待确认", Boolean.FALSE), SHOP_SUB_STAGE_STATUS_92(ShopSubStageEnum.SHOP_STAGE_9, 920, "待确认", Boolean.FALSE),
SHOP_SUB_STAGE_STATUS_91(ShopSubStageEnum.SHOP_STAGE_9, 910, "已完成", Boolean.TRUE), SHOP_SUB_STAGE_STATUS_93(ShopSubStageEnum.SHOP_STAGE_9, 930, "已完成", Boolean.TRUE),
//施工阶段 //施工阶段
SHOP_SUB_STAGE_STATUS_111(ShopSubStageEnum.SHOP_STAGE_11, 1110, "施工中", Boolean.FALSE), SHOP_SUB_STAGE_STATUS_111(ShopSubStageEnum.SHOP_STAGE_11, 1110, "施工中", Boolean.FALSE),

View File

@@ -17,13 +17,28 @@ public class DecorationDesignInfoDAO {
@Resource @Resource
DecorationDesignInfoMapper decorationDesignInfoMapper; DecorationDesignInfoMapper decorationDesignInfoMapper;
private DecorationDesignInfoDO getById(Long id){ public DecorationDesignInfoDO getById(Long id){
if(id == null){ if(id == null){
return null; return null;
} }
return decorationDesignInfoMapper.selectByPrimaryKey(id); return decorationDesignInfoMapper.selectByPrimaryKey(id);
} }
public Integer insertSelective(DecorationDesignInfoDO decorationDesignInfoDO){
return decorationDesignInfoMapper.insertSelective(decorationDesignInfoDO);
}
public Integer updateByPrimaryKey(DecorationDesignInfoDO decorationDesignInfoDO){
return decorationDesignInfoMapper.updateByPrimaryKey(decorationDesignInfoDO);
}
public DecorationDesignInfoDO getByShopId(Long shopId){
if(shopId == null){
return null;
}
return decorationDesignInfoMapper.selectByShopId(shopId);
}

View File

@@ -4,4 +4,13 @@ import com.cool.store.entity.DecorationDesignInfoDO;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
public interface DecorationDesignInfoMapper extends Mapper<DecorationDesignInfoDO> { public interface DecorationDesignInfoMapper extends Mapper<DecorationDesignInfoDO> {
/**
* 查询店铺的设计数据
* @param shopId
* @return
*/
DecorationDesignInfoDO selectByShopId(Long shopId);
} }

View File

@@ -15,4 +15,16 @@
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" /> <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="deleted" jdbcType="BIT" property="deleted" /> <result column="deleted" jdbcType="BIT" property="deleted" />
</resultMap> </resultMap>
<select id="selectByShopId" resultMap="BaseResultMap">
select
*
from decoration_design_info where shop_id = #{shopId} and deleted = 0
</select>
</mapper> </mapper>

View File

@@ -72,6 +72,7 @@
<if test="request.businessLeaderMobile != null">business_leader_mobile,</if> <if test="request.businessLeaderMobile != null">business_leader_mobile,</if>
<if test="request.financialManagerName != null">financial_manager_name,</if> <if test="request.financialManagerName != null">financial_manager_name,</if>
<if test="request.financialManagerMobile != null">financial_manager_mobile,</if> <if test="request.financialManagerMobile != null">financial_manager_mobile,</if>
<if test="request.businessLicense != null">business_license,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="request.auditId != null">#{request.auditId},</if> <if test="request.auditId != null">#{request.auditId},</if>
@@ -103,6 +104,7 @@
<if test="request.businessLeaderMobile != null">#{request.businessLeaderMobile},</if> <if test="request.businessLeaderMobile != null">#{request.businessLeaderMobile},</if>
<if test="request.financialManagerName != null">#{request.financialManagerName},</if> <if test="request.financialManagerName != null">#{request.financialManagerName},</if>
<if test="request.financialManagerMobile != null">#{request.financialManagerMobile},</if> <if test="request.financialManagerMobile != null">#{request.financialManagerMobile},</if>
<if test="request.businessLicense != null">#{request.businessLicense},</if>
</trim> </trim>
ON DUPLICATE KEY UPDATE ON DUPLICATE KEY UPDATE
<trim suffixOverrides=","> <trim suffixOverrides=",">
@@ -135,6 +137,7 @@
<if test="request.businessLeaderMobile != null">business_leader_mobile = #{request.businessLeaderMobile},</if> <if test="request.businessLeaderMobile != null">business_leader_mobile = #{request.businessLeaderMobile},</if>
<if test="request.financialManagerName != null">financial_manager_name = #{request.financialManagerName},</if> <if test="request.financialManagerName != null">financial_manager_name = #{request.financialManagerName},</if>
<if test="request.financialManagerMobile != null">financial_manager_mobile = #{request.financialManagerMobile},</if> <if test="request.financialManagerMobile != null">financial_manager_mobile = #{request.financialManagerMobile},</if>
<if test="request.businessLicense != null">business_license = #{request.businessLicense},</if>
</trim> </trim>
</insert> </insert>

View File

@@ -1,5 +1,6 @@
package com.cool.store.entity; package com.cool.store.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
@@ -203,5 +204,8 @@ public class QualificationsInfoDO {
*/ */
private Boolean deleted; private Boolean deleted;
@Column(name = "business_license")
private String businessLicense;
} }

View File

@@ -0,0 +1,56 @@
package com.cool.store.request;
import com.cool.store.entity.DecorationDesignInfoDO;
import lombok.Data;
import javax.persistence.Column;
import java.util.Date;
/**
* @Author suzhuhong
* @Date 2024/6/25 11:19
* @Version 1.0
*/
@Data
public class DecorationDesignRequest {
@Column(name = "shop_id")
private Long shopId;
/**
* 报价单
*/
@Column(name = "quotation_url")
private String quotationUrl;
/**
* 设计图
*/
@Column(name = "design_url")
private String designUrl;
/**
* 备注
*/
private String remark;
/**
* 加密商验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":0}
*/
@Column(name = "partner_acceptance_signatures")
private String partnerAcceptanceSignatures;
public DecorationDesignInfoDO toDecorationDesignInfoDO() {
DecorationDesignInfoDO decorationDesignInfoDO = new DecorationDesignInfoDO();
decorationDesignInfoDO.setDesignUrl(this.designUrl);
decorationDesignInfoDO.setShopId(this.shopId);
decorationDesignInfoDO.setRemark(this.remark);
decorationDesignInfoDO.setQuotationUrl(this.quotationUrl);
decorationDesignInfoDO.setPartnerAcceptanceSignatures(this.partnerAcceptanceSignatures);
decorationDesignInfoDO.setUpdateTime(new Date());
return decorationDesignInfoDO;
}
}

View File

@@ -84,6 +84,8 @@ public class JoinIntentionRequest {
private String financialManagerName; private String financialManagerName;
@ApiModelProperty("业务负责人联系方式") @ApiModelProperty("业务负责人联系方式")
private String financialManagerMobile; private String financialManagerMobile;
@ApiModelProperty("营业执照")
private String businessLicense;
public LineInfoDO toLineInfoDO() { public LineInfoDO toLineInfoDO() {
LineInfoDO lineInfoDO = new LineInfoDO(); LineInfoDO lineInfoDO = new LineInfoDO();
@@ -131,6 +133,7 @@ public class JoinIntentionRequest {
qualificationsInfoDO.setBusinessLeaderMobile(this.businessLeaderMobile); qualificationsInfoDO.setBusinessLeaderMobile(this.businessLeaderMobile);
qualificationsInfoDO.setFinancialManagerName(this.financialManagerName); qualificationsInfoDO.setFinancialManagerName(this.financialManagerName);
qualificationsInfoDO.setFinancialManagerMobile(this.financialManagerMobile); qualificationsInfoDO.setFinancialManagerMobile(this.financialManagerMobile);
qualificationsInfoDO.setBusinessLicense(this.businessLicense);
return qualificationsInfoDO; return qualificationsInfoDO;
} }
} }

View File

@@ -0,0 +1,51 @@
package com.cool.store.vo;
import lombok.Data;
import javax.persistence.Column;
import java.util.Date;
/**
* @Author suzhuhong
* @Date 2024/6/25 14:03
* @Version 1.0
*/
@Data
public class DecorationDesignVO {
/**
* xfsg_shop_info.id
*/
@Column(name = "shop_id")
private Long shopId;
/**
* 报价单
*/
@Column(name = "quotation_url")
private String quotationUrl;
/**
* 设计图
*/
@Column(name = "design_url")
private String designUrl;
/**
* 备注
*/
private String remark;
/**
* 加密商验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":0}
*/
@Column(name = "partner_acceptance_signatures")
private String partnerAcceptanceSignatures;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
}

View File

@@ -8,6 +8,7 @@ import com.cool.store.request.*;
import com.cool.store.response.ThreeSignResponse; import com.cool.store.response.ThreeSignResponse;
import com.cool.store.vo.DecorationDesignVO;
import com.cool.store.vo.Fitment.DecorationStageVO; import com.cool.store.vo.Fitment.DecorationStageVO;
import com.cool.store.vo.Fitment.DesignInfoVo; import com.cool.store.vo.Fitment.DesignInfoVo;
import com.cool.store.vo.LinePayVO; import com.cool.store.vo.LinePayVO;
@@ -117,4 +118,36 @@ public interface DecorationService {
* @description:三方获取验收列表详情 * @description:三方获取验收列表详情
*/ */
fitmentCheckVO getAcceptanceDetail(Long shopId, LoginUserInfo user); fitmentCheckVO getAcceptanceDetail(Long shopId, LoginUserInfo user);
/**
* 提交设计数据
* @param request
* @param user
* @return
*/
Boolean submitDecorationDesign(DecorationDesignRequest request, LoginUserInfo user);
/**
* 获取设计数据
* @param shopId
* @return
*/
DecorationDesignVO getDecorationDesign(Long shopId);
/**
* 确认设计数据方案
* @param request
* @param user
* @return
*/
Boolean confirmDesign(DecorationDesignRequest request, LoginUserInfo user);
/**
* 装修阶段确认完成
* @param shopId
* @param user
* @return
*/
Boolean confirmComplete(Long shopId, LoginUserInfo user);
} }

View File

@@ -22,14 +22,12 @@ import com.cool.store.request.*;
import com.cool.store.response.ThreeSignResponse; import com.cool.store.response.ThreeSignResponse;
import com.cool.store.service.*; import com.cool.store.service.*;
import com.cool.store.utils.CoolDateUtils; import com.cool.store.utils.CoolDateUtils;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.utils.poi.StringUtils; import com.cool.store.utils.poi.StringUtils;
import com.cool.store.vo.AssessmentTemplateVO; import com.cool.store.vo.*;
import com.cool.store.vo.Fitment.DecorationStageVO; import com.cool.store.vo.Fitment.DecorationStageVO;
import com.cool.store.vo.Fitment.DesignInfoVo; import com.cool.store.vo.Fitment.DesignInfoVo;
import com.cool.store.vo.LinePayVO;
import com.cool.store.vo.PartnerUserInfoVO;
import com.cool.store.vo.fitmentCheckVO;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
@@ -97,53 +95,14 @@ public class DecorationServiceImpl implements DecorationService {
private CommonService commonService; private CommonService commonService;
@Resource @Resource
private AssessmentTemplateService assessmentTemplateService; private AssessmentTemplateService assessmentTemplateService;
@Resource
RedisUtilPool redisUtilPool;
@Resource
DecorationDesignInfoDAO decorationDesignInfoDAO;
@Override @Override
public DesignInfoVo DesignInfo(Long shopId) { public DesignInfoVo DesignInfo(Long shopId) {
DecorationDTO decoration = getDecorationDTO(shopId); return null;
if (decoration == null) {
log.error("拉取云立方接口获取数据为空");
return null;
}
Long flag;
DesignInfoVo designInfoVo = new DesignInfoVo();
//平面图和施工
List<DesignSchemeDTO> designScheme = decoration.getDesignScheme();
long count = designScheme.stream().filter(design -> DesignPhaseEnum.DESIGN_PHASE_ACCEPTANCE_PASS.getCode().equals(design.getStatus())).count();
flag = count;
designInfoVo.setDesignScheme(designScheme);
List<ConstructionScheduleDTO> constructionSchedule = decoration.getConstructionSchedule();
if (CollectionUtils.isNotEmpty(constructionSchedule)) {
Map<String, ConstructionScheduleDTO> constructionScheduleMap = constructionSchedule.stream().collect(Collectors.toMap(ConstructionScheduleDTO::getName,
Function.identity(), (a, b) -> b));
if (CollectionUtils.isNotEmpty(constructionSchedule)) {
//量房
ConstructionScheduleDTO measuringRoom = constructionScheduleMap.get(CommonConstants.MEASURING_THE_ROOM);
if (Objects.nonNull(measuringRoom)) {
designInfoVo.setMeasuringRoom(measuringRoom);
if (ConstructionPhaseEnum.construction_FINSH.getCode().equals(measuringRoom.getState())) {
flag++;
}
}
}
}
//获取最新预算
BudgetDTO proposedBookBudget = getBudgetDTOS(decoration);
if (Objects.nonNull(proposedBookBudget)) {
designInfoVo.setProposedBookBudget(proposedBookBudget);
flag++;
}
if (flag == CommonConstants.FOUR) {
//如果设计阶段进行中
ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_9);
if (ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_90.getShopSubStageStatus().equals(shopSubStageInfo.getShopSubStageStatus())) {
//更新设计阶段状态完成//初始化装修款阶段
shopStageInfoDAO.batchUpdateShopStageStatus(shopId, Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_91));
LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopSubStageInfo.getLineId());
commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.DECORATION_MODEL_PAY, null);
}
}
return designInfoVo;
} }
@Override @Override
@@ -318,41 +277,18 @@ public class DecorationServiceImpl implements DecorationService {
//如果完成更新施工阶段状态 //如果完成更新施工阶段状态
if (ConstructionPhaseEnum.construction_FINSH.getCode().equals(constructionSage.getState())) { // if (ConstructionPhaseEnum.construction_FINSH.getCode().equals(constructionSage.getState())) {
shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_112); // shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_112);
} else { // } else {
shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_111); // shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_111);
} // }
return collect; return collect;
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public ConstructionScheduleDTO getConstructionInfo(Long shopId) { public ConstructionScheduleDTO getConstructionInfo(Long shopId) {
DecorationDTO decoration = getDecorationDTO(shopId); return null;
if (decoration == null) {
log.error("DecorationModel storeNum is null");
return null;
}
List<ConstructionScheduleDTO> constructionSchedule = decoration.getConstructionSchedule();
Map<String, ConstructionScheduleDTO> constructionScheduleMap = constructionSchedule.stream().collect(Collectors.toMap(ConstructionScheduleDTO::getName,
dto -> dto));
ConstructionScheduleDTO constructionScheduleDTO = constructionScheduleMap.get(CommonConstants.CONSTRUCTION_PHASE);
//如果完成更新阶段状态
if (ConstructionPhaseEnum.construction_FINSH.getCode().equals(constructionScheduleMap.get(CommonConstants.CONSTRUCTION_PHASE).getState())) {
shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_112);
ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_11);
shopSubStageInfo.setPlanCompleteTime(constructionScheduleDTO.getPlanEndDate());
shopSubStageInfo.setActualCompleteTime(constructionScheduleDTO.getActualEndDate());
shopStageInfoDAO.updateByShopId(shopSubStageInfo);
} else {
shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_111);
ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_11);
shopSubStageInfo.setPlanCompleteTime(constructionScheduleDTO.getPlanEndDate());
shopSubStageInfo.setActualCompleteTime(constructionScheduleDTO.getActualEndDate());
shopStageInfoDAO.updateByShopId(shopSubStageInfo);
}
return constructionScheduleDTO;
} }
@Override @Override
@@ -582,6 +518,85 @@ public class DecorationServiceImpl implements DecorationService {
return fitmentCheckVO; return fitmentCheckVO;
} }
@Override
public Boolean submitDecorationDesign(DecorationDesignRequest request, LoginUserInfo user) {
//重复提交校验 3秒内不能重复提交
String lockKey = "submitDecorationDesign:" + request.getShopId();
String lockValue = UUID.randomUUID().toString();
boolean acquired = redisUtilPool.setNxExpire(lockKey, lockValue, CommonConstants.THREE*CommonConstants.ONE_SECONDS);
if (!acquired){
throw new ServiceException(ErrorCodeEnum.DUPLICATE_SUBMISSION);
}
//校验参数
if (Objects.isNull(request)||request.getShopId()==null){
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
}
//必须是待提交状态才能提交
ShopStageInfoDO shopStageInfo = shopStageInfoDAO.getByShopIdAndSubStage(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_90.getShopSubStageStatus());
if (Objects.isNull(shopStageInfo)) {
throw new ServiceException(ErrorCodeEnum.STATUS_NOT_SUPPORT_SUMMIT);
}
DecorationDesignInfoDO decorationDesignInfoDO = request.toDecorationDesignInfoDO();
DecorationDesignInfoDO decoration = decorationDesignInfoDAO.getByShopId(request.getShopId());
if (Objects.nonNull(decoration)){
decorationDesignInfoDO.setId(decoration.getId());
decorationDesignInfoDAO.updateByPrimaryKey(decorationDesignInfoDO);
}else {
decorationDesignInfoDAO.insertSelective(decorationDesignInfoDO);
}
//更新装修设计状态
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_92);
return Boolean.TRUE;
}
@Override
public DecorationDesignVO getDecorationDesign(Long shopId) {
if (shopId==null){
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
}
DecorationDesignInfoDO decoration = decorationDesignInfoDAO.getByShopId(shopId);
if (!Objects.isNull(decoration)){
DecorationDesignVO decorationDesignVO = new DecorationDesignVO();
decorationDesignVO.setDesignUrl(decoration.getDesignUrl());
decorationDesignVO.setRemark(decoration.getRemark());
decorationDesignVO.setQuotationUrl(decoration.getQuotationUrl());
decorationDesignVO.setShopId(decoration.getShopId());
decorationDesignVO.setPartnerAcceptanceSignatures(decoration.getPartnerAcceptanceSignatures());
return decorationDesignVO;
}
return null;
}
@Override
public Boolean confirmDesign(DecorationDesignRequest request, LoginUserInfo user) {
//重复提交校验 3秒内不能重复提交
String lockKey = "confirmDesign:" + request.getShopId();
String lockValue = UUID.randomUUID().toString();
boolean acquired = redisUtilPool.setNxExpire(lockKey, lockValue, CommonConstants.THREE*CommonConstants.ONE_SECONDS);
if (!acquired){
throw new ServiceException(ErrorCodeEnum.DUPLICATE_SUBMISSION);
}
DecorationDesignInfoDO decorationDesignInfoDO = request.toDecorationDesignInfoDO();
DecorationDesignInfoDO decoration = decorationDesignInfoDAO.getByShopId(request.getShopId());
if (Objects.nonNull(decoration)){
decorationDesignInfoDO.setId(decoration.getId());
decorationDesignInfoDAO.updateByPrimaryKey(decorationDesignInfoDO);
}
//更新装修设计状态
shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(), Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_93, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_111));
return Boolean.TRUE;
}
@Override
public Boolean confirmComplete(Long shopId, LoginUserInfo user) {
ShopStageInfoDO shopStageInfoDO = shopStageInfoDAO.getByShopIdAndSubStage(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_93.getShopSubStageStatus());
if (Objects.isNull(shopStageInfoDO)){
throw new ServiceException(ErrorCodeEnum.DESIGN_NO_COMPLETE);
}
shopStageInfoDAO.batchUpdateShopStageStatus(shopId, Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_112, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_120));
return Boolean.TRUE;
}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public Boolean pcSubmitAcceptanceSign(ThreeAcceptanceRequest request) { public Boolean pcSubmitAcceptanceSign(ThreeAcceptanceRequest request) {

View File

@@ -191,26 +191,14 @@ public class PreparationServiceImpl implements PreparationService {
List<ShopStageInfoDO> shopStageInfo = shopStageInfoDAO.getShopStageInfo(shopId, null); List<ShopStageInfoDO> shopStageInfo = shopStageInfoDAO.getShopStageInfo(shopId, null);
if (CollectionUtils.isNotEmpty(shopStageInfo)) { if (CollectionUtils.isNotEmpty(shopStageInfo)) {
Map<Integer, ShopStageInfoDO> shopStageInfoDOMap = shopStageInfo.stream().collect(Collectors.toMap(ShopStageInfoDO::getShopSubStage, data -> data)); Map<Integer, ShopStageInfoDO> shopStageInfoDOMap = shopStageInfo.stream().collect(Collectors.toMap(ShopStageInfoDO::getShopSubStage, data -> data));
Boolean buildStoreCompletionFlag = Boolean.TRUE;
Boolean contractCompletionFlag = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_84.getShopSubStageStatus().equals(shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_8.getShopSubStage()).getShopSubStageStatus()); Boolean contractCompletionFlag = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_84.getShopSubStageStatus().equals(shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_8.getShopSubStage()).getShopSubStageStatus());
//都完成了 初始化后续流程数据 //都完成了 初始化后续流程数据
if (buildStoreCompletionFlag && contractCompletionFlag) { if (contractCompletionFlag) {
//初始化后续流程数据 设计阶段 装修阶段 开业运营方案 首批订货清单 //初始化后续流程数据 设计阶段 装修阶段 开业运营方案 首批订货清单
List<ShopStageInfoDO> list = new ArrayList<>(); List<ShopStageInfoDO> list = new ArrayList<>();
ShopStageInfoDO data1 = shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_9.getShopSubStage()); ShopStageInfoDO data1 = shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_9.getShopSubStage());
data1.setShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_90.getShopSubStageStatus()); data1.setShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_90.getShopSubStageStatus());
list.add(data1); list.add(data1);
// ShopStageInfoDO data2 = shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_11.getShopSubStage());
// data2.setShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_110.getShopSubStageStatus());
// list.add(data2);
//初始化xfsg_acceptance_info表
// AcceptanceInfoDO acceptanceInfoDO1 = acceptanceInfoDAO.selectByShopId(shopId);
// AcceptanceInfoDO acceptanceInfoDO = new AcceptanceInfoDO();
// acceptanceInfoDO.setShopId(shopId);
// acceptanceInfoDO.setCreateTime(new Date());
// if(Objects.isNull(acceptanceInfoDO1)) {
// acceptanceInfoDAO.insertSelectiveAcceptanceInfo(acceptanceInfoDO);
// }
ShopStageInfoDO data3 = shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_14.getShopSubStage()); ShopStageInfoDO data3 = shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_14.getShopSubStage());
data3.setShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_140.getShopSubStageStatus()); data3.setShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_140.getShopSubStageStatus());
list.add(data3); list.add(data3);
@@ -234,25 +222,7 @@ public class PreparationServiceImpl implements PreparationService {
@Override @Override
public Boolean decorationFlush(Long shopId) { public Boolean decorationFlush(Long shopId) {
List<ShopStageInfoDO> shopStageInfo = shopStageInfoDAO.getShopStageInfo(shopId, ShopStageEnum.SHOP_STAGE_2.getShopStage()); return Boolean.TRUE;
Map<Integer, ShopStageInfoDO> collect = shopStageInfo.stream().collect(Collectors.toMap(ShopStageInfoDO::getShopSubStage, Function.identity()));
//设计
Boolean flushFlag = Boolean.FALSE;
Integer Status900 = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_90.getShopSubStageStatus();
Integer Design = collect.get(ShopSubStageEnum.SHOP_STAGE_9.getShopSubStage()).getShopSubStageStatus();
if (Status900.equals(Design)) {
decorationService.DesignInfo(shopId);
flushFlag = Boolean.TRUE;
}
//装修款
Integer Status1000 = 1000;
Integer Status1010 = 1010;
Integer DecorationModel = collect.get(100).getShopSubStageStatus();
if (Status1000.equals(DecorationModel) || Status1010.equals(DecorationModel)) {
decorationService.getDecorationModel(shopId, null);
flushFlag = Boolean.TRUE;
}
return flushFlag;
} }

View File

@@ -123,4 +123,16 @@ public class PCDecorationController {
return ResponseResult.success(seeAcceptanceService.auditSeeAcceptance(request,user)); return ResponseResult.success(seeAcceptanceService.auditSeeAcceptance(request,user));
} }
@ApiOperation("提交设计方案")
@PostMapping("/submitDecorationDesign")
public ResponseResult<Boolean> submitBookingAcceptance(@RequestBody DecorationDesignRequest request){
return ResponseResult.success(decorationService.submitDecorationDesign(request,CurrentUserHolder.getUser()));
}
@ApiOperation("装修阶段完成")
@PostMapping("/confirmComplete")
public ResponseResult<Boolean> confirmComplete(@RequestParam Long shopId){
return ResponseResult.success(decorationService.confirmComplete(shopId,CurrentUserHolder.getUser()));
}
} }

View File

@@ -1,10 +1,12 @@
package com.cool.store.controller.webc; package com.cool.store.controller.webc;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.context.PartnerUserHolder; import com.cool.store.context.PartnerUserHolder;
import com.cool.store.dto.decoration.ConstructionScheduleDTO; import com.cool.store.dto.decoration.ConstructionScheduleDTO;
import com.cool.store.dto.decoration.DecorationModelDTO; import com.cool.store.dto.decoration.DecorationModelDTO;
import com.cool.store.dto.decoration.ThreeAcceptanceDTO; import com.cool.store.dto.decoration.ThreeAcceptanceDTO;
import com.cool.store.entity.ShopAuditInfoDO; import com.cool.store.entity.ShopAuditInfoDO;
import com.cool.store.request.DecorationDesignRequest;
import com.cool.store.request.LinePaySubmitRequest; import com.cool.store.request.LinePaySubmitRequest;
import com.cool.store.request.ThreeAcceptanceCheckRequest; import com.cool.store.request.ThreeAcceptanceCheckRequest;
import com.cool.store.request.ThreeAcceptanceRequest; import com.cool.store.request.ThreeAcceptanceRequest;
@@ -15,6 +17,7 @@ import com.cool.store.service.AssessmentTemplateService;
import com.cool.store.service.DecorationService; import com.cool.store.service.DecorationService;
import com.cool.store.service.SeeAcceptanceService; import com.cool.store.service.SeeAcceptanceService;
import com.cool.store.vo.AssessmentTemplateVO; import com.cool.store.vo.AssessmentTemplateVO;
import com.cool.store.vo.DecorationDesignVO;
import com.cool.store.vo.Fitment.DecorationStageVO; import com.cool.store.vo.Fitment.DecorationStageVO;
import com.cool.store.vo.Fitment.DesignInfoVo; import com.cool.store.vo.Fitment.DesignInfoVo;
@@ -112,4 +115,18 @@ public class MiniDecorationController {
public ResponseResult< List<ShopAuditInfoDO> > getAuditInfo(@RequestParam Long shopId){ public ResponseResult< List<ShopAuditInfoDO> > getAuditInfo(@RequestParam Long shopId){
return ResponseResult.success(seeAcceptanceService.getAuditInfo(shopId)); return ResponseResult.success(seeAcceptanceService.getAuditInfo(shopId));
} }
@ApiOperation("查询设计方案")
@GetMapping("/getDecorationDesign")
public ResponseResult<DecorationDesignVO> getDecorationDesign(@RequestParam Long shopId){
return ResponseResult.success(decorationService.getDecorationDesign(shopId));
}
@ApiOperation("加盟商确定设计方案")
@GetMapping("/confirmDesign")
public ResponseResult<Boolean> confirmDesign(@RequestParam DecorationDesignRequest shopId){
return ResponseResult.success(decorationService.confirmDesign(shopId,CurrentUserHolder.getUser()));
}
} }

View File

@@ -187,24 +187,9 @@ public class TestController {
xxlJobHandler.updateEntryTime(); xxlJobHandler.updateEntryTime();
return ResponseResult.success(); return ResponseResult.success();
} }
@GetMapping("/fitmentAcceptanceHandler")
public ResponseResult fitmentAcceptanceHandler(){
xxlJobHandler.fitmentAcceptanceHandler();
return ResponseResult.success();
}
@GetMapping("/threeAcceptanceBookingMessage") @GetMapping("/threeAcceptanceBookingMessage")
public ResponseResult threeAcceptanceBookingMessage(){ public ResponseResult threeAcceptanceBookingMessage(){
xxlJobHandler.threeAcceptanceBookingMessage(); xxlJobHandler.threeAcceptanceBookingMessage();
return ResponseResult.success(); return ResponseResult.success();
} }
@GetMapping("/threeAcceptanceMessage")
public ResponseResult threeAcceptanceMessage(){
xxlJobHandler.threeAcceptanceMessage();
return ResponseResult.success();
}
@GetMapping("/waitThreeAcceptanceMessage")
public ResponseResult waitThreeAcceptanceMessage(){
xxlJobHandler.waitThreeAcceptanceMessage();
return ResponseResult.success();
}
} }

View File

@@ -135,44 +135,6 @@ public class XxlJobHandler {
XxlJobHelper.handleSuccess(); XxlJobHelper.handleSuccess();
} }
/**
* @Auther: wangshuo
* @Date: 2024/4/29
* @description: 每天更新装修阶段进场时间等,至预约状态
*/
@XxlJob("fitmentAcceptanceHandler")
public void fitmentAcceptanceHandler() {
log.info("----定时任务每天更新至预约状态----");
boolean hasNext = true;
int pageNum = 1;
int pageSize = 50;
while (hasNext) {
PageHelper.startPage(pageNum, pageSize);
//获取表中的三方验收状态为-100状态和进场时间不为空的
List<AcceptanceInfoDO> acceptanceInfoDOS = acceptanceInfoDAO.selectAcceptanceInfoBySignatures(ShopSubStageEnum.SHOP_STAGE_12.getShopSubStage(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus());
if (CollectionUtils.isEmpty(acceptanceInfoDOS)) {
log.info("------定时任务结束每天更新至预约状态结束------");
return;
}
List<Long> shopIds = new ArrayList<>();
for (AcceptanceInfoDO acceptanceInfoDO : acceptanceInfoDOS) {
Long shopId = acceptanceInfoDO.getShopId();
Date actualEntryTime = acceptanceInfoDO.getActualEntryTime();
LocalDate plusFDays = DateUtils.getPlusFDays(actualEntryTime, CommonConstants.FOUR);
//小于等于当前时间
if (plusFDays.isEqual(LocalDate.now()) || plusFDays.isBefore(LocalDate.now())) {
//三方验收待预约
shopIds.add(shopId);
}
}
shopStageInfoDAO.batchUpdateShopStageStatus(shopIds, ShopSubStageEnum.SHOP_STAGE_12.getShopSubStage(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_120.getShopSubStageStatus());
hasNext = acceptanceInfoDOS.size() >= pageSize;
pageNum++;
}
log.info("------定时任务结束调用鲜丰获取进场时间结束------");
XxlJobHelper.handleSuccess();
}
/** /**
* @Auther: wangshuo * @Auther: wangshuo
@@ -226,172 +188,6 @@ public class XxlJobHandler {
} }
} }
/**
* @Auther: wangshuo
* @Date: 2024/5/7
* @description:三方验收预约短信通知,进场时间+7天的1800发送短信到加盟商
*/
@XxlJob("threeAcceptanceMessage")
public void threeAcceptanceMessage() {
log.info("------定时任务三方验收待验收的短信通知-----");
boolean hasNext = true;
int pageNum = 1;
int pageSize = 50;
while (hasNext) {
PageHelper.startPage(pageNum, pageSize);
//获取待验收的
List<AcceptanceInfoDO> acceptanceInfoDOS = acceptanceInfoDAO
.selectAcceptanceInfoBySignatures(ShopSubStageEnum.SHOP_STAGE_12.getShopSubStage(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_121.getShopSubStageStatus());
if (CollectionUtils.isEmpty(acceptanceInfoDOS)) {
log.info("------定时任务结束三方验收待验收的短信通知------");
return;
}
for (AcceptanceInfoDO acceptanceInfoDO : acceptanceInfoDOS) {
int flag = CommonConstants.ZERO;
while (flag < CommonConstants.TWO) {
try {
Date approach = acceptanceInfoDO.getActualEntryTime();
if (Objects.nonNull(approach)) {
LocalDate plusFDays = DateUtils.getPlusFDays(approach, CommonConstants.SIX);//7 day
if (plusFDays.equals(LocalDate.now())) {
//三方验收带预约
ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(acceptanceInfoDO.getShopId());
//加盟商手机号
Long lineId = shopInfo.getLineId();
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId);
if (Objects.isNull(lineInfo) && StringUtils.isNull(lineInfo.getMobile())) {
log.error("定时任务三方验收待验收的短信通知:加盟商手机号为空,shopId:#{}", acceptanceInfoDO.getShopId());
break;
}
EnterpriseUserDO supervisor = userAuthMappingService
.getUserByRoleEnumAndRegionId(UserRoleEnum.ENGINEER_DEP_SUPERVISOR, shopInfo.getRegionId());
if (Objects.isNull(supervisor)) {
log.error("该区域没有工程部监理,RegionId{}", shopInfo.getRegionId());
break;
}
//获取计划撤场时间
Date planExitTime = acceptanceInfoDO.getPlanExitTime();
//获取施工阶段计划完成时间
Date decorationEndTime = acceptanceInfoDO.getDecorationPlannedCompletionTime();
//获取计划验收时间
String planAcceptanceTime = CoolDateUtils.DateFormat(acceptanceInfoDO.getPlanAcceptanceTime(), CoolDateUtils.DATE_FORMAT_SEC);
if (StringUtils.isBlank(planAcceptanceTime)) {
planAcceptanceTime = "";
}
//区域监理手机号
Boolean f = Boolean.TRUE;
String mobile = supervisor.getMobile();
String supervisionName = supervisor.getName();
Map<String, String> messageMap = new HashMap<>();
if (Objects.nonNull(planExitTime)) {
String date = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, planExitTime);
messageMap.put("demolitionPlanTime", date);
} else {
if (Objects.nonNull(decorationEndTime)) {
String date = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, decorationEndTime);
messageMap.put("demolitionPlanTime", date);
}
}
messageMap.put("palnAcceptanceTime", planAcceptanceTime);
messageMap.put("supervisionName", supervisionName);
messageMap.put("supervisionMobile", mobile);
commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.THREE_ACCEPTANCE_WAIT, messageMap);
}
}
break;
} catch (Exception e) {
log.error("定时任务三方验收待验收的短信通知失败 shopId:{},e:{}", acceptanceInfoDO.getShopId(), e.getMessage());
flag++;
}
}
}
hasNext = acceptanceInfoDOS.size() >= pageSize;
pageNum++;
}
XxlJobHelper.handleSuccess();
}
/**
* @Auther: wangshuo
* @Date: 2024/5/7
* @description:实际进场时间+7天发送钉钉通知到督导
*/
@XxlJob("waitThreeAcceptanceMessage")
public void waitThreeAcceptanceMessage() {
log.info("------定时任务三方待验收钉钉通知-----");
boolean hasNext = true;
int pageNum = 1;
int pageSize = 50;
while (hasNext) {
PageHelper.startPage(pageNum, pageSize);
//获取待验收的
List<AcceptanceInfoDO> acceptanceInfoDOS = acceptanceInfoDAO
.selectAcceptanceInfoBySignatures(ShopSubStageEnum.SHOP_STAGE_12.getShopSubStage(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_121.getShopSubStageStatus());
if (CollectionUtils.isEmpty(acceptanceInfoDOS)) {
log.info("------定时任务结束三方待验收钉钉通知------");
return;
}
List<Long> shopIds = acceptanceInfoDOS.stream().filter(o -> o.getShopId() != null)
.map(AcceptanceInfoDO::getShopId).collect(Collectors.toList());
List<ShopInfoDO> shopListByIds = shopInfoDAO.getShopListByIds(shopIds);
Map<Long, ShopInfoDO> shopIdMap = shopListByIds.stream().filter(o -> o.getId() != null)
.collect(Collectors.toMap(ShopInfoDO::getId, Function.identity()));
for (AcceptanceInfoDO acceptance : acceptanceInfoDOS) {
//进场时间
Date approach = acceptance.getActualEntryTime();
Long shopId = acceptance.getShopId();
if (Objects.nonNull(approach)) {
LocalDate plusFDays = DateUtils.getPlusFDays(approach, CommonConstants.SIX);//7天
if (plusFDays.equals(LocalDate.now())) {
ShopInfoDO shopInfoDO = shopIdMap.get(shopId);
if (StringUtils.isBlank(shopInfoDO.getSupervisorUserId())) {
log.error("定时任务三方待验收钉钉通知,督导id为空,shopId:{}", shopId);
}
Long lineId = shopInfoDO.getLineId();
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId);
Map<String, String> messageMap = new HashMap<>();
messageMap.put("storeName", shopInfoDO.getShopName());
messageMap.put("partnerUsername", lineInfo.getUsername());
messageMap.put("partnerMobile", lineInfo.getMobile());
commonService.sendMessage(Arrays.asList(shopInfoDO.getSupervisorUserId()), MessageEnum.MESSAGE_25, messageMap);
}
}
}
hasNext = acceptanceInfoDOS.size() >= pageSize;
pageNum++;
}
XxlJobHelper.handleSuccess();
}
@XxlJob("interviewRemind")
public void interviewRemind() {
log.info("------面试提醒------");
String startTime = LocalDateTime.now().plusHours(1).minusMinutes(CommonConstants.FIVE).format(DateTimeFormatter.ofPattern(CoolDateUtils.DATE_FORMAT_SEC));
String endTime = LocalDateTime.now().plusHours(1).plusMinutes(CommonConstants.FIVE).format(DateTimeFormatter.ofPattern(CoolDateUtils.DATE_FORMAT_SEC));
List<LineInterviewDO> interviewList = lineInterviewDAO.getInterviewRemindList(startTime, endTime);
if (CollectionUtils.isEmpty(interviewList)) {
log.info("------今日没有待更新数据------");
return;
}
List<Long> lineIds = interviewList.stream().map(LineInterviewDO::getLineId).collect(Collectors.toList());
Map<Long, String> lineMobileMap = lineInfoDAO.getLineMobileMap(lineIds);
for (LineInterviewDO interview : interviewList) {
Map<String, String> templateParamMap = new HashMap<>();
templateParamMap.put("interviewTime", DateUtil.format(interview.getStartTime(), "HH:mm"));
if (InterviewTypeEnum.INTERVIEW.getCode().equals(interview.getInterviewType())) {
commonService.sendSms(lineMobileMap.get(interview.getLineId()), SMSMsgEnum.FIRST_INTERVIEW_REMIND, templateParamMap);
}
if (InterviewTypeEnum.SECOND_INTERVIEW.getCode().equals(interview.getInterviewType())) {
commonService.sendSms(lineMobileMap.get(interview.getLineId()), SMSMsgEnum.SECOND_INTERVIEW_REMIND, templateParamMap);
}
}
XxlJobHelper.handleSuccess();
}
/** /**
* 店铺新店开业状态更新 * 店铺新店开业状态更新
*/ */