wzy 1 hafta önce
ebeveyn
işleme
63543d8b89

+ 6 - 0
mjava-lianan/src/main/java/com/malk/lianan/controller/LianAnGyPayController.java

@@ -104,4 +104,10 @@ public class LianAnGyPayController {
         return lianAnGyPayService.salaryPay(map);
     }
 
+    //通用报销
+    @PostMapping("reimburse")
+    public McR reimburse(@RequestBody Map map){
+        return lianAnGyPayService.reimburse(map);
+    }
+
 }

+ 19 - 0
mjava-lianan/src/main/java/com/malk/lianan/schedule/LianAnScheduleTask.java

@@ -0,0 +1,19 @@
+package com.malk.lianan.schedule;
+
+import com.malk.lianan.service.LianAnService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
+public class LianAnScheduleTask {
+    @Autowired
+    private LianAnService lianAnService;
+
+}

+ 2 - 0
mjava-lianan/src/main/java/com/malk/lianan/service/LianAnGyPayService.java

@@ -12,4 +12,6 @@ public interface LianAnGyPayService {
     void callback(Map result);
 
     McR salaryPay(Map map);
+
+    McR reimburse(Map map);
 }

+ 5 - 0
mjava-lianan/src/main/java/com/malk/lianan/service/LianAnService.java

@@ -0,0 +1,5 @@
+package com.malk.lianan.service;
+
+public interface LianAnService {
+
+}

+ 107 - 13
mjava-lianan/src/main/java/com/malk/lianan/service/impl/LianAnGyServiceImpl.java

@@ -15,6 +15,7 @@ import com.malk.service.aliwork.YDClient;
 import com.malk.utils.UtilDateTime;
 import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
@@ -115,8 +116,8 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
             paymentRec.put("PrivateAmount",privateAmount);
             paymentRec.put("ReceiveAccountNo",receiveAccountNo);
             paymentRec.put("ReceiveAccountName",receiveAccountName);
-            paymentRec.put("PayUse",payUse);
-            paymentRec.put("Purpose",payUse);
+            paymentRec.put("PayUse","付款");//摘要长度上限20
+            paymentRec.put("Purpose","付款");
 
             paymentRecList.add(paymentRec);
         }
@@ -168,7 +169,9 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
 
         String payAmount = UtilMap.getDouble(formData, "numberField_mjqt1xrt").toString();
 
-        String payUse = UtilMap.getString(formData, "textareaField_mjsl53kh");//摘要
+        String fymx = UtilMap.getString(formData, "textareaField_mjsl53kh");//费用明细
+
+        String purpose = UtilMap.getString(formData, "selectField_mjzgprmw");//付款类型 用途
 
         int retryNum = UtilMap.getInt(formData, "numberField_mkf5q51o");//重试次数
 
@@ -185,8 +188,9 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
         item.put("PayCurrencyType","CNY");//币种(为空,默认: CNY 有付款账号时,不能为 空)
         item.put("PayCurrencyName","人民币");//币种名称(为空,默认:人民币, 有付款账号时,不能为空)
         item.put("WhetherUrgent",whetherUrgentValue);//是否加急 1.是 2.否
-        item.put("PayUse",payUse);
-        item.put("Purpose",payUse);
+        item.put("Remark",fymx);//附言
+        item.put("PayUse",purpose);//摘要长度上限20
+        item.put("Purpose",purpose);
 
         Map paymentRec = new HashMap();
         paymentRec.put("ReceiveAccountNo",skfyhzh);
@@ -244,12 +248,26 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
                     String relPaymentDate2 = UtilMap.getString(map, "RelPaymentDate");
                     String failReasons2 = UtilMap.getString(resultInfo, "FailReasons");
 
-                    //更新付款明细
-                    ydClient.operateData(YDParam.builder()
+                    //查询付款明细
+                    List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
                             .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mjs6mcfn, textField_mk128ce5", billsPayOrderNo, billsPayOrderNo2)))
-                            .formUuid("FORM-2D646B4D1C1F4628A0DEA1072656901143Y9")
-                            .formDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mjs6mcgg, dateField_mkdm7y7c, textareaField_mjs6mcgf",PayStatusName2,DateUtil.parse(relPaymentDate2, "yyyy-MM-dd").getTime(),failReasons2)))
-                            .build(), YDConf.FORM_OPERATION.upsert);
+                            .formUuid("FORM-2D646B4D1C1F4628A0DEA1072656901143Y9").build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+                    //付款明细逐条更新 防止集成自动化并发
+                    for (Map datum : data) {
+                        String detailFormInstId = UtilMap.getString(datum, "formInstanceId");
+
+                        ydClient.operateData(YDParam.builder()
+                                .formInstanceId(detailFormInstId)
+                                .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mjs6mcgg, dateField_mkdm7y7c, textareaField_mjs6mcgf",PayStatusName2, Strings.isNotBlank(relPaymentDate2) ? DateUtil.parse(relPaymentDate2, "yyyy-MM-dd").getTime() : null,failReasons2)))
+                                .build(), YDConf.FORM_OPERATION.update);
+
+                        try {
+                            Thread.sleep(3000);
+                        } catch (InterruptedException e) {
+                            throw new RuntimeException(e);
+                        }
+                    }
                 }
             }else {
                 //无付款明细
@@ -267,9 +285,7 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
                             .formDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mjs6mcgg, dateField_mkdm7y7c, textareaField_mjs6mcgf",payStatusName,DateUtil.parse(relPaymentDate, "yyyy-MM-dd").getTime(),failReasons)))
                             .build(), YDConf.FORM_OPERATION.upsert);
                 }
-
             }
-
         }else {
             //付款单生成失败
             String failReasons = UtilMap.getString(resultInfo, "FailReasons");
@@ -332,7 +348,7 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
         String note = UtilMap.getString(formData, "textareaField_mkdsowjj");//备注
         item.put("Remark",note);//备注
         String payUse = UtilMap.getString(formData, "textareaField_mjmc84h9");//费用明细
-        item.put("PayUse",payUse);
+        item.put("PayUse","工资");//摘要长度上限20
         item.put("Purpose","工资");
 
         List<Map> batchPrivateRecList = new ArrayList<>();
@@ -369,6 +385,84 @@ public class LianAnGyServiceImpl implements LianAnGyPayService {
         return McR.success();
     }
 
+    @Override
+    public McR reimburse(Map map) {
+        String formInstId = UtilMap.getString(map, "formInstId");
+
+        Map item = new HashMap();
+
+        Map formData = ydClient.queryData(YDParam.builder()
+                .formInstanceId(formInstId)
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+        String fkgs = UtilMap.getString(formData, "textField_mjzgymw0");//付款公司
+        String fkfyhzh = UtilMap.getString(formData, "textField_mjzgymw1");//付款方银行账号
+
+        int retryNUM = UtilMap.getInt(formData, "numberField_mkp4wc2r");//重试次数
+
+        if (retryNUM > 0){
+            item.put("BillsPayOrderNo",formInstId + "_" + retryNUM);//外部系统单据编号
+        }else {
+            item.put("BillsPayOrderNo",formInstId);//外部系统单据编号
+        }
+
+        //时间戳转化为yyyy-MM-dd
+        long fkrq = UtilMap.getLong(formData, "dateField_mkdsowjd");
+        String fkrqStr = DateUtil.format(new Date(fkrq), "yyyy-MM-dd");
+        item.put("PaymentDate",fkrqStr);//付款日期(期望支付日期)
+        item.put("BusinessTypeCode",GYPAY_API_TYPE_NO);//业务类型编号
+        item.put("BusinessTypeName",GYPAY_API_TYPE_NAME);//业务类型名称
+        item.put("PayOrgName",fkgs);//付款单位名称
+        item.put("PayAccountNo",fkfyhzh);//付款方银行账号
+        String payChannel = UtilMap.getString(formData, "selectField_mjm87v3v");
+        String payChannelValue = "";
+        //支付方式 1.直联支付 2.线下支付 3.全额支付 4.差额支付
+        switch (payChannel){
+            case "直联支付":payChannelValue = "1";break;
+            case "线下支付":payChannelValue = "2";break;
+            default:break;
+        }
+        item.put("PayChannel",payChannelValue);
+        item.put("SumPayAmount",UtilMap.getDouble(formData, "numberField_mkdsowjo").toString());//合计付款金额
+        item.put("PayCurrencyType","CNY");//币种(为空,默认: CNY 有付款账号时,不能为 空)
+
+        item.put("PayCurrencyName","人民币");//币种名称(为空,默认:人民币, 有付款账号时,不能为空)
+        String whetherUrgent = UtilMap.getString(formData, "radioField_mkdsowje");
+        item.put("WhetherUrgent","是".equals(whetherUrgent) ? 1 : 2);//是否加急 1.是 2.否
+        String note = UtilMap.getString(formData, "textareaField_mkdsowjj");//备注
+        item.put("Note",note);//备注
+
+        List<Map> paymentRecList = new ArrayList<>();
+
+        List<Map> details = UtilMap.getList(formData, "tableField_mjm9e1zc");
+        for (Map detail : details) {
+            String billsPayOrderNo = UtilMap.getString(detail,"textField_mk1278lu");//收款方单据编号
+            String privateAmount = UtilMap.getDouble(detail,"numberField_mjm9e1zl").toString();//付款金额
+            String receiveAccountNo = UtilMap.getString(detail,"textField_mjm9e1zf");//收款方银行账号
+            String receiveAccountName = UtilMap.getString(detail,"textField_mjm9e1zg");//收款方账户名称
+            String payUse = UtilMap.getString(detail,"textareaField_mjsl53kh");//费用明细
+
+            Map paymentRec = new HashMap();
+            paymentRec.put("BillsPayOrderNo",billsPayOrderNo);
+            paymentRec.put("PrivateAmount",privateAmount);
+            paymentRec.put("ReceiveAccountNo",receiveAccountNo);
+            paymentRec.put("ReceiveAccountName",receiveAccountName);
+            paymentRec.put("PayUse","报销");//摘要长度上限20
+            paymentRec.put("Purpose","报销");
+
+            paymentRecList.add(paymentRec);
+        }
+
+        item.put("PaymentRecList",paymentRecList);
+
+        Map<String,Object> data = UtilMap.map("ParamSet", Arrays.asList(item));
+
+        Map result = gyPost("T0022", data);
+
+
+        return McR.success();
+    }
+
     private Map gyPost(String MesgNo,Map<String,Object> data){
         log.info("data:{}",data);
 

+ 20 - 0
mjava-lianan/src/main/java/com/malk/lianan/service/impl/LianAnServiceImpl.java

@@ -0,0 +1,20 @@
+package com.malk.lianan.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.lianan.service.LianAnService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class LianAnServiceImpl implements LianAnService {
+    @Autowired
+    private YDClient ydClient;
+
+}