소스 검색

同步凭证

lzh 1 일 전
부모
커밋
df0d58fd10

+ 2 - 1
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/mservice/SynSapService.java

@@ -1,8 +1,9 @@
 package nckd.jimin.jyyy.fi.mservice;
 
+import java.util.List;
 import java.util.Map;
 
 public interface SynSapService {
 
-    public abstract Map<String, String> synVoucherForSap(String companyCode);
+    public abstract Map<String, String> synVoucherForSap(List<Long> vouchsreIds);
 }

+ 1 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/mservice/SyncSapFIUtils.java

@@ -296,6 +296,7 @@ public class SyncSapFIUtils {
         sb.append(GlVoucherConstantInfo.SUBMITTER).append(",");  //   制单人
         sb.append(GlVoucherConstantInfo.SUBMITTER).append(".number").append(",");  //   制单人编码
         sb.append("entries,"); //  凭证行
+        sb.append("entries.seq,");
         sb.append("entries.").append(GlVoucherConstantInfo.CURRENCY).append(",");  //  凭证行币种
         sb.append("entries.").append(GlVoucherConstantInfo.CURRENCY).append(".number").append(",");  //  凭证行币种
         sb.append("entries.").append(GlVoucherConstantInfo.DEBITLOCAL).append(",");  //  凭证行借方金额

+ 38 - 53
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/mservice/impl/SynSapFIServiceImpl.java

@@ -32,78 +32,63 @@ public class SynSapFIServiceImpl implements SynSapService {
      *
      * 本方法负责从苍穹系统同步凭证到SAP凭证中
      *
-     * @param companyCode 公司代码,用于过滤特定公司的项目信息
+     * @param  vouchsreIds 公司代码,用于过滤特定公司的项目信息
      * @return 返回一个包含同步结果的Map,包括状态码(code)和消息(msg)
      */
     @Override
-    public Map<String, String> synVoucherForSap(String companyCode) {
+    public Map<String, String> synVoucherForSap(List<Long> vouchsreIds) {
         Map<String, String> result = new HashMap<>();
+        StringBuilder err = new StringBuilder();
+        int count = 0;
+        for (Long vouchsreId : vouchsreIds) {
 
-        QFilter qf1 = new QFilter("billstatus", QCP.equals, "C");
-        QFilter qf2 = new QFilter("org.number", QCP.equals, companyCode);
+            QFilter qf1 = new QFilter("billstatus", QCP.equals, "C");
+            QFilter qf2 = new QFilter("id", QCP.equals, vouchsreId);
 
-        String selectFields = SyncSapFIUtils.getVoucherFieldForQuery();
-        DynamicObjectCollection voucherDyns = QueryServiceHelper.query("gl_voucher", selectFields, new QFilter[]{qf1,qf2});
+            String selectFields = SyncSapFIUtils.getVoucherFieldForQuery();
+            DynamicObjectCollection voucherDyns = QueryServiceHelper.query("gl_voucher", selectFields, new QFilter[]{qf1, qf2});
 
-        String billid = "";
+            JSONArray ENTRY_ITEM = new JSONArray();  //凭证分录
+            JSONObject HEADERITEMINFO = new JSONObject();  //凭证表头
+            //现金流量项目编码 不在现金科目行上,需要单独处理下
+            String maincfitemNumber = "";
+            String voucherInfo = "";
 
-        JSONArray ENTRY_ITEM = new JSONArray();  //凭证分录
-        JSONObject HEADERITEMINFO = new JSONObject();  //凭证表头
-        //现金流量项目编码 不在现金科目行上,需要单独处理下
-        String maincfitemNumber  = "";
-        StringBuilder err = new StringBuilder();
-        int count = 0;
-        //voucherDyns 凭证表头与分录平铺
-        for(DynamicObject voucherRow : voucherDyns) {
-            String id = voucherRow.getString("id");
+            //voucherDyns 凭证表头与分录平铺
+            for (DynamicObject voucherRow : voucherDyns) {
+                String billid = voucherRow.getString("id");
+                String companyCode = voucherRow.getString("org.number");
 
-            String voucherInfo = companyCode + "|" + voucherRow.getString("vouchertype") + "|" + voucherRow.getString("billno");
-            Map<String, String> auxpropertiesMap = SyncSapFIUtils.getAssGrp(voucherRow);
-
-            //判断 是不是另一张凭证
-            if(billid.equals(id)) {
-                if(StringUtils.isNotEmpty(auxpropertiesMap.get("maincfitemNumber"))){
-                    maincfitemNumber = auxpropertiesMap.get("maincfitemNumber");
-                }
-                /////处理凭证分录
-                JSONObject entry = SyncSapFIUtils.convertCosmicVoucherToSAPForEntry(voucherRow,maincfitemNumber,auxpropertiesMap);
-                ENTRY_ITEM.add(entry);
-            } else {
-                ///当走到另一张凭证时,处理凭证表头
-                maincfitemNumber = "";
-                HEADERITEMINFO = new JSONObject(); //凭证表头  清空
-                ENTRY_ITEM = new JSONArray();  //凭证分录  清空
+                voucherInfo = companyCode + "|" + voucherRow.getString("vouchertype") + "|" + voucherRow.getString("billno");
+                Map<String, String> auxpropertiesMap = SyncSapFIUtils.getAssGrp(voucherRow);
 
-                if(StringUtils.isNotEmpty(auxpropertiesMap.get("maincfitemNumber"))){
+                if (StringUtils.isNotEmpty(auxpropertiesMap.get("maincfitemNumber"))) {
                     maincfitemNumber = auxpropertiesMap.get("maincfitemNumber");
                 }
                 ////处理凭证表头
                 HEADERITEMINFO = SyncSapFIUtils.convertCosmicVoucherToSAPForHead(voucherRow);
-                JSONObject entry = SyncSapFIUtils.convertCosmicVoucherToSAPForEntry(voucherRow,maincfitemNumber,auxpropertiesMap);
+                JSONObject entry = SyncSapFIUtils.convertCosmicVoucherToSAPForEntry(voucherRow, maincfitemNumber, auxpropertiesMap);
                 ENTRY_ITEM.add(entry);
 
-                String jsonData = SyncSapFIUtils.getVoucherData(HEADERITEMINFO,ENTRY_ITEM);
-                System.out.println("凭证 info:"+voucherInfo);
-                System.out.println("凭证 post:"+jsonData);
-                //String response = SyncSapFIUtils.postDataToSAP(jsonData);
-                String response = "{\"E_TYPE\":\"S\",\"E_MESSGE\":\"成功\"}";
-                System.out.println("凭证 return:"+response);
-                if(StringUtils.isEmpty(response)){
-                    err.append("同步失败,凭证:"+voucherInfo);
-                    return result;
-                }
-                JSONObject rData = JSONObject.parseObject(response);
+            }
 
-                String etype = rData.getString("E_TYPE");
+            String jsonData = SyncSapFIUtils.getVoucherData(HEADERITEMINFO, ENTRY_ITEM);
+            System.out.println("凭证 info:" + voucherInfo);
+            System.out.println("凭证 post:" + jsonData);
+            String response = SyncSapFIUtils.postDataToSAP(jsonData);
+            //String response = "{\"E_TYPE\":\"S\",\"E_MESSGE\":\"成功\"}";
+            System.out.println("凭证 return:" + response);
+            if (StringUtils.isEmpty(response)) {
+                err.append("同步失败,凭证:" + voucherInfo);
+            }
+            JSONObject rData = JSONObject.parseObject(response);
+            String etype = rData.getString("E_TYPE");
 
-                if(!"S".equals(etype)){
-                    err.append("/n 凭证:"+voucherInfo+",E_TYPE:"+etype+",错误信息:"+rData.getString("E_MESSGE"));
-                    return result;
-                }else{
-                    count++;
-                }
+            if (!"S".equals(etype)) {
+                err.append("/n 凭证:" + voucherInfo + ",E_TYPE:" + etype + ",错误信息:" + rData.getString("E_MESSGE"));
+            } else {
+                count++;
             }
-            billid = id;
         }
 
         if(StringUtils.isEmpty(err.toString())) {

+ 30 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/VoucherListPlugin.java

@@ -0,0 +1,30 @@
+package nckd.jimin.jyyy.fi.plugin.form;
+
+import kd.bos.dataentity.resource.ResManager;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.form.control.events.ItemClickEvent;
+import kd.bos.list.BillList;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.sdk.plugin.Plugin;
+
+/**
+ * 标准单据列表插件
+ */
+public class VoucherListPlugin extends AbstractListPlugin implements Plugin {
+
+    public void itemClick(ItemClickEvent evt) {
+        super.itemClick(evt);
+        switch (evt.getItemKey()) {
+            case "nckd_sap":
+                BillList billList = (BillList)this.getView().getControl("billlistap");
+                ListSelectedRowCollection selectedRows = billList.getSelectedRows();
+                if (selectedRows == null || selectedRows.isEmpty()) {
+                    this.getView().showTipNotification("没选中数据!", 2500);
+                    return;
+                }
+                break;
+        }
+
+    }
+
+}

+ 32 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/SynVoucherSapOpPlugin.java

@@ -0,0 +1,32 @@
+package nckd.jimin.jyyy.fi.plugin.operate;
+
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.args.BeforeOperationArgs;
+import kd.sdk.plugin.Plugin;
+import nckd.jimin.jyyy.fi.mservice.impl.SynSapFIServiceImpl;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 单据操作插件
+ */
+public class SynVoucherSapOpPlugin extends AbstractOperationServicePlugIn implements Plugin {
+    @Override
+    public void beforeExecuteOperationTransaction(BeforeOperationArgs e) {
+        //获取列表中选择的单据内码
+        List<Long> billids = (List) Arrays.asList(e.getDataEntities()).stream().map((entityx) -> {
+            return entityx.getLong("id");
+        }).collect(Collectors.toList());
+
+        SynSapFIServiceImpl synSapService = new SynSapFIServiceImpl();
+
+        Map<String, String> result=synSapService.synVoucherForSap(billids);
+        System.out.println(result.get("msg"));
+        this.getOperationResult().setSuccess(false); // 操作失败
+        this.operationResult.setMessage(result.get("msg"));
+    }
+}