Merge #30 into master from cc_20260106_process_change
fix:加盟合同签约及建店资料修改
* cc_20260106_process_change: (6 commits squashed)
- fix:加盟合同签约新增财务审批
- fix:建店资料阶段逻辑修改
- fix:加盟合同签约待办,财务查看待财务审批的待办
- feat:城市规划
- feat:行政区划接口;
fix:城市规划修改
- fix:加盟合同签约审批日志逻辑修改
Signed-off-by: 王非凡 <accounts_67eba0c5fee9c49c80c8e2b4@mail.teambition.com>
Reviewed-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>
Merged-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>
CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/30
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package com.cool.store.service;
|
||||
|
||||
|
||||
import com.cool.store.context.LoginUserInfo;
|
||||
import com.cool.store.request.AuditApproveRequest;
|
||||
import com.cool.store.request.BuildInformationRequest;
|
||||
import com.cool.store.request.BuildSettlerRequest;
|
||||
import com.cool.store.response.BuildInformationResponse;
|
||||
@@ -14,10 +16,16 @@ public interface BuildInformationService {
|
||||
|
||||
BuildInformationResponse getBuildInformation(Long shopId);
|
||||
|
||||
Integer submitOrUpdate(BuildInformationRequest request);
|
||||
Integer submitOrUpdate(BuildInformationRequest request, String userId, String userName);
|
||||
|
||||
Integer getJoinType(Long lineId);
|
||||
|
||||
Boolean updateBuildSettler(BuildSettlerRequest request,String userId);
|
||||
|
||||
/**
|
||||
* 运营顾问审批
|
||||
* @param request 审批Request
|
||||
* @param user 用户
|
||||
*/
|
||||
Boolean operationsConsultantAudit(AuditApproveRequest request, LoginUserInfo user);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@ public interface OperationLogService {
|
||||
|
||||
Long addOperationLog(Long shopId, ShopSubStageStatusEnum shopSubStageStatusEnum,String userId, List<EnterpriseUserDO> operationUserList, OperationTypeEnum operationTypeEnum, String remark,OperationStatusEnum operationStatusEnum);
|
||||
|
||||
Long addOperationLog(Long shopId, ShopSubStageStatusEnum shopSubStageStatusEnum,String userId, List<EnterpriseUserDO> operationUserList, OperationTypeEnum operationTypeEnum, String remark,OperationStatusEnum operationStatusEnum, int serial);
|
||||
|
||||
List<AuditInfoResponse> getAuditInfo(Long shopId,List<Integer> shopSubStageList);
|
||||
|
||||
Boolean batchUpdateProcessed( List<OperationLogDO> operationLogs,Long audit , String userId, String reason);
|
||||
|
||||
@@ -32,6 +32,8 @@ public interface SignFranchiseService {
|
||||
*/
|
||||
Boolean auditApprove(AuditApproveRequest request, LoginUserInfo user);
|
||||
|
||||
Boolean financeAuditApprove(AuditApproveRequest request, LoginUserInfo user);
|
||||
|
||||
/**
|
||||
* 加盟合同退回后重新缴费
|
||||
* @param shopId
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.cool.store.service.ad;
|
||||
|
||||
|
||||
import com.cool.store.vo.ad.AdDistrictVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 行政区划 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author wangff
|
||||
* @since 2025/10/14
|
||||
*/
|
||||
public interface AdDistrictService {
|
||||
|
||||
/**
|
||||
* 行政区划列表
|
||||
* @param pid 父级id,默认1
|
||||
* @return 行政区划VO列表
|
||||
*/
|
||||
List<AdDistrictVO> cityList(Long pid);
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.cool.store.service.ad.impl;
|
||||
|
||||
import com.cool.store.dao.ad.AdDistrictDAO;
|
||||
import com.cool.store.entity.ad.AdDistrictDO;
|
||||
import com.cool.store.service.ad.AdDistrictService;
|
||||
import com.cool.store.utils.BeanUtil;
|
||||
import com.cool.store.vo.ad.AdDistrictVO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 行政区划 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author wangff
|
||||
* @since 2025/10/14
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AdDistrictServiceImpl implements AdDistrictService {
|
||||
private final AdDistrictDAO adDistrictDAO;
|
||||
|
||||
@Override
|
||||
public List<AdDistrictVO> cityList(Long pid) {
|
||||
if (Objects.isNull(pid)) {
|
||||
pid = 1L;
|
||||
}
|
||||
List<AdDistrictDO> list = adDistrictDAO.getList(pid);
|
||||
return BeanUtil.toList(list, AdDistrictVO.class);
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,11 @@
|
||||
package com.cool.store.service.impl;
|
||||
|
||||
|
||||
import cn.hutool.core.collection.CollStreamUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.constants.CommonConstants;
|
||||
import com.cool.store.constants.RedisConstant;
|
||||
import com.cool.store.context.LoginUserInfo;
|
||||
import com.cool.store.dao.*;
|
||||
import com.cool.store.entity.*;
|
||||
import com.cool.store.enums.*;
|
||||
@@ -10,17 +13,15 @@ import com.cool.store.enums.point.ShopSubStageEnum;
|
||||
import com.cool.store.enums.point.ShopSubStageStatusEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.mapper.WarehouseInfoMapper;
|
||||
import com.cool.store.request.AuditApproveRequest;
|
||||
import com.cool.store.request.BuildInformationRequest;
|
||||
import com.cool.store.request.BuildSettlerRequest;
|
||||
import com.cool.store.response.BuildInformationResponse;
|
||||
import com.cool.store.service.BuildInformationService;
|
||||
import com.cool.store.mapper.BuildInformationMapper;
|
||||
import com.cool.store.service.EnumInfoService;
|
||||
import com.cool.store.service.PreparationService;
|
||||
import com.cool.store.service.UserAuthMappingService;
|
||||
import com.cool.store.service.*;
|
||||
import com.cool.store.utils.RedisConstantUtil;
|
||||
import com.cool.store.utils.RedisUtilPool;
|
||||
import com.cool.store.utils.poi.StringUtils;
|
||||
import com.cool.store.utils.poi.constant.Constants;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -31,7 +32,9 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static com.cool.store.enums.point.ShopSubStageStatusEnum.*;
|
||||
import static com.cool.store.enums.point.ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_150_5;
|
||||
|
||||
/**
|
||||
* @author EDY
|
||||
@@ -75,11 +78,19 @@ public class BuildInformationServiceImpl implements BuildInformationService {
|
||||
private BigRegionDAO bigRegionDAO;
|
||||
@Resource
|
||||
private AcceptanceInfoDAO acceptanceInfoDAO;
|
||||
@Resource
|
||||
private OperationLogService operationLogService;
|
||||
@Resource
|
||||
private EnterpriseUserDAO enterpriseUserDAO;
|
||||
@Resource
|
||||
private ShopAuditInfoDAO shopAuditInfoDAO;
|
||||
@Resource
|
||||
private OperationLogDAO operationLogDAO;
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Integer submitOrUpdate(BuildInformationRequest request) {
|
||||
public Integer submitOrUpdate(BuildInformationRequest request, String userId, String userName) {
|
||||
log.info("提交/修改建店资料开始,shopId:{}", JSONObject.toJSONString(request));
|
||||
String lockKey = redisConstantUtil.submitBuildKey(request.getShopId());
|
||||
String lockValue = UUID.randomUUID().toString();
|
||||
@@ -123,21 +134,18 @@ public class BuildInformationServiceImpl implements BuildInformationService {
|
||||
buildInformationDO.setSettlerIdCardFront(qualificationsInfoDO.getFrontOfIdCard());
|
||||
buildInformationDO.setSettlerIdCardReverse(qualificationsInfoDO.getBackOfIdCard());
|
||||
}
|
||||
// 存在运营顾问审批不通过重新编辑的情况,所以这里判断一下是否存在未处理的审批记录,不存在则添加审批记录
|
||||
insertOperations(shopInfoDO, userId, userName);
|
||||
if (Objects.isNull(informationDO)) {
|
||||
buildInformationDO.setCreateTime(new Date());
|
||||
buildInformationDO.setUpdateTime(new Date());
|
||||
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_151);
|
||||
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_150_5);
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put("partnerUsername", lineInfoDO.getUsername());
|
||||
map.put("partnerMobile", lineInfoDO.getMobile());
|
||||
map.put("storeName", shopInfoDO.getShopName());
|
||||
List<EnterpriseUserDO> logisticsList = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.LOGISTICS, shopInfoDO.getRegionId());
|
||||
List<String> logistics = new ArrayList<>();
|
||||
if (Objects.nonNull(logisticsList)) {
|
||||
logistics.addAll(logisticsList.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toList()));
|
||||
}
|
||||
commonService.sendQWMessage(logistics,
|
||||
MessageEnum.MESSAGE_52,
|
||||
commonService.sendQWMessage(Collections.singletonList(shopInfoDO.getOperationsConsultant()),
|
||||
MessageEnum.MESSAGE_54,
|
||||
map);
|
||||
return buildInformationDAO.insertSelective(buildInformationDO);
|
||||
} else {
|
||||
@@ -158,6 +166,19 @@ public class BuildInformationServiceImpl implements BuildInformationService {
|
||||
}
|
||||
}
|
||||
platformBuildDAO.batchUpdate(platformBuildDOS);
|
||||
// 运营顾问审批驳回后,走的编辑逻辑,因此判断是否为加盟商驳回后第一次编辑,推进阶段到运营顾问审批
|
||||
ShopStageInfoDO currentStage = shopStageInfoDAO.getByShopIdAndSubStage(shopInfoDO.getId(), ShopSubStageEnum.SHOP_STAGE_15.getShopSubStage());
|
||||
if (SHOP_SUB_STAGE_STATUS_150.getShopSubStageStatus().equals(currentStage.getShopSubStageStatus())) {
|
||||
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), SHOP_SUB_STAGE_STATUS_150_5);
|
||||
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_150_5);
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put("partnerUsername", lineInfoDO.getUsername());
|
||||
map.put("partnerMobile", lineInfoDO.getMobile());
|
||||
map.put("storeName", shopInfoDO.getShopName());
|
||||
commonService.sendQWMessage(Collections.singletonList(shopInfoDO.getOperationsConsultant()),
|
||||
MessageEnum.MESSAGE_54,
|
||||
map);
|
||||
}
|
||||
return buildInformationDAO.updateByShopIdSelective(buildInformationDO);
|
||||
}
|
||||
}else{
|
||||
@@ -173,6 +194,19 @@ public class BuildInformationServiceImpl implements BuildInformationService {
|
||||
}
|
||||
}
|
||||
|
||||
private void insertOperations(ShopInfoDO shopInfoDO, String userId, String userName) {
|
||||
List<OperationLogDO> operationLogs = operationLogDAO.getBySubStageStatusEnumAndsStatus(shopInfoDO.getId(), SHOP_SUB_STAGE_STATUS_150_5, OperationTypeEnum.OPERATION_TYPE_1.getCode());
|
||||
if (CollectionUtils.isEmpty(operationLogs)) {
|
||||
EnterpriseUserDO operationsConsultant = enterpriseUserDAO.getUserInfoById(shopInfoDO.getOperationsConsultant());
|
||||
// 审批记录
|
||||
operationLogService.addOperationLog(shopInfoDO.getId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_150, userId, userName,
|
||||
OperationTypeEnum.OPERATION_TYPE_0, "建店资料提交审批", OperationStatusEnum.PROCESSED);
|
||||
operationLogService.addOperationLog(shopInfoDO.getId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_150_5,
|
||||
shopInfoDO.getOperationsConsultant(), Collections.singletonList(operationsConsultant),
|
||||
OperationTypeEnum.OPERATION_TYPE_1, "建店资料运营顾问审核", OperationStatusEnum.NOT_PROCESSED);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BuildInformationResponse getBuildInformation(Long shopId) {
|
||||
BuildInformationResponse response = new BuildInformationResponse();
|
||||
@@ -221,6 +255,16 @@ public class BuildInformationServiceImpl implements BuildInformationService {
|
||||
}
|
||||
response.setDeclareGoodsType(orderSysInfoDO.getDeclareGoodsType());
|
||||
}
|
||||
if (StringUtils.isBlank(response.getReceivingFirmName())) {
|
||||
String bankInfoStr = redisUtilPool.getString(RedisConstant.BUILD_RECEIVE_BANK_INFO);
|
||||
if (StringUtils.isNotBlank(bankInfoStr)) {
|
||||
JSONObject bankInfo = JSONObject.parseObject(bankInfoStr);
|
||||
response.setReceivingFirmName(bankInfo.getString("receivingFirmName"));
|
||||
response.setReceivingMsBankAccount(bankInfo.getString("receivingMsBankAccount"));
|
||||
response.setReceivingMsBankBranch(bankInfo.getString("receivingMsBankBranch"));
|
||||
response.setBankUnionPayAccount(bankInfo.getString("bankUnionPayAccount"));
|
||||
}
|
||||
}
|
||||
if (StringUtils.isBlank(response.getXgjVicePresident())) {
|
||||
List<EnterpriseUserDO> userList = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.VICE_PRESIDENT_IN_CHARGE, shopInfo.getRegionId());
|
||||
if (CollectionUtils.isNotEmpty(userList)) {
|
||||
@@ -370,6 +414,50 @@ public class BuildInformationServiceImpl implements BuildInformationService {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Boolean operationsConsultantAudit(AuditApproveRequest request, LoginUserInfo user) {
|
||||
ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId());
|
||||
if (shopInfo.getShopDecorationAttributes() == null){
|
||||
throw new ServiceException(ErrorCodeEnum.SHOP_DECORATION_ATTRIBUTES_IS_NULL);
|
||||
}
|
||||
ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_15);
|
||||
if (!shopSubStageInfo.getShopSubStageStatus().equals(SHOP_SUB_STAGE_STATUS_150_5.getShopSubStageStatus())) {
|
||||
throw new ServiceException(ErrorCodeEnum.WORK_FLOW_STAGE_PASS_ERROR);
|
||||
}
|
||||
if (Constants.ZERO_INTEGER.equals(request.getAuditResult())) {
|
||||
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), SHOP_SUB_STAGE_STATUS_150);
|
||||
} else {
|
||||
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), SHOP_SUB_STAGE_STATUS_151);
|
||||
ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(request.getShopId());
|
||||
LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfoDO.getLineId());
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put("partnerUsername", lineInfoDO.getUsername());
|
||||
map.put("partnerMobile", lineInfoDO.getMobile());
|
||||
map.put("storeName", shopInfoDO.getShopName());
|
||||
List<EnterpriseUserDO> logisticsList = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.LOGISTICS, shopInfoDO.getRegionId());
|
||||
List<String> logistics = CollStreamUtil.toList(logisticsList, EnterpriseUserDO::getUserId);
|
||||
commonService.sendQWMessage(logistics, MessageEnum.MESSAGE_52, map);
|
||||
}
|
||||
|
||||
ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO();
|
||||
shopAuditInfoDO.setShopId(request.getShopId());
|
||||
shopAuditInfoDO.setAuditType(AuditTypeEnum.BUILDINFORMATION.getCode());
|
||||
shopAuditInfoDO.setSubmittedUserId(user.getUserId());
|
||||
shopAuditInfoDO.setSubmittedUserName(user.getName());
|
||||
shopAuditInfoDO.setResultType(request.getAuditResult() ^ 1);
|
||||
if (AuditResultTypeEnum.PASS.getCode().equals(shopAuditInfoDO.getResultType())) {
|
||||
shopAuditInfoDO.setPassReason(request.getCause());
|
||||
} else {
|
||||
shopAuditInfoDO.setRejectReason(request.getCause());
|
||||
}
|
||||
Long auditId = shopAuditInfoDAO.addAuditInfo(shopAuditInfoDO);
|
||||
//更新操作记录
|
||||
List<OperationLogDO> operationLogs = operationLogDAO.getBySubStageStatusEnumAndsStatus(request.getShopId(), SHOP_SUB_STAGE_STATUS_150_5, OperationTypeEnum.OPERATION_TYPE_1.getCode());
|
||||
operationLogService.batchUpdateProcessed(operationLogs, auditId, user.getUserId(), request.getCause());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -309,6 +309,9 @@ public class DeskServiceImpl implements DeskService {
|
||||
if (userRoleIds.contains(UserRoleEnum.BRANCH_OFFICE.getCode()) || userRoleIds.contains(UserRoleEnum.REGION_OFFICE.getCode()) || isAdmin) {
|
||||
subStageStatusList.add(SHOP_SUB_STAGE_STATUS_83.getShopSubStageStatus());
|
||||
}
|
||||
if (userRoleIds.contains(UserRoleEnum.FINANCE.getCode())) {
|
||||
subStageStatusList.add(SHOP_SUB_STAGE_STATUS_83_5.getShopSubStageStatus());
|
||||
}
|
||||
PageInfo<PreparationCommonPendingVO> pageInfo = commonPendingVOPageInfo(deskRequest, user, ShopSubStageEnum.SHOP_STAGE_8,
|
||||
subStageStatusList, Boolean.TRUE);
|
||||
return pageInfo;
|
||||
@@ -515,8 +518,8 @@ public class DeskServiceImpl implements DeskService {
|
||||
public PageInfo<PreparationCommonPendingVO> buildInformationPendingList(DeskRequest deskRequest, LoginUserInfo user) {
|
||||
List<Long> userRoleIds = enterpriseUserRoleMapper.getUserRoleIds(user.getUserId());
|
||||
if (userRoleIds.contains(UserRoleEnum.SUPERVISION.getCode())) {
|
||||
return commonPendingVOPageInfo(deskRequest, user, ShopSubStageEnum.SHOP_STAGE_15,
|
||||
Collections.singletonList(SHOP_SUB_STAGE_STATUS_150.getShopSubStageStatus()), Boolean.FALSE);
|
||||
return commonPendingVOPageInfoByOperationsConsultant(deskRequest, user.getUserId(), ShopSubStageEnum.SHOP_STAGE_15,
|
||||
Arrays.asList(SHOP_SUB_STAGE_STATUS_150.getShopSubStageStatus(), SHOP_SUB_STAGE_STATUS_150_5.getShopSubStageStatus()), Boolean.FALSE);
|
||||
}
|
||||
//如果不是财务角色或者即是财务又是自有店财务 则不需要标识
|
||||
Boolean ownShopFlag = null;
|
||||
@@ -551,7 +554,7 @@ public class DeskServiceImpl implements DeskService {
|
||||
subStageStatusList.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_154.getShopSubStageStatus());
|
||||
subStageStatusList.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_155.getShopSubStageStatus());
|
||||
}
|
||||
return commonPendingVOPage(deskRequest, isAdmin ? null : user, ShopSubStageEnum.SHOP_STAGE_15, subStageStatusList, isAdmin ? Boolean.FALSE : Boolean.TRUE, ownShopFlag);
|
||||
return commonPendingVOPage(deskRequest, isAdmin ? null : user, ShopSubStageEnum.SHOP_STAGE_15, subStageStatusList, isAdmin ? Boolean.FALSE : Boolean.TRUE, ownShopFlag, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -815,7 +818,11 @@ public class DeskServiceImpl implements DeskService {
|
||||
* @return
|
||||
*/
|
||||
private PageInfo<PreparationCommonPendingVO> commonPendingVOPageInfo(DeskRequest deskRequest, LoginUserInfo user, ShopSubStageEnum shopSubStageEnum, List<Integer> subStageStatusList, Boolean filterFlag) {
|
||||
return this.commonPendingVOPage(deskRequest, user, shopSubStageEnum, subStageStatusList, filterFlag, null);
|
||||
return this.commonPendingVOPage(deskRequest, user, shopSubStageEnum, subStageStatusList, filterFlag, null, null);
|
||||
}
|
||||
|
||||
private PageInfo<PreparationCommonPendingVO> commonPendingVOPageInfoByOperationsConsultant(DeskRequest deskRequest, String operationsConsultantUserId, ShopSubStageEnum shopSubStageEnum, List<Integer> subStageStatusList, Boolean filterFlag) {
|
||||
return this.commonPendingVOPage(deskRequest, null, shopSubStageEnum, subStageStatusList, filterFlag, null, operationsConsultantUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -826,7 +833,8 @@ public class DeskServiceImpl implements DeskService {
|
||||
* @param subStageStatusList
|
||||
* @return
|
||||
*/
|
||||
private PageInfo<PreparationCommonPendingVO> commonPendingVOPage(DeskRequest deskRequest, LoginUserInfo user, ShopSubStageEnum shopSubStageEnum, List<Integer> subStageStatusList, Boolean filterFlag, Boolean ownShopFlag) {
|
||||
private PageInfo<PreparationCommonPendingVO> commonPendingVOPage(DeskRequest deskRequest, LoginUserInfo user, ShopSubStageEnum shopSubStageEnum, List<Integer> subStageStatusList, Boolean filterFlag, Boolean ownShopFlag,
|
||||
String operationsConsultantUserId) {
|
||||
//user.getJobNumber()
|
||||
List<String> authRegionIds = new ArrayList<>();
|
||||
if (filterFlag) {
|
||||
@@ -836,7 +844,7 @@ public class DeskServiceImpl implements DeskService {
|
||||
}
|
||||
PageHelper.startPage(deskRequest.getPageNum(), deskRequest.getPageSize());
|
||||
List<ShopStageInfoDO> specialShopStageInfo = shopStageInfoDAO.getSpecialShopStageInfo(null, shopSubStageEnum.getShopSubStage(),
|
||||
subStageStatusList, user == null ? null : user.getUserId(), authRegionIds, ownShopFlag, deskRequest);
|
||||
subStageStatusList, user == null ? null : user.getUserId(), authRegionIds, ownShopFlag, deskRequest, operationsConsultantUserId);
|
||||
PageInfo result = new PageInfo<>(specialShopStageInfo);
|
||||
List<Long> shopIds = specialShopStageInfo.stream().map(ShopStageInfoDO::getShopId).collect(Collectors.toList());
|
||||
List<Long> lineIds = specialShopStageInfo.stream().map(ShopStageInfoDO::getLineId).collect(Collectors.toList());
|
||||
|
||||
@@ -59,10 +59,16 @@ public class OperationLogServiceImpl implements OperationLogService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long addOperationLog(Long shopId, ShopSubStageStatusEnum shopSubStageStatusEnum, String userId, List<EnterpriseUserDO> operationUserList, OperationTypeEnum operationTypeEnum, String remark, OperationStatusEnum operationStatusEnum) {
|
||||
return addOperationLog(shopId, shopSubStageStatusEnum, userId, operationUserList, operationTypeEnum, remark, operationStatusEnum, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long addOperationLog(Long shopId, ShopSubStageStatusEnum shopSubStageStatusEnum, String userId, List<EnterpriseUserDO> operationUserList, OperationTypeEnum operationTypeEnum, String remark, OperationStatusEnum operationStatusEnum, int serial) {
|
||||
List<OperationLogDO> operationLogDOList = new ArrayList<>();
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(new Date());
|
||||
calendar.add(Calendar.SECOND, 1);
|
||||
calendar.add(Calendar.SECOND, serial);
|
||||
Date date = calendar.getTime();
|
||||
if(CollectionUtils.isEmpty(operationUserList)){
|
||||
operationUserList = new ArrayList<>();
|
||||
|
||||
@@ -107,26 +107,9 @@ public class OrderSysInfoServiceImpl implements OrderSysInfoService {
|
||||
if (shopSubStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_151.getShopSubStageStatus())) {
|
||||
orderSysInfoDO.setOrderCreateTime(new Date());
|
||||
orderSysInfoDO.setOrderCreateUser(curUserId);
|
||||
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), SHOP_SUB_STAGE_STATUS_152);
|
||||
ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(request.getShopId());
|
||||
LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfoDO.getLineId());
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put("partnerUsername", lineInfoDO.getUsername());
|
||||
map.put("partnerMobile", lineInfoDO.getMobile());
|
||||
map.put("storeName", shopInfoDO.getShopName());
|
||||
//自有店财务
|
||||
UserRoleEnum finance = UserRoleEnum.FINANCE;
|
||||
if (JoinModeEnum.OWN_STORE.getCode()==(shopInfo.getJoinMode())) {
|
||||
finance = UserRoleEnum.OWN_SHOP_OFFICE;
|
||||
}
|
||||
List<EnterpriseUserDO> itList = userAuthMappingService.getAllUserByRoleEnumAndRegionId(finance, shopInfoDO.getRegionId());
|
||||
List<String> itUsers = new ArrayList<>();
|
||||
if (Objects.nonNull(itList)) {
|
||||
itUsers.addAll(itList.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toList()));
|
||||
}
|
||||
commonService.sendQWMessage(itUsers,
|
||||
MessageEnum.MESSAGE_53,
|
||||
map);
|
||||
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), SHOP_SUB_STAGE_STATUS_156);
|
||||
stageCompletion(request.getShopId());
|
||||
syncMainSysServer.syncStore(request.getShopId());
|
||||
return orderSysInfoDAO.updateByShopId(orderSysInfoDO);
|
||||
} else {
|
||||
orderSysInfoDO.setOrderUpdateTime(new Date());
|
||||
|
||||
@@ -872,6 +872,9 @@ public class ShopServiceImpl implements ShopService {
|
||||
case SHOP_SUB_STAGE_STATUS_83:
|
||||
return getUsersByRolesAndRegion(Arrays.asList(REGION_OFFICE, BRANCH_OFFICE), shopInfo.getRegionId());
|
||||
|
||||
case SHOP_SUB_STAGE_STATUS_83_5:
|
||||
return getUsersByRolesAndRegion(Collections.singletonList(FINANCE), shopInfo.getRegionId());
|
||||
|
||||
case SHOP_SUB_STAGE_STATUS_85_1:
|
||||
return getUsersByRole(FINANCE);
|
||||
|
||||
|
||||
@@ -242,6 +242,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
|
||||
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83);
|
||||
//发送通知
|
||||
List<EnterpriseUserDO> auditFranchiseFeeUsers = userAuthMappingService.getUserIdByRoleEnumAndRegionId(Arrays.asList(BRANCH_OFFICE, REGION_OFFICE), shopInfoDO.getRegionId());
|
||||
List<EnterpriseUserDO> financeUsers = userAuthMappingService.getUserIdByRoleEnumAndRegionId(Collections.singletonList(FINANCE), shopInfoDO.getRegionId());
|
||||
List<String> auditFranchiseFeeUserList = auditFranchiseFeeUsers.stream().distinct().map(EnterpriseUserDO::getUserId).collect(Collectors.toList());
|
||||
LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopInfoDO.getLineId());
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
@@ -255,8 +256,10 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
|
||||
OperationTypeEnum.OPERATION_TYPE_0, "加盟签约合同提交", OperationStatusEnum.PROCESSED);
|
||||
operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83,
|
||||
user.getUserId(), auditFranchiseFeeUsers,
|
||||
OperationTypeEnum.OPERATION_TYPE_1, "加盟签约合同审批", OperationStatusEnum.NOT_PROCESSED);
|
||||
|
||||
OperationTypeEnum.OPERATION_TYPE_1, "加盟签约合同审批", OperationStatusEnum.NOT_PROCESSED, 1);
|
||||
operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83_5,
|
||||
user.getUserId(), financeUsers,
|
||||
OperationTypeEnum.OPERATION_TYPE_1, "加盟签约合同财务审批", OperationStatusEnum.NOT_PROCESSED, 2);
|
||||
} else {
|
||||
//修改签约人信息
|
||||
signFranchiseMapper.updateByPrimaryKeySelective(signFranchiseDO);
|
||||
@@ -318,6 +321,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
|
||||
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83);
|
||||
//发送通知
|
||||
List<EnterpriseUserDO> userIds = userAuthMappingService.getUserIdByRoleEnumAndRegionId(Arrays.asList(BRANCH_OFFICE, REGION_OFFICE), shopInfoDO.getRegionId());
|
||||
List<EnterpriseUserDO> financeUsers = userAuthMappingService.getUserIdByRoleEnumAndRegionId(Collections.singletonList(FINANCE), shopInfoDO.getRegionId());
|
||||
List<String> auditFranchiseFeeUserList = userIds.stream().distinct().map(EnterpriseUserDO::getUserId).collect(Collectors.toList());
|
||||
LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopInfoDO.getLineId());
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
@@ -332,8 +336,10 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
|
||||
OperationTypeEnum.OPERATION_TYPE_0, "加盟签约合同重新提交提交", OperationStatusEnum.PROCESSED);
|
||||
operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83,
|
||||
user.getUserId(), userIds,
|
||||
OperationTypeEnum.OPERATION_TYPE_1, "加盟签约合同审批", OperationStatusEnum.NOT_PROCESSED);
|
||||
|
||||
OperationTypeEnum.OPERATION_TYPE_1, "加盟签约合同审批", OperationStatusEnum.NOT_PROCESSED, 1);
|
||||
operationLogService.addOperationLog(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83_5,
|
||||
user.getUserId(), financeUsers,
|
||||
OperationTypeEnum.OPERATION_TYPE_1, "加盟签约合同财务审批", OperationStatusEnum.NOT_PROCESSED, 2);
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
@@ -447,6 +453,99 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
|
||||
//流水
|
||||
String lockValue = UUID.randomUUID().toString();
|
||||
boolean acquired = false;
|
||||
try {
|
||||
//10s过期
|
||||
acquired = redisUtilPool.setNxExpire(lockKey, lockValue, CommonConstants.TEN_SECONDS);
|
||||
if (Boolean.TRUE.equals(acquired)) {
|
||||
ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId);
|
||||
ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO();
|
||||
shopAuditInfoDO.setShopId(shopId);
|
||||
shopAuditInfoDO.setAuditType(AuditTypeEnum.SIGN_FRANCHISE.getCode());
|
||||
shopAuditInfoDO.setSubmittedUserId(user.getUserId());
|
||||
shopAuditInfoDO.setSubmittedUserName(user.getName());
|
||||
//驳回
|
||||
if (Constants.ZERO_INTEGER.equals(request.getAuditResult())) {
|
||||
auditReject(request, shopAuditInfoDO, shopInfoDO);
|
||||
} else if (Constants.ONE_INTEGER.equals(request.getAuditResult())) {
|
||||
shopAuditInfoDO.setResultType(Constants.ZERO_INTEGER);
|
||||
shopAuditInfoDO.setPassReason(request.getCause());
|
||||
//更新状态为加盟商
|
||||
LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId());
|
||||
shopStageInfoDAO.updateShopStageInfo(shopId, SHOP_SUB_STAGE_STATUS_83_5);
|
||||
|
||||
Boolean sendNotice = Boolean.TRUE;
|
||||
if (sendNotice) {
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put("partnerUsername", lineInfoDO.getUsername());
|
||||
map.put("partnerMobile", lineInfoDO.getMobile());
|
||||
map.put("storeName", shopInfoDO.getShopName());
|
||||
List<EnterpriseUserDO> userDOList = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.FINANCE, shopInfoDO.getRegionId());
|
||||
List<String> finances = new ArrayList<>();
|
||||
if (Objects.nonNull(userDOList)) {
|
||||
finances.addAll(userDOList.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toList()));
|
||||
}
|
||||
commonService.sendQWMessage(finances,
|
||||
MessageEnum.MESSAGE_19_1,
|
||||
map);
|
||||
}
|
||||
}
|
||||
shopAuditInfoMapper.insertSelective(shopAuditInfoDO);
|
||||
Long auditId = shopAuditInfoDO.getId();
|
||||
signFranchiseDAO.updateAuditByShopId(auditId, shopId);
|
||||
//审批记录表记录
|
||||
List<OperationLogDO> operationLogs = operationLogDAO.getBySubStageStatusEnumAndsStatus(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83, OperationTypeEnum.OPERATION_TYPE_1.getCode());
|
||||
operationLogService.batchUpdateProcessed(operationLogs, auditId, user.getUserId(), request.getCause());
|
||||
return true;
|
||||
} else {
|
||||
throw new ServiceException(ErrorCodeEnum.DUPLICATE_SUBMISSION);
|
||||
}
|
||||
} finally {
|
||||
if (Boolean.TRUE.equals(acquired)) {
|
||||
String currentValue = redisUtilPool.getString(lockKey);
|
||||
if (lockValue.equals(currentValue)) {
|
||||
redisUtilPool.delKey(lockKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 分部内勤/财务审批拒绝
|
||||
*/
|
||||
private void auditReject(AuditApproveRequest request, ShopAuditInfoDO shopAuditInfoDO, ShopInfoDO shopInfoDO) {
|
||||
shopAuditInfoDO.setResultType(Constants.ONE_INTEGER);
|
||||
shopAuditInfoDO.setRejectReason(request.getCause());
|
||||
Map<String, String> requestMap = new HashMap<>();
|
||||
LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopInfoDO.getLineId());
|
||||
shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_85);
|
||||
Set<String> auditFranchiseFeeUsers = new HashSet<>();
|
||||
List<EnterpriseUserDO> branchUser = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.JOIN_OFFICE, shopInfoDO.getRegionId());
|
||||
if (Objects.nonNull(branchUser)) {
|
||||
Set<String> branchUserIds = branchUser.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toSet());
|
||||
auditFranchiseFeeUsers.addAll(branchUserIds);
|
||||
}
|
||||
List<EnterpriseUserDO> regionUser = userAuthMappingService.getAllUserByRoleEnumAndRegionId(REGION_OFFICE, shopInfoDO.getRegionId());
|
||||
if (Objects.nonNull(regionUser)) {
|
||||
Set<String> regionUserIds = regionUser.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toSet());
|
||||
auditFranchiseFeeUsers.addAll(regionUserIds);
|
||||
}
|
||||
requestMap.put("storeName", shopInfoDO.getShopName());
|
||||
requestMap.put("partnerName", lineInfo.getUsername());
|
||||
requestMap.put("partnerMobile", lineInfo.getMobile());
|
||||
requestMap.put("lineId", String.valueOf(lineInfo.getId()));
|
||||
requestMap.put("shopId", String.valueOf(shopInfoDO.getId()));
|
||||
commonService.sendMessage(new ArrayList<>(auditFranchiseFeeUsers), MessageEnum.MESSAGE_20, requestMap);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Boolean financeAuditApprove(AuditApproveRequest request, LoginUserInfo user) {
|
||||
log.info("SignFranchiseServiceImpl financeAuditApprove request:{}", JSONObject.toJSONString(request));
|
||||
Long shopId = request.getShopId();
|
||||
String lockKey = "financeAuditApprove:" + request.getShopId();
|
||||
//流水
|
||||
String lockValue = UUID.randomUUID().toString();
|
||||
boolean acquired = false;
|
||||
try {
|
||||
//10s过期
|
||||
acquired = redisUtilPool.setNxExpire(lockKey, lockValue, CommonConstants.TEN_SECONDS);
|
||||
@@ -460,30 +559,9 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
|
||||
//驳回
|
||||
ContractCallbackDTO contractCallbackDTO = null;
|
||||
if (Constants.ZERO_INTEGER.equals(request.getAuditResult())) {
|
||||
shopAuditInfoDO.setResultType(Constants.ONE_INTEGER);
|
||||
shopAuditInfoDO.setRejectReason(request.getCause());
|
||||
Map<String, String> requestMap = new HashMap<>();
|
||||
LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopInfoDO.getLineId());
|
||||
shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_85);
|
||||
Set<String> auditFranchiseFeeUsers = new HashSet<>();
|
||||
List<EnterpriseUserDO> branchUser = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.JOIN_OFFICE, shopInfoDO.getRegionId());
|
||||
if (Objects.nonNull(branchUser)) {
|
||||
Set<String> branchUserIds = branchUser.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toSet());
|
||||
auditFranchiseFeeUsers.addAll(branchUserIds);
|
||||
}
|
||||
List<EnterpriseUserDO> regionUser = userAuthMappingService.getAllUserByRoleEnumAndRegionId(REGION_OFFICE, shopInfoDO.getRegionId());
|
||||
if (Objects.nonNull(regionUser)) {
|
||||
Set<String> regionUserIds = regionUser.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toSet());
|
||||
auditFranchiseFeeUsers.addAll(regionUserIds);
|
||||
}
|
||||
requestMap.put("storeName", shopInfoDO.getShopName());
|
||||
requestMap.put("partnerName", lineInfo.getUsername());
|
||||
requestMap.put("partnerMobile", lineInfo.getMobile());
|
||||
requestMap.put("lineId", String.valueOf(lineInfo.getId()));
|
||||
requestMap.put("shopId", String.valueOf(shopInfoDO.getId()));
|
||||
commonService.sendMessage(new ArrayList<>(auditFranchiseFeeUsers), MessageEnum.MESSAGE_20, requestMap);
|
||||
auditReject(request, shopAuditInfoDO, shopInfoDO);
|
||||
} else if (Constants.ONE_INTEGER.equals(request.getAuditResult())) {
|
||||
log.info("合同审核,装修属性:{},加盟模式:{}",ShopDecorationAttributesEnum.getDescByCode(shopInfoDO.getShopDecorationAttributes()),
|
||||
log.info("合同审核,装修属性:{},加盟模式:{}", ShopDecorationAttributesEnum.getDescByCode(shopInfoDO.getShopDecorationAttributes()),
|
||||
JoinModeEnum.getByCode(shopInfoDO.getJoinMode()));
|
||||
if (shopInfoDO.getShopDecorationAttributes().equals(ShopDecorationAttributesEnum.OLD_NEW_OPEN.getCode())) {
|
||||
//老店新开时装修与开业直接完成
|
||||
@@ -491,7 +569,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
|
||||
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{
|
||||
} else {
|
||||
//,加盟公司自有店->加盟公司建店 不推送数据 再crm中完成
|
||||
//v2.0.0 先确认装修团队
|
||||
TeamAreaMappingDO city = teamAreaMappingDAO.getByCityId(shopInfoDO.getWantShopAreaId());
|
||||
@@ -512,7 +590,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
|
||||
shopDecorationAssignDO.setShopId(shopId);
|
||||
shopDecorationAssignDAO.insert(shopDecorationAssignDO);
|
||||
//新增一个延迟队列 四个小时之后确定是否手动分配 没有手动分配 直接自动分配 红圈通推送和下一个流程开始改为分配团队之后 触发
|
||||
simpleMessageService.send(String.valueOf(shopDecorationAssignDO.getId()), RocketMqTagEnum.DELAY_SHOP_DECORATION_ASSIGN,System.currentTimeMillis() + 4*60*60 * 1000);
|
||||
simpleMessageService.send(String.valueOf(shopDecorationAssignDO.getId()), RocketMqTagEnum.DELAY_SHOP_DECORATION_ASSIGN, System.currentTimeMillis() + 4 * 60 * 60 * 1000);
|
||||
}
|
||||
shopAuditInfoDO.setResultType(Constants.ZERO_INTEGER);
|
||||
shopAuditInfoDO.setPassReason(request.getCause());
|
||||
@@ -523,15 +601,15 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
|
||||
lineInfoMapper.insertOrUpdate(lineInfoDO);
|
||||
shopStageInfoDAO.updateShopStageInfo(shopId, SHOP_SUB_STAGE_STATUS_84);
|
||||
//初始化数据 如果是正新鸡排 需要手动分配 其他品牌直接开始 且将招商经理给到运营经理
|
||||
if (FranchiseBrandEnum.ZXJP.getCode()==Integer.valueOf(shopInfoDO.getFranchiseBrand())){
|
||||
log.info("zxjp_assign shopId:{}",shopId);
|
||||
if (FranchiseBrandEnum.ZXJP.getCode() == Integer.valueOf(shopInfoDO.getFranchiseBrand())) {
|
||||
log.info("zxjp_assign shopId:{}", shopId);
|
||||
//新增分配信息
|
||||
OperationsConsultantAssignDO operationsConsultantAssignDO = new OperationsConsultantAssignDO();
|
||||
operationsConsultantAssignDO.setShopId(shopId);
|
||||
operationsConsultantAssignDO.setAssignStatus(0);
|
||||
operationsConsultantAssignDO.setRegionId(shopInfoDO.getRegionId());
|
||||
operationsConsultantAssignDAO.addOperationsConsultantAssign(operationsConsultantAssignDO);
|
||||
}else {
|
||||
} else {
|
||||
//其他品牌直接开始 且将招商经理给到运营经理
|
||||
shopInfoDO.setOperationsConsultant(shopInfoDO.getInvestmentManager());
|
||||
shopInfoDAO.updateShopInfo(shopInfoDO);
|
||||
@@ -548,15 +626,6 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
|
||||
map.put("partnerUsername", lineInfoDO.getUsername());
|
||||
map.put("partnerMobile", lineInfoDO.getMobile());
|
||||
map.put("storeName", shopInfoDO.getShopName());
|
||||
List<EnterpriseUserDO> userDOList = userAuthMappingService.getAllUserByRoleEnumAndRegionId(UserRoleEnum.FINANCE, shopInfoDO.getRegionId());
|
||||
List<String> finances = new ArrayList<>();
|
||||
if (Objects.nonNull(userDOList)) {
|
||||
finances.addAll(userDOList.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toList()));
|
||||
}
|
||||
// List<String> liGuiNeiQinList = enterpriseUserRoleDao.selectUserIdsByRoleIdList(Arrays.asList(UserRoleEnum.CONSTRUCTION_CUSTOMER.getCode()));
|
||||
// commonService.sendQWMessage(liGuiNeiQinList,
|
||||
// MessageEnum.MESSAGE_57,
|
||||
// map);
|
||||
commonService.sendQWMessage(Collections.singletonList(shopInfoDO.getInvestmentManager()),
|
||||
MessageEnum.MESSAGE_26,
|
||||
map);
|
||||
@@ -564,13 +633,13 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu
|
||||
}
|
||||
shopAuditInfoMapper.insertSelective(shopAuditInfoDO);
|
||||
Long auditId = shopAuditInfoDO.getId();
|
||||
if (contractCallbackDTO!=null&&StringUtils.isNotEmpty(contractCallbackDTO.getStoreCode())){
|
||||
if (contractCallbackDTO != null && StringUtils.isNotEmpty(contractCallbackDTO.getStoreCode())) {
|
||||
shopInfoDO.setShopCode(contractCallbackDTO.getStoreCode());
|
||||
shopInfoMapper.updateByPrimaryKeySelective(shopInfoDO);
|
||||
}
|
||||
signFranchiseDAO.updateAuditByShopId(auditId, shopId,contractCallbackDTO);
|
||||
signFranchiseDAO.updateAuditByShopId(auditId, shopId, contractCallbackDTO);
|
||||
//审批记录表记录
|
||||
List<OperationLogDO> operationLogs = operationLogDAO.getBySubStageStatusEnumAndsStatus(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83, OperationTypeEnum.OPERATION_TYPE_1.getCode());
|
||||
List<OperationLogDO> operationLogs = operationLogDAO.getBySubStageStatusEnumAndsStatus(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83_5, OperationTypeEnum.OPERATION_TYPE_1.getCode());
|
||||
operationLogService.batchUpdateProcessed(operationLogs, auditId, user.getUserId(), request.getCause());
|
||||
return true;
|
||||
} else {
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.cool.store.service.plan;
|
||||
|
||||
import com.cool.store.request.plan.CityPlanningUpdateRequest;
|
||||
import com.cool.store.request.plan.CityPlanningQueryRequest;
|
||||
import com.cool.store.vo.plan.CityPlanningStatisticsVO;
|
||||
import com.cool.store.vo.plan.CityPlanningVO;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 城市规划服务接口
|
||||
*/
|
||||
public interface CityPlanningService {
|
||||
|
||||
/**
|
||||
* 新增城市规划
|
||||
* @param request 新增请求
|
||||
* @return 是否成功
|
||||
*/
|
||||
Boolean add(CityPlanningUpdateRequest request);
|
||||
|
||||
/**
|
||||
* 编辑城市规划
|
||||
* @param request 编辑请求
|
||||
* @return 是否成功
|
||||
*/
|
||||
Boolean update(CityPlanningUpdateRequest request);
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
* @param request 查询请求
|
||||
* @return 分页结果
|
||||
*/
|
||||
PageInfo<CityPlanningVO> queryPage(CityPlanningQueryRequest request);
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
* @param ids id列表
|
||||
* @return 是否成功
|
||||
*/
|
||||
Boolean deleteByIds(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 规划进度
|
||||
* @param request 查询请求
|
||||
* @return 分页结果
|
||||
*/
|
||||
PageInfo<CityPlanningVO> cityPlanningSchedule(CityPlanningQueryRequest request);
|
||||
|
||||
/**
|
||||
* 规划进度总计
|
||||
* @param request 查询请求
|
||||
* @return 规划进度统计VO
|
||||
*/
|
||||
CityPlanningStatisticsVO cityPlanningStatistics(CityPlanningQueryRequest request);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,161 @@
|
||||
package com.cool.store.service.plan.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollStreamUtil;
|
||||
import com.cool.store.context.CurrentUserHolder;
|
||||
import com.cool.store.dao.StoreDao;
|
||||
import com.cool.store.dao.ad.AdDistrictDAO;
|
||||
import com.cool.store.dao.plan.CityPlanningDAO;
|
||||
import com.cool.store.entity.plan.CityPlanningDO;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.request.plan.CityPlanningUpdateRequest;
|
||||
import com.cool.store.request.plan.CityPlanningQueryRequest;
|
||||
import com.cool.store.service.plan.CityPlanningService;
|
||||
import com.cool.store.utils.BeanUtil;
|
||||
import com.cool.store.vo.plan.CityPlanningStatisticsVO;
|
||||
import com.cool.store.vo.plan.CityPlanningVO;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* 城市规划服务实现类
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class CityPlanningServiceImpl implements CityPlanningService {
|
||||
private final CityPlanningDAO cityPlanningDAO;
|
||||
private final AdDistrictDAO adDistrictDAO;
|
||||
private final StoreDao storeDao;
|
||||
|
||||
private final static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
|
||||
|
||||
@Override
|
||||
public Boolean add(CityPlanningUpdateRequest request) {
|
||||
// 校验同年份同季度同省市不能存在2个规划
|
||||
if (cityPlanningDAO.existsByYearAndQuarterAndRegion(
|
||||
request.getYear(), request.getQuarter(),
|
||||
request.getProvinceCode(), request.getCityCode(), null)) {
|
||||
throw new ServiceException(ErrorCodeEnum.CITY_PLANNING_EXISTS);
|
||||
}
|
||||
|
||||
CityPlanningDO cityPlanningDO = BeanUtil.toBean(request, CityPlanningDO.class);
|
||||
cityPlanningDO.setPlanNo(generatePlanNo(request));
|
||||
cityPlanningDO.setCreateUserId(CurrentUserHolder.getUserId());
|
||||
return cityPlanningDAO.insertSelective(cityPlanningDO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean update(CityPlanningUpdateRequest request) {
|
||||
// 先查询是否存在
|
||||
CityPlanningDO existing = cityPlanningDAO.getById(request.getId());
|
||||
if (existing == null) {
|
||||
throw new ServiceException("规划不存在");
|
||||
}
|
||||
|
||||
// 校验同年份同季度同省市不能存在2个规划(排除自身)
|
||||
if (cityPlanningDAO.existsByYearAndQuarterAndRegion(
|
||||
request.getYear(), request.getQuarter(),
|
||||
request.getProvinceCode(), request.getCityCode(), request.getId())) {
|
||||
throw new ServiceException("同年份同季度同省市已存在其他规划,不能修改");
|
||||
}
|
||||
|
||||
CityPlanningDO cityPlanningDO = BeanUtil.toBean(request, CityPlanningDO.class);
|
||||
return cityPlanningDAO.updateSelective(cityPlanningDO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageInfo<CityPlanningVO> queryPage(CityPlanningQueryRequest request) {
|
||||
PageHelper.startPage(request.getPageNum(), request.getPageSize());
|
||||
List<CityPlanningDO> list = cityPlanningDAO.queryByCondition(request);
|
||||
PageInfo<CityPlanningDO> page = new PageInfo<>(list);
|
||||
PageInfo<CityPlanningVO> result = BeanUtil.toPage(page, CityPlanningVO.class);
|
||||
List<String> adCodes = list.stream()
|
||||
.flatMap(v -> Stream.of(v.getProvinceCode(), v.getCityCode()))
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
Map<String, String> adMap = adDistrictDAO.getNameByCodes(adCodes);
|
||||
result.getList().forEach(v -> {
|
||||
v.setProvince(adMap.get(v.getProvinceCode()));
|
||||
v.setCity(adMap.get(v.getCityCode()));
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean deleteByIds(List<Long> ids) {
|
||||
return cityPlanningDAO.deleteByIds(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageInfo<CityPlanningVO> cityPlanningSchedule(CityPlanningQueryRequest request) {
|
||||
PageHelper.startPage(request.getPageNum(), request.getPageSize());
|
||||
List<CityPlanningDO> list = cityPlanningDAO.queryByCondition(request);
|
||||
PageInfo<CityPlanningDO> page = new PageInfo<>(list);
|
||||
PageInfo<CityPlanningVO> result = BeanUtil.toPage(page, CityPlanningVO.class);
|
||||
List<String> adCodes = list.stream()
|
||||
.flatMap(v -> Stream.of(v.getProvinceCode(), v.getCityCode()))
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
Map<String, String> adMap = adDistrictDAO.getNameByCodes(adCodes);
|
||||
Set<Integer> years = CollStreamUtil.toSet(list, CityPlanningDO::getYear);
|
||||
Map<Integer, Map<Integer, Map<String, Map<String, Integer>>>> storeNumMap = storeDao.storeNumStatisticsByAd(new ArrayList<>(years), new ArrayList<>(adMap.values()));
|
||||
result.getList().forEach(v -> {
|
||||
v.setProvince(adMap.get(v.getProvinceCode()));
|
||||
v.setCity(adMap.get(v.getCityCode()));
|
||||
Integer completeNum = storeNumMap.getOrDefault(v.getYear(), Collections.emptyMap())
|
||||
.getOrDefault(v.getQuarter(), Collections.emptyMap())
|
||||
.getOrDefault(v.getProvince(), Collections.emptyMap())
|
||||
.getOrDefault(v.getCity(), 0);
|
||||
v.setCompleteNum(completeNum);
|
||||
BigDecimal rate = v.getTarget() != 0 ? BigDecimal.valueOf(completeNum)
|
||||
.multiply(BigDecimal.valueOf(100))
|
||||
.divide(BigDecimal.valueOf(v.getTarget()), 1, RoundingMode.HALF_UP) : BigDecimal.ZERO;
|
||||
v.setCompleteRate(rate);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CityPlanningStatisticsVO cityPlanningStatistics(CityPlanningQueryRequest request) {
|
||||
List<CityPlanningDO> list = cityPlanningDAO.queryByCondition(request);
|
||||
List<String> adCodes = list.stream()
|
||||
.flatMap(v -> Stream.of(v.getProvinceCode(), v.getCityCode()))
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
Map<String, String> adMap = adDistrictDAO.getNameByCodes(adCodes);
|
||||
Set<Integer> years = CollStreamUtil.toSet(list, CityPlanningDO::getYear);
|
||||
Map<Integer, Map<Integer, Map<String, Map<String, Integer>>>> storeNumMap = storeDao.storeNumStatisticsByAd(new ArrayList<>(years), new ArrayList<>(adMap.values()));
|
||||
int completeNum = 0, totalTarget = 0;
|
||||
for (CityPlanningDO v : list) {
|
||||
String province = adMap.get(v.getProvinceCode());
|
||||
String city = adMap.get(v.getCityCode());
|
||||
completeNum += storeNumMap.getOrDefault(v.getYear(), Collections.emptyMap())
|
||||
.getOrDefault(v.getQuarter(), Collections.emptyMap())
|
||||
.getOrDefault(province, Collections.emptyMap())
|
||||
.getOrDefault(city, 0);
|
||||
totalTarget += v.getTarget();
|
||||
}
|
||||
BigDecimal rate = totalTarget != 0 ? BigDecimal.valueOf(completeNum)
|
||||
.multiply(BigDecimal.valueOf(100))
|
||||
.divide(BigDecimal.valueOf(totalTarget), 1, RoundingMode.HALF_UP) : BigDecimal.ZERO;
|
||||
return new CityPlanningStatisticsVO(totalTarget, completeNum, rate);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成规划编码
|
||||
* 格式:CP + 年份 + 季度 + 序号
|
||||
*/
|
||||
private String generatePlanNo(CityPlanningUpdateRequest request) {
|
||||
return "GH" + request.getYear() + request.getQuarter() + request.getCityCode() + ((int) (Math.random() * 900) + 100);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user