package fi.cas.task; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; import fi.cas.opplugin.PayBillToolUtil; import fi.cas.opplugin.TypeUtils; import fi.cas.opplugin.Utils; 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.Date; import java.util.HashSet; import java.util.Map; import java.util.Set; public class AgentpaybillQueryStatusTast extends AbstractTask { private static final Log log = LogFactory.getLog(AgentpaybillQueryStatusTast.class); @Override public void execute(RequestContext requestContext, Map map) throws KDException { //获取要查询的数据。状态为已审批,支付状态为支付中,或支付失败。理论上只需要查支付中 QFilter filter = new QFilter("billstatus", QCP.equals, "C"); Set paystatusSet = new HashSet<>(); paystatusSet.add("2"); paystatusSet.add("6"); filter.and("nckd_paystatus", QCP.in, "2"); filter.and("nckd_fkcs", QCP.large_than, 0); Map payinfos = BusinessDataServiceHelper.loadFromCache("cas_agentpaybill", new QFilter[] {filter}); DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytoJHX")}); String url = jkpzxx.getString("nckd_servername"); for (DynamicObject dataEntity : payinfos.values()) { //调用接口查询付款状态 JSONObject param = new JSONObject(); PayBillToolUtil.headJson(param); JSONObject data = new JSONObject(); data.put("ERP_INS_ID",dataEntity.getPkValue()+"-"+dataEntity.get("nckd_bbh")); param.put("data",data); param.put("txDateTime",Utils.getData(new Date(), "yyyyMMddHHmmss")); param.put("batchNo",TypeUtils.nullToString(dataEntity.get("billno"))+"-"+TypeUtils.nullToString(dataEntity.get("nckd_bbh"))+"-"+Utils.getData(new Date(), "yyyyMMddHHmmss")); param.put("code","NSTC-Q001"); String bodyjson=param.toString(); String billNum = dataEntity.getString("billno"); log.info("单据号:"+billNum+"传入参数"+param.toString()); JSONObject cbsReturnJson =PayBillToolUtil.JHXServiceQuery(url,bodyjson);//待补充,超时返回参数待修改,整体待重构 log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString()); if(cbsReturnJson==null||cbsReturnJson.get("data")==null){ }else{ String errcode = cbsReturnJson.get("resultCode")+""; JSONObject bodyinfo = cbsReturnJson.getJSONObject("data"); if(bodyinfo!=null){ boolean isupdate = false; if ("000000".equals(errcode)) {//已查询到,不代表支付成功 String zfstatus = bodyinfo.getString("RET_CODE");//0:付款成功 -1:付款失败 -2:流程中 -3:驳回 -4:部分成功 String errormsg =bodyinfo.getString("ERROR_MSG"); if("-2".equals(zfstatus)){//流程中 //判断原因是否有变化 String sbyy = dataEntity.getString("nckd_sbyy"); if(errormsg == null || "".equals(errormsg)){//空不更新 }else if(errormsg.equals(sbyy)){//相等不更新 }else{ dataEntity.set("nckd_sbyy",errormsg);//错误信息更新 isupdate = true; } }else if("0".equals(zfstatus)){//成功 dataEntity.set("nckd_paystatus",3); dataEntity.set("nckd_sbyy","支付成功");//错误信息更新 //分录信息 DynamicObjectCollection coll = dataEntity.getDynamicObjectCollection("entry"); for (int i = 0; i