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 index 5666175e..c49626f2 100644 --- 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 @@ -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 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 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); } }