From 194ecd2dbc3a9c7eccfe5d9809ff947715960465 Mon Sep 17 00:00:00 2001
From: sinake <sinake1@qq.com>
Date: 星期二, 13 十月 2026 17:32:14 +0800
Subject: [PATCH] 上传命名规则调整

---
 ruoyi-project/src/main/java/com/ruoyi/project/common/FundNotifyMessageBuilder.java |  180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 180 insertions(+), 0 deletions(-)

diff --git a/ruoyi-project/src/main/java/com/ruoyi/project/common/FundNotifyMessageBuilder.java b/ruoyi-project/src/main/java/com/ruoyi/project/common/FundNotifyMessageBuilder.java
new file mode 100644
index 0000000..e09eb52
--- /dev/null
+++ b/ruoyi-project/src/main/java/com/ruoyi/project/common/FundNotifyMessageBuilder.java
@@ -0,0 +1,180 @@
+package com.ruoyi.project.common;
+
+import com.ruoyi.common.enums.ApplyTypeEnum;
+import com.ruoyi.common.utils.StringUtils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 鎶ラ攢瀹℃壒閽夐拤娑堟伅鍐呭缁勮銆�
+ *
+ * <p>缁熶竴銆屾爣棰� + 鍗曟嵁淇℃伅 + 瀹℃壒鎰忚鏂囨銆嶏紝渚涗互涓嬪彂閫佺偣澶嶇敤锛�
+ * <ul>
+ *   <li>鑷磋繙 OA 鍥炰紶瀹℃壒鎰忚 鈥斺�� {@code ServiceFundServiceImpl#processlog} 鈫� {@code sendMeg}</li>
+ *   <li>绯荤粺鍐呭鏍搁┏鍥烇紙璐圭敤鎶ラ攢锛� 鈥斺�� {@code ServiceFundServiceImpl#checkFund}</li>
+ *   <li>绯荤粺鍐呭鏍搁┏鍥烇紙宸梾璐癸級 鈥斺�� {@code ServiceReimbursementServiceImpl#checkFund}</li>
+ *   <li>宸梾璐逛笂鎶ユ彁浜� 鈥斺�� {@code ServiceReimbursementController#travelexpensereport}</li>
+ * </ul>
+ *
+ * <p><b>涓轰粈涔堣涓�琛屼竴涓� map锛�</b>{@code DingTalkReqVo.contents} 鐨勫厓绱犳槸
+ * {@link ConcurrentHashMap}锛屽叾閬嶅巻椤哄簭涓嶄繚璇侊紱涓�鏉� map 閲屽澶氳浼氬鑷撮拤閽夎〃鍗曡搴忛敊涔便��
+ * 杩欓噷姣忔潯淇℃伅鍗曠嫭涓�涓�屽崟閿� map銆嶏紝鐢� List 鐨勯『搴忎繚璇佹樉绀洪『搴忋��
+ *
+ * @author ruoyi
+ */
+public final class FundNotifyMessageBuilder {
+
+    /** 閽夐拤娑堟伅缁熶竴鏍囬锛�2026-10-08 涓氬姟鏂圭‘璁ょ粺涓�涓恒�孫PO鎶ラ攢瀹℃壒銆嶏級 */
+    public static final String TITLE = "OPO鎶ラ攢瀹℃壒";
+
+    /** 瀹℃壒缁撹锛氶�氳繃 */
+    public static final String CONCLUSION_PASS = "1";
+    /** 瀹℃壒缁撹锛氶┏鍥� */
+    public static final String CONCLUSION_REJECT = "2";
+    /** 瀹℃壒缁撹锛氬畬缁� */
+    public static final String CONCLUSION_FINISH = "3";
+
+    private static final String KEY_TYPE = "鎶ラ攢鍗曠被鍨嬶細";
+    private static final String KEY_BENEFICIARY = "鎶ラ攢浜猴細";
+    private static final String KEY_AMOUNT = "閲戦锛�";
+    private static final String KEY_DONOR = "鎹愮尞妗堜緥锛�";
+    private static final String KEY_BILL_NO = "鍗曟嵁缂栧彿锛�";
+    private static final String KEY_TRAVELERS = "鍑哄樊浜猴細";
+    private static final String KEY_REASON = "鍑哄樊浜嬬敱锛�";
+    private static final String KEY_CHECKER = "瀹℃壒浜猴細";
+    private static final String KEY_CHECK_TIME = "瀹℃壒鏃堕棿锛�";
+    private static final String KEY_OPINION = "鎰忚锛�";
+    private static final String KEY_SUBMITTER = "鎻愪氦浜猴細";
+    private static final String KEY_SUBMIT_TIME = "鎻愪氦鏃堕棿锛�";
+    private static final String KEY_CONTENT = "鍐呭锛�";
+
+    private FundNotifyMessageBuilder() {
+    }
+
+    /** 鏂板缓鍐呭琛屽鍣� */
+    public static List<ConcurrentHashMap<String, Object>> newRows() {
+        return new ArrayList<ConcurrentHashMap<String, Object>>();
+    }
+
+    /**
+     * 杩藉姞涓�琛屻�傚�间负绌猴紙null / 绌轰覆 / 鍏ㄧ┖鐧斤級鏃�**涓嶈拷鍔�**锛岄伩鍏嶉拤閽夐噷鍑虹幇绌鸿銆�
+     */
+    public static void addRow(List<ConcurrentHashMap<String, Object>> rows, String key, Object value) {
+        if (rows == null || key == null || value == null) {
+            return;
+        }
+        if (value instanceof String && StringUtils.isEmpty(((String) value).trim())) {
+            return;
+        }
+        ConcurrentHashMap<String, Object> row = new ConcurrentHashMap<String, Object>(1);
+        row.put(key, value);
+        rows.add(row);
+    }
+
+    /** 鎶ラ攢鍗曠被鍨嬶細applytype 鈫� 涓枃鍚嶏紱鏈尮閰嶈繑鍥� null锛堣琛屼笉鏄剧ず锛� */
+    public static String typeName(String applytype) {
+        return StringUtils.isEmpty(applytype) ? null : ApplyTypeEnum.getDescByCode(applytype);
+    }
+
+    /** 鍗曟嵁缂栧彿锛氫紭鍏堝彇涓氬姟缂栧彿 bh锛岀己澶辨椂閫�鍥炰富閿� id */
+    public static String billNo(String bh, Long id) {
+        if (StringUtils.isNotEmpty(bh)) {
+            return bh;
+        }
+        return id == null ? null : String.valueOf(id);
+    }
+
+    /**
+     * 杩藉姞鎶ラ攢鍗曞熀纭�淇℃伅锛氭姤閿�鍗曠被鍨� / 鎶ラ攢浜� / 閲戦 / 鎹愮尞妗堜緥 / 鍗曟嵁缂栧彿銆�
+     *
+     * <p>閲戦鍙e緞锛氳垂鐢ㄧ被鍙� {@code service_fund.pretaxcost}锛堝鏍搁〉銆岀敵璇烽噾棰濄�嶅垪锛夛紝
+     * 宸梾璐瑰彇 {@code service_reimbursement.amountrequested}锛堝鏍搁〉銆屾姤閿�閲戦銆嶅垪锛夈��
+     */
+    public static void addBillInfo(List<ConcurrentHashMap<String, Object>> rows,
+                                   String applytype, String beneficiary, Double amount,
+                                   String donorname, String billNo) {
+        addRow(rows, KEY_TYPE, typeName(applytype));
+        addRow(rows, KEY_BENEFICIARY, beneficiary);
+        addRow(rows, KEY_AMOUNT, money(amount));
+        addRow(rows, KEY_DONOR, donorname);
+        addRow(rows, KEY_BILL_NO, billNo);
+    }
+
+    /** 杩藉姞宸梾璐逛笓鏈変俊鎭細鍑哄樊浜� / 鍑哄樊浜嬬敱 */
+    public static void addTravelInfo(List<ConcurrentHashMap<String, Object>> rows,
+                                     String travelers, String reason) {
+        addRow(rows, KEY_TRAVELERS, travelers);
+        addRow(rows, KEY_REASON, reason);
+    }
+
+    /**
+     * 杩藉姞瀹℃壒缁撴灉锛氬鎵逛汉 / 瀹℃壒鏃堕棿 / 鎰忚銆�
+     *
+     * <p>瀹℃壒鏃堕棿浼� {@link Date}锛氶敭鍚嶅惈銆屽鎵规椂闂淬�嶏紝鐢� {@code DingTalkServiceImpl} 缁熶竴鏍煎紡鍖栥��
+     */
+    public static void addAuditResult(List<ConcurrentHashMap<String, Object>> rows,
+                                     String checker, Date checkTime, String opinion) {
+        addRow(rows, KEY_CHECKER, checker);
+        addRow(rows, KEY_CHECK_TIME, checkTime);
+        addRow(rows, KEY_OPINION, opinion);
+    }
+
+    /** 杩藉姞鎻愪氦閫氱煡淇℃伅锛氭彁浜や汉 / 鎻愪氦鏃堕棿 / 鍐呭锛堟椂闂村湪姝ら鏍煎紡鍖栵紝閬垮厤 Date.toString()锛� */
+    public static void addSubmitInfo(List<ConcurrentHashMap<String, Object>> rows,
+                                    String submitter, Date submitTime, String content) {
+        addRow(rows, KEY_SUBMITTER, submitter);
+        addRow(rows, KEY_SUBMIT_TIME, time(submitTime));
+        addRow(rows, KEY_CONTENT, content);
+    }
+
+    /**
+     * 瀹℃壒鎰忚鏂囨锛�2026-10-08 涓氬姟鏂圭‘璁わ級銆�
+     *
+     * <pre>
+     *   閫氳繃(1)  鈫� "瀹℃壒閫氳繃銆�"   + 鎰忚澶囨敞锛堣嫢鏈夛級
+     *   椹冲洖(2)  鈫� "瀹℃壒鏈�氳繃銆�" + 鎰忚澶囨敞锛堣嫢鏈夛級
+     *   瀹岀粨(3)  鈫� "娴佺▼宸插畬缁撱��"
+     *   鍏朵粬/绌�  鈫� 鍘熸牱杩斿洖澶囨敞锛涙棤澶囨敞杩斿洖绌轰覆
+     * </pre>
+     *
+     * <p>瀹炴祴渚濇嵁锛堟湰鍦板簱 {@code service_fundflow.flowlevel=100} 鍗宠嚧杩滃洖浼犺褰曪級锛�
+     * 閫氳繃 11618 鏉′腑 9606 鏉℃剰瑙佷负绌恒�佸畬缁� 1457 鏉″叏閮ㄤ负绌恒�侀┏鍥� 743 鏉′腑 161 鏉′负绌恒��
+     * 鑻ヤ笉缁欑粨璁哄厹搴曟枃妗堬紝閽夐拤娑堟伅鐨勩�屾剰瑙併�嶄竴鏍忓氨鏄┖鐧斤紙杩欐鏄笟鍔″弽棣堢殑闂锛夈��
+     */
+    public static String opinion(String conclusion, String content) {
+        String remark = content == null ? "" : content.trim();
+        String base;
+        if (CONCLUSION_PASS.equals(conclusion)) {
+            base = "瀹℃壒閫氳繃銆�";
+        } else if (CONCLUSION_REJECT.equals(conclusion)) {
+            base = "瀹℃壒鏈�氳繃銆�";
+        } else if (CONCLUSION_FINISH.equals(conclusion)) {
+            base = "娴佺▼宸插畬缁撱��";
+        } else {
+            // 缁撹缂哄け锛氬彧鏄剧ず澶囨敞锛屼笉鑷嗘祴缁撹
+            return remark;
+        }
+        return remark.isEmpty() ? base : base + remark;
+    }
+
+    /** 閲戦鏄剧ず锛氫袱浣嶅皬鏁般�佹棤鍗冨垎浣嶏紝濡� {@code 1200.00 鍏儅 */
+    public static String money(Double amount) {
+        if (amount == null) {
+            return null;
+        }
+        return new BigDecimal(String.valueOf(amount))
+                .setScale(2, RoundingMode.HALF_UP)
+                .toPlainString() + " 鍏�";
+    }
+
+    /** 鏃堕棿鏄剧ず锛歿@code yyyy-MM-dd HH:mm:ss}锛�24 灏忔椂鍒讹級 */
+    public static String time(Date date) {
+        return date == null ? null : new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
+    }
+}

--
Gitblit v1.9.3