parent
533be5bc9a
commit
c094710ceb
|
|
@ -36,6 +36,28 @@ public class PaybillOperation extends AbstractOperationServicePlugIn implements
|
|||
if ("pushfk".equals(operationKey)) {
|
||||
DynamicObject[] dataEntities = e.getDataEntities();
|
||||
for (DynamicObject bill : dataEntities) {
|
||||
bill = BusinessDataServiceHelper.loadSingle(bill.getPkValue(), "cas_paybill");
|
||||
if (null != bill) {
|
||||
DynamicObject paymentidentify = bill.getDynamicObject("paymentidentify");//付款标识
|
||||
if (null != paymentidentify) {
|
||||
if (!"FKBS02".equals(paymentidentify.getString("number"))) {
|
||||
addErrorInfo(bill, "付款标识不为被动付款");
|
||||
}
|
||||
} else {
|
||||
addErrorInfo(bill, "付款标识为空无法判断被动主动");
|
||||
}
|
||||
DynamicObject shjhBizsmall = bill.getDynamicObject("shjh_bizsmall");
|
||||
if (null != shjhBizsmall) {
|
||||
if (!shjhBizsmall.getBoolean("shjh_tsfk")) {
|
||||
addErrorInfo(bill, "【业务小类】中【是否推送费控系统】=否");
|
||||
}
|
||||
} else {
|
||||
addErrorInfo(bill, "业务小类为空");
|
||||
}
|
||||
if (bill.getBoolean("shjh_ispushfk")) {
|
||||
addErrorInfo(bill, "付款单需推送费控系统 = 是");
|
||||
}
|
||||
}
|
||||
JSONObject data = new JSONObject();
|
||||
// 构建header
|
||||
JSONObject header = buildHeader(bill);
|
||||
|
|
@ -46,11 +68,7 @@ public class PaybillOperation extends AbstractOperationServicePlugIn implements
|
|||
JSONObject jsonObject = withholding_billing(data, bill.getString("billno"));
|
||||
String code = (String) jsonObject.get("code");
|
||||
if (!"0".equals(code)) {
|
||||
OperateErrorInfo operateErrorInfo = new OperateErrorInfo();
|
||||
operateErrorInfo.setMessage("付款单:"+bill.getString("billno")+"推送费控失败:" + jsonObject.get("msg"));
|
||||
operateErrorInfo.setErrorLevel(ErrorLevel.Error.name());
|
||||
operateErrorInfo.setPkValue(bill.getPkValue());
|
||||
this.operationResult.addErrorInfo(operateErrorInfo);
|
||||
addErrorInfo(bill, "推送费控失败:" + jsonObject.get("msg"));
|
||||
} else {
|
||||
bill.set("shjh_ispushfk", true);
|
||||
SaveServiceHelper.save(new DynamicObject[]{bill});
|
||||
|
|
@ -60,6 +78,15 @@ public class PaybillOperation extends AbstractOperationServicePlugIn implements
|
|||
}
|
||||
}
|
||||
|
||||
// 提取的方法
|
||||
private void addErrorInfo(DynamicObject bill, String errorMsg) {
|
||||
OperateErrorInfo operateErrorInfo = new OperateErrorInfo();
|
||||
operateErrorInfo.setMessage("付款单:" + bill.getString("billno") + "推送费控失败:" + errorMsg);
|
||||
operateErrorInfo.setErrorLevel(ErrorLevel.Error.name());
|
||||
operateErrorInfo.setPkValue(bill.getPkValue());
|
||||
this.operationResult.addErrorInfo(operateErrorInfo);
|
||||
}
|
||||
|
||||
// 构建header方法
|
||||
public static JSONObject buildHeader(DynamicObject bill) {
|
||||
bill = BusinessDataServiceHelper.loadSingle(bill.getPkValue(), "cas_paybill");
|
||||
|
|
|
|||
|
|
@ -2,42 +2,67 @@ package shjh.jhzj7.fi.fi.plugin.task;
|
|||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.sap.db.jdbc.packet.ErrorLevel;
|
||||
import kd.bos.context.RequestContext;
|
||||
import kd.bos.dataentity.OperateOption;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.entity.operate.result.OperateErrorInfo;
|
||||
import kd.bos.entity.operate.OperateOptionConst;
|
||||
import kd.bos.entity.operate.result.OperationResult;
|
||||
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.OperationServiceHelper;
|
||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||
import kd.sdk.plugin.Plugin;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
|
||||
import static shjh.jhzj7.fi.fi.plugin.operate.PaybillOperation.buildBody;
|
||||
import static shjh.jhzj7.fi.fi.plugin.operate.PaybillOperation.buildHeader;
|
||||
import static shjh.jhzj7.fi.fi.utils.SapUtils.withholding_billing;
|
||||
|
||||
public class PaybillPushFkTask extends AbstractTask implements Plugin {
|
||||
private final static Log logger = LogFactory.getLog(PaybillPushFkTask.class);
|
||||
|
||||
|
||||
@Override
|
||||
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
||||
DynamicObject[] paybills = BusinessDataServiceHelper.load("cas_paybill", "id", null);
|
||||
for (DynamicObject paybill : paybills) {
|
||||
JSONObject data = new JSONObject();
|
||||
// 构建header
|
||||
JSONObject header = buildHeader(paybill);
|
||||
// 构建body
|
||||
JSONArray body = buildBody(paybill);
|
||||
data.put("header", header);
|
||||
data.put("body", body);
|
||||
JSONObject jsonObject = withholding_billing(data, paybill.getString("billno"));
|
||||
String code = (String)jsonObject.get("code");
|
||||
if (!"0".equals(code)) {
|
||||
//todo:失败:记录错误信息
|
||||
|
||||
/**
|
||||
* 【付款标识】=被动付款时显示。(付款标识_paymentidentify)
|
||||
* 当【业务小类】中【是否推送费控系统】=是时,
|
||||
* 该付款单需推送费控系统,推送后,标记此字段为是。
|
||||
*/
|
||||
QFilter q1 = new QFilter("paymentidentify.number", QCP.equals, "FKBS02");//付款标识为被动付款
|
||||
QFilter q2 = new QFilter("shjh_bizsmall.shjh_tsfk", QCP.equals, true);//【业务小类】中【是否推送费控系统】=是
|
||||
QFilter q3 = new QFilter("shjh_ispushfk", QCP.equals, false);//付款单需推送费控系统 = 否
|
||||
DynamicObject[] paybills = BusinessDataServiceHelper.load("cas_paybill", "id", new QFilter[]{q1, q2, q3});
|
||||
if (paybills.length!=0){
|
||||
ArrayList<Long> ids = new ArrayList<>();
|
||||
for (DynamicObject dynamicObject : paybills) {
|
||||
ids.add(dynamicObject.getLong("id"));
|
||||
}
|
||||
Map<Object, DynamicObject> recBillMap = BusinessDataServiceHelper.loadFromCache(ids.toArray(), "cas_paybill");
|
||||
OperateOption operateOption = OperateOption.create();
|
||||
// 不执行警告级别校验器
|
||||
operateOption.setVariableValue(OperateOptionConst.IGNOREWARN, String.valueOf(true));
|
||||
// 不显示交互提示,自动执行到底
|
||||
operateOption.setVariableValue(OperateOptionConst.IGNOREINTERACTION, String.valueOf(true));
|
||||
// 全部校验通过才保存
|
||||
operateOption.setVariableValue(OperateOptionConst.STRICTVALIDATION, String.valueOf(true));
|
||||
//同一个用户在多个界面操作同一张,也不允许操作
|
||||
operateOption.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, String.valueOf(true));
|
||||
for (DynamicObject dynamicObject : recBillMap.values()) {
|
||||
// 注意:executeOperate 需要一个数组形式的 DynamicObject[]
|
||||
DynamicObject[] billArray = new DynamicObject[]{dynamicObject};
|
||||
OperationResult operationResult = OperationServiceHelper.executeOperate("pushfk", "cas_paybill", billArray, operateOption);
|
||||
// 可以根据需要处理 operationResult,例如检查是否成功、获取返回值等
|
||||
if (operationResult.isSuccess()) {
|
||||
logger.info("执行 pushfk 失败,单据编号:" + dynamicObject.getPkValue());
|
||||
} else {
|
||||
paybill.set("shjh_ispushfk",true);
|
||||
SaveServiceHelper.save(new DynamicObject[]{paybill});
|
||||
logger.error(operationResult.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,123 @@
|
|||
package shjh.jhzj7.fi.fi.webapi;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONException;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.drew.lang.annotations.NotNull;
|
||||
import kd.bos.api.client.ApiResult;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.logging.Log;
|
||||
import kd.bos.logging.LogFactory;
|
||||
import kd.bos.openapi.common.custom.annotation.ApiController;
|
||||
import kd.bos.openapi.common.custom.annotation.ApiPostMapping;
|
||||
import kd.bos.openapi.common.custom.annotation.ApiRequestBody;
|
||||
import kd.bos.openapi.common.result.CustomApiResult;
|
||||
import kd.bos.orm.query.QCP;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import shjh.jhzj7.fi.fi.utils.JhzjUtils;
|
||||
import shjh.jhzj7.fi.fi.webapi.model.PaybillVoucherNumModel;
|
||||
import shjh.jhzj7.fi.fi.webapi.model.PayreceiptQueryModel;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import static shjh.jhzj7.fi.fi.webapi.ApplyAdjustBillControler.loadOrgByCompanyNum;
|
||||
|
||||
/**
|
||||
* 付款电子回单查询接口
|
||||
*/
|
||||
@ApiController(value = "PayreceiptQueryControler", desc = "付款电子回单查询接口,自定义插件")
|
||||
public class PayreceiptQueryControler {
|
||||
|
||||
private static final String Apimenthod = "付款电子回单查询接口";
|
||||
private static final Log log = LogFactory.getLog(PayreceiptQueryControler.class);
|
||||
private static final String apimenthod = "/payreceipt_query";
|
||||
|
||||
@ApiPostMapping(value = apimenthod, desc = "付款电子回单查询接口")
|
||||
public CustomApiResult<ApiResult> paybill_vouchernum(@NotNull @Valid @ApiRequestBody(value = "入参json格式数据") PayreceiptQueryModel PayreceiptQuerybill) {
|
||||
|
||||
//select * from T_CAS_PaymentBill where fbillno = 'FKZJ2025030006'; 2168985504052162560
|
||||
//select * from t_org_org where fid = 2116753963226241024;
|
||||
JSONObject json_body;
|
||||
String jsonBodyString = null;
|
||||
try {
|
||||
// 解析入参,如果格式不正确,日志记录,并反馈esb7.4.1
|
||||
json_body = (JSONObject) JSON.toJSON(PayreceiptQuerybill);
|
||||
jsonBodyString = JSON.toJSONString(json_body);
|
||||
} catch (JSONException e) {
|
||||
return handleErrorAndReturn("付款电子回单查询接口入参异常:" + e.getMessage(), Apimenthod, null);
|
||||
}
|
||||
//返回值
|
||||
ApiResult customApiResult = new ApiResult("");
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
|
||||
List<PayreceiptQueryModel.EntryBean> items = PayreceiptQuerybill.getItems();
|
||||
for (PayreceiptQueryModel.EntryBean item : items) {
|
||||
String companyNum = item.getCompanyNum();//公司编号
|
||||
String kdPayBillID = item.getKdPayBillID();//金蝶付款单ID
|
||||
String fkBillID = item.getFkBillID();//费控单据主表ID
|
||||
String fkEntryID = item.getFkEntryID();//费控单据分录ID
|
||||
String fkBillNumber = item.getFkBillNumber();//费控单据编号
|
||||
|
||||
DynamicObject org = loadOrgByCompanyNum(companyNum);
|
||||
if (org == null) {
|
||||
return handleErrorAndReturn("同步失败,费控单据编号:" + fkBillNumber + "的组织编码不存在", fkBillNumber, jsonBodyString);
|
||||
}
|
||||
|
||||
if (kdPayBillID == null || kdPayBillID.isEmpty()) {
|
||||
return handleErrorAndReturn("同步失败, kdPayBillID 为空或未设置", fkBillNumber, jsonBodyString);
|
||||
}
|
||||
QFilter q1 = null;
|
||||
try {
|
||||
Long kdPayBillIDLong = Long.valueOf(kdPayBillID);
|
||||
q1 = new QFilter("id", QCP.equals, kdPayBillIDLong);
|
||||
} catch (NumberFormatException e) {
|
||||
return handleErrorAndReturn("同步失败, kdPayBillID 格式不正确: " + kdPayBillID, fkBillNumber, jsonBodyString);
|
||||
}
|
||||
QFilter q2 = new QFilter("openorg.number", QCP.equals, companyNum);
|
||||
QFilter q3 = new QFilter("shjh_fkbillid", QCP.equals, fkBillID);
|
||||
QFilter q4 = new QFilter("shjh_fkentryid", QCP.equals, fkEntryID);
|
||||
DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{q1, q2, q3, q4});
|
||||
if (null == paybill) {
|
||||
return handleErrorAndReturn("同步失败:付款单不存在", fkEntryID, jsonBodyString);
|
||||
}
|
||||
|
||||
customApiResult.setHeaders(map);
|
||||
customApiResult.getHeaders().put("companyNum",companyNum);
|
||||
customApiResult.getHeaders().put("kdPayBillID",kdPayBillID);
|
||||
customApiResult.getHeaders().put("fkBillID",fkBillID);
|
||||
customApiResult.getHeaders().put("fkEntryID",fkEntryID);
|
||||
customApiResult.getHeaders().put("receipturl","url");//todo:url待确认
|
||||
}
|
||||
|
||||
return CustomApiResult.success(customApiResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理错误并返回失败结果
|
||||
*
|
||||
* @param errorMessage 错误信息
|
||||
* @param fkBillNum 费控单据编号
|
||||
* @param jsonBodyString 入参JSON字符串
|
||||
* @return 失败的CustomApiResult对象
|
||||
*/
|
||||
public static CustomApiResult<ApiResult> handleErrorAndReturn(String errorMessage, String fkBillNum, String jsonBodyString) {
|
||||
handleError(errorMessage, fkBillNum, jsonBodyString);
|
||||
return CustomApiResult.fail("400", errorMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理错误日志
|
||||
*
|
||||
* @param errorMessage 错误信息
|
||||
* @param fkBillNum 费控单据编号
|
||||
* @param jsonBodyString 入参JSON字符串
|
||||
*/
|
||||
public static void handleError(String errorMessage, String fkBillNum, String jsonBodyString) {
|
||||
log.error(errorMessage);
|
||||
// 可以添加更多的错误处理逻辑,如记录到数据库等
|
||||
JhzjUtils.saveLog(fkBillNum, Apimenthod, jsonBodyString, errorMessage, false, "API");
|
||||
}
|
||||
}
|
||||
|
|
@ -49,7 +49,7 @@ public class VouchernumControler {
|
|||
json_body = (JSONObject) JSON.toJSON(paybillVouchertbill);
|
||||
jsonBodyString = JSON.toJSONString(json_body);
|
||||
} catch (JSONException e) {
|
||||
return handleErrorAndReturn("费控-SAP付款凭证号接口入参异常:" + e.getMessage(), "费控-SAP付款凭证号接口", null);
|
||||
return handleErrorAndReturn("费控-SAP付款凭证号接口入参异常:" + e.getMessage(), Apimenthod, null);
|
||||
}
|
||||
List<PaybillVoucherNumModel.EntryBean> items = paybillVouchertbill.getItems();
|
||||
for (PaybillVoucherNumModel.EntryBean item : items) {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import java.util.List;
|
|||
@ApiModel
|
||||
public class PaybillVoucherNumModel {
|
||||
|
||||
@ApiParam(value="明细数据集合",required=false,position=1)
|
||||
@ApiParam(value="明细数据集合",required=true,position=1)
|
||||
private List<PaybillVoucherNumModel.EntryBean> items;
|
||||
@ApiModel
|
||||
public static class EntryBean implements Serializable {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,77 @@
|
|||
package shjh.jhzj7.fi.fi.webapi.model;
|
||||
|
||||
|
||||
import kd.bos.openapi.common.custom.annotation.ApiModel;
|
||||
import kd.bos.openapi.common.custom.annotation.ApiParam;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@ApiModel
|
||||
public class PayreceiptQueryModel {
|
||||
|
||||
@ApiParam(value="明细数据集合",required=true,position=1)
|
||||
private List<PayreceiptQueryModel.EntryBean> items;
|
||||
|
||||
@ApiModel
|
||||
public static class EntryBean implements Serializable {
|
||||
@ApiParam(value = "公司编号", required = true, position = 1)
|
||||
private String companyNum;
|
||||
@ApiParam(value = "金蝶付款单ID", required = true, position = 2)
|
||||
private String kdPayBillID;
|
||||
@ApiParam(value = "费控单据主表ID", required = true, position = 3)
|
||||
private String fkBillID;
|
||||
@ApiParam(value = "费控单据分录ID", required = true, position = 4)
|
||||
private String fkEntryID;
|
||||
@ApiParam(value = "费控单据编号", required = true, position = 5)
|
||||
private String fkBillNumber;
|
||||
|
||||
public String getCompanyNum() {
|
||||
return companyNum;
|
||||
}
|
||||
|
||||
public void setCompanyNum(String companyNum) {
|
||||
this.companyNum = companyNum;
|
||||
}
|
||||
|
||||
public String getKdPayBillID() {
|
||||
return kdPayBillID;
|
||||
}
|
||||
|
||||
public void setKdPayBillID(String kdPayBillID) {
|
||||
this.kdPayBillID = kdPayBillID;
|
||||
}
|
||||
|
||||
public String getFkBillID() {
|
||||
return fkBillID;
|
||||
}
|
||||
|
||||
public void setFkBillID(String fkBillID) {
|
||||
this.fkBillID = fkBillID;
|
||||
}
|
||||
|
||||
public String getFkEntryID() {
|
||||
return fkEntryID;
|
||||
}
|
||||
|
||||
public void setFkEntryID(String fkEntryID) {
|
||||
this.fkEntryID = fkEntryID;
|
||||
}
|
||||
|
||||
public String getFkBillNumber() {
|
||||
return fkBillNumber;
|
||||
}
|
||||
|
||||
public void setFkBillNumber(String fkBillNumber) {
|
||||
this.fkBillNumber = fkBillNumber;
|
||||
}
|
||||
}
|
||||
|
||||
public List<EntryBean> getItems() {
|
||||
return items;
|
||||
}
|
||||
|
||||
public void setItems(List<EntryBean> items) {
|
||||
this.items = items;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue