wujianwei
7 天以前 156a530f070f41dabb89cd5934e581d83fb384c3
service/src/main/java/com/ruoyi/cwgl/controller/PayableBillManagementController.java
@@ -22,9 +22,12 @@
import com.ruoyi.cwgl.domain.InvoiceManage;
import com.ruoyi.cwgl.domain.PayableBillManagement;
import com.ruoyi.cwgl.domain.PayableInvoiceBusiness;
import com.ruoyi.cwgl.domain.dto.BillAuditDto;
import com.ruoyi.cwgl.domain.dto.PayableAuditLog;
import com.ruoyi.cwgl.service.IInvoiceManageService;
import com.ruoyi.cwgl.service.IPayableBillManagementService;
import com.ruoyi.cwgl.service.IPayableInvoiceBusinessService;
import com.ruoyi.cwgl.service.ITmsAuditLogPushService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
@@ -46,6 +49,9 @@
    @Autowired
    private IPayableInvoiceBusinessService payableInvoiceBusinessService;
    @Autowired
    private ITmsAuditLogPushService tmsAuditLogPushService;
@@ -167,4 +173,110 @@
        
        return AjaxResult.success(invoicedAmount);
    }
    /**
     * 应付账单审核接口
     * @param billAuditDto 审核数据传输对象
     * @return 审核结果
     */
    @PreAuthorize("@ss.hasPermi('cwgl:payableBillManagement:audit')")
    @Log(title = "应付账单管理", businessType = BusinessType.UPDATE)
    @PutMapping("/audit")
    public AjaxResult auditPayableBill(@RequestBody BillAuditDto billAuditDto) {
        try {
            // 1. 查询应付账单
            PayableBillManagement bill = payableBillManagementService.selectPayableBillManagementById(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 = payableBillManagementService.updatePayableBillManagement(bill);
            if (rows <= 0) {
                return AjaxResult.error("更新应付账单审核状态失败");
            }
            // 5. 记录审核日志
            savePayableAuditLog(billAuditDto, bill, beforeAuditStatus);
            // 6. 如果来源系统是TMS,推送审核日志到TMS
            if (tmsAuditLogPushService.isPayableBillFromTms(bill.getSystemNo())) {
                try {
                    PayableAuditLog auditLog = createPayableAuditLog(billAuditDto, bill, beforeAuditStatus);
                    tmsAuditLogPushService.pushPayableAuditLog(auditLog);
                } catch (Exception e) {
                    logger.error("推送应付账单审核日志到TMS失败,账单ID:{}", bill.getId(), e);
                    // 推送失败不影响主流程,只记录日志
                }
            }
            return AjaxResult.success("应付账单审核成功");
        } catch (Exception e) {
            return AjaxResult.error("应付账单审核失败:" + e.getMessage());
        }
    }
    /**
     * 保存应付账单审核日志
     */
    private void savePayableAuditLog(BillAuditDto billAuditDto, PayableBillManagement 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 PayableAuditLog createPayableAuditLog(BillAuditDto billAuditDto, PayableBillManagement bill, Integer beforeAuditStatus) {
        PayableAuditLog auditLog = new PayableAuditLog();
        auditLog.setBillId(bill.getId());
        auditLog.setBillNo(bill.getSystemNo());
        auditLog.setBillName(bill.getBillName());
        auditLog.setSupplierName(bill.getSupplierName());
        auditLog.setSourceSystem(tmsAuditLogPushService.getPayableBillSourceSystem(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;
    }
}