CRM:待办事项(接入合同)

This commit is contained in:
YunaiV 2024-02-24 17:55:40 +08:00
parent 0b0830f445
commit 53ebd39c73
4 changed files with 41 additions and 32 deletions

View File

@ -215,18 +215,18 @@ public class CrmContractController {
});
}
@GetMapping("/check-contract-count")
@GetMapping("/audit-count")
@Operation(summary = "获得待审核合同数量")
@PreAuthorize("@ss.hasPermission('crm:contract:query')")
public CommonResult<Long> getCheckContractCount() {
return success(contractService.getCheckContractCount(getLoginUserId()));
public CommonResult<Long> getAuditContractCount() {
return success(contractService.getAuditContractCount(getLoginUserId()));
}
@GetMapping("/end-contract-count")
@Operation(summary = "获得即将到期的合同数量")
@GetMapping("/remind-count")
@Operation(summary = "获得即将到期(提醒)的合同数量")
@PreAuthorize("@ss.hasPermission('crm:contract:query')")
public CommonResult<Long> getEndContractCount() {
return success(contractService.getEndContractCount(getLoginUserId()));
public CommonResult<Long> getRemindContractCount() {
return success(contractService.getRemindContractCount(getLoginUserId()));
}
}

View File

@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractPageReqVO;
import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractConfigDO;
import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum;
import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
@ -49,7 +50,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> {
.orderByDesc(CrmContractDO::getId));
}
default PageResult<CrmContractDO> selectPage(CrmContractPageReqVO pageReqVO, Long userId) {
default PageResult<CrmContractDO> selectPage(CrmContractPageReqVO pageReqVO, Long userId, CrmContractConfigDO config) {
MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>();
// 拼接数据权限的查询条件
CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(),
@ -67,10 +68,8 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> {
LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now());
LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now());
if (CrmContractPageReqVO.EXPIRY_TYPE_ABOUT_TO_EXPIRE.equals(pageReqVO.getExpiryType())) { // 即将到期
// TODO: @芋艿 需要配置 提前提醒天数
int REMIND_DAYS = 20;
query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus())
.between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(REMIND_DAYS));
.between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(config.getNotifyDays()));
} else if (CrmContractPageReqVO.EXPIRY_TYPE_EXPIRED.equals(pageReqVO.getExpiryType())) { // 已到期
query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus())
.lt(CrmContractDO::getEndTime, endOfToday);
@ -95,17 +94,17 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> {
return selectCount(CrmContractDO::getBusinessId, businessId);
}
default Long selectCheckContractCount(Long userId) {
default Long selectCountByAudit(Long userId) {
MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>();
// 我负责的 + 非公海
CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(),
CrmContractDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE);
// 提交 or 审核不通过
query.in(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.DRAFT.getStatus(), CrmAuditStatusEnum.REJECT.getStatus());
// 审核
query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.PROCESS.getStatus());
return selectCount(query);
}
default Long selectEndContractCount(Long userId) {
default Long selectCountByRemind(Long userId, CrmContractConfigDO config) {
MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>();
// 我负责的 + 非公海
CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(),
@ -113,10 +112,8 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> {
// 即将到期
LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now());
LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now());
// TODO: @dhb52 需要配置 提前提醒天数
int REMIND_DAYS = 20;
query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus())
.between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(REMIND_DAYS));
query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus()) // 必须审批通过
.between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(config.getNotifyDays()));
return selectCount(query);
}

View File

@ -162,14 +162,14 @@ public interface CrmContractService {
* @param userId 用户编号
* @return 提醒数量
*/
Long getCheckContractCount(Long userId);
Long getAuditContractCount(Long userId);
/**
* 获得即将到期的合同数量
* 获得即将到期提醒的合同数量
*
* @param userId 用户编号
* @return 提醒数量
*/
Long getEndContractCount(Long userId);
Long getRemindContractCount(Long userId);
}

View File

@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractPageReqVO;
import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractSaveReqVO;
import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractTransferReqVO;
import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractConfigDO;
import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractProductDO;
import cn.iocoder.yudao.module.crm.dal.mysql.contract.CrmContractMapper;
@ -83,6 +84,8 @@ public class CrmContractServiceImpl implements CrmContractService {
private CrmBusinessService businessService;
@Resource
private CrmContactService contactService;
@Resource
private CrmContractConfigService contractConfigService;
@Resource
private AdminUserApi adminUserApi;
@ -172,8 +175,6 @@ public class CrmContractServiceImpl implements CrmContractService {
}
}
// TODO @合同待定缺一个取消合同的接口只有草稿审批中可以取消CrmAuditStatusEnum
/**
* 校验关联数据是否存在
*
@ -314,7 +315,7 @@ public class CrmContractServiceImpl implements CrmContractService {
contractMapper.updateById(new CrmContractDO().setId(id).setAuditStatus(auditStatus));
}
//======================= 查询相关 =======================
// ======================= 查询相关 =======================
@Override
@CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTRACT, bizId = "#id", level = CrmPermissionLevelEnum.READ)
@ -332,7 +333,16 @@ public class CrmContractServiceImpl implements CrmContractService {
@Override
public PageResult<CrmContractDO> getContractPage(CrmContractPageReqVO pageReqVO, Long userId) {
return contractMapper.selectPage(pageReqVO, userId);
// 1. 即将到期需要查询合同配置
CrmContractConfigDO config = null;
if (CrmContractPageReqVO.EXPIRY_TYPE_ABOUT_TO_EXPIRE.equals(pageReqVO.getExpiryType())) {
config = contractConfigService.getContractConfig();
if (config != null && Boolean.FALSE.equals(config.getNotifyEnabled())) {
config = null;
}
}
// 2. 查询分页
return contractMapper.selectPage(pageReqVO, userId, config);
}
@Override
@ -367,16 +377,18 @@ public class CrmContractServiceImpl implements CrmContractService {
return contractProductMapper.selectListByContractId(contactId);
}
// TODO @合同待定需要新增一个 ContractConfigDO 合同配置重点是到期提醒
@Override
public Long getCheckContractCount(Long userId) {
return contractMapper.selectCheckContractCount(userId);
public Long getAuditContractCount(Long userId) {
return contractMapper.selectCountByAudit(userId);
}
@Override
public Long getEndContractCount(Long userId) {
return contractMapper.selectEndContractCount(userId);
public Long getRemindContractCount(Long userId) {
CrmContractConfigDO config = contractConfigService.getContractConfig();
if (config == null || Boolean.FALSE.equals(config.getNotifyEnabled())) {
return 0L;
}
return contractMapper.selectCountByRemind(userId, config);
}
}