diff --git a/base-buildpackage/pom.xml b/base-buildpackage/pom.xml
index b91e52ac..be3ea0d5 100644
--- a/base-buildpackage/pom.xml
+++ b/base-buildpackage/pom.xml
@@ -50,7 +50,12 @@
jianhui
-
+
+ jianhui-test
+
+ jianhui-test
+
+
kangarooDataCenterV3
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/dao/ICLPayApplyDao.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/dao/ICLPayApplyDao.java
new file mode 100644
index 00000000..7f8903d6
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/dao/ICLPayApplyDao.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.plugin.oa.payapply.dao;
+
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.plugin.oa.payapply.entity.CLPayApplyEntity;
+
+/**
+ * @Description 材料付款申请
+ * @Author xiangerlin
+ * @Date 2025/6/26 17:24
+ **/
+public interface ICLPayApplyDao extends IBaseDao {
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/dao/impl/CLPayApplyDaoImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/dao/impl/CLPayApplyDaoImpl.java
new file mode 100644
index 00000000..ef4f3b8c
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/dao/impl/CLPayApplyDaoImpl.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.plugin.oa.payapply.dao.impl;
+
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.plugin.oa.payapply.dao.ICLPayApplyDao;
+import com.hzya.frame.plugin.oa.payapply.entity.CLPayApplyEntity;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Description 材料付款申请
+ * @Author xiangerlin
+ * @Date 2025/6/26 17:26
+ **/
+@Repository("cLPayApplyDaoImpl")
+public class CLPayApplyDaoImpl extends MybatisGenericDao implements ICLPayApplyDao {
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/entity/CLPayApplyEntity.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/entity/CLPayApplyEntity.java
new file mode 100644
index 00000000..df604829
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/entity/CLPayApplyEntity.java
@@ -0,0 +1,366 @@
+package com.hzya.frame.plugin.oa.payapply.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+/**
+ * @Description 材料付款申请 formmain_0266 formson_0267
+ * @Author xiangerlin
+ * @Date 2025/6/26 17:21
+ **/
+public class CLPayApplyEntity extends BaseEntity {
+
+ private String field0001;//单据号
+ private String field0004;//单据日期
+ private String field0005;//财务组织名称
+ private String field0039;//财务组织编码
+ private String field0015;//供应商名称
+ private String field0040;//供应商编码
+ private String field0052;//单据类型编码
+ private String field0059;//交易类型编码
+ private String field0046;//单据类型,选的是采购订单还是应付单
+ private String field0047;//应付单号
+ private String field0048;//采购订单号
+
+
+ private String id;//明细表id
+ private String formmain_id;//主表id
+ private String field0022;// 序号
+ private String field0023;// 单据号
+ private String field0024;// 日期
+ private String field0025;// 物料编码
+ private String field0027;// 物料名称
+ private String field0028;// 规格
+ private String field0029;// 型号
+ private String field0030;// 含税单价
+ private String field0031;// 摘要
+ private String field0032;// 币种名称
+ private String field0051;// 币种编码
+ private String field0041;// 无税单价
+ private String field0042;// 价税合计
+ private String field0043;// 税率
+ private String field0044;// 主数量
+ private String field0045;// 数量
+ private String field0049;// 源头采购订单号
+ private String field0053; //源头交易类型
+ private String field0054; //源头单据表头PK
+ private String field0055; //源头单据表体PK
+ private String field0060; //源头单据类型
+ private String field0056; //上层单据类型
+ private String field0057; //上层单据类型表头PK
+ private String field0058; //上层单据类型表体PK
+ private String field0061; //NCC采购订单/请购单表头pk
+ private String field0062; //C采购订单/请购单表体pk
+
+
+ public String getField0001() {
+ return field0001;
+ }
+
+ public void setField0001(String field0001) {
+ this.field0001 = field0001;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getFormmain_id() {
+ return formmain_id;
+ }
+
+ public void setFormmain_id(String formmain_id) {
+ this.formmain_id = formmain_id;
+ }
+
+ public String getField0022() {
+ return field0022;
+ }
+
+ public void setField0022(String field0022) {
+ this.field0022 = field0022;
+ }
+
+ public String getField0023() {
+ return field0023;
+ }
+
+ public void setField0023(String field0023) {
+ this.field0023 = field0023;
+ }
+
+ public String getField0024() {
+ return field0024;
+ }
+
+ public void setField0024(String field0024) {
+ this.field0024 = field0024;
+ }
+
+ public String getField0025() {
+ return field0025;
+ }
+
+ public void setField0025(String field0025) {
+ this.field0025 = field0025;
+ }
+
+ public String getField0027() {
+ return field0027;
+ }
+
+ public void setField0027(String field0027) {
+ this.field0027 = field0027;
+ }
+
+ public String getField0028() {
+ return field0028;
+ }
+
+ public void setField0028(String field0028) {
+ this.field0028 = field0028;
+ }
+
+ public String getField0029() {
+ return field0029;
+ }
+
+ public void setField0029(String field0029) {
+ this.field0029 = field0029;
+ }
+
+ public String getField0030() {
+ return field0030;
+ }
+
+ public void setField0030(String field0030) {
+ this.field0030 = field0030;
+ }
+
+ public String getField0031() {
+ return field0031;
+ }
+
+ public void setField0031(String field0031) {
+ this.field0031 = field0031;
+ }
+
+ public String getField0032() {
+ return field0032;
+ }
+
+ public void setField0032(String field0032) {
+ this.field0032 = field0032;
+ }
+
+ public String getField0041() {
+ return field0041;
+ }
+
+ public void setField0041(String field0041) {
+ this.field0041 = field0041;
+ }
+
+ public String getField0042() {
+ return field0042;
+ }
+
+ public void setField0042(String field0042) {
+ this.field0042 = field0042;
+ }
+
+ public String getField0043() {
+ return field0043;
+ }
+
+ public void setField0043(String field0043) {
+ this.field0043 = field0043;
+ }
+
+ public String getField0044() {
+ return field0044;
+ }
+
+ public void setField0044(String field0044) {
+ this.field0044 = field0044;
+ }
+
+ public String getField0045() {
+ return field0045;
+ }
+
+ public void setField0045(String field0045) {
+ this.field0045 = field0045;
+ }
+
+ public String getField0049() {
+ return field0049;
+ }
+
+ public void setField0049(String field0049) {
+ this.field0049 = field0049;
+ }
+
+ public String getField0040() {
+ return field0040;
+ }
+
+ public void setField0040(String field0040) {
+ this.field0040 = field0040;
+ }
+
+ public String getField0004() {
+ return field0004;
+ }
+
+ public void setField0004(String field0004) {
+ this.field0004 = field0004;
+ }
+
+ public String getField0005() {
+ return field0005;
+ }
+
+ public void setField0005(String field0005) {
+ this.field0005 = field0005;
+ }
+
+ public String getField0039() {
+ return field0039;
+ }
+
+ public void setField0039(String field0039) {
+ this.field0039 = field0039;
+ }
+
+ public String getField0015() {
+ return field0015;
+ }
+
+ public void setField0015(String field0015) {
+ this.field0015 = field0015;
+ }
+
+ public String getField0051() {
+ return field0051;
+ }
+
+ public void setField0051(String field0051) {
+ this.field0051 = field0051;
+ }
+
+ public String getField0053() {
+ return field0053;
+ }
+
+ public void setField0053(String field0053) {
+ this.field0053 = field0053;
+ }
+
+ public String getField0054() {
+ return field0054;
+ }
+
+ public void setField0054(String field0054) {
+ this.field0054 = field0054;
+ }
+
+ public String getField0055() {
+ return field0055;
+ }
+
+ public void setField0055(String field0055) {
+ this.field0055 = field0055;
+ }
+
+ public String getField0056() {
+ return field0056;
+ }
+
+ public void setField0056(String field0056) {
+ this.field0056 = field0056;
+ }
+
+ public String getField0057() {
+ return field0057;
+ }
+
+ public void setField0057(String field0057) {
+ this.field0057 = field0057;
+ }
+
+ public String getField0058() {
+ return field0058;
+ }
+
+ public void setField0058(String field0058) {
+ this.field0058 = field0058;
+ }
+
+ public String getField0052() {
+ return field0052;
+ }
+
+ public void setField0052(String field0052) {
+ this.field0052 = field0052;
+ }
+
+ public String getField0059() {
+ return field0059;
+ }
+
+ public void setField0059(String field0059) {
+ this.field0059 = field0059;
+ }
+
+ public String getField0046() {
+ return field0046;
+ }
+
+ public void setField0046(String field0046) {
+ this.field0046 = field0046;
+ }
+
+ public String getField0060() {
+ return field0060;
+ }
+
+ public void setField0060(String field0060) {
+ this.field0060 = field0060;
+ }
+
+ public String getField0047() {
+ return field0047;
+ }
+
+ public void setField0047(String field0047) {
+ this.field0047 = field0047;
+ }
+
+ public String getField0048() {
+ return field0048;
+ }
+
+ public void setField0048(String field0048) {
+ this.field0048 = field0048;
+ }
+
+ public String getField0061() {
+ return field0061;
+ }
+
+ public void setField0061(String field0061) {
+ this.field0061 = field0061;
+ }
+
+ public String getField0062() {
+ return field0062;
+ }
+
+ public void setField0062(String field0062) {
+ this.field0062 = field0062;
+ }
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/entity/CLPayApplyEntity.xml b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/entity/CLPayApplyEntity.xml
new file mode 100644
index 00000000..adb4b258
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/entity/CLPayApplyEntity.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ formmain_0266.field0001,-- 单据号
+ formmain_0266.field0004,-- 单据日期
+ formmain_0266.field0005,-- 财务组织名称
+ formmain_0266.field0039,-- 财务组织编码
+ formmain_0266.field0015,-- 供应商名称
+ formmain_0266.field0040,-- 供应商编码
+ formmain_0266.field0052,-- 单据类型编码
+ formmain_0266.field0059,-- 交易类型编码
+ formmain_0266.field0046,-- 单据类型
+ formmain_0266.field0047,-- 应付单号
+ formmain_0266.field0048,-- 采购订单号
+ formson_0267.id,
+ formson_0267.formmain_id,
+ formson_0267.field0022,-- 序号
+ formson_0267.field0023,-- 单据号
+ formson_0267.field0024,-- 日期
+ formson_0267.field0025,-- 物料编码
+ formson_0267.field0027,-- 物料名称
+ formson_0267.field0028,-- 规格
+ formson_0267.field0029,-- 型号
+ formson_0267.field0030,-- 含税单价
+ formson_0267.field0031,-- 摘要
+ formson_0267.field0032,-- 币种名称
+ formson_0267.field0051,-- 币种编码
+ formson_0267.field0041,-- 无税单价
+ formson_0267.field0042,-- 价税合计
+ formson_0267.field0043,-- 税率
+ formson_0267.field0044,-- 主数量
+ formson_0267.field0045,-- 数量
+ formson_0267.field0049,-- 源头采购订单号
+ formson_0267.field0053,-- 源头交易类型
+ formson_0267.field0054,-- 源头单据表头PK
+ formson_0267.field0055,-- 源头单据表体PK
+ formson_0267.field0060,-- 源头单据类型
+ formson_0267.field0056,-- 上层单据类型
+ formson_0267.field0057,-- 上层单据类型表头PK
+ formson_0267.field0058,-- 上层单据类型表体PK
+ formson_0267.field0061,-- NCC采购订单/请购单表头pk
+ formson_0267.field0062-- NCC采购订单/请购单表体pk
+
+
+
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/service/ICLPayApplyService.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/service/ICLPayApplyService.java
new file mode 100644
index 00000000..4215bc7d
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/service/ICLPayApplyService.java
@@ -0,0 +1,20 @@
+package com.hzya.frame.plugin.oa.payapply.service;
+
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.plugin.oa.payapply.entity.CLPayApplyEntity;
+
+import java.util.List;
+
+/**
+ * @Description 材料付款申请
+ * @Author xiangerlin
+ * @Date 2025/6/26 17:28
+ **/
+public interface ICLPayApplyService extends IBaseService {
+ /**
+ * 根据编码查
+ * @param entity
+ * @return
+ */
+ List queryByBillNo(CLPayApplyEntity entity);
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/service/impl/CLPayApplyServiceImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/service/impl/CLPayApplyServiceImpl.java
new file mode 100644
index 00000000..387ee5c9
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/service/impl/CLPayApplyServiceImpl.java
@@ -0,0 +1,42 @@
+package com.hzya.frame.plugin.oa.payapply.service.impl;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.plugin.oa.payapply.dao.ICLPayApplyDao;
+import com.hzya.frame.plugin.oa.payapply.entity.CLPayApplyEntity;
+import com.hzya.frame.plugin.oa.payapply.service.ICLPayApplyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description 材料付款申请
+ * @Author xiangerlin
+ * @Date 2025/6/26 17:29
+ **/
+@Service(value = "cLPayApplyServiceImpl")
+public class CLPayApplyServiceImpl extends BaseService implements ICLPayApplyService {
+ private ICLPayApplyDao clPayApplyDao;
+ @Autowired
+ public void setClPayApplyDao(ICLPayApplyDao dao) {
+ this.clPayApplyDao = dao;
+ this.dao = dao;
+ }
+
+ /**
+ * 根据编码查
+ *
+ * @param entity
+ * @return
+ */
+ @DS(value = "#entity.dataSourceCode")
+ @Override
+ public List queryByBillNo(CLPayApplyEntity entity) {
+ if (null != entity && StrUtil.isNotEmpty(entity.getField0001())){
+ List queryList = clPayApplyDao.query(entity);
+ return queryList;
+ }
+ return null;
+ }
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/plugin/PaybillPluginInitializer.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/plugin/PaybillPluginInitializer.java
new file mode 100644
index 00000000..acf94cf1
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/plugin/PaybillPluginInitializer.java
@@ -0,0 +1,103 @@
+package com.hzya.frame.plugin.oa.payment.plugin;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.base.PluginBaseEntity;
+import com.hzya.frame.plugin.oa.payment.service.IPaybillPluginService;
+import com.hzya.frame.plugin.oa.payment.service.IPaymentPluginService;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description 付款单传NCC
+ * @Author xiangerlin
+ * @Date 2025-06-25 11:40:50
+ **/
+public class PaybillPluginInitializer extends PluginBaseEntity {
+ Logger logger = LoggerFactory.getLogger(PaybillPluginInitializer.class);
+ @Autowired
+ private IPaybillPluginService paybillPluginService;
+ /***
+ * 插件初始化方法
+ * @Author 👻👻👻👻👻👻👻👻 gjh
+ * @Date 2023-08-02 10:48
+ * @Param []
+ * @return void
+ **/
+ @Override
+ public void initialize() {
+ logger.info(getPluginLabel() + "執行初始化方法initialize()");
+ }
+
+ /****
+ * 插件销毁方法
+ * @author 👻👻👻👻👻👻👻👻 gjh
+ * @date 2023-08-02 10:48
+ * @return void
+ **/
+ @Override
+ public void destroy() {
+ logger.info(getPluginLabel() + "執行銷毀方法destroy()");
+ }
+
+ /****
+ * 插件的ID
+ * @author 👻👻👻👻👻👻👻👻 gjh
+ * @date 2023-08-02 10:48
+ * @return void
+ **/
+ @Override
+ public String getPluginId() {
+ return "PaybillPlugin";
+ }
+
+ /****
+ * 插件的名称
+ * @author 👻👻👻👻👻👻👻👻 gjh
+ * @date 2023-08-02 10:48
+ * @return void
+ **/
+ @Override
+ public String getPluginName() {
+ return "付款单传NCC";
+ }
+
+ /****
+ * 插件的显示值
+ * @author 👻👻👻👻👻👻👻👻 gjh
+ * @date 2023-08-02 10:48
+ * @return void
+ **/
+ @Override
+ public String getPluginLabel() {
+ return "付款单传NCC";
+ }
+
+ /***
+ * 插件类型 1、场景插件
+ * @Author 👻👻👻👻👻👻👻👻 gjh
+ * @Date 2023-08-02 14:01
+ * @Param []
+ * @return java.lang.String
+ **/
+ @Override
+ public String getPluginType() {
+ return "0";
+ }
+
+ /***
+ * 执行业务代码
+ * @Author 👻👻👻👻👻👻👻👻 gjh
+ * @Date 2023-08-07 11:20
+ * @param requestJson 执行业务代码的参数
+ * @return void
+ **/
+ @Override
+ public JsonResultEntity executeBusiness(JSONObject requestJson) throws Exception {
+ logger.info("======开始执行付款单传NCC插件======");
+ paybillPluginService.sync2ncc(requestJson);
+ return BaseResult.getSuccessMessageEntity("执行成功");
+ }
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/IPaybillPluginService.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/IPaybillPluginService.java
new file mode 100644
index 00000000..e76381e4
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/IPaybillPluginService.java
@@ -0,0 +1,18 @@
+package com.hzya.frame.plugin.oa.payment.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ * @Description 付款单传NCC
+ * @Author xiangerlin
+ * @Date 2025/6/25 11:44
+ **/
+public interface IPaybillPluginService {
+ /**
+ * 付款单传到NCC
+ * @param requestJson
+ * @return
+ */
+ JsonResultEntity sync2ncc(JSONObject requestJson);
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/impl/PaybillPluginServiceImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/impl/PaybillPluginServiceImpl.java
new file mode 100644
index 00000000..877b525d
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/impl/PaybillPluginServiceImpl.java
@@ -0,0 +1,382 @@
+package com.hzya.frame.plugin.oa.payment.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.plugin.oa.payapply.entity.CLPayApplyEntity;
+import com.hzya.frame.plugin.oa.payapply.service.ICLPayApplyService;
+import com.hzya.frame.plugin.oa.payment.service.IPaybillPluginService;
+import com.hzya.frame.seeyon.enums.ColEventTypeEnum;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.apache.commons.collections.CollectionUtils;
+import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description 付款单传NCC
+ * @Author xiangerlin
+ * @Date 2025/6/25 11:44
+ **/
+@Service(value = "paybillPluginServiceImpl")
+public class PaybillPluginServiceImpl implements IPaybillPluginService {
+ @Value("${zt.url}")
+ private String baseUrl;
+ Logger logger = LoggerFactory.getLogger(PaybillPluginServiceImpl.class);
+ @Autowired
+ private ICLPayApplyService clpayApplyService;
+
+ /**
+ * 付款单传到NCC
+ *
+ * @param requestJson
+ * @return
+ */
+ @Override
+ public JsonResultEntity sync2ncc(JSONObject requestJson) {
+ //数据源编码
+ String datasourceCode = requestJson.getString("sourceCode");
+ String task_living_details_id = requestJson.getString("integration_task_living_details_id");
+ String headersStr = requestJson.getString("headers");//请求头
+ String eventType = requestJson.getString("eventType");
+ JSONObject headers = requestJson.getJSONObject("headers");
+ Assert.notEmpty(eventType, "eventType不能为空");
+ Assert.notEmpty(headersStr, "headers不能为空");
+ String formmainTableName = headers.getString("formmainTableName");
+ String forsonTableName = headers.getString("forsonTableName");
+ JSONObject jsonStrObj = requestJson.getJSONObject("jsonStr");
+ JSONObject businessData = jsonStrObj.getJSONObject("businessDataStr");
+ JSONObject formmainData = businessData.getJSONObject(formmainTableName);
+ JSONArray forsonData = businessData.getJSONArray(forsonTableName);
+ List forsonDataList = JSON.parseArray(businessData.getJSONArray(forsonTableName).toJSONString(), JSONObject.class);
+
+ String summaryId = jsonStrObj.getString("summaryId");
+
+
+ //流程结束
+ if (ColEventTypeEnum.ONPROCESSFINISHED.getType().equals(eventType)) {
+ /**
+ * 判断付款单表头的财务组织如果是002,说明是总部代项目部付款
+ * 要生成对应项目部的付款单 以及 总部的 付款结算单
+ * 付款单:ap_paybill
+ * 付款结算单:cmp_paybill
+ * 如果支付类型是开票,保证金要单独生成一张付款结算单
+ */
+ //付款单
+ apPaybill(datasourceCode, formmainData, headers, forsonDataList);
+ String orgCode = formmainData.getString("field0053");
+ if ("002".equals(orgCode)) {
+ cmpPaybill(datasourceCode, formmainData, headers, forsonDataList);
+ }
+ }
+ return BaseResult.getSuccessMessageEntity("操作成功");
+ }
+
+ /**
+ * 付款结算单
+ * 结算方式编码, 10备用金、20开票、21背书、3网银
+ * 如果是开票 总部要生成2张付款结算单,一张是保证金 一张是承兑汇票
+ *
+ * @param datasourceCode
+ * @param formmainData
+ * @param headers
+ * @param forsonDataList
+ */
+ private void cmpPaybill(String datasourceCode, JSONObject formmainData, JSONObject headers, List forsonDataList) {
+ String orgCode = formmainData.getString("field0053");
+ String billmaker = headers.getString("billmaker");
+ String groupCode = headers.getString("groupCode");
+ boolean flag = true;
+ //结算方式编码, 10备用金、20开票、21背书、3网银
+ String balaTypeCode = formmainData.getString("field0076");
+ if ("20".equals(balaTypeCode)) {
+ logger.info("======OA付款单传开票的方式保证金传NCC付款结算单请求参数:{}======");
+ JSONObject param = getCmpPayBillVO(formmainData, forsonDataList, orgCode, billmaker, groupCode);
+ String req = JSONObject.toJSONString(param);
+ String result = HttpRequest.post(baseUrl)
+ .header("appId", "800065")//NCC应用
+ .header("apiCode", "8000650006")//NCC付款单新增保存提交
+ .header("publicKey", "ZJYAbkr9+XjnDrlfQCRKXtpVvg/BjxqtxzcLgg5TIGagEKJCe7eDIk+3zDUT+v578prj")//OA公钥
+ .header("secretKey", "2GR4+yrcx+Ev+pN0Q6V6wxCdvisPX7wzNKBgc5SsIYGxYI5GTISXT6GvTPfp1u2Rj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//OA密钥
+ .body(req)//表单内容
+ .timeout(30000)//超时,毫秒
+ .execute().body();
+ logger.info("======OA付款单传开票的方式保证金传NCC付款结算单返回参数:{}",result);
+ if (StrUtil.isNotEmpty(result)){
+ JSONObject resultJson = JSONObject.parseObject(result);
+ flag = resultJson.getBoolean("flag");
+ }
+ }
+ //如果有保证金的情况,保证金保存成功再保存承兑的
+ if (flag){
+ JSONObject param = getCmpPayBillVO(formmainData, forsonDataList, orgCode, billmaker, groupCode);
+ String req = JSONObject.toJSONString(param);
+ logger.info("======OA付款单传NCC付款结算单请求参数:{}======", req);
+ String result = HttpRequest.post(baseUrl)
+ .header("appId", "800065")//NCC应用
+ .header("apiCode", "8000650006")//NCC付款单新增保存提交
+ .header("publicKey", "ZJYAbkr9+XjnDrlfQCRKXtpVvg/BjxqtxzcLgg5TIGagEKJCe7eDIk+3zDUT+v578prj")//OA公钥
+ .header("secretKey", "2GR4+yrcx+Ev+pN0Q6V6wxCdvisPX7wzNKBgc5SsIYGxYI5GTISXT6GvTPfp1u2Rj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//OA密钥
+ .body(req)//表单内容
+ .timeout(30000)//超时,毫秒
+ .execute().body();
+ logger.info("======OA付款单传NCC付款结算单响应参数:{}======",result);
+ }
+ }
+
+ //付款结算单
+ @NotNull
+ private static JSONObject getCmpPayBillVO(JSONObject formmainData, List forsonDataList, String orgCode, String billmaker, String groupCode) {
+ JSONObject param = new JSONObject();
+ JSONObject head = new JSONObject();
+ List body = new LinkedList<>();
+ String balaTypeCode = formmainData.getString("field0076");
+ param.put("head", head);
+ param.put("body", body);
+ head.put("pk_org", orgCode);//组织编码
+ head.put("pk_group", "ZJJH");//集团编码
+ head.put("bill_type", "F5");//单据类型
+ head.put("trade_type", "D5");//付款结算类型
+ head.put("source_flag", "2");//来源系统
+ head.put("bill_date", formatDate(formmainData.getString("field0004")));//单据日期
+ if (!"20".equals(balaTypeCode)) {
+ head.put("primal_money", formmainData.getString("field0019"));//付款原币金额
+ } else {
+ head.put("primal_money", "");//付款原币金额, 这里要取保证金
+ }
+
+ head.put("pk_currtype", formmainData.getString("field0087"));//币种名称
+ head.put("billmaker", billmaker);//制单人名称
+ for (JSONObject item : forsonDataList) {
+ JSONObject b = new JSONObject();
+ b.put("pk_org", orgCode);//组织编码
+ b.put("pk_group", groupCode);//集团编码
+ b.put("bill_type", head.getString("bill_type"));//单据类型
+ b.put("trade_type", head.getString("trade_type"));//付款结算类型
+ b.put("pk_currtype", head.getString("pk_currtype"));//币种编码
+ b.put("bill_date", formatDate(head.getString("bill_date")));//单据日期
+ if (!"20".equals(balaTypeCode)) {
+ b.put("pay_primal", item.getString("field0030"));//付款原币金额
+ } else {
+ b.put("pay_primal", "");//这里要取保证金
+ }
+ b.put("creationtime", DateUtil.now());//创建时间
+ b.put("direction", "-1");//方向 :1=收;-1=付;
+ b.put("objecttype", formmainData.getString("field0085"));//交易类型:0=客户;1=供应商;2=部门;3=人员;4=散户;
+ b.put("pk_oppaccount", formmainData.getString("field0041"));//付款银行账号
+ b.put("pk_supplier", formmainData.getString("field0054"));//供应商编码
+ b.put("pk_account", formmainData.getString("field0044"));//收款银行账户
+ b.put("pk_recproject", item.getString("field0091"));//收支项目
+ body.add(b);
+ }
+ return param;
+ }
+
+
+ /**
+ * 付款单
+ *
+ * @param datasourceCode
+ * @param formmainData
+ * @param headers
+ * @param forsonDataList
+ */
+ private void apPaybill(String datasourceCode, JSONObject formmainData, JSONObject headers, List forsonDataList) {
+ String orgCode = formmainData.getString("field0053");
+ String billmaker = headers.getString("billmaker");
+ if (StrUtil.isNotEmpty(orgCode)) {
+ Map> groupedMap = forsonDataList.stream()
+ .collect(Collectors.groupingBy(item -> item.getString("field0065")));
+ //付款明细按项目部代码分组,几个项目部就生成几张单子
+ for (Map.Entry> entry : groupedMap.entrySet()) {
+ //每个项目部的付款总额
+ BigDecimal money = BigDecimal.ZERO;
+ List payList = entry.getValue();
+ JSONObject head = new JSONObject();
+ head.put("pk_org", payList.get(0).getString("field0065"));//财务组织编码
+ head.put("pk_tradetype", "D3");//交易类型编码
+ head.put("isinit", "");//期初标记
+ head.put("billdate", formmainData.getString("field0004"));//制单日期
+ head.put("busidate", "");//起算日期
+ head.put("objtype", formmainData.getString("field0085"));//往来对象1-供应商 2-部门 3-业务员
+ head.put("supplier", formmainData.getString("field0054"));//供应商编码
+ head.put("pk_dept", formmainData.getString("field0057"));//部门编码
+ head.put("pk_psndoc", formmainData.getString("field0056"));//业务员编码
+ head.put("pk_currtype", formmainData.getString("field0087"));//币种编码
+ head.put("pk_busitype", "");//业务流程编码
+ head.put("ap_payaccount", formmainData.getString("field0041"));//付款银行账户
+ head.put("ap_recaccount", formmainData.getString("field0044"));//收款银行账户
+ head.put("ap_cashaccount", formmainData.getString("field0046"));//现金银行账户
+ head.put("pk_balatype", formmainData.getString("field0076"));//结算方式编码
+ head.put("money", money);//原币金额
+ head.put("rate", "1");//组织本币汇率
+ head.put("local_money", money);//组织本币金额
+ head.put("grouprate", "1");//集团本币汇率
+ head.put("grouplocal", money);//集团本币金额
+ head.put("globalrate", "1");//全局本币汇率
+ head.put("globallocal", money);//全局本币金额
+ head.put("accessorynum", "");//附件张数
+ head.put("sett_org", "");//结算财务组织编码
+ head.put("pk_pcorg", "");//利润中心编码
+ head.put("pu_org", "");//业务组织编码
+ head.put("pu_deptid", "");//业务部门编码
+ head.put("pu_psndoc", "");//业务人员编码
+ head.put("billmaker", billmaker);//制单人编码
+ head.put("billstatus", "");//单据状态
+ head.put("approvestatus", "");//审核状态
+ head.put("effectstatus", "");//生效状态
+ head.put("approver", "");//审核人编码
+ head.put("approvedate", "");//审核日期
+ head.put("confirmuser", "");//单据确认人编码
+ head.put("effectdate", "");//生效日期
+ head.put("officialprintuser", "");//正式打印人编码
+ head.put("officialprintdate", "");//正式打印日期
+ head.put("src_syscode", "");//单据来源系统编码
+ head.put("pk_ratetype", "");//组织汇率类型
+ head.put("ratedate", "");//组织汇率来源日期
+ head.put("def1", formmainData.getString("field0083"));//账户属性
+ List itemList = new LinkedList<>();
+
+ //付款明细行
+ for (int i = 0; i < payList.size(); i++) {
+ JSONObject forson = payList.get(i);
+ String billNO = forson.getString("field0023");
+ //联查OA付款申请单明细行
+ CLPayApplyEntity clPayApply = new CLPayApplyEntity();
+ clPayApply.setDataSourceCode(datasourceCode);
+ clPayApply.setField0001(billNO);
+ List clPayApplyList = clpayApplyService.queryByBillNo(clPayApply);
+ if (CollectionUtils.isNotEmpty(clPayApplyList)) {
+ for (CLPayApplyEntity payApply : clPayApplyList) {
+ //采购订单号,如果是参照的采购订单 这个值不为空
+ String orderNo = payApply.getField0048();
+ //应付订单号 如果参照的是应付单 这个值不为空
+ String payablebillNO = payApply.getField0047();
+ JSONObject payApplyJson = new JSONObject();
+ payApplyJson.put("contractno", "");//合同号
+ payApplyJson.put("purchaseorder", "");//订单号
+ payApplyJson.put("invoiceno", "");//发票号
+ payApplyJson.put("innerorderno", "");//调拨订单号
+ payApplyJson.put("scomment", payApply.getField0031());//摘要
+ payApplyJson.put("material", payApply.getField0027());//物料编码
+ payApplyJson.put("ap_pk_payterm", "");//付款协议编码
+ payApplyJson.put("objtype", formmainData.getString("field0085"));//往来对象1-供应商 2-部门 3-业务员,
+ payApplyJson.put("supplier", formmainData.getString("field0054"));//供应商编码,往来对象选择供应商时必输
+ payApplyJson.put("pk_dept", head.getString("pk_dept"));//部门编码,往来对象选择部门时必输
+ payApplyJson.put("pk_psndoc", head.getString("pk_psndoc"));//业务员编码,往来对象选择业务员时必输
+ payApplyJson.put("pk_recpaytype", forson.getString("field0031"));//付款业务类型名称
+ payApplyJson.put("pk_currtype", payApply.getField0051());//币种编码
+ payApplyJson.put("money_de", payApply.getField0042());//贷方原币金额
+ payApplyJson.put("occupationmny", payApply.getField0042());//预占用核销原币余额
+ payApplyJson.put("rate", "1");//组织本币汇率
+ payApplyJson.put("local_money_de", payApply.getField0042());//组织本币金额
+ payApplyJson.put("grouprate", "1");//组织本币汇率
+ payApplyJson.put("groupdebit", payApply.getField0042());//集团本币金额
+ payApplyJson.put("globalrate", "1");//全局本币汇率
+ payApplyJson.put("globaldebit", payApply.getField0042());//全局本币金额
+ payApplyJson.put("quantity_de", payApply.getField0044());//贷方数量
+ payApplyJson.put("price", payApply.getField0041());//单价
+ payApplyJson.put("local_price", payApply.getField0041());//本币单价
+ payApplyJson.put("quantity_bal", "");//数量余额
+ payApplyJson.put("taxprice", payApply.getField0030());//含税单价
+ payApplyJson.put("local_taxprice", payApply.getField0030());//本币含税单价
+ payApplyJson.put("taxcodeid", "");//税码编码
+ payApplyJson.put("taxrate", payApply.getField0043());//税率
+ payApplyJson.put("local_tax_de", "");//税额
+ payApplyJson.put("notax_de", "");//贷方无税金额
+ payApplyJson.put("sett_org", "");//结算财务组织编码
+ payApplyJson.put("pk_pcorg", "");//利润中心编码
+ payApplyJson.put("pu_org", "");//业务组织编码
+ payApplyJson.put("pu_deptid", "");//业务部门编码
+ payApplyJson.put("pu_psndoc", "");//业务人员编码
+ payApplyJson.put("equipmentcode", "");//设备编码
+ payApplyJson.put("pk_subjcode", forson.getString("field0091"));//收支项目编码
+ payApplyJson.put("cashitem", "");//现金流量项目编码
+ payApplyJson.put("bankrollproject", "");//资金计划项目编码
+ payApplyJson.put("checkelement", "");//责任核算要素编码
+ payApplyJson.put("subjcode", "");//科目编码
+ payApplyJson.put("ap_payaccount", formmainData.getString("field0089"));//这里有传付款银行子户pk
+ payApplyJson.put("ap_recaccount", "");//收款银行账户编码
+ payApplyJson.put("ordercubasdoc", "");//订单供应商编码
+ payApplyJson.put("freecust", "");//散户编码
+ payApplyJson.put("costcenter", "");//成本中心编码
+ payApplyJson.put("productline", "");//产品线编码
+ payApplyJson.put("pk_balatype", head.getString("pk_balatype"));//结算方式编码
+ payApplyJson.put("checktype", "");//票据类型编码
+ payApplyJson.put("checkno", "");//票据号
+ payApplyJson.put("pk_ratetype", "");//组织汇率类型
+ payApplyJson.put("ratedate", "");//组织汇率来源日期
+ payApplyJson.put("supplier_v", formmainData.getString("field0094"));//供应商版本编码
+ payApplyJson.put("customer_v", "");//客户版本编码
+ //如果是参照订单做预付,那么源头和来源是一样的
+ if (StrUtil.isNotEmpty(orderNo)) {
+ payApplyJson.put("src_tradetype", payApply.getField0059());//源头交易类型
+ payApplyJson.put("src_billtype", payApply.getField0052());//源头单据类型
+ payApplyJson.put("src_billid", payApply.getField0061());//源头单据表头id
+ payApplyJson.put("src_itemid", payApply.getField0062());//源头单据表体id
+ payApplyJson.put("top_billid", payApply.getField0061());//上层单据表头id
+ payApplyJson.put("top_itemid", payApply.getField0062());//上层单据表体id
+ payApplyJson.put("top_billtype", payApply.getField0052());//上层单据类型
+ payApplyJson.put("top_tradetype", payApply.getField0059());//上层交易类型
+ payApplyJson.put("purchaseorder", payApply.getField0048());//订单号
+ payApplyJson.put("prepay", "1");//付款性质(0应付款、1预付款)
+ } else {
+ //如果是参照应付 那正常取数
+ payApplyJson.put("src_tradetype", payApply.getField0053());//源头交易类型
+ payApplyJson.put("src_billtype", payApply.getField0060());//源头单据类型
+ payApplyJson.put("src_billid", payApply.getField0054());//源头单据表头id
+ payApplyJson.put("src_itemid", payApply.getField0055());//源头单据表体id
+ payApplyJson.put("top_billid", payApply.getField0061());//上层单据表头id
+ payApplyJson.put("top_itemid", payApply.getField0062());//上层单据表体id
+ payApplyJson.put("top_billtype", payApply.getField0052());//上层单据类型
+ payApplyJson.put("top_tradetype", payApply.getField0059());//上层交易类型
+ payApplyJson.put("prepay", "0");//付款性质(0应付款、1预付款)
+ }
+ //累加付款总额
+ money = money.add(new BigDecimal(payApply.getField0042()));
+ itemList.add(payApplyJson);
+ }
+ }
+ }
+ head.put("money", money);//原币金额
+ head.put("local_money", money);//组织本币金额
+ head.put("grouplocal", money);//集团本币金额
+ head.put("globallocal", money);//全局本币金额
+ head.put("items", itemList);
+ String req = JSONObject.toJSONString(head);
+ logger.info("======OA付款单传NCC付款单请求参数:{}======", req);
+ String result = HttpRequest.post(baseUrl)
+ .header("appId", "800065")//NCC应用
+ .header("apiCode", "8000650012")//NCC付款单新增保存提交
+ .header("publicKey", "ZJYAbkr9+XjnDrlfQCRKXtpVvg/BjxqtxzcLgg5TIGagEKJCe7eDIk+3zDUT+v578prj")//OA公钥
+ .header("secretKey", "2GR4+yrcx+Ev+pN0Q6V6wxCdvisPX7wzNKBgc5SsIYGxYI5GTISXT6GvTPfp1u2Rj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//OA密钥
+ .body(req)//表单内容
+ .timeout(30000)//超时,毫秒
+ .execute().body();
+ logger.info("======OA付款单传NCC付款单响应参数:{}======",result);
+
+ }
+ }
+ }
+ private static String formatDate(String dateStr) {
+ if (StrUtil.isNotEmpty(dateStr)) {
+ return DateUtil.format(DateUtil.parseDate(dateStr), "yyyy-MM-dd HH:mm:ss");
+ }
+ return null;
+ }
+}
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-plugin.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-plugin.xml
index 0d1a69e7..4b09adf3 100644
--- a/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-plugin.xml
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-plugin.xml
@@ -5,5 +5,6 @@
+