wujianwei
7 天以前 156a530f070f41dabb89cd5934e581d83fb384c3
service/src/main/java/com/ruoyi/cwgl/controller/ReceivableBillManagementController.java
@@ -26,9 +26,12 @@
import com.ruoyi.cwgl.domain.InvoiceManage;
import com.ruoyi.cwgl.domain.ReceivableBillManagement;
import com.ruoyi.cwgl.domain.ReceivableInvoiceBusiness;
import com.ruoyi.cwgl.domain.dto.BillAuditDto;
import com.ruoyi.cwgl.domain.dto.ReceivableAuditLog;
import com.ruoyi.cwgl.service.IInvoiceManageService;
import com.ruoyi.cwgl.service.IReceivableBillManagementService;
import com.ruoyi.cwgl.service.IReceivableInvoiceBusinessService;
import com.ruoyi.cwgl.service.ITmsAuditLogPushService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
@@ -50,6 +53,9 @@
    @Autowired
    private IReceivableInvoiceBusinessService receivableInvoiceBusinessService;
    @Autowired
    private ITmsAuditLogPushService tmsAuditLogPushService;
@@ -245,5 +251,111 @@
        receivableBillManagementService.accountAnalysisExport(receivableBillManagement,exportKey);
        return AjaxResult.success("导出请求成功,请稍后点击下载...!");
    }
    /**
     * 应收账单审核接口
     * @param billAuditDto 审核数据传输对象
     * @return 审核结果
     */
    @PreAuthorize("@ss.hasPermi('cwgl:receivableBillManagement:audit')")
    @Log(title = "应收账单管理", businessType = BusinessType.UPDATE)
    @PutMapping("/audit")
    public AjaxResult auditReceivableBill(@RequestBody BillAuditDto billAuditDto) {
        try {
            // 1. 查询应收账单
            ReceivableBillManagement bill = receivableBillManagementService.selectReceivableBillManagementById(billAuditDto.getBillId());
            if (bill == null) {
                return AjaxResult.error("应收账单不存在,ID:" + billAuditDto.getBillId());
            }
            // 2. 记录审核前状态
            Integer beforeAuditStatus = bill.getAuditStatus();
            // 3. 更新审核状态
            bill.setAuditStatus(billAuditDto.getAuditResult());
            bill.setUpdateTime(new java.util.Date());
            bill.setUpdateBy(getUsername());
            // 4. 更新账单
            int rows = receivableBillManagementService.updateReceivableBillManagement(bill);
            if (rows <= 0) {
                return AjaxResult.error("更新应收账单审核状态失败");
            }
            // 5. 记录审核日志
            saveReceivableAuditLog(billAuditDto, bill, beforeAuditStatus);
            // 6. 如果来源系统是TMS,推送审核日志到TMS
            if (tmsAuditLogPushService.isReceivableBillFromTms(bill.getSystemNo())) {
                try {
                    ReceivableAuditLog auditLog = createReceivableAuditLog(billAuditDto, bill, beforeAuditStatus);
                    tmsAuditLogPushService.pushReceivableAuditLog(auditLog);
                } catch (Exception e) {
                    logger.error("推送应收账单审核日志到TMS失败,账单ID:{}", bill.getId(), e);
                    // 推送失败不影响主流程,只记录日志
                }
            }
            return AjaxResult.success("应收账单审核成功");
        } catch (Exception e) {
            return AjaxResult.error("应收账单审核失败:" + e.getMessage());
        }
    }
    /**
     * 保存应收账单审核日志
     */
    private void saveReceivableAuditLog(BillAuditDto billAuditDto, ReceivableBillManagement bill, Integer beforeAuditStatus) {
        // 这里需要实现日志记录逻辑
        // 可以使用原有的日志服务或系统日志
        logger.info("应收账单审核日志 - 账单ID:{},账单编号:{},审核前状态:{},审核结果:{},审核意见:{}",
            bill.getId(), bill.getSystemNo(),
            getAuditStatusText(beforeAuditStatus),
            getAuditResultText(billAuditDto.getAuditResult()),
            billAuditDto.getAuditComment() != null ? billAuditDto.getAuditComment() : "无");
    }
    /**
     * 获取审核状态文本
     */
    private String getAuditStatusText(Integer auditStatus) {
        switch (auditStatus) {
            case 0: return "待审核";
            case 1: return "审核通过";
            case 2: return "审核驳回";
            default: return "未知状态";
        }
    }
    /**
     * 获取审核结果文本
     */
    private String getAuditResultText(Integer auditResult) {
        switch (auditResult) {
            case 1: return "通过";
            case 2: return "驳回";
            default: return "未知结果";
        }
    }
    /**
     * 创建应收账单审核日志对象
     */
    private ReceivableAuditLog createReceivableAuditLog(BillAuditDto billAuditDto, ReceivableBillManagement bill, Integer beforeAuditStatus) {
        ReceivableAuditLog auditLog = new ReceivableAuditLog();
        auditLog.setBillId(bill.getId());
        auditLog.setBillNo(bill.getSystemNo());
        auditLog.setBillName(bill.getBillName());
        auditLog.setCustomerName(bill.getCustomerName());
        auditLog.setSourceSystem(tmsAuditLogPushService.getReceivableBillSourceSystem(bill.getSystemNo()));
        auditLog.setBeforeAuditStatus(beforeAuditStatus);
        auditLog.setAuditResult(billAuditDto.getAuditResult());
        auditLog.setAuditComment(billAuditDto.getAuditComment());
        auditLog.setAuditUser(getUsername());
        auditLog.setAuditTime(new java.util.Date());
        auditLog.setTotalAmount(bill.getTotalAmount());
        return auditLog;
    }
    
}