Browse Source

回款审批流程

release
周开红 3 months ago
parent
commit
e22b0c6cdc
  1. 87
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/receivable/CrmReceivableDO.java
  2. 15
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/receivable/CrmReceivableMapper.java
  3. 18
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/receivable/CrmReceivableService.java
  4. 79
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/receivable/CrmReceivableServiceImpl.java
  5. 32
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/receivable/listener/CrmReceivableStatusListener.java

87
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/receivable/CrmReceivableDO.java

@ -0,0 +1,87 @@
package cn.iocoder.yudao.module.bpm.dal.dataobject.receivable;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 回款 DO
*
* @author 赤焰
*/
@TableName("crm_receivable")
@KeySequence("crm_receivable_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CrmReceivableDO extends BaseDO {
/**
* ID
*/
@TableId
private Long id;
/**
* 回款编号
*/
private String no;
/**
* 回款计划编号
*
*/
private Long planId;
/**
* 客户编号
*
*/
private Long customerId;
/**
* 合同编号
*
*/
private Long contractId;
/**
* 负责人编号关联 {@link AdminUserRespDTO#getId()}
*/
private Long ownerUserId;
/**
* 回款日期
*/
private LocalDateTime returnTime;
/**
* 回款方式
*
*/
private Integer returnType;
/**
* 计划回款金额单位
*/
private BigDecimal price;
/**
* 备注
*/
private String remark;
/**
* 工作流编号
*
* 关联 ProcessInstance id 属性
*/
private String processInstanceId;
/**
* 审批状态
*
*/
private Integer auditStatus;
}

15
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/receivable/CrmReceivableMapper.java

@ -0,0 +1,15 @@
package cn.iocoder.yudao.module.bpm.dal.mysql.receivable;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.bpm.dal.dataobject.receivable.CrmReceivableDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 回款 Mapper
*
* @author 赤焰
*/
@Mapper
public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> {
}

18
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/receivable/CrmReceivableService.java

@ -0,0 +1,18 @@
package cn.iocoder.yudao.module.bpm.service.receivable;
/**
* CRM 回款 Service 接口
*
* @author 赤焰
*/
public interface CrmReceivableService {
/**
* 更新回款流程审批结果
*
* @param id 回款编号
* @param bpmResult BPM 审批结果
*/
void updateReceivableAuditStatus(Long id, Integer bpmResult);
}

79
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/receivable/CrmReceivableServiceImpl.java

@ -0,0 +1,79 @@
package cn.iocoder.yudao.module.bpm.service.receivable;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.dal.dataobject.receivable.CrmReceivableDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.receivable.CrmReceivableMapper;
import cn.iocoder.yudao.module.bpm.enums.common.CrmAuditStatusEnum;
import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* CRM 回款 Service 实现类
*
* @author 赤焰
*/
@Service
@Validated
@Slf4j
public class CrmReceivableServiceImpl implements CrmReceivableService {
/**
* BPM 合同审批流程标识
*/
public static final String BPM_PROCESS_DEFINITION_KEY = "crm-receivable-audit";
@Resource
private CrmReceivableMapper receivableMapper;
@Resource
private AdminUserApi adminUserApi;
@Resource
private BpmProcessInstanceApi bpmProcessInstanceApi;
@Override
public void updateReceivableAuditStatus(Long id, Integer bpmResult) {
// 1.1 校验存在
CrmReceivableDO receivable = validateReceivableExists(id);
// 1.2 只有审批中可以更新审批结果
if (ObjUtil.notEqual(receivable.getAuditStatus(), CrmAuditStatusEnum.PROCESS.getStatus())) {
log.error("[updateReceivableAuditStatus][receivable({}) 不处于审批中,无法更新审批结果({})]",
receivable.getId(), bpmResult);
throw exception(new ErrorCode(1_020_004_004, "更新回款审核状态失败,原因:回款不是审核中状态"));
}
// 2. 更新回款审批状态
Integer auditStatus = convertBpmResultToAuditStatus(bpmResult);
receivableMapper.updateById(new CrmReceivableDO().setId(id).setAuditStatus(auditStatus));
}
private CrmReceivableDO validateReceivableExists(Long id) {
CrmReceivableDO receivable = receivableMapper.selectById(id);
if (receivable == null) {
throw exception(new ErrorCode(1_020_004_000, "回款不存在"));
}
return receivable;
}
/**
* BPM 审批结果转换
*
* @param bpmResult BPM 审批结果
*/
public static Integer convertBpmResultToAuditStatus(Integer bpmResult) {
Integer auditStatus = BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult) ? CrmAuditStatusEnum.APPROVE.getStatus()
: BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult) ? CrmAuditStatusEnum.REJECT.getStatus()
: BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult) ? BpmTaskStatusEnum.CANCEL.getStatus() : null;
Assert.notNull(auditStatus, "BPM 审批结果({}) 转换失败", bpmResult);
return auditStatus;
}
}

32
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/receivable/listener/CrmReceivableStatusListener.java

@ -0,0 +1,32 @@
package cn.iocoder.yudao.module.bpm.service.receivable.listener;
import cn.iocoder.yudao.module.bpm.event.BpmProcessInstanceStatusEvent;
import cn.iocoder.yudao.module.bpm.event.BpmProcessInstanceStatusEventListener;
import cn.iocoder.yudao.module.bpm.service.receivable.CrmReceivableService;
import cn.iocoder.yudao.module.bpm.service.receivable.CrmReceivableServiceImpl;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* 回款审批的结果的监听器实现类
*
* @author HUIHUI
*/
@Component
public class CrmReceivableStatusListener extends BpmProcessInstanceStatusEventListener {
@Resource
private CrmReceivableService receivableService;
@Override
public String getProcessDefinitionKey() {
return CrmReceivableServiceImpl.BPM_PROCESS_DEFINITION_KEY;
}
@Override
public void onEvent(BpmProcessInstanceStatusEvent event) {
receivableService.updateReceivableAuditStatus(Long.parseLong(event.getBusinessKey()), event.getStatus());
}
}
Loading…
Cancel
Save