From ba87fd72f14c5ed0caf14e9d8ff116d254a8c113 Mon Sep 17 00:00:00 2001
From: zhangback <zhangback@163.com>
Date: 星期四, 16 四月 2026 10:11:32 +0800
Subject: [PATCH] 新增线上配置

---
 tms/src/main/java/com/ruoyi/tms/service/impl/TmsReceivableFeeServiceImpl.java |  531 ++--------------------------------------------------------
 1 files changed, 24 insertions(+), 507 deletions(-)

diff --git a/tms/src/main/java/com/ruoyi/tms/service/impl/TmsReceivableFeeServiceImpl.java b/tms/src/main/java/com/ruoyi/tms/service/impl/TmsReceivableFeeServiceImpl.java
index 14ce3dd..0eaae24 100644
--- a/tms/src/main/java/com/ruoyi/tms/service/impl/TmsReceivableFeeServiceImpl.java
+++ b/tms/src/main/java/com/ruoyi/tms/service/impl/TmsReceivableFeeServiceImpl.java
@@ -13,6 +13,7 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.redis.RedisCache;
@@ -173,521 +174,15 @@
         });
     }
 
-    /**
-     * 瀵煎嚭瀵硅处鍗曚竴寮忓鑱旀牸寮�
-     *
-     * @param tmsReceivableFee 搴旀敹璐圭敤鏌ヨ鏉′欢
-     * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
-     */
-    @DataSource(DataSourceType.SLAVE)
-    @Async
-    @Override
-    public void exportArBillFormat(TmsReceivableFee tmsReceivableFee, String exportKey) {
-        String fileName = ExcelUtil.encodeFileName("瀵硅处鍗�");
 
-        // 璁剧疆褰撳墠浠诲姟涓�"涓嬭浇涓�"鐘舵��
-        DownloadExportUtil.deleteDownloadFile(redisCache, exportKey, "0");
 
-        try {
-            // 鎵ц瀵煎嚭骞惰幏鍙栨枃浠跺悕
-            fileName = exportArBillData(fileName, tmsReceivableFee);
-            // 璁剧疆涓嬭浇瀹屾垚鐘舵��
-            DownloadExportUtil.setDownloadFile(redisCache, exportKey, fileName);
-            logger.info("Export completed for key: {}, file: {}", exportKey, fileName);
-        } catch (Exception e) {
-            logger.error("Export failed for key: {}, error: {}", exportKey, e.getMessage(), e);
-            DownloadExportUtil.deleteDownloadFile(redisCache, exportKey, "1"); // 璁剧疆澶辫触鐘舵��
-            throw e;
-        }
-    }
 
-    /**
-     * 瀵煎嚭瀵硅处鍗曚竴寮忓鑱旀暟鎹�
-     *
-     * @param fileName 鏂囦欢鍚�
-     * @param tmsReceivableFee 搴旀敹璐圭敤鏌ヨ鏉′欢
-     * @return 瀵煎嚭鍚庣殑鏂囦欢鍚�
-     */
-    protected String exportArBillData(String fileName, TmsReceivableFee tmsReceivableFee) {
-        try (SXSSFWorkbook workbook = new SXSSFWorkbook(1000)) {
-            // 鍒涘缓宸ヤ綔琛�
-            SXSSFSheet sheet = workbook.createSheet("瀵硅处鍗�");
-            
-            // 鍒涘缓鏍峰紡
-            Map<String, CellStyle> styles = createArBillStyles(workbook);
-            
-            // 鏌ヨ鏁版嵁
-            List<TmsReceivableFee> feeList = selectTmsReceivableFeeList(tmsReceivableFee);
-            
-            // 鏀堕泦鎵�鏈夎垂鐢ㄥ悕绉帮紝鐢ㄤ簬鍔ㄦ�佺敓鎴愬垪
-            Set<String> feeNames = new HashSet<>();
-            for (TmsReceivableFee fee : feeList) {
-                List<TmsReceivableFeeItem> items = tmsReceivableFeeItemMapper.selectTmsReceivableFeeItemList(new TmsReceivableFeeItem() {
-                    {
-                        setHeadId(fee.getId());
-                    }
-                });
-                for (TmsReceivableFeeItem item : items) {
-                    feeNames.add(item.getFeeName());
-                }
-            }
-            
-            // 灏嗚垂鐢ㄥ悕绉拌浆鎹负鍒楄〃锛屼繚鎸侀『搴�
-            List<String> feeNameList = new ArrayList<>(feeNames);
-            
-            // 鍩虹鍒楁暟锛堝簭鍙枫�佽璐ф棩鏈熴�佽璐х偣銆佸嵏璐х偣銆佽溅鐗屻�佸瀷鍙凤級
-            int baseColumns = 6;
-            // 澶囨敞鍒椾綅缃�
-            int remarkColumn = baseColumns + feeNameList.size();
-            
-            // 璁剧疆鍒楀
-            sheet.setColumnWidth(0, 5000);  // 搴忓彿
-            sheet.setColumnWidth(1, 5000);  // 瑁呰揣鏃ユ湡
-            sheet.setColumnWidth(2, 8000);  // 瑁呰揣鐐�
-            sheet.setColumnWidth(3, 8000);  // 鍗歌揣鐐�
-            sheet.setColumnWidth(4, 5000);  // 杞︾墝
-            sheet.setColumnWidth(5, 5000);  // 鍨嬪彿
-            
-            // 璁剧疆璐圭敤鍒楀
-            for (int i = 0; i < feeNameList.size(); i++) {
-                sheet.setColumnWidth(baseColumns + i, 6000);
-            }
-            
-            sheet.setColumnWidth(remarkColumn, 10000); // 澶囨敞
-            
-            // 鏍囬鍖哄煙
-            createTitleArea(sheet, styles, tmsReceivableFee);
-            
-            // 琛ㄥご
-            createDynamicTableHeader(sheet, styles, feeNameList, baseColumns, remarkColumn);
-            
-            // 鏁版嵁鍖哄煙
-            int startRow = 4;
-            // 璐圭敤鍚堣鏄犲皠
-            Map<String, BigDecimal> feeTotals = new HashMap<>();
-            for (String feeName : feeNameList) {
-                feeTotals.put(feeName, BigDecimal.ZERO);
-            }
-            
-            for (int i = 0; i < feeList.size(); i++) {
-                TmsReceivableFee fee = feeList.get(i);
-                Row row = sheet.createRow(startRow + i);
-                
-                // 搴忓彿
-                Cell cell0 = row.createCell(0);
-                cell0.setCellValue(i + 1);
-                cell0.setCellStyle(styles.get("data"));
-                
-                // 瑁呰揣鏃ユ湡
-                Cell cell1 = row.createCell(1);
-                if (fee.getDispatchConfirmTime() != null) {
-                    cell1.setCellValue(DateUtils.parseDateToStr("yyyy-MM-dd", fee.getDispatchConfirmTime()));
-                }
-                cell1.setCellStyle(styles.get("data"));
-                
-                // 瑁呰揣鐐�
-                Cell cell2 = row.createCell(2);
-                cell2.setCellValue("" + (fee.getProjectName() != null ? fee.getProjectName() : ""));
-                cell2.setCellStyle(styles.get("data"));
-                
-                // 鍗歌揣鐐�
-                Cell cell3 = row.createCell(3);
-                cell3.setCellValue("" + (fee.getCustomerName() != null ? fee.getCustomerName() : ""));
-                cell3.setCellStyle(styles.get("data"));
-                
-                // 杞︾墝
-                Cell cell4 = row.createCell(4);
-                cell4.setCellValue("");
-                cell4.setCellStyle(styles.get("data"));
-                
-                // 鍨嬪彿
-                Cell cell5 = row.createCell(5);
-                cell5.setCellValue("");
-                cell5.setCellStyle(styles.get("data"));
-                
-                // 鑾峰彇璐圭敤鏄庣粏
-                List<TmsReceivableFeeItem> items = tmsReceivableFeeItemMapper.selectTmsReceivableFeeItemList(new TmsReceivableFeeItem() {
-                    {
-                        setHeadId(fee.getId());
-                    }
-                });
-                
-                // 鏋勫缓璐圭敤鍚嶇О鍒伴噾棰濈殑鏄犲皠
-                Map<String, BigDecimal> feeMap = new HashMap<>();
-                for (TmsReceivableFeeItem item : items) {
-                    feeMap.put(item.getFeeName(), item.getRegisterAmount());
-                }
-                
-                // 濉厖璐圭敤鍒�
-                for (int j = 0; j < feeNameList.size(); j++) {
-                    String feeName = feeNameList.get(j);
-                    Cell cell = row.createCell(baseColumns + j);
-                    BigDecimal amount = feeMap.getOrDefault(feeName, BigDecimal.ZERO);
-                    cell.setCellValue(amount.doubleValue());
-                    cell.setCellStyle(styles.get("data"));
-                    
-                    // 绱鍚堣
-                    feeTotals.put(feeName, feeTotals.get(feeName).add(amount));
-                }
-                
-                // 澶囨敞
-                Cell remarkCell = row.createCell(remarkColumn);
-                remarkCell.setCellValue("" + (fee.getDispatchNo() != null ? fee.getDispatchNo() : ""));
-                remarkCell.setCellStyle(styles.get("data"));
-            }
-            
-            // 灏忚琛�
-            int subTotalRow = startRow + feeList.size();
-            Row subTotal = sheet.createRow(subTotalRow);
-            Cell subTotalCell = subTotal.createCell(2);
-            subTotalCell.setCellValue("灏忚");
-            subTotalCell.setCellStyle(styles.get("total"));
-            sheet.addMergedRegion(new CellRangeAddress(subTotalRow, subTotalRow, 2, 5));
-            
-            // 濉厖璐圭敤灏忚
-            for (int j = 0; j < feeNameList.size(); j++) {
-                String feeName = feeNameList.get(j);
-                Cell cell = subTotal.createCell(baseColumns + j);
-                cell.setCellValue(feeTotals.get(feeName).doubleValue());
-                cell.setCellStyle(styles.get("total"));
-            }
-            
-            // 鍚堣琛�
-            int totalRow = subTotalRow + 1;
-            Row total = sheet.createRow(totalRow);
-            Cell totalCell = total.createCell(2);
-            totalCell.setCellValue("鍚堣(CNB)");
-            totalCell.setCellStyle(styles.get("total"));
-            sheet.addMergedRegion(new CellRangeAddress(totalRow, totalRow, 2, 5));
-            
-            // 濉厖璐圭敤鍚堣
-            for (int j = 0; j < feeNameList.size(); j++) {
-                String feeName = feeNameList.get(j);
-                Cell cell = total.createCell(baseColumns + j);
-                cell.setCellValue(feeTotals.get(feeName).doubleValue());
-                cell.setCellStyle(styles.get("total"));
-            }
-            
-            // 澶囨敞璇存槑
-            createNotesArea(sheet, styles, totalRow + 1);
-            
-            // 璐︽埛淇℃伅
-            createAccountInfo(sheet, styles, totalRow + 4);
-            
-            // 绛惧瓧鐩栫珷鍖哄煙
-            createSignatureArea(sheet, styles, totalRow + 8);
-            
-            // 淇濆瓨鏂囦欢
-            String path = RuoYiConfig.getDownloadPath() + fileName;
-            File file = new File(path);
-            File parentFile = file.getParentFile();
-            if (!parentFile.exists()) {
-                parentFile.mkdirs();
-            }
-            
-            try (FileOutputStream fos = new FileOutputStream(file)) {
-                workbook.write(fos);
-            }
-            
-            return fileName;
-        } catch (Exception e) {
-            logger.error("Export AR bill format failed: {}", e.getMessage(), e);
-            throw new ServiceException("Export failed!");
-        }
-    }
 
-    /**
-     * 鍒涘缓瀵硅处鍗曚竴寮忓鑱旀牱寮�
-     *
-     * @param workbook 宸ヤ綔绨�
-     * @return 鏍峰紡鏄犲皠
-     */
-    private Map<String, CellStyle> createArBillStyles(SXSSFWorkbook workbook) {
-        Map<String, CellStyle> styles = new HashMap<>();
-        
-        // 鏍囬鏍峰紡
-        CellStyle titleStyle = workbook.createCellStyle();
-        titleStyle.setAlignment(HorizontalAlignment.CENTER);
-        titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
-        Font titleFont = workbook.createFont();
-        titleFont.setFontName("Arial");
-        titleFont.setFontHeightInPoints((short) 16);
-        titleFont.setBold(true);
-        titleStyle.setFont(titleFont);
-        styles.put("title", titleStyle);
-        
-        // 琛ㄥご鏍峰紡
-        CellStyle headerStyle = workbook.createCellStyle();
-        headerStyle.setAlignment(HorizontalAlignment.CENTER);
-        headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
-        headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
-        headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
-        Font headerFont = workbook.createFont();
-        headerFont.setFontName("Arial");
-        headerFont.setFontHeightInPoints((short) 10);
-        headerFont.setBold(true);
-        headerStyle.setFont(headerFont);
-        setDefaultBorders(headerStyle);
-        styles.put("header", headerStyle);
-        
-        // 鏁版嵁鏍峰紡
-        CellStyle dataStyle = workbook.createCellStyle();
-        dataStyle.setAlignment(HorizontalAlignment.CENTER);
-        dataStyle.setVerticalAlignment(VerticalAlignment.CENTER);
-        Font dataFont = workbook.createFont();
-        dataFont.setFontName("Arial");
-        dataFont.setFontHeightInPoints((short) 10);
-        dataStyle.setFont(dataFont);
-        setDefaultBorders(dataStyle);
-        styles.put("data", dataStyle);
-        
-        // 鍚堣鏍峰紡
-        CellStyle totalStyle = workbook.createCellStyle();
-        totalStyle.setAlignment(HorizontalAlignment.CENTER);
-        totalStyle.setVerticalAlignment(VerticalAlignment.CENTER);
-        totalStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
-        totalStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
-        Font totalFont = workbook.createFont();
-        totalFont.setFontName("Arial");
-        totalFont.setFontHeightInPoints((short) 10);
-        totalFont.setBold(true);
-        totalStyle.setFont(totalFont);
-        setDefaultBorders(totalStyle);
-        styles.put("total", totalStyle);
-        
-        // 鏅�氭枃鏈牱寮�
-        CellStyle textStyle = workbook.createCellStyle();
-        textStyle.setAlignment(HorizontalAlignment.LEFT);
-        textStyle.setVerticalAlignment(VerticalAlignment.CENTER);
-        Font textFont = workbook.createFont();
-        textFont.setFontName("Arial");
-        textFont.setFontHeightInPoints((short) 10);
-        textStyle.setFont(textFont);
-        styles.put("text", textStyle);
-        
-        return styles;
-    }
 
-    /**
-     * 璁剧疆榛樿杈规
-     *
-     * @param style 鍗曞厓鏍兼牱寮�
-     */
-    private void setDefaultBorders(CellStyle style) {
-        style.setBorderRight(BorderStyle.THIN);
-        style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
-        style.setBorderLeft(BorderStyle.THIN);
-        style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
-        style.setBorderTop(BorderStyle.THIN);
-        style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
-        style.setBorderBottom(BorderStyle.THIN);
-        style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
-    }
 
-    /**
-     * 鍒涘缓鏍囬鍖哄煙
-     *
-     * @param sheet 宸ヤ綔琛�
-     * @param styles 鏍峰紡鏄犲皠
-     * @param tmsReceivableFee 搴旀敹璐圭敤鏌ヨ鏉′欢
-     */
-    private void createTitleArea(SXSSFSheet sheet, Map<String, CellStyle> styles, TmsReceivableFee tmsReceivableFee) {
-        // 鏍囬琛�
-        Row titleRow = sheet.createRow(0);
-        titleRow.setHeightInPoints(30);
-        Cell titleCell = titleRow.createCell(0);
-        titleCell.setCellValue("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
-        titleCell.setCellStyle(styles.get("title"));
-        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 9));
-        
-        // 瀵硅处鍗曡
-        Row billRow = sheet.createRow(1);
-        billRow.setHeightInPoints(20);
-        Cell toCell = billRow.createCell(0);
-        toCell.setCellValue("TO: XXXXXXXXXXXXXXXXXXXXXXXXXXX");
-        toCell.setCellStyle(styles.get("text"));
-        
-        Cell billTitleCell = billRow.createCell(3);
-        billTitleCell.setCellValue("2025骞�06鏈堝璐﹀崟");
-        billTitleCell.setCellStyle(styles.get("text"));
-        sheet.addMergedRegion(new CellRangeAddress(1, 1, 3, 6));
-        
-        // 鍏徃淇℃伅琛�
-        Row companyRow = sheet.createRow(2);
-        companyRow.setHeightInPoints(20);
-        Cell fromCell = companyRow.createCell(0);
-        fromCell.setCellValue("FROM:鐝犳捣甯傛眹鐣呬氦閫氭姇璧勬湁闄愬叕鍙�");
-        fromCell.setCellStyle(styles.get("text"));
-    }
 
-    /**
-     * 鍒涘缓鍔ㄦ�佽〃鏍艰〃澶�
-     *
-     * @param sheet 宸ヤ綔琛�
-     * @param styles 鏍峰紡鏄犲皠
-     * @param feeNameList 璐圭敤鍚嶇О鍒楄〃
-     * @param baseColumns 鍩虹鍒楁暟
-     * @param remarkColumn 澶囨敞鍒椾綅缃�
-     */
-    private void createDynamicTableHeader(SXSSFSheet sheet, Map<String, CellStyle> styles, List<String> feeNameList, int baseColumns, int remarkColumn) {
-        Row headerRow = sheet.createRow(3);
-        headerRow.setHeightInPoints(25);
-        
-        // 鍩虹鍒�
-        String[] baseHeaders = {"搴忓彿", "瑁呰揣鏃ユ湡", "瑁呰揣鐐�", "鍗歌揣鐐�", "杞︾墝", "鍨嬪彿"};
-        for (int i = 0; i < baseHeaders.length; i++) {
-            Cell cell = headerRow.createCell(i);
-            cell.setCellValue(baseHeaders[i]);
-            cell.setCellStyle(styles.get("header"));
-        }
-        
-        // 璐圭敤鍒�
-        for (int i = 0; i < feeNameList.size(); i++) {
-            Cell cell = headerRow.createCell(baseColumns + i);
-            cell.setCellValue(feeNameList.get(i) + "(浜烘皯甯�)");
-            cell.setCellStyle(styles.get("header"));
-        }
-        
-        // 澶囨敞鍒�
-        Cell remarkCell = headerRow.createCell(remarkColumn);
-        remarkCell.setCellValue("澶囨敞");
-        remarkCell.setCellStyle(styles.get("header"));
-    }
 
-    /**
-     * 鍒涘缓琛ㄦ牸琛ㄥご锛堜繚鐣欏師鏈夋柟娉曪紝鐢ㄤ簬鍏煎锛�
-     *
-     * @param sheet 宸ヤ綔琛�
-     * @param styles 鏍峰紡鏄犲皠
-     */
-    private void createTableHeader(SXSSFSheet sheet, Map<String, CellStyle> styles) {
-        Row headerRow = sheet.createRow(3);
-        headerRow.setHeightInPoints(25);
-        
-        String[] headers = {"搴忓彿", "瑁呰揣鏃ユ湡", "瑁呰揣鐐�", "鍗歌揣鐐�", "杞︾墝", "鍨嬪彿", "杩愯垂(浜烘皯甯�)", "鏃犵紳璐�(浜烘皯甯�)", "棣欐腐娓呭叧璐�(浜烘皯甯�)", "澶囨敞"};
-        for (int i = 0; i < headers.length; i++) {
-            Cell cell = headerRow.createCell(i);
-            cell.setCellValue(headers[i]);
-            cell.setCellStyle(styles.get("header"));
-        }
-    }
 
-    /**
-     * 鍒涘缓澶囨敞璇存槑鍖哄煙
-     *
-     * @param sheet 宸ヤ綔琛�
-     * @param styles 鏍峰紡鏄犲皠
-     * @param startRow 璧峰琛�
-     */
-    private void createNotesArea(SXSSFSheet sheet, Map<String, CellStyle> styles, int startRow) {
-        Row note1Row = sheet.createRow(startRow);
-        Cell note1Cell = note1Row.createCell(0);
-        note1Cell.setCellValue("1.渚濇嵁鍚堝悓鐩稿叧瑙勫畾锛岃吹鍙搁渶鍚戞垜鍙告敮浠橈骏锛堝ぇ鍐欓噾棰濓細锛夌殑璐圭敤锛岃璐靛徃鍙婃椂瀹夋帓鏀粯銆�");
-        note1Cell.setCellStyle(styles.get("text"));
-        sheet.addMergedRegion(new CellRangeAddress(startRow, startRow, 0, 9));
-        
-        Row note2Row = sheet.createRow(startRow + 1);
-        Cell note2Cell = note2Row.createCell(0);
-        note2Cell.setCellValue("2.浼犵湡浠朵笌鍘熶欢璧峰悓绛夋硶寰嬫晥鍔涖��");
-        note2Cell.setCellStyle(styles.get("text"));
-        sheet.addMergedRegion(new CellRangeAddress(startRow + 1, startRow + 1, 0, 9));
-    }
-
-    /**
-     * 鍒涘缓璐︽埛淇℃伅鍖哄煙
-     *
-     * @param sheet 宸ヤ綔琛�
-     * @param styles 鏍峰紡鏄犲皠
-     * @param startRow 璧峰琛�
-     */
-    private void createAccountInfo(SXSSFSheet sheet, Map<String, CellStyle> styles, int startRow) {
-        Row accountTitleRow = sheet.createRow(startRow);
-        Cell accountTitleCell = accountTitleRow.createCell(0);
-        accountTitleCell.setCellValue("鐑﹁鏍稿纭骞惰浆鑷虫垜鍙稿涓嬪笎鍙凤細");
-        accountTitleCell.setCellStyle(styles.get("text"));
-        sheet.addMergedRegion(new CellRangeAddress(startRow, startRow, 0, 9));
-        
-        Row bankRow = sheet.createRow(startRow + 1);
-        Cell bankCell = bankRow.createCell(0);
-        bankCell.setCellValue("寮�鎴烽摱琛�:涓浗鍐滀笟鍙戝睍閾惰鐝犳捣甯傚垎琛�");
-        bankCell.setCellStyle(styles.get("text"));
-        sheet.addMergedRegion(new CellRangeAddress(startRow + 1, startRow + 1, 0, 9));
-        
-        Row accountRow = sheet.createRow(startRow + 2);
-        Cell accountCell = accountRow.createCell(0);
-        accountCell.setCellValue("璐﹀彿:20344990100000422001");
-        accountCell.setCellStyle(styles.get("text"));
-        sheet.addMergedRegion(new CellRangeAddress(startRow + 2, startRow + 2, 0, 9));
-        
-        Row nameRow = sheet.createRow(startRow + 3);
-        Cell nameCell = nameRow.createCell(0);
-        nameCell.setCellValue("鎴峰悕:鐝犳捣甯傛眹鐣呬氦閫氭姇璧勬湁闄愬叕鍙�");
-        nameCell.setCellStyle(styles.get("text"));
-        sheet.addMergedRegion(new CellRangeAddress(startRow + 3, startRow + 3, 0, 9));
-    }
-
-    /**
-     * 鍒涘缓绛惧瓧鐩栫珷鍖哄煙
-     *
-     * @param sheet 宸ヤ綔琛�
-     * @param styles 鏍峰紡鏄犲皠
-     * @param startRow 璧峰琛�
-     */
-    private void createSignatureArea(SXSSFSheet sheet, Map<String, CellStyle> styles, int startRow) {
-        Row payerRow = sheet.createRow(startRow);
-        Cell payerCell = payerRow.createCell(0);
-        payerCell.setCellValue("浠樻鍗曚綅锛堢敳鏂癸級锛歑XXXXXXXXXXXXX");
-        payerCell.setCellStyle(styles.get("text"));
-        
-        Cell payeeCell = payerRow.createCell(6);
-        payeeCell.setCellValue("鏀舵鍗曚綅锛堜箼鏂癸級锛氱彔娴峰競姹囩晠浜ら�氭姇璧勬湁闄愬叕鍙�");
-        payeeCell.setCellStyle(styles.get("text"));
-        
-        Row creatorRow = sheet.createRow(startRow + 1);
-        Cell creatorCell = creatorRow.createCell(0);
-        creatorCell.setCellValue("鍒惰〃浜哄憳锛�");
-        creatorCell.setCellStyle(styles.get("text"));
-        
-        Cell creatorCell2 = creatorRow.createCell(6);
-        creatorCell2.setCellValue("鍒惰〃浜哄憳锛�");
-        creatorCell2.setCellStyle(styles.get("text"));
-        
-        Row checkerRow = sheet.createRow(startRow + 2);
-        Cell checkerCell = checkerRow.createCell(0);
-        checkerCell.setCellValue("瀹℃牳浜哄憳锛�");
-        checkerCell.setCellStyle(styles.get("text"));
-        
-        Cell checkerCell2 = checkerRow.createCell(6);
-        checkerCell2.setCellValue("瀹℃牳浜哄憳锛�");
-        checkerCell2.setCellStyle(styles.get("text"));
-        
-        Row reviewerRow = sheet.createRow(startRow + 3);
-        Cell reviewerCell = reviewerRow.createCell(0);
-        reviewerCell.setCellValue("澶嶆牳浜哄憳锛�");
-        reviewerCell.setCellStyle(styles.get("text"));
-        
-        Cell reviewerCell2 = reviewerRow.createCell(6);
-        reviewerCell2.setCellValue("澶嶆牳浜哄憳锛�");
-        reviewerCell2.setCellStyle(styles.get("text"));
-        
-        Row stampRow = sheet.createRow(startRow + 4);
-        Cell stampCell = stampRow.createCell(0);
-        stampCell.setCellValue("鐩栫珷锛�");
-        stampCell.setCellStyle(styles.get("text"));
-        
-        Cell stampCell2 = stampRow.createCell(6);
-        stampCell2.setCellValue("鐩栫珷锛�");
-        stampCell2.setCellStyle(styles.get("text"));
-        
-        Row dateRow = sheet.createRow(startRow + 5);
-        Cell dateCell = dateRow.createCell(0);
-        dateCell.setCellValue("鏃ユ湡锛�2026骞�  鏈�  鏃�");
-        dateCell.setCellStyle(styles.get("text"));
-        
-        Cell dateCell2 = dateRow.createCell(6);
-        dateCell2.setCellValue("鏃ユ湡锛�2026骞�  鏈�  鏃�");
-        dateCell2.setCellStyle(styles.get("text"));
-    }
 
 
     /**
@@ -836,6 +331,7 @@
         tmsArBill.setSettledAmount(BigDecimal.ZERO);
         tmsArBill.setInvoiceStatus(0);
         tmsArBill.setStatus(0);
+        tmsArBill.setPushStatus(0); // 鍒濆鎺ㄩ�佺姸鎬侊細鏈帹閫�
         tmsArBill.setCreateBy(SecurityUtils.getUsername());
         tmsArBillMapper.insertTmsArBill(tmsArBill);
 
@@ -987,11 +483,32 @@
             // 鍙戦�丄PI璇锋眰
             ResponseEntity<String> response = restTemplate.exchange(apiUrl, HttpMethod.POST, entity, String.class);
             logger.info("鎺ㄩ�佹暟鎹埌澶栭儴绯荤粺鎴愬姛锛屽搷搴�: {}", response.getBody());
+            
+            // 瑙f瀽鍝嶅簲锛岃幏鍙杝ourceSystemId
+            try {
+                JSONObject result = JSONObject.parseObject(response.getBody());
+                String sourceSystemId = result.getString("sourceSystemId");
+                if (sourceSystemId != null) {
+                    tmsArBill.setSourceSystemId(Integer.parseInt(sourceSystemId));
+                }
+            } catch (Exception e) {
+                logger.error("瑙f瀽澶栭儴绯荤粺鍝嶅簲澶辫触: {}", e.getMessage());
+            }
+
+            
+            // 鏇存柊鎺ㄩ�佺姸鎬佷负鎴愬姛
+            tmsArBill.setPushStatus(2);
+            tmsArBill.setPushTime(DateUtils.getNowDate());
+            tmsArBillMapper.updateTmsArBill(tmsArBill);
         } catch (Exception e) {
             logger.error("鎺ㄩ�佹暟鎹埌澶栭儴绯荤粺澶辫触锛岃处鍗旾D: {}, 瀹㈡埛: {}", 
                 tmsArBill.getId(), tmsArBill.getCustomerName(), e);
             logger.debug("鎺ㄩ�佸け璐ョ殑璇锋眰鏁版嵁: {}", JSON.toJSONString(requestBody));
-            // 鎺ㄩ�佸け璐ヤ笉褰卞搷涓绘祦绋嬶紝璁板綍鏃ュ織鍗冲彲
+            
+            // 鏇存柊鎺ㄩ�佺姸鎬佷负澶辫触
+            tmsArBill.setPushStatus(3);
+            tmsArBill.setPushTime(DateUtils.getNowDate());
+            tmsArBillMapper.updateTmsArBill(tmsArBill);
         }
     }
 

--
Gitblit v1.8.0