mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-22 23:31:52 +08:00
📖 CRM:code review 跟进记录的实现
This commit is contained in:
parent
d80406acbb
commit
e79c750b46
@ -123,7 +123,7 @@ public class LocalDateTimeUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取指定日期到现在过了几天,如果指定日期在当前日期之后,获取结果为负。
|
* 获取指定日期到现在过了几天,如果指定日期在当前日期之后,获取结果为负
|
||||||
*
|
*
|
||||||
* @param dateTime 日期
|
* @param dateTime 日期
|
||||||
* @return 相差天数
|
* @return 相差天数
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
<artifactId>spring-boot-starter-validation</artifactId>
|
<artifactId>spring-boot-starter-validation</artifactId>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- TODO @puhui999:api 之间,不直接引入哈;然后,logrecord function 在微服务下,这么跑会高不起来,所以每个服务自己写 function -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.iocoder.boot</groupId>
|
<groupId>cn.iocoder.boot</groupId>
|
||||||
<artifactId>yudao-module-system-api</artifactId>
|
<artifactId>yudao-module-system-api</artifactId>
|
||||||
|
@ -6,6 +6,7 @@ package cn.iocoder.yudao.module.crm.enums.operatelog;
|
|||||||
*
|
*
|
||||||
* @author HUIHUI
|
* @author HUIHUI
|
||||||
*/
|
*/
|
||||||
|
// TODO @puhui999:这个枚举,还是放在对应的 Function 里好。主要考虑,和 Function 实现可以更近一点哈
|
||||||
public interface CrmParseFunctionNameConstants {
|
public interface CrmParseFunctionNameConstants {
|
||||||
|
|
||||||
String GET_CONTACT_BY_ID = "getContactById"; // 获取联系人信息
|
String GET_CONTACT_BY_ID = "getContactById"; // 获取联系人信息
|
||||||
@ -15,4 +16,4 @@ public interface CrmParseFunctionNameConstants {
|
|||||||
String GET_CUSTOMER_SOURCE = "getCustomerSource"; // 获取客户来源
|
String GET_CUSTOMER_SOURCE = "getCustomerSource"; // 获取客户来源
|
||||||
String GET_CONTRACT_BY_ID = "getContractById"; // 获取合同信息
|
String GET_CONTRACT_BY_ID = "getContractById"; // 获取合同信息
|
||||||
|
|
||||||
}
|
}
|
@ -115,10 +115,8 @@ public class CrmCustomerController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 2. 拼接数据
|
// 2. 拼接数据
|
||||||
Map<Long, Long> poolDayMap = null;
|
Map<Long, Long> poolDayMap = Boolean.TRUE.equals(pageVO.getPool()) ? null :
|
||||||
if (ObjUtil.notEqual(pageVO.getPool(), Boolean.TRUE)) {
|
getPoolDayMap(pageResult.getList()); // 客户界面,需要查看距离进入公海的时间
|
||||||
poolDayMap = getPoolDayMap(pageResult.getList()); // 距离进入公海的时间
|
|
||||||
}
|
|
||||||
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
|
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
|
||||||
convertSetByFlatMap(pageResult.getList(), user -> Stream.of(Long.parseLong(user.getCreator()), user.getOwnerUserId())));
|
convertSetByFlatMap(pageResult.getList(), user -> Stream.of(Long.parseLong(user.getCreator()), user.getOwnerUserId())));
|
||||||
Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userMap.values(), AdminUserRespDTO::getDeptId));
|
Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userMap.values(), AdminUserRespDTO::getDeptId));
|
||||||
@ -132,21 +130,23 @@ public class CrmCustomerController {
|
|||||||
* @return Map<key 客户编号, value 距离进入公海的时间>
|
* @return Map<key 客户编号, value 距离进入公海的时间>
|
||||||
*/
|
*/
|
||||||
private Map<Long, Long> getPoolDayMap(List<CrmCustomerDO> customerList) {
|
private Map<Long, Long> getPoolDayMap(List<CrmCustomerDO> customerList) {
|
||||||
CrmCustomerPoolConfigDO customerPoolConfig = customerPoolConfigService.getCustomerPoolConfig();
|
CrmCustomerPoolConfigDO poolConfig = customerPoolConfigService.getCustomerPoolConfig();
|
||||||
if (customerPoolConfig == null || !customerPoolConfig.getEnabled()) {
|
if (poolConfig == null || !poolConfig.getEnabled()) {
|
||||||
return MapUtil.empty();
|
return MapUtil.empty();
|
||||||
}
|
}
|
||||||
// TODO @puhui999:需要考虑 lock 的情况么? 回复:锁定正常显示距离进入公海的时间有个提示
|
|
||||||
return convertMap(customerList, CrmCustomerDO::getId, customer -> {
|
return convertMap(customerList, CrmCustomerDO::getId, customer -> {
|
||||||
|
// 1.1 未成交放入公海天数
|
||||||
long dealExpireDay = 0;
|
long dealExpireDay = 0;
|
||||||
if (!customer.getDealStatus()) { // 检查是否成交
|
if (!customer.getDealStatus()) {
|
||||||
dealExpireDay = customerPoolConfig.getDealExpireDays() - LocalDateTimeUtils.between(customer.getCreateTime());
|
dealExpireDay = poolConfig.getDealExpireDays() - LocalDateTimeUtils.between(customer.getCreateTime());
|
||||||
}
|
}
|
||||||
LocalDateTime lastTime = customer.getContactLastTime() != null ? customer.getContactLastTime() : customer.getCreateTime();
|
// 1.2 未跟进放入公海天数
|
||||||
long contactExpireDay = customerPoolConfig.getContactExpireDays() - LocalDateTimeUtils.between(lastTime);
|
LocalDateTime lastTime = ObjUtil.defaultIfNull(customer.getContactLastTime(), customer.getCreateTime());
|
||||||
|
long contactExpireDay = poolConfig.getContactExpireDays() - LocalDateTimeUtils.between(lastTime);
|
||||||
if (contactExpireDay < 0) {
|
if (contactExpireDay < 0) {
|
||||||
contactExpireDay = 0; // 如果为负的话重置为零
|
contactExpireDay = 0;
|
||||||
}
|
}
|
||||||
|
// 2. 返回最小的天数
|
||||||
return Math.min(dealExpireDay, contactExpireDay);
|
return Math.min(dealExpireDay, contactExpireDay);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -29,8 +29,8 @@ public class CrmCustomerPoolConfigController {
|
|||||||
@Operation(summary = "获取客户公海规则设置")
|
@Operation(summary = "获取客户公海规则设置")
|
||||||
@PreAuthorize("@ss.hasPermission('crm:customer-pool-config:query')")
|
@PreAuthorize("@ss.hasPermission('crm:customer-pool-config:query')")
|
||||||
public CommonResult<CrmCustomerPoolConfigRespVO> getCustomerPoolConfig() {
|
public CommonResult<CrmCustomerPoolConfigRespVO> getCustomerPoolConfig() {
|
||||||
CrmCustomerPoolConfigDO customerPoolConfig = customerPoolConfigService.getCustomerPoolConfig();
|
CrmCustomerPoolConfigDO poolConfig = customerPoolConfigService.getCustomerPoolConfig();
|
||||||
return success(BeanUtils.toBean(customerPoolConfig, CrmCustomerPoolConfigRespVO.class));
|
return success(BeanUtils.toBean(poolConfig, CrmCustomerPoolConfigRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping("/save")
|
@PutMapping("/save")
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.plan;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.validation.InEnum;
|
|
||||||
import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - CRM 回款计划转移 Request VO")
|
|
||||||
@Data
|
|
||||||
public class CrmReceivablePlanTransferReqVO {
|
|
||||||
|
|
||||||
@Schema(description = "回款计划编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10430")
|
|
||||||
@NotNull(message = "回款计划编号不能为空")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Schema(description = "新负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10430")
|
|
||||||
@NotNull(message = "新负责人的用户编号不能为空")
|
|
||||||
private Long newOwnerUserId;
|
|
||||||
|
|
||||||
@Schema(description = "老负责人加入团队后的权限级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
|
||||||
@InEnum(value = CrmPermissionLevelEnum.class)
|
|
||||||
private Integer oldOwnerPermissionLevel; // 老负责人加入团队后的权限级别。如果 null 说明移除
|
|
||||||
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.validation.InEnum;
|
|
||||||
import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - CRM 回款转移 Request VO")
|
|
||||||
@Data
|
|
||||||
public class CrmReceivableTransferReqVO {
|
|
||||||
|
|
||||||
@Schema(description = "回款编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10430")
|
|
||||||
@NotNull(message = "回款编号不能为空")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Schema(description = "新负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10430")
|
|
||||||
@NotNull(message = "新负责人的用户编号不能为空")
|
|
||||||
private Long newOwnerUserId;
|
|
||||||
|
|
||||||
@Schema(description = "老负责人加入团队后的权限级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
|
||||||
@InEnum(value = CrmPermissionLevelEnum.class)
|
|
||||||
private Integer oldOwnerPermissionLevel; // 老负责人加入团队后的权限级别。如果 null 说明移除
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.crm.convert.customer;
|
package cn.iocoder.yudao.module.crm.convert.customer;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
|
import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerRespVO;
|
import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerRespVO;
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerTransferReqVO;
|
import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerTransferReqVO;
|
||||||
@ -26,7 +27,22 @@ public interface CrmCustomerConvert {
|
|||||||
|
|
||||||
CrmCustomerConvert INSTANCE = Mappers.getMapper(CrmCustomerConvert.class);
|
CrmCustomerConvert INSTANCE = Mappers.getMapper(CrmCustomerConvert.class);
|
||||||
|
|
||||||
CrmCustomerRespVO convert(CrmCustomerDO bean);
|
default CrmCustomerRespVO convert(CrmCustomerDO customer, Map<Long, AdminUserRespDTO> userMap,
|
||||||
|
Map<Long, DeptRespDTO> deptMap) {
|
||||||
|
CrmCustomerRespVO customerResp = BeanUtils.toBean(customer, CrmCustomerRespVO.class);
|
||||||
|
setUserInfo(customerResp, userMap, deptMap);
|
||||||
|
return customerResp;
|
||||||
|
}
|
||||||
|
|
||||||
|
default PageResult<CrmCustomerRespVO> convertPage(PageResult<CrmCustomerDO> pageResult, Map<Long, AdminUserRespDTO> userMap,
|
||||||
|
Map<Long, DeptRespDTO> deptMap, Map<Long, Long> poolDayMap) {
|
||||||
|
PageResult<CrmCustomerRespVO> result = BeanUtils.toBean(pageResult, CrmCustomerRespVO.class);
|
||||||
|
result.getList().forEach(item -> {
|
||||||
|
setUserInfo(item, userMap, deptMap);
|
||||||
|
findAndThen(poolDayMap, item.getId(), item::setPoolDay);
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置用户信息
|
* 设置用户信息
|
||||||
@ -47,23 +63,4 @@ public interface CrmCustomerConvert {
|
|||||||
@Mapping(target = "bizId", source = "reqVO.id")
|
@Mapping(target = "bizId", source = "reqVO.id")
|
||||||
CrmPermissionTransferReqBO convert(CrmCustomerTransferReqVO reqVO, Long userId);
|
CrmPermissionTransferReqBO convert(CrmCustomerTransferReqVO reqVO, Long userId);
|
||||||
|
|
||||||
PageResult<CrmCustomerRespVO> convertPage(PageResult<CrmCustomerDO> page);
|
|
||||||
|
|
||||||
default CrmCustomerRespVO convert(CrmCustomerDO customer, Map<Long, AdminUserRespDTO> userMap,
|
|
||||||
Map<Long, DeptRespDTO> deptMap) {
|
|
||||||
CrmCustomerRespVO customerResp = convert(customer);
|
|
||||||
setUserInfo(customerResp, userMap, deptMap);
|
|
||||||
return customerResp;
|
|
||||||
}
|
|
||||||
|
|
||||||
default PageResult<CrmCustomerRespVO> convertPage(PageResult<CrmCustomerDO> pageResult, Map<Long, AdminUserRespDTO> userMap,
|
|
||||||
Map<Long, DeptRespDTO> deptMap, Map<Long, Long> poolDayMap) {
|
|
||||||
PageResult<CrmCustomerRespVO> result = convertPage(pageResult);
|
|
||||||
result.getList().forEach(item -> {
|
|
||||||
setUserInfo(item, userMap, deptMap);
|
|
||||||
findAndThen(poolDayMap, item.getId(), item::setPoolDay);
|
|
||||||
});
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.crm.convert.customer;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigRespVO;
|
import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigRespVO;
|
||||||
import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerLimitConfigDO;
|
import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerLimitConfigDO;
|
||||||
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
|
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
|
||||||
@ -9,6 +10,7 @@ import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
|||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -21,34 +23,20 @@ public interface CrmCustomerLimitConfigConvert {
|
|||||||
|
|
||||||
CrmCustomerLimitConfigConvert INSTANCE = Mappers.getMapper(CrmCustomerLimitConfigConvert.class);
|
CrmCustomerLimitConfigConvert INSTANCE = Mappers.getMapper(CrmCustomerLimitConfigConvert.class);
|
||||||
|
|
||||||
CrmCustomerLimitConfigRespVO convert(CrmCustomerLimitConfigDO bean);
|
default PageResult<CrmCustomerLimitConfigRespVO> convertPage(
|
||||||
|
PageResult<CrmCustomerLimitConfigDO> pageResult,
|
||||||
PageResult<CrmCustomerLimitConfigRespVO> convertPage(PageResult<CrmCustomerLimitConfigDO> page);
|
Map<Long, AdminUserRespDTO> userMap, Map<Long, DeptRespDTO> deptMap) {
|
||||||
|
List<CrmCustomerLimitConfigRespVO> list = CollectionUtils.convertList(pageResult.getList(),
|
||||||
default PageResult<CrmCustomerLimitConfigRespVO> convertPage(PageResult<CrmCustomerLimitConfigDO> pageResult,
|
limitConfig -> convert(limitConfig, userMap, deptMap));
|
||||||
Map<Long, AdminUserRespDTO> userMap, Map<Long, DeptRespDTO> deptMap) {
|
return new PageResult<>(list, pageResult.getTotal());
|
||||||
PageResult<CrmCustomerLimitConfigRespVO> result = convertPage(pageResult);
|
|
||||||
result.getList().forEach(respVo -> fillNameField(userMap, deptMap, respVo));
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default CrmCustomerLimitConfigRespVO convert(CrmCustomerLimitConfigDO customerLimitConfig,
|
default CrmCustomerLimitConfigRespVO convert(CrmCustomerLimitConfigDO limitConfig,
|
||||||
Map<Long, AdminUserRespDTO> userMap, Map<Long, DeptRespDTO> deptMap) {
|
Map<Long, AdminUserRespDTO> userMap, Map<Long, DeptRespDTO> deptMap) {
|
||||||
CrmCustomerLimitConfigRespVO respVo = convert(customerLimitConfig);
|
CrmCustomerLimitConfigRespVO limitConfigVO = BeanUtils.toBean(limitConfig, CrmCustomerLimitConfigRespVO.class);
|
||||||
fillNameField(userMap, deptMap, respVo);
|
limitConfigVO.setUsers(CollectionUtils.convertList(limitConfigVO.getUserIds(), userMap::get));
|
||||||
return respVo;
|
limitConfigVO.setDepts(CollectionUtils.convertList(limitConfigVO.getDeptIds(), deptMap::get));
|
||||||
}
|
return limitConfigVO;
|
||||||
|
|
||||||
/**
|
|
||||||
* 填充名称字段
|
|
||||||
*
|
|
||||||
* @param userMap 用户映射
|
|
||||||
* @param deptMap 部门映射
|
|
||||||
* @param respVo 响应实体
|
|
||||||
*/
|
|
||||||
static void fillNameField(Map<Long, AdminUserRespDTO> userMap, Map<Long, DeptRespDTO> deptMap, CrmCustomerLimitConfigRespVO respVo) {
|
|
||||||
respVo.setUsers(CollectionUtils.convertList(respVo.getUserIds(), userMap::get));
|
|
||||||
respVo.setDepts(CollectionUtils.convertList(respVo.getDeptIds(), deptMap::get));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,15 +4,12 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivableCreateReqVO;
|
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivableCreateReqVO;
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivableRespVO;
|
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivableRespVO;
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivableTransferReqVO;
|
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivableUpdateReqVO;
|
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivableUpdateReqVO;
|
||||||
import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
|
import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
|
||||||
import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
|
import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
|
||||||
import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO;
|
import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO;
|
||||||
import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO;
|
|
||||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.Mapping;
|
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -52,7 +49,4 @@ public interface CrmReceivableConvert {
|
|||||||
return voPageResult;
|
return voPageResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mapping(target = "bizId", source = "reqVO.id")
|
|
||||||
CrmPermissionTransferReqBO convert(CrmReceivableTransferReqVO reqVO, Long userId);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,16 +4,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.plan.CrmReceivablePlanCreateReqVO;
|
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.plan.CrmReceivablePlanCreateReqVO;
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.plan.CrmReceivablePlanRespVO;
|
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.plan.CrmReceivablePlanRespVO;
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.plan.CrmReceivablePlanTransferReqVO;
|
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.plan.CrmReceivablePlanUpdateReqVO;
|
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.plan.CrmReceivablePlanUpdateReqVO;
|
||||||
import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
|
import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
|
||||||
import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
|
import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
|
||||||
import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO;
|
import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO;
|
||||||
import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO;
|
import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO;
|
||||||
import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO;
|
|
||||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.Mapping;
|
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -56,7 +53,4 @@ public interface CrmReceivablePlanConvert {
|
|||||||
return voPageResult;
|
return voPageResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mapping(target = "bizId", source = "reqVO.id")
|
|
||||||
CrmPermissionTransferReqBO convert(CrmReceivablePlanTransferReqVO reqVO, Long userId);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -142,9 +142,11 @@ public class CrmClueServiceImpl implements CrmClueService {
|
|||||||
clues.forEach(clue -> {
|
clues.forEach(clue -> {
|
||||||
clue.setId(null);
|
clue.setId(null);
|
||||||
// 创建客户
|
// 创建客户
|
||||||
|
// TODO @puhui999:上面的 id 置空,适合 bean copy 后,在设置为 null,不直接修改 clu 哈
|
||||||
customerService.createCustomer(BeanUtils.toBean(clue, CrmCustomerSaveReqVO.class), userId);
|
customerService.createCustomer(BeanUtils.toBean(clue, CrmCustomerSaveReqVO.class), userId);
|
||||||
// 更新线索状态
|
// 更新线索状态
|
||||||
// TODO @min:新建一个 CrmClueDO 去更新。尽量规避直接用原本的对象去更新。因为这样万一并发更新,会存在覆盖的问题。
|
// TODO @min:新建一个 CrmClueDO 去更新。尽量规避直接用原本的对象去更新。因为这样万一并发更新,会存在覆盖的问题。
|
||||||
|
// TODO @min:customerId 没有更新进去
|
||||||
// TODO @puhui999:如果有跟进记录,需要一起转过去;
|
// TODO @puhui999:如果有跟进记录,需要一起转过去;
|
||||||
clue.setTransformStatus(Boolean.TRUE);
|
clue.setTransformStatus(Boolean.TRUE);
|
||||||
clueMapper.updateById(clue);
|
clueMapper.updateById(clue);
|
||||||
|
@ -154,7 +154,6 @@ public class CrmContactServiceImpl implements CrmContactService {
|
|||||||
permissionService.deletePermission(CrmBizTypeEnum.CRM_CONTACT.getType(), id);
|
permissionService.deletePermission(CrmBizTypeEnum.CRM_CONTACT.getType(), id);
|
||||||
// 4.2 删除商机关联
|
// 4.2 删除商机关联
|
||||||
contactBusinessService.deleteContactBusinessByContactId(id);
|
contactBusinessService.deleteContactBusinessByContactId(id);
|
||||||
// TODO @puhui999:删除跟进记录
|
|
||||||
|
|
||||||
// 记录操作日志上下文
|
// 记录操作日志上下文
|
||||||
LogRecordContext.putVariable("contactName", contact.getName());
|
LogRecordContext.putVariable("contactName", contact.getName());
|
||||||
|
@ -48,13 +48,13 @@ public class CrmCustomerLimitConfigServiceImpl implements CrmCustomerLimitConfig
|
|||||||
public Long createCustomerLimitConfig(CrmCustomerLimitConfigSaveReqVO createReqVO) {
|
public Long createCustomerLimitConfig(CrmCustomerLimitConfigSaveReqVO createReqVO) {
|
||||||
validateUserAndDept(createReqVO.getUserIds(), createReqVO.getDeptIds());
|
validateUserAndDept(createReqVO.getUserIds(), createReqVO.getDeptIds());
|
||||||
// 插入
|
// 插入
|
||||||
CrmCustomerLimitConfigDO customerLimitConfig = BeanUtils.toBean(createReqVO, CrmCustomerLimitConfigDO.class);
|
CrmCustomerLimitConfigDO limitConfig = BeanUtils.toBean(createReqVO, CrmCustomerLimitConfigDO.class);
|
||||||
customerLimitConfigMapper.insert(customerLimitConfig);
|
customerLimitConfigMapper.insert(limitConfig);
|
||||||
|
|
||||||
// 记录操作日志上下文
|
// 记录操作日志上下文
|
||||||
LogRecordContext.putVariable("limitType", CrmCustomerLimitConfigTypeEnum.getNameByType(customerLimitConfig.getType()));
|
LogRecordContext.putVariable("limitType", CrmCustomerLimitConfigTypeEnum.getNameByType(limitConfig.getType()));
|
||||||
LogRecordContext.putVariable("limitId", customerLimitConfig.getId());
|
LogRecordContext.putVariable("limitId", limitConfig.getId());
|
||||||
return customerLimitConfig.getId();
|
return limitConfig.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -77,12 +77,12 @@ public class CrmCustomerLimitConfigServiceImpl implements CrmCustomerLimitConfig
|
|||||||
success = CRM_CUSTOMER_LIMIT_CONFIG_DELETE_SUCCESS)
|
success = CRM_CUSTOMER_LIMIT_CONFIG_DELETE_SUCCESS)
|
||||||
public void deleteCustomerLimitConfig(Long id) {
|
public void deleteCustomerLimitConfig(Long id) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
CrmCustomerLimitConfigDO limitConfigDO = validateCustomerLimitConfigExists(id);
|
CrmCustomerLimitConfigDO limitConfig = validateCustomerLimitConfigExists(id);
|
||||||
// 删除
|
// 删除
|
||||||
customerLimitConfigMapper.deleteById(id);
|
customerLimitConfigMapper.deleteById(id);
|
||||||
|
|
||||||
// 记录操作日志上下文
|
// 记录操作日志上下文
|
||||||
LogRecordContext.putVariable("limitType", CrmCustomerLimitConfigTypeEnum.getNameByType(limitConfigDO.getType()));
|
LogRecordContext.putVariable("limitType", CrmCustomerLimitConfigTypeEnum.getNameByType(limitConfig.getType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -127,17 +127,17 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
|
|||||||
success = CRM_CUSTOMER_DELETE_SUCCESS)
|
success = CRM_CUSTOMER_DELETE_SUCCESS)
|
||||||
@CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#id", level = CrmPermissionLevelEnum.OWNER)
|
@CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#id", level = CrmPermissionLevelEnum.OWNER)
|
||||||
public void deleteCustomer(Long id) {
|
public void deleteCustomer(Long id) {
|
||||||
// 校验存在
|
// 1.1 校验存在
|
||||||
CrmCustomerDO customer = validateCustomerExists(id);
|
CrmCustomerDO customer = validateCustomerExists(id);
|
||||||
// 检查引用
|
// 1.2 检查引用
|
||||||
checkCustomerReference(id);
|
checkCustomerReference(id);
|
||||||
// 删除
|
|
||||||
customerMapper.deleteById(id);
|
|
||||||
// 删除数据权限
|
|
||||||
permissionService.deletePermission(CrmBizTypeEnum.CRM_CUSTOMER.getType(), id);
|
|
||||||
// TODO @puhui999:删除跟进记录
|
|
||||||
|
|
||||||
// 记录操作日志上下文
|
// 2. 删除
|
||||||
|
customerMapper.deleteById(id);
|
||||||
|
// 3. 删除数据权限
|
||||||
|
permissionService.deletePermission(CrmBizTypeEnum.CRM_CUSTOMER.getType(), id);
|
||||||
|
|
||||||
|
// 4. 记录操作日志上下文
|
||||||
LogRecordContext.putVariable("customerName", customer.getName());
|
LogRecordContext.putVariable("customerName", customer.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,8 @@ public class CrmReceivableServiceImpl implements CrmReceivableService {
|
|||||||
permissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_RECEIVABLE.getType())
|
permissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_RECEIVABLE.getType())
|
||||||
.setBizId(receivable.getId()).setUserId(userId).setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); // 设置当前操作的人为负责人
|
.setBizId(receivable.getId()).setUserId(userId).setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); // 设置当前操作的人为负责人
|
||||||
// TODO @liuhongfeng:需要更新关联的 plan
|
// TODO @liuhongfeng:需要更新关联的 plan
|
||||||
// 记录操作日志上下文
|
|
||||||
|
// 4. 记录操作日志上下文
|
||||||
LogRecordContext.putVariable("receivable", receivable);
|
LogRecordContext.putVariable("receivable", receivable);
|
||||||
return receivable.getId();
|
return receivable.getId();
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ package cn.iocoder.yudao.module.system.enums.operatelog;
|
|||||||
*
|
*
|
||||||
* @author HUIHUI
|
* @author HUIHUI
|
||||||
*/
|
*/
|
||||||
|
// TODO @puhui999:这个枚举,还是放在对应的 Function 里好。主要考虑,和 Function 实现可以更近一点哈
|
||||||
public interface SysParseFunctionNameConstants {
|
public interface SysParseFunctionNameConstants {
|
||||||
|
|
||||||
String GET_ADMIN_USER_BY_ID = "getAdminUserById"; // 获取用户信息
|
String GET_ADMIN_USER_BY_ID = "getAdminUserById"; // 获取用户信息
|
||||||
|
Loading…
Reference in New Issue
Block a user