|
@@ -0,0 +1,275 @@
|
|
|
|
+package fi.cas.opplugin;
|
|
|
|
+
|
|
|
|
+import com.kingdee.util.StringUtils;
|
|
|
|
+import kd.bos.dataentity.entity.DynamicObject;
|
|
|
|
+import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
|
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
|
|
|
|
+import kd.bos.entity.plugin.PreparePropertysEventArgs;
|
|
|
|
+import kd.bos.entity.plugin.args.*;
|
|
|
|
+import kd.bos.logging.Log;
|
|
|
|
+import kd.bos.logging.LogFactory;
|
|
|
|
+import kd.bos.orm.query.QFilter;
|
|
|
|
+import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
|
|
+import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
|
|
+import org.json.JSONArray;
|
|
|
|
+import org.json.JSONObject;
|
|
|
|
+import java.io.IOException;
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 代发单
|
|
|
|
+ * @author wanghaiwu_kd
|
|
|
|
+ * @date 2025/06/13
|
|
|
|
+ */
|
|
|
|
+public class AgentPaySynPayStatusOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
|
+ private static final Log logger = LogFactory.getLog(AgentPaySynPayStatusOpPlugin.class);
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void onPreparePropertys(PreparePropertysEventArgs e) {
|
|
|
|
+ super.onPreparePropertys(e);
|
|
|
|
+
|
|
|
|
+ List<String> fieldKeys = e.getFieldKeys();
|
|
|
|
+
|
|
|
|
+ fieldKeys.add("billno");
|
|
|
|
+ fieldKeys.add("billstatus");
|
|
|
|
+ fieldKeys.add("nckd_paystatus");
|
|
|
|
+ fieldKeys.add("nckd_sbyy");
|
|
|
|
+ fieldKeys.add("nckd_fqqdrq");
|
|
|
|
+ fieldKeys.add("nckd_fkcs");
|
|
|
|
+ fieldKeys.add("nckd_bbh");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void beforeExecuteOperationTransaction(BeforeOperationArgs args) {
|
|
|
|
+ super.beforeExecuteOperationTransaction(args);
|
|
|
|
+
|
|
|
|
+ String operationKey = args.getOperationKey();
|
|
|
|
+ DynamicObject[] agentPayBillObjs = args.getDataEntities();
|
|
|
|
+ logger.info("开始执行操作:{},实体:{}", operationKey, agentPayBillObjs);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ StringBuilder errMsg = new StringBuilder();
|
|
|
|
+
|
|
|
|
+ //支付状态同步
|
|
|
|
+ if ("nckd_synpaystatus".equals(operationKey)) {
|
|
|
|
+ DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytoJHX")});
|
|
|
|
+ String url = jkpzxx.getString("nckd_servername");
|
|
|
|
+ boolean isESBApi = jkpzxx.getBoolean("nckd_isesb");
|
|
|
|
+
|
|
|
|
+ for (DynamicObject dataEntity : agentPayBillObjs) {
|
|
|
|
+ String billNum = dataEntity.getString("billno");
|
|
|
|
+ String billStatus = dataEntity.getString("billstatus");
|
|
|
|
+ String payStatus = dataEntity.getString("nckd_paystatus");
|
|
|
|
+ int fkcs = dataEntity.getInt("nckd_fkcs");
|
|
|
|
+
|
|
|
|
+ if(!"C".equals(billStatus) || !"2".equals(payStatus) || fkcs <= 0){
|
|
|
|
+ logger.info("付款单同步失败,不符合查询条件。实体:{}", dataEntity);
|
|
|
|
+
|
|
|
|
+ errMsg.append("单据(" + billNum + ")不符合同步条件").append("\r\n");
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //调用接口查询付款状态
|
|
|
|
+ JSONObject param = new JSONObject();
|
|
|
|
+ PayBillToolUtil.headJson(param);
|
|
|
|
+ JSONObject data = new JSONObject();
|
|
|
|
+ data.put("ERP_INS_ID",dataEntity.getPkValue()+"");
|
|
|
|
+
|
|
|
|
+ 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();
|
|
|
|
+ logger.info("单据号:"+billNum+"传入参数"+param.toString());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ Map<String, String> tokenMap = PayBillToolUtil.getNtscToken();
|
|
|
|
+
|
|
|
|
+ if(tokenMap == null){
|
|
|
|
+ logger.info("单据号:" + billNum + "查询失败: 获取token失败");
|
|
|
|
+
|
|
|
|
+ errMsg.append("单据(" + billNum + ")查询失败: 获取token失败").append("\r\n");
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(!"0".equals(tokenMap.get("code"))){
|
|
|
|
+ logger.info("单据号:" + billNum + "查询失败:获取token失败, " + tokenMap.get("msg"));
|
|
|
|
+
|
|
|
|
+ errMsg.append("单据(" + billNum + ")查询失败: 获取token失败").append("\r\n");
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ String token = tokenMap.get("msg");
|
|
|
|
+
|
|
|
|
+ //改成调用轻舟的方式
|
|
|
|
+ Map<String, String> header = new HashMap<>();
|
|
|
|
+ header.put("Content-Type", "application/json; charset=UTF-8");
|
|
|
|
+ header.put("Authorization", "Bearer " + token);
|
|
|
|
+
|
|
|
|
+ //如果是esb接口,需要包一层参数
|
|
|
|
+ if(isESBApi) {
|
|
|
|
+ bodyjson = PayBillToolUtil.buildEsbApiBodyJSON(new JSONObject(bodyjson));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ String apiResult = "";
|
|
|
|
+ try {
|
|
|
|
+ logger.info("代发查询接口调用参数:" + bodyjson);
|
|
|
|
+
|
|
|
|
+ apiResult = HttpUtils.postjson(url, header, bodyjson);
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ logger.info("单据号:" + billNum + "查询失败:" + e.getMessage());
|
|
|
|
+
|
|
|
|
+ errMsg.append("单据(" + billNum + ")查询失败:" + e.getMessage()).append("\r\n");
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(StringUtils.isEmpty(apiResult)){
|
|
|
|
+ logger.info("单据号:" + billNum + "查询结果为空");
|
|
|
|
+
|
|
|
|
+ errMsg.append("单据(" + billNum + ")查询结果为空").append("\r\n");
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ logger.info("单据号:" + billNum + "返回参数" + apiResult);
|
|
|
|
+
|
|
|
|
+// JSONObject cbsReturnJson = new JSONObject(apiResult);
|
|
|
|
+
|
|
|
|
+ JSONObject esbReturnJson = new JSONObject(apiResult);
|
|
|
|
+ if(esbReturnJson.get("responseData") == null){
|
|
|
|
+ logger.info("单据号:" + billNum + ", 未正常返回responseData参数");
|
|
|
|
+
|
|
|
|
+ errMsg.append("单据(" + billNum + "), 未正常返回responseData参数").append("\r\n");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ JSONArray esbJSONArray = esbReturnJson.getJSONArray("responseData");
|
|
|
|
+ if(esbJSONArray == null || esbJSONArray.length() == 0){
|
|
|
|
+ logger.info("单据号:" + billNum + ", 未正常返回responseData参数");
|
|
|
|
+
|
|
|
|
+ errMsg.append("单据(" + billNum + "), 未正常返回responseData参数").append("\r\n");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ JSONObject cbsReturnJson = esbJSONArray.getJSONObject(0);
|
|
|
|
+ /************************************************************/
|
|
|
|
+
|
|
|
|
+ logger.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 <coll.size() ; i++) {
|
|
|
|
+ coll.get(i).set("e_issuccess",true);//分录是否成功
|
|
|
|
+ coll.get(i).set("bankreturnmsg","成功");//返回信息
|
|
|
|
+ }
|
|
|
|
+ isupdate = true;
|
|
|
|
+ }else if("-1".equals(zfstatus)){//失败
|
|
|
|
+ dataEntity.set("nckd_paystatus",6);//支付失败
|
|
|
|
+ dataEntity.set("nckd_sbyy",errormsg);//错误信息更新
|
|
|
|
+ updateEntrys(dataEntity,bodyinfo);
|
|
|
|
+ isupdate = true;
|
|
|
|
+ }else if("-3".equals(zfstatus)){//驳回
|
|
|
|
+ dataEntity.set("nckd_paystatus",5);//驳回
|
|
|
|
+ dataEntity.set("nckd_sbyy",errormsg);//错误信息更新
|
|
|
|
+ updateEntrys(dataEntity,bodyinfo);
|
|
|
|
+ isupdate = true;
|
|
|
|
+ }else if("-4".equals(zfstatus)){//部分成功
|
|
|
|
+ dataEntity.set("nckd_paystatus",7);//部分成功
|
|
|
|
+ dataEntity.set("nckd_sbyy",errormsg);//错误信息更新
|
|
|
|
+ updateEntrys(dataEntity,bodyinfo);
|
|
|
|
+ isupdate = true;
|
|
|
|
+ }
|
|
|
|
+ if(isupdate){
|
|
|
|
+ SaveServiceHelper.update(new DynamicObject[]{dataEntity});
|
|
|
|
+ //存入日志表
|
|
|
|
+ PayBillToolUtil.saveAgentlog(dataEntity, bodyjson, cbsReturnJson.toString(), "6");
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if (errMsg.length() > 0) {
|
|
|
|
+ ////将错误信息返回到前端
|
|
|
|
+ args.setCancelMessage(errMsg.toString());
|
|
|
|
+ args.setCancel(true);
|
|
|
|
+
|
|
|
|
+ System.out.println("AgentPaySynPayStatusOpPlugin 错误信息:" + errMsg.toString());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //更新分录
|
|
|
|
+ public void updateEntrys(DynamicObject dataEntity,JSONObject bodyinfo){
|
|
|
|
+ DynamicObjectCollection coll = dataEntity.getDynamicObjectCollection("entry");
|
|
|
|
+ JSONArray ITEM_LIST = bodyinfo.getJSONArray("ITEM_LIST");
|
|
|
|
+ for (int i = 0; i < ITEM_LIST.length(); i++) {
|
|
|
|
+ JSONObject iteminfo =(JSONObject)ITEM_LIST.get(i);
|
|
|
|
+ String itempk = iteminfo.get("ERP_PVT_ID")+"";
|
|
|
|
+ String error_msg = iteminfo.get("ERROR_MSG")+"";
|
|
|
|
+ String result_code = iteminfo.get("RESULT_CODE")+"";
|
|
|
|
+ for (int j = 0; j <coll.size() ; j++) {
|
|
|
|
+ String itempkvalue = coll.get(j).getPkValue()+"";
|
|
|
|
+ if(itempk.equals(itempkvalue)){
|
|
|
|
+ if("0".equals(result_code)){
|
|
|
|
+ coll.get(j).set("e_issuccess",true);
|
|
|
|
+ coll.get(j).set("bankreturnmsg","成功");//返回信息
|
|
|
|
+ }else{
|
|
|
|
+ coll.get(j).set("e_issuccess",false);
|
|
|
|
+ coll.get(j).set("bankreturnmsg",error_msg);//返回信息
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void beginOperationTransaction(BeginOperationTransactionArgs e) {
|
|
|
|
+ super.beginOperationTransaction(e);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void rollbackOperation(RollbackOperationArgs e) {
|
|
|
|
+ super.rollbackOperation(e);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void endOperationTransaction(EndOperationTransactionArgs e) {
|
|
|
|
+ super.endOperationTransaction(e);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void afterExecuteOperationTransaction(AfterOperationArgs e) {
|
|
|
|
+ super.afterExecuteOperationTransaction(e);
|
|
|
|
+ }
|
|
|
|
+}
|