|
|
@@ -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);
|
|
|
-// }
|
|
|
+
|
|
|
}
|