材料类付款
This commit is contained in:
parent
9e8bd2ac68
commit
9080c6c24e
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue