dobe_comic8/main/java/shkd/repc/task/YongyouBIPTask.java

177 lines
9.1 KiB
Java
Raw Normal View History

2024-11-04 15:32:41 +00:00
package shkd.repc.task;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.exception.KDException;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QFilter;
import kd.bos.schedule.executor.AbstractTask;
import kd.bos.servicehelper.BusinessDataServiceHelper;
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.HashMap;
import java.util.Map;
/**
* 后台任务插件
*/
public class YongyouBIPTask extends AbstractTask implements Plugin {
private static Log log = LogFactory.getLog(YongyouBIPTask.class);
//合同付款申请单的实体名称
// private static final String payrequestEntity = "recon_payreqbill";
//费用登记的实体名称
// private static final String notextEntity = "recon_connotextbill";
private static final String payregisterEntity = "recon_payregister";//付款登记标识 供应链库 t_recon_payregister
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
//查找合同付款申请单已审核未付款的单子
// DynamicObjectCollection docs = QueryServiceHelper.query(payrequestEntity,"id,number,name",new QFilter[]{new QFilter("billstatus","=","C")});
// DynamicObject currentinfo = null;
// for (int i = 0; i < docs.size(); i++) {
// currentinfo = docs.get(i);
// }
//查找未审核的付款登记单,考虑费用登记和付款申请单如果是事后补单的话,此处是否需要过滤
QFilter statusFilter = new QFilter("billstatus","=","A");
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;
}
//将满足本次查询条件的单子存入map中
DynamicObject prinfo = null;
DynamicObject requestinfo = null;
String yyid = null;
JSONObject idjson = null;
JSONArray idarray = new JSONArray();
Map<String,DynamicObject> billMap = new HashMap();
Map<String,String> billNumberMap = new HashMap();
for (int i = 0; i < prs.length; 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().replace("_f7",""));
//看用友的实付款查询接口是一个个查询,还是集中查询;这个字段直接从F7实体对象中获取不到需要扩展F7实体
yyid = requestinfo.getString("qeug_yyid");
//获取到的yyid为空则不进行实付查询
if(DobeDWUtils.isEmpty(yyid)){
continue;
}
billMap.put(yyid,prinfo);
billNumberMap.put(yyid,requestinfo.getString("qeug_yynum"));
idjson = new JSONObject();
idjson.put("id",yyid);
idarray.add(idjson);
}
if(billMap.isEmpty()){
return;
}
//bip接口认证
String accesstoken = null;
APICurUtils apiutil = new APICurUtils();//处理认证接口的工具类用友提供的第三方工具得到accesstoken
apiutil.init(DobeDWUtils.yyip,DobeDWUtils.yyport,DobeDWUtils.bizcenter,DobeDWUtils.clientid,DobeDWUtils.clientsecret,DobeDWUtils.pubKey,DobeDWUtils.clientid,null);
try {
String tokenresult = apiutil.getTokenByClient();
if(DobeDWUtils.isEmpty(tokenresult)){
log.error("用友认证接口返回的accessToken为空");
return;
}
JSONObject json_reuslt = JSON.parseObject(tokenresult);
if(json_reuslt.getJSONObject("data") == null){
log.error("用友认证接口返回的data为空");
return;
}
accesstoken = json_reuslt.getJSONObject("data").getString("access_token");
} catch (Exception e) {
log.error(String.format("用友认证接口异常:%s", e.getMessage()));
throw new RuntimeException(e);
}
if(DobeDWUtils.isEmpty(accesstoken)){
log.error("用友认证接口返回的accessToken为空");
return;
}
JSONObject queryParams = new JSONObject();
queryParams.put("bipData",idarray);
Request 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 {
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
JSONObject resultData = JSON.parseObject(response.body().string());
if(!"200".equals(resultData.getString("code"))){
//增加日志记录
DobeDWUtils.saveLog("noQueryResult","用友实付查询",queryParams.toString(),resultData.toString(),false,"定时任务");
return;
}
JSONArray dataArray = resultData.getJSONArray("data");
for (int i = 0; i < dataArray.size(); i++) {
idjson = dataArray.getJSONObject(i);
yyid = idjson.getJSONObject("parentVO").getString("pk_busi");
prinfo = billMap.get(yyid);
if(prinfo != null){
prinfo.set("bizdate",idjson.getJSONObject("parentVO").getDate("settleDate"));
prinfo.set("billno",billNumberMap.get(yyid));
prinfo.set("billstatus","B"); //单据状态改为已提交
SaveServiceHelper.update(prinfo);//保存上述设置内容
//调用付款登记单的审核方法
OperationServiceHelper.executeOperate("audit",payregisterEntity,new DynamicObject[]{prinfo}, OperateOption.create());
}
}
DobeDWUtils.saveLog("querySuccess","用友实付查询",queryParams.toString(),resultData.toString(),true,"定时任务");
} catch (Exception e) {
DobeDWUtils.saveLog("queryException","用友实付查询",queryParams.toString(),e.getMessage(),false,"定时任务");
}
// String[] companyDept = null;
// for (int i = 0; i < prs.length; i++) {
// //根据付款申请单的用款部门找到对应财务组织编号
// 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]);
// //根据查询结果设置付款登记对象
// 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,"定时任务");
// }
}
private RequestBody createFormRequestBody(JSONObject json_body) {
// return RequestBody.create(ByteString.encodeUtf8(json_body.toJSONString()), DobeDWUtils.MTJSON);
return RequestBody.create(json_body.toJSONString(), DobeDWUtils.MTJSON);
}
}