Browse Source

Merge branch 'master' of https://mc.cloudpure.cn/mjava/cont

wzy 3 months ago
parent
commit
e5cdede2a6

+ 10 - 1
mjava-lilin/src/main/java/com/malk/lilin/Controller/LiLinController.java

@@ -45,7 +45,8 @@ public class LiLinController {
     @PostMapping("/lilinZD")//付款制单
     public McR lilinZD(@RequestBody Map<String, Object> map) throws IOException {
         log.info("lilinZD:{}", JSON.toJSONString(map));
-        return liLinService.lilinZD(map);
+        liLinService.lilinZD(map);
+        return McR.success();
 
     }
 
@@ -69,6 +70,14 @@ public class LiLinController {
         return liLinService.lilinLSCF(map);
 
     }
+
+    @PostMapping("/lilinBatchUpdate")//批量更新付款单
+    public McR lilinBatchUpdate(@RequestBody Map<String, Object> map) throws IOException {
+        log.info("lilinBatchUpdate:{}", JSON.toJSONString(map));
+        liLinService.lilinBatchUpdate(map);
+        return McR.success();
+
+    }
 //    @PostMapping("/lilinUpsert1")
 //    public McR lilinUpsert1(@RequestBody Map<String,Object> map) {
 //        if (Objects.nonNull(map.get("rqqj"))) {

File diff suppressed because it is too large
+ 138 - 72
mjava-lilin/src/main/java/com/malk/lilin/Controller/taskController.java


+ 6 - 0
mjava-lilin/src/main/java/com/malk/lilin/MjavaLilinApplication.java

@@ -2,8 +2,14 @@ package com.malk.lilin;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
+@EnableAsync
 @SpringBootApplication(scanBasePackages = {"com.malk"})
+@EnableScheduling
+
 public class MjavaLilinApplication {
 
     public static void main(String[] args) {

+ 4 - 1
mjava-lilin/src/main/java/com/malk/lilin/Service/LiLinService.java

@@ -2,6 +2,7 @@ package com.malk.lilin.Service;
 
 
 import com.malk.server.common.McR;
+import org.springframework.scheduling.annotation.Async;
 
 import java.io.IOException;
 import java.util.List;
@@ -13,7 +14,7 @@ public interface LiLinService {
 
 
     McR hqbank(Map<String, Object> map) throws IOException;
-
+    @Async
     McR lilinZD(Map<String, Object> map) throws IOException;
 
     McR lilinJG(Map<String, Object> map) throws IOException;
@@ -23,4 +24,6 @@ public interface LiLinService {
     McR lilinLSCF(Map<String, Object> map) throws IOException;
 
     McR taskPLJG() ;
+    @Async
+    McR lilinBatchUpdate(Map<String, Object> map) throws IOException;
 }

+ 209 - 265
mjava-lilin/src/main/java/com/malk/lilin/Service/impl/LiLinServiceImpl.java

@@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
 import okhttp3.*;
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
@@ -335,253 +336,51 @@ public class LiLinServiceImpl implements LiLinService {
         }
     }
 
-//    @Override
-//    public McR lilinUpsert(List<String> rqqj, String bdbh) {
-//        List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder()
-//                .formUuid("FORM-B4B6126350C041EAAF4F04AECF6A3F0C95NV")
-//                .searchFieldJson(JSONObject.toJSONString(Arrays.asList(
-//                        new YDSearch("createTime", rqqj, "DateField", YDSearch.Type.DATE_FIELD, YDSearch.Operator.BETWEEN),
-//                        new YDSearch("textField_m9cdsn32", bdbh, "TextField", YDSearch.Type.TEXT_FIELD, YDSearch.Operator.EQ))))
-//                .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
-//
-//        List<Map> details = new ArrayList<>();
-//        List<String> details2 = new ArrayList<>();
-//        String ddbhMain = "";
-//
-//        if (list != null && !list.isEmpty()) {
-//            for (Map map : list) {
-//                try {
-//                    Map detail = new HashMap<>();
-//                    Map formData = (Map) map.get("formData");
-//                    String zt = UtilMap.getString(formData, "textField_md6z2k32");
-//
-//                    // 如果状态是“已同步”,跳过
-//                    if ("已同步".equals(zt)) {
-//                        continue;
-//                    }
-//
-//                    String formInstanceId = UtilMap.getString(map, "formInstanceId");
-//                    details2.add(formInstanceId);
-//
-//                    ddbhMain = UtilMap.getString(formData, "textField_m9cdsn32");
-//
-//                    // 处理关联产品字段
-//                    String dgcpRaw = String.valueOf(formData.get("associationFormField_m984zbpq_id"));
-//                    String dgcpString = StringEscapeUtils.unescapeJava(dgcpRaw.substring(1, dgcpRaw.length() - 1));
-//                    List<Map> dgcps = (List<Map>) JSONArray.parse(dgcpString);
-//                    detail.put("associationFormField_m9cdctdo", dgcps);
-//
-//                    // 其他字段提取
-//                    detail.put("textField_m9cdctdq", safeGetString(formData, "textField_m8yanvkl")); // 型号
-//                    detail.put("numberField_m9cdctdx", safeGetString(formData, "numberField_m8yanvkx")); // 数量
-//                    detail.put("numberField_m9cdctdw", safeGetString(formData, "numberField_m8yanvkw")); // 销售单价含税
-//                    detail.put("selectField_manmqrif", safeGetString(formData, "selectField_m9me4py8")); // 销售税率
-//                    detail.put("numberField_m9cdctdy", safeGetString(formData, "numberField_m9b2rwwo")); // 金额小计
-//                    detail.put("numberField_majmvrdr", safeGetString(formData, "numberField_majn78hg")); // 运费补贴
-//                    detail.put("numberField_m9cdctdv", safeGetString(formData, "numberField_m8yanvkv")); // 销售单价未税
-//                    detail.put("numberField_m9cdctdz", safeGetString(formData, "numberField_m9b2rwwp")); // 金额未税小计
-//                    detail.put("textField_m96r764p", safeGetString(formData, "textField_m96r764p")); // 产品小类
-//                    detail.put("textField_m96r764o", safeGetString(formData, "textField_m96r764o")); // 产品大类
-//                    detail.put("textField_m9cdctdp", safeGetString(formData, "numberField_majn78hg")); // 品牌
-//                    detail.put("textField_m9cdctdr", safeGetString(formData, "textField_m8yanvks")); // 产品单位
-//                    detail.put("textField_m9cdctds", safeGetString(formData, "textField_m8yanvkt")); // 颜色
-//                    detail.put("selectField_m9cdcte0", safeGetString(formData, "selectField_m8yanvkn")); // 是否带采
-//                    detail.put("selectField_m9cdcte1", safeGetString(formData, "selectField_m8yanvko")); // 是否定制
-//                    detail.put("selectField_m9cdcte2", safeGetString(formData, "selectField_m8yanvkp")); // 是否明细
-//                    detail.put("textField_m9gewnyi", safeGetString(formData, "textField_m9gfqsow")); // 产品名称
-//                    detail.put("textField_m9gewnyj", safeGetString(formData, "textField_m9gfqsox")); // SKU码
-//                    detail.put("selectField_m9qrzktd", safeGetString(formData, "selectField_m9cdsn2v")); // 订单状态
-//                    detail.put("textField_m9qnz34u", safeGetString(formData, "textField_m9gfqsox")); // 订单明细编号
-//                    detail.put("numberField_m9gfg5mi", safeGetString(formData, "numberField_m9gfg5mi")); // 成本单价含税
-//                    detail.put("selectField_m9me4py8", safeGetString(formData, "selectField_m9me4py8")); // 成本税率
-//                    detail.put("numberField_m9gfg5mj", safeGetString(formData, "numberField_m9gfg5mj")); // 成本单价无税
-//                    detail.put("textField_maoynrp4", safeGetString(formData, "textField_maoynrp4")); // 供应商名称
-//                    detail.put("textField_maoynrp5", safeGetString(formData, "textField_maoynrp5")); // 供应商编号
-//
-//                    details.add(detail);
-//
-//                } catch (Exception e) {
-//                    log.error("处理子表单数据时发生异常", e);
-//                }
-//            }
-//
-//            try {
-//                List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
-//                        .formUuid("FORM-BDA88E0932564B64B1619AC05290A012L16E")
-//                        .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_m9cdcten", ddbhMain)))
-//                        .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
-//
-//                if (data == null || data.isEmpty()) {
-//                    return McR.errorParam("主表单不存在");
-//                }
-//
-//                Map mainMap = data.get(0);
-//                log.info("主表单数据: {}", mainMap);
-//
-//                String formInstanceId1 = UtilMap.getString(mainMap, "formInstanceId");
-//                Map mainFormData = (Map) mainMap.get("formData");
-//                List<Map> tableField = (List<Map>) mainFormData.get("tableField_m9cdcte4");
-//
-//                if (tableField == null) {
-//                    tableField = new ArrayList<>();
-//                }
-//
-//                tableField.addAll(details);
-//
-//                // 按 SKU 码分组,合并数据
-//                Map<String, Map<String, Object>> groupedMap = new LinkedHashMap<>();
-//
-//                for (Map item : details) {
-//                    String sku = (String) item.get("textField_m9gewnyj");
-//
-//                    if (groupedMap.containsKey(sku)) {
-//                        // 如果已存在该 SKU,进行字段累加
-//                        Map<String, Object> existing = groupedMap.get(sku);
-//
-//                        // 累加数值字段
-//                        existing.put("numberField_m9cdctdx", getDoubleSafe(existing, "numberField_m9cdctdx") + getDoubleSafe(item, "numberField_m8yanvkx")); // 数量
-//                        existing.put("numberField_m9cdctdw", getDoubleSafe(existing, "numberField_m9cdctdw") + getDoubleSafe(item, "numberField_m8yanvkw")); // 销售单价含税
-//                        existing.put("numberField_m9cdctdy", getDoubleSafe(existing, "numberField_m9cdctdy") + getDoubleSafe(item, "numberField_m9b2rwwo")); // 金额小计
-//                        existing.put("numberField_majmvrdr", getDoubleSafe(existing, "numberField_majmvrdr") + getDoubleSafe(item, "numberField_majn78hg")); // 运费补贴
-//                        existing.put("numberField_m9cdctdv", getDoubleSafe(existing, "numberField_m9cdctdv") + getDoubleSafe(item, "numberField_m8yanvkv")); // 销售单价未税
-//                        existing.put("numberField_m9cdctdz", getDoubleSafe(existing, "numberField_m9cdctdz") + getDoubleSafe(item, "numberField_m9b2rwwp")); // 金额未税小计
-//                        existing.put("numberField_m9gfg5mi", getDoubleSafe(existing, "numberField_m9gfg5mi") + getDoubleSafe(item, "numberField_m9gfg5mi")); // 成本单价含税
-//                        existing.put("numberField_m9gfg5mj", getDoubleSafe(existing, "numberField_m9gfg5mj") + getDoubleSafe(item, "numberField_m9gfg5mj")); // 成本单价无税
-//
-//                    } else {
-//                        // 第一次出现该 SKU,复制原始数据
-//                        Map<String, Object> newItem = new HashMap<>();
-//                        newItem.put("textField_m9gewnyj", sku);
-//                        newItem.put("textField_m9gewnyi", item.get("textField_m9gewnyi")); // 产品名称
-//                        newItem.put("textField_m96r764p", item.get("textField_m96r764p")); // 产品小类
-//                        newItem.put("textField_m96r764o", item.get("textField_m96r764o")); // 产品大类
-//                        newItem.put("textField_m9cdctdp", item.get("textField_m9cdctdp")); // 品牌
-//                        newItem.put("textField_m9cdctdr", item.get("textField_m9cdctdr")); // 产品单位
-//                        newItem.put("textField_m9cdctds", item.get("textField_m9cdctds")); // 颜色
-//                        newItem.put("selectField_m9cdcte0", item.get("selectField_m9cdcte0")); // 是否带采
-//                        newItem.put("selectField_m9cdcte1", item.get("selectField_m9cdcte1")); // 是否定制
-//                        newItem.put("selectField_m9cdcte2", item.get("selectField_m9cdcte2")); // 是否明细
-//                        newItem.put("selectField_m9qrzktd", item.get("selectField_m9qrzktd")); // 订单状态
-//                        newItem.put("textField_m9qnz34u", item.get("textField_m9qnz34u")); // 订单明细编号
-//                        newItem.put("selectField_m9me4py8", item.get("selectField_m9me4py8")); // 成本税率
-//                        newItem.put("textField_maoynrp4", item.get("textField_maoynrp4")); // 供应商名称
-//                        newItem.put("textField_maoynrp5", item.get("textField_maoynrp5")); // 供应商编号
-//
-//                        // 处理关联产品字段(假设每个 SKU 的关联产品一致,否则可取第一个)
-//                        newItem.put("associationFormField_m9cdctdo", item.get("associationFormField_m9cdctdo"));
-//
-//                        // 初始化数值字段
-//                        newItem.put("numberField_m9cdctdx", getDoubleSafe(item, "numberField_m8yanvkx")); // 数量
-//                        newItem.put("numberField_m9cdctdw", getDoubleSafe(item, "numberField_m8yanvkw")); // 销售单价含税
-//                        newItem.put("numberField_m9cdctdy", getDoubleSafe(item, "numberField_m9b2rwwo")); // 金额小计
-//                        newItem.put("numberField_majmvrdr", getDoubleSafe(item, "numberField_majn78hg")); // 运费补贴
-//                        newItem.put("numberField_m9cdctdv", getDoubleSafe(item, "numberField_m8yanvkv")); // 销售单价未税
-//                        newItem.put("numberField_m9cdctdz", getDoubleSafe(item, "numberField_m9b2rwwp")); // 金额未税小计
-//                        newItem.put("numberField_m9gfg5mi", getDoubleSafe(item, "numberField_m9gfg5mi")); // 成本单价含税
-//                        newItem.put("numberField_m9gfg5mj", getDoubleSafe(item, "numberField_m9gfg5mj")); // 成本单价无税
-//
-//                        groupedMap.put(sku, newItem);
-//                    }
-//                }
-//
-//// 将合并后的数据转换为 list
-//                List<Map> mergedDetails = new ArrayList<>(groupedMap.values());
-//
-//// 替换原来 distinctList 的定义
-//                List<Map> distinctList = mergedDetails;
-//
-//// 汇总金额
-//                AtomicReference<Double> totalZsl = new AtomicReference<>(0.0);
-//                AtomicReference<Double> totalHszj = new AtomicReference<>(0.0);
-//                AtomicReference<Double> totalWszj = new AtomicReference<>(0.0);
-//                AtomicReference<Double> totalYfzj = new AtomicReference<>(0.0);
-//
-//                distinctList.forEach(item -> {
-//                    totalZsl.updateAndGet(v -> v + getDoubleSafe(item, "numberField_m9cdctdx"));
-//                    totalHszj.updateAndGet(v -> v + getDoubleSafe(item, "numberField_m9cdctdy"));
-//                    totalWszj.updateAndGet(v -> v + getDoubleSafe(item, "numberField_m9cdctdz"));
-//                    totalYfzj.updateAndGet(v -> v + getDoubleSafe(item, "numberField_majmvrdr"));
-//                });
-//
-//                Map<String, Object> updateMap = new HashMap<>();
-//                updateMap.put("tableField_m9cdcte4", distinctList);
-//                updateMap.put("numberField_m9cdcte5", String.valueOf(totalZsl.get()));
-//                updateMap.put("numberField_m9cdcte7", String.valueOf(totalHszj.get()));
-//                updateMap.put("numberField_m9cdcte9", String.valueOf(totalWszj.get()));
-//                updateMap.put("numberField_majmvrdq", String.valueOf(totalYfzj.get()));
-//                updateMap.put("numberField_m9iap5e5", String.valueOf(totalHszj.get()));
-//                updateMap.put("numberField_m9iap5e6", String.valueOf(totalHszj.get()));
-//                updateMap.put("numberField_ma14qlv3", String.valueOf(totalZsl.get()));
-//                updateMap.put("numberField_ma14qlv7", String.valueOf(totalZsl.get()));
-//
-//                // 更新主表单
-//                ydClient.operateData(YDParam.builder()
-//                        .formInstanceId(formInstanceId1)
-//                        .updateFormDataJson(JSONObject.toJSONString(updateMap))
-//                        .useLatestVersion(true)
-//                        .build(), YDConf.FORM_OPERATION.update);
-//
-//                // 批量更新子表单状态为“已同步”
-//                if (!details2.isEmpty()) {
-//                    ydClient.operateData(YDParam.builder()
-//                            .formInstanceIdList(details2)
-//                            .formUuid("FORM-B4B6126350C041EAAF4F04AECF6A3F0C95NV")
-//                            .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_md6z2k32", "已同步")))
-//                            .useLatestVersion(true)
-//                            .build(), YDConf.FORM_OPERATION.multi_update);
-//                }
-//
-//            } catch (Exception e) {
-//                log.error("更新主表单或子表单状态时出错", e);
-//                return McR.errorParam( e.getMessage());
-//            }
-//
-//            return McR.success("操作成功");
-//
-//        } else {
-//            return McR.success("没有符合条件的数据");
-//        }
-//    }
-
     @Override
     public McR hqbank(Map<String, Object> map) {
-        try {
-            String name = String.valueOf(map.get("name"));
-            OkHttpClient client = new OkHttpClient();
-            Request request = new Request.Builder()
-                    .url("https://x.xencio.com/c4c3/api/bank/searchBranch?securityCode=" + token().getData() + "&queryType=full&name=" + name)
-                    .get()
-                    .addHeader("x-xencio-client-id", "7dc3a31209b94a91ba40a44358fe70eb")
-                    .addHeader("content-type", "application/x-www-form-urlencoded")
-                    .build();
-            Response response = client.newCall(request).execute();
-            if (!response.isSuccessful()) {
-                return McR.errorParam(response.message());
-            }
-            String responseBody = response.body().string();
-            // 使用 FastJSON 解析 JSON
-            JSONObject json = com.alibaba.fastjson.JSON.parseObject(responseBody);
-
-            // 获取 data.data 数组
-            JSONArray dataList = json.getJSONObject("data")
-                    .getJSONArray("data");
-            String code = null;
+        Map jzHeader = new HashMap();
+        jzHeader.put("x-xencio-client-id", "7dc3a31209b94a91ba40a44358fe70eb");
+        jzHeader.put("content-type", "application/x-www-form-urlencoded");
+        Map bankMap = new HashMap();
+        bankMap.put("securityCode", token().getData());
+        bankMap.put("queryType", "full");
+        bankMap.put("name", map.get("name"));
+//        bankMap.put("headName", param.get("headBank"));
+        int pageNow = 1;
+        bankMap.put("pageSize", 10);
+        bankMap.put("pageNow", pageNow);
+        String bankResult=UtilHttp.doGet("https://x.xencio.com/c4c3/api/bank/searchBranch",jzHeader,bankMap);
+
+        JSONObject jsonResponse = JSONObject.parseObject(bankResult);
+
+        // 获取 data 对象(外层的 data)
+        JSONObject dataObj = jsonResponse.getJSONObject("data");
+
+        // 获取 data 数组(真正的数据列表)
+        JSONArray dataList = dataObj.getJSONArray("data");
+        // 创建用于存储结果的 List
+        List<Map<String, String>> bankList = new ArrayList<>();
+
+        if (dataList != null && !dataList.isEmpty()) {
             for (int i = 0; i < dataList.size(); i++) {
                 JSONObject item = dataList.getJSONObject(i);
-//                HashMap<Object, Object> map = new HashMap<>();
-//                String areaName = item.getString("areaName");
-//                 names = item.getString("name");
-//                String province = item.getString("province");
-                code = item.getString("code");
-//                String updateTime = item.getString("updateTime");
 
+                // 提取 code 和 name
+                String code = item.getString("code");
+                String name = item.getString("name");
+                // 封装到 map
+                Map<String, String> bankMap1 = new HashMap<>();
+                bankMap1.put("code", code);
+                bankMap1.put("name", name);
 
+                // 添加到列表
+                bankList.add(bankMap1);
             }
-            return McR.success(code);
-        } catch (IOException e) {
-            e.printStackTrace();
+
+        } else {
+            System.out.println("data 数组为空或不存在");
         }
-        return null;
+        return McR.success(bankList);
     }
 
     public static void main(String[] args) {
@@ -631,7 +430,7 @@ public class LiLinServiceImpl implements LiLinService {
         String response = UtilHttp.doPost(url, headers, null, null, mapAll);//批量制单
         log.info("response:{}", response);
     }
-
+    @Async
     @Override
     public McR lilinZD(Map<String, Object> map) throws IOException {
         String formInstanceId = String.valueOf(map.get("formInstanceId"));
@@ -655,7 +454,24 @@ public class LiLinServiceImpl implements LiLinService {
         String toBank = String.valueOf(data.get("textField_m9ze3rjr")); // 收款银行支行
         String fromAccountCode = String.valueOf(data.get("textField_mdfnuyl9")); // 付款账号
         String fromAccountName = String.valueOf(data.get("textField_m9ze3rj8")); // 付款户名
+        String toAccountTypeStr = String.valueOf(data.get("textField_m9ze3rjm")); // 收款类型
+        String djlx = String.valueOf(data.get("textField_m9ze3rjr")); // 单据类型
+        String paymentOrderType = djlx.contains("支付宝") ? "alipay" : "common";
+//        Map<String, String> accountMap = new HashMap<>();
+//        accountMap.put("上海韵林礼品有限公司", "1001260509024819590");
+//        accountMap.put("上海礼林文化科技有限公司", "1001260509424880696");
+//        accountMap.put("上海泰辰印务科技有限公司", "1001260509324868573");
+//        accountMap.put("允临实业(上海)有限公司", "1001260509324808614");
+//
+//        // 3. 查找对应的账户编码
+//        String fromAccountCode = null; // 付款账号
+//
+//        if (fromAccountName != null && !fromAccountName.trim().isEmpty()) {
+//            fromAccountCode = accountMap.get(fromAccountName.trim());
+//        }
 
+// 判断 toAccountTypeStr 是否等于“对公收款人”
+        String toAccountType = "对公收款人".equals(toAccountTypeStr) ? "0" : "1";
         // 公共参数
         String securityCode = String.valueOf(token().getData());
         Map<String, String> headers = new HashMap<>();
@@ -663,6 +479,7 @@ public class LiLinServiceImpl implements LiLinService {
         headers.put("content-type", "application/x-www-form-urlencoded");
         String url = "https://x.xencio.com/c4c3/api/payment/transfer";
 
+
         // 判断是否为物流付款单
         if ("物流付款单".equals(fklx)) {
             // 是物流付款单:遍历子表,每行发起一次支付
@@ -690,8 +507,10 @@ public class LiLinServiceImpl implements LiLinService {
                 mapAll.put("fromAccountCode", fromAccountCode);
                 mapAll.put("fromAccountName", fromAccountName);
                 mapAll.put("toAccountCode", toAccountCode);
+                mapAll.put("toAccountType", toAccountType);
                 mapAll.put("toAccountName", toAccountName);
                 mapAll.put("payAmount", payAmount);
+                mapAll.put("paymentOrderType", paymentOrderType);
                 mapAll.put("source", "OA");
                 mapAll.put("note", note);
                 mapAll.put("toBank", toBank);
@@ -701,6 +520,22 @@ public class LiLinServiceImpl implements LiLinService {
                 // 发起支付
                 String response = UtilHttp.doPost(url, headers, null, null, mapAll);
                 log.info("物流付款单 - 支付成功 [凭证号: {}, 金额: {}], 响应: {}", instructionId, payAmount, response);
+                JSONObject jsonObject = JSON.parseObject(response);
+
+                // 获取 data 对象
+                JSONObject redata = jsonObject.getJSONObject("data");
+
+                // 从 data 中获取 message
+                String message = redata.getString("message");
+                String code = redata.getString("code");
+                String zdqk = "C0000".equals(code) ? "制单成功" : "制单异常";
+                Map<String, Object> objectObjectHashMap = new HashMap<>();
+                objectObjectHashMap.put("radioField_mel5n51w", zdqk);
+                objectObjectHashMap.put("textareaField_mel5n51x", message);
+                ydClient.operateData(YDParam.builder()
+                        .formInstanceId(formInstanceId)
+                        .updateFormDataJson(JSON.toJSONString(objectObjectHashMap))
+                        .build(), YDConf.FORM_OPERATION.update);
             }
 
         } else {
@@ -721,7 +556,9 @@ public class LiLinServiceImpl implements LiLinService {
             mapAll.put("fromAccountName", fromAccountName);
             mapAll.put("toAccountCode", toAccountCode);
             mapAll.put("toAccountName", toAccountName);
+            mapAll.put("toAccountType", toAccountType);
             mapAll.put("payAmount", payAmount);
+            mapAll.put("paymentOrderType", paymentOrderType);
             mapAll.put("source", "OA");
             mapAll.put("note", note);
             mapAll.put("toBank", toBank);
@@ -730,6 +567,22 @@ public class LiLinServiceImpl implements LiLinService {
 
             String response = UtilHttp.doPost(url, headers, null, null, mapAll);
             log.info("非物流付款单 - 支付成功 [凭证号: {}, 金额: {}], 响应: {}", instructionId, payAmount, response);
+            JSONObject jsonObject = JSON.parseObject(response);
+
+            // 获取 data 对象
+            JSONObject redata = jsonObject.getJSONObject("data");
+
+            // 从 data 中获取 message
+            String message = redata.getString("message");
+            String code = redata.getString("code");
+            String zdqk = "C0000".equals(code) ? "制单成功" : "制单异常";
+            Map<String, Object> objectObjectHashMap = new HashMap<>();
+            objectObjectHashMap.put("radioField_mel5n51w", zdqk);
+            objectObjectHashMap.put("textareaField_mel5n51x", message);
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(formInstanceId)
+                    .updateFormDataJson(JSON.toJSONString(objectObjectHashMap))
+                    .build(), YDConf.FORM_OPERATION.update);
         }
 
         return McR.success("处理完成");
@@ -819,10 +672,12 @@ public class LiLinServiceImpl implements LiLinService {
 
                     List<Map<String, Object>> updatedRows = new ArrayList<>();
                     int completedCount = 0;
-
+                    String zfqk = "";
+                    String message = "";
                     for (int i = 0; i < tableField.size(); i++) {
                         Map<String, Object> row = new HashMap<>(tableField.get(i)); // 复制原数据用于更新
                         String subInstructionId = String.valueOf(row.get("textField_mdnuob9a")); // 子表流水号
+//                        String xmfzr = String.valueOf(row.get("employeeField_m9lfmh1r_id")); // 项目负责人
 
                         // 查询子表支付状态
                         params.put("instructionId", subInstructionId);
@@ -831,8 +686,12 @@ public class LiLinServiceImpl implements LiLinService {
 
                         JSONObject jsonResponse = JSON.parseObject(response);
                         JSONObject dataObj = jsonResponse.getJSONObject("data");
-                        String message = dataObj != null ? dataObj.getString("message") : "";
+                        String code = dataObj.getString("code");
+                         zfqk = "P0000".equals(code) ? "支付成功" : "支付异常";
+                         message = dataObj != null ? dataObj.getString("message") : "";
 
+//                        long bankTrxTime = dataObj != null ? LocalDateTime.parse(dataObj.getString("bankTrxTime"), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
+//                                .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() : 0L;
                         String status = "未完成";
                         if (message != null && message.contains("成功")) {
                             status = "已完成";
@@ -841,13 +700,16 @@ public class LiLinServiceImpl implements LiLinService {
 
                         // 更新子表字段:selectField_mdmwfibp
                         row.put("selectField_mdmwfibp", status);
+//                        row.put("employeeField_m9lfmh1r", xmfzr);
+                        row.remove("employeeField_m9lfmh1r");
                         updatedRows.add(row);
                     }
 
                     // 构建要更新的子表数据
                     Map<String, Object> updateData = new HashMap<>();
                     updateData.put("tableField_m986c5os", updatedRows);
-
+                    updateData.put("radioField_mel5n51w", zfqk);
+                    updateData.put("textareaField_mel5n51x", message);
                     // 更新主表状态
                     String mainStatus;
                     if (completedCount == 0) {
@@ -885,17 +747,29 @@ public class LiLinServiceImpl implements LiLinService {
                     JSONObject jsonResponse = JSON.parseObject(response);
                     JSONObject dataObj = jsonResponse.getJSONObject("data");
                     String message = dataObj != null ? dataObj.getString("message") : "";
+                    String code = dataObj.getString("code");
+                    String zfqk = "P0000".equals(code) ? "支付成功" : "支付异常";
 
+                    Map<String, Object> updateData = new HashMap<>();
+                    updateData.put("selectField_ma0w9yrb", "已审批已付款");
+                    updateData.put("radioField_mel5n51w", zfqk);
+                    updateData.put("textareaField_mel5n51x", message);
                     if (message != null && message.contains("成功")) {
                         // 更新主表状态为“已审批已付款”
                         ydClient.operateData(YDParam.builder()
                                 .formInstanceId(formInstanceId)
                                 .updateFormDataJson(JSON.toJSONString(
-                                        UtilMap.map("selectField_ma0w9yrb", "已审批已付款")))
+                                        updateData))
                                 .build(), YDConf.FORM_OPERATION.update);
                         log.info("【非物流】支付成功,已更新状态");
                         successCount++;
                     } else {
+                        updateData.remove("selectField_ma0w9yrb");
+                        ydClient.operateData(YDParam.builder()
+                                .formInstanceId(formInstanceId)
+                                .updateFormDataJson(JSON.toJSONString(
+                                        updateData))
+                                .build(), YDConf.FORM_OPERATION.update);
                         log.info("【非物流】支付未成功,状态未更新");
                         failCount++;
                         failedIds.add(formInstanceId);
@@ -1010,6 +884,7 @@ public class LiLinServiceImpl implements LiLinService {
                     String bankComments = getStringValue(item, "bankComments");
                     String crAmount = getStringValue(item, "crAmount");
                     String trxDate = getStringValue(item, "trxDate");
+                    String createDate = getStringValue(item, "createDate");
                     String accountName = getStringValue(item, "accountName"); // 本方账号名称
                     String userRemarks = getStringValue(item, "userRemarks");
                     String userMemo = getStringValue(item, "userMemo");
@@ -1026,6 +901,15 @@ public class LiLinServiceImpl implements LiLinService {
                             log.warn("日期解析失败: {}", trxDate);
                         }
                     }
+                    Long timestamp1 = null;
+                    if (createDate != null && !createDate.isEmpty()) {
+                        try {
+                            timestamp1 = LocalDateTime.parse(createDate, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
+                                    .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
+                        } catch (Exception e) {
+                            log.warn("日期解析失败: {}", createDate);
+                        }
+                    }
 
                     extractedItem.put("bankStatementId", bankStatementId);
                     extractedItem.put("bankComments", bankComments);
@@ -1062,6 +946,7 @@ public class LiLinServiceImpl implements LiLinService {
                     // 查询客户主数据
                     String khformInstanceId = null;
                     String khaccountName = null;
+                    String khaccountbh = null;
                     try {
                         List<Map> khlist = (List<Map>) ydClient.queryData(
                                 YDParam.builder()
@@ -1076,12 +961,16 @@ public class LiLinServiceImpl implements LiLinService {
                         if (khlist != null && !khlist.isEmpty()) {
                             for (Map<String, Object> khitem : khlist) {
                                 Map<String, Object> khformData = (Map<String, Object>) khitem.get("formData");
+
                                 if (khformData != null && customerName.equals(khformData.get("textField_m8sjaafp"))) {
                                     khformInstanceId = (String) khitem.get("formInstanceId");
                                     khaccountName = (String) khformData.get("textField_m8sjaafp");
+                                    khaccountbh = (String) khformData.get("serialNumberField_m8sjaafi");
                                     break;
                                 }
                             }
+                        }else{
+                            khaccountName = customerName;
                         }
 
                         if (khformInstanceId == null || khaccountName == null) {
@@ -1091,7 +980,7 @@ public class LiLinServiceImpl implements LiLinService {
 
                         // 构造 formData
                         Map<String, Object> formData = new HashMap<>();
-                        formData.put("dateField_m8yeduje", timestamp != null ? timestamp : System.currentTimeMillis());
+                        formData.put("dateField_m8yeduje", timestamp1 != null ? timestamp1 : System.currentTimeMillis());
                         formData.put("dateField_mbg6gyre", timestamp != null ? timestamp : System.currentTimeMillis());
                         formData.put("numberField_m9ibr418", crAmount);
                         formData.put("employeeField_m8yeduj3", Arrays.asList("275412081437800471"));
@@ -1101,11 +990,16 @@ public class LiLinServiceImpl implements LiLinService {
                         formData.put("textField_mdh51nxr", transFlag);
                         formData.put("textField_mdh51nxs", catalogName);
                         formData.put("selectField_m982msou", accountName);
+                        formData.put("textField_megl2h3a", accountName);
+                        formData.put("numberField_megl2h3k", crAmount);
+                        formData.put("radioField_me267g3r", "接口创建");
 
                         if (khaccountName != null && khformInstanceId != null) {
                             formData.put("associationFormField_m8yeduj1",
                                     Arrays.asList(getkhAss(khaccountName, khformInstanceId)));
+                            formData.put("textField_m9i9k5cj", khaccountbh);
                         }
+                            formData.put("textField_mbh8usao", khaccountName);
 
                         // 提交创建流程
                         ydClient.operateData(
@@ -1349,7 +1243,7 @@ public class LiLinServiceImpl implements LiLinService {
                 String fklx = getStringValue(data, "selectField_m9ze3rjf"); // 付款类型
                 String mainInstructionId = getStringValue(data, "serialNumberField_m9ze3rjd"); // 主表流水号
 
-                // 🔍 查询目标表单是否已存在该 mainInstructionId 的记录
+                // 查询目标表单是否已存在该 mainInstructionId 的记录
                 List<Map> list1 = (List<Map>) ydClient.queryData(
                         YDParam.builder()
                                 .formUuid("FORM-6B8A683A23524D3596C8C6CA13327EF3552K")
@@ -1360,7 +1254,7 @@ public class LiLinServiceImpl implements LiLinService {
                         YDConf.FORM_QUERY.retrieve_list_all
                 ).getData();
 
-                // 如果目标表单中已存在该流水号,则跳过,不再新增
+                // 如果目标表单中已存在该流水号,则跳过,不再新增
                 if (list1 != null && !list1.isEmpty()) {
                     log.info("已存在重复数据,跳过插入:mainInstructionId={}", mainInstructionId);
                     continue;
@@ -1373,6 +1267,7 @@ public class LiLinServiceImpl implements LiLinService {
                 String toBank = getStringValue(data, "textField_m9ze3rjr"); // 收款银行支行
                 String fromAccountCode = getStringValue(data, "textField_mdfnuyl9"); // 付款账号
                 String fromAccountName = getStringValue(data, "textField_m9ze3rj8"); // 付款户名
+                long zfsj = System.currentTimeMillis();//支付时间
                 BigDecimal PayAmount;
                 List<Map<String, Object>> updateList = new ArrayList<>();
 
@@ -1430,6 +1325,7 @@ public class LiLinServiceImpl implements LiLinService {
                 // 构建目标数据
                 Map<String, Object> formData = new HashMap<>();
                 formData.put("tableField_ma13k7v1", updateList);
+                formData.put("dateField_me2m2oeu",  zfsj);
                 formData.put("numberField_mac3ccn8", PayAmount);
                 formData.put("textField_mdsk7rlm", mainInstructionId); // 主流水号用于去重
                 formData.put("employeeField_m8yf6gkl", Arrays.asList("275412081437800471"));
@@ -1450,6 +1346,71 @@ public class LiLinServiceImpl implements LiLinService {
 
         return McR.success();
     }
+    @Async
+    @Override
+    public McR lilinBatchUpdate(Map<String, Object> map) throws IOException {
+        String formInstanceId = String.valueOf(map.get("formInstanceId"));
+        log.info("formInstanceId:{}", formInstanceId);
+        // 根据实例ID获取表单数据
+        Map data = (Map) ydClient.queryData(YDParam.builder()
+                .formInstId(formInstanceId)
+                .appType(ydConf.getAppType())
+                .systemToken(ydConf.getSystemToken())
+                .userId(ddConf.getOperator())
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+        if (data == null) {
+            log.warn("formData 为空, formInstanceId:{}", formInstanceId);
+            return McR.errorParam("formData 为空");
+        }
+        List<Map> list = (List<Map>) data.get("tableField_ma13k7v1");
+
+        if (list == null || list.isEmpty()) {
+            return McR.errorParam("表格数据为空");
+        }
+        long timestamp = System.currentTimeMillis();
+        String gszh = (String) data.get("textField_megowhuu");//公司账号
+        Map<String, Object> formData = new HashMap<>();
+        formData.put("selectField_ma0w9yrb", "已审批待付款");
+        formData.put("dateField_maw6ci79", timestamp);
+        formData.put("textField_mdfnuyl9", gszh);
+        // 4. 处理每行数据,提取instanceId
+        for (Map row : list) {
+            try {
+                // 获取associationFormField_ma13k7v2_id字段
+                String associationField = (String) row.get("associationFormField_ma13k7v2_id");
+                if (associationField == null) {
+                    continue;
+                }
+
+                // 清理JSON字符串
+                String cleanedJson = associationField
+                        .replaceAll("^\"|\"$", "")
+                        .replace("\\\"", "\"");
+
+                // 解析JSON数组
+                JSONArray innerArray = JSON.parseArray(cleanedJson);
+                if (innerArray == null || innerArray.isEmpty()) {
+                    continue;
+                }
+
+                // 提取instanceId
+                JSONObject firstItem = innerArray.getJSONObject(0);
+                String instanceId = firstItem.getString("instanceId");
+
+                if (instanceId != null && !instanceId.isEmpty()) {
+                    ydClient.operateData(YDParam.builder()
+                            .formInstanceId(instanceId)
+                            .updateFormDataJson(JSON.toJSONString(formData))
+                            .build(), YDConf.FORM_OPERATION.update);
+                    log.debug("成功更新instanceId: {}", instanceId);
+                }
+            } catch (Exception e) {
+                log.error("处理行数据异常, row: {}, 错误: {}", row, e.getMessage(), e);
+            }
+        }
+        return McR.success();
+    }
 
     private Object getAss(String title, String id) {
         return UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_RPH7R3LF3SMXLRDY1ZJW", "FORM-754586D31BF6414586E5C20DB3774A7320CV", "receipt", id, title, "");
@@ -1533,22 +1494,5 @@ public class LiLinServiceImpl implements LiLinService {
             return BigDecimal.ZERO;
         }
     }
-//    private static double getDoubleSafe(Map<String, Object> map, String key) {
-//        try {
-//            Object value = map.get(key);
-//            if (value instanceof Number) {
-//                return ((Number) value).doubleValue();
-//            }
-//            return 0.0;
-//        } catch (Exception e) {
-//            return 0.0;
-//        }
-//    }
-
-    /**
-     * 格式化两位小数
-     */
-//    private static String formatDecimal(double value) {
-//        return DECIMAL_FORMAT.format(value);
-//    }
+
 }

+ 3 - 3
mjava-lilin/src/main/resources/application-dev.yml

@@ -5,12 +5,12 @@ server:
     context-path: /lilin
 
 enable:
-  scheduling: true
+  scheduling: false
 logging:
   config: classpath:logback-spring.xml
-#  path: /lilin/log
+  path: /home/server/lilin/log
   level:
-    com.malk.*: debug
+    com.malk.*: info
 
 # dingtalk
 dingtalk: