用友实付款查询接口
This commit is contained in:
		
							parent
							
								
									a3b8cce54d
								
							
						
					
					
						commit
						b81a01c055
					
				| 
						 | 
				
			
			@ -94,26 +94,26 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
 | 
			
		|||
            DynamicObject prinfo = null;
 | 
			
		||||
            boolean isBipSuccess = false;
 | 
			
		||||
            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接口,否则不需要
 | 
			
		||||
                if(!DobeDWUtils.isEmpty(prinfo.getString("qeug_yyhc"))){
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                //supplementflag 事后补单 可能不需要推送BIP,需要排除
 | 
			
		||||
                if("recon_payreqbill".equals(prinfo.getDataEntityType().getName()) && !prinfo.getBoolean("nocontractflag")){
 | 
			
		||||
                    //判断实体名称为合同付款申请单,此时无合同付款 nocontractflag 不需要推送
 | 
			
		||||
                    isBipSuccess = handleForBIP(eok,prinfo,false);
 | 
			
		||||
                }else if("recon_connotextbill".equals(prinfo.getDataEntityType().getName())){
 | 
			
		||||
                    //无文本合同
 | 
			
		||||
                    isBipSuccess = handleForBIP(eok,prinfo,true);
 | 
			
		||||
                }else {
 | 
			
		||||
                    //由无文本合同生成的付款申请单走这里
 | 
			
		||||
                    isBipSuccess = true;
 | 
			
		||||
                }
 | 
			
		||||
                //如果bip接口失败,记录日志,并中断原有反审核业务
 | 
			
		||||
                if(!isBipSuccess){
 | 
			
		||||
                    e.setCancelMessage("推送BIP红冲数据失败,反审核中断,请排查接口失败原因e.setCancelMessage");
 | 
			
		||||
                    OperateErrorInfo oeInfo = new OperateErrorInfo();
 | 
			
		||||
                    oeInfo.setMessage("推送BIP红冲数据失败,反审核中断,请排查接口失败原因");
 | 
			
		||||
                    oeInfo.setErrorLevel(ErrorLevel.Error.name());
 | 
			
		||||
                    oeInfo.setPkValue(prinfo.getPkValue());
 | 
			
		||||
                    this.operationResult.addErrorInfo(oeInfo);
 | 
			
		||||
                    e.setCancelMessage("推送BIP红冲数据失败,反审核中断,请排查接口失败原因");
 | 
			
		||||
                    e.setCancel(true);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +134,7 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
 | 
			
		|||
            boolean isBipSuccess = false;
 | 
			
		||||
            for (int i = 0; i < dos.length; i++) {
 | 
			
		||||
                prinfo = dos[i];
 | 
			
		||||
                //如果bip单据号为空则需要调用bip接口,否则不需要
 | 
			
		||||
                //如果bip单据号为空则需要调用bip接口,否则不需要(操作之后系统会把对象的所有属性加载出来)
 | 
			
		||||
                if(!DobeDWUtils.isEmpty(prinfo.getString("qeug_yynum"))){
 | 
			
		||||
                    this.operationResult.setSuccess(false);
 | 
			
		||||
                    this.operationResult.setMessage("此单已推送BIP,无需再次点击同步按钮");//前端界面提示内容
 | 
			
		||||
| 
						 | 
				
			
			@ -143,10 +143,10 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
 | 
			
		|||
                }
 | 
			
		||||
                //审核时,如果用友单号已有,则不需要再推送给BIP
 | 
			
		||||
                if("recon_payreqbill".equals(prinfo.getDataEntityType().getName()) && !prinfo.getBoolean("nocontractflag")){
 | 
			
		||||
                    //判断实体名称为合同付款申请单,此时无合同付款 nocontractflag 不需要推送
 | 
			
		||||
                    //判断实体名称为合同付款申请单,此时无合同付款 nocontractflag 不需要推送 是否事后补单 supplementflag
 | 
			
		||||
                    isBipSuccess = handleForBIP(eok,prinfo,false);
 | 
			
		||||
                }else if("recon_connotextbill".equals(prinfo.getDataEntityType().getName())){
 | 
			
		||||
                    //无文本合同
 | 
			
		||||
                    //无文本合同 是否事后补单 supplementflag
 | 
			
		||||
                    isBipSuccess = handleForBIP(eok,prinfo,true);
 | 
			
		||||
                }
 | 
			
		||||
                if("syncbip".equals(eok)){
 | 
			
		||||
| 
						 | 
				
			
			@ -172,24 +172,8 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
 | 
			
		|||
        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){
 | 
			
		||||
        String[] companyDept = getCompanyDeptNumber(payrequestinfo.getDynamicObject("usedepart").getString("number"));
 | 
			
		||||
        String[] companyDept = DobeDWUtils.getCompanyDeptNumber(payrequestinfo.getDynamicObject("usedepart").getString("number"));
 | 
			
		||||
        if(companyDept[0] == null){
 | 
			
		||||
            DobeDWUtils.saveLog(payrequestinfo.getString("billno"),"用友BIP",payrequestinfo.getDynamicObject("usedepart").getString("number"),"根据用款部门编号转换财务编号失败",false,eventName);
 | 
			
		||||
            return null;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,8 +17,10 @@ import kd.bos.servicehelper.operation.OperationServiceHelper;
 | 
			
		|||
import kd.bos.servicehelper.operation.SaveServiceHelper;
 | 
			
		||||
import kd.sdk.plugin.Plugin;
 | 
			
		||||
import nccloud.open.api.auto.token.cur.utils.APICurUtils;
 | 
			
		||||
import okhttp3.OkHttpClient;
 | 
			
		||||
import okhttp3.Request;
 | 
			
		||||
import okhttp3.RequestBody;
 | 
			
		||||
import okhttp3.Response;
 | 
			
		||||
import shkd.utils.DobeDWUtils;
 | 
			
		||||
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
| 
						 | 
				
			
			@ -44,12 +46,11 @@ public class YongyouBIPTask extends AbstractTask implements Plugin {
 | 
			
		|||
//            currentinfo = docs.get(i);
 | 
			
		||||
//        }
 | 
			
		||||
 | 
			
		||||
        //查找无文本合同已审核未付款的单子
 | 
			
		||||
 | 
			
		||||
        //查找未审核的付款登记单,考虑费用登记和付款申请单如果是事后补单的话,此处是否需要过滤
 | 
			
		||||
        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";
 | 
			
		||||
        DynamicObject[] prs = BusinessDataServiceHelper.load(payregisterEntity,selectStr,new QFilter[]{statusFilter});
 | 
			
		||||
        QFilter statusB = new QFilter("billstatus","=","B");
 | 
			
		||||
//        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){
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -77,36 +78,68 @@ public class YongyouBIPTask extends AbstractTask implements Plugin {
 | 
			
		|||
            log.error("用友认证接口返回的accessToken为空");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        Request request = new Request.Builder().url(DobeDWUtils.payQueryUrl)
 | 
			
		||||
                .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();
 | 
			
		||||
        Request request = null;
 | 
			
		||||
        JSONObject resultData = null;
 | 
			
		||||
        DynamicObject prinfo = null;
 | 
			
		||||
        DynamicObject requestinfo = 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++) {
 | 
			
		||||
            prinfo = prs[i];
 | 
			
		||||
            prinfo = BusinessDataServiceHelper.loadSingle(prs[i].getPkValue(),payregisterEntity);
 | 
			
		||||
            //费用登记
 | 
			
		||||
            requestinfo = prinfo.getDynamicObject("connotextbill");
 | 
			
		||||
            if(requestinfo == null){
 | 
			
		||||
                //付款申请
 | 
			
		||||
                requestinfo = prinfo.getDynamicObject("payreqbill");
 | 
			
		||||
            }
 | 
			
		||||
            //看用友的实付款查询接口是一个个查询,还是集中查询
 | 
			
		||||
            requestinfo = BusinessDataServiceHelper.loadSingle(requestinfo.getPkValue(),requestinfo.getDataEntityType().getName());
 | 
			
		||||
            //看用友的实付款查询接口是一个个查询,还是集中查询;这个字段直接从F7实体对象中获取不到,需要扩展F7实体
 | 
			
		||||
            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("billno",resultData.getString("billno"));
 | 
			
		||||
            prinfo.set("status","B"); //单据状态改为已提交
 | 
			
		||||
            prinfo.set("bizdate",resultData.getJSONObject("data").getDate("billdate"));
 | 
			
		||||
            prinfo.set("billno",yynum);
 | 
			
		||||
            prinfo.set("billstatus","B"); //单据状态改为已提交
 | 
			
		||||
            SaveServiceHelper.update(prinfo);//保存上述设置内容
 | 
			
		||||
            //调用提交方法
 | 
			
		||||
//            OperationServiceHelper.executeOperate("submit",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,"定时任务");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
 | 
			
		|||
import com.alibaba.fastjson.JSONObject;
 | 
			
		||||
import kd.bos.context.RequestContext;
 | 
			
		||||
import kd.bos.dataentity.entity.DynamicObject;
 | 
			
		||||
import kd.bos.orm.query.QFilter;
 | 
			
		||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
 | 
			
		||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
 | 
			
		||||
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 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";
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -46,6 +47,19 @@ public class DobeDWUtils {
 | 
			
		|||
        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){
 | 
			
		||||
        //保存星瀚与第三方接口调用之间的日志记录
 | 
			
		||||
        //参数说明:单据编号、接口名称、接口入参、接口返回值、接口执行结果是否成功、操作名称(audit、unaudit等)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue