1.家化电子回单接口,差url

2.推送费控过滤条件(定时任务改成调操作)
  3.fk状态回写,接口,触发
  4.付款单定时调用费控接口更新状态

--s
This commit is contained in:
weiyunlong 2025-03-17 18:00:30 +08:00
parent f367bcadc8
commit 85f044d51e
8 changed files with 281 additions and 12 deletions

View File

@ -5,9 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.EntityMetadataCache; import kd.bos.entity.EntityMetadataCache;
import kd.bos.entity.datamodel.ListSelectedRowCollection; import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.form.control.events.BeforeClickEvent;
import kd.bos.form.control.events.BeforeItemClickEvent; import kd.bos.form.control.events.BeforeItemClickEvent;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.list.BillList; import kd.bos.list.BillList;
import kd.bos.list.plugin.AbstractListPlugin; import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.logging.Log; import kd.bos.logging.Log;

View File

@ -12,6 +12,10 @@ import kd.bos.logging.Log;
import kd.bos.logging.LogFactory; import kd.bos.logging.LogFactory;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
import java.text.SimpleDateFormat;
import java.util.Date;
import static shjh.jhzj7.fi.fi.utils.SapUtils.backpayment_status;
import static shjh.jhzj7.fi.fi.utils.SapUtils.unlocked_status; import static shjh.jhzj7.fi.fi.utils.SapUtils.unlocked_status;
/** /**
@ -38,23 +42,44 @@ public class ScheduleListPlugin extends AbstractListPlugin {
for (ListSelectedRow row : rows) { for (ListSelectedRow row : rows) {
Long pk = (Long) row.getPrimaryKeyValue(); Long pk = (Long) row.getPrimaryKeyValue();
DynamicObject bill = BusinessDataServiceHelper.loadSingle(pk, "psd_schedulebill"); DynamicObject bill = BusinessDataServiceHelper.loadSingle(pk, "psd_schedulebill");
String action = "04".equals(status)? "退单" : "作废";
if (bill != null) { if (bill != null) {
//来源SAP
String shjhSapuniquevalue = bill.getString("shjh_sapuniquevalue"); String shjhSapuniquevalue = bill.getString("shjh_sapuniquevalue");
if (shjhSapuniquevalue != null && !shjhSapuniquevalue.isEmpty()) { if (shjhSapuniquevalue != null && !shjhSapuniquevalue.isEmpty()) {
JSONArray IT_INPUT = createInputJSONArray(bill, status); JSONArray IT_INPUT = createInputJSONArray(bill, status);
JSONObject jsonObjects = unlocked_status(IT_INPUT, bill.getString("billno")); JSONObject jsonObjects = unlocked_status(IT_INPUT, bill.getString("billno"));
String code = jsonObjects.getString("code"); String code = jsonObjects.getString("code");
String action = "04".equals(status)? "退单" : "作废";
if (!"0".equals(code)) { if (!"0".equals(code)) {
log.info("付款排程单:" + bill.getString("billno") + "状态" + action + "失败:" + jsonObjects.getString("msg")); log.info("付款排程单:" + bill.getString("billno") + "状态(SAP)" + action + "失败:" + jsonObjects.getString("msg"));
} else { } else {
log.info("付款排程单:" + bill.getString("billno") + "状态" + action + "成功"); log.info("付款排程单:" + bill.getString("billno") + "状态(SAP)" + action + "成功");
} }
return;
}
//若来源为费控,调用费控状态修改接口
String fkbillid = bill.getString("shjh_fkbillid");//获取费控单据表头ID
if (fkbillid != null && !fkbillid.isEmpty()) {
//先付后记其他付款劳务报销单SAP会员退卡单回写付款状态
JSONObject jsonObjects = backpayment_status(createInputJSONArrays(bill),bill.getString("billno"));
String code = (String)jsonObjects.get("code");
if (!"0".equals(code)) {
log.info("付款排程单:" + bill.getString("billno") + "状态(FK)" + action + "失败:" + jsonObjects.getString("msg"));
} else {
log.info("付款排程单:" + bill.getString("billno") + "状态(FK)" + action + "成功");
}
return;
} }
} }
} }
} }
/**
* SAP接口参数
* @param bill
* @param status
* @return
*/
private JSONArray createInputJSONArray(DynamicObject bill, String status) { private JSONArray createInputJSONArray(DynamicObject bill, String status) {
JSONArray IT_INPUT = new JSONArray(); JSONArray IT_INPUT = new JSONArray();
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
@ -77,4 +102,51 @@ public class ScheduleListPlugin extends AbstractListPlugin {
IT_INPUT.add(jsonObject); IT_INPUT.add(jsonObject);
return IT_INPUT; return IT_INPUT;
} }
/**
* 费控接口参数
* @param bill
* @return
*/
private JSONObject createInputJSONArrays(DynamicObject bill) {
JSONObject data = new JSONObject();
JSONArray datas = new JSONArray();
JSONObject jsonObject = new JSONObject();
String CompanyCode = "";
String CompanyName = "";
DynamicObject openorg = bill.getDynamicObject("openorg");//核算组织
if (null != openorg) {
CompanyCode = openorg.getString("number");
CompanyName = openorg.getString("name");
}
jsonObject.put("CompanyCode", CompanyCode);//公司编码
jsonObject.put("CompanyName", CompanyName);//公司名称
jsonObject.put("BillHeaderID", bill.getString("shjh_fkbillid"));//费控单据头ID
jsonObject.put("DetailID", bill.getString("shjh_fkentryid"));//费控分录明细ID
String PaymentBank = "";
DynamicObject payerbank = bill.getDynamicObject("payerbank");
if (null != payerbank) {
PaymentBank = payerbank.getString("name");
}
jsonObject.put("PaymentBank", PaymentBank);//付款银行
//付款状态 败笔退回-5取消付款-20付款失败-10部分付款失败30付款成功20部分付款成功25
// 处理中15待付款10未付款0未推送-99已修改-100
jsonObject.put("PaymentStatus", "-5");
String PaymentAccNum = "";
DynamicObject payeracctbank = bill.getDynamicObject("payeracctbank");//银行账号
if (null != payeracctbank) {
PaymentAccNum = payeracctbank.getString("bankaccountnumber");
}
jsonObject.put("PaymentAccNum", PaymentAccNum);//付款账号
Date paydate = bill.getDate("paydate");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String PaymentDate = format.format(paydate);
jsonObject.put("PaymentDate", PaymentDate);//付款时间
jsonObject.put("JDBillId", ""+bill.getPkValue());//金蝶单据ID
jsonObject.put("JDBillCode", bill.getString("billno"));//金蝶单据编码
datas.add(jsonObject);
data.put("data", datas);
return data;
}
} }

View File

@ -8,7 +8,6 @@ import kd.bos.entity.operate.result.OperateErrorInfo;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.args.BeforeOperationArgs; import kd.bos.entity.plugin.args.BeforeOperationArgs;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
import static shjh.jhzj7.fi.fi.utils.SapUtils.unlocked_status; import static shjh.jhzj7.fi.fi.utils.SapUtils.unlocked_status;

View File

@ -11,6 +11,10 @@ import kd.bos.logging.LogFactory;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
import java.text.SimpleDateFormat;
import java.util.Date;
import static shjh.jhzj7.fi.fi.utils.SapUtils.backpayment_status;
import static shjh.jhzj7.fi.fi.utils.SapUtils.unlocked_status; import static shjh.jhzj7.fi.fi.utils.SapUtils.unlocked_status;
/** /**
@ -80,9 +84,59 @@ public class PayrequestBillOperation extends AbstractOperationServicePlugIn impl
JSONObject jsonObjects = unlocked_status(IT_INPUT,bill.getString("billno")); JSONObject jsonObjects = unlocked_status(IT_INPUT,bill.getString("billno"));
String code = (String)jsonObjects.get("code"); String code = (String)jsonObjects.get("code");
if (!"0".equals(code)) { if (!"0".equals(code)) {
log.info("付款申请单:"+bill.getString("billno")+"状态关闭失败:" + jsonObject.get("msg")); log.info("付款申请单:"+bill.getString("billno")+"状态关闭(SAP)失败:" + jsonObject.get("msg"));
}else { }else {
log.info("付款申请单:"+bill.getString("billno")+"状态关闭成功"); log.info("付款申请单:"+bill.getString("billno")+"状态关闭(SAP)成功");
}
}
//若来源为费控,调用费控状态修改接口
String fkbillid = bill.getString("shjh_fkbillid");//获取费控单据表头ID
if (fkbillid != null && !fkbillid.isEmpty()) {
JSONObject data = new JSONObject();
JSONArray datas = new JSONArray();
JSONObject jsonObject = new JSONObject();
String CompanyCode = "";
String CompanyName = "";
DynamicObject openorg = bill.getDynamicObject("openorg");//核算组织
if (null != openorg) {
CompanyCode = openorg.getString("number");
CompanyName = openorg.getString("name");
}
jsonObject.put("CompanyCode", CompanyCode);//公司编码
jsonObject.put("CompanyName", CompanyName);//公司名称
jsonObject.put("BillHeaderID", bill.getString("shjh_fkbillid"));//费控单据头ID
jsonObject.put("DetailID", bill.getString("shjh_fkentryid"));//费控分录明细ID
String PaymentBank = "";
DynamicObject payerbank = bill.getDynamicObject("payerbank");
if (null != payerbank) {
PaymentBank = payerbank.getString("name");
}
jsonObject.put("PaymentBank", PaymentBank);//付款银行
//付款状态 败笔退回-5取消付款-20付款失败-10部分付款失败30付款成功20部分付款成功25
// 处理中15待付款10未付款0未推送-99已修改-100
jsonObject.put("PaymentStatus", "-5");
String PaymentAccNum = "";
DynamicObject payeracctbank = bill.getDynamicObject("payeracctbank");//银行账号
if (null != payeracctbank) {
PaymentAccNum = payeracctbank.getString("bankaccountnumber");
}
jsonObject.put("PaymentAccNum", PaymentAccNum);//付款账号
Date paydate = bill.getDate("paydate");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String PaymentDate = format.format(paydate);
jsonObject.put("PaymentDate", PaymentDate);//付款时间
jsonObject.put("JDBillId", ""+bill.getPkValue());//金蝶单据ID
jsonObject.put("JDBillCode", bill.getString("billno"));//金蝶单据编码
datas.add(jsonObject);
data.put("data", datas);
//先付后记其他付款劳务报销单SAP会员退卡单回写付款状态
JSONObject jsonObjects = backpayment_status(data,bill.getString("billno"));
String code = (String)jsonObjects.get("code");
if (!"0".equals(code)) {
log.info("付款申请单:"+bill.getString("billno")+"状态关闭失败(FK)" + jsonObjects.get("msg"));
}else {
log.info("付款申请单:"+bill.getString("billno")+"状态关闭(FK)成功");
} }
} }
} }

View File

@ -0,0 +1,92 @@
package shjh.jhzj7.fi.fi.plugin.task;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import kd.bos.context.RequestContext;
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.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.schedule.executor.AbstractTask;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import static shjh.jhzj7.fi.fi.utils.SapUtils.backpayment_status;
/**
* 付款单定时调用费控接口更新状态
*/
public class UpdateFkStatusTask extends AbstractTask implements Plugin {
private final static Log logger = LogFactory.getLog(UpdateFkStatusTask.class);
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
/**
* 单据状态:已付款
* 是否调用过费控更新状态接口 =
*/
QFilter q1 = new QFilter("billstatus", QCP.equals, "D");//单据状态:已付款
QFilter q2 = new QFilter("shjh_isupdatefkstatus", QCP.equals, false);//是否调用过费控更新状态接口 =
DynamicObject[] paybills = BusinessDataServiceHelper.load("cas_paybill", "id", new QFilter[]{q1, q2});
for (DynamicObject bill : paybills) {
bill = BusinessDataServiceHelper.loadSingle(bill.getPkValue(), "cas_paybill");
JSONObject data = new JSONObject();
JSONArray datas = new JSONArray();
JSONObject jsonObject = new JSONObject();
String CompanyCode = "";
String CompanyName = "";
DynamicObject openorg = bill.getDynamicObject("openorg");//核算组织
if (null != openorg) {
CompanyCode = openorg.getString("number");
CompanyName = openorg.getString("name");
}
jsonObject.put("CompanyCode", CompanyCode);//公司编码
jsonObject.put("CompanyName", CompanyName);//公司名称
jsonObject.put("BillHeaderID", bill.getString("shjh_fkbillid"));//费控单据头ID
jsonObject.put("DetailID", bill.getString("shjh_fkentryid"));//费控分录明细ID
String PaymentBank = "";
DynamicObject payerbank = bill.getDynamicObject("payerbank");
if (null != payerbank) {
PaymentBank = payerbank.getString("name");
}
jsonObject.put("PaymentBank", PaymentBank);//付款银行
//付款状态 败笔退回-5取消付款-20付款失败-10部分付款失败30付款成功20部分付款成功25
// 处理中15待付款10未付款0未推送-99已修改-100
jsonObject.put("PaymentStatus", "20");
String PaymentAccNum = "";
DynamicObject payeracctbank = bill.getDynamicObject("payeracctbank");//银行账号
if (null != payeracctbank) {
PaymentAccNum = payeracctbank.getString("bankaccountnumber");
}
jsonObject.put("PaymentAccNum", PaymentAccNum);//付款账号
Date paydate = bill.getDate("paydate");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String PaymentDate = format.format(paydate);
jsonObject.put("PaymentDate", PaymentDate);//付款时间
jsonObject.put("JDBillId", ""+bill.getPkValue());//金蝶单据ID
jsonObject.put("JDBillCode", bill.getString("billno"));//金蝶单据编码
datas.add(jsonObject);
data.put("data", datas);
//先付后记其他付款劳务报销单SAP会员退卡单回写付款状态
JSONObject jsonObjects = backpayment_status(data,bill.getString("billno"));
String code = (String)jsonObjects.get("code");
if (!"0".equals(code)) {
logger.info("付款单:"+bill.getString("billno")+"付款成功:状态同步失败(FK)" + jsonObjects.get("msg"));
}else {
//修改 是否调用过费控更新状态接口 =
bill.set("shjh_isupdatefkstatus", true);
SaveServiceHelper.save(new DynamicObject[]{bill});
logger.info("付款单:"+bill.getString("billno")+"付款成功:状态同步成功(FK)");
}
}
}
}

View File

@ -52,6 +52,11 @@ public class SapUtils {
private static final String API_METHOD4 = "SAP收款凭证清账状态查询接口"; private static final String API_METHOD4 = "SAP收款凭证清账状态查询接口";
private static final String INTERFACE_ID4 = "ReceiptVoucherClearingStatusCheck"; private static final String INTERFACE_ID4 = "ReceiptVoucherClearingStatusCheck";
private static final String Apimenthod4 = "先付后记其他付款、劳务报销单、SAP会员退卡单回写付款状态";
private static final String interfaceID4 = "WritePaymentDetailStatus";//识别被调接口并进行路由
public static final String backpaymentUrl = "https://hipint-stg.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//测试环境(先付后记其他付款劳务报销单SAP会员退卡单回写付款状态)
// public static final String backpaymentUrl = "https://hipint.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//正式环境
/** /**
* 测试地址 * 测试地址
*/ */
@ -220,6 +225,49 @@ public class SapUtils {
return pendingsBody; return pendingsBody;
} }
/**
* 先付后记其他付款劳务报销单SAP会员退卡单回写付款状态
*/
public static JSONObject backpayment_status(JSONObject data, String billno) {
Map<String, Object> thirdPartyMap = new HashMap<>();
thirdPartyMap.put("interfaceID", interfaceID4);
thirdPartyMap.put("receiverID", receiverID2);
thirdPartyMap.put("URL", backpaymentUrl);
thirdPartyMap.put("billno", billno);
// 获取当前日期和时间
LocalDateTime date = LocalDateTime.now();
// 定义日期时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
// 格式化当前日期和时间
String dates = date.format(formatter);
thirdPartyMap.put("createdatetime", dates);
// 组装请求体
JSONObject backpaymentBody = backpaymentBody(data);
// 发送请求并处理响应
return processRequest(backpaymentBody, thirdPartyMap, Apimenthod4);
}
/**
* 生成代扣款记账单接口组装请求体:
*
* @return 请求体的 JSON 对象
*/
private static JSONObject backpaymentBody(JSONObject data) {
// 获取当前日期和时间
LocalDateTime date = LocalDateTime.now();
// 定义日期时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
// 格式化当前日期和时间
String dates = date.format(formatter);
//组装请求体
JSONObject pendingsBody = new JSONObject();
pendingsBody.put("rootContextID", "" + System.currentTimeMillis());//todo:唯一事务ID采用UUID或其他强唯一性ID
pendingsBody.put("requestTime", dates);//请求时间,格式为yyyy-MM-dd HH:mm:ss.SSS
pendingsBody.put("data", data);
return pendingsBody;
}
/** /**
* 发送请求并处理响应 * 发送请求并处理响应
* *

View File

@ -26,19 +26,16 @@ import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter; import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import shjh.jhzj7.fi.fi.utils.JhzjUtils; import shjh.jhzj7.fi.fi.utils.JhzjUtils;
import shjh.jhzj7.fi.fi.webapi.model.ApplyAdjustBillModel; import shjh.jhzj7.fi.fi.webapi.model.ApplyAdjustBillModel;
import javax.validation.Valid; import javax.validation.Valid;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import static kd.bos.login.utils.DateUtils.formatDate;
import static shjh.jhzj7.fi.fi.plugin.form.SappzFormPlugin.*; import static shjh.jhzj7.fi.fi.plugin.form.SappzFormPlugin.*;
import static shjh.jhzj7.fi.fi.utils.SapUtils.vouchers_payable; import static shjh.jhzj7.fi.fi.utils.SapUtils.vouchers_payable;
import static shjh.jhzj7.fi.fi.webapi.ApplyBillControler.*; import static shjh.jhzj7.fi.fi.webapi.ApplyBillControler.*;

View File

@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.drew.lang.annotations.NotNull; import com.drew.lang.annotations.NotNull;
import kd.bos.api.client.ApiResult; import kd.bos.api.client.ApiResult;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.logging.Log; import kd.bos.logging.Log;
import kd.bos.logging.LogFactory; import kd.bos.logging.LogFactory;
@ -89,7 +90,15 @@ public class PayreceiptQueryControler {
customApiResult.getHeaders().put("kdPayBillID",kdPayBillID); customApiResult.getHeaders().put("kdPayBillID",kdPayBillID);
customApiResult.getHeaders().put("fkBillID",fkBillID); customApiResult.getHeaders().put("fkBillID",fkBillID);
customApiResult.getHeaders().put("fkEntryID",fkEntryID); customApiResult.getHeaders().put("fkEntryID",fkEntryID);
customApiResult.getHeaders().put("receipturl","url");//todo:url待确认 //todo:url待确认
RequestContext requestContext = RequestContext.get();
String clientFullContextPath = requestContext.getClientFullContextPath();//http://127.0.0.1:8881/ierp/
String globalSessionId = requestContext.getGlobalSessionId();//2162562979827025920_uIw8k6LSDffGGXcNLur8vqBPSXGNOIQ2BHoN53tSU1FagJQbARpXMSJdt6Wl1nER56l4J8Mmgj4XjltiCtnQ3d1X5UsGy72g7zUi02
System.out.println("clientFullContextPath:" + clientFullContextPath+",globalSessionId:"+globalSessionId);
// https://ip:port/ierp/index.html?formId=er_tripreqbill&pkId=721810009540800512
// http://127.0.0.1:8881/ierp/kapi/v2/shjh/base/payreceipt_query
String url = clientFullContextPath + "index.html?formId=cas_paybill&pkId=" + kdPayBillID;
customApiResult.getHeaders().put("receipturl",url);
} }
return CustomApiResult.success(customApiResult); return CustomApiResult.success(customApiResult);