package com.ruoyi.sales.service;
|
|
import com.ruoyi.common.enums.PlanStageEnum;
|
import com.ruoyi.common.enums.ReviewStatusEnum;
|
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.projectManagement.mapper.InfoMapper;
|
import com.ruoyi.projectManagement.pojo.Info;
|
import com.ruoyi.sales.dto.BusinessReviewDto;
|
import com.ruoyi.sales.mapper.SalesLedgerMapper;
|
import com.ruoyi.sales.pojo.SalesLedger;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
|
@Service
|
@RequiredArgsConstructor
|
public class BusinessApprovalService {
|
private final SalesLedgerMapper salesLedgerMapper;
|
private final InfoMapper infoMapper;
|
|
@Transactional(rollbackFor = Exception.class)
|
public void submit(Long id) {
|
SalesLedger ledger = requireLedger(id);
|
Integer status = ledger.getBusinessApprovalStatus();
|
if (status != null && status == 2) {
|
throw new ServiceException("该业务已经审批通过");
|
}
|
ledger.setBusinessApprovalStatus(1);
|
ledger.setBusinessApprovalRemark(null);
|
ledger.setBusinessSubmittedTime(LocalDateTime.now());
|
salesLedgerMapper.updateById(ledger);
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
public Long review(BusinessReviewDto dto) {
|
if (dto.getSalesLedgerId() == null || dto.getApproved() == null) {
|
throw new ServiceException("审批参数不完整");
|
}
|
SalesLedger ledger = requireLedger(dto.getSalesLedgerId());
|
if (ledger.getBusinessApprovalStatus() == null || ledger.getBusinessApprovalStatus() != 1) {
|
throw new ServiceException("只有待审批业务可以审核");
|
}
|
ledger.setBusinessApprovedBy(SecurityUtils.getUserId());
|
ledger.setBusinessApprovedName(SecurityUtils.getLoginUser().getNickName());
|
ledger.setBusinessApprovedTime(LocalDateTime.now());
|
ledger.setBusinessApprovalRemark(dto.getRemark());
|
if (!dto.getApproved()) {
|
ledger.setBusinessApprovalStatus(3);
|
salesLedgerMapper.updateById(ledger);
|
return null;
|
}
|
Long projectId = ledger.getProjectManagementInfoId();
|
if (projectId == null) {
|
projectId = createProject(ledger, dto.getPlanId());
|
ledger.setProjectManagementInfoId(projectId);
|
}
|
ledger.setBusinessApprovalStatus(2);
|
salesLedgerMapper.updateById(ledger);
|
return projectId;
|
}
|
|
private Long createProject(SalesLedger ledger, Long selectedPlanId) {
|
Info info = new Info();
|
info.setNo("XM" + LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE)
|
+ String.format("%06d", ledger.getId()));
|
info.setTitle(ledger.getProjectName() == null || ledger.getProjectName().isBlank()
|
? ledger.getCustomerName() + "申报项目" : ledger.getProjectName());
|
info.setClientId(ledger.getCustomerId());
|
info.setClientName(ledger.getCustomerName());
|
info.setEstablishTime(LocalDate.now());
|
info.setSource("业务生成");
|
info.setSourceBusinessId(ledger.getId());
|
info.setCurrentPhase("未开始");
|
info.setSalesmanName(ledger.getSalesman());
|
info.setIsDelete(0);
|
info.setReviewStatus(ReviewStatusEnum.APPROVED.getCode());
|
info.setStatus(PlanStageEnum.TO_BEGIN.getCode());
|
info.setRemark(ledger.getRemarks());
|
info.setAttachment(ledger.getAttachmentMaterials());
|
info.setDeptId(ledger.getDeptId());
|
infoMapper.insert(info);
|
return info.getId();
|
}
|
|
private SalesLedger requireLedger(Long id) {
|
SalesLedger ledger = salesLedgerMapper.selectById(id);
|
if (ledger == null) {
|
throw new ServiceException("业务记录不存在");
|
}
|
return ledger;
|
}
|
}
|