package fi.cas.task; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; import fi.cas.opplugin.PayBillToolUtil; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.exception.KDException; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.schedule.executor.AbstractTask; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import org.json.JSONArray; import org.json.JSONObject; import java.util.HashMap; import java.util.Map; /** * 定时任务调用查询表头状态接口。如果是R。查询次数5以内,则查询次数加一。5以上,清空查询次数,改核心状态为支付处理失败D, * 记录处理失败原因。非R,更新表头核心状态,调用查询分录接口,更新分录支付状态,表头状态会改为B部分成功或Q全部成功 */ public class AgentPayQueryStatusTast extends AbstractTask { private static final Log log = LogFactory.getLog(AgentPayQueryStatusTast.class); @Override public void execute(RequestContext requestContext, Map map) throws KDException { //获取要查询的数据。状态为已审批,支付状态为支付中。核心状态为支付信息登记成功 QFilter filter = new QFilter("billstatus", QCP.equals, "C"); filter.and("nckd_paystatus", QCP.equals, "B"); filter.and("nckd_hxzt", QCP.equals, "R"); Map payinfos = BusinessDataServiceHelper.loadFromCache("cas_agentpaybill",new QFilter[] {filter}); DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytozfqz")}); String servername = jkpzxx.getString("nckd_servername"); String port = jkpzxx.getString("nckd_port"); for (DynamicObject dataEntity : payinfos.values()) { //调用接口查询付款状态 String bodyxml = PayBillToolUtil.createSingleAgentPaymentRequest_5(dataEntity); String billNum = dataEntity.getString("billno"); log.info("单据号:"+billNum+"传入参数"+bodyxml); JSONObject cbsReturnJson =PayBillToolUtil.socketServiceAgent(servername,port,bodyxml,"ACHRMSGQ"); log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString()); //存入日志表 PayBillToolUtil.saveAgentlog(dataEntity,bodyxml,cbsReturnJson.toString(),"6"); if(cbsReturnJson==null||cbsReturnJson.get("Message")==null){ }else{ JSONObject headinfo = cbsReturnJson.getJSONObject("Message").getJSONObject("HeadInfo"); if(headinfo!=null){ String errcode =headinfo.getString("errorcode"); if ("000000".equals(errcode)) {//已查询到,不代表支付成功 JSONObject bodyInfo = cbsReturnJson.getJSONObject("Message").getJSONObject("BodyInfo"); JSONObject datainfo =null; if(bodyInfo.get("dataList") instanceof JSONObject){ datainfo = bodyInfo.getJSONObject("dataList"); }else if(bodyInfo.get("dataList") instanceof JSONArray){ datainfo = bodyInfo.getJSONArray("dataList").getJSONObject(0); } //判断是不是R String returnstatus = datainfo.getString("Status"); String payExecFlag = datainfo.getString("PayExecFlag"); if("R".equals(returnstatus)){ //判断查询次数 int nckd_hxztcxcs = dataEntity.getInt("nckd_hxztcxcs");//查询次数 if(nckd_hxztcxcs<5){//查询次数5以内,则查询次数加一 dataEntity.set("nckd_hxztcxcs",nckd_hxztcxcs++); }else{//5以上,清空查询次数,改核心状态为支付处理失败D dataEntity.set("nckd_hxztcxcs",0); dataEntity.set("nckd_hxzt","D"); dataEntity.set("nckd_hxsbyy","执行失败,请联系管理人员查看原因"); } SaveServiceHelper.update(new DynamicObject[]{dataEntity}); }else{ if("Q".equals(payExecFlag)){//全部成功,不调用分录查询,直接改为成功 dataEntity.set("nckd_hxzt","Q");//核心状态 dataEntity.set("nckd_hxsbyy","支付全部成功"); DynamicObjectCollection coll = dataEntity.getDynamicObjectCollection("entry"); for (int i = 0; i entryqueryMap = new HashMap<>(); DynamicObject payeracctbankEntity = BusinessDataServiceHelper.loadSingleFromCache(dataEntity.getDynamicObject("payeracctbank").getPkValue(), "am_accountbank"); String jgh = payeracctbankEntity.getString("nckd_jgh"); if("".equals(jgh)){ jgh = "791100"; } String filename=dataEntity.getString("nckd_filename"); if("".equals(filename)){ filename = dataEntity.getString("billNo"); } filename=jgh+filename;//机构号 String bodyxml_entryquery = PayBillToolUtil.createSingleAgentPaymentRequest_6(dataEntity,filename); log.info("单据号明细分录查询:"+billNum+"传入参数"+bodyxml_entryquery); JSONObject cbsReturnJson_entryquery =PayBillToolUtil.socketServiceAgent(servername,port,bodyxml_entryquery,"ACHRDTLQ"); log.info("单据号明细分录查询:"+billNum+"返回参数"+cbsReturnJson_entryquery.toString()); //存入日志表 PayBillToolUtil.saveAgentlog(dataEntity,bodyxml_entryquery,cbsReturnJson_entryquery.toString(),"7"); if(cbsReturnJson_entryquery==null||cbsReturnJson_entryquery.get("Message")==null){ }else{ JSONObject headinfo_entryquery = cbsReturnJson_entryquery.getJSONObject("Message").getJSONObject("HeadInfo"); if(headinfo_entryquery!=null) { String errcode_entryquery =headinfo_entryquery.getString("errorcode"); if ("000000".equals(errcode_entryquery)) {//已查询到,不代表支付成功 JSONObject bodyInfo_entryquery = cbsReturnJson_entryquery.getJSONObject("Message").getJSONObject("BodyInfo"); JSONArray datainfo_entryqueryArray =null; if( bodyInfo_entryquery.get("dataList") instanceof JSONObject){ datainfo_entryqueryArray = new JSONArray(); datainfo_entryqueryArray.put(bodyInfo_entryquery.getJSONObject("dataList")); }else if(bodyInfo_entryquery.get("dataList") instanceof JSONArray){ datainfo_entryqueryArray = bodyInfo_entryquery.getJSONArray("dataList"); } for (int i = 0; i < datainfo_entryqueryArray.length(); i++) { JSONObject datainfo_entryquery = datainfo_entryqueryArray.getJSONObject(i); String inRichNbr = datainfo_entryquery.get("InRichNbr")+""; //判断是不是成功 String returnstatus_entryquery = datainfo_entryquery.getString("Status"); if("C".equals(returnstatus_entryquery)){//成功 entryqueryMap.put(inRichNbr,new String[]{"true","成功"}); }else{//失败 String returnstatus_MsgVar = datainfo_entryquery.getString("MsgVar"); if("".equals(returnstatus_MsgVar)){ returnstatus_MsgVar="执行失败"; } entryqueryMap.put(inRichNbr,new String[]{"false",returnstatus_MsgVar}); } } } } } DynamicObjectCollection coll = dataEntity.getDynamicObjectCollection("entry"); for (int i = 0; i