材料类付款

This commit is contained in:
xiangerlin 2025-07-20 15:14:33 +08:00
parent 9e8bd2ac68
commit 9080c6c24e
1 changed files with 97 additions and 31 deletions

View File

@ -83,7 +83,7 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
//付款单
Boolean flag = apPaybill(datasourceCode, formmainData, headers, forsonDataList);
String orgCode = formmainData.getString("field0053");
if (flag && "002".equals(orgCode)) {
if ("002".equals(orgCode)) {
cmpPaybill(datasourceCode, formmainData, headers, forsonDataList);
}
// }
@ -105,8 +105,8 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
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)) {
//所有结算方式都存在总部代付
// if ("20".equals(balaTypeCode) || "21".equals(balaTypeCode) || "3".equals(balaTypeCode)) {
//付款结算单
JSONObject param = getCmpPayBillVO(formmainData, forsonDataList, headers,false);
String req = JSONObject.toJSONString(param);
@ -145,7 +145,7 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
cmpBillAudit(bazjResult, access_token, pk_billmaker,orgCode);
}
}
}
//}
}
/**
@ -207,19 +207,24 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
head.put("bill_type", "F5");//单据类型
head.put("trade_type", "D5");//付款结算类型
head.put("source_flag", "2");//来源系统
head.put("bill_date", formatDate(formmainData.getString("field0004")));//单据日期
head.put("bill_date", formatDate(formmainData.getString("field0102")));//单据日期
head.put("pk_busiman", formmainData.getString("field0056"));//业务员
head.put("pk_dept", formmainData.getString("field0057"));//部门
if (!isBzj) {
head.put("primal_money", formmainData.getString("field0019"));//付款原币金额
head.put("pk_balatype", formmainData.getString("field0076"));//结算方式
head.put("def1", formmainData.getString("field0083"));//账户属性
//如果是保证金总部要传现金账户
head.put("mon_account",formmainData.getString("field0078"));
} else {
head.put("primal_money", formmainData.getString("field0096"));//付款原币金额 这里要取保证金
//如果是汇票保证金则结算方式用网银
head.put("pk_balatype", "3");//结算方式
head.put("def1", formmainData.getString("field0106"));//账户属性
}
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();
@ -230,20 +235,42 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
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")));//单据日期
b.put("memo",item.getString("field0074"));
b.put("pk_busiman",formmainData.getString("field0056"));//业务员
b.put("pk_dept",formmainData.getString("field0057"));//部门
if (!isBzj) {
b.put("pay_primal", item.getString("field0030"));//付款原币金额
b.put("pk_customer", item.getString("field0065"));//这里传项目部的编码是在和项目部做结算
b.put("pk_recproject", headers.getString("付-往来款"));//收支项目 固定写付往来款
b.put("pk_oppaccount", formmainData.getString("field0041"));//付款银行账号
b.put("mon_account",formmainData.getString("field0078"));//现金账户
//代付的摘要格式总部{支付方式}代付{供应商}{合同号}合同采购材料款项目部票号前8-后8
String template = "总部{}代付{}{}合同采购材料款,({}),票号{}-{}";
String jsfs = Convert.toStr(formmainData.getString("field0048"),"");
if ("20".equals(balaTypeCode) || "21".equals(balaTypeCode)){
jsfs = "汇票";
}
String supName = Convert.toStr(formmainData.getString("field0015"),"");
String orderNo = Convert.toStr(item.getString("field0080"),"");
String orgName = Convert.toStr(item.getString("field0027"),"");
String memo = StrUtil.format(template,jsfs,supName,orderNo,orgName,"","");
b.put("memo",memo);
} else {
b.put("pay_primal", formmainData.getString("field0096"));//这里要取保证金
b.put("pk_customer", "006");//保证金情况 固定写006浙江建辉矿建集团有限公司汇票保证金户
b.put("pk_recproject", headers.getString("付-汇票保证金"));//收支项目 固定写付-汇票保证金
b.put("pk_oppaccount", formmainData.getString("field0103"));//付款银行账号
//汇票保证金摘要格式{保证金金额}元汇票{保证金比例}{票号前8-后8}
String bzjTemplate = "{}元汇票{}{}保证金(票号{}-{}";
BigDecimal field0095 = Convert.toBigDecimal(formmainData.getBigDecimal("field0095"),BigDecimal.ZERO);
BigDecimal multiply = field0095.multiply(BigDecimal.valueOf(100));
BigDecimal proportion = multiply.setScale(0, BigDecimal.ROUND_HALF_UP);
String je = Convert.toStr(formmainData.getString("field0096"),"");
String bzjMemo = StrUtil.format(bzjTemplate,je,proportion,"%","","");
b.put("memo",bzjMemo);
}
b.put("creationtime", DateUtil.now());//创建时间
b.put("direction", "-1");//方向 :1=;-1=;
b.put("objecttype", "0");//交易类型0=客户;1=供应商;2=部门;3=人员;4=散户; 总部结算单固定写客户
b.put("pk_oppaccount", formmainData.getString("field0041"));//付款银行账号
//b.put("pk_supplier", formmainData.getString("field0065"));//这里传项目部的编码是在和项目部做结算
b.put("pk_account", item.getString("field0099"));//对方银行账号 指的是付款结算单的收款银行账户
body.add(b);
@ -267,8 +294,12 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
String billmaker = headers.getString("billmaker");
boolean falg = true;
//付款明细行,每一行都生成一张NCC付款单
//过滤一下有单号的不推兼容第一次推送时部分失败 后续要重试的场景
forsonDataList = forsonDataList.stream()
.filter(f -> StrUtil.isEmpty(f.getString("field0100")))
.collect(Collectors.toList());
for (int i = 0; i < forsonDataList.size(); i++) {
if (falg){
//if (falg){
JSONObject forson = forsonDataList.get(i);
String req = payBillValueOf(datasourceCode, formmainData, forsonDataList, billmaker, forson);
String access_token = getAccessToken();
@ -285,24 +316,24 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
//解析返回结果 并把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) {
//结算方式编码 10备用金20开票21背书3网银
String balaTypeCode = formmainData.getString("field0076");
String orgCode = formmainData.getString("field0053");
BigDecimal totalMoney = BigDecimal.ZERO;
JSONObject head = new JSONObject();
head.put("pk_org", forson.getString("field0065"));//财务组织编码
head.put("pk_tradetype", "D3");//交易类型编码
head.put("billdate", formmainData.getString("field0004"));//制单日期
head.put("billdate", formmainData.getString("field0102"));//制单日期
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("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", totalMoney);//原币金额
head.put("rate", "1");//组织本币汇率
@ -335,6 +366,20 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
head.put("ratedate", "");//组织汇率来源日期
head.put("def1", formmainData.getString("field0083"));//账户属性
head.put("def2", formmainData.getString("field0001"));//OA单据号
//如果是保证金
if ("10".equals(balaTypeCode)){
//如果是总部代付现金账户用项目部自己的
if ("002".equals(orgCode)){
head.put("ap_cashaccount", forson.getString("field0108"));//现金银行账户
}else {
head.put("ap_cashaccount", formmainData.getString("field0078"));//现金银行账户
}
//如果传了现金账户则付款账户不传否则会报错
head.put("ap_payaccount", null);//付款银行账户
//取表头的业务员编码
head.put("pk_dept", formmainData.getString("field0057"));//部门编码
head.put("pk_psndoc", formmainData.getString("field0056"));//业务员编码
}
List<JSONObject> itemList = new LinkedList<>();
//付款申请单号
@ -350,7 +395,7 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
} 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)
.filter(c -> new BigDecimal(c.getField0066()).compareTo(BigDecimal.ZERO) != 0)
.collect(Collectors.toList());
}
@ -371,8 +416,21 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
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"));//业务员编码往来对象选择业务员时必输
//备用金支付,取表头的
if (!"10".equals(balaTypeCode)){
payApplyJson.put("pk_dept", payApply.getField0076());//部门编码
payApplyJson.put("pk_psndoc",payApply.getField0077());//业务员编码
payApplyJson.put("ap_payaccount", formmainData.getString("field0089"));//这里有传付款银行子户pk
}else {
payApplyJson.put("pk_dept", formmainData.getString("field0057"));//部门编码
payApplyJson.put("pk_psndoc", formmainData.getString("field0056"));//业务员编码
//如果是总部代付现金账户用项目部自己的
if ("002".equals(orgCode)){
payApplyJson.put("cashaccount", forson.getString("field0108"));//现金银行账户
}else {
payApplyJson.put("cashaccount", formmainData.getString("field0078"));//现金银行账户
}
}
payApplyJson.put("pk_recpaytype", forson.getString("field0031"));//付款业务类型名称
payApplyJson.put("pk_currtype", payApply.getField0051());//币种编码
payApplyJson.put("money_de", money);//贷方原币金额
@ -385,7 +443,7 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
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("local_tax_de", "");//税额
payApplyJson.put("notax_de", "");//贷方无税金额
@ -578,18 +636,26 @@ public class PaybillPluginServiceImpl implements IPaybillPluginService {
}
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);
}
}
String bzjTemplate = "{}元汇票{}{}(票号{}-{}";
//String bzjTemplate = "{保证金金额}元汇票{保证金比例}{}票号{前8}-{后8}";
BigDecimal field0095 = Convert.toBigDecimal("0.30",BigDecimal.ZERO);
BigDecimal multiply = field0095.multiply(BigDecimal.valueOf(100));
BigDecimal proportion = multiply.setScale(0, BigDecimal.ROUND_HALF_UP);
String bzjMemo = StrUtil.format(bzjTemplate,"990",proportion,"%","","");
System.out.println(bzjMemo);
//代付的摘要格式总部{支付方式}代付{供应商}{合同号}合同采购材料款项目部票号前8-后8
String template = "总部{}代付{}{}合同采购材料款,({}),票号{}-{}";
String jsfs = "汇票";
JSONObject formmainData = new JSONObject();
formmainData.put("field0015","河南申矿机械设备有限公司");
JSONObject b = new JSONObject();
b.put("field0080","CD20250718666");
b.put("field0027","河南中原项目");
String supName = Convert.toStr(formmainData.getString("field0015"),"");
String orderNo = Convert.toStr(b.getString("field0080"),"");
String orgName = Convert.toStr(b.getString("field0027"),"");
String memo = StrUtil.format(template,jsfs,supName,orderNo,orgName,"","");
System.out.println(memo);
}
}