Merge branch 'cc_20230520_partner' of http://gitlab.coolcollege.cn/hangzhou/java/coolstore-partner-manage into cc_20230520_partner

This commit is contained in:
俞扬
2023-06-14 10:42:02 +08:00
27 changed files with 467 additions and 31 deletions

View File

@@ -0,0 +1,19 @@
package com.cool.store.Service;
import com.cool.store.request.AddTagsRequest;
/**
* @Author suzhuhong
* @Date 2023/6/13 21:37
* @Version 1.0
*/
public interface HyPartnerBaseInfoService {
/**
* 添加标签
* @param addTagsRequest
* @return
*/
Boolean addTags(AddTagsRequest addTagsRequest);
}

View File

@@ -1,5 +1,6 @@
package com.cool.store.Service;
import com.cool.store.request.BaseUserInfoRequest;
import com.cool.store.vo.PartnerIntentApplyInfoVO;
import com.github.pagehelper.PageInfo;
@@ -28,4 +29,11 @@ public interface HyPartnerIntentInfoService {
*/
PartnerIntentApplyInfoVO getPartnerIntentApplyInfo(Long lineId);
/**
* 员工端 修改加盟商意向信息
* @param baseUserInfoRequest
* @return
*/
Boolean updatePartnerIntentInfo(BaseUserInfoRequest baseUserInfoRequest);
}

View File

@@ -1,5 +1,6 @@
package com.cool.store.Service;
import com.cool.store.request.CloseFollowRequest;
import com.cool.store.request.LineRequest;
import com.cool.store.vo.BlackListVO;
import com.cool.store.vo.PartnerLineInfoAndBaseInfoVO;
@@ -90,5 +91,13 @@ public interface HyPartnerLineInfoService {
*/
Boolean removeBlackList( Long lineId, Integer status, String removeReason);
/**
* 结束或者通过线索
* @param userId
* @param closeFollowRequest
* @return
*/
Boolean closeOrPassFollow(String userId,CloseFollowRequest closeFollowRequest);
}

View File

@@ -0,0 +1,32 @@
package com.cool.store.Service;
import com.cool.store.vo.OpenAreaTreeVO;
import com.cool.store.vo.OpenAreaVO;
import java.util.List;
/**
* @Author suzhuhong
* @Date 2023/6/13 22:11
* @Version 1.0
*/
public interface OpenAreaService {
/**
* 根据关键字搜索
* @param keyword
* @return
*/
List<OpenAreaTreeVO> queryByKeyword(String keyword);
/**
* 查询字列表
* @param type
* @param parentId
* @return
*/
List<OpenAreaVO> getChildrenList(String type, Long parentId);
}

View File

@@ -0,0 +1,33 @@
package com.cool.store.Service.impl;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.Service.HyPartnerBaseInfoService;
import com.cool.store.dao.HyPartnerBaseInfoDAO;
import com.cool.store.entity.HyPartnerBaseInfoDO;
import com.cool.store.request.AddTagsRequest;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collection;
/**
* @Author suzhuhong
* @Date 2023/6/13 21:37
* @Version 1.0
*/
@Service
public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService {
@Resource
HyPartnerBaseInfoDAO hyPartnerBaseInfoDAO;
@Override
public Boolean addTags(AddTagsRequest addTagsRequest) {
HyPartnerBaseInfoDO hyPartnerBaseInfoDO = new HyPartnerBaseInfoDO();
hyPartnerBaseInfoDO.setId(addTagsRequest.getPartnerBaseInfoId());
hyPartnerBaseInfoDO.setUserPortrait(CollectionUtils.isNotEmpty(addTagsRequest.getTags())? JSONObject.toJSONString(addTagsRequest.getTags()):"");
hyPartnerBaseInfoDAO.updateByPrimaryKeySelective(hyPartnerBaseInfoDO);
return Boolean.TRUE;
}
}

View File

@@ -2,6 +2,7 @@ package com.cool.store.Service.impl;
import com.cool.store.Service.HyPartnerIntentInfoService;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dao.HyPartnerBaseInfoDAO;
import com.cool.store.dao.HyPartnerIntentInfoDAO;
import com.cool.store.dao.HyPartnerLineInfoDAO;
import com.cool.store.dao.HyPartnerUserInfoDAO;
@@ -13,6 +14,8 @@ import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.enums.WorkflowStageEnum;
import com.cool.store.enums.WorkflowStatusEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.mapper.HyPartnerBaseInfoMapper;
import com.cool.store.request.BaseUserInfoRequest;
import com.cool.store.vo.PartnerIntentApplyInfoVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@@ -39,6 +42,8 @@ public class HyPartnerIntentInfoServiceImpl implements HyPartnerIntentInfoServic
HyPartnerUserInfoDAO hyPartnerUserInfoDAO;
@Resource
HyPartnerLineInfoDAO hyPartnerLineInfoDAO;
@Resource
HyPartnerBaseInfoDAO hyPartnerBaseInfoDAO;
@Override
public PageInfo<PartnerIntentApplyInfoVO> getPartnerIntentApplyList(String userId, String type, Integer pageSize, Integer pageNumber) {
@@ -82,6 +87,24 @@ public class HyPartnerIntentInfoServiceImpl implements HyPartnerIntentInfoServic
return partnerIntentApplyInfoVO;
}
@Override
public Boolean updatePartnerIntentInfo(BaseUserInfoRequest baseUserInfoRequest) {
HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(String.valueOf(baseUserInfoRequest.getPartnerId()));
if (hyPartnerUserInfoDO==null){
throw new ServiceException(ErrorCodeEnum.PARTNER_USER_NOT_EXIST);
}
hyPartnerUserInfoDO.setUsername(baseUserInfoRequest.getUsername());
hyPartnerUserInfoDO.setMobile(baseUserInfoRequest.getMobile());
hyPartnerUserInfoDO.setLiveArea(baseUserInfoRequest.getLiveArea());
hyPartnerUserInfoDO.setWantShopArea(baseUserInfoRequest.getWantShopArea());
hyPartnerUserInfoDO.setAcceptAdjustType(baseUserInfoRequest.getAcceptAdjustType());
hyPartnerUserInfoDAO.updateByPrimaryKeySelective(hyPartnerUserInfoDO);
//修改意向申请信息中的加盟商名称与手机号
hyPartnerBaseInfoDAO.updateByPartnerId(baseUserInfoRequest.getUsername(),baseUserInfoRequest.getMobile(),baseUserInfoRequest.getPartnerId());
return Boolean.TRUE;
}
/**
* partnerIntentApplyInfoDTOToVo
* @param partnerIntentApplyInfoDTO

View File

@@ -1,6 +1,8 @@
package com.cool.store.Service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPObject;
import com.cool.store.Service.HyPartnerLineInfoService;
import com.cool.store.dao.HyPartnerLineInfoDAO;
import com.cool.store.dao.HyPartnerUserInfoDAO;
@@ -14,6 +16,7 @@ import com.cool.store.enums.LineStatusEnum;
import com.cool.store.enums.WorkflowStageEnum;
import com.cool.store.enums.WorkflowStatusEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.request.CloseFollowRequest;
import com.cool.store.request.LineRequest;
import com.cool.store.utils.CoolDateUtils;
import com.cool.store.utils.StringUtil;
@@ -23,11 +26,16 @@ import com.cool.store.vo.PartnerLineInfoVO;
import com.cool.store.vo.StageCountVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.google.gson.JsonObject;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -188,7 +196,44 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
return Boolean.TRUE;
}
@Override
public Boolean closeOrPassFollow(String userId,CloseFollowRequest closeFollowRequest) {
HyPartnerLineInfoDO hyPartnerLineInfoDO = hyPartnerLineInfoDAO.selectByPrimaryKeySelective(closeFollowRequest.getLineId());
if (hyPartnerLineInfoDO==null){
throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST);
}
if (WorkflowStageEnum.INTENT.getCode().equals(hyPartnerLineInfoDO.getWorkflowStage())){
throw new ServiceException(ErrorCodeEnum.WORK_FLOW_STAGE_PASS_ERROR);
}
//通过
if ("pass".equals(closeFollowRequest.getType())){
hyPartnerLineInfoDO.setWorkflowStage(WorkflowStageEnum.RESERVATION.getCode());
hyPartnerLineInfoDO.setWorkflowStatus(WorkflowStatusEnum.RESERVATION_0.getCode());
hyPartnerLineInfoDO.setDeadline(CoolDateUtils.getDateFormatDay(2));
hyPartnerLineInfoDO.setPassReason(closeFollowRequest.getPassReason());
if (CollectionUtils.isNotEmpty(closeFollowRequest.getCertifyFile())){
hyPartnerLineInfoDO.setCertifyFile(JSONObject.toJSONString(closeFollowRequest.getCertifyFile()));
}
}
//拒绝
if ("reject".equals(closeFollowRequest.getType())){
//当前节点 拒绝的子状态
String workflowStatus = WorkflowStageEnum.getWorkflowStageMap().get(hyPartnerLineInfoDO.getWorkflowStage());
hyPartnerLineInfoDO.setWorkflowStatus(workflowStatus);
//15天 冷静期
// TODO: 2023/6/13 冷静期
hyPartnerLineInfoDO.setDeadline(CoolDateUtils.getDateBefore(new Date(),15));
hyPartnerLineInfoDO.setRejectPublicReason(closeFollowRequest.getRejectPublicReason());
hyPartnerLineInfoDO.setRejectRealReason(closeFollowRequest.getRejectRealReason());
if (CollectionUtils.isNotEmpty(closeFollowRequest.getCertifyFile())){
hyPartnerLineInfoDO.setCertifyFile(JSONObject.toJSONString(closeFollowRequest.getCertifyFile()));
}
hyPartnerLineInfoDO.setLineStatus(LineStatusEnum.PUBLIC_SEAS.getCode());
}
hyPartnerLineInfoDAO.updateByPrimaryKeySelective(hyPartnerLineInfoDO);
return Boolean.TRUE;
}
/**
* convertPartnerBlackListDTOToVo
* @param partnerBlackListDTO
@@ -221,6 +266,7 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
partnerLineInfoAndBaseInfoVO.setPartnerUserId(partnerLineInfoAndBaseInfoDTO.getPartnerId());
partnerLineInfoAndBaseInfoVO.setInvestmentManager(partnerLineInfoAndBaseInfoDTO.getInvestmentManager());
partnerLineInfoAndBaseInfoVO.setUserPortrait(partnerLineInfoAndBaseInfoDTO.getUserPortrait());
partnerLineInfoAndBaseInfoVO.setPartnerBaseInfoId(partnerLineInfoAndBaseInfoDTO.getPartnerBaseInfoId());
partnerLineInfoAndBaseInfoVO.setWorkflowStage(partnerLineInfoAndBaseInfoDTO.getWorkflowStage());
partnerLineInfoAndBaseInfoVO.setWorkflowStatus(partnerLineInfoAndBaseInfoDTO.getWorkflowStatus());
return partnerLineInfoAndBaseInfoVO;

View File

@@ -0,0 +1,137 @@
package com.cool.store.Service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.Service.OpenAreaService;
import com.cool.store.dao.HyOpenAreaInfoDAO;
import com.cool.store.entity.HyOpenAreaInfoDO;
import com.cool.store.vo.OpenAreaTreeVO;
import com.cool.store.vo.OpenAreaVO;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author suzhuhong
* @Date 2023/6/13 22:11
* @Version 1.0
*/
@Service
public class OpenAreaServiceImpl implements OpenAreaService {
@Resource
HyOpenAreaInfoDAO hyOpenAreaInfoDAO;
@Override
public List<OpenAreaTreeVO> queryByKeyword(String keyword) {
//先查出所有的一级菜单
List<HyOpenAreaInfoDO> openArea = hyOpenAreaInfoDAO.queryFirstLevel();
Map<Long, HyOpenAreaInfoDO> longHyOpenAreaInfoDOMap = openArea.stream().collect(Collectors.toMap(HyOpenAreaInfoDO::getId, x -> x));
//查询关键字下所有的数据 原始的数据
List<HyOpenAreaInfoDO> hyOpenAreaInfoDOS = hyOpenAreaInfoDAO.queryByKeyword(keyword,Boolean.TRUE);
Set<Long> longSet = hyOpenAreaInfoDOS.stream().map(HyOpenAreaInfoDO::getId).collect(Collectors.toSet());
hyOpenAreaInfoDOS.stream().forEach(x->{
Long parentId = x.getParentId();
if (parentId!=null&&!longSet.contains(parentId)){
//添加到集合中
longSet.add(x.getParentId());
HyOpenAreaInfoDO hyOpenAreaInfoDO = longHyOpenAreaInfoDOMap.get(parentId);
hyOpenAreaInfoDOS.add(hyOpenAreaInfoDO);
}
});
JSONArray objects = buildTree(JSONArray.parseArray(JSONObject.toJSONString(hyOpenAreaInfoDOS)), "id", "parentId","childNode" );
List<OpenAreaTreeVO> openAreaTreeVOS = JSONObject.parseArray(objects.toJSONString(), OpenAreaTreeVO.class);
return openAreaTreeVOS;
}
@Override
public List<OpenAreaVO> getChildrenList(String type, Long parentId) {
List<HyOpenAreaInfoDO> childrenList = hyOpenAreaInfoDAO.getChildrenList(type, parentId);
List<OpenAreaVO> result = new ArrayList<>();
childrenList.stream().forEach(x->{
OpenAreaVO openAreaVO = convertDoToVo(x);
result.add(openAreaVO);
});
return result;
}
private OpenAreaVO convertDoToVo(HyOpenAreaInfoDO hyOpenAreaInfoDO){
OpenAreaVO openAreaVO = new OpenAreaVO();
openAreaVO.setId(hyOpenAreaInfoDO.getId());
openAreaVO.setAreaName(hyOpenAreaInfoDO.getAreaName());
openAreaVO.setParentId(hyOpenAreaInfoDO.getParentId());
openAreaVO.setAreaPath(hyOpenAreaInfoDO.getAreaPath());
openAreaVO.setAreaStatus(hyOpenAreaInfoDO.getAreaStatus());
openAreaVO.setBackgroundBanner(hyOpenAreaInfoDO.getBackgroundBanner());
openAreaVO.setDetailBanner(hyOpenAreaInfoDO.getDetailBanner());
return openAreaVO;
}
/**
* 构建树
* @param arr
* @param id
* @param pid
* @param child
* @return
*/
public static JSONArray buildTree(JSONArray arr, String id, String pid, String child) {
//新建一个JSONArray来接收组装成树形结构的返回值
JSONArray jsonArray = new JSONArray();
//新建一个JSONObject对象
JSONObject hash = new JSONObject();
//将数组转换为object格式
for (int i = 0; i < arr.size(); i++) {
//获取当前的JSON对象
JSONObject json = (JSONObject) arr.get(i);
//把当前id作为键当前JSON对象作为值 put回hash这个Object对象中
//这里的put方法类似于map的put方法
hash.put(json.getString(id), json);
}
//遍历结果集
for (int j = 0; j < arr.size(); j++) {
//单条记录
JSONObject aVal = (JSONObject) arr.get(j);
//在hash中取出key为单条记录中pid的值
String pidStr = "";
//如果父级id不等于null
if (aVal.get(pid) != null) {
pidStr = aVal.get(pid).toString();
}
//从hash这个对象中获取父级对象 parent
JSONObject hashParent = (JSONObject) hash.get(pidStr);
//如果记录的pid存在则说明它有父节点将她添加到孩子节点的集合中
if (hashParent != null) {
//检查是否有child属性
if (hashParent.get(child) != null) {
//有子节点 则先将子节点取出
JSONArray children = (JSONArray) hashParent.get(child);
//然后把当前这个对象放进子节点之中
children.add(aVal);
//最后把子节点在放回父节点之中
hashParent.put(child, children);
} else {
//无子节点 则新建一个子节点
JSONArray children = new JSONArray();
//然后再把当前对象放进去
children.add(aVal);
//最后在放回父节点之中
hashParent.put(child, children);
}
} else {
jsonArray.add(aVal);
}
}
return jsonArray;
}
}

View File

@@ -1,9 +1,6 @@
package com.cool.store.controller;
import com.cool.store.Service.DeskService;
import com.cool.store.Service.HyPartnerIntentInfoService;
import com.cool.store.Service.HyPartnerInterviewPlanService;
import com.cool.store.Service.HyPartnerLineInfoService;
import com.cool.store.Service.*;
import com.cool.store.enums.LineStatusEnum;
import com.cool.store.request.*;
import com.cool.store.response.ResponseResult;
@@ -36,6 +33,10 @@ public class DeskController {
HyPartnerInterviewPlanService hyPartnerInterviewPlanService;
@Resource
HyPartnerLineInfoService hyPartnerLineInfoService;
@Resource
HyPartnerBaseInfoService hyPartnerBaseInfoService;
@Resource
OpenAreaService openAreaService;
@GetMapping(path = "/interviewSchedule")
@@ -222,25 +223,23 @@ public class DeskController {
@PostMapping(path = "/closeOrPassFollow")
@ApiOperation("意向申请审核 结束跟进/通过流程")
public ResponseResult<Boolean> closeFollow(@RequestBody CloseFollowRequest closeFollowRequest){
public ResponseResult<Boolean> closeOrPassFollow(@RequestBody CloseFollowRequest closeFollowRequest){
return ResponseResult.success();
String userId = "";
return ResponseResult.success(hyPartnerLineInfoService.closeOrPassFollow(userId,closeFollowRequest));
}
@PostMapping(path = "/changeIntentInfo")
@ApiOperation("员工端变更C端用户意向信息")
public ResponseResult<Boolean> changeIntentInfo( @RequestBody BaseUserInfoRequest baseUserInfoRequest){
return ResponseResult.success();
return ResponseResult.success(hyPartnerIntentInfoService.updatePartnerIntentInfo(baseUserInfoRequest));
}
@PostMapping(path = "/addTags")
@ApiOperation("添加标签接口")
public ResponseResult<Boolean> addTags(@RequestBody AddTagsRequest addTagsRequest){
return ResponseResult.success();
return ResponseResult.success(hyPartnerBaseInfoService.addTags(addTagsRequest));
}
@@ -258,16 +257,25 @@ public class DeskController {
@GetMapping(path = "/getOpenAreaTree")
@ApiOperation("开放城市树")
@ApiOperation("开放城市树-搜索城市")
@ApiImplicitParams({
@ApiImplicitParam(name = "parentId", value = "父区域名称", required = false),
@ApiImplicitParam(name = "type", value = "可预约-reservation 可申请-apply ", required = false),
@ApiImplicitParam(name = "keyWord", value = "搜索关键字", required = false)
})
public ResponseResult<List<OpenAreaVO>> getOpenAreaTree(@RequestParam(value = "parentId",required = false)Long parentId,
@RequestParam(value = "type",required = false)String type,
@RequestParam(value = "keyWord",required = false)String keyWord){
return ResponseResult.success();
public ResponseResult<List<OpenAreaTreeVO>> getOpenAreaTree(@RequestParam(value = "keyWord",required = false)String keyWord){
return ResponseResult.success(openAreaService.queryByKeyword(keyWord));
}
@GetMapping(path = "/getOpenAreaList")
@ApiOperation("开放城市树-子列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "parentId", value = "父区域名称", required = false),
@ApiImplicitParam(name = "type", value = "可预约-reservation 可申请-apply ", required = false)
})
public ResponseResult<List<OpenAreaVO>> getOpenAreaList(@RequestParam(value = "parentId",required = false)Long parentId,
@RequestParam(value = "type",required = false)String type){
return ResponseResult.success(openAreaService.getChildrenList(type,parentId));
}