用友实付款查询接口

This commit is contained in:
yuxueliang0813 2024-09-30 16:56:19 +08:00
parent a3b8cce54d
commit b81a01c055
3 changed files with 77 additions and 46 deletions

View File

@ -94,26 +94,26 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
DynamicObject prinfo = null; DynamicObject prinfo = null;
boolean isBipSuccess = false; boolean isBipSuccess = false;
for (int i = 0; i < dos.length; i++) { for (int i = 0; i < dos.length; i++) {
prinfo = dos[i]; //反审核操作之前系统未把info对象所有属性加载出来尤其是二开的字段需要在此处重新load一下
prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(),dos[i].getDataEntityType().getName());
//如果bip红冲单据号为空则需要调用bip接口否则不需要 //如果bip红冲单据号为空则需要调用bip接口否则不需要
if(!DobeDWUtils.isEmpty(prinfo.getString("qeug_yyhc"))){ if(!DobeDWUtils.isEmpty(prinfo.getString("qeug_yyhc"))){
continue; continue;
} }
//supplementflag 事后补单 可能不需要推送BIP需要排除
if("recon_payreqbill".equals(prinfo.getDataEntityType().getName()) && !prinfo.getBoolean("nocontractflag")){ if("recon_payreqbill".equals(prinfo.getDataEntityType().getName()) && !prinfo.getBoolean("nocontractflag")){
//判断实体名称为合同付款申请单,此时无合同付款 nocontractflag 不需要推送 //判断实体名称为合同付款申请单,此时无合同付款 nocontractflag 不需要推送
isBipSuccess = handleForBIP(eok,prinfo,false); isBipSuccess = handleForBIP(eok,prinfo,false);
}else if("recon_connotextbill".equals(prinfo.getDataEntityType().getName())){ }else if("recon_connotextbill".equals(prinfo.getDataEntityType().getName())){
//无文本合同 //无文本合同
isBipSuccess = handleForBIP(eok,prinfo,true); isBipSuccess = handleForBIP(eok,prinfo,true);
}else {
//由无文本合同生成的付款申请单走这里
isBipSuccess = true;
} }
//如果bip接口失败记录日志并中断原有反审核业务 //如果bip接口失败记录日志并中断原有反审核业务
if(!isBipSuccess){ if(!isBipSuccess){
e.setCancelMessage("推送BIP红冲数据失败反审核中断请排查接口失败原因e.setCancelMessage"); e.setCancelMessage("推送BIP红冲数据失败反审核中断请排查接口失败原因");
OperateErrorInfo oeInfo = new OperateErrorInfo();
oeInfo.setMessage("推送BIP红冲数据失败反审核中断请排查接口失败原因");
oeInfo.setErrorLevel(ErrorLevel.Error.name());
oeInfo.setPkValue(prinfo.getPkValue());
this.operationResult.addErrorInfo(oeInfo);
e.setCancel(true); e.setCancel(true);
} }
} }
@ -134,7 +134,7 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
boolean isBipSuccess = false; boolean isBipSuccess = false;
for (int i = 0; i < dos.length; i++) { for (int i = 0; i < dos.length; i++) {
prinfo = dos[i]; prinfo = dos[i];
//如果bip单据号为空则需要调用bip接口否则不需要 //如果bip单据号为空则需要调用bip接口否则不需要操作之后系统会把对象的所有属性加载出来
if(!DobeDWUtils.isEmpty(prinfo.getString("qeug_yynum"))){ if(!DobeDWUtils.isEmpty(prinfo.getString("qeug_yynum"))){
this.operationResult.setSuccess(false); this.operationResult.setSuccess(false);
this.operationResult.setMessage("此单已推送BIP无需再次点击同步按钮");//前端界面提示内容 this.operationResult.setMessage("此单已推送BIP无需再次点击同步按钮");//前端界面提示内容
@ -143,10 +143,10 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
} }
//审核时如果用友单号已有则不需要再推送给BIP //审核时如果用友单号已有则不需要再推送给BIP
if("recon_payreqbill".equals(prinfo.getDataEntityType().getName()) && !prinfo.getBoolean("nocontractflag")){ if("recon_payreqbill".equals(prinfo.getDataEntityType().getName()) && !prinfo.getBoolean("nocontractflag")){
//判断实体名称为合同付款申请单,此时无合同付款 nocontractflag 不需要推送 //判断实体名称为合同付款申请单,此时无合同付款 nocontractflag 不需要推送 是否事后补单 supplementflag
isBipSuccess = handleForBIP(eok,prinfo,false); isBipSuccess = handleForBIP(eok,prinfo,false);
}else if("recon_connotextbill".equals(prinfo.getDataEntityType().getName())){ }else if("recon_connotextbill".equals(prinfo.getDataEntityType().getName())){
//无文本合同 //无文本合同 是否事后补单 supplementflag
isBipSuccess = handleForBIP(eok,prinfo,true); isBipSuccess = handleForBIP(eok,prinfo,true);
} }
if("syncbip".equals(eok)){ if("syncbip".equals(eok)){
@ -172,24 +172,8 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
return null; return null;
} }
private String[] getCompanyDeptNumber(String bizDept){
//根据用款部门的编号获得对应关系表中的财务公司编号和部门编号
DynamicObject orginfo = BusinessDataServiceHelper.loadSingle("qeug_recon_orgrelation",new QFilter[]{new QFilter("number","=",bizDept)});
String[] result = new String[3];
if(orginfo != null){
result[0] = orginfo.getString("qeug_companynumber");//财务公司编号
result[1] = orginfo.getString("qeug_deptnumber");//财务部门编号
result[2] = orginfo.getString("qeug_paynumber");//财务公司付款账户
// result[2] = "03002635967";
}else{
log.error(String.format("用友付款接口根据用款部门编号转换财务编号失败:%s", bizDept));
}
return result;
}
private JSONObject zzPayData(String eventName, DynamicObject payrequestinfo, boolean isnotext){ private JSONObject zzPayData(String eventName, DynamicObject payrequestinfo, boolean isnotext){
String[] companyDept = getCompanyDeptNumber(payrequestinfo.getDynamicObject("usedepart").getString("number")); String[] companyDept = DobeDWUtils.getCompanyDeptNumber(payrequestinfo.getDynamicObject("usedepart").getString("number"));
if(companyDept[0] == null){ if(companyDept[0] == null){
DobeDWUtils.saveLog(payrequestinfo.getString("billno"),"用友BIP",payrequestinfo.getDynamicObject("usedepart").getString("number"),"根据用款部门编号转换财务编号失败",false,eventName); DobeDWUtils.saveLog(payrequestinfo.getString("billno"),"用友BIP",payrequestinfo.getDynamicObject("usedepart").getString("number"),"根据用款部门编号转换财务编号失败",false,eventName);
return null; return null;

View File

@ -17,8 +17,10 @@ import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
import nccloud.open.api.auto.token.cur.utils.APICurUtils; import nccloud.open.api.auto.token.cur.utils.APICurUtils;
import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import okhttp3.Response;
import shkd.utils.DobeDWUtils; import shkd.utils.DobeDWUtils;
import java.util.Map; import java.util.Map;
@ -44,12 +46,11 @@ public class YongyouBIPTask extends AbstractTask implements Plugin {
// currentinfo = docs.get(i); // currentinfo = docs.get(i);
// } // }
//查找无文本合同已审核未付款的单子
//查找未审核的付款登记单,考虑费用登记和付款申请单如果是事后补单的话此处是否需要过滤 //查找未审核的付款登记单,考虑费用登记和付款申请单如果是事后补单的话此处是否需要过滤
QFilter statusFilter = new QFilter("billstatus","=","A"); QFilter statusFilter = new QFilter("billstatus","=","A");
String selectStr = "id,billno,bizdate,connotextbill.id,connotextbill.billno,connotextbill.qeug_yynum,payreqbill.id,payreqbill.billno,payreqbill.qeug_yynum"; QFilter statusB = new QFilter("billstatus","=","B");
DynamicObject[] prs = BusinessDataServiceHelper.load(payregisterEntity,selectStr,new QFilter[]{statusFilter}); // String selectStr = "id,billno,bizdate,billstatus,connotextbill.id,connotextbill.billno,connotextbill.qeug_yynum,payreqbill.id,payreqbill.billno,payreqbill.qeug_yynum";
DynamicObject[] prs = BusinessDataServiceHelper.load(payregisterEntity,"id",new QFilter[]{statusFilter.or(statusB)});
if(prs.length == 0){ if(prs.length == 0){
return; return;
} }
@ -77,36 +78,68 @@ public class YongyouBIPTask extends AbstractTask implements Plugin {
log.error("用友认证接口返回的accessToken为空"); log.error("用友认证接口返回的accessToken为空");
return; return;
} }
Request request = new Request.Builder().url(DobeDWUtils.payQueryUrl) Request request = null;
.post(createFormRequestBody(null))
.header("Content-Type", "application/json;charset=utf-8")
.header("access_token", accesstoken)
.header("repeat_check", "Y")
.header("ucg_flag", "Y")
.header("client_id", DobeDWUtils.clientid)
.build();
JSONObject resultData = null; JSONObject resultData = null;
DynamicObject prinfo = null; DynamicObject prinfo = null;
DynamicObject requestinfo = null; DynamicObject requestinfo = null;
String yynum = null; String yynum = null;
String[] companyDept = null;
JSONObject queryParams = new JSONObject();
OkHttpClient client = new OkHttpClient();
Response response = null;
for (int i = 0; i < prs.length; i++) { for (int i = 0; i < prs.length; i++) {
prinfo = prs[i]; prinfo = BusinessDataServiceHelper.loadSingle(prs[i].getPkValue(),payregisterEntity);
//费用登记 //费用登记
requestinfo = prinfo.getDynamicObject("connotextbill"); requestinfo = prinfo.getDynamicObject("connotextbill");
if(requestinfo == null){ if(requestinfo == null){
//付款申请 //付款申请
requestinfo = prinfo.getDynamicObject("payreqbill"); requestinfo = prinfo.getDynamicObject("payreqbill");
} }
//看用友的实付款查询接口是一个个查询还是集中查询 requestinfo = BusinessDataServiceHelper.loadSingle(requestinfo.getPkValue(),requestinfo.getDataEntityType().getName());
//看用友的实付款查询接口是一个个查询还是集中查询;这个字段直接从F7实体对象中获取不到需要扩展F7实体
yynum = requestinfo.getString("qeug_yynum"); yynum = requestinfo.getString("qeug_yynum");
resultData = JSON.parseObject("用友接口返回值"); //获取到的yynum为空则不进行实付查询
if(DobeDWUtils.isEmpty(yynum)){
continue;
}
//根据付款申请单的用款部门找到对应财务组织编号
companyDept = DobeDWUtils.getCompanyDeptNumber(requestinfo.getDynamicObject("usedepart").getString("number"));
if(companyDept[0] == null){
DobeDWUtils.saveLog(requestinfo.getString("number"),"用友实付查询",requestinfo.getDynamicObject("usedepart").getString("number"),"根据用款部门编号转换财务编号失败",false,"定时任务");
continue;
}
queryParams.put("pk_org",companyDept[0]);
queryParams.put("bill_no",yynum);
request = new Request.Builder().url(DobeDWUtils.payQueryUrl)
.post(createFormRequestBody(queryParams))
.header("Content-Type", "application/json;charset=utf-8")
.header("access_token", accesstoken)
.header("repeat_check", "Y")
.header("ucg_flag", "Y")
.header("client_id", DobeDWUtils.clientid)
.build();
try {
response = client.newCall(request).execute();
resultData = JSON.parseObject(response.body().string());
if(!"true".equals(resultData.getString("success"))){
//增加日志记录
DobeDWUtils.saveLog(requestinfo.getString("number"),"用友实付查询",queryParams.toString(),resultData.toString(),false,"定时任务");
continue;
}
} catch (Exception e) {
DobeDWUtils.saveLog(requestinfo.getString("number"),"用友实付查询",queryParams.toString(),e.getMessage(),false,"定时任务");
continue;
}
//根据查询结果设置付款登记对象 //根据查询结果设置付款登记对象
prinfo.set("bizdate",resultData.getDate("bizdate")); prinfo.set("bizdate",resultData.getJSONObject("data").getDate("billdate"));
prinfo.set("billno",resultData.getString("billno")); prinfo.set("billno",yynum);
prinfo.set("status","B"); //单据状态改为已提交 prinfo.set("billstatus","B"); //单据状态改为已提交
SaveServiceHelper.update(prinfo);//保存上述设置内容 SaveServiceHelper.update(prinfo);//保存上述设置内容
//调用提交方法
// OperationServiceHelper.executeOperate("submit",payregisterEntity,new DynamicObject[]{prinfo}, OperateOption.create());
//调用付款登记单的审核方法 //调用付款登记单的审核方法
OperationServiceHelper.executeOperate("audit",payregisterEntity,new DynamicObject[]{prinfo}, OperateOption.create()); OperationServiceHelper.executeOperate("audit",payregisterEntity,new DynamicObject[]{prinfo}, OperateOption.create());
DobeDWUtils.saveLog(requestinfo.getString("number"),"用友实付查询",queryParams.toString(),resultData.toString(),true,"定时任务");
} }
} }

View File

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import kd.bos.context.RequestContext; import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper;
import okhttp3.MediaType; import okhttp3.MediaType;
@ -38,7 +39,7 @@ public class DobeDWUtils {
//用友付款单新增接口 //用友付款单新增接口
public static final String payUrl = "http://106.14.25.83:9999/nccloud/api/arap/paybill/insertandcommit"; public static final String payUrl = "http://106.14.25.83:9999/nccloud/api/arap/paybill/insertandcommit";
//付款金额查询接口 //付款金额查询接口
public static final String payQueryUrl = "http://106.14.25.83:8090/nccloud/api/arap/paybill/insertandcommit"; public static final String payQueryUrl = "http://106.14.25.83:8090/nccloud/api/sp/spPaybillQuery/querySettleStatus";
private static final String jklogEntityName = "qeug_recon_jklog"; private static final String jklogEntityName = "qeug_recon_jklog";
@ -46,6 +47,19 @@ public class DobeDWUtils {
return value == null || value.trim().length() <= 0; return value == null || value.trim().length() <= 0;
} }
public static String[] getCompanyDeptNumber(String bizDept){
//根据用款部门的编号获得对应关系表中的财务公司编号和部门编号
DynamicObject orginfo = BusinessDataServiceHelper.loadSingle("qeug_recon_orgrelation",new QFilter[]{new QFilter("number","=",bizDept)});
String[] result = new String[3];
if(orginfo != null){
result[0] = orginfo.getString("qeug_companynumber");//财务公司编号
result[1] = orginfo.getString("qeug_deptnumber");//财务部门编号
result[2] = orginfo.getString("qeug_paynumber");//财务公司付款账户
// result[2] = "03002635967";
}
return result;
}
public static void saveLog(String billno,String jkname,String inputs,String outputs,boolean isSuccess,String operation){ public static void saveLog(String billno,String jkname,String inputs,String outputs,boolean isSuccess,String operation){
//保存星瀚与第三方接口调用之间的日志记录 //保存星瀚与第三方接口调用之间的日志记录
//参数说明单据编号接口名称接口入参接口返回值接口执行结果是否成功操作名称auditunaudit等 //参数说明单据编号接口名称接口入参接口返回值接口执行结果是否成功操作名称auditunaudit等