材料付款单

This commit is contained in:
xiangerlin 2025-07-06 14:02:49 +08:00
parent cbba0001bd
commit 83e1e8489b
11 changed files with 1066 additions and 1 deletions

View File

@ -50,7 +50,12 @@
<profile.active>jianhui</profile.active> <profile.active>jianhui</profile.active>
</properties> </properties>
</profile> </profile>
<profile>
<id>jianhui-test</id><!-- 建辉环境打包用这个-->
<properties>
<profile.active>jianhui-test</profile.active>
</properties>
</profile>
</profiles> </profiles>
<build> <build>
<finalName>kangarooDataCenterV3</finalName> <finalName>kangarooDataCenterV3</finalName>

View File

@ -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<CLPayApplyEntity,String> {
}

View File

@ -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<CLPayApplyEntity,String> implements ICLPayApplyDao {
}

View File

@ -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;
}
}

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzya.frame.plugin.oa.payapply.dao.impl.CLPayApplyDaoImpl">
<resultMap id="get-CLPayApplyEntity-result" type="com.hzya.frame.plugin.oa.payapply.entity.CLPayApplyEntity">
<!--主键 -->
<result property="id" column="id" />
<result property="formmain_id" column="formmain_id" />
<result property="field0001" column="field0001" />
<result property="field0004" column="field0004" />
<result property="field0005" column="field0005" />
<result property="field0039" column="field0039" />
<result property="field0015" column="field0015" />
<result property="field0040" column="field0040" />
<result property="field0052" column="field0052" />
<result property="field0059" column="field0059" />
<result property="field0046" column="field0046" />
<result property="field0047" column="field0047" />
<result property="field0048" column="field0048" />
<result property="field0022" column="field0022" />
<result property="field0023" column="field0023" />
<result property="field0024" column="field0024" />
<result property="field0025" column="field0025" />
<result property="field0027" column="field0027" />
<result property="field0028" column="field0028" />
<result property="field0029" column="field0029" />
<result property="field0030" column="field0030" />
<result property="field0031" column="field0031" />
<result property="field0032" column="field0032" />
<result property="field0051" column="field0051" />
<result property="field0041" column="field0041" />
<result property="field0042" column="field0042" />
<result property="field0043" column="field0043" />
<result property="field0044" column="field0044" />
<result property="field0045" column="field0045" />
<result property="field0049" column="field0049" />
<result property="field0053" column="field0053" />
<result property="field0054" column="field0054" />
<result property="field0055" column="field0055" />
<result property="field0056" column="field0056" />
<result property="field0057" column="field0057" />
<result property="field0058" column="field0058" />
<result property="field0060" column="field0060" />
<result property="field0061" column="field0061" />
<result property="field0062" column="field0062" />
</resultMap>
<sql id="CLPayApplyEntity_list">
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
</sql>
<select id="entity_list_base" resultMap="get-CLPayApplyEntity-result" parameterType="com.hzya.frame.plugin.oa.payapply.entity.CLPayApplyEntity">
select
<include refid="CLPayApplyEntity_list"/>
from
formson_0267
LEFT JOIN formmain_0266 on formmain_0266.id = formson_0267.formmain_id
<trim prefix="where" prefixOverrides="and">
<if test="id != null and id != ''">formson_0267.id = #{id}</if>
<if test="field0001 != null and field0001 != ''">and formmain_0266.field0001 = #{field0001}</if>
<if test="formmain_id != null and formmain_id != ''">and formson_0267.formmain_id = #{formmain_id}</if>
</trim>
ORDER BY formson_0267.sort
</select>
</mapper>

View File

@ -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<CLPayApplyEntity,String> {
/**
* 根据编码查
* @param entity
* @return
*/
List<CLPayApplyEntity> queryByBillNo(CLPayApplyEntity entity);
}

View File

@ -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<CLPayApplyEntity,String> 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<CLPayApplyEntity> queryByBillNo(CLPayApplyEntity entity) {
if (null != entity && StrUtil.isNotEmpty(entity.getField0001())){
List<CLPayApplyEntity> queryList = clPayApplyDao.query(entity);
return queryList;
}
return null;
}
}

View File

@ -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("执行成功");
}
}

View File

@ -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);
}

View File

@ -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<JSONObject> 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<JSONObject> 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<JSONObject> forsonDataList, String orgCode, String billmaker, String groupCode) {
JSONObject param = new JSONObject();
JSONObject head = new JSONObject();
List<JSONObject> 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<JSONObject> forsonDataList) {
String orgCode = formmainData.getString("field0053");
String billmaker = headers.getString("billmaker");
if (StrUtil.isNotEmpty(orgCode)) {
Map<String, List<JSONObject>> groupedMap = forsonDataList.stream()
.collect(Collectors.groupingBy(item -> item.getString("field0065")));
//付款明细按项目部代码分组几个项目部就生成几张单子
for (Map.Entry<String, List<JSONObject>> entry : groupedMap.entrySet()) {
//每个项目部的付款总额
BigDecimal money = BigDecimal.ZERO;
List<JSONObject> 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<JSONObject> 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<CLPayApplyEntity> 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;
}
}

View File

@ -5,5 +5,6 @@
<bean name="payResultPluginInitializer" class="com.hzya.frame.plugin.oa.payment.plugin.PayResultPluginInitializer" /> <bean name="payResultPluginInitializer" class="com.hzya.frame.plugin.oa.payment.plugin.PayResultPluginInitializer" />
<bean name="requisitionOrderPluginInitializer" class="com.hzya.frame.plugin.oa.praybill.plugin.RequisitionOrderPluginInitializer" /> <bean name="requisitionOrderPluginInitializer" class="com.hzya.frame.plugin.oa.praybill.plugin.RequisitionOrderPluginInitializer" />
<bean name="poOrderApprovalEventPluginInitializer" class="com.hzya.frame.plugin.oa.poorder.plugin.PoOrderApprovalEventPluginInitializer" /> <bean name="poOrderApprovalEventPluginInitializer" class="com.hzya.frame.plugin.oa.poorder.plugin.PoOrderApprovalEventPluginInitializer" />
<bean name="paybillPluginInitializer" class="com.hzya.frame.plugin.oa.payment.plugin.PaybillPluginInitializer" />
</beans> </beans>