package com.jtzx.crm.module.sys.service; import cc.uncarbon.framework.core.constant.HelioConstant; import cc.uncarbon.framework.core.exception.BusinessException; import cc.uncarbon.framework.core.page.PageParam; import cc.uncarbon.framework.core.page.PageResult; import com.jtzx.crm.module.sys.entity.SysCustomerFollowAuditEntity; import com.jtzx.crm.module.sys.mapper.SysCustomerFollowAuditMapper; import com.jtzx.crm.module.sys.model.request.AdminSysCustomerFollowAuditInsertOrUpdateDTO; import com.jtzx.crm.module.sys.model.request.AdminSysCustomerFollowAuditListDTO; import com.jtzx.crm.module.sys.model.response.SysCustomerFollowAuditBO; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.text.CharSequenceUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; /** * 赢单跟进审核信息 */ @RequiredArgsConstructor @Service @Slf4j public class SysCustomerFollowAuditService { private final SysCustomerFollowAuditMapper sysCustomerFollowAuditMapper; /** * 后台管理-分页列表 */ public PageResult adminList(PageParam pageParam, AdminSysCustomerFollowAuditListDTO dto) { Page entityPage = sysCustomerFollowAuditMapper.selectPage( new Page<>(pageParam.getPageNum(), pageParam.getPageSize()), new QueryWrapper() .lambda() // 认领人(跟进)id .eq(Objects.nonNull(dto.getClaimUserId()), SysCustomerFollowAuditEntity::getClaimUserId, dto.getClaimUserId()) // 审核人id .like(CharSequenceUtil.isNotBlank(dto.getClaimUserName()), SysCustomerFollowAuditEntity::getClaimUserName, CharSequenceUtil.cleanBlank(dto.getClaimUserName())) // 认领人员所在的项目组id .eq(Objects.nonNull(dto.getClaimUserGroupId()), SysCustomerFollowAuditEntity::getClaimUserGroupId, dto.getClaimUserGroupId()) // 跟进时间 .eq(Objects.nonNull(dto.getClaimDatetime()), SysCustomerFollowAuditEntity::getClaimDatetime, dto.getClaimDatetime()) // 客户表主id .eq(Objects.nonNull(dto.getCustomerId()), SysCustomerFollowAuditEntity::getCustomerId, dto.getCustomerId()) // 客户名称 .like(CharSequenceUtil.isNotBlank(dto.getCustomerName()), SysCustomerFollowAuditEntity::getCustomerName, CharSequenceUtil.cleanBlank(dto.getCustomerName())) // 跟进状态id,赢单状态id固定-37,方案演示id固定-33 .eq(Objects.nonNull(dto.getFollowId()), SysCustomerFollowAuditEntity::getFollowId, dto.getFollowId()) // 跟进状态的名称 .like(CharSequenceUtil.isNotBlank(dto.getFollowName()), SysCustomerFollowAuditEntity::getFollowName, CharSequenceUtil.cleanBlank(dto.getFollowName())) // 联系人id(customer_person表主id) .eq(Objects.nonNull(dto.getCustomerPersonId()), SysCustomerFollowAuditEntity::getCustomerPersonId, dto.getCustomerPersonId()) // 联系人名称 .like(CharSequenceUtil.isNotBlank(dto.getCustomerPersonName()), SysCustomerFollowAuditEntity::getCustomerPersonName, CharSequenceUtil.cleanBlank(dto.getCustomerPersonName())) // 职务id(param_base_data表主id) .eq(Objects.nonNull(dto.getPositionId()), SysCustomerFollowAuditEntity::getPositionId, dto.getPositionId()) // 职务名称 .like(CharSequenceUtil.isNotBlank(dto.getPositionName()), SysCustomerFollowAuditEntity::getPositionName, CharSequenceUtil.cleanBlank(dto.getPositionName())) // 跟进内容 .like(CharSequenceUtil.isNotBlank(dto.getFollowContent()), SysCustomerFollowAuditEntity::getFollowContent, CharSequenceUtil.cleanBlank(dto.getFollowContent())) // 产品id(param_base_data表主id) .eq(Objects.nonNull(dto.getProductId()), SysCustomerFollowAuditEntity::getProductId, dto.getProductId()) // 产品名称 .like(CharSequenceUtil.isNotBlank(dto.getProductName()), SysCustomerFollowAuditEntity::getProductName, CharSequenceUtil.cleanBlank(dto.getProductName())) // 审核状态:0-待审核,1-已通过,2-已驳回 .eq(Objects.nonNull(dto.getAuditStatus()), SysCustomerFollowAuditEntity::getAuditStatus, dto.getAuditStatus()) // 审核人id .eq(Objects.nonNull(dto.getAuditUserId()), SysCustomerFollowAuditEntity::getAuditUserId, dto.getAuditUserId()) // 审核人名称 .like(CharSequenceUtil.isNotBlank(dto.getAuditUserName()), SysCustomerFollowAuditEntity::getAuditUserName, CharSequenceUtil.cleanBlank(dto.getAuditUserName())) // 时间区间 .between(Objects.nonNull(dto.getBeginAt()) && Objects.nonNull(dto.getEndAt()), SysCustomerFollowAuditEntity::getCreatedAt, dto.getBeginAt(), dto.getEndAt()) // 排序 .orderByDesc(SysCustomerFollowAuditEntity::getCreatedAt) ); return this.entityPage2BOPage(entityPage); } /** * 根据 ID 取详情 * * @param id 主键ID * @return null or BO */ public SysCustomerFollowAuditBO getOneById(Long id) { return this.getOneById(id, false); } /** * 根据 ID 取详情 * * @param id 主键ID * @param throwIfInvalidId 是否在 ID 无效时抛出异常 * @return null or BO */ public SysCustomerFollowAuditBO getOneById(Long id, boolean throwIfInvalidId) throws BusinessException { SysCustomerFollowAuditEntity entity = sysCustomerFollowAuditMapper.selectById(id); if (throwIfInvalidId && entity == null) { throw new BusinessException(400, "无效赢单跟进审核信息ID"); } return this.entity2BO(entity); } /** * 后台管理-新增 */ @Transactional(rollbackFor = Exception.class) public Long adminInsert(AdminSysCustomerFollowAuditInsertOrUpdateDTO dto) { log.info("[后台管理-赢单跟进审核信息-新增] >> DTO={}", dto); this.checkExistence(dto); dto.setId(null); SysCustomerFollowAuditEntity entity = new SysCustomerFollowAuditEntity(); BeanUtil.copyProperties(dto, entity); sysCustomerFollowAuditMapper.insert(entity); return entity.getId(); } /** * 后台管理-编辑 */ @Transactional(rollbackFor = Exception.class) public void adminUpdate(AdminSysCustomerFollowAuditInsertOrUpdateDTO dto) { log.info("[后台管理-赢单跟进审核信息-编辑] >> DTO={}", dto); this.checkExistence(dto); SysCustomerFollowAuditEntity entity = new SysCustomerFollowAuditEntity(); BeanUtil.copyProperties(dto, entity); sysCustomerFollowAuditMapper.updateById(entity); } /** * 后台管理-删除 */ @Transactional(rollbackFor = Exception.class) public void adminDelete(Collection ids) { log.info("[后台管理-赢单跟进审核信息-删除] >> ids={}", ids); sysCustomerFollowAuditMapper.deleteByIds(ids); } /* ---------------------------------------------------------------- 私有方法 private methods ---------------------------------------------------------------- */ /** * 实体转 BO * * @param entity 实体 * @return BO */ private SysCustomerFollowAuditBO entity2BO(SysCustomerFollowAuditEntity entity) { if (entity == null) { return null; } SysCustomerFollowAuditBO bo = new SysCustomerFollowAuditBO(); BeanUtil.copyProperties(entity, bo); // 可以在此处为BO填充字段 return bo; } /** * 实体 List 转 BO List * * @param entityList 实体 List * @return BO List */ private List entityList2BOs(List entityList) { if (CollUtil.isEmpty(entityList)) { return Collections.emptyList(); } // 深拷贝 List ret = new ArrayList<>(entityList.size()); entityList.forEach( entity -> ret.add(this.entity2BO(entity)) ); return ret; } /** * 实体分页转 BO 分页 * * @param entityPage 实体分页 * @return BO 分页 */ private PageResult entityPage2BOPage(Page entityPage) { return new PageResult() .setCurrent(entityPage.getCurrent()) .setSize(entityPage.getSize()) .setTotal(entityPage.getTotal()) .setRecords(this.entityList2BOs(entityPage.getRecords())); } /** * 检查是否已存在同名数据 * * @param dto DTO */ private void checkExistence(AdminSysCustomerFollowAuditInsertOrUpdateDTO dto) { /* 可以根据自己业务需要,解禁这段代码,修改判断条件和文案 SysCustomerFollowAuditEntity existingEntity = sysCustomerFollowAuditMapper.selectOne( new QueryWrapper() .lambda() .select(SysCustomerFollowAuditEntity::getId) .eq(SysCustomerFollowAuditEntity::getTitle, dto.getTitle()) .last(HelioConstant.CRUD.SQL_LIMIT_1) ); if (existingEntity != null && !existingEntity.getId().equals(dto.getId())) { throw new BusinessException(400, "已存在相同赢单跟进审核信息,请重新输入"); } */ } }