Merge #40 into master from cc_20251208_visit

fix:新老加盟商判断逻辑修复;统计接口新增筛选条件

* cc_20251208_visit: (25 commits squashed)

  - feat:拜访记录

  - fix:拜访详情接口新增字段

  - fix:新增状态转义字段

  - fix:惩处单查询提供惩处待处理、惩处已处理状态筛选

  - fix

  - fix:管理员能查看所有加盟商

  - fix:去掉部分字段非空校验

  - fix:空校验

  - Merge branch 'master' into cc_20251208_visit
    
    # Conflicts:
    #	coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java
    #	coolstore-partner-dao/src/main/java/com/cool/store/dao/store/StoreMasterSignerInfoDAO.java
    #	coolstore-partner-service/src/main/java/com/cool/store/service/impl/UserAuthMappingServiceImpl.java

  - fix

  - fix:拜访记录失效延时消息

  - fix:拜访记录统计

  - fix:拜访记录统计新增筛选条件

  - fix:字段转义

  - feat:拜访调整

  - feat:拜访调整_过滤我的

  - feat:拜访调整_过滤我的

  - feat:拜访字段调整

  - feat:拜访字段调整

  - Merge branch 'master' into cc_20251208_visit

  - fix:拜访我的加盟商取消管辖权限过滤

  - Merge branch 'master' into cc_20251208_visit

  - fix:新增已分配招商经理的线索查询接口;拜访记录列表接口新增字段

  - fix:新增字段

  - fix:新老加盟商判断逻辑修复;统计接口新增筛选条件

Signed-off-by: 王非凡 <accounts_67eba0c5fee9c49c80c8e2b4@mail.teambition.com>
Merged-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>

CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/40
This commit is contained in:
王非凡
2026-02-04 09:59:43 +00:00
committed by 正新
parent d3a331798c
commit 2e5d661b85
12 changed files with 117 additions and 8 deletions

View File

@@ -208,6 +208,13 @@ public class LineInfoDAO {
return lineInfoMapper.getLinesByKeyword(keyword);
}
/**
* 查询已分配招商经理的所有线索
*/
public List<LineVO> getLinesAssignInvestManager(String keyword) {
return lineInfoMapper.getLinesAssignInvestManager(keyword);
}
public List<LineInfoDO> getByLineIds(List<Long> lineIds){
if (CollectionUtils.isEmpty(lineIds)){
return Lists.newArrayList();

View File

@@ -135,4 +135,8 @@ public interface LineInfoMapper extends Mapper<LineInfoDO> {
List<LineVO> getLinesByKeyword(@Param("keyword") String keyword);
/**
* 查询已分配招商经理的所有线索
*/
List<LineVO> getLinesAssignInvestManager(@Param("keyword") String keyword);
}

View File

@@ -650,6 +650,21 @@
order by id desc
</select>
<select id="getLinesAssignInvestManager" resultType="com.cool.store.vo.LineVO">
select
id as lineId,
username,
mobile
from xfsg_line_info
<where>
<if test="keyword != null and keyword != ''">
and (mobile like CONCAT('%', #{keyword} ,'%')
or username like CONCAT('%', #{keyword} ,'%'))
</if>
</where>
order by id desc
</select>
<update id="batchUpdateInvestmentManager">
update xfsg_line_info set line_status = #{status} , investment_manager = #{investmentManager} ,region_id = #{regionId},invest_region_id = #{investRegionId} where id in

View File

@@ -62,7 +62,7 @@
<select id="getVisitRecordList" resultType="com.cool.store.vo.visit.VisitRecordListVO">
SELECT a.id, a.line_id, a.visit_no, a.visit_date, a.sign_in_address, a.desire, a.desire_city,
a.desire_district, a.existing_shop_point, a.photos, a.status,
b.username name, b.mobile,a.user_id as visitUserId
b.username name, b.mobile,a.user_id as visitUserId, b.invest_region_id, b.investment_manager
FROM zxjp_visit_record a
INNER JOIN xfsg_line_info b ON a.line_id = b.id AND b.deleted = 0
<where>
@@ -90,6 +90,12 @@
<if test="request.userId != null">
AND a.user_id = #{request.userId}
</if>
<if test="request.desire != null and request.desire != ''">
AND a.desire = #{request.desire}
</if>
<if test="request.investRegionId != null">
AND b.invest_region_id = #{request.investRegionId}
</if>
</where>
ORDER BY a.create_time DESC
</select>
@@ -165,6 +171,12 @@
<if test="request.userId != null">
AND a.user_id = #{request.userId}
</if>
<if test="request.desire != null and request.desire != ''">
AND a.desire = #{request.desire}
</if>
<if test="request.investRegionId != null">
AND b.invest_region_id = #{request.investRegionId}
</if>
</where>
</select>
</mapper>

View File

@@ -36,6 +36,12 @@ public class VisitRecordQueryRequest extends PageBasicInfo {
@ApiModelProperty("拜访状态0待签到 1待签退 2已完成 3已失效")
private Integer status;
@ApiModelProperty("开新店意愿")
private String desire;
@ApiModelProperty("招商所属大区ID")
private Long investRegionId;
@ApiModelProperty(value = "拜访人id", hidden = true)
private String userId;

View File

@@ -33,4 +33,10 @@ public class VisitPartnerListVO {
@ApiModelProperty("新老加盟商0新 1老")
private Integer isVeteran;
@ApiModelProperty("招商所属大区名称")
private String investRegionName;
@ApiModelProperty("招商经理名称")
private String investmentManagerName;
}

View File

@@ -93,6 +93,12 @@ public class VisitRecordDetailVO {
@ApiModelProperty("拜访人名称")
private String userName;
@ApiModelProperty("招商所属大区名称")
private String investRegionName;
@ApiModelProperty("招商经理名称")
private String investmentManagerName;
public String getStatusName() {
return VisitStatusEnum.getDescByStatus(status);
}

View File

@@ -1,5 +1,6 @@
package com.cool.store.vo.visit;
import com.cool.store.annotation.DictField;
import com.cool.store.enums.visit.VisitStatusEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -40,6 +41,10 @@ public class VisitRecordListVO {
@ApiModelProperty("开新店意愿")
private String desire;
@ApiModelProperty("开新店意愿名称")
@DictField
private String desireName;
@ApiModelProperty("意向开店城市")
private String desireCity;
@@ -73,6 +78,18 @@ public class VisitRecordListVO {
@ApiModelProperty("拜访人")
private String visitUserName;
@ApiModelProperty("招商所属大区ID")
private Long investRegionId;
@ApiModelProperty("招商所属大区名称")
private String investRegionName;
@ApiModelProperty("招商经理")
public String investmentManager;
@ApiModelProperty("招商经理名称")
private String investmentManagerName;
public String getStatusName() {
return VisitStatusEnum.getDescByStatus(status);
}

View File

@@ -101,6 +101,11 @@ public interface LineService {
//增加查询资质审核的意向加盟商或正式加盟商搜索范围为全部
PageInfo<LineVO> getLines(LinesRequest request);
/**
* 查询已分配招商经理的所有线索
*/
PageInfo<LineVO> getLinesAssignInvestManager(LinesRequest request);
/**
* @Auther: wangshuo

View File

@@ -647,6 +647,13 @@ public class LineServiceImpl implements LineService {
return pageInfo;
}
@Override
public PageInfo<LineVO> getLinesAssignInvestManager(LinesRequest request) {
PageHelper.startPage(request.getPageNum(), request.getPageSize());
List<LineVO> lines = lineInfoDAO.getLinesAssignInvestManager(request.getKeyword());
return new PageInfo<>(lines);
}
@Override
public Integer updatePartnerName(String username, Long lineId) {
LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId);

View File

@@ -10,6 +10,7 @@ import com.cool.store.dao.visit.VisitRecordDAO;
import com.cool.store.dto.region.BigRegionDTO;
import com.cool.store.entity.LineInfoDO;
import com.cool.store.entity.QualificationsInfoDO;
import com.cool.store.entity.RegionDO;
import com.cool.store.entity.StoreDO;
import com.cool.store.entity.store.StoreMasterSignerInfoDO;
import com.cool.store.entity.visit.VisitRecordDO;
@@ -59,6 +60,7 @@ public class VisitRecordServiceImpl implements VisitRecordService {
private final SimpleMessageService simpleMessageService;
private final AdDistrictDAO adDistrictDAO;
private final EnterpriseUserDAO enterpriseUserDAO;
private final RegionDao regionDao;
@Override
public String signIn(VisitSignInRequest request) {
@@ -129,6 +131,11 @@ public class VisitRecordServiceImpl implements VisitRecordService {
List<LineInfoDO> lineList = lineInfoDAO.getByLineIds(lineIds);
Map<Long, LineInfoDO> lineMap = CollStreamUtil.toMap(lineList, LineInfoDO::getId, v -> v);
Map<Long, Integer> storeNumMap = getStoreNumMap(lineIds);
Set<String> investmentManagerIds = CollStreamUtil.toSet(lineList, LineInfoDO::getInvestmentManager);
Set<Long> investRegionIds = CollStreamUtil.toSet(lineList, LineInfoDO::getInvestRegionId);
Map<String, String> userNameMap = enterpriseUserDAO.getUserNameMap(new ArrayList<>(investmentManagerIds));
Map<Long, String> regionNameMap = regionDao.getRegionNameMap(new ArrayList<>(investRegionIds));
list.forEach(v -> {
v.setOpenNum(storeNumMap.getOrDefault(v.getLineId(), 0));
v.setIsVeteran(v.getOpenNum() > 0 ? 1 : 0);
@@ -136,6 +143,8 @@ public class VisitRecordServiceImpl implements VisitRecordService {
if (Objects.nonNull(lineInfoDO)) {
v.setName(lineInfoDO.getUsername());
v.setMobile(lineInfoDO.getMobile());
v.setInvestmentManagerName(userNameMap.get(lineInfoDO.getInvestmentManager()));
v.setInvestRegionName(regionNameMap.get(lineInfoDO.getInvestRegionId()));
}
});
return result;
@@ -157,6 +166,7 @@ public class VisitRecordServiceImpl implements VisitRecordService {
storeNumMap.compute(signerInfoDO.getSigner2IdCardNo(), (k, v) -> Objects.isNull(v) ? 1 : v + 1);
}
}
storeNumMap.remove(null);
return CollStreamUtil.toMap(lineIds, v -> v, v -> storeNumMap.getOrDefault(idCardMap.get(v), 0));
}
@@ -198,6 +208,11 @@ public class VisitRecordServiceImpl implements VisitRecordService {
if (Objects.nonNull(lineInfo)) {
vo.setName(lineInfo.getUsername());
vo.setMobile(lineInfo.getMobile());
vo.setInvestmentManagerName(enterpriseUserDAO.getUserName(lineInfo.getInvestmentManager()));
RegionDO investRegion = regionDao.getRegionById(lineInfo.getInvestRegionId());
if (Objects.nonNull(investRegion)) {
vo.setInvestRegionName(investRegion.getName());
}
}
if (StringUtils.isNotBlank(record.getUserId())){
String userName = enterpriseUserDAO.getUserName(record.getUserId());
@@ -230,24 +245,27 @@ public class VisitRecordServiceImpl implements VisitRecordService {
List<VisitRecordListVO> list = visitRecordDAO.getVisitRecordList(request);
PageInfo<VisitRecordListVO> page = new PageInfo<>(list);
Set<Long> lineIds = CollStreamUtil.toSet(list, VisitRecordListVO::getLineId);
Set<String> userIdList = CollStreamUtil.toSet(list, VisitRecordListVO::getVisitUserId);
Map<String, String> userNameMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(userIdList)){
userNameMap = enterpriseUserDAO.getUserNameMap(new ArrayList<>(userIdList));
}
Set<String> userIdList = list.stream()
.flatMap(v -> Stream.of(v.getVisitUserId(), v.getInvestmentManager()))
.collect(Collectors.toSet());
Set<Long> regionIds = CollStreamUtil.toSet(list, VisitRecordListVO::getInvestRegionId);
Map<String, String> userNameMap = enterpriseUserDAO.getUserNameMap(new ArrayList<>(userIdList));
Map<Long, String> regionNameMap = regionDao.getRegionNameMap(new ArrayList<>(regionIds));
List<String> adCodes = list.stream()
.flatMap(v -> Stream.of(v.getDesireCity(), v.getDesireDistrict()))
.distinct()
.collect(Collectors.toList());
Map<String, String> adNameMap = adDistrictDAO.getNameByCodes(adCodes);
Map<Long, Integer> storeNumMap = getStoreNumMap(new ArrayList<>(lineIds));
Map<String, String> finalUserNameMap = userNameMap;
list.forEach(v -> {
v.setIsVeteran(storeNumMap.getOrDefault(v.getLineId(), 0) > 0 ? 1 : 0);
v.setDesireCityName(adNameMap.get(v.getDesireCity()));
v.setDesireDistrictName(adNameMap.get(v.getDesireDistrict()));
v.setVisitUserName(finalUserNameMap.get(v.getVisitUserId()));
v.setVisitUserName(userNameMap.get(v.getVisitUserId()));
v.setInvestRegionName(regionNameMap.get(v.getInvestRegionId()));
v.setInvestmentManagerName(userNameMap.get(v.getInvestmentManager()));
});
dictService.fillDictField(list);
return page;
}

View File

@@ -180,6 +180,12 @@ public class LineInfoController {
return ResponseResult.success(lineService.getLines(request));
}
@ApiOperation("查询已分配招商经理的所有线索")
@PostMapping("/getLinesAssignInvest")
public ResponseResult<PageInfo<LineVO>> getLinesAssignInvestManager(@RequestBody LinesRequest request) {
return ResponseResult.success(lineService.getLinesAssignInvestManager(request));
}
@ApiOperation("修改所属大区/分公司")
@GetMapping("/updateLineRegion")
public ResponseResult<Integer> updateLineRegion(@RequestParam("regionId")Long regionId,