Browse Source

思库红冲发票调整

wzy 1 week ago
parent
commit
5dedaef9db

+ 78 - 13
mjava-siku/src/main/java/com/malk/siku/service/impl/SikuServiceImpl.java

@@ -141,19 +141,65 @@ public class SikuServiceImpl implements SikuService {
         item.put("productBizCode","1001");//产品bizcode
         item.put("invoiceName",UtilMap.getString(formData,"textField_mkgarw4d"));//开票名称
         item.put("taxPercent",UtilMap.getDouble(formData,"numberField_mkgkboht")/100);//税率
-        item.put("quantity",1);//数量
         item.put("forexName","CNY");//币种
         item.put("exchangeRate",1);//外汇汇率
-        item.put("priceWithTax",UtilMap.getDouble(formData,"numberField_mkdo0azb"));//含税单价
         item.put("taxClassShortCode",UtilMap.getString(formData,"textField_mm49zsli"));//税收分类编码
 
+        if (!"红冲".equals(fplx)){
+            item.put("quantity",1);//数量
+            item.put("priceWithTax",UtilMap.getDouble(formData,"numberField_mkdo0azb"));//含税单价
+        }else {
+            item.put("quantity",-1);//数量
+            item.put("priceWithTax",UtilMap.getDouble(formData,"numberField_mknspz7d"));//含税单价
+            Map originInvoice = new HashMap();
+            originInvoice.put("blueInvoiceNumber",UtilMap.getString(formData,"textField_mkxmix7d"));//原蓝字发票号
+            item.put("blueInvoiceDto",Arrays.asList(originInvoice));
+        }
+
         application.put("items",Arrays.asList(item));
 
         Map result = MkYpUtil.application(Arrays.asList(application));
 
+        if (!isTrue(result)){
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(formInstId)
+                    .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("radioField_mkxripcc, textareaField_mmlzqvn0","开票失败",getErrorMsg(result))))
+                    .useLatestVersion(true)
+                    .build(), YDConf.FORM_OPERATION.update);
+        }
+
         return McR.success();
     }
 
+    private boolean isTrue(Map result){
+        String messageCode = UtilMap.getString(result, "messageCode");
+
+        if (Objects.nonNull(messageCode) && "SUCCESS".equals(messageCode)){
+            return true;
+        }else {
+            return false;
+        }
+    }
+
+    //获取错误信息
+    private String getErrorMsg(Map result) {
+        String errorMsg = UtilMap.getString(result, "message");
+
+        Map data = UtilMap.getMap(result, "data");
+
+        if (Objects.nonNull(data)){
+            List<Map> errorData = UtilMap.getList(data, "errorData");
+
+            if (Objects.nonNull(errorData) && !errorData.isEmpty()){
+                for (Map errorDatum : errorData) {
+                    errorMsg = errorMsg + ";" + UtilMap.getString(errorDatum, "errorMessage");
+                }
+            }
+        }
+
+        return errorMsg;
+    }
+
     private static String getEstimatedInvoiceType(String fplx, String estimatedInvoiceType) {
         switch (fplx){
             case "应/免税普票":
@@ -186,6 +232,7 @@ public class SikuServiceImpl implements SikuService {
         formData.put("radioField_mkxripcc","开票成功");
         formData.put("textField_mkxripc6",invoiceNumber);
         formData.put("textField_mm3aixk0",downloadPageUrl);
+        formData.put("textareaField_mmlzqvn0","");
 
         if (Strings.isNotBlank(pdfUrl)){
             String fileName = invoiceNumber + ".pdf";
@@ -420,11 +467,17 @@ public class SikuServiceImpl implements SikuService {
 
                 Double receivedAmount = UtilMap.getDouble(receivable, "receivedAmount");//已收金额
 
-                ydClient.operateData(YDParam.builder()
+                List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
                         .formUuid("FORM-A9A47B0365DB437F8F4C8E01B4468220K7GU")
                         .searchCondition(JSONObject.toJSONString(UtilMap.map("textField_mkxripc6",invoiceNumber)))
-                        .formDataJson(JSONObject.toJSONString(UtilMap.map("numberField_ml8t9c4u",receivedAmount)))
-                        .build(), YDConf.FORM_OPERATION.upsert);
+                        .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+                String formInstanceId = UtilMap.getString(data.get(0), "formInstanceId");
+
+                ydClient.operateData(YDParam.builder()
+                        .formInstanceId(formInstanceId)
+                        .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("numberField_ml8t9c4u",receivedAmount)))
+                        .build(), YDConf.FORM_OPERATION.update);
 
                 return;
             }
@@ -449,18 +502,30 @@ public class SikuServiceImpl implements SikuService {
 
         if (formCode.contains("需求")){
             //采购需求&结算
-            ydClient.operateData(YDParam.builder()
+            List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
                     .formUuid("FORM-C8C1FBBA781C4C5EBAC487C07BC5A86AD2HO")
-                    .formDataJson(JSONObject.toJSONString(UtilMap.map("numberField_mkf2qumf",amt)))
-                    .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mkkmij3o",formCode)))
-                    .build(), YDConf.FORM_OPERATION.upsert);
+                    .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mkkmij3o", formCode)))
+                    .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+            String formInstanceId = UtilMap.getString(data.get(0), "formInstanceId");
+
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(formInstanceId)
+                    .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("numberField_mkf2qumf",amt)))
+                    .build(), YDConf.FORM_OPERATION.update);
         }else {
             //直接采购结算单
-            ydClient.operateData(YDParam.builder()
+            List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
                     .formUuid("FORM-1AFEDDA034C74F0DB18FA60C941CB56EHUUG")
-                    .formDataJson(JSONObject.toJSONString(UtilMap.map("numberField_mkf2qumf",amt)))
-                    .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mkkmij3o",formCode)))
-                    .build(), YDConf.FORM_OPERATION.upsert);
+                    .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mkkmij3o", formCode)))
+                    .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+            String formInstanceId = UtilMap.getString(data.get(0), "formInstanceId");
+
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(formInstanceId)
+                    .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("numberField_mkf2qumf",amt)))
+                    .build(), YDConf.FORM_OPERATION.update);
         }
 
     }