AgentpaybillQueryStatusTast.java 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package fi.cas.task;
  2. import com.alibaba.druid.support.logging.Log;
  3. import com.alibaba.druid.support.logging.LogFactory;
  4. import fi.cas.opplugin.PayBillToolUtil;
  5. import fi.cas.opplugin.TypeUtils;
  6. import fi.cas.opplugin.Utils;
  7. import kd.bos.context.RequestContext;
  8. import kd.bos.dataentity.entity.DynamicObject;
  9. import kd.bos.dataentity.entity.DynamicObjectCollection;
  10. import kd.bos.exception.KDException;
  11. import kd.bos.orm.query.QCP;
  12. import kd.bos.orm.query.QFilter;
  13. import kd.bos.schedule.executor.AbstractTask;
  14. import kd.bos.servicehelper.BusinessDataServiceHelper;
  15. import kd.bos.servicehelper.operation.SaveServiceHelper;
  16. import org.json.JSONArray;
  17. import org.json.JSONObject;
  18. import java.util.Date;
  19. import java.util.HashSet;
  20. import java.util.Map;
  21. import java.util.Set;
  22. public class AgentpaybillQueryStatusTast extends AbstractTask {
  23. private static final Log log = LogFactory.getLog(AgentpaybillQueryStatusTast.class);
  24. @Override
  25. public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
  26. //获取要查询的数据。状态为已审批,支付状态为支付中,或支付失败。理论上只需要查支付中
  27. QFilter filter = new QFilter("billstatus", QCP.equals, "C");
  28. Set<String> paystatusSet = new HashSet<>();
  29. paystatusSet.add("2");
  30. paystatusSet.add("6");
  31. filter.and("nckd_paystatus", QCP.in, "2");
  32. filter.and("nckd_fkcs", QCP.large_than, 0);
  33. Map<Object, DynamicObject> payinfos = BusinessDataServiceHelper.loadFromCache("cas_agentpaybill", new QFilter[] {filter});
  34. DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytoJHX")});
  35. String url = jkpzxx.getString("nckd_servername");
  36. for (DynamicObject dataEntity : payinfos.values()) {
  37. //调用接口查询付款状态
  38. JSONObject param = new JSONObject();
  39. PayBillToolUtil.headJson(param);
  40. JSONObject data = new JSONObject();
  41. data.put("ERP_INS_ID",dataEntity.getPkValue()+"-"+dataEntity.get("nckd_bbh"));
  42. param.put("data",data);
  43. param.put("txDateTime",Utils.getData(new Date(), "yyyyMMddHHmmss"));
  44. param.put("batchNo",TypeUtils.nullToString(dataEntity.get("billno"))+"-"+TypeUtils.nullToString(dataEntity.get("nckd_bbh"))+"-"+Utils.getData(new Date(), "yyyyMMddHHmmss"));
  45. param.put("code","NSTC-Q001");
  46. String bodyjson=param.toString();
  47. String billNum = dataEntity.getString("billno");
  48. log.info("单据号:"+billNum+"传入参数"+param.toString());
  49. JSONObject cbsReturnJson =PayBillToolUtil.JHXServiceQuery(url,bodyjson);//待补充,超时返回参数待修改,整体待重构
  50. log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
  51. if(cbsReturnJson==null||cbsReturnJson.get("data")==null){
  52. }else{
  53. String errcode = cbsReturnJson.get("resultCode")+"";
  54. JSONObject bodyinfo = cbsReturnJson.getJSONObject("data");
  55. if(bodyinfo!=null){
  56. boolean isupdate = false;
  57. if ("000000".equals(errcode)) {//已查询到,不代表支付成功
  58. String zfstatus = bodyinfo.getString("RET_CODE");//0:付款成功 -1:付款失败 -2:流程中 -3:驳回 -4:部分成功
  59. String errormsg =bodyinfo.getString("ERROR_MSG");
  60. if("-2".equals(zfstatus)){//流程中
  61. //判断原因是否有变化
  62. String sbyy = dataEntity.getString("nckd_sbyy");
  63. if(errormsg == null || "".equals(errormsg)){//空不更新
  64. }else if(errormsg.equals(sbyy)){//相等不更新
  65. }else{
  66. dataEntity.set("nckd_sbyy",errormsg);//错误信息更新
  67. isupdate = true;
  68. }
  69. }else if("0".equals(zfstatus)){//成功
  70. dataEntity.set("nckd_paystatus",3);
  71. dataEntity.set("nckd_sbyy","支付成功");//错误信息更新
  72. //分录信息
  73. DynamicObjectCollection coll = dataEntity.getDynamicObjectCollection("entry");
  74. for (int i = 0; i <coll.size() ; i++) {
  75. coll.get(i).set("e_issuccess",true);//分录是否成功
  76. coll.get(i).set("bankreturnmsg","成功");//返回信息
  77. }
  78. isupdate = true;
  79. }else if("-1".equals(zfstatus)){//失败
  80. dataEntity.set("nckd_paystatus",6);//支付失败
  81. dataEntity.set("nckd_sbyy",errormsg);//错误信息更新
  82. updateEntrys(dataEntity,bodyinfo);
  83. isupdate = true;
  84. }else if("-3".equals(zfstatus)){//驳回
  85. dataEntity.set("nckd_paystatus",5);//驳回
  86. dataEntity.set("nckd_sbyy",errormsg);//错误信息更新
  87. updateEntrys(dataEntity,bodyinfo);
  88. isupdate = true;
  89. }else if("-4".equals(zfstatus)){//部分成功
  90. dataEntity.set("nckd_paystatus",7);//部分成功
  91. dataEntity.set("nckd_sbyy",errormsg);//错误信息更新
  92. updateEntrys(dataEntity,bodyinfo);
  93. isupdate = true;
  94. }
  95. if(isupdate){
  96. SaveServiceHelper.update(new DynamicObject[]{dataEntity});
  97. PayBillToolUtil.saveupdatelog(dataEntity,bodyjson,cbsReturnJson.toString());
  98. }
  99. }
  100. }
  101. }
  102. }
  103. }
  104. //更新分录
  105. public void updateEntrys(DynamicObject dataEntity,JSONObject bodyinfo){
  106. DynamicObjectCollection coll = dataEntity.getDynamicObjectCollection("entry");
  107. JSONArray ITEM_LIST = bodyinfo.getJSONArray("ITEM_LIST");
  108. for (int i = 0; i < ITEM_LIST.length(); i++) {
  109. JSONObject iteminfo =(JSONObject)ITEM_LIST.get(i);
  110. String itempk = iteminfo.get("ERP_PVT_ID")+"";
  111. String error_msg = iteminfo.get("ERROR_MSG")+"";
  112. String result_code = iteminfo.get("RESULT_CODE")+"";
  113. for (int j = 0; j <coll.size() ; j++) {
  114. String itempkvalue = coll.get(j).getPkValue()+"";
  115. if(itempk.equals(itempkvalue)){
  116. if("0".equals(result_code)){
  117. coll.get(j).set("e_issuccess",true);
  118. coll.get(j).set("bankreturnmsg","成功");//返回信息
  119. }else{
  120. coll.get(j).set("e_issuccess",false);
  121. coll.get(j).set("bankreturnmsg",error_msg);//返回信息
  122. }
  123. }
  124. }
  125. }
  126. }
  127. }