buhuazhen
2026-04-22 f088078e626e16b28d69cdbcbf514b30f1dcefe7
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -2,6 +2,7 @@
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
@@ -17,10 +18,13 @@
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import com.ruoyi.account.service.AccountIncomeService;
import com.ruoyi.basic.dto.CustomerPrivatePoolDto;
import com.ruoyi.basic.mapper.CustomerMapper;
import com.ruoyi.basic.mapper.CustomerPrivatePoolMapper;
import com.ruoyi.basic.mapper.ProductMapper;
import com.ruoyi.basic.mapper.ProductModelMapper;
import com.ruoyi.basic.pojo.Customer;
import com.ruoyi.basic.pojo.CustomerPrivatePool;
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.enums.SaleEnum;
import com.ruoyi.common.exception.base.BaseException;
@@ -128,6 +132,8 @@
    @Autowired
    private SysUserMapper sysUserMapper;
    @Autowired
    private CustomerPrivatePoolMapper customerPrivatePoolMapper;
    @Override
    public List<SalesLedger> selectSalesLedgerList(SalesLedgerDto salesLedgerDto) {
@@ -474,14 +480,15 @@
        exportProcessContract.setId(id);
        SalesLedger salesLedger = salesLedgerMapper.selectById(id);
        // 查询客户公司信息
        Customer customer = customerMapper.selectById(salesLedger.getCustomerId());
        CustomerPrivatePoolDto customerPrivatePoolDto = customerPrivatePoolMapper.selectInfo(salesLedger.getCustomerId());
        exportProcessContract.setCreateTime(LocalDateTimeUtil.format(Optional.ofNullable(salesLedger.getExecutionDate()).orElse(LocalDate.now()), "yyyy年MM月dd日"));
        exportProcessContract.setRemark(Optional.ofNullable(salesLedger.getRemarks()).orElse("无")); // 备注
        exportProcessContract.setPlaceOfSinging(Optional.ofNullable(salesLedger.getPlaceOfSinging()).orElse(""));
        // 填写甲方信息
        ExportProcessContractVo.Customer partyA = ExportProcessContractVo.Customer.getCustomer(customer);
        exportProcessContract.setPartyAClientName(customer.getCustomerName());
        ExportProcessContractVo.Customer partyA = ExportProcessContractVo.Customer.getCustomer(customerPrivatePoolDto);
        exportProcessContract.setPartyAClientName(customerPrivatePoolDto.getCustomerName());
        exportProcessContract.setPartyA(partyA);
        // 填写乙方信息
@@ -657,12 +664,13 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int addOrUpdateSalesLedger(SalesLedgerDto salesLedgerDto) {
        try {
            // 1. 校验客户信息
            Customer customer = customerMapper.selectById(salesLedgerDto.getCustomerId());
            CustomerPrivatePoolDto customer = customerPrivatePoolMapper.selectInfo(salesLedgerDto.getCustomerId());
            if (customer == null) {
                throw new BaseException("客户不存在");
            }
            // 必须填写销售合同号
//            Assert.notNull(salesLedgerDto.getSalesContractNo(), "销售合同号不能为空");
            // 2. DTO转Entity
            SalesLedger salesLedger = convertToEntity(salesLedgerDto);
@@ -670,10 +678,12 @@
            salesLedger.setTenantId(customer.getTenantId());
            // 3. 新增或更新主表
            if (salesLedger.getId() == null) {
                String contractNo = generateSalesContractNo();
                // 为空 自动生成
                String contractNo =StrUtil.isBlank(salesLedgerDto.getSalesContractNo())? generateSalesContractNoBy8Date():salesLedgerDto.getSalesContractNo();
                salesLedger.setSalesContractNo(contractNo);
                salesLedgerMapper.insert(salesLedger);
            } else {
                salesLedger.setSalesContractNo(null);
                salesLedgerMapper.updateById(salesLedger);
            }
@@ -689,6 +699,7 @@
                        SalesLedger.class
                );
            }
        try {
            // 5. 迁移临时文件到正式目录
            if (salesLedgerDto.getTempFileIds() != null && !salesLedgerDto.getTempFileIds().isEmpty()) {
@@ -814,6 +825,20 @@
        return entity;
    }
    public String generateSalesContractNoBy8Date(){
        String yyMM = DateUtil.format(new Date(), "yyMM");
        // 查询一个月有多少订单
        Date begin = DateUtil.beginOfMonth(new Date());
        Date end = DateUtil.endOfMonth(new Date());
        LambdaQueryWrapper<SalesLedger> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.between(SalesLedger::getEntryDate, begin, end);
        long count = salesLedgerMapper.selectCount(queryWrapper);
        Long seq = Optional.of(count).orElse(0L) + 1;
        return String.format("%s%04d", yyMM, seq);
    }
    @Transactional(readOnly = true)
    public String generateSalesContractNo() {
        LocalDate currentDate = LocalDate.now();