wzy hai 1 mes
pai
achega
7e0bb01e10

+ 20 - 0
mjava-siku/src/main/java/com/malk/siku/controller/SikuController.java

@@ -115,6 +115,26 @@ public class SikuController {
         return McR.success();
     }
 
+    //每刻报销付款单完成回调
+    @PostMapping("/pay/callback")
+    public McR callback4(@RequestBody Map map){
+        log.info("每刻报销付款单完成回调:{}", JSONObject.toJSONString(map));
+
+        sikuService.invoiceWriteBack4(map);
+
+        return McR.success();
+    }
+
+    //每刻报销预付退回完成回调
+    @PostMapping("/repay/callback")
+    public McR callback5(@RequestBody Map map){
+        log.info("每刻报销预付退回完成回调:{}", JSONObject.toJSONString(map));
+
+        sikuService.invoiceWriteBack5(map);
+
+        return McR.success();
+    }
+
     //每刻预算冻结/释放
     @PostMapping("/updateBudget")
     public McR updateBudget(@RequestBody Map map){

+ 4 - 0
mjava-siku/src/main/java/com/malk/siku/service/SikuService.java

@@ -24,4 +24,8 @@ public interface SikuService {
     McR checkBudgetAmt(Map map);
 
     void updateBudget(Map map);
+
+    void invoiceWriteBack4(Map map);
+
+    void invoiceWriteBack5(Map map);
 }

+ 509 - 44
mjava-siku/src/main/java/com/malk/siku/service/impl/SikuServiceImpl.java

@@ -262,6 +262,7 @@ public class SikuServiceImpl implements SikuService {
             //发票开具成功后回调
             String bizCode = UtilMap.getString(bizData, "bizCode");//发票号码
             String invoiceNumber = UtilMap.getString(bizData, "invoiceNumber");//发票号码
+            long issueDate = UtilMap.getLong(bizData, "issueDate");//开票日期
             String pdfUrl = UtilMap.getString(bizData, "pdfUrl");//pdf文件下载地址
             String downloadPageUrl = UtilMap.getString(bizData, "downloadPageUrl");//发票下载页面链接
             List<Map> detailItems = (List<Map>) UtilMap.getList(bizData, "detailItems");
@@ -272,6 +273,7 @@ public class SikuServiceImpl implements SikuService {
             Map updateFormData = new HashMap();
             updateFormData.put("radioField_mkxripcc","开票成功");
             updateFormData.put("textField_mkxripc6",invoiceNumber);
+            updateFormData.put("dateField_mnfpbwpd",issueDate);
             updateFormData.put("textField_mm3aixk0",downloadPageUrl);
             updateFormData.put("textareaField_mmlzqvn0","");
 
@@ -700,6 +702,8 @@ public class SikuServiceImpl implements SikuService {
 
         List<Map> invoiceTitles = new ArrayList<>();
 
+        List<Map> accounts = new ArrayList<>();
+
         List<Map> invoiceList = UtilMap.getList(formData, "tableField_mn496ozf");
         for (Map invoice : invoiceList) {
             Map invoiceTitle = new HashMap();
@@ -709,9 +713,17 @@ public class SikuServiceImpl implements SikuService {
             invoiceTitle.put("bankBranchName",UtilMap.getString(invoice,"textField_mkddjwyt"));//开户行
             invoiceTitle.put("account",UtilMap.getString(invoice,"textField_mkddjwyu"));//银行账户
             invoiceTitles.add(invoiceTitle);
+
+            Map account = new HashMap();
+            account.put("paymentType","BANK");//账户类型,
+            account.put("bankAcctName",UtilMap.getString(invoice,"textField_mkddjwyr"));//账户名
+            account.put("bankAcctNumber",UtilMap.getString(invoice,"textField_mkddjwyu"));//银行对应银行卡号
+            account.put("bankName",UtilMap.getString(invoice,"textField_mkddjwyt"));//银行名称
+            accounts.add(account);
         }
 
-        customerObj.put("invoiceTitles",invoiceTitles);//发票抬头列表
+        customerObj.put("invoiceTitles",invoiceTitles);//账户信息
+        customerObj.put("accounts",accounts);//账户信息
 
         MkYpUtil.saveClient(Arrays.asList(customerObj));
 
@@ -725,6 +737,12 @@ public class SikuServiceImpl implements SikuService {
 
         Map bizData = UtilMap.getMap(calloutParams, "bizData");
 
+        long verifyDate = UtilMap.getLong(bizData, "verifyDate");//核销日期
+
+        List<Map> upStreamItemList = UtilMap.getList(bizData, "upStreamItemList");//主核销方核销明细
+
+        Double totalVerifyAmount = UtilMap.getDouble(upStreamItemList.get(0), "totalVerifyAmount");//本次核销金额
+
         List<Map> relatedDocuments = UtilMap.getList(bizData, "relatedDocuments");
 
         for (Map relatedDocument : relatedDocuments) {
@@ -733,6 +751,7 @@ public class SikuServiceImpl implements SikuService {
             if ("RECEIVABLE_AR".equals(formType)){
                 String bizCode = UtilMap.getString(relatedDocument, "bizCode");
 
+
                 //应收单查询
                 Map body = new HashMap();
                 body.put("bizCodes",Arrays.asList(bizCode));
@@ -754,9 +773,14 @@ public class SikuServiceImpl implements SikuService {
 
                 String formInstanceId = UtilMap.getString(data.get(0), "formInstanceId");
 
+                Map updateFormData = new HashMap();
+                updateFormData.put("numberField_ml8t9c4u",receivedAmount);//已收金额
+                updateFormData.put("dateField_mnfpbwpe",verifyDate);//核销日期
+                updateFormData.put("numberField_mngxcnih",totalVerifyAmount);//本次核销金额
+
                 ydClient.operateData(YDParam.builder()
                         .formInstanceId(formInstanceId)
-                        .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("numberField_ml8t9c4u",receivedAmount)))
+                        .updateFormDataJson(JSONObject.toJSONString(updateFormData))
                         .build(), YDConf.FORM_OPERATION.update);
 
                 return;
@@ -771,35 +795,69 @@ public class SikuServiceImpl implements SikuService {
     public void invoiceWriteBack3(Map map) {
         String formCode = UtilMap.getString(map, "formCode");
 
-        String operation = UtilMap.getString(map, "operation");
+        if (!formCode.contains("需求") && !formCode.contains("采购")){
+            //判断是否为核销报销单
+            Map formData = UtilMap.getMap(map, "formData");
 
-        if ("FORM_COMPLETE".equals(operation)){
-            //完成
-        }else if ("FORM_REJECT".equals(operation)){
-            //驳回
+            Map expenseList = UtilMap.getMap(formData, "expenseList");
+
+            List<Map> expenseValueList = UtilMap.getList(expenseList, "value");
+
+            for (Map expenseValue : expenseValueList) {
+                Map deductionList = UtilMap.getMap(expenseValue, "deductionList");//当前对公费用核销的数据(当前到票核销场景核销了哪些“预付未到票”记录)
+
+                List<Map> deductionValueList = UtilMap.getList(deductionList, "value");
+
+                Map deductionValue = deductionValueList.get(0);
+
+                Double deductionAmount = UtilMap.getDouble(deductionValue, "deductionAmount");//核销金额
+                String targetFormCode = UtilMap.getString(deductionValue, "targetFormCode");//核销报销单编号
+
+                if (targetFormCode.contains("需求") || targetFormCode.contains("采购")){
+                    //更新宜搭核销金额
+                    updateYdDeduction(targetFormCode,deductionAmount);
+                }
+            }
+
+            return;
         }
 
-        String[] split = formCode.split("-");
+        Map reimburseDetailInfo = MkBxUtil.reimburseDetailInfo(formCode);
 
-        String bh = split[0];//采购需求编号/直接采购单编号
-        int index = Integer.parseInt(split[1]);//子表索引
+        Boolean installment = UtilMap.getBoolean(reimburseDetailInfo, "installment");//是否使用分期付款
 
-        Map formData = UtilMap.getMap(map, "formData");
+        Boolean firstPeriodPayment = UtilMap.getBoolean(reimburseDetailInfo, "firstPeriodPayment");//分期情况下首期是否随本单支付
 
-        Map baseAmount = UtilMap.getMap(formData, "baseAmount");
+        double amt = 0;
 
-        Map value = UtilMap.getMap(baseAmount, "value");
+        if (installment){
+            if (firstPeriodPayment){
+                List<Map> collectionSchedule = UtilMap.getList(reimburseDetailInfo, "collectionSchedule");
 
-        String text = UtilMap.getString(value, "text");
+                Map collectionAmount = UtilMap.getMap(collectionSchedule.get(0), "collectionAmount");
+
+                amt = UtilMap.getDouble(collectionAmount,"amount");
+            }else {
+                return;
+            }
+        }else {
+            amt = UtilMap.getDouble(reimburseDetailInfo, "paymentAmount");//应付金额
+        }
+
+        String[] split = formCode.split("-");
+
+        String bh = split[0];//采购需求编号/直接采购单编号
+        int index = Integer.parseInt(split[1]);//子表索引
 
-        double amt = Double.parseDouble(text);
+        Map updateFormData = new HashMap();
+        List<Map> updateDetailList = new ArrayList<>();
 
         if (formCode.contains("需求")){
             //采购需求&结算
             List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
                     .formUuid("FORM-C8C1FBBA781C4C5EBAC487C07BC5A86AD2HO")
                     .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mkkmij3o", bh)))
-                    .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+                    .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
 
             String formInstanceId = UtilMap.getString(data.get(0), "formInstanceId");
 
@@ -811,58 +869,61 @@ public class SikuServiceImpl implements SikuService {
                 List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij56");
 
                 for (Map detail : detailList) {
+                    Map detailMap = new HashMap();
                     if (index == UtilMap.getInt(detail, "numberField_mn36ykxx")){
                         Double jscb = UtilMap.getDouble(detail, "numberField_mkkmij5e");//结算成本
                         Double yfkje = UtilMap.getDouble(detail, "numberField_mmvqom6l");//已付款金额
                         String fkzt = UtilMap.getString(detail, "selectField_mmvhqm0p");//付款状态
                         if (yfkje + amt == jscb){
-                            detail.put("selectField_mmvhqm0p","全部付款");
+                            detailMap.put("selectField_mmvhqm0p","全部付款");
                         }else if (yfkje + amt < jscb && yfkje + amt > 0  && !"部分退款".equals(fkzt)){
-                            detail.put("selectField_mmvhqm0p","部分付款");
+                            detailMap.put("selectField_mmvhqm0p","部分付款");
                         }
 
-                        detail.put("numberField_mmvqom6l",yfkje + amt);
-
-                        break;
+                        detailMap.put("numberField_mmvqom6l",yfkje + amt);
                     }
+                    updateDetailList.add(detailMap);
                 }
+                updateFormData.put("tableField_mkkmij56",updateDetailList);
             }else {
                 List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij61");
 
                 for (Map detail : detailList) {
+                    Map detailMap = new HashMap();
                     if (index == UtilMap.getInt(detail, "numberField_mn36ykxz")){
-
                         Double jscb = UtilMap.getDouble(detail, "numberField_mkkmij6p");//结算成本
                         Double yfkje = UtilMap.getDouble(detail, "numberField_mmvqs9h6");//已付款金额
                         String fkzt = UtilMap.getString(detail, "selectField_mkkmij6a");//付款状态
 
                         if (yfkje + amt == jscb){
-                            detail.put("selectField_mkkmij6a","全部付款");
+                            detailMap.put("selectField_mkkmij6a","全部付款");
                         }else if (yfkje + amt < jscb && yfkje + amt > 0 && !"部分退款".equals(fkzt)){
-                            detail.put("selectField_mkkmij6a","部分付款");
+                            detailMap.put("selectField_mkkmij6a","部分付款");
                         }
 
-                        detail.put("numberField_mmvqom6l",yfkje + amt);
-
-                        break;
+                        detailMap.put("numberField_mmvqs9h6",yfkje + amt);
                     }
+                    updateDetailList.add(detailMap);
                 }
+                updateFormData.put("tableField_mkkmij61",updateDetailList);
             }
 
             Double yzf = UtilMap.getDouble(ydFormData, "numberField_mkf2qumf");//已支付
 
-            ydFormData.put("numberField_mkf2qumf",yzf + amt);
+            updateFormData.put("numberField_mkf2qumf",yzf + amt);//已支付
+            updateFormData.put("numberField_mnibjld0",amt);//最新支付金额
 
             ydClient.operateData(YDParam.builder()
                     .formInstanceId(formInstanceId)
-                    .updateFormDataJson(JSONObject.toJSONString(ydFormData))
+                    .updateFormDataJson(JSONObject.toJSONString(updateFormData))
+                    .useLatestVersion(true)
                     .build(), YDConf.FORM_OPERATION.update);
         }else {
             //直接采购结算单
             List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
                     .formUuid("FORM-1AFEDDA034C74F0DB18FA60C941CB56EHUUG")
                     .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mkkmij3o", bh)))
-                    .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+                    .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
 
             String formInstanceId = UtilMap.getString(data.get(0), "formInstanceId");
 
@@ -874,56 +935,164 @@ public class SikuServiceImpl implements SikuService {
                 List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij56");
 
                 for (Map detail : detailList) {
+                    Map detailMap = new HashMap();
                     if (index == UtilMap.getInt(detail, "numberField_mn36ykxx")){
                         Double jscb = UtilMap.getDouble(detail, "numberField_mkkmij5e");//结算成本
                         Double yfkje = UtilMap.getDouble(detail, "numberField_mmvqom6k");//已付款金额
                         String fkzt = UtilMap.getString(detail, "selectField_mmvhtdy0");//付款状态
+
                         if (yfkje + amt == jscb){
-                            detail.put("selectField_mmvhtdy0","全部付款");
+                            detailMap.put("selectField_mmvhtdy0","全部付款");
                         }else if (yfkje + amt < jscb && yfkje + amt > 0  && !"部分退款".equals(fkzt)){
-                            detail.put("selectField_mmvhtdy0","部分付款");
+                            detailMap.put("selectField_mmvhtdy0","部分付款");
                         }
 
-                        detail.put("numberField_mmvqom6k",yfkje + amt);
-
-                        break;
+                        detailMap.put("numberField_mmvqom6k",yfkje + amt);
                     }
+                    updateDetailList.add(detailMap);
                 }
+                updateFormData.put("tableField_mkkmij56",updateDetailList);
             }else {
                 List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij61");
 
                 for (Map detail : detailList) {
+                    Map detailMap = new HashMap();
                     if (index == UtilMap.getInt(detail, "numberField_mn36ykxz")){
-
                         Double jscb = UtilMap.getDouble(detail, "numberField_mkkmij6p");//结算成本
                         Double yfkje = UtilMap.getDouble(detail, "numberField_mmvqom6l");//已付款金额
                         String fkzt = UtilMap.getString(detail, "selectField_mkkmij6a");//付款状态
 
                         if (yfkje + amt == jscb){
-                            detail.put("selectField_mkkmij6a","全部付款");
+                            detailMap.put("selectField_mkkmij6a","全部付款");
                         }else if (yfkje + amt < jscb && yfkje + amt > 0 && !"部分退款".equals(fkzt)){
-                            detail.put("selectField_mkkmij6a","部分付款");
+                            detailMap.put("selectField_mkkmij6a","部分付款");
                         }
 
-                        detail.put("numberField_mmvqom6l",yfkje + amt);
-
-                        break;
+                        detailMap.put("numberField_mmvqom6l",yfkje + amt);
                     }
+                    updateDetailList.add(detailMap);
                 }
+                updateFormData.put("tableField_mkkmij61",updateDetailList);
             }
-
             Double yzf = UtilMap.getDouble(ydFormData, "numberField_mkf2qumf");//已支付
 
-            ydFormData.put("numberField_mkf2qumf",yzf + amt);
+            updateFormData.put("numberField_mkf2qumf",yzf + amt);//已支付
+            updateFormData.put("numberField_mnibjld0",amt);//最新支付金额
+
 
             ydClient.operateData(YDParam.builder()
                     .formInstanceId(formInstanceId)
-                    .updateFormDataJson(JSONObject.toJSONString(ydFormData))
+                    .updateFormDataJson(JSONObject.toJSONString(updateFormData))
+                    .useLatestVersion(true)
                     .build(), YDConf.FORM_OPERATION.update);
         }
 
     }
 
+    //更新宜搭采购已核销金额
+    private void updateYdDeduction(String formCode, Double deductionAmount) {
+        String[] split = formCode.split("-");
+        String bh = split[0];
+        int index = Integer.parseInt(split[1]);
+
+        Map updateFormData = new HashMap();
+        List<Map> updateDetailList = new ArrayList<>();
+
+        if (formCode.contains("需求")){
+            //采购需求&结算
+            List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
+                    .formUuid("FORM-C8C1FBBA781C4C5EBAC487C07BC5A86AD2HO")
+                    .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mkkmij3o", bh)))
+                    .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+
+            String formInstanceId = UtilMap.getString(data.get(0), "formInstanceId");
+
+            Map ydFormData = UtilMap.getMap(data.get(0), "formData");
+
+            String type = UtilMap.getString(ydFormData, "radioField_mkkmij3b");
+
+            if ("常规需求".equals(type)){
+                List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij56");
+
+                for (Map detail : detailList) {
+                    Map detailMap = new HashMap();
+                    if (index == UtilMap.getInt(detail, "numberField_mn36ykxx")){
+                        Double yhxje = UtilMap.getDouble(detail, "numberField_mniatky8");//已核销金额
+
+                        detailMap.put("numberField_mniatky8",yhxje + deductionAmount);
+                    }
+                    updateDetailList.add(detailMap);
+                }
+                updateFormData.put("tableField_mkkmij56",updateDetailList);
+            }else {
+                List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij61");
+
+                for (Map detail : detailList) {
+                    Map detailMap = new HashMap();
+                    if (index == UtilMap.getInt(detail, "numberField_mn36ykxz")){
+                        Double yhxje = UtilMap.getDouble(detail, "numberField_mniatkya");//已核销金额
+
+                        detailMap.put("numberField_mniatkya",yhxje + deductionAmount);
+                    }
+                    updateDetailList.add(detailMap);
+                }
+                updateFormData.put("tableField_mkkmij61",updateDetailList);
+            }
+
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(formInstanceId)
+                    .updateFormDataJson(JSONObject.toJSONString(updateFormData))
+                    .useLatestVersion(true)
+                    .build(), YDConf.FORM_OPERATION.update);
+        }else {
+            //直接采购结算单
+            List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
+                    .formUuid("FORM-1AFEDDA034C74F0DB18FA60C941CB56EHUUG")
+                    .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mkkmij3o", bh)))
+                    .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+
+            String formInstanceId = UtilMap.getString(data.get(0), "formInstanceId");
+
+            Map ydFormData = UtilMap.getMap(data.get(0), "formData");
+
+            String type = UtilMap.getString(ydFormData, "radioField_mkkmij3b");
+
+            if ("常规采购".equals(type)){
+                List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij56");
+
+                for (Map detail : detailList) {
+                    Map detailMap = new HashMap();
+                    if (index == UtilMap.getInt(detail, "numberField_mn36ykxx")){
+                        Double yhxje = UtilMap.getDouble(detail, "numberField_mniatky8");//已核销金额
+
+                        detailMap.put("numberField_mniatky8",yhxje + deductionAmount);
+                    }
+                    updateDetailList.add(detailMap);
+                }
+                updateFormData.put("tableField_mkkmij56",updateDetailList);
+            }else {
+                List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij61");
+
+                for (Map detail : detailList) {
+                    Map detailMap = new HashMap();
+                    if (index == UtilMap.getInt(detail, "numberField_mn36ykxz")){
+                        Double yhxje = UtilMap.getDouble(detail, "numberField_mniatkya");//已核销金额
+
+                        detailMap.put("numberField_mniatkya",yhxje + deductionAmount);
+                    }
+                    updateDetailList.add(detailMap);
+                }
+                updateFormData.put("tableField_mkkmij61",updateDetailList);
+            }
+
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(formInstanceId)
+                    .updateFormDataJson(JSONObject.toJSONString(updateFormData))
+                    .useLatestVersion(true)
+                    .build(), YDConf.FORM_OPERATION.update);
+        }
+    }
+
     @Override
     public McR saveBxReimbursement2(Map map) {
         String formInstId = UtilMap.getString(map, "formInstId");
@@ -1270,6 +1439,302 @@ public class SikuServiceImpl implements SikuService {
 
     }
 
+    @Async
+    @Override
+    public void invoiceWriteBack4(Map map) {
+        String formCode = UtilMap.getString(map, "formCode");//付款单编号
+
+        //查询付款单详情
+        Map paymentDetailInfo = MkBxUtil.paymentDetailInfo(formCode);
+
+        String reimburseFormSubTypeBizCode = UtilMap.getString(paymentDetailInfo, "reimburseFormSubTypeBizCode");//关联的报销单的单据小类编码
+
+        //项目支付单(对公)
+        if ("FT208629766551519240".equals(reimburseFormSubTypeBizCode)){
+            String reimburseCode = UtilMap.getString(paymentDetailInfo, "reimburseCode");
+
+            //宜搭推送的项目支付单编号  格式:流水号-index
+            if (reimburseCode.contains("采购") || reimburseCode.contains("需求")){
+                String[] split = reimburseCode.split("-");
+
+                String ydFormCode = split[0];
+                int index = Integer.parseInt(split[1]);
+
+                Map approvedAmount = UtilMap.getMap(paymentDetailInfo, "approvedAmount");
+                Double amt = UtilMap.getDouble(approvedAmount, "amount");//审批通过金额
+
+                long settledAt = UtilMap.getLong(paymentDetailInfo, "settledAt");//支付时间
+
+                Map updateFormData = new HashMap();
+                List<Map> updateDetailList = new ArrayList<>();
+
+                if (reimburseCode.contains("需求")){
+                    //采购需求&结算
+                    List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
+                            .formUuid("FORM-C8C1FBBA781C4C5EBAC487C07BC5A86AD2HO")
+                            .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mkkmij3o", ydFormCode)))
+                            .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+
+                    String formInstanceId = UtilMap.getString(data.get(0), "formInstanceId");
+
+                    Map ydFormData = UtilMap.getMap(data.get(0), "formData");
+
+                    String type = UtilMap.getString(ydFormData, "radioField_mkkmij3b");
+
+                    if ("常规需求".equals(type)){
+                        List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij56");
+
+                        for (Map detail : detailList) {
+                            Map detailMap = new HashMap();
+                            if (index == UtilMap.getInt(detail, "numberField_mn36ykxx")){
+                                Double jscb = UtilMap.getDouble(detail, "numberField_mkkmij5e");//结算成本
+                                Double yfkje = UtilMap.getDouble(detail, "numberField_mmvqom6l");//已付款金额
+                                String fkzt = UtilMap.getString(detail, "selectField_mmvhqm0p");//付款状态
+                                if (yfkje + amt == jscb){
+                                    detailMap.put("selectField_mmvhqm0p","全部付款");
+                                }else if (yfkje + amt < jscb && yfkje + amt > 0  && !"部分退款".equals(fkzt)){
+                                    detailMap.put("selectField_mmvhqm0p","部分付款");
+                                }
+
+                                detailMap.put("numberField_mmvqom6l",yfkje + amt);
+                                detailMap.put("dateField_mnh6e4zy",settledAt);
+                            }
+                            updateDetailList.add(detailMap);
+                        }
+                        updateFormData.put("tableField_mkkmij56",updateDetailList);
+                    }else {
+                        List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij61");
+
+                        for (Map detail : detailList) {
+                            Map detailMap = new HashMap();
+                            if (index == UtilMap.getInt(detail, "numberField_mn36ykxz")){
+                                Double jscb = UtilMap.getDouble(detail, "numberField_mkkmij6p");//结算成本
+                                Double yfkje = UtilMap.getDouble(detail, "numberField_mmvqs9h6");//已付款金额
+                                String fkzt = UtilMap.getString(detail, "selectField_mkkmij6a");//付款状态
+
+                                if (yfkje + amt == jscb){
+                                    detail.put("selectField_mkkmij6a","全部付款");
+                                }else if (yfkje + amt < jscb && yfkje + amt > 0 && !"部分退款".equals(fkzt)){
+                                    detailMap.put("selectField_mkkmij6a","部分付款");
+                                }
+
+                                detailMap.put("numberField_mmvqs9h6",yfkje + amt);
+                                detailMap.put("dateField_mnh6e4zy",settledAt);
+                            }
+                            updateDetailList.add(detailMap);
+                        }
+                        updateFormData.put("tableField_mkkmij61",updateDetailList);
+                    }
+
+                    Double yzf = UtilMap.getDouble(ydFormData, "numberField_mkf2qumf");//已支付
+
+                    ydFormData.put("numberField_mkf2qumf",yzf + amt);//已支付
+                    ydFormData.put("numberField_mnibjld0",amt);//最新支付金额
+
+                    ydClient.operateData(YDParam.builder()
+                            .formInstanceId(formInstanceId)
+                            .updateFormDataJson(JSONObject.toJSONString(ydFormData))
+                            .build(), YDConf.FORM_OPERATION.update);
+                }else {
+                    //直接采购结算单
+                    List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
+                            .formUuid("FORM-1AFEDDA034C74F0DB18FA60C941CB56EHUUG")
+                            .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mkkmij3o", ydFormCode)))
+                            .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+
+                    String formInstanceId = UtilMap.getString(data.get(0), "formInstanceId");
+
+                    Map ydFormData = UtilMap.getMap(data.get(0), "formData");
+
+                    String type = UtilMap.getString(ydFormData, "radioField_mkkmij3b");
+
+                    if ("常规采购".equals(type)){
+                        List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij56");
+
+                        for (Map detail : detailList) {
+                            Map detailMap = new HashMap();
+                            if (index == UtilMap.getInt(detail, "numberField_mn36ykxx")){
+                                Double jscb = UtilMap.getDouble(detail, "numberField_mkkmij5e");//结算成本
+                                Double yfkje = UtilMap.getDouble(detail, "numberField_mmvqom6k");//已付款金额
+                                String fkzt = UtilMap.getString(detail, "selectField_mmvhtdy0");//付款状态
+                                if (yfkje + amt == jscb){
+                                    detailMap.put("selectField_mmvhtdy0","全部付款");
+                                }else if (yfkje + amt < jscb && yfkje + amt > 0  && !"部分退款".equals(fkzt)){
+                                    detailMap.put("selectField_mmvhtdy0","部分付款");
+                                }
+
+                                detailMap.put("numberField_mmvqom6k",yfkje + amt);
+                                detailMap.put("dateField_mnh6e4zy",settledAt);
+                            }
+                            updateDetailList.add(detailMap);
+                        }
+                        updateFormData.put("tableField_mkkmij56",updateDetailList);
+                    }else {
+                        List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij61");
+
+                        for (Map detail : detailList) {
+                            Map detailMap = new HashMap();
+                            if (index == UtilMap.getInt(detail, "numberField_mn36ykxz")){
+                                Double jscb = UtilMap.getDouble(detail, "numberField_mkkmij6p");//结算成本
+                                Double yfkje = UtilMap.getDouble(detail, "numberField_mmvqom6l");//已付款金额
+                                String fkzt = UtilMap.getString(detail, "selectField_mkkmij6a");//付款状态
+
+                                if (yfkje + amt == jscb){
+                                    detailMap.put("selectField_mkkmij6a","全部付款");
+                                }else if (yfkje + amt < jscb && yfkje + amt > 0 && !"部分退款".equals(fkzt)){
+                                    detailMap.put("selectField_mkkmij6a","部分付款");
+                                }
+
+                                detailMap.put("numberField_mmvqom6l",yfkje + amt);
+                                detailMap.put("dateField_mnh6e4zy",settledAt);
+                            }
+                            updateDetailList.add(detailMap);
+                        }
+                        updateFormData.put("tableField_mkkmij61",updateDetailList);
+                    }
+
+                    Double yzf = UtilMap.getDouble(ydFormData, "numberField_mkf2qumf");//已支付
+
+                    updateFormData.put("numberField_mkf2qumf",yzf + amt);//已支付
+                    updateFormData.put("numberField_mnibjld0",amt);//最新支付金额
+
+                    ydClient.operateData(YDParam.builder()
+                            .formInstanceId(formInstanceId)
+                            .updateFormDataJson(JSONObject.toJSONString(updateFormData))
+                            .build(), YDConf.FORM_OPERATION.update);
+                }
+            }
+        }
+    }
+
+    @Async
+    @Override
+    public void invoiceWriteBack5(Map map) {
+        String formCode = UtilMap.getString(map, "formCode");
+
+        Map repayDetailInfo = MkBxUtil.repayDetailInfo(formCode);
+
+        Map repayAmount = UtilMap.getMap(repayDetailInfo, "repayAmount");
+
+        Double amount = UtilMap.getDouble(repayAmount, "amount");//还款金额
+
+        List<Map> returnDeductions = UtilMap.getList(repayDetailInfo, "returnDeductions");
+
+        for (Map returnDeduction : returnDeductions) {
+            String recordFormCode = UtilMap.getString(returnDeduction, "recordFormCode");
+
+            if (recordFormCode.contains("采购") || recordFormCode.contains("需求")){
+                updateYdRepay(recordFormCode,amount);
+            }
+
+        }
+    }
+
+    //更新宜搭采购已退回金额
+    private void updateYdRepay(String formCode, Double amount) {
+        String[] split = formCode.split("-");
+        String bh = split[0];
+        int index = Integer.parseInt(split[1]);
+
+        Map updateFormData = new HashMap();
+        List<Map> updateDetailList = new ArrayList<>();
+
+        if (formCode.contains("需求")){
+            //采购需求&结算
+            List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
+                    .formUuid("FORM-C8C1FBBA781C4C5EBAC487C07BC5A86AD2HO")
+                    .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mkkmij3o", bh)))
+                    .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+
+            String formInstanceId = UtilMap.getString(data.get(0), "formInstanceId");
+
+            Map ydFormData = UtilMap.getMap(data.get(0), "formData");
+
+            String type = UtilMap.getString(ydFormData, "radioField_mkkmij3b");
+
+            if ("常规需求".equals(type)){
+                List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij56");
+
+                for (Map detail : detailList) {
+                    Map detailMap = new HashMap();
+                    if (index == UtilMap.getInt(detail, "numberField_mn36ykxx")){
+                        Double ythje = UtilMap.getDouble(detail, "numberField_mn4g182f");//已退回金额
+
+                        detailMap.put("numberField_mn4g182f",ythje + amount);
+                    }
+                    updateDetailList.add(detailMap);
+                }
+                updateFormData.put("tableField_mkkmij56",updateDetailList);
+            }else {
+                List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij61");
+
+                for (Map detail : detailList) {
+                    Map detailMap = new HashMap();
+                    if (index == UtilMap.getInt(detail, "numberField_mn36ykxz")){
+                        Double ythje = UtilMap.getDouble(detail, "numberField_mn4g182g");//已退回金额
+
+                        detailMap.put("numberField_mn4g182g",ythje + amount);
+                    }
+                    updateDetailList.add(detailMap);
+                }
+                updateFormData.put("tableField_mkkmij61",updateDetailList);
+            }
+
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(formInstanceId)
+                    .updateFormDataJson(JSONObject.toJSONString(updateFormData))
+                    .useLatestVersion(true)
+                    .build(), YDConf.FORM_OPERATION.update);
+        }else {
+            //直接采购结算单
+            List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
+                    .formUuid("FORM-1AFEDDA034C74F0DB18FA60C941CB56EHUUG")
+                    .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mkkmij3o", bh)))
+                    .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
+
+            String formInstanceId = UtilMap.getString(data.get(0), "formInstanceId");
+
+            Map ydFormData = UtilMap.getMap(data.get(0), "formData");
+
+            String type = UtilMap.getString(ydFormData, "radioField_mkkmij3b");
+
+            if ("常规采购".equals(type)){
+                List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij56");
+
+                for (Map detail : detailList) {
+                    Map detailMap = new HashMap();
+                    if (index == UtilMap.getInt(detail, "numberField_mn36ykxx")){
+                        Double ythje = UtilMap.getDouble(detail, "numberField_mn4g182f");//已退回金额
+
+                        detailMap.put("numberField_mn4g182f",ythje + amount);
+                    }
+                    updateDetailList.add(detailMap);
+                }
+                updateFormData.put("tableField_mkkmij56",updateDetailList);
+            }else {
+                List<Map> detailList = UtilMap.getList(ydFormData, "tableField_mkkmij61");
+
+                for (Map detail : detailList) {
+                    Map detailMap = new HashMap();
+                    if (index == UtilMap.getInt(detail, "numberField_mn36ykxz")){
+                        Double ythje = UtilMap.getDouble(detail, "numberField_mn4g182g");//已退回金额
+
+                        detailMap.put("numberField_mn4g182g",ythje + amount);
+                    }
+                    updateDetailList.add(detailMap);
+                }
+                updateFormData.put("tableField_mkkmij61",updateDetailList);
+            }
+
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(formInstanceId)
+                    .updateFormDataJson(JSONObject.toJSONString(updateFormData))
+                    .useLatestVersion(true)
+                    .build(), YDConf.FORM_OPERATION.update);
+        }
+
+    }
+
     //文件下载到本地
     private void downloadFile(String downloadUri,String downloadPath){
         try {

+ 32 - 0
mjava-siku/src/main/java/com/malk/siku/utils/MkBxUtil.java

@@ -181,6 +181,38 @@ public class MkBxUtil {
         return result;
     }
 
+    //付款单详情
+    public static Map paymentDetailInfo(String formCode){
+        Map result = (Map) JSONObject.parse(UtilHttp.doGet("https://" + host + "/api/openapi/payment/detailInfo/" + formCode, MkBxUtil.initTokenHeader(), (Map) null));
+
+        log.info("Result:{}",result);
+
+        Map data = UtilMap.getMap(result, "data");
+
+        return data;
+    }
+
+    //报销单详情
+    public static Map reimburseDetailInfo(String formCode){
+        Map result = (Map) JSONObject.parse(UtilHttp.doGet("https://" + host + "/api/openapi/form/reimburse/" + formCode, MkBxUtil.initTokenHeader(), (Map) null));
+
+        log.info("Result:{}",result);
+
+        Map data = UtilMap.getMap(result, "data");
+
+        return data;
+    }
+
+    //还款单详情
+    public static Map repayDetailInfo(String formCode){
+        Map result = (Map) JSONObject.parse(UtilHttp.doGet("https://" + host + "/api/openapi/form/repayment/" + formCode, MkBxUtil.initTokenHeader(), (Map) null));
+
+        log.info("Result:{}",result);
+
+        Map data = UtilMap.getMap(result, "data");
+
+        return data;
+    }
 
     private static String getSecret(String appCode, String appSecret, long timeMillis){
         log.info("time:{}",timeMillis);

+ 1 - 1
mjava-siku/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: prod
+    active: dev
   servlet:
     multipart:
       max-file-size: 100MB