feat:签约合同优化

This commit is contained in:
shuo.wang
2025-05-08 11:16:40 +08:00
parent b394bdbb3a
commit 6dd365a065
7 changed files with 210 additions and 21 deletions

View File

@@ -111,6 +111,7 @@ public enum ErrorCodeEnum {
POINT_SELECTED(600016, "该铺位已被选择", null),
NOT_EXIST_UNSELECT_POINT(600017, "当前没有未选择的铺位", null),
SELECT_POINT_ERROR(600018, "铺位选中失败", null),
POINT_NOT_SELECT(600019, "该门店未选址", null),
OPEN_NEW_SHOP_RECORD_NOT_EXIST(700001, "开店申请记录不存在", null),
OPEN_NEW_SHOP_RECORD_AUDITED(700002, "开店申请已审核", null),

View File

@@ -29,6 +29,12 @@
<result column="create_user_id" jdbcType="VARCHAR" property="createUserId"/>
<result column="update_user_id" jdbcType="VARCHAR" property="updateUserId"/>
<result column="store_type" jdbcType="TINYINT" property="storeType"/>
<result column="province" jdbcType="VARCHAR" property="province"/>
<result column="province_code" jdbcType="VARCHAR" property="provinceCode"/>
<result column="city" jdbcType="VARCHAR" property="city"/>
<result column="city_code" jdbcType="VARCHAR"/>
<result column="district" jdbcType="VARCHAR" property="district"/>
<result column="district_code" jdbcType="VARCHAR"/>
</resultMap>
<sql id="allColumn">
@@ -37,6 +43,7 @@
shop_code, store_num, shop_manager_user_id, supervisor_user_id,
plan_open_time, cur_progress, shop_type, shop_stage, deleted, create_time, update_time,
join_mode,detail_address,franchise_brand,development_manager,want_shop_area_id,investment_manager,shop_status,create_user_id,update_user_id,store_type
, province,province_code,city,city_code,district,district_code
</sql>
<insert id="batchAddShop" useGeneratedKeys="true" keyProperty="id" keyColumn="id">

View File

@@ -131,4 +131,22 @@ public class ShopInfoDO {
@Column(name = "store_type")
private Integer storeType;
//省
@Column(name = "province")
private String province;
//省code
@Column(name = "province_code")
private String provinceCode;
//市
@Column(name = "city")
private String city;
//市code
@Column(name = "city_code")
private String cityCode;
//区
@Column(name = "district")
private String district;
//区code
@Column(name = "district_code")
private String districtCode;
}

View File

@@ -62,4 +62,25 @@ public class SignFranchiseDO {
private String partnershipSignatorySecond;
@Column(name = "business_model")
private Integer businessModel;
//签约人2身份证号
@Column(name = "partnership_signatory_second_id_number")
private String partnershipSignatorySecondIdNumber;
//签约人2手机号
@Column(name = "partnership_signatory_second_mobile")
private String partnershipSignatorySecondMobile;
//'保护距离 / m'
@Column(name = "protective_distance")
private Integer protectiveDistance;
//介绍人
@Column(name = "introducer")
private String introducer;
//介绍门店
@Column(name = "introducer_store")
private String introducerStore;
//介绍奖
@Column(name = "introducer_award")
private String introducerAward;
//签约人1第几家分店
@Column(name = "partnership_signatory_first_which_store")
private Integer partnershipSignatoryFirstWhichStore;
}

View File

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.text.SimpleDateFormat;
@@ -94,6 +95,54 @@ public class AddSignFranchiseRequest {
private String partnershipSignatoryFirst;
@ApiModelProperty("合伙签约人2")
private String partnershipSignatorySecond;
//签约人2身份证号
@ApiModelProperty("签约人2身份证号")
private String partnershipSignatorySecondIdNumber;
//签约人2手机号
@ApiModelProperty("签约人2手机号")
private String partnershipSignatorySecondMobile;
//'保护距离 / m'
@ApiModelProperty("保护距离 / m")
@NotNull(message = "保护距离不能为空")
private Integer protectiveDistance;
//介绍人
@ApiModelProperty("介绍人")
private String introducer;
//介绍门店
@ApiModelProperty("介绍门店")
private String introducerStore;
//介绍奖
@ApiModelProperty("介绍奖")
private String introducerAward;
//签约人1第几家分店
@ApiModelProperty("签约人1第几家分店")
@NotNull(message = "签约人1第哪家分店不能为空")
private Integer partnershipSignatoryFirstWhichStore;
//省
@ApiModelProperty("")
@NotBlank(message = "省不能为空")
private String province;
//省code
@ApiModelProperty("省code")
@NotBlank(message = "省code不能为空")
private String provinceCode;
//市
@ApiModelProperty("")
@NotBlank(message = "市不能为空")
private String city;
//市code
@ApiModelProperty("市code")
@NotBlank(message = "市code不能为空")
private String cityCode;
//区
@ApiModelProperty("")
@NotBlank(message = "区不能为空")
private String district;
//区code
@ApiModelProperty("区code")
@NotBlank(message = "区code不能为空")
private String districtCode;
public SignFranchiseDO toSignFranchiseDO() {
@@ -118,6 +167,13 @@ public class AddSignFranchiseRequest {
signFranchiseDO.setPartnershipSignatoryFirst(this.partnershipSignatoryFirst);
signFranchiseDO.setPartnershipSignatorySecond(this.partnershipSignatorySecond);
signFranchiseDO.setBusinessModel(this.businessModel);
signFranchiseDO.setPartnershipSignatorySecondIdNumber(this.partnershipSignatorySecondIdNumber);
signFranchiseDO.setPartnershipSignatorySecondMobile(this.partnershipSignatorySecondMobile);
signFranchiseDO.setProtectiveDistance(this.protectiveDistance);
signFranchiseDO.setIntroducer(this.introducer);
signFranchiseDO.setIntroducerStore(this.introducerStore);
signFranchiseDO.setIntroducerAward(this.introducerAward);
signFranchiseDO.setPartnershipSignatoryFirstWhichStore(this.partnershipSignatoryFirstWhichStore);
return signFranchiseDO;
}

View File

@@ -190,4 +190,46 @@ public class AddSignFranchiseResponse {
private Integer joinMode;
//签约人2身份证号
@ApiModelProperty("签约人2身份证号")
private String partnershipSignatorySecondIdNumber;
//签约人2手机号
@ApiModelProperty("签约人2手机号")
private String partnershipSignatorySecondMobile;
//'保护距离 / m'
@ApiModelProperty("保护距离 / m")
private Integer protectiveDistance;
//介绍人
@ApiModelProperty("介绍人")
private String introducer;
//介绍门店
@ApiModelProperty("介绍门店")
private String introducerStore;
//介绍奖
@ApiModelProperty("介绍奖")
private String introducerAward;
//签约人1第几家分店
@ApiModelProperty("签约人1第几家分店")
private Integer partnershipSignatoryFirstWhichStore;
//省
@ApiModelProperty("")
private String province;
//省code
@ApiModelProperty("省code")
private String provinceCode;
//市
@ApiModelProperty("")
private String city;
//市code
@ApiModelProperty("市code")
private String cityCode;
//区
@ApiModelProperty("")
private String district;
//区code
@ApiModelProperty("区code")
private String districtCode;
}

View File

@@ -41,6 +41,9 @@ import static com.cool.store.enums.UserRoleEnum.*;
@Service
@Slf4j
public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResultService {
@Resource
private PointInfoDAO pointInfoDAO;
@Resource
private EnterpriseUserRoleDao enterpriseUserRoleDao;
@Resource
@@ -166,6 +169,11 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
if (Objects.nonNull(isExist) && Objects.isNull(request.getId())) {
throw new ServiceException(ErrorCodeEnum.DUPLICATE_SUBMISSION);
}
ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId());
PointInfoDO pointInfoById = pointInfoDAO.getPointInfoById(shopInfoDO.getPointId());
if (Objects.isNull(pointInfoById)){
throw new ServiceException(ErrorCodeEnum.POINT_NOT_SELECT);
}
String lockKey = "submitSignFranchise:" + request.getShopId();
//流水
String lockValue = UUID.randomUUID().toString();
@@ -175,7 +183,6 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
acquired = redisUtilPool.setNxExpire(lockKey, lockValue, CommonConstants.TEN_SECONDS);
if (Boolean.TRUE.equals(acquired)) {
SignFranchiseDO signFranchiseDO = request.toSignFranchiseDO();
ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId());
if (Objects.isNull(request.getId())) {
signFranchiseMapper.insertSelective(signFranchiseDO);
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83);
@@ -199,15 +206,8 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
} else {
signFranchiseMapper.updateByPrimaryKeySelective(signFranchiseDO);
}
//店铺信息
shopInfoDO.setRegionId(request.getRegionId());
shopInfoDO.setShopName(request.getShopName());
shopInfoDO.setDetailAddress(request.getDetailAddress());
shopInfoDO.setJoinMode(request.getJoinMode());
shopInfoDO.setFranchiseBrand(request.getFranchiseBrand());
shopInfoDO.setUpdateTime(new Date());
shopInfoDO.setStoreType(request.getStoreType());
shopInfoMapper.updateByPrimaryKeySelective(shopInfoDO);
//修改shop & point
updateShopAndPoint(request, shopInfoDO, pointInfoById);
OrderSysInfoDO orderSysInfoDO = orderSysInfoDAO.selectByShopId(request.getShopId());
if (Objects.isNull(orderSysInfoDO)){
orderSysInfoDO = new OrderSysInfoDO();
@@ -234,7 +234,10 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean reSubmitSignFranchise(AddSignFranchiseRequest request, LoginUserInfo user) {
log.info("reSubmitSignFranchise request:{}", JSONObject.toJSONString(request));
if (Objects.isNull(request)) {
@@ -244,9 +247,15 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
throw new ServiceException(ErrorCodeEnum.SHOP_ID_NOT_EXIST);
}
ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId());
PointInfoDO pointInfoById = pointInfoDAO.getPointInfoById(shopInfoDO.getPointId());
if (Objects.isNull(pointInfoById)){
throw new ServiceException(ErrorCodeEnum.POINT_NOT_SELECT);
}
SignFranchiseDO signFranchiseDO = request.toSignFranchiseDO();
//修改信息
signFranchiseMapper.updateByPrimaryKeySelective(signFranchiseDO);
// //修改shop & point
updateShopAndPoint(request, shopInfoDO, pointInfoById);
//修改阶段状态
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83);
//发送通知
@@ -270,7 +279,29 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
return Boolean.TRUE;
}
private void updateShopAndPoint(AddSignFranchiseRequest request, ShopInfoDO shopInfoDO, PointInfoDO pointInfoById) {
//店铺信息
shopInfoDO.setRegionId(request.getRegionId());
shopInfoDO.setShopName(request.getShopName());
shopInfoDO.setDetailAddress(request.getDetailAddress());
shopInfoDO.setJoinMode(request.getJoinMode());
shopInfoDO.setFranchiseBrand(request.getFranchiseBrand());
shopInfoDO.setProvince(request.getProvince());
shopInfoDO.setCity(request.getCity());
shopInfoDO.setDistrict(request.getDistrict());
shopInfoDO.setProvinceCode(request.getProvinceCode());
shopInfoDO.setCityCode(request.getCityCode());
shopInfoDO.setDistrictCode(request.getDistrictCode());
shopInfoDO.setUpdateTime(new Date());
shopInfoDO.setStoreType(request.getStoreType());
shopInfoMapper.updateByPrimaryKeySelective(shopInfoDO);
pointInfoById.setProvince(request.getProvince());
pointInfoById.setCity(request.getCity());
pointInfoById.setDistrict(request.getDistrict());
pointInfoById.setAddress(request.getDetailAddress());
pointInfoById.setUpdateTime(new Date());
pointInfoDAO.updatePointInfo(pointInfoById);
}
@Override
public AddSignFranchiseResponse getSignFranchise(Long shopId) {
SignFranchiseDO signFranchiseDO = signFranchiseMapper.selectByShopId(shopId);
@@ -385,16 +416,29 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
Long lineId = shopInfoDO.getLineId();
//缴款信息
LinePayDO linePayDO = linePayMapper.getByLineIdAndPayTypeAndShopId(lineId, 1, shopId);
//铺位信息
PointInfoDO pointInfoDO = pointInfoMapper.getDataByShopIdAndLineId(lineId, shopId);
// //铺位信息
// PointInfoDO pointInfoDO = pointInfoMapper.getDataByShopIdAndLineId(lineId, shopId);
//证照办理
LicenseTransactDO licenseTransactDO = applyLicenseMapper.selectByShopId(shopId);
RegionDO regionInfo = regionMapper.getByRegionId(shopInfoDO.getRegionId());
// if (Objects.nonNull(pointInfoDO)) {
// // addSignFranchiseResponse.setStoreAddress(pointInfoDO.getAddress());
// if (StringUtils.isNoneBlank(pointInfoDO.getLatitude(), pointInfoDO.getLongitude())) {
// //GeoMapUtil.AddressInfo addressInfo = GeoMapUtil.reverseGeoCoding(pointInfoDO.getLatitude(), pointInfoDO.getLongitude());
// //addSignFranchiseResponse.setStoreProvinceCity(String.format("%s%s%s", addressInfo.getProvince(), addressInfo.getCity(), addressInfo.getDistrict()));
// }
// }
addSignFranchiseResponse.setPartnershipSignatoryFirst(lineInfoDO.getUsername());
addSignFranchiseResponse.setDetailAddress(shopInfoDO.getDetailAddress());
addSignFranchiseResponse.setStoreType(shopInfoDO.getStoreType());
addSignFranchiseResponse.setProvince(shopInfoDO.getProvince());
addSignFranchiseResponse.setCity(shopInfoDO.getCity());
addSignFranchiseResponse.setDistrict(shopInfoDO.getDistrict());
addSignFranchiseResponse.setProvinceCode(shopInfoDO.getProvinceCode());
addSignFranchiseResponse.setCityCode(shopInfoDO.getCityCode());
addSignFranchiseResponse.setDistrictCode(shopInfoDO.getDistrictCode());
if (Objects.nonNull(signFranchiseDO)) {
addSignFranchiseResponse.setId(signFranchiseDO.getId());
addSignFranchiseResponse.setShopId(signFranchiseDO.getShopId());
@@ -416,6 +460,13 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
addSignFranchiseResponse.setPartnershipSignatoryFirst(signFranchiseDO.getPartnershipSignatoryFirst());
addSignFranchiseResponse.setPartnershipSignatorySecond(signFranchiseDO.getPartnershipSignatorySecond());
addSignFranchiseResponse.setBusinessModel(signFranchiseDO.getBusinessModel());
addSignFranchiseResponse.setPartnershipSignatorySecondIdNumber(signFranchiseDO.getPartnershipSignatorySecondIdNumber());
addSignFranchiseResponse.setPartnershipSignatorySecondMobile(signFranchiseDO.getPartnershipSignatorySecondMobile());
addSignFranchiseResponse.setProtectiveDistance(signFranchiseDO.getProtectiveDistance());
addSignFranchiseResponse.setIntroducer(signFranchiseDO.getIntroducer());
addSignFranchiseResponse.setIntroducerStore(signFranchiseDO.getIntroducerStore());
addSignFranchiseResponse.setIntroducerAward(signFranchiseDO.getIntroducerAward());
addSignFranchiseResponse.setPartnershipSignatoryFirstWhichStore(signFranchiseDO.getPartnershipSignatoryFirstWhichStore());
} else {
BigDecimal total = new BigDecimal(franchiseFeeDO.getYearFranchiseFee())
@@ -436,13 +487,6 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
addSignFranchiseResponse.setRegionName(regionInfo.getName());
}
if (Objects.nonNull(pointInfoDO)) {
addSignFranchiseResponse.setStoreAddress(pointInfoDO.getAddress());
if (StringUtils.isNoneBlank(pointInfoDO.getLatitude(), pointInfoDO.getLongitude())) {
GeoMapUtil.AddressInfo addressInfo = GeoMapUtil.reverseGeoCoding(pointInfoDO.getLatitude(), pointInfoDO.getLongitude());
addSignFranchiseResponse.setStoreProvinceCity(String.format("%s%s%s", addressInfo.getProvince(), addressInfo.getCity(), addressInfo.getDistrict()));
}
}
if (Objects.nonNull(linePayDO)) {
addSignFranchiseResponse.setPayName(linePayDO.getPayUserName());
addSignFranchiseResponse.setBankCardNo(linePayDO.getPayAccount());