From 83e1e8489b930f5fcf5a31b6b69f48e5e2e5c8a5 Mon Sep 17 00:00:00 2001 From: xiangerlin <251481237@qq.com> Date: Sun, 6 Jul 2025 14:02:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=90=E6=96=99=E4=BB=98=E6=AC=BE=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base-buildpackage/pom.xml | 7 +- .../oa/payapply/dao/ICLPayApplyDao.java | 12 + .../payapply/dao/impl/CLPayApplyDaoImpl.java | 15 + .../oa/payapply/entity/CLPayApplyEntity.java | 366 +++++++++++++++++ .../oa/payapply/entity/CLPayApplyEntity.xml | 101 +++++ .../payapply/service/ICLPayApplyService.java | 20 + .../service/impl/CLPayApplyServiceImpl.java | 42 ++ .../plugin/PaybillPluginInitializer.java | 103 +++++ .../service/IPaybillPluginService.java | 18 + .../impl/PaybillPluginServiceImpl.java | 382 ++++++++++++++++++ .../spring/spring-buildpackage-plugin.xml | 1 + 11 files changed, 1066 insertions(+), 1 deletion(-) create mode 100644 base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/dao/ICLPayApplyDao.java create mode 100644 base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/dao/impl/CLPayApplyDaoImpl.java create mode 100644 base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/entity/CLPayApplyEntity.java create mode 100644 base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/entity/CLPayApplyEntity.xml create mode 100644 base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/service/ICLPayApplyService.java create mode 100644 base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payapply/service/impl/CLPayApplyServiceImpl.java create mode 100644 base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/plugin/PaybillPluginInitializer.java create mode 100644 base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/IPaybillPluginService.java create mode 100644 base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/impl/PaybillPluginServiceImpl.java 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 @@ +