12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091 |
- package fi.cas.opplugin;
- import com.google.gson.Gson;
- import com.kingdee.bos.Context;
- import com.kingdee.bos.json.JSONUtils;
- import com.kingdee.bos.json.Kson;
- import json.JSON;
- import kd.bos.dataentity.entity.DynamicObject;
- import kd.bos.dataentity.entity.DynamicObjectCollection;
- import kd.bos.entity.EntityMetadataCache;
- import kd.bos.logging.Log;
- import kd.bos.logging.LogFactory;
- import kd.bos.orm.query.QFilter;
- import kd.bos.servicehelper.BusinessDataServiceHelper;
- import java.io.*;
- import java.math.RoundingMode;
- import java.net.Socket;
- import java.sql.Timestamp;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- import kd.bos.servicehelper.operation.OperationServiceHelper;
- import kd.bos.servicehelper.operation.SaveServiceHelper;
- import org.json.JSONArray;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.json.JSONObject;
- import org.json.XML;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.transform.OutputKeys;
- import javax.xml.transform.Transformer;
- import javax.xml.transform.TransformerFactory;
- import javax.xml.transform.dom.DOMSource;
- import javax.xml.transform.stream.StreamResult;
- public class PayBillToolUtil {
- public static final String ENTITY_NAME = "cas_paybill";
- public static final String AGENT_ENTITY_NAME = "cas_agentpaybill";
- protected static final Log log = LogFactory.getLog(PayBillToolUtil.class);
- public static final String CHANNELCODE_PILIANG="JF";
- /**
- * 对账接口
- * @return
- */
- public static String payDayCheckRequest(String begindzrq,String enddzrq) {
- try {
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
- Document doc = dBuilder.newDocument();
- Element rootElement = doc.createElement("Message");
- doc.appendChild(rootElement);
- Element body = doc.createElement("Body");
- rootElement.appendChild(body);
- createElement(doc, body, "transcode", "BTSMO013");
- createElement(doc, body, "channelcode", "JF");//发起渠道
- createElement(doc, body, "checkstadate", begindzrq);//对账开始日期
- createElement(doc, body, "checkenddate", enddzrq);//对账结束日期
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- // 指定编码格式为GBK
- transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- DOMSource source = new DOMSource(doc);
- StringWriter writer = new StringWriter();
- StreamResult result = new StreamResult(writer);
- transformer.transform(source, result);
- return writer.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 代发单表头支付信息查询
- * @param agentpayBillEntity
- * @return
- */
- public static String createSingleAgentPaymentRequest_5(DynamicObject agentpayBillEntity) {
- try {
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
- Document doc = dBuilder.newDocument();
- Element rootElement = doc.createElement("Message");
- doc.appendChild(rootElement);
- //agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRMSGQ");
- Element body = doc.createElement("BodyInfo");
- rootElement.appendChild(body);
- agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- // 指定编码格式为GBK
- transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- DOMSource source = new DOMSource(doc);
- StringWriter writer = new StringWriter();
- StreamResult result = new StreamResult(writer);
- transformer.transform(source, result);
- return writer.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 代发单付款请求拼接
- * @return
- */
- public static String createSingleAgentPaymentRequest_1(DynamicObject info) {
- try {
- JSONObject param = new JSONObject();
- headJson(param);
- JSONObject data = new JSONObject();
- //单据状态
- if("C".equals(info.get("billstatus"))){
- data.put("FBillStatus","12");
- }
- //EAS付款单据号
- String bbh=info.get("nckd_bbh")+"";//版本号
- data.put("ERP_INS_ID",info.getPkValue()+"-"+bbh);
- //EAS付款单据号
- data.put("ERP_PAYNO",info.get("billno")+"-"+bbh);
- //录入人
- data.put("CREATOR",info.get("creator.name").toString());
- //录入时间
- data.put("CREATE_TIME",TypeUtils.date2String(new Date(((Timestamp)info.get("modifytime")).getTime()),TypeUtils.DEFAULT_DATE_FORMAT) );
- //摘要
- data.put("REMARK",info.get("description")+"-"+info.get("billno"));
- data.put("IS_TRANSFER","0");
- //付款单位--->公司编号
- if(info.get("org")!=null){//付款单位--->公司编号
- String companyNumber = TypeUtils.nullToString(info.get("org.number"));
- data.put("PAY_CLT_NO",companyNumber);
- }
- DynamicObject payeracctbankEntity = BusinessDataServiceHelper.loadSingleFromCache(info.getDynamicObject("payeracctbank").getPkValue(), "am_accountbank");
- String payeracc = payeracctbankEntity.getString("bankaccountnumber");
- String payername = payeracctbankEntity.getString("acctname");
- //付款方账号 ---> 付款账户基础资料银行账号
- data.put("PAY_ACNT_NO",payeracc);
- //付款银行 ---> 金融机构行号编码
- data.put("PAY_CNAPS",payeracctbankEntity.get("bank.number")+"");
- data.put("PAY_DATE",TypeUtils.date2String(new Date(),TypeUtils.DEFAULT_DATE_FORMAT));//付款日期
- //付款金额
- data.put("AMOUNT",info.getBigDecimal("payamount").setScale(2, RoundingMode.DOWN).toString());
- //币别
- if("CNY".equals(info.get("currency.number"))){
- data.put("CURRENCY","BB01");
- }
- //对公
- if(!info.getBoolean("ispersonpay")){
- data.put("IS_PERSON","0");
- }else{
- data.put("IS_PERSON","1");
- }
- //加急
- if(info.getBoolean("urgentflag")){
- data.put("URGENT_FLAG","1");
- }else{
- data.put("URGENT_FLAG","0");
- }
- //用途
- data.put("PURPOSE","用途:"+info.get("nckd_usage"));
- //费用类型
- data.put("BUSS_TYPE",JSONObject.NULL);
- //付款类型,工资 997
- if("997".equals(info.get("paymenttype.number"))){
- data.put("PAY_FLAG",2);
- }else{
- data.put("PAY_FLAG","1");
- }
- //明细条数
- data.put("PAY_NUM",info.getString("count"));
- //明细数据
- JSONArray OP_ACNT_LIST = new JSONArray();
- // 获取分录数据
- DynamicObjectCollection entryList = info.getDynamicObjectCollection("entry");
- for (int i = 0; i <entryList.size() ; i++) {
- DynamicObject entry = entryList.get(i);
- JSONObject entrydata = new JSONObject();
- //明细id
- entrydata.put("ERP_PVT_ID", entry.getPkValue()+"");
- //收款方账号
- entrydata.put("RECE_ACC_NO", entry.get("payeeacctbank")+"");
- //收款方户名
- entrydata.put("RECE_ACC_NAME", entry.get("payeename")+"");
- //收款行行号
- entrydata.put("RECE_CNAPS",entry.get("payeebanknumber")+"");
- //付款金额,待补充
- entrydata.put("AMOUNT", entry.getBigDecimal("e_amount").setScale(2, RoundingMode.DOWN).toString());
- //明细用途
- entrydata.put("PURPOSE","用途:"+info.get("nckd_usage"));
- OP_ACNT_LIST.put(entrydata);
- }
- data.put("OP_ACNT_LIST",OP_ACNT_LIST);
- //无用字段
- data.put("CLT_NO",JSONObject.NULL);
- data.put("PAY_ACNT_NAME",JSONObject.NULL);
- data.put("PAY_BANK",JSONObject.NULL);
- data.put("CASHAMOUNT",JSONObject.NULL);
- data.put("BILLAMOUNT",JSONObject.NULL);
- data.put("RECE_ACC_NO",JSONObject.NULL);
- data.put("RECE_ACC_NAME",JSONObject.NULL);
- data.put("RECE_OPBANK_NAME",JSONObject.NULL);
- data.put("RECE_OPBANK_NAME",JSONObject.NULL);
- data.put("RECE_BANK_NO",JSONObject.NULL);
- data.put("RECE_CNAPS",JSONObject.NULL);
- data.put("REG_NO",JSONObject.NULL);
- data.put("TERM",JSONObject.NULL);
- param.put("data",data);
- param.put("txDateTime",Utils.getData(new Date(), "yyyyMMddHHmmss"));
- param.put("batchNo",TypeUtils.nullToString(info.get("billno"))+"-"+TypeUtils.nullToString(info.get("nckd_bbh"))+"-"+Utils.getData(new Date(), "yyyyMMddHHmmss"));
- param.put("code","NSTC-T003");
- return param.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- public static void agentPaymentXMLBody_Msg(DynamicObject agentpayBillEntity,Document doc,Element body) {
- DynamicObject payeracctbankEntity = BusinessDataServiceHelper.loadSingleFromCache(agentpayBillEntity.getDynamicObject("payeracctbank").getPkValue(), "am_accountbank");
- String payeracc = payeracctbankEntity.getString("bankaccountnumber");
- String payername = payeracctbankEntity.getString("acctname");
- String jgh = payeracctbankEntity.getString("nckd_jgh");
- if("".equals(jgh)){
- jgh = "791100";
- }
- String filename=agentpayBillEntity.getString("nckd_filename");
- if("".equals(filename)){
- filename = agentpayBillEntity.getString("billNo");
- }
- filename=jgh+filename;//机构号
- createElement(doc, body, "FileName",filename );//文件名称
- createElement(doc, body, "FileType","01" );//文件类型
- //付款账号
- createElement(doc, body, "OutRichNbr", payeracc);//出款户口号
- createElement(doc, body, "HrSignNbr", agentpayBillEntity.getString("billno"));//人力流水号
- createElement(doc, body, "CcyNbr", "156");//币种,写死人名币
- createElement(doc, body, "CcyType", "0");//币种,写死人名币
- createElement(doc, body, "TotalNum", agentpayBillEntity.getString("count"));//汇总笔数
- createElement(doc, body, "TotalAmt", agentpayBillEntity.getBigDecimal("payamount").setScale(2, RoundingMode.DOWN).toString());//汇总金额
- createElement(doc, body, "FeeFlag", "0");//收费标志
- createElement(doc, body, "RichNbr", payeracc);
- createElement(doc, body, "FundType", "7");
- createElement(doc, body, "RichName", payername);
- createElement(doc, body, "QryBrnNbr", jgh);
- }
- public static void agentPaymentXMLBody_Entry(DynamicObject agentpayBillEntity,Document doc,Element body) {
- // 获取分录数据
- DynamicObjectCollection entryList = agentpayBillEntity.getDynamicObjectCollection("entry");
- for (int i = 0; i <entryList.size() ; i++) {
- DynamicObject entry = entryList.get(i);
- Element achrapaydtl_i = doc.createElement("achrpaydtl_i"); // 每条数据用一个achrapaydtl_i元素包裹
- body.appendChild(achrapaydtl_i);
- createElement(doc, achrapaydtl_i, "IdenNbr", entry.getString("nckd_zjh"));//证件号
- createElement(doc, achrapaydtl_i, "InRichNbr", entry.getString("payeeacctbank"));//收款户口号
- createElement(doc, achrapaydtl_i, "PayAmt", entry.getBigDecimal("entryunmatchamount").setScale(2, RoundingMode.DOWN).toString());//支付金额
- createElement(doc, achrapaydtl_i, "CurContentSeq", i+1+"");//展示条数
- createElement(doc, achrapaydtl_i, "RowCnt", "10000");//展示条数
- }
- }
- public static void agentPaymentXMLBody_Entry_chongfa(DynamicObject agentpayBillEntity,Document doc,Element body) {
- // 获取分录数据
- DynamicObjectCollection entryList = agentpayBillEntity.getDynamicObjectCollection("entry");
- for (int i = 0; i <entryList.size() ; i++) {
- DynamicObject entry = entryList.get(i);
- if("true".equals(entry.get("e_issuccess")+"")){
- continue;
- }
- Element achrapaydtl_i = doc.createElement("achrpaydtl_i"); // 每条数据用一个achrapaydtl_i元素包裹
- body.appendChild(achrapaydtl_i);
- createElement(doc, achrapaydtl_i, "IdenNbr", entry.getString("nckd_zjh"));//证件号
- createElement(doc, achrapaydtl_i, "InRichNbr", entry.getString("payeeacctbank"));//收款户口号
- createElement(doc, achrapaydtl_i, "PayAmt", entry.getBigDecimal("entryunmatchamount").setScale(2, RoundingMode.DOWN).toString());//支付金额
- createElement(doc, achrapaydtl_i, "CurContentSeq", i+1+"");//展示条数
- createElement(doc, achrapaydtl_i, "RowCnt", "10000");//展示条数
- }
- }
- public static void agentPaymentXMLBody_EntryQuery(DynamicObject agentpayBillEntity,String filename,Document doc,Element body,String CurContentSeq) {
- createElement(doc, body, "IdenNbr", "");//证件号
- createElement(doc, body, "InRichNbr","");//收款户口号
- createElement(doc, body, "PayAmt", "");//支付金额
- createElement(doc, body, "QryFileName",filename );//文件名称
- if(CurContentSeq==null||"".equals(CurContentSeq)){
- }else{
- createElement(doc, body, "CurContentSeq",CurContentSeq);//xuhao
- }
- createElement(doc, body, "RowCnt", "100");//展示条数
- createElement(doc, body, "GoHead","Y" );//文件名称
- }
- /***
- * 拼接json对象
- */
- public static JSONObject getServiceBean_youhua( DynamicObject info) {
- JSONObject data = new JSONObject();
- //单据状态
- if("C".equals(info.get("billstatus"))){
- data.put("FBillStatus","12");
- }
- //录入人
- data.put("CREATOR",info.get("creator.name").toString());
- //录入时间
- data.put("CREATE_TIME",TypeUtils.date2String(new Date(((Timestamp)info.get("modifytime")).getTime()),TypeUtils.DEFAULT_DATE_FORMAT) );
- //摘要
- data.put("REMARK",info.get("description")+"-"+info.get("billno"));
- String entrance = info.get("entrance")+"";//是否资金调度,待补充
- if("SYN".equals(entrance)||"SPAN".equals(entrance)){
- data.put("IS_TRANSFER","1");
- }else{
- data.put("IS_TRANSFER","0");
- }
- data.put("IS_TRANSFER","0");
- String bbh=info.get("nckd_bbh")+"";//版本号
- data.put("ERP_INS_ID",info.getPkValue()+"-"+bbh);
- //EAS付款单据号
- data.put("ERP_PAYNO",info.get("billno")+"-"+bbh);
- //付款日期
- data.put("PAY_DATE",TypeUtils.date2String(new Date(),TypeUtils.DEFAULT_DATE_FORMAT));
- //对公
- if(!info.getBoolean("ispersonpay")){
- data.put("IS_PERSON","0");
- }else{
- data.put("IS_PERSON","1");
- }
- //加急
- if(info.get("priority")!=null){
- if("prior".equals(info.get("priority"))){//优先
- data.put("URGENT_FLAG","1");
- }else{
- data.put("URGENT_FLAG","0");
- }
- }
- data.put("PURPOSE","用途:"+info.get("nckd_usage"));
- //费用类型,取分录第一条费用项目编码
- DynamicObjectCollection entrycoll = info.getDynamicObjectCollection("entry");
- if(entrycoll.size()>0){
- if(entrycoll.get(0).get("e_expenseitem.number")==null){
- data.put("BUSS_TYPE","");
- }else{
- data.put("BUSS_TYPE",entrycoll.get(0).get("e_expenseitem.number")+"");
- }
- }
- DynamicObject skyhinfo = BusinessDataServiceHelper.loadSingleFromCache(info.getDynamicObject("payeebank").getPkValue(), "bd_bebank");
- //收款方开户行 名称
- data.put("RECE_OPBANK_NAME",skyhinfo.get("name").toString());//收款方开户行 名称
- //收款方开户行 CNAPS号 ,行号
- data.put("RECE_CNAPS",skyhinfo.get("number")+"");
- //收款方户名
- data.put("RECE_ACC_NAME",info.get("recaccbankname")+"");
- //收款方账号
- data.put("RECE_ACC_NO",info.get("payeebanknum")+"");
- //付款单位--->公司编号
- if(info.get("org")!=null){//付款单位--->公司编号
- String companyNumber = TypeUtils.nullToString(info.get("org.number"));
- data.put("PAY_CLT_NO",companyNumber);
- }
- //付款账号
- DynamicObject payeracctbankEntity = BusinessDataServiceHelper.loadSingle(info.getDynamicObject("payeracctbank").getPkValue(), "am_accountbank");
- String payeracc = payeracctbankEntity.getString("bankaccountnumber");
- String payername = payeracctbankEntity.getString("acctname");
- //付款方账号 ---> 付款账户基础资料银行账号
- data.put("PAY_ACNT_NO",payeracc);
- //付款银行 ---> 金融机构行号编码,是不是就是金融机构编码
- data.put("PAY_CNAPS",payeracctbankEntity.get("bank.number")+"");
- data.put("AMOUNT",info.getBigDecimal("actpayamt").setScale(2, RoundingMode.DOWN));
- //币别
- if("CNY".equals(info.get("currency.number"))){
- data.put("CURRENCY","BB01");
- }
- //无用字段
- data.put("CLT_NO",JSONObject.NULL);
- data.put("PAY_ACNT_NAME",JSONObject.NULL);
- data.put("PAY_BANK",JSONObject.NULL);
- data.put("CASHAMOUNT",JSONObject.NULL);
- data.put("BILLAMOUNT",JSONObject.NULL);
- data.put("RECE_BANK_NO",JSONObject.NULL);
- data.put("REG_NO",JSONObject.NULL);
- data.put("TERM",JSONObject.NULL);
- data.put("PAY_FLAG",JSONObject.NULL);
- data.put("PAY_NUM","0");
- data.put("OP_ACNT_LIST",JSONObject.NULL);
- //应付票据逻辑,不需要付息方式了
- // if ("012".equals(info.get("settletype.number"))) { // 012 应付票据(银行承兑汇票)
- // DynamicObject payInterest =info.getDynamicObject("payInterest");
- // if (payInterest != null) {
- // paymentBill.setPAY_INTEREST(payInterest.get("number")+"");
- // }
- // }
- return data;
- }
- public static String createSinglePaymentRequest(DynamicObject payBillEntity,String JKNO) {
- try {
- JSONObject param = new JSONObject();
- headJson(param);
- JSONObject datainfo=getServiceBean_youhua( payBillEntity);
- param.put("data",datainfo);
- param.put("txDateTime",Utils.getData(new Date(), "yyyyMMddHHmmss"));
- param.put("batchNo",TypeUtils.nullToString(payBillEntity.get("billno"))+"-"+TypeUtils.nullToString(payBillEntity.get("nckd_bbh"))+"-"+Utils.getData(new Date(), "yyyyMMddHHmmss"));
- param.put("code",JKNO);
- String text = param.toString();
- return text;
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- public static void headJson(JSONObject param){
- param.put("nodeId","client.001");
- param.put("channelId","EAS");
- param.put("clientId","001");
- param.put("clientName","金蝶");
- }
- private static void createElement(Document doc, Element parent, String name, String value) {
- Element element = doc.createElement(name);
- element.appendChild(doc.createTextNode(value));
- parent.appendChild(element);
- }
- /**
- * 代发单支付
- * @params billEntities
- * @returns 返回报错信息
- *
- */
- public static String agentpayBillForCBSSync(DynamicObject[] billEntities) {
- StringBuffer errMsg = new StringBuffer();
- //获取接口链接等信息
- DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytoJHX")});
- String url = jkpzxx.getString("nckd_servername");
- for (DynamicObject dataEntity : billEntities) {
- boolean isSuccess = false;//是否成功标识
- boolean isZFQZ = true;
- Map<String, String> qzObject = new HashMap<>();
- DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), AGENT_ENTITY_NAME);
- /**
- * 判断是否可以走前置支付
- * 1、代发单为审核状态
- * 2、支付状态为未支付
- */
- String billNum = payBillEntity.getString("billno");
- String billstatusString = payBillEntity.getString("billstatus");
- String paystatus = payBillEntity.getString("nckd_paystatus");
- int bbh = payBillEntity.getInt("nckd_bbh");
- int fkcs = payBillEntity.getInt("nckd_fkcs");
- if (!"C".equals(billstatusString)) {
- errMsg.append("单据号:").append(billNum).append(",代发单为审核状态,才能提交~\r\n");
- isZFQZ = false;
- }
- if (!"1".equals(paystatus) && !"".equals(paystatus)) {
- errMsg.append("单据号:").append(billNum).append(",代发单为未支付,才能提交~\r\n");
- isZFQZ = false;
- }
- if(bbh>=1 && bbh!=fkcs){
- errMsg.append("单据号:").append(billNum).append(",代发单未调整,请调整数据,或点击重付~\r\n");
- isZFQZ = false;
- }
- if(payBillEntity.getDynamicObject("payeracctbank")==null) {
- errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
- isZFQZ = false;
- }
- /***
- * 审批时校验,如果资金银企行号包含,则提交九恒星,否则不提交。待补充
- */
- //构建支付数据导入请求xml
- String qjjson = createSingleAgentPaymentRequest_1(payBillEntity);
- if(qjjson==null){
- isZFQZ = false;
- errMsg.append("单据号:").append(billNum).append("无法拼出正确的json请求~\r\n");
- }
- if(!isZFQZ){
- continue;
- }
- log.info("单据号:"+billNum+"传入参数"+qjjson);
- if("".equals(url)){
- url="http://172.16.150.71:7081/FDLKF_OUTER/webservice/TxServiceGateway";
- }
- JSONObject cbsReturnJson =httpjhxService(url,qjjson);
- log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
- //存入日志表
- saveAgentlog(payBillEntity,qjjson,cbsReturnJson.toString(),"1");
- if(cbsReturnJson==null){
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",推送资金系统失败,");
- errMsg.append("错误号:").append("XXXXXXX");
- errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
- errMsg.append("\r\n");
- }else if(!"000000".equals(cbsReturnJson.get("resultCode"))){
- isSuccess = false;
- cbsReturnJson.get("resultCode");
- String resultMsg = cbsReturnJson.get("resultMsg")+"";
- if(resultMsg.indexOf("单据是非驳回状态")>=0||resultMsg.indexOf("付款指令重复")>=0){//指令重复,说明已经传过去了,改状态为支付中,查询结果
- isSuccess = true;
- errMsg.append("单据号:").append(billNum).append("付款指令重复,说明已推送到资金系统!");
- payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
- payBillEntity.set("nckd_sbyy","指令重复,已推送到资金系统");//返回信息
- payBillEntity.set("nckd_paystatus",2);//支付中
- }else{ //如果不是驳回或重发,失败
- errMsg.append("单据号:").append(billNum).append(",推送资金系统失败,");
- errMsg.append("错误号:").append(cbsReturnJson.get("resultCode"));
- errMsg.append(",错误原因:").append(resultMsg);
- errMsg.append("\r\n");
- payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
- payBillEntity.set("nckd_paystatus",4);//传输失败
- payBillEntity.set("nckd_sbyy",cbsReturnJson.get("resultMsg")+"");//错误信息
- SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
- }
- }else if("000000".equals(cbsReturnJson.get("resultCode"))){//已受理,改为支付中
- String resultMsg = cbsReturnJson.get("resultMsg")+"";
- if("SUCCESS".equals(resultMsg)){
- isSuccess = true;
- errMsg.append("单据号:").append(billNum).append(",推送资金系统成功!");
- payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
- payBillEntity.set("nckd_sbyy","传输成功");//返回信息
- payBillEntity.set("nckd_paystatus",2);//支付中
- }
- }
- if (isSuccess) {
- SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
- }
- }
- return errMsg.toString();
- }
- /**
- * 支付单同步
- * @params billEntities
- * @returns 返回报错信息
- *
- */
- public static String payBillForCBSSync(DynamicObject[] billEntities) {
- StringBuffer errMsg = new StringBuffer();
- //获取接口链接等信息
- DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytoJHX")});
- String url = jkpzxx.get("nckd_servername")+"";
- for (DynamicObject dataEntity : billEntities) {
- boolean isSuccess = false;
- boolean isZFQZ = true;
- DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), ENTITY_NAME);
- /**
- * 判断是否可以走前置支付
- * 1、付款单为审核状态
- * 2、支付状态为未支付
- * 3、版本号>=1时,必须等于付款次数
- */
- String billNum = payBillEntity.getString("billno");
- String billstatusString = payBillEntity.getString("billstatus");
- String paystatus = payBillEntity.getString("nckd_paystatus");
- int bbh = payBillEntity.getInt("nckd_bbh");
- int fkcs = payBillEntity.getInt("nckd_fkcs");
- //查询流水,如果存在流水,则不能支付
- String billno = payBillEntity.get("billno")+"";
- // QFilter orgFilter = new QFilter("nckd_reserve80", "like", "%"+billno+"%");
- // DynamicObject fkclinfo = BusinessDataServiceHelper.loadSingle("bei_transdetail","",new QFilter[]{orgFilter});
- if (!"C".equals(billstatusString)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能提交~\r\n");
- isZFQZ = false;
- }
- if (!"1".equals(paystatus) && !"".equals(paystatus)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为未支付,才能提交~\r\n");
- isZFQZ = false;
- }
- if(bbh>=1 && bbh!=fkcs){
- errMsg.append("单据号:").append(billNum).append(",付款单未调整,请调整数据,或点击重付~\r\n");
- isZFQZ = false;
- }
- if(payBillEntity.getDynamicObject("payeracctbank")==null) {
- errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
- isZFQZ = false;
- }
- if(payBillEntity.getDynamicObject("payeebank")==null) {
- errMsg.append("单据号:").append(billNum).append(",收款账户为空~\r\n");
- isZFQZ = false;
- }
- //流水判断 待补充
- // if(fkclinfo!=null && isZFQZ) {
- // errMsg.append("单据号:").append(billNum).append(",已存在支付流水,为防止重复付款,无法提交。请联系运维核查数据\r\n");
- // isZFQZ = false;
- // }
- //是否资金调度逻辑,用新增入口
- boolean IS_TRANSFER=false;//判断是否资金调度
- String entrance = payBillEntity.get("entrance")+"";
- if("SYN".equals(entrance)||"SPAN".equals(entrance)){
- IS_TRANSFER = true;
- }
- // if(IS_TRANSFER){
- // isZFQZ = false;
- // errMsg.append("单据号:").append(billNum).append(",跨主体调拨或者同名转账~\r\n");
- // }
- /***
- * 根据付款单结算方式,结算方式类似承兑的调用资金的票据接口,结算方式为其他的调用资金的对外付款接口
- */
- String JKNO="";
- String settletype = payBillEntity.get("settletype.number")+"";
- if(settletype!=null&&!"".equals(settletype)){
- if(settletype.equals("BILL")){//票据
- JKNO="NSTC-T002";
- }else{
- JKNO="NSTC-T001";
- }
- }else{
- isZFQZ = false;
- errMsg.append("单据号:").append(billNum).append(",结算方式为空~\r\n");
- }
- //付款单审批时校验未上线银行基础数据资料表,待补充
- /***
- * 审批时校验,如果资金银企行号包含,则提交九恒星,否则不提交。
- */
- String qjjson="";
- if(isZFQZ) {
- //构建请求对象
- qjjson = createSinglePaymentRequest(payBillEntity, JKNO);
- if (qjjson == null) {
- isZFQZ = false;
- errMsg.append("单据号:").append(billNum).append(",无法拼出正确的json请求~\r\n");
- }
- }
- if(!isZFQZ){
- continue;
- }
- //qjjson = "{\"code\":\"NSTC-T001\",\"batchNo\":\"PV-202504-000041-0-20250427106427\",\"nodeId\":\"client.001\",\"channelId\":\"EAS\",\"clientId\":\"001\",\"clientName\":\"金蝶\",\"txDateTime\":\"20250425175615\",\"data\":{\"ERP_INS_ID\":\""+billNum+"-"+bbh+"\",\"PAY_CLT_NO\":\"A004\",\"CLT_NO\":null,\"PAY_ACNT_NO\":\"824581178610001\",\"PAY_ACNT_NAME\":null,\"PAY_BANK\":null,\"PAY_CNAPS\":\"308421022063\",\"PAY_DATE\":\"2025-04-25\",\"AMOUNT\":3234,\"CASHAMOUNT\":null,\"BILLAMOUNT\":null,\"CURRENCY\":\"BB01\",\"BUSS_TYPE\":null,\"RECE_ACC_NO\":\"1\",\"RECE_ACC_NAME\":\"1\",\"RECE_OPBANK_NAME\":\"非税缴款\",\"RECE_BANK_NO\":null,\"RECE_CNAPS\":\"001100000001\",\"REG_NO\":null,\"IS_PERSON\":\"0\",\"URGENT_FLAG\":\"0\",\"PURPOSE\":\"用途\",\"REMARK\":\"缴款码(XXX)\",\"CREATOR\":\"张清全\",\"CREATE_TIME\":\"2025-04-25\",\"ERP_PAYNO\":\"PV-202504-000041-0\",\"TERM\":null,\"IS_TRANSFER\":\"0\",\"PAY_FLAG\":null,\"FBillStatus\":12,\"PAY_NUM\":0,\"OP_ACNT_LIST\":null}}";
- log.info("单据号:"+billNum+"传入参数"+qjjson);
- if("".equals(url)){
- url="http://172.16.150.71:7081/FDLKF_OUTER/webservice/TxServiceGateway";
- }
- JSONObject cbsReturnJson =httpjhxService(url,qjjson);
- log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
- //存入日志表
- savelog(payBillEntity,qjjson,cbsReturnJson.toString());
- if(cbsReturnJson==null){
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",推送资金系统失败,");
- errMsg.append("错误号:").append("XXXXXXX");
- errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
- errMsg.append("\r\n");
- }else if(!"000000".equals(cbsReturnJson.get("resultCode"))){
- isSuccess = false;
- cbsReturnJson.get("resultCode");
- String resultMsg = cbsReturnJson.get("resultMsg")+"";
- if(resultMsg.indexOf("单据是非驳回状态")>=0||resultMsg.indexOf("付款指令重复")>=0){//指令重复,说明已经传过去了,改状态为支付中,查询结果
- isSuccess = true;
- errMsg.append("单据号:").append(billNum).append("付款指令重复,说明已推送到资金系统!");
- payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
- payBillEntity.set("nckd_sbyy","指令重复,已推送到资金系统");//返回信息
- payBillEntity.set("nckd_paystatus",2);//支付中
- }else{ //如果不是驳回或重发,失败
- errMsg.append("单据号:").append(billNum).append(",推送资金系统失败,");
- errMsg.append("错误号:").append(cbsReturnJson.get("resultCode"));
- errMsg.append(",错误原因:").append(resultMsg);
- errMsg.append("\r\n");
- payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
- payBillEntity.set("nckd_paystatus",4);//传输失败
- payBillEntity.set("nckd_sbyy",cbsReturnJson.get("resultMsg")+"");//错误信息
- SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
- }
- }else if("000000".equals(cbsReturnJson.get("resultCode"))){//已受理,改为支付中
- String resultMsg = cbsReturnJson.get("resultMsg")+"";
- if("SUCCESS".equals(resultMsg)){
- isSuccess = true;
- errMsg.append("单据号:").append(billNum).append(",推送资金系统成功!");
- payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
- payBillEntity.set("nckd_sbyy","传输成功");//返回信息
- payBillEntity.set("nckd_paystatus",2);//支付中
- }
- }
- if (isSuccess) {
- SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
- }
- }
- return errMsg.toString();
- }
- public static void saveAgentlog(DynamicObject payBillEntity,String qqbw,String fhbw,String type){
- try {
- DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_dfjkdyrz"));
- String channelserno = payBillEntity.getString("billno");
- logInfo.set("number",channelserno);
- if("1".equals(type)){
- logInfo.set("name",payBillEntity.get("billno")+"支付数据传输日志");
- }else if("6".equals(type)){
- logInfo.set("name",payBillEntity.get("billno")+"代发单支付信息查询日志");
- }
- logInfo.set("nckd_jklx",type);
- logInfo.set("status","A");
- logInfo.set("enable","1");
- Calendar currentdate = Calendar.getInstance();
- logInfo.set("nckd_redate",currentdate.getTime());
- logInfo.set("nckd_billno",payBillEntity.get("billno"));
- logInfo.set("nckd_payid",payBillEntity.getPkValue()+"");
- logInfo.set("nckd_qqbw_tag",qqbw);
- logInfo.set("nckd_fhbw_tag",fhbw);
- logInfo.set("nckd_redate",new Date());
- logInfo.set("nckd_djlx","2");
- OperationServiceHelper.executeOperate("save","nckd_zfjkdyrz",new DynamicObject[]{logInfo});
- }catch (Exception e){
- log.info("保存日志报错"+e.getMessage());
- }
- }
- public static void savePayDayChecklog(String qqbw,String fhbw){
- try {
- DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_paydaycheck"));
- Calendar currentdate = Calendar.getInstance();
- String enddzrq = TypeUtils.date2String(currentdate.getTime(),"yyyy-MM-dd HH:mm:ss");
- logInfo.set("number",enddzrq);
- logInfo.set("name",enddzrq+"付款日结查询日志");
- logInfo.set("status","A");
- logInfo.set("enable","1");
- logInfo.set("nckd_qqbw_tag",qqbw);
- logInfo.set("nckd_fhbw_tag",fhbw);
- OperationServiceHelper.executeOperate("save","nckd_paydaycheck",new DynamicObject[]{logInfo});
- }catch (Exception e){
- log.info("保存日志报错"+e.getMessage());
- }
- }
- public static void savelog(DynamicObject payBillEntity,String qqbw,String fhbw){
- try {
- DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_zfjkdyrz"));
- String channelserno = payBillEntity.get("billno")+"-"+payBillEntity.getInt("nckd_bbh");
- logInfo.set("number",channelserno);
- logInfo.set("name",payBillEntity.get("billno")+"付款日志");
- logInfo.set("status","A");
- logInfo.set("enable","1");
- Calendar currentdate = Calendar.getInstance();
- logInfo.set("nckd_redate",currentdate.getTime());
- logInfo.set("nckd_billno",payBillEntity.get("billno"));
- logInfo.set("nckd_payid",payBillEntity.getPkValue()+"");
- logInfo.set("nckd_qqbw_tag",qqbw);
- logInfo.set("nckd_fhbw_tag",fhbw);
- logInfo.set("nckd_redate",new Date());
- logInfo.set("nckd_djlx","1");
- OperationServiceHelper.executeOperate("save","nckd_zfjkdyrz",new DynamicObject[]{logInfo});
- }catch (Exception e){
- log.info("保存日志报错"+e.getMessage());
- }
- }
- public static void saveupdatelog(DynamicObject payBillEntity,String qqbw,String fhbw){
- try {
- DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_zfcxjkrz"));
- String channelserno = payBillEntity.get("billno")+"-"+payBillEntity.getInt("nckd_bbh");
- logInfo.set("number",channelserno);
- logInfo.set("name",payBillEntity.get("billno")+"查询状态日志");
- logInfo.set("status","A");
- logInfo.set("enable","1");
- Calendar currentdate = Calendar.getInstance();
- logInfo.set("nckd_redate",currentdate.getTime());
- logInfo.set("nckd_billno",payBillEntity.get("billno"));
- logInfo.set("nckd_payid",payBillEntity.getPkValue()+"");
- logInfo.set("nckd_qqbw_tag",qqbw);
- logInfo.set("nckd_fhbw_tag",fhbw);
- logInfo.set("nckd_redate",new Date());
- logInfo.set("nckd_djlx","1");
- OperationServiceHelper.executeOperate("save","nckd_zfcxjkrz",new DynamicObject[]{logInfo});
- }catch (Exception e){
- log.info("保存日志报错"+e.getMessage());
- }
- }
- public static JSONObject httpjhxService(String url,String qjjson){
- String result ="";
- try {
- Date d1 = new Date();
- TxServiceGatewayProxy txServiceGatewayProxy=new TxServiceGatewayProxy("",url);
- result = txServiceGatewayProxy.send(qjjson);
- Date d2 = new Date();
- long diffs = Math.abs(d2.getTime()-d1.getTime())/1000;
- JSONObject jsonObject=new JSONObject(result);
- if(jsonObject!=null){
- if("{}".equals(jsonObject.toString())||"".equals(result)){
- if(diffs>60){//超时
- jsonObject.put("resultCode","JFXXXXC");
- jsonObject.put("resultMsg","超时");
- }
- }
- jsonObject.put("请求时间",TypeUtils.date2String(d1,TypeUtils.DEFAULT_TIMESTAMP_FORMAT));
- jsonObject.put("返回时间",TypeUtils.date2String(d2,TypeUtils.DEFAULT_TIMESTAMP_FORMAT));
- jsonObject.put("响应时长",diffs+"");
- }
- return jsonObject;
- } catch (IOException e) {
- e.printStackTrace();
- log.info(e.getMessage());
- }
- return null;
- }
- public static JSONObject JHXServiceQuery(String url,String bodyjson){
- try {
- Date d1 = new Date();
- TxServiceGatewayProxy txServiceGatewayProxy=new TxServiceGatewayProxy("",url);
- String result=txServiceGatewayProxy.send(bodyjson);
- Date d2 = new Date();
- long diffs = Math.abs(d2.getTime()-d1.getTime())/1000;
- JSONObject jsonObject =new JSONObject(result);
- if(jsonObject!=null||"".equals(result)||result==null){
- if("{}".equals(jsonObject.toString())){
- if(diffs>60){//超时
- jsonObject.put("resultCode","JFXXXXC");
- jsonObject.put("resultMsg","超时");
- }
- }
- jsonObject.put("请求时间",TypeUtils.date2String(d1,TypeUtils.DEFAULT_TIMESTAMP_FORMAT));
- jsonObject.put("返回时间",TypeUtils.date2String(d2,TypeUtils.DEFAULT_TIMESTAMP_FORMAT));
- jsonObject.put("响应时长",diffs+"");
- }
- return jsonObject;
- } catch (IOException e) {
- e.printStackTrace();
- log.info(e.getMessage());
- }
- return null;
- }
- public static JSONObject socketServiceAgent(String serverName,String port,String xmlData,String transcode){
- try {
- Date d1 = new Date();
- Socket client = new Socket(serverName,TypeUtils.nullToInt(port));
- int messageLength = xmlData.getBytes("GBK").length;
- String header = String.format("%08d", messageLength);
- String fullMessage = header + xmlData;
- OutputStream outToServer = client.getOutputStream();
- PrintWriter out = new PrintWriter(new OutputStreamWriter(outToServer, "GBK"), true);
- out.println(fullMessage);
- InputStream inFromServer = client.getInputStream();
- BufferedReader in = new BufferedReader(new InputStreamReader(inFromServer, "GBK"));
- StringBuilder responseBuilder = new StringBuilder();
- String line;
- while ((line = in.readLine()) != null) {
- responseBuilder.append(line);
- }
- String responseJson = responseBuilder.toString();
- if(responseJson.indexOf("<?xml")>0){
- int index = responseJson.indexOf("<?xml");
- responseJson = responseJson.substring(index);
- }
- Date d2 = new Date();
- long diffs = Math.abs(d2.getTime()-d1.getTime())/1000;
- JSONObject jsonObject = XML.toJSONObject(responseJson);
- if(jsonObject!=null){
- if("{}".equals(jsonObject.toString())){
- if(diffs>50){//超时
- JSONObject Message = new JSONObject();
- JSONObject HeadInfo = new JSONObject();
- HeadInfo.put("errorcode","JFXXXXC");
- HeadInfo.put("errormsg","超时");
- Message.put("HeadInfo",HeadInfo);
- jsonObject.put("Message",Message);
- }
- }
- jsonObject.put("请求时间",TypeUtils.date2String(d1,TypeUtils.DEFAULT_TIMESTAMP_FORMAT));
- jsonObject.put("返回时间",TypeUtils.date2String(d2,TypeUtils.DEFAULT_TIMESTAMP_FORMAT));
- jsonObject.put("响应时长",diffs+"");
- }
- client.close();
- return jsonObject;
- } catch (IOException e) {
- e.printStackTrace();
- log.info(e.getMessage());
- }
- return null;
- }
- }
|