用友接口优化,日志保存优化

This commit is contained in:
yuxueliang0813 2024-09-27 09:20:38 +08:00
parent a8123adecc
commit 94917bcdd2
3 changed files with 74 additions and 41 deletions

View File

@ -91,19 +91,20 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
@Override
public void afterExecuteOperationTransaction(AfterOperationArgs e) {
super.afterExecuteOperationTransaction(e);
//audit审核通过后判断当前是合同付款申请单还是无文本合同
if("syncbip".equals(e.getOperationKey())){
//audit审核 unaudit反审核 syncbip手动同步 三种情况进入如下代码
String eok = e.getOperationKey();
if("audit".equals(eok) || "unaudit".equals(eok) || "syncbip".equals(eok)){
DynamicObject[] dos = e.getDataEntities();
DynamicObject payrequestinfo = null;
DynamicObject prinfo = null;
for (int i = 0; i < dos.length; i++) {
payrequestinfo = dos[i];
if("recon_payreqbill".equals(payrequestinfo.getDataEntityType().getName())){
//判断实体名称为合同付款申请单
handleForBIP(e.getOperationKey(),payrequestinfo,false);
}else if("recon_connotextbill".equals(payrequestinfo.getDataEntityType().getName())){
prinfo = dos[i];
//审核时如果用友单号已有则不需要再推送给BIP
if("recon_payreqbill".equals(prinfo.getDataEntityType().getName()) && !prinfo.getBoolean("nocontractflag")){
//判断实体名称为合同付款申请单,此时无合同付款 nocontractflag 不需要推送
handleForBIP(eok,prinfo,false);
}else if("recon_connotextbill".equals(prinfo.getDataEntityType().getName())){
//无文本合同
handleForBIP(e.getOperationKey(),payrequestinfo,true);
handleForBIP(eok,prinfo,true);
}
// payrequestinfo.getDynamicObjectType().getAlias();//获取数据库表名
}
@ -140,8 +141,8 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
JSONObject payData = new JSONObject();
String[] companyDept = getCompanyDeptNumber(payrequestinfo.getDynamicObject("usedepart").getString("number"));
payData.put("pk_org",companyDept[0]);//财务公司组织编码根据当前单据的用款部门获得对应关系表中的财务公司和部门
payData.put("pk_tradetype","D3");//交易类型传编码例D3-采购付款单
payData.put("billdate",DobeDWUtils.getDateString(payrequestinfo.getDate("bizdate")));//业务日期YYYY-MM-DD
payData.put("pk_tradetype","F3-Cxx-03");//交易类型编码传编码例D3-采购付款单
payData.put("billdate",DobeDWUtils.getDateString(payrequestinfo.getDate("auditDate")));//业务日期YYYY-MM-DD
String ap_recaccount = null;//收款银行账户编码
//无文本合同的个人垫付时是业务员
boolean isgrdf = isnotext && payrequestinfo.getBoolean("qeug_grdf");
@ -166,7 +167,10 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
payData.put("ap_payaccount",ap_payaccount);//如何取值-从数仓获取的组织对应关系中获取默认付款银行账号
payData.put("ap_recaccount",ap_recaccount);//收款银行账户编码客商传编码例3101040160000098225-上海达洋消防保安工程有限公司
payData.put("pk_balatype","07");//结算方式编码传编码例07-网银
BigDecimal bcsqje = payrequestinfo.getBigDecimal("amount");//单据上的本次申请金额
BigDecimal bcsqje = payrequestinfo.getBigDecimal("amount");//费用登记单据上的本次申请金额
if(!isnotext){
bcsqje = payrequestinfo.getBigDecimal("curactualamt");//付款申请单的本期应付金额 curactualamt
}
payData.put("money",bcsqje.toString());//原币金额 取含税金额
payData.put("rate","1.00000000");//组织本币汇率默认1.00000000
payData.put("local_money",bcsqje.toString());//组织本币金额 含税金额xxxxx.00000000
@ -186,21 +190,21 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
// String auditor = payrequestinfo.getDynamicObject("auditor").getString("number");
// payData.put("approver",auditor);//审核人编码 审核人工号
payData.put("approver",DobeDWUtils.clientid);//审核人编码 固定传ISC
payData.put("approvedate",DobeDWUtils.getDateString(payrequestinfo.getDate("auditDate")));//审核日期 YYYY-MM-DD
payData.put("approvedate",DobeDWUtils.getDateString(null));//审核日期 接口推送的日期
// payData.put("src_syscode","ISC");//单据来源系统编码 非必传
if(isnotext){
payData.put("def11","无合同付款");//自定义项1 流程类型有合同 无合同
payData.put("def11","无合同付款");//自定义项11 流程类型有合同 无合同
}else{
payData.put("def11","合同付款");//自定义项1 流程类型有合同 无合同
payData.put("def11","合同付款");//自定义项11 流程类型有合同 无合同
}
payData.put("def12",payrequestinfo.getString("billno"));//自定义项2 付款申请单的单号全局唯一才行
payData.put("def13","");//备注传合同总金额及付款比例等拼接凭证摘要
payData.put("def12",payrequestinfo.getString("billno"));//自定义项12 付款申请单的单号全局唯一才行
payData.put("def13",payrequestinfo.getString("description"));//备注传合同总金额及付款比例等拼接凭证摘要
//------------------以下是表体组装--------------------
JSONArray jas = new JSONArray();
JSONObject items = new JSONObject();
// items.put("contractno",payrequestinfo.getDynamicObject("contractbill"));//合同号
items.put("scomment",null);//摘要 按照现在NC57逻辑先来涉及银企互联支付原来是15个字符7个中文的样子
items.put("scomment",payrequestinfo.getString("qeug_xf"));//摘要 按照现在NC57逻辑先来涉及银企互联支付原来是15个字符7个中文的样子
if(isgrdf){
items.put("objtype","3");//往来对象(0-客户 1-供应商 2-部门 3-业务员)
@ -265,7 +269,7 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
if(isnotext){
items.put("def13","");//供应链系统合同号无合同怎么传递
}else{
items.put("def13","");//供应链系统合同号
items.put("def13",payrequestinfo.getDynamicObject("contractbill").getString("billno"));//供应链系统合同号
}
items.put("def14",payrequestinfo.getString("id"));//供应链付款单ID
jas.add(items);
@ -318,7 +322,7 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
if(!"true".equals(json_reuslt.getString("success"))){
log.error(String.format("用友付款接口处理失败,具体原因:%s", json_reuslt.toString()));
//此时除了日志打印增加日志记录
DobeDWUtils.saveLog(payrequestinfo.getString("billno"),"用友BIP",payData.toString(),json_reuslt.toString(),false);
DobeDWUtils.saveLog(payrequestinfo.getString("billno"),"用友BIP",payData.toString(),json_reuslt.toString(),false,eventName);
return;
}else{
yynum = json_reuslt.getJSONObject("data").getString("billno");
@ -326,27 +330,22 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen
} catch (Exception e) {
log.error(String.format("用友付款接口异常:%s", e.getMessage()));
// throw new RuntimeException(e);
DobeDWUtils.saveLog(payrequestinfo.getString("billno"),"用友BIP",payData.toString(),e.getMessage(),false);
DobeDWUtils.saveLog(payrequestinfo.getString("billno"),"用友BIP",payData.toString(),e.getMessage(),false,eventName);
}
if(DobeDWUtils.isEmpty(yynum)){
log.error("用友付款接口返回的billno为空");
DobeDWUtils.saveLog(payrequestinfo.getString("billno"),"用友BIP",payData.toString(),"用友billno为空"+json_reuslt.toString(),false);
DobeDWUtils.saveLog(payrequestinfo.getString("billno"),"用友BIP",payData.toString(),"用友billno为空"+json_reuslt.toString(),false,eventName);
}else{
//推送用友bip成功后反写合同付款申请单的用友付款单id字段值
String sql = "UPDATE t_xxx SET fk_qeug_yynum=? WHERE fid=?;";
//推送用友bip成功后反写费用登记和合同付款申请单的用友付款单id字段值
String sql = "UPDATE t_recon_payreqbill SET fk_qeug_yynum=? WHERE fid=?;";
if(isnotext){
sql = "UPDATE t_recon_connotextbill SET fk_qeug_yynum=? WHERE fid=?;";
}
DB.update(DBRoute.of("scm"), sql, new Object[]{yynum, payrequestinfo.getLong("id")});
DobeDWUtils.saveLog(payrequestinfo.getString("billno"),"用友BIP",payData.toString(),json_reuslt.toString(),true);
DobeDWUtils.saveLog(payrequestinfo.getString("billno"),"用友BIP",payData.toString(),json_reuslt.toString(),true,eventName);
}
}
private void handleWithOutContract(String eventName, DynamicObject payrequestinfo){
//处理无文本合同的审核推送用友bip
String yyid = null;//用友单据id
//推送用友bip成功后反写无文本合同的用友付款单id字段值
String sql = "UPDATE t_recon_connotextbill SET fk_qeug_yynum=? WHERE fid=?;";
DB.update(DBRoute.of("scm"), sql, new Object[]{yyid, payrequestinfo.getLong("id")});
}
private String getSupplierType(long supplierid){
//根据供应商id从供应商F7中得到供应商的分类标准
DynamicObject supinfo = BusinessDataServiceHelper.loadSingle("resm_supplier_f7",new QFilter[]{new QFilter("id","=",supplierid)});

View File

@ -1,6 +1,9 @@
package shkd.repc.task;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.exception.KDException;
@ -8,7 +11,10 @@ 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.QueryServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin;
import java.util.Map;
@ -23,17 +29,44 @@ public class YongyouBIPTask extends AbstractTask implements Plugin {
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);
}
// 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");
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});
DynamicObject prinfo = null;
DynamicObject requestinfo = null;
String yynum = null;
for (int i = 0; i < prs.length; i++) {
prinfo = prs[i];
//费用登记
requestinfo = prinfo.getDynamicObject("connotextbill");
if(requestinfo == null){
//付款申请
requestinfo = prinfo.getDynamicObject("payreqbill");
}
//看用友的实付款查询接口是一个个查询还是集中查询
yynum = requestinfo.getString("qeug_yynum");
JSONObject resultData = JSON.parseObject("用友接口返回值");
//根据查询结果设置付款登记对象
prinfo.set("bizdate",resultData.getDate("bizdate"));
prinfo.set("billno",resultData.getString("billno"));
prinfo.set("status","B"); //单据状态改为已提交
SaveServiceHelper.update(prinfo);//保存上述设置内容
//调用付款登记单的审核方法
OperationServiceHelper.executeOperate("audit",payregisterEntity,new DynamicObject[]{prinfo}, OperateOption.create());
}
}
}

View File

@ -45,15 +45,16 @@ public class DobeDWUtils {
return value == null || value.trim().length() <= 0;
}
public static void saveLog(String billno,String jkname,String inputs,String outputs,boolean isSuccess){
public static void saveLog(String billno,String jkname,String inputs,String outputs,boolean isSuccess,String operation){
//保存星瀚与第三方接口调用之间的日志记录
//参数说明单据编号接口名称接口入参接口返回值接口执行结果是否成功
//参数说明单据编号接口名称接口入参接口返回值接口执行结果是否成功操作名称auditunaudit等
DynamicObject billinfo = BusinessDataServiceHelper.newDynamicObject(jklogEntityName);
billinfo.set("number",billno);
billinfo.set("name",jkname);
billinfo.set("qeug_inputs_tag",inputs);//大文本赋值标识后加_tag 是内容不加是文本标题
billinfo.set("qeug_outputs_tag",outputs);
billinfo.set("qeug_issuccess",isSuccess);
billinfo.set("qeug_operation",operation);
billinfo.set("status","A"); //单据状态默认暂存
SaveServiceHelper.save(new DynamicObject[]{billinfo});
}