材料付款
This commit is contained in:
parent
e891eaba26
commit
43f368a4f1
|
@ -1,5 +1,6 @@
|
|||
package com.hzya.frame.plugin.oa.payment.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
@ -7,6 +8,7 @@ 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.dao.ICLPayApplyDao;
|
||||
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;
|
||||
|
@ -40,6 +42,8 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
Logger logger = LoggerFactory.getLogger(PaybillPluginServiceImpl.class);
|
||||
@Autowired
|
||||
private ICLPayApplyService clpayApplyService;
|
||||
@Autowired
|
||||
private ICLPayApplyDao clPayApplyDao;
|
||||
|
||||
/**
|
||||
* 付款单传到NCC
|
||||
|
@ -77,9 +81,9 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
* 如果支付类型是开票,保证金要单独生成一张付款结算单
|
||||
*/
|
||||
//付款单
|
||||
apPaybill(datasourceCode, formmainData, headers, forsonDataList);
|
||||
Boolean flag = apPaybill(datasourceCode, formmainData, headers, forsonDataList);
|
||||
String orgCode = formmainData.getString("field0053");
|
||||
if ("002".equals(orgCode)) {
|
||||
if (flag && "002".equals(orgCode)) {
|
||||
cmpPaybill(datasourceCode, formmainData, headers, forsonDataList);
|
||||
}
|
||||
// }
|
||||
|
@ -90,6 +94,7 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
* 付款结算单
|
||||
* 结算方式编码, 10备用金、20开票、21背书、3网银
|
||||
* 如果是开票 总部要生成2张付款结算单,一张是保证金 一张是承兑汇票
|
||||
* 对于材料类付款来说,付款组织是002的情况 基本上就是要生成总部付款结算单,因为总部自己不会采购材料
|
||||
*
|
||||
* @param datasourceCode
|
||||
* @param formmainData
|
||||
|
@ -97,14 +102,13 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
* @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;
|
||||
String pk_billmaker = headers.getString("pk_billmaker");
|
||||
//结算方式编码, 10备用金、20开票、21背书、3网银
|
||||
String balaTypeCode = formmainData.getString("field0076");
|
||||
//背书和开票 才要生成付款结算单
|
||||
if ("20".equals(balaTypeCode) || "21".equals(balaTypeCode) || "3".equals(balaTypeCode)) {
|
||||
//付款结算单
|
||||
JSONObject param = getCmpPayBillVO(formmainData, forsonDataList, orgCode, billmaker, groupCode);
|
||||
JSONObject param = getCmpPayBillVO(formmainData, forsonDataList, headers,false);
|
||||
String req = JSONObject.toJSONString(param);
|
||||
logger.info("======OA付款单传NCC付款结算单请求参数:{}======", req);
|
||||
String access_token = getAccessToken();
|
||||
|
@ -117,17 +121,15 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
.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){
|
||||
logger.info("======OA付款单传NCC付款结算单响应参数:{}======", result);
|
||||
//结算单审批
|
||||
String orgCode = formmainData.getString("field0053");
|
||||
String auditResult = cmpBillAudit(result, access_token, pk_billmaker, orgCode);
|
||||
if (StrUtil.isNotEmpty(auditResult) && null != getData(auditResult)) {
|
||||
//保证金单独生成一张付款结算单
|
||||
if ("20".equals(balaTypeCode)) {
|
||||
logger.info("======OA付款单传开票的方式保证金传NCC付款结算单请求参数:{}======");
|
||||
JSONObject bzjParam = getCmpPayBillVO(formmainData, forsonDataList, orgCode, billmaker, groupCode);
|
||||
JSONObject bzjParam = getCmpPayBillVO(formmainData, forsonDataList, headers,true);
|
||||
String bzjReq = JSONObject.toJSONString(bzjParam);
|
||||
String bazjResult = HttpRequest.post(baseUrl)
|
||||
.header("appId", "800065")//NCC应用
|
||||
|
@ -138,14 +140,62 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
.body(bzjReq)//表单内容
|
||||
.timeout(30000)//超时,毫秒
|
||||
.execute().body();
|
||||
logger.info("======OA付款单传开票的方式保证金传NCC付款结算单返回参数:{}",bazjResult);
|
||||
logger.info("======OA付款单传开票的方式保证金传NCC付款结算单返回参数:{}", bazjResult);
|
||||
//审批结算单
|
||||
cmpBillAudit(bazjResult, access_token, pk_billmaker,orgCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 付款结算单审批
|
||||
*
|
||||
* @param str 付款结算单新增返回的报文
|
||||
* @param access_token token
|
||||
* @param pk_billmaker 审批人pk
|
||||
* @param org_code 业务单元
|
||||
* @return
|
||||
*/
|
||||
private String cmpBillAudit(String str, String access_token, String pk_billmaker,String org_code) {
|
||||
if (StrUtil.isNotEmpty(str)) {
|
||||
JsonResultEntity resultEntity = JSONObject.parseObject(str, JsonResultEntity.class);
|
||||
if (resultEntity.isFlag()) {
|
||||
JSONObject attribute = (JSONObject) resultEntity.getAttribute();
|
||||
Boolean success = attribute.getBoolean("success");
|
||||
if (success) {
|
||||
String bill_no = attribute.getJSONObject("data").getString("bill_no");
|
||||
String pk_org = attribute.getJSONObject("data").getString("pk_org");
|
||||
JSONObject reqParams = new JSONObject();
|
||||
reqParams.put("bill_no", bill_no);
|
||||
reqParams.put("pk_org", org_code);
|
||||
reqParams.put("checknote", "同意");
|
||||
reqParams.put("pk_approver", pk_billmaker);
|
||||
String approverParam = reqParams.toJSONString();
|
||||
String approverResult = HttpRequest.post(baseUrl)
|
||||
.header("appId", "800065")//NCC应用
|
||||
.header("apiCode", "8000650007")//NCC付款结算单审批
|
||||
.header("publicKey", "ZJYAbkr9+XjnDrlfQCRKXtpVvg/BjxqtxzcLgg5TIGagEKJCe7eDIk+3zDUT+v578prj")//OA公钥
|
||||
.header("secretKey", "2GR4+yrcx+Ev+pN0Q6V6wxCdvisPX7wzNKBgc5SsIYGxYI5GTISXT6GvTPfp1u2Rj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//OA密钥
|
||||
.header("access_token", access_token)//token
|
||||
.body(approverParam)//表单内容
|
||||
.timeout(30000)//超时,毫秒
|
||||
.execute().body();
|
||||
logger.info("付款结算单审批接口返回数据:{}", approverResult);
|
||||
return approverResult;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
//付款结算单
|
||||
@NotNull
|
||||
private static JSONObject getCmpPayBillVO(JSONObject formmainData, List<JSONObject> forsonDataList, String orgCode, String billmaker, String groupCode) {
|
||||
private static JSONObject getCmpPayBillVO(JSONObject formmainData, List<JSONObject> forsonDataList, JSONObject headers,Boolean isBzj) {
|
||||
String orgCode = formmainData.getString("field0053");
|
||||
String billmaker = headers.getString("billmaker");
|
||||
String groupCode = headers.getString("groupCode");
|
||||
|
||||
JSONObject param = new JSONObject();
|
||||
JSONObject head = new JSONObject();
|
||||
List<JSONObject> body = new LinkedList<>();
|
||||
|
@ -153,19 +203,24 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
param.put("head", head);
|
||||
param.put("body", body);
|
||||
head.put("pk_org", orgCode);//组织编码
|
||||
head.put("pk_group", "ZJJH");//集团编码
|
||||
head.put("pk_group", groupCode);//集团编码
|
||||
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)) {
|
||||
if (!isBzj) {
|
||||
head.put("primal_money", formmainData.getString("field0019"));//付款原币金额
|
||||
head.put("pk_balatype", formmainData.getString("field0076"));//结算方式
|
||||
} else {
|
||||
head.put("primal_money", "field0096");//付款原币金额, 这里要取保证金
|
||||
head.put("primal_money", formmainData.getString("field0096"));//付款原币金额, 这里要取保证金
|
||||
//如果是汇票保证金,则结算方式用网银
|
||||
head.put("pk_balatype", "3");//结算方式
|
||||
}
|
||||
|
||||
head.put("pk_currtype", formmainData.getString("field0087"));//币种名称
|
||||
head.put("billmaker", billmaker);//制单人名称
|
||||
head.put("def1", formmainData.getString("field0083"));//账户属性
|
||||
head.put("def2", formmainData.getString("field0001"));//OA单据号
|
||||
for (JSONObject item : forsonDataList) {
|
||||
JSONObject b = new JSONObject();
|
||||
b.put("pk_org", orgCode);//组织编码
|
||||
|
@ -173,25 +228,33 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
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("pk_balatype", head.getString("pk_balatype"));//结算方式
|
||||
b.put("bill_date", formatDate(head.getString("bill_date")));//单据日期
|
||||
if (!"20".equals(balaTypeCode)) {
|
||||
b.put("memo",item.getString("field0074"));
|
||||
if (!isBzj) {
|
||||
b.put("pay_primal", item.getString("field0030"));//付款原币金额
|
||||
b.put("pk_customer", item.getString("field0065"));//这里传项目部的编码,是在和项目部做结算
|
||||
b.put("pk_recproject", headers.getString("付-往来款"));//收支项目, 固定写付往来款
|
||||
} else {
|
||||
b.put("pay_primal", "field0096");//这里要取保证金
|
||||
b.put("pay_primal", formmainData.getString("field0096"));//这里要取保证金
|
||||
b.put("pk_customer", "006");//保证金情况 固定写006浙江建辉矿建集团有限公司(汇票保证金户)
|
||||
b.put("pk_recproject", headers.getString("付-汇票保证金"));//收支项目, 固定写付-汇票保证金
|
||||
}
|
||||
b.put("creationtime", DateUtil.now());//创建时间
|
||||
b.put("direction", "-1");//方向 :1=收;-1=付;
|
||||
b.put("objecttype", formmainData.getString("field0085"));//交易类型:0=客户;1=供应商;2=部门;3=人员;4=散户;
|
||||
b.put("objecttype", "0");//交易类型: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"));//收支项目
|
||||
//b.put("pk_supplier", formmainData.getString("field0065"));//这里传项目部的编码,是在和项目部做结算
|
||||
b.put("pk_account", item.getString("field0099"));//对方银行账号 :指的是付款结算单的收款银行账户
|
||||
body.add(b);
|
||||
//质保金 明细行
|
||||
if (isBzj) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return param;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 付款单
|
||||
*
|
||||
|
@ -200,40 +263,57 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
* @param headers
|
||||
* @param forsonDataList
|
||||
*/
|
||||
private void apPaybill(String datasourceCode, JSONObject formmainData, JSONObject headers, List<JSONObject> forsonDataList) {
|
||||
String orgCode = formmainData.getString("field0053");
|
||||
private Boolean apPaybill(String datasourceCode, JSONObject formmainData, JSONObject headers, List<JSONObject> forsonDataList) {
|
||||
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();
|
||||
boolean falg = true;
|
||||
//付款明细行,每一行都生成一张NCC付款单
|
||||
for (int i = 0; i < forsonDataList.size(); i++) {
|
||||
if (falg){
|
||||
JSONObject forson = forsonDataList.get(i);
|
||||
String req = payBillValueOf(datasourceCode, formmainData, forsonDataList, billmaker, forson);
|
||||
String access_token = getAccessToken();
|
||||
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密钥
|
||||
.header("access_token", access_token)//token
|
||||
.body(req)//表单内容
|
||||
.timeout(30000)//超时,毫秒
|
||||
.execute().body();
|
||||
logger.info("======OA付款单传NCC付款单响应参数:{}======", result);
|
||||
//解析返回结果 并把NCC单据号更新到OA表单
|
||||
falg = parseRes(result,datasourceCode,headers,forson.getString("id"));
|
||||
}
|
||||
}
|
||||
return falg;
|
||||
}
|
||||
|
||||
private String payBillValueOf(String datasourceCode, JSONObject formmainData, List<JSONObject> forsonDataList, String billmaker, JSONObject forson) {
|
||||
BigDecimal totalMoney = BigDecimal.ZERO;
|
||||
JSONObject head = new JSONObject();
|
||||
head.put("pk_org", payList.get(0).getString("field0065"));//财务组织编码
|
||||
head.put("pk_org", forson.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("money", totalMoney);//原币金额
|
||||
head.put("rate", "1");//组织本币汇率
|
||||
head.put("local_money", money);//组织本币金额
|
||||
head.put("local_money", totalMoney);//组织本币金额
|
||||
head.put("grouprate", "1");//集团本币汇率
|
||||
head.put("grouplocal", money);//集团本币金额
|
||||
head.put("grouplocal", totalMoney);//集团本币金额
|
||||
head.put("globalrate", "1");//全局本币汇率
|
||||
head.put("globallocal", money);//全局本币金额
|
||||
head.put("globallocal", totalMoney);//全局本币金额
|
||||
head.put("isinit", "");//期初标记
|
||||
head.put("busidate", "");//起算日期
|
||||
head.put("pk_busitype", "");//业务流程编码
|
||||
head.put("accessorynum", "");//附件张数
|
||||
head.put("sett_org", "");//结算财务组织编码
|
||||
head.put("pk_pcorg", "");//利润中心编码
|
||||
|
@ -254,11 +334,10 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
head.put("pk_ratetype", "");//组织汇率类型
|
||||
head.put("ratedate", "");//组织汇率来源日期
|
||||
head.put("def1", formmainData.getString("field0083"));//账户属性
|
||||
head.put("def2", formmainData.getString("field0001"));//OA单据号
|
||||
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();
|
||||
|
@ -266,41 +345,48 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
clPayApply.setField0001(billNO);
|
||||
List<CLPayApplyEntity> clPayApplyList = clpayApplyService.queryByBillNo(clPayApply);
|
||||
if (CollectionUtils.isNotEmpty(clPayApplyList)) {
|
||||
if (clPayApplyList.get(0).getSource_bill_type().equals("采购订单")) {
|
||||
clPayApplyList = clPayApplyList.stream().limit(1).collect(Collectors.toList());
|
||||
} else if (clPayApplyList.get(0).getSource_bill_type().equals("应付单")) {
|
||||
clPayApplyList = clPayApplyList.stream()
|
||||
.filter(c -> StrUtil.isNotEmpty(c.getField0066()))
|
||||
.filter(c -> new BigDecimal(c.getField0066()).compareTo(BigDecimal.ZERO) > 0)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
for (CLPayApplyEntity payApply : clPayApplyList) {
|
||||
//采购订单号,如果是参照的采购订单 这个值不为空
|
||||
String orderNo = payApply.getField0048();
|
||||
//应付订单号 如果参照的是应付单 这个值不为空
|
||||
String payablebillNO = payApply.getField0047();
|
||||
//单据类型
|
||||
String sourceBillType = payApply.getSource_bill_type();
|
||||
String money = payApply.getField0066();
|
||||
if ("采购订单".equals(sourceBillType)) {
|
||||
money = payApply.getField0071();
|
||||
}
|
||||
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("scomment", forson.getString("field0074"));//摘要
|
||||
payApplyJson.put("ap_pk_payterm", "");//付款协议编码
|
||||
payApplyJson.put("objtype", formmainData.getString("field0085"));//往来对象1-供应商 2-部门 3-业务员,
|
||||
payApplyJson.put("supplier", formmainData.getString("field0054"));//供应商编码,往来对象选择供应商时必输
|
||||
payApplyJson.put("supplier_v", formmainData.getString("field0094"));//供应商版本编码
|
||||
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.getField0064());//贷方原币金额
|
||||
payApplyJson.put("occupationmny", payApply.getField0064());//预占用核销原币余额
|
||||
payApplyJson.put("money_de", money);//贷方原币金额
|
||||
payApplyJson.put("occupationmny", money);//预占用核销原币余额
|
||||
payApplyJson.put("rate", "1");//组织本币汇率
|
||||
payApplyJson.put("local_money_de", payApply.getField0064());//组织本币金额
|
||||
payApplyJson.put("local_money_de", money);//组织本币金额
|
||||
payApplyJson.put("grouprate", "1");//组织本币汇率
|
||||
payApplyJson.put("groupdebit", payApply.getField0064());//集团本币金额
|
||||
payApplyJson.put("groupdebit", money);//集团本币金额
|
||||
payApplyJson.put("globalrate", "1");//全局本币汇率
|
||||
payApplyJson.put("globaldebit", payApply.getField0064());//全局本币金额
|
||||
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("globaldebit", money);//全局本币金额
|
||||
payApplyJson.put("pk_balatype", head.getString("pk_balatype"));//结算方式编码
|
||||
payApplyJson.put("pk_subjcode", forson.getString("field0091"));//收支项目编码
|
||||
payApplyJson.put("ap_payaccount", formmainData.getString("field0089"));//这里有传付款银行子户pk
|
||||
payApplyJson.put("taxcodeid", "");//税码编码
|
||||
payApplyJson.put("taxrate", payApply.getField0043());//税率
|
||||
payApplyJson.put("local_tax_de", "");//税额
|
||||
payApplyJson.put("notax_de", "");//贷方无税金额
|
||||
payApplyJson.put("sett_org", "");//结算财务组织编码
|
||||
|
@ -309,38 +395,33 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
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)) {
|
||||
if ("采购订单".equals(payApply.getSource_bill_type())) {
|
||||
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("src_itemid", payApply.getField0063());//源头单据表体id
|
||||
payApplyJson.put("top_billid", payApply.getField0061());//上层单据表头id
|
||||
//payApplyJson.put("top_itemid", payApply.getField0062());//上层单据表体id // 这里可能是取采购付款计划的pk
|
||||
payApplyJson.put("top_itemid", payApply.getField0063());//上层单据表体id // 这里可能是取采购付款计划的pk
|
||||
payApplyJson.put("top_billtype", payApply.getField0052());//上层单据类型
|
||||
payApplyJson.put("top_tradetype", payApply.getField0059());//上层交易类型
|
||||
payApplyJson.put("purchaseorder", payApply.getField0048());//订单号
|
||||
payApplyJson.put("prepay", "1");//付款性质(0应付款、1预付款)
|
||||
payApplyJson.put("prepay", "预付款");//付款性质(0应付款、1预付款)
|
||||
payApplyJson.put("taxrate", "0");//税率
|
||||
} else {
|
||||
//如果是参照应付 那正常取数
|
||||
payApplyJson.put("src_tradetype", payApply.getField0053());//源头交易类型
|
||||
|
@ -351,36 +432,78 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
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预付款)
|
||||
payApplyJson.put("prepay", "应付款");//付款性质(0应付款、1预付款)
|
||||
payApplyJson.put("material", payApply.getField0027());//物料编码
|
||||
payApplyJson.put("taxrate", payApply.getField0043());//税率
|
||||
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());//本币含税单价
|
||||
}
|
||||
//累加付款总额
|
||||
money = money.add(new BigDecimal(payApply.getField0064()));
|
||||
totalMoney = totalMoney.add(new BigDecimal(money));
|
||||
itemList.add(payApplyJson);
|
||||
}
|
||||
}
|
||||
}
|
||||
head.put("money", money);//原币金额
|
||||
head.put("local_money", money);//组织本币金额
|
||||
head.put("grouplocal", money);//集团本币金额
|
||||
head.put("globallocal", money);//全局本币金额
|
||||
|
||||
head.put("money", totalMoney);//原币金额
|
||||
head.put("local_money", totalMoney);//组织本币金额
|
||||
head.put("grouplocal", totalMoney);//集团本币金额
|
||||
head.put("globallocal", totalMoney);//全局本币金额
|
||||
head.put("items", itemList);
|
||||
String req = JSONObject.toJSONString(head);
|
||||
logger.info("======OA付款单传NCC付款单请求参数:{}======", req);
|
||||
String access_token = getAccessToken();
|
||||
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密钥
|
||||
.header("access_token", access_token)//token
|
||||
.body(req)//表单内容
|
||||
.timeout(30000)//超时,毫秒
|
||||
.execute().body();
|
||||
logger.info("======OA付款单传NCC付款单响应参数:{}======",result);
|
||||
return req;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解析返回结果,并把单号更新到OA
|
||||
* @param result
|
||||
* @param datasourceCode
|
||||
* @param headers
|
||||
* @param id OA付款单明细行id
|
||||
* @return
|
||||
*/
|
||||
private Boolean parseRes(String result,String datasourceCode,JSONObject headers,String id){
|
||||
boolean flag = false;
|
||||
JSONObject attribute = getAttribute(result);
|
||||
if (null != attribute){
|
||||
String sql = null;
|
||||
Boolean success = attribute.getBoolean("success");
|
||||
if (success){
|
||||
flag = true;
|
||||
JSONObject data = attribute.getJSONObject("data");
|
||||
String message = Convert.toStr(attribute.getString("message"), "成功");
|
||||
String billno = data.getString("billno");
|
||||
if (StrUtil.isNotEmpty(billno)){
|
||||
String sqlTemplate = "update {} set {} = '{}',{} = '{}' where {} = '{}'";
|
||||
sql = StrUtil.format(sqlTemplate,headers.getString("forsonTableName"),"field0100",billno,"field0101",message,"id",id);
|
||||
}
|
||||
}else {
|
||||
String message = Convert.toStr(attribute.getString("message"), "失败");
|
||||
String sqlTemplate = "update {} set {} = '{}' where {} = '{}'";
|
||||
//更新错误信息
|
||||
sql = StrUtil.format(sqlTemplate,headers.getString("forsonTableName"),"field0101",message,"id",id);
|
||||
}
|
||||
CLPayApplyEntity entity = new CLPayApplyEntity();
|
||||
entity.setDataSourceCode(datasourceCode);
|
||||
try {
|
||||
clPayApplyDao.execUpdateSql(sql,entity);
|
||||
}catch (Exception e){
|
||||
logger.error("更新NCC付款单号到OA失败:{}",e);
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期格式化
|
||||
* @param dateStr
|
||||
* @return
|
||||
*/
|
||||
private static String formatDate(String dateStr) {
|
||||
if (StrUtil.isNotEmpty(dateStr)) {
|
||||
return DateUtil.format(DateUtil.parseDate(dateStr), "yyyy-MM-dd HH:mm:ss");
|
||||
|
@ -388,7 +511,11 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
return null;
|
||||
}
|
||||
|
||||
private String getAccessToken(){
|
||||
/**
|
||||
* 获取token
|
||||
* @return
|
||||
*/
|
||||
private String getAccessToken() {
|
||||
try {
|
||||
String result = HttpRequest.post(baseUrl)
|
||||
.header("appId", "800065")//NCC应用
|
||||
|
@ -398,19 +525,71 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
|
|||
.body("")//表单内容
|
||||
.timeout(30000)//超时,毫秒
|
||||
.execute().body();
|
||||
if (StrUtil.isNotEmpty(result)){
|
||||
JSONObject resultJson = JSONObject.parseObject(result);
|
||||
JSONObject attribute = resultJson.getJSONObject("attribute");
|
||||
if (null != attribute && attribute.getBoolean("success")){
|
||||
JSONObject data = attribute.getJSONObject("data");
|
||||
if (null != data){
|
||||
JSONObject data = getData(result);
|
||||
if (null != data) {
|
||||
return data.getString("access_token");
|
||||
}
|
||||
}
|
||||
}
|
||||
}catch (Exception e){
|
||||
logger.error("获取NCCtoken失败:{}",e);
|
||||
} catch (Exception e) {
|
||||
logger.error("获取NCCtoken失败:{}", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* NCC返回值data值
|
||||
*
|
||||
* @param result
|
||||
* @return
|
||||
*/
|
||||
private JSONObject getData(String result) {
|
||||
if (StrUtil.isNotEmpty(result)) {
|
||||
JSONObject resultJson = JSONObject.parseObject(result);
|
||||
JSONObject attribute = resultJson.getJSONObject("attribute");
|
||||
if (null != attribute && attribute.getBoolean("success")) {
|
||||
JSONObject data = attribute.getJSONObject("data");
|
||||
if (null != data) {
|
||||
return data;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
//是否成功
|
||||
private Boolean isSuccess(String result){
|
||||
if (StrUtil.isNotEmpty(result)) {
|
||||
JSONObject resultJson = JSONObject.parseObject(result);
|
||||
JSONObject attribute = resultJson.getJSONObject("attribute");
|
||||
if (null != attribute ) {
|
||||
return attribute.getBoolean("success");
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
//NCC返回值
|
||||
private JSONObject getAttribute(String result) {
|
||||
if (StrUtil.isNotEmpty(result)) {
|
||||
JSONObject resultJson = JSONObject.parseObject(result);
|
||||
JSONObject attribute = resultJson.getJSONObject("attribute");
|
||||
if (null != attribute) {
|
||||
return attribute;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String message = Convert.toStr("111", "成功");
|
||||
System.out.println(message);
|
||||
String result = "{\"msg\":\"转发成功\",\"type\":null,\"flag\":true,\"status\":\"200\",\"attribute\":{\"code\":\"1000000000\",\"data\":{\"pk_bill\":\"1001A6100000000Z54H4\",\"billmaker\":\"1001A1100000000WFLXR\",\"billno\":\"D32025070900000861\",\"pk_org\":\"0001A11000000000EL8V\"},\"success\":true,\"message\":null,\"errorStack\":null}}";
|
||||
PaybillPluginServiceImpl service = new PaybillPluginServiceImpl();
|
||||
JSONObject data = service.getData(result);
|
||||
if (null != data){
|
||||
String billno = data.getString("billno");
|
||||
if (StrUtil.isNotEmpty(billno)){
|
||||
String sqlTemplate = "update {} set {} = '{}' where {} = '{}'";
|
||||
String sql = StrUtil.format(sqlTemplate,"formmain_1","field0100",billno,"id","123");
|
||||
System.out.println(sql);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue