AgentPayQueryStatusTast.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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 kd.bos.context.RequestContext;
  6. import kd.bos.dataentity.entity.DynamicObject;
  7. import kd.bos.dataentity.entity.DynamicObjectCollection;
  8. import kd.bos.exception.KDException;
  9. import kd.bos.orm.query.QCP;
  10. import kd.bos.orm.query.QFilter;
  11. import kd.bos.schedule.executor.AbstractTask;
  12. import kd.bos.servicehelper.BusinessDataServiceHelper;
  13. import kd.bos.servicehelper.operation.SaveServiceHelper;
  14. import org.json.JSONArray;
  15. import org.json.JSONObject;
  16. import java.util.HashMap;
  17. import java.util.Map;
  18. /**
  19. * 定时任务调用查询表头状态接口。如果是R。查询次数5以内,则查询次数加一。5以上,清空查询次数,改核心状态为支付处理失败D,
  20. * 记录处理失败原因。非R,更新表头核心状态,调用查询分录接口,更新分录支付状态,表头状态会改为B部分成功或Q全部成功
  21. */
  22. public class AgentPayQueryStatusTast extends AbstractTask {
  23. private static final Log log = LogFactory.getLog(AgentPayQueryStatusTast.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. filter.and("nckd_paystatus", QCP.equals, "B");
  29. filter.and("nckd_hxzt", QCP.equals, "R");
  30. Map<Object, DynamicObject> payinfos = BusinessDataServiceHelper.loadFromCache("cas_agentpaybill",new QFilter[] {filter});
  31. DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytozfqz")});
  32. String servername = jkpzxx.getString("nckd_servername");
  33. String port = jkpzxx.getString("nckd_port");
  34. for (DynamicObject dataEntity : payinfos.values()) {
  35. //调用接口查询付款状态
  36. String bodyxml = PayBillToolUtil.createSingleAgentPaymentRequest_5(dataEntity);
  37. String billNum = dataEntity.getString("billno");
  38. log.info("单据号:"+billNum+"传入参数"+bodyxml);
  39. JSONObject cbsReturnJson =PayBillToolUtil.socketServiceAgent(servername,port,bodyxml,"ACHRMSGQ");
  40. log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
  41. //存入日志表
  42. PayBillToolUtil.saveAgentlog(dataEntity,bodyxml,cbsReturnJson.toString(),"6");
  43. if(cbsReturnJson==null||cbsReturnJson.get("Message")==null){
  44. }else{
  45. JSONObject headinfo = cbsReturnJson.getJSONObject("Message").getJSONObject("HeadInfo");
  46. if(headinfo!=null){
  47. String errcode =headinfo.getString("errorcode");
  48. if ("000000".equals(errcode)) {//已查询到,不代表支付成功
  49. JSONObject bodyInfo = cbsReturnJson.getJSONObject("Message").getJSONObject("BodyInfo");
  50. JSONObject datainfo =null;
  51. if(bodyInfo.get("dataList") instanceof JSONObject){
  52. datainfo = bodyInfo.getJSONObject("dataList");
  53. }else if(bodyInfo.get("dataList") instanceof JSONArray){
  54. datainfo = bodyInfo.getJSONArray("dataList").getJSONObject(0);
  55. }
  56. //判断是不是R
  57. String returnstatus = datainfo.getString("Status");
  58. String payExecFlag = datainfo.getString("PayExecFlag");
  59. if("R".equals(returnstatus)){
  60. //判断查询次数
  61. int nckd_hxztcxcs = dataEntity.getInt("nckd_hxztcxcs");//查询次数
  62. if(nckd_hxztcxcs<5){//查询次数5以内,则查询次数加一
  63. dataEntity.set("nckd_hxztcxcs",nckd_hxztcxcs++);
  64. }else{//5以上,清空查询次数,改核心状态为支付处理失败D
  65. dataEntity.set("nckd_hxztcxcs",0);
  66. dataEntity.set("nckd_hxzt","D");
  67. dataEntity.set("nckd_hxsbyy","执行失败,请联系管理人员查看原因");
  68. }
  69. SaveServiceHelper.update(new DynamicObject[]{dataEntity});
  70. }else{
  71. if("Q".equals(payExecFlag)){//全部成功,不调用分录查询,直接改为成功
  72. dataEntity.set("nckd_hxzt","Q");//核心状态
  73. dataEntity.set("nckd_hxsbyy","支付全部成功");
  74. DynamicObjectCollection coll = dataEntity.getDynamicObjectCollection("entry");
  75. for (int i = 0; i <coll.size() ; i++) {
  76. coll.get(i).set("e_issuccess",true);//分录是否成功
  77. coll.get(i).set("bankreturnmsg","成功");//核心返回信息
  78. }
  79. SaveServiceHelper.update(new DynamicObject[]{dataEntity});
  80. }else if("B".equals(payExecFlag)){//部分成功
  81. dataEntity.set("nckd_hxzt","B");//核心状态
  82. int SuccNum = datainfo.getInt("SuccNum");//成功条数
  83. int FailNum = datainfo.getInt("FailNum");//失败条数
  84. dataEntity.set("nckd_hxsbyy","支付失败或部分成功,成功"+SuccNum+"条,失败"+FailNum+"条");
  85. //调用分录查询
  86. Map<String,String[]> entryqueryMap = new HashMap<>();
  87. DynamicObject payeracctbankEntity = BusinessDataServiceHelper.loadSingleFromCache(dataEntity.getDynamicObject("payeracctbank").getPkValue(), "am_accountbank");
  88. String jgh = payeracctbankEntity.getString("nckd_jgh");
  89. if("".equals(jgh)){
  90. jgh = "791100";
  91. }
  92. String filename=dataEntity.getString("nckd_filename");
  93. if("".equals(filename)){
  94. filename = dataEntity.getString("billNo");
  95. }
  96. filename=jgh+filename;//机构号
  97. String bodyxml_entryquery = PayBillToolUtil.createSingleAgentPaymentRequest_6(dataEntity,filename);
  98. log.info("单据号明细分录查询:"+billNum+"传入参数"+bodyxml_entryquery);
  99. JSONObject cbsReturnJson_entryquery =PayBillToolUtil.socketServiceAgent(servername,port,bodyxml_entryquery,"ACHRDTLQ");
  100. log.info("单据号明细分录查询:"+billNum+"返回参数"+cbsReturnJson_entryquery.toString());
  101. //存入日志表
  102. PayBillToolUtil.saveAgentlog(dataEntity,bodyxml_entryquery,cbsReturnJson_entryquery.toString(),"7");
  103. if(cbsReturnJson_entryquery==null||cbsReturnJson_entryquery.get("Message")==null){
  104. }else{
  105. JSONObject headinfo_entryquery = cbsReturnJson_entryquery.getJSONObject("Message").getJSONObject("HeadInfo");
  106. if(headinfo_entryquery!=null) {
  107. String errcode_entryquery =headinfo_entryquery.getString("errorcode");
  108. if ("000000".equals(errcode_entryquery)) {//已查询到,不代表支付成功
  109. JSONObject bodyInfo_entryquery = cbsReturnJson_entryquery.getJSONObject("Message").getJSONObject("BodyInfo");
  110. JSONArray datainfo_entryqueryArray =null;
  111. if( bodyInfo_entryquery.get("dataList") instanceof JSONObject){
  112. datainfo_entryqueryArray = new JSONArray();
  113. datainfo_entryqueryArray.put(bodyInfo_entryquery.getJSONObject("dataList"));
  114. }else if(bodyInfo_entryquery.get("dataList") instanceof JSONArray){
  115. datainfo_entryqueryArray = bodyInfo_entryquery.getJSONArray("dataList");
  116. }
  117. for (int i = 0; i < datainfo_entryqueryArray.length(); i++) {
  118. JSONObject datainfo_entryquery = datainfo_entryqueryArray.getJSONObject(i);
  119. String inRichNbr = datainfo_entryquery.get("InRichNbr")+"";
  120. //判断是不是成功
  121. String returnstatus_entryquery = datainfo_entryquery.getString("Status");
  122. if("C".equals(returnstatus_entryquery)){//成功
  123. entryqueryMap.put(inRichNbr,new String[]{"true","成功"});
  124. }else{//失败
  125. String returnstatus_MsgVar = datainfo_entryquery.getString("MsgVar");
  126. if("".equals(returnstatus_MsgVar)){
  127. returnstatus_MsgVar="执行失败";
  128. }
  129. entryqueryMap.put(inRichNbr,new String[]{"false",returnstatus_MsgVar});
  130. }
  131. }
  132. }
  133. }
  134. }
  135. DynamicObjectCollection coll = dataEntity.getDynamicObjectCollection("entry");
  136. for (int i = 0; i <coll.size() ; i++) {
  137. String inRichNbr=coll.get(i).getString("payeeacctbank");
  138. if(!"成功".equals(coll.get(i).getString("bankreturnmsg"))){//失败的
  139. if(entryqueryMap.get(inRichNbr)!=null){
  140. String[] entryreturnStr = entryqueryMap.get(inRichNbr);
  141. if("true".equals(entryreturnStr[0])){
  142. coll.get(i).set("e_issuccess",true);//分录是否成功
  143. coll.get(i).set("bankreturnmsg","成功");//核心返回信息
  144. }else{
  145. coll.get(i).set("e_issuccess",false);//分录是否成功
  146. coll.get(i).set("bankreturnmsg",entryreturnStr[1]);//核心返回信息
  147. }
  148. }
  149. }
  150. }
  151. SaveServiceHelper.update(new DynamicObject[]{dataEntity});
  152. }
  153. }
  154. }
  155. }
  156. }
  157. }
  158. }
  159. }