客户管理-支持多区域

This commit is contained in:
大米 2025-03-03 18:39:50 +08:00
parent e99b00fa89
commit e843fde8c9
7 changed files with 102 additions and 23 deletions

View File

@ -8,11 +8,13 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.mobilebroken.admin.annotation.ApiMark;
import com.nflg.mobilebroken.admin.constant.Constant;
import com.nflg.mobilebroken.admin.pojo.dto.CustomerAreaDTO;
import com.nflg.mobilebroken.admin.pojo.dto.CustomerDTO;
import com.nflg.mobilebroken.admin.pojo.dto.SyncFromCrmDTO;
import com.nflg.mobilebroken.admin.pojo.query.CustomerQuery;
import com.nflg.mobilebroken.admin.pojo.vo.ComstomerImportTemplate;
import com.nflg.mobilebroken.admin.pojo.vo.CustomerExcelVO;
import com.nflg.mobilebroken.admin.pojo.vo.TBaseCustomerListVO;
import com.nflg.mobilebroken.admin.service.AdminCustomerService;
import com.nflg.mobilebroken.common.constant.STATE;
import com.nflg.mobilebroken.common.exception.NflgException;
@ -23,8 +25,10 @@ import com.nflg.mobilebroken.common.util.EecExcelUtil;
import com.nflg.mobilebroken.common.util.UniqueSequenceGenerator;
import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.AppUser;
import com.nflg.mobilebroken.repository.entity.TBaseArea;
import com.nflg.mobilebroken.repository.entity.TBaseCustomer;
import com.nflg.mobilebroken.repository.service.IAppUserService;
import com.nflg.mobilebroken.repository.service.ITBaseAreaService;
import com.nflg.mobilebroken.repository.service.ITBaseCustomerService;
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
import org.springframework.web.bind.annotation.*;
@ -57,13 +61,22 @@ public class CustomerController extends ControllerBase {
@Resource
IAppUserService appUserService;
@Resource
ITBaseAreaService areaService;
@PostMapping("getList")
@ApiMark(moduleName = "客户管理", apiName = "获取客户列表")
public ApiResult<PageData<TBaseCustomer>> getList(@RequestBody CustomerQuery query){
public ApiResult<PageData<TBaseCustomerListVO>> getList(@RequestBody CustomerQuery query){
Page<TBaseCustomer> result = baseCustomerService.getList(new Page<>(query.getPage(),query.getPageSize()), query);
return ApiResult.success(result.getRecords(),query,result.getTotal());
List<TBaseCustomerListVO> resultData=Convert.toList(TBaseCustomerListVO.class, result.getRecords());
resultData.forEach(u->{
if(StrUtil.isNotBlank(u.getAreaCode())){
List<TBaseArea> areaList = areaService.lambdaQuery().in(TBaseArea::getAreaCode, StrUtil.split(u.getAreaCode(), ",")).list();
u.setAreaList(Convert.toList(CustomerAreaDTO.class, areaList));
}
});
return ApiResult.success(resultData,query,result.getTotal());
}
@ -79,15 +92,18 @@ public class CustomerController extends ControllerBase {
//检查公司名称是否已存在
List<TBaseCustomer> existCompany = baseCustomerService.lambdaQuery().eq(TBaseCustomer::getAgencyCompanyName, customerDTO.getAgencyCompanyName()).list();
VUtils.trueThrow(CollUtil.isNotEmpty(existCompany)).throwMessage(STATE.PageError,customerDTO.getAgencyCompanyName()+"公司名称已存在");
VUtils.trueThrow(CollUtil.isEmpty(customerDTO.getAreaList())).throwMessage(STATE.ParamErr,"公司区域不能为空");
TBaseCustomer ent = Convert.convert(TBaseCustomer.class, customerDTO);
ent.setId(null);
ent.setAgencyCompanyCode(UniqueSequenceGenerator.generateCode(Constant.CustomerCodePrefix));
ent.setAreaCode(StrUtil.join(",", customerDTO.getAreaList().stream().map(u->u.getAreaCode()).collect(Collectors.toList())));
ent.setAreaName(StrUtil.join(",", customerDTO.getAreaList().stream().map(u->u.getAreaName()).collect(Collectors.toList())));
ent.setDataCreateUserNo(AdminUserUtil.getUserNo());
ent.setDataCreateUserName(AdminUserUtil.getUserName());
ent.setDataCreateTime(LocalDateTime.now());
ent.setDataModifyUserNo(AdminUserUtil.getUserNo());
ent.setDataModifyUserName(AdminUserUtil.getUserName());
ent.setDataModifyTime(LocalDateTime.now());
// ent.setDataModifyUserNo(AdminUserUtil.getUserNo());
// ent.setDataModifyUserName(AdminUserUtil.getUserName());
// ent.setDataModifyTime(LocalDateTime.now());
baseCustomerService.save(ent);
return ApiResult.success(true);
@ -105,7 +121,11 @@ public class CustomerController extends ControllerBase {
//检查公司名称是否已存在
TBaseCustomer oldEnt = baseCustomerService.getById(customerDTO.getId());
VUtils.trueThrow(Objects.isNull(oldEnt)).throwMessage(STATE.PageError,customerDTO.getAgencyCompanyName()+"公司不存在");
VUtils.trueThrow(CollUtil.isEmpty(customerDTO.getAreaList())).throwMessage(STATE.ParamErr,"公司区域不能为空");
BeanUtil.copyProperties(customerDTO,oldEnt);
oldEnt.setAreaCode(StrUtil.join(",", customerDTO.getAreaList().stream().map(u->u.getAreaCode()).collect(Collectors.toList())));
oldEnt.setAreaName(StrUtil.join(",", customerDTO.getAreaList().stream().map(u->u.getAreaName()).collect(Collectors.toList())));
oldEnt.setDataModifyUserNo(AdminUserUtil.getUserNo());
oldEnt.setDataModifyUserName(AdminUserUtil.getUserName());
oldEnt.setDataModifyTime(LocalDateTime.now());

View File

@ -0,0 +1,24 @@
package com.nflg.mobilebroken.admin.pojo.dto;
import lombok.Data;
@Data
public class CustomerAreaDTO {
/**
* 区域ID
*/
private Integer id;
/**
* 区域编码
*/
private String areaCode;
/**
* 区域名称
*/
private String areaName;
}

View File

@ -1,9 +1,11 @@
package com.nflg.mobilebroken.admin.pojo.dto;
import com.nflg.mobilebroken.repository.entity.TBaseArea;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 客户管理-参数
@ -42,17 +44,7 @@ public class CustomerDTO {
@NotBlank(message = "销售授权信息不能为空")
private String salesAuthorizationInfo;
/**
* 区域编码
*/
@NotBlank(message = "区域编码不能为空")
private String areaCode;
/**
* 区域
*/
@NotBlank(message = "区域名称不能为空")
private String areaName;
/**
* 服务主管
@ -86,4 +78,10 @@ public class CustomerDTO {
* 销售主管ID
*/
private String salesSupervisorCode;
/**
* 区域列表
*/
private List<CustomerAreaDTO> areaList;
}

View File

@ -28,13 +28,13 @@ public class ComstomerImportTemplate {
/**
* 区域编码
*/
@ExcelColumn("区域编码")
@ExcelColumn("区域编码,多个以逗号隔开")
private String areaCode;
/**
* 区域
*/
@ExcelColumn("区域名称")
@ExcelColumn("区域名称,多个以逗号隔开")
private String areaName;
/**

View File

@ -37,13 +37,13 @@ public class CustomerExcelVO implements Serializable {
/**
* 区域编码
*/
@ExcelColumn("区域编码")
@ExcelColumn("区域编码,多个以逗号隔开")
private String areaCode;
/**
* 区域
*/
@ExcelColumn("区域名称")
@ExcelColumn("区域名称,多个以逗号隔开")
private String areaName;
/**

View File

@ -0,0 +1,17 @@
package com.nflg.mobilebroken.admin.pojo.vo;
import com.nflg.mobilebroken.admin.pojo.dto.CustomerAreaDTO;
import com.nflg.mobilebroken.repository.entity.TBaseCustomer;
import lombok.Data;
import java.util.List;
@Data
public class TBaseCustomerListVO extends TBaseCustomer {
/**
* 区域列表
*/
private List<CustomerAreaDTO> areaList;
}

View File

@ -6,6 +6,7 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Sets;
import com.nflg.mobilebroken.admin.constant.Constant;
import com.nflg.mobilebroken.admin.pojo.vo.AgentManagerVO;
import com.nflg.mobilebroken.admin.pojo.vo.CmrAgentResultVO;
@ -15,7 +16,9 @@ import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.UniqueSequenceGenerator;
import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.Device;
import com.nflg.mobilebroken.repository.entity.TBaseArea;
import com.nflg.mobilebroken.repository.entity.TBaseCustomer;
import com.nflg.mobilebroken.repository.service.ITBaseAreaService;
import com.nflg.mobilebroken.repository.service.ITBaseCustomerService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -37,6 +40,9 @@ public class AdminCustomerService {
@Resource
CrmService crmService;
@Resource
ITBaseAreaService areaService;
/**
* 导入
* @param data
@ -62,14 +68,28 @@ public class AdminCustomerService {
Set<String> existCompanyNames = existCompany.stream().map(u -> u.getAgencyCompanyName()).collect(Collectors.toSet());
VUtils.trueThrow(true).throwMessage(STATE.ParamErr,StrUtil.join(",",existCompanyNames)+" 已存在数据库中");
}
//检查区域编码在库中是否已存在
List<String> areaCodes = data.stream().filter(u->StrUtil.isNotBlank(u.getAreaCode())).map(u -> u.getAreaCode()).collect(Collectors.toList());
if(CollUtil.isNotEmpty(areaCodes)){
Set<String> areaCodeSet=new HashSet<>();
areaCodes.forEach(u->{
areaCodeSet.addAll(StrUtil.split(u,","));
});
List<TBaseArea> existAreaList = areaService.lambdaQuery().in(TBaseArea::getAreaCode, areaCodeSet).list();
Set<String> existAreaCodeSet = existAreaList.stream().map(u -> u.getAreaCode()).collect(Collectors.toSet());
Set<String> difference = Sets.difference(areaCodeSet, existAreaCodeSet);
VUtils.trueThrow(CollUtil.isNotEmpty(difference)).throwMessage(STATE.ParamErr,StrUtil.join(",", difference)+"在区域列表中不存在");
}
List<TBaseCustomer> result = Convert.toList(TBaseCustomer.class, data);
result.forEach(k->{
k.setDataCreateUserNo(AdminUserUtil.getUserNo());
k.setDataCreateUserName(AdminUserUtil.getUserName());
k.setDataCreateTime(LocalDateTime.now());
k.setDataModifyUserNo(AdminUserUtil.getUserNo());
k.setDataModifyUserName(AdminUserUtil.getUserName());
k.setDataModifyTime(LocalDateTime.now());
// k.setDataModifyUserNo(AdminUserUtil.getUserNo());
// k.setDataModifyUserName(AdminUserUtil.getUserName());
// k.setDataModifyTime(LocalDateTime.now());
k.setAgencyCompanyCode(UniqueSequenceGenerator.generateCode(Constant.CustomerCodePrefix) );
});