zhangwencui
8 天以前 f76bf27bf93e523ae4572d9e10e9ca541c324185
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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;
    }
}