Kaynağa Gözat

Merge branch 'master' of http://111.75.220.136:10030/turborao/jyyy

tanya 2 hafta önce
ebeveyn
işleme
8a313c1e80

+ 31 - 56
code/base/nckd-jimin-base-helper/src/main/java/nckd/base/helper/FileSECUtils.java

@@ -29,6 +29,7 @@ import java.io.*;
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
 import java.text.DecimalFormat;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -175,10 +176,6 @@ public class FileSECUtils {
 
         try {
 
-            //String filePath = "C:\\Users\\turbo_i49t4d3\\Downloads\\PMS项目预算编制维度-01.xlsx";
-           // File file = new File(filePath);
-            //InputStream inputStream1 = new FileInputStream(filePath);
-
             CloseableHttpClient httpclient = null;
             HttpPost post = new HttpPost(url);
             post.addHeader("method~name", "fileDecryptionRest"); //文件解密
@@ -229,64 +226,23 @@ public class FileSECUtils {
     }
 
 
-    /**
-     * 根据地址获得数据的字节流并转换成大小
-     * @param originalPath 文件实际地址
-     * @return
-     */
-    public static long getFileSizeByPath(String originalPath){
-        InputStream inStream=null;
-        ByteArrayOutputStream outStream=null;
-        long size = 0;
-        try {
-            inStream = FileServiceFactory.getAttachmentFileService().getInputStream(originalPath);
-
-            outStream = new ByteArrayOutputStream();
-            byte[] buffer = new byte[1024];
-            int len = 0;
-            while( (len = inStream.read(buffer)) != -1 ){
-                outStream.write(buffer, 0, len);
-            }
-            byte[] bt =  outStream.toByteArray();
-
-            if(null != bt && bt.length > 0){
-                DecimalFormat df = new DecimalFormat("#");
-                size = Integer.parseInt(df.format((double) bt.length));
-
-                logger.info("SEC附件 文件大小: " + size);
-            }else{
-                logger.info("SEC附件 没有从路径上获得内容");
-            }
-            inStream.close();
-            outStream.close();
-
-        } catch (Exception e) {
-            logger.info("SEC附件 文件大小ERR: " + e.getMessage());
-        }finally{
-            try{
-                if(inStream !=null){
-                    inStream.close();
-                }
-                if(outStream !=null){
-                    outStream.close();
-                }
-            } catch (IOException e) {
-                logger.info("SEC附件 文件大小ERR: " + e.getMessage());
-            }
-        }
-        return size;
-    }
-
     public static InputStream processFileWithSEC(String path,InputStream inputStream) {
         File tempFile = null;
         try {
-            logger.info("--------------SEC附件 processFileWithSEC1 ----------------");
+            logger.info("--------------SEC附件解密 processFileWithSEC1 ----------------");
             String filename = getFileNameWithoutExtension(path);
             String filetype = getFileType(path);
+            /**
+             * 判断是否是媒体文件,如果是媒体文件,则不进行处理
+             */
+            boolean isMedia = isMediaFile(filetype);
+            if(isMedia){
+                return inputStream;
+            }
             String filepath =  System.getProperty("java.io.tmpdir") + "/" + filename;
             // 1. 将 InputStream 写入本地临时文件
             tempFile = File.createTempFile(filepath,"."+filetype);
-            logger.info("--------------SEC附件临时路径"+filepath,"."+filetype+" ----------------");
+            logger.info("--------------SEC附件临时路径 "+filepath,"."+filetype+" ----------------");
             tempFile.deleteOnExit(); // 确保 JVM 退出时删除临时文件
 
             try (FileOutputStream fos = new FileOutputStream(tempFile)) {
@@ -296,15 +252,17 @@ public class FileSECUtils {
                     fos.write(buffer, 0, bytesRead);
                 }
             }
+            //返回临时文件输入流,不能使用的文件流
+            InputStream tmpInputStream = new FileInputStream(tempFile);
 
             // 2. 调用是否加密接口方法
             int isEncrypted = checkFileIsEncryptionRest(new FileInputStream(tempFile));
             if (isEncrypted == -1) {
                 logger.info("--------------SEC附件检查,文件加密状态检查失败----------------");
-                return inputStream;
+                return tmpInputStream;
             } else if (isEncrypted == 0) {
                 logger.info("--------------SEC附件检查,是明文无需解密----------------");
-                return inputStream;
+                return tmpInputStream;
             }
 
             // 3. 获取文件大小
@@ -368,5 +326,22 @@ public class FileSECUtils {
         return fileName.substring(0, dotIndex);
     }
 
+    public static boolean isMediaFile(String fileType) {
+        if (fileType == null || fileType.isEmpty()) {
+            return false;
+        }
+
+        // 转换为小写,便于匹配
+        String type = fileType.toLowerCase();
+
+        List<String> mediaTypes = Arrays.asList(
+                "mp4", "mkv", "flv", "avi", "mov", "wmv",
+                "mpeg", "mpg", "3gp", "webm", "ts", "m4v",
+                "jpg", "jpeg", "png", "gif", "bmp", "webp",
+                "tiff", "svg", "ico", "heic","pic"
+        );
+
+        return mediaTypes.contains(type);
+    }
 
 }

+ 87 - 19
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/fi/er/webService/SaveAccountApi.java

@@ -1,5 +1,6 @@
 package fi.er.webService;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import fi.cas.opplugin.TypeUtils;
@@ -8,18 +9,20 @@ import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
 import kd.bos.openapi.common.custom.annotation.ApiController;
 import kd.bos.openapi.common.custom.annotation.ApiMapping;
 import kd.bos.openapi.common.custom.annotation.ApiParam;
 import kd.bos.openapi.common.custom.annotation.ApiPostMapping;
+import kd.bos.openapi.common.result.CustomApiResult;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
-
+import kd.bos.util.StringUtils;
+import nckd.jimin.jyyy.fi.common.NstcApiReturnModel;
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.Date;
-import java.util.List;
 
 /**
  * @author zf
@@ -30,15 +33,17 @@ import java.util.List;
 public class SaveAccountApi implements Serializable {
     protected static final Long DEFAULT_ORG_ID = 100000L;
 
+    private static final Log logger = LogFactory.getLog(SaveAccountApi.class);
+
     /**
      * @description 行名行号同步接口
      * @param data
      * @return CustomApiResult
      */
     @ApiPostMapping(value = "/save", desc = "同步银行账户")
-    public CustomApiResultForMy<List<AccountSynReturnModel>> saveAccount (@ApiParam(value = "九恒星银行账户") JSONArray data) {
+    public CustomApiResult<JSONObject> saveAccount (@ApiParam(value = "九恒星银行账户") JSONArray data) {
         StringBuilder resultString = new StringBuilder();
-        List<AccountSynReturnModel> returnList = new ArrayList<>();
+
         Boolean result = true;
 
         DynamicObject rmbinfo = BusinessDataServiceHelper.loadSingleFromCache(1L,"bd_currency");
@@ -56,18 +61,32 @@ public class SaveAccountApi implements Serializable {
         DynamicObject defaulttypecodeinfo =BusinessDataServiceHelper.loadSingleFromCache("bd_bankcgsetting",new QFilter[]{typecodeFilter});
 
 
+        JSONArray dataArray = new JSONArray();
+
         //循环传入的数据
         for (int i = 0; i < data.size(); i++) {
             JSONObject eobject = data.getJSONObject(i);
-            AccountSynReturnModel contractSynReturnModel = syncAccount(eobject,rmbinfo,defaultjrjgtypeinfo,defaultgj,defaulttypecodeinfo,defaultOrg,user);
-            if ("500".equals(contractSynReturnModel.getCode())){
-                result = false;
+            try {
+                NstcApiReturnModel contractSynReturnModel = syncAccount(eobject, rmbinfo, defaultjrjgtypeinfo, defaultgj, defaulttypecodeinfo, defaultOrg, user);
+                if ("500".equals(contractSynReturnModel.getCode())) {
+                    result = false;
+                }
+                dataArray.add(JSONObject.parseObject(JSON.toJSONString(contractSynReturnModel)));
+            } catch (Exception e) {
+                logger.error("保存银行账号失败:{}", e.getMessage());
+
+                NstcApiReturnModel returnModel = new NstcApiReturnModel();
+
+                returnModel.setNumber(eobject.get("bankAccountNumber")+"");
+                returnModel.setName(eobject.get("acctName")+"");
+                returnModel.setCode("500");
+                returnModel.setMessage("保存银行账号失败: " + e.getMessage());
+
+                dataArray.add(JSONObject.parseObject(JSON.toJSONString(returnModel)));
             }
-            returnList.add(contractSynReturnModel);
         }
-        return result == true
-                ? CustomApiResultForMy.success2(returnList)
-                : CustomApiResultForMy.fail(returnList);
+
+        return returnResult("200", "S", "接口调用成功,同步结果请查看responseData参数", dataArray);
     }
 
 
@@ -75,8 +94,8 @@ public class SaveAccountApi implements Serializable {
      * @description 保存行名行号
      * @param jsonObject
      */
-    private AccountSynReturnModel syncAccount(JSONObject jsonObject,DynamicObject rmbinfo, DynamicObject defaultjrjgtypeinfo,DynamicObject defaultgj,DynamicObject defaulttypecodeinfo, DynamicObject defaultOrg,DynamicObject user) {
-        AccountSynReturnModel contractSynReturnModel = new AccountSynReturnModel();
+    private NstcApiReturnModel syncAccount(JSONObject jsonObject,DynamicObject rmbinfo, DynamicObject defaultjrjgtypeinfo,DynamicObject defaultgj,DynamicObject defaulttypecodeinfo, DynamicObject defaultOrg,DynamicObject user) {
+        NstcApiReturnModel contractSynReturnModel = new NstcApiReturnModel();
         Date curDate = new Date();
         String number = jsonObject.get("bankAccountNumber")+"";
         String name = jsonObject.get("acctName")+"";
@@ -113,15 +132,21 @@ public class SaveAccountApi implements Serializable {
             return contractSynReturnModel;
         }
 
+        if(jsonObject.get("accountBankType") == null || jsonObject.getJSONObject("accountBankType").get("alias") == null){
+            contractSynReturnModel.setCode("500");
+            contractSynReturnModel.setMessage("开户行参数(bank)为空");
+            return contractSynReturnModel;
+        }
+
         //账户类型
-        String acctstyle = jsonObject.get("acctstyle")+"";
+        String acctstyle = jsonObject.getJSONObject("accountBankType").getString("alias");
         if ("".equals(acctstyle)) {
             contractSynReturnModel.setCode("500");
             contractSynReturnModel.setMessage("账户类型不能为空");
             return contractSynReturnModel;
         }
         //opendate开户日期
-        String opendate = jsonObject.get("opendate")+"";
+        String opendate = jsonObject.get("openDate")+"";
         if ("".equals(opendate)) {
             contractSynReturnModel.setCode("500");
             contractSynReturnModel.setMessage("开户日期不能为空");
@@ -129,8 +154,13 @@ public class SaveAccountApi implements Serializable {
         }
 
 
+        if(jsonObject.get("bank") == null || jsonObject.getJSONObject("bank").get("id") == null){
+            contractSynReturnModel.setCode("500");
+            contractSynReturnModel.setMessage("开户行参数(bank)为空");
+            return contractSynReturnModel;
+        }
         //开户行行号
-        String banknumber = jsonObject.get("bank")+"";
+        String banknumber = jsonObject.getJSONObject("bank").getString("id");
         if ("".equals(banknumber)) {
             contractSynReturnModel.setCode("500");
             contractSynReturnModel.setMessage("开户行行号不能为空");
@@ -144,6 +174,7 @@ public class SaveAccountApi implements Serializable {
             contractSynReturnModel.setMessage("开户行行号"+banknumber+"不存在");
             return contractSynReturnModel;
         }
+
         //通过开户行行号找到金融机构,没有就新增一个
         QFilter jrjgqFilter = new QFilter("bebank.number","=",banknumber);
         DynamicObject jrjginfo =BusinessDataServiceHelper.loadSingleFromCache("bd_finorginfo",new QFilter[]{jrjgqFilter});
@@ -265,10 +296,47 @@ public class SaveAccountApi implements Serializable {
                 contractSynReturnModel.setMessage(err.toString());
                 return contractSynReturnModel;
             }
-        }else{
+        } else{
+            StringBuilder errMsg = new StringBuilder();
+
+            if(StringUtils.isNotEmpty(result.getMessage())){
+                errMsg.append(result.getMessage() + ";");
+            }
+
+            if (result.getSuccessPkIds().size() <= 0) {
+                for (int i = 0; i < result.getAllErrorOrValidateInfo().size(); i++) {
+                    String message = result.getAllErrorOrValidateInfo().get(i).getMessage();
+                    errMsg.append("/").append(message);
+                }
+            }
+
             contractSynReturnModel.setCode("500");
-            contractSynReturnModel.setMessage("保存失败");
+            contractSynReturnModel.setMessage("保存失败" + errMsg.toString());
             return contractSynReturnModel;
         }
     }
+
+
+    /**
+     * 自定义返回data对象
+     * @param code  编码
+     * @param message  错误信息
+     * @return   CustomApiResult  返回
+     */
+    public CustomApiResult<JSONObject> returnResult(String code, String status, String message, JSONArray dataArrary){
+        JSONObject reslutData = new JSONObject();
+
+        JSONArray responseData = new JSONArray();
+        JSONObject dataJSON = new JSONObject();
+        dataJSON.put("data", dataArrary);
+
+        responseData.add(dataJSON);
+
+        reslutData.put("code", code);
+        reslutData.put("status", status);
+        reslutData.put("message", message);
+        reslutData.put("responseData", responseData);
+
+        return CustomApiResult.success(reslutData);
+    }
 }

+ 72 - 18
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/fi/er/webService/SaveBankApi.java

@@ -1,28 +1,27 @@
 package fi.er.webService;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import kd.bos.context.RequestContext;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
-import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
 import kd.bos.openapi.common.custom.annotation.ApiController;
 import kd.bos.openapi.common.custom.annotation.ApiMapping;
 import kd.bos.openapi.common.custom.annotation.ApiParam;
 import kd.bos.openapi.common.custom.annotation.ApiPostMapping;
-import kd.bos.orm.query.QCP;
+import kd.bos.openapi.common.result.CustomApiResult;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
-import kd.bos.util.StringUtils;
+import nckd.jimin.jyyy.fi.common.NstcApiReturnModel;
 import java.io.Serializable;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author zf
@@ -32,6 +31,8 @@ import java.util.Map;
 @ApiMapping(value = "saveBankApi")
 public class SaveBankApi implements Serializable {
     protected static final Long DEFAULT_ORG_ID = 100000L;
+    private static final Log logger = LogFactory.getLog(SaveAccountApi.class);
+
 
     /**
      * @description 行名行号同步接口
@@ -39,7 +40,7 @@ public class SaveBankApi implements Serializable {
      * @return CustomApiResult
      */
     @ApiPostMapping(value = "/save", desc = "同步行名行号")
-    public CustomApiResultForMy<List<BankSynReturnModel>> saveBank (@ApiParam(value = "九恒星行名行号") JSONArray data) {
+    public CustomApiResult<JSONObject> saveBank (@ApiParam(value = "九恒星行名行号") JSONArray data) {
         StringBuilder resultString = new StringBuilder();
         List<BankSynReturnModel> returnList = new ArrayList<>();
         Boolean result = true;
@@ -51,18 +52,48 @@ public class SaveBankApi implements Serializable {
         RequestContext rc = RequestContext.get();
         DynamicObject user = BusinessDataServiceHelper.loadSingleFromCache(rc.getCurrUserId(), "bos_user");
 
+        JSONArray dataArray = new JSONArray();
+
+        if(data == null || data.size() == 0){
+            return returnResult("500", "E", "接口调用失败,data无实际数据", null);
+        }
+
+        JSONObject dataJSON = data.getJSONObject(0);
+        if(dataJSON.get("param0") == null){
+            return returnResult("500", "E", "接口调用失败,param0无实际数据", null);
+        }
+
+        JSONArray paramArray = dataJSON.getJSONArray("param0");
+        if(paramArray == null || paramArray.size() == 0){
+            return returnResult("500", "E", "接口调用失败,param0无实际数据", null);
+        }
+
         //循环传入的数据
-        for (int i = 0; i < data.size(); i++) {
-            JSONObject eobject = data.getJSONObject(i);
-            BankSynReturnModel contractSynReturnModel = syncBank(eobject,defaultgj,user);
-            if ("500".equals(contractSynReturnModel.getCode())){
-                result = false;
+        for (int i = 0; i < paramArray.size(); i++) {
+            JSONObject eobject = paramArray.getJSONObject(i);
+
+            try {
+                NstcApiReturnModel contractSynReturnModel = syncBank(eobject, defaultgj, user);
+                if ("500".equals(contractSynReturnModel.getCode())) {
+                    result = false;
+                }
+
+                dataArray.add(JSONObject.parseObject(JSON.toJSONString(contractSynReturnModel)));
+            } catch (Exception e) {
+                logger.error("保存银行账号失败:{}", e.getMessage());
+
+                NstcApiReturnModel returnModel = new NstcApiReturnModel();
+
+                returnModel.setNumber(eobject.get("number")+"");
+                returnModel.setName(eobject.get("name")+"");
+                returnModel.setCode("500");
+                returnModel.setMessage("保存银行账号失败: " + e.getMessage());
+
+                dataArray.add(JSONObject.parseObject(JSON.toJSONString(returnModel)));
             }
-            returnList.add(contractSynReturnModel);
         }
-        return result == true
-                ? CustomApiResultForMy.success2(returnList)
-                : CustomApiResultForMy.fail(returnList);
+
+        return returnResult("200", "S", "接口调用成功,同步结果请查看responseData参数", dataArray);
     }
 
 
@@ -70,8 +101,8 @@ public class SaveBankApi implements Serializable {
      * @description 保存行名行号
      * @param jsonObject
      */
-    private BankSynReturnModel syncBank(JSONObject jsonObject,DynamicObject defaultgj ,DynamicObject user) {
-        BankSynReturnModel contractSynReturnModel = new BankSynReturnModel();
+    private NstcApiReturnModel syncBank(JSONObject jsonObject,DynamicObject defaultgj ,DynamicObject user) {
+        NstcApiReturnModel contractSynReturnModel = new NstcApiReturnModel();
         String number = jsonObject.get("number")+"";
         String name = jsonObject.get("name")+"";
         if ("".equals(number)||"".equals(name)) {
@@ -132,4 +163,27 @@ public class SaveBankApi implements Serializable {
             return contractSynReturnModel;
         }
     }
+
+    /**
+     * 自定义返回data对象
+     * @param code  编码
+     * @param message  错误信息
+     * @return   CustomApiResult  返回
+     */
+    public CustomApiResult<JSONObject> returnResult(String code, String status, String message, JSONArray dataArrary){
+        JSONObject reslutData = new JSONObject();
+
+        JSONArray responseData = new JSONArray();
+        JSONObject dataJSON = new JSONObject();
+        dataJSON.put("data", dataArrary);
+
+        responseData.add(dataJSON);
+
+        reslutData.put("code", code);
+        reslutData.put("status", status);
+        reslutData.put("message", message);
+        reslutData.put("responseData", responseData);
+
+        return CustomApiResult.success(reslutData);
+    }
 }

+ 51 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/NstcApiReturnModel.java

@@ -0,0 +1,51 @@
+package nckd.jimin.jyyy.fi.common;
+
+import kd.bos.openapi.common.custom.annotation.ApiParam;
+
+import java.io.Serializable;
+
+public class NstcApiReturnModel implements Serializable {
+    @ApiParam(value = "行号", position = 1)
+    String number;
+
+    @ApiParam(value = "行名称", position = 2)
+    String name;
+
+    @ApiParam(value = "错误代码", position = 3)
+    String code;
+
+    @ApiParam(value = "错误信息", position = 4)
+    String message;
+
+    public String getNumber() {
+        return number;
+    }
+
+    public void setNumber(String number) {
+        this.number = number;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}

+ 7 - 3
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/DailyApplyBillEditPlugin.java

@@ -16,6 +16,7 @@ import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.bos.util.StringUtils;
 
 import java.nio.charset.StandardCharsets;
 import java.util.*;
@@ -73,10 +74,13 @@ public class DailyApplyBillEditPlugin extends AbstractBillPlugIn implements Befo
         super.afterCreateNewData(e);
         Map<String, Object> customParams = this.getView().getFormShowParameter().getCustomParams();
         BillShowParameter parameter = new BillShowParameter();
-        String formId =customParams.get("formId").toString();
-        if(EmptyUtils.isNotEmpty(formId)){
+        String formId = "";
+        if(EmptyUtils.isNotEmpty(customParams.get("formId"))){
+            formId =customParams.get("formId").toString();
             parameter.setFormId(formId);
-            this.getModel().setValue("nckd_pageid", formId);
+            if(StringUtils.isNotEmpty(formId)) {
+                this.getModel().setValue("nckd_pageid", formId);
+            }
         }
         if(customParams.get("viewType") != null){
             String[] typeStrings = customParams.get("viewType").toString().split(",");

+ 7 - 2
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/GetParameterBillListPlugin.java

@@ -8,12 +8,15 @@ import kd.bos.ext.fi.plugin.ArApConvert.util.EmptyUtils;
 import kd.bos.form.ShowType;
 import kd.bos.form.events.BillListHyperLinkClickEvent;
 import kd.bos.form.events.HyperLinkClickArgs;
+import kd.bos.form.events.HyperLinkClickEvent;
+import kd.bos.list.BillList;
 import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 
 import java.util.EventObject;
+import java.util.Map;
 
 /**
  * 动态表单插件AbstractListPlugin
@@ -22,17 +25,19 @@ public class GetParameterBillListPlugin extends AbstractListPlugin {
     @Override
     public void billListHyperLinkClick(HyperLinkClickArgs args) {
         if ("billno".equals(args.getFieldName())) {
+            args.setCancel(true);
             //获取当前数据行
             BillListHyperLinkClickEvent evt = (BillListHyperLinkClickEvent) args.getHyperLinkClickEvent();
             ListSelectedRow currentRow = evt.getCurrentRow();
+            BillList billList = (BillList)evt.getSource();
             Long billId = (Long) currentRow.getPrimaryKeyValue();
             String billStatus = currentRow.getBillStatus();
-            String formId= "er_publicreimbursebill";
+            String formId=billList.getBillFormId();// "er_publicreimbursebill";
             //跳转到指定PC布局
             BillShowParameter showParameter = new BillShowParameter();
             QFilter qf = new QFilter("id", QCP.equals, billId);
             //跳转到指定PC布局
-            DynamicObject billDyn = BusinessDataServiceHelper.loadSingle("er_publicreimbursebill", new QFilter[]{qf});
+            DynamicObject billDyn = BusinessDataServiceHelper.loadSingle(formId, new QFilter[]{qf});
             if(billDyn!=null){
                 if(EmptyUtils.isNotEmpty(billDyn.getString("nckd_pageid"))){
                     formId = billDyn.getString("nckd_pageid");

+ 47 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/GetPrepayParameterBillListPlugin.java

@@ -0,0 +1,47 @@
+package nckd.jimin.jyyy.fi.plugin.form;
+
+import kd.bos.bill.BillShowParameter;
+import kd.bos.bill.OperationStatus;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.datamodel.ListSelectedRow;
+import kd.bos.ext.fi.plugin.ArApConvert.util.EmptyUtils;
+import kd.bos.form.ShowType;
+import kd.bos.form.events.BillListHyperLinkClickEvent;
+import kd.bos.form.events.HyperLinkClickArgs;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.sdk.plugin.Plugin;
+
+/**
+ * 标准单据列表插件
+ */
+public class GetPrepayParameterBillListPlugin extends AbstractListPlugin implements Plugin {
+    public void billListHyperLinkClick(HyperLinkClickArgs args) {
+        if ("billno".equals(args.getFieldName())) {
+            //获取当前数据行
+            BillListHyperLinkClickEvent evt = (BillListHyperLinkClickEvent) args.getHyperLinkClickEvent();
+            ListSelectedRow currentRow = evt.getCurrentRow();
+            Long billId = (Long) currentRow.getPrimaryKeyValue();
+            String billStatus = currentRow.getBillStatus();
+            String formId = "er_prepaybill";
+            //跳转到指定PC布局
+            BillShowParameter showParameter = new BillShowParameter();
+            QFilter qf = new QFilter("id", QCP.equals, billId);
+            //跳转到指定PC布局
+            DynamicObject billDyn = BusinessDataServiceHelper.loadSingle("er_prepaybill", new QFilter[]{qf});
+            if (billDyn != null) {
+                if (EmptyUtils.isNotEmpty(billDyn.getString("nckd_pageid"))) {
+                    formId = billDyn.getString("nckd_pageid");
+                }
+
+            }
+            showParameter.setFormId(formId);
+            showParameter.setPkId(billId);
+            showParameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
+            showParameter.setStatus(OperationStatus.VIEW);
+            this.getView().showForm(showParameter);
+        }
+    }
+}

+ 5 - 5
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/SRMHelperUtils.java

@@ -100,10 +100,6 @@ public class SRMHelperUtils {
                 }
 
                 return doReturnMap;
-
-//                Map<String,String> ssomap = buildSSOUrl(srmurl);
-//
-//                return ssomap;
             }
         }
 
@@ -193,6 +189,9 @@ public class SRMHelperUtils {
         headerMap.put("User-Agent", "apifox/1.0.0 (https://www.apifox.cn)");
         headerMap.put("Authorization", "Bearer " + token);
 
+        logger.info("srm退回 " + srmBillNo + ", header:" + headerMap.toString());
+        logger.info("srm退回 " + srmBillNo + ", body:" + body.toJSONString());
+
         try {
 //            String response = doHttpClientPost(url,  body.toJSONString(), token);
             String response = KHttpClientUtils.postjson(url, headerMap, body.toJSONString());
@@ -208,7 +207,8 @@ public class SRMHelperUtils {
 
             if (resultJSON !=null && "SUCCESS".equals(resultJSON.get("responseStatus").toString())
                     &&"SUCCESS".equals(resultJSON.get("executeResult").toString())) {
-                returnMap.put("code","退回成功");
+                returnMap.put("code","0");
+                returnMap.put("msg","退回成功");
             } else{
                 returnMap.put("code","1");
                 returnMap.put("msg", "退回失败" + response);

+ 16 - 16
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/task/WriteBackPayResult2SRMTask.java

@@ -72,14 +72,14 @@ public class WriteBackPayResult2SRMTask extends AbstractTask implements StopTask
                 paymentDate = CommonHelperUtils.getDateFormatString(payBillEntity.getDate("head_paydate"), pattern);
             }
 
-            BigDecimal paymentAmount = BigDecimal.ZERO;
-            DynamicObjectCollection accountEntrys = payBillEntity.getDynamicObjectCollection("accountentry");
-
-            if(accountEntrys != null && accountEntrys.size() > 0){
-                for(DynamicObject entry : accountEntrys){
-                    paymentAmount.add(entry.getBigDecimal("orireceiveamount"));
-                }
-            }
+            BigDecimal paymentAmount = payBillEntity.getBigDecimal("payedamount");//BigDecimal.ZERO;
+//            DynamicObjectCollection accountEntrys = payBillEntity.getDynamicObjectCollection("accountentry");
+//
+//            if(accountEntrys != null && accountEntrys.size() > 0){
+//                for(DynamicObject entry : accountEntrys){
+//                    paymentAmount = paymentAmount.add(entry.getBigDecimal("orireceiveamount"));
+//                }
+//            }
 
 
             boolean isSave = false;
@@ -166,14 +166,14 @@ public class WriteBackPayResult2SRMTask extends AbstractTask implements StopTask
                 paymentDate = CommonHelperUtils.getDateFormatString(payBillEntity.getDate("head_paydate"), pattern);
             }
 
-            BigDecimal paymentAmount = BigDecimal.ZERO;
-            DynamicObjectCollection accountEntrys = payBillEntity.getDynamicObjectCollection("accountentry");
-
-            if(accountEntrys != null && accountEntrys.size() > 0){
-                for(DynamicObject entry : accountEntrys){
-                    paymentAmount.add(entry.getBigDecimal("orireceiveamount"));
-                }
-            }
+            BigDecimal paymentAmount = payBillEntity.getBigDecimal("payamount");//BigDecimal.ZERO;
+//            DynamicObjectCollection accountEntrys = payBillEntity.getDynamicObjectCollection("accountentry");
+//
+//            if(accountEntrys != null && accountEntrys.size() > 0){
+//                for(DynamicObject entry : accountEntrys){
+//                    paymentAmount = paymentAmount.add(entry.getBigDecimal("orireceiveamount"));
+//                }
+//            }
 
             boolean isSave = false;
             StringBuffer errMessage = new StringBuffer();

+ 6 - 2
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/webapi/SRMSynPayApiPlugin.java

@@ -848,6 +848,10 @@ public class SRMSynPayApiPlugin implements Serializable {
 
             StringBuilder err = new StringBuilder();
             if (resultSave.getSuccessPkIds().size() <= 0) {
+                if(kd.bos.util.StringUtils.isNotEmpty(resultSave.getMessage())){
+                    err.append(resultSave.getMessage() + ";");
+                }
+
                 for (int i = 0; i < resultSave.getAllErrorOrValidateInfo().size(); i++) {
                     String message = resultSave.getAllErrorOrValidateInfo().get(i).getMessage();
                     err.append("/").append(message);
@@ -1242,7 +1246,7 @@ public class SRMSynPayApiPlugin implements Serializable {
                     err.append("/").append(message);
                 }
 
-                returnMessage = "失败" + err.toString();
+                returnMessage = "失败, " + (resultSave.getMessage() == null ? "异常错误" : resultSave.getMessage()) + err.toString();
                 return buildReturnData(code, srmBillNo, returnMessage, null, null, null);
             }
 
@@ -1251,7 +1255,7 @@ public class SRMSynPayApiPlugin implements Serializable {
             return buildReturnData("0", srmBillNo, "成功", resultSave.getSuccessPkIds().get(0).toString(), billInfo.getString("billno"), ENTITY_PREPAY);
 
         } catch(Exception e){
-            returnMessage = "失败" + e.getMessage();
+            returnMessage = "失败, exception:" + e.getMessage();
             return buildReturnData(code, srmBillNo, returnMessage, null, null, null);
         }
     }

+ 76 - 8
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/webapi/TransDetailApiPlugin.java

@@ -1,7 +1,10 @@
 package nckd.jimin.jyyy.fi.webapi;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSONPObject;
+import fi.er.webService.BankSynReturnModel;
 import kd.bos.config.client.util.StringUtils;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
@@ -22,6 +25,7 @@ import kd.bos.servicehelper.operation.DeleteServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
 import kd.data.rsa.helper.CodeRuleHelper;
 import kd.fi.cas.helper.CasBotpHelper;
+import nckd.jimin.jyyy.fi.common.NstcApiReturnModel;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -50,7 +54,7 @@ public class TransDetailApiPlugin implements Serializable {
      * @return 处理结果
      */
     @ApiPostMapping(value = "/transdetail", desc = "操作九恒星交易明细")
-    public CustomApiResult<Object> oprationTransDetail(
+    public CustomApiResult<JSONObject> oprationTransDetail(
             @ApiParam(value = "操作类型") String operation,
             @ApiParam(value = "交易明细数据", required = true) String jsondata
     ) {
@@ -59,10 +63,26 @@ public class TransDetailApiPlugin implements Serializable {
                 jsondata
         );
 
+        NstcApiReturnModel returnModel = new NstcApiReturnModel();
+
+        // 解析JSON数据
+        JSONObject jsonObject = JSON.parseObject(jsondata);
+        // 交易流水号ID  关键字
+        String number = jsonObject.getString("number");
+        String code = "";
+        String msg = "";
+
         //JSONArray jsonArray =JSONArray.parseArray(jsondata);
         if(jsondata.startsWith("[")){
             log.error("保存交易明细失败。操作类型:{},交易明细数据:{},错误信息:{}", operation, jsondata, "只允许接收1条数据,请重新传输!");
-            return CustomApiResult.fail("803","操作交易明细失败: 只允许接收1条数据,请重新传输!");
+            returnModel.setNumber(number);
+            returnModel.setCode("500");
+            returnModel.setMessage("操作交易明细失败: 只允许接收1条数据,请重新传输!");
+
+            JSONArray dataArray = new JSONArray();
+            dataArray.add(JSONObject.parseObject(returnModel.toString()));
+
+            return returnResult("200","S","接口调用成功,具体信息查看responseData参数", dataArray);
         }
 
         //如果未传operation参数,则默认为sava保存
@@ -76,30 +96,58 @@ public class TransDetailApiPlugin implements Serializable {
                 case "save":
                     // 添加交易明细逻辑
                     String errMsg = saveTransDetail(jsondata);
+
                     if (!EmptyUtils.isEmpty(errMsg)) {
                         log.error("交易明细添加失败。操作类型:{},交易明细数据:{},错误信息:{}", operation, jsondata, "交易明细添加失败" + errMsg);
-                        return CustomApiResult.fail("802","交易明细添加失败" + errMsg);
+
+                        code = "500";
+                        msg = "交易明细添加失败," + errMsg;
                     } else {
                         log.info("交易明细添加成功。操作类型:{},交易明细数据:{}", operation, jsondata);
-                        return CustomApiResult.success("交易明细添加成功");
+
+                        code = "200";
+                        msg = "交易明细添加成功";
                     }
+                    break;
                 case "delete":
                     // 更新交易明细逻辑
                     String errMsg1 = deleteTransDetail(jsondata);
                     if (!EmptyUtils.isEmpty(errMsg1)) {
                         log.error("交易明细更新失败。操作类型:{},交易明细数据:{},错误信息:{}", operation, jsondata, errMsg1);
-                        return CustomApiResult.fail("801","交易明细更新失败" + errMsg1);
+
+                        code = "500";
+                        msg = "交易明细删除失败," + errMsg1;
                     } else {
                         log.info("交易明细更新成功。操作类型:{},交易明细数据:{}", operation, jsondata);
-                        return CustomApiResult.success("交易明细更新成功");
+
+                        code = "200";
+                        msg = "交易明细删除成功";
                     }
+                    break;
                 default:
                     log.error("不支持的操作类型。操作类型:{},交易明细数据:{}", operation, jsondata);
-                    return CustomApiResult.fail("700","不支持的操作类型");
+                    break;
             }
+
+            returnModel.setNumber(number);
+            returnModel.setCode(code);
+            returnModel.setMessage(msg);
+
+            JSONArray dataArray = new JSONArray();
+            dataArray.add(JSONObject.parseObject(JSON.toJSONString(returnModel)));
+
+            return returnResult("200", "S", "接口调用成功,同步结果请查看responseData参数", dataArray);
         } catch (Exception e) {
             log.error("保存交易明细失败。操作类型:{},交易明细数据:{},错误信息:{}", operation, jsondata, e.getMessage());
-            return CustomApiResult.fail("801","操作交易明细失败: " + e.getMessage());
+
+            returnModel.setNumber(number);
+            returnModel.setCode("500");
+            returnModel.setMessage("操作交易明细失败: " + e.getMessage());
+
+            JSONArray dataArray = new JSONArray();
+            dataArray.add(JSONObject.parseObject(JSON.toJSONString(returnModel)));
+
+            return returnResult("500","E","接口调用异常,同步结果请查看responseData参数", dataArray);
         }
     }
 
@@ -486,6 +534,26 @@ public class TransDetailApiPlugin implements Serializable {
         return address.substring(lastSlashIndex + 1);
     }
 
+    /**
+     * 自定义返回data对象
+     * @param code  编码
+     * @param message  错误信息
+     * @return   CustomApiResult  返回
+     */
+    public CustomApiResult<JSONObject> returnResult(String code, String status, String message, JSONArray dataArrary){
+        JSONObject reslutData = new JSONObject();
+
+        JSONArray responseData = new JSONArray();
+        JSONObject dataJSON = new JSONObject();
+        dataJSON.put("data", dataArrary);
+
+        responseData.add(dataJSON);
 
+        reslutData.put("code", code);
+        reslutData.put("status", status);
+        reslutData.put("message", message);
+        reslutData.put("responseData", responseData);
 
+        return CustomApiResult.success(reslutData);
+    }
 }