1.(费控-SAP付款凭证号接口,自定义插件)
2.(付款单确认付款生成_银行日记账单携带SAP应付凭证号) --s
This commit is contained in:
		
							parent
							
								
									2358d450f0
								
							
						
					
					
						commit
						31be8eb1bd
					
				|  | @ -0,0 +1,34 @@ | |||
| package shjh.jhzj7.fi.fi.plugin.operate; | ||||
| 
 | ||||
| import kd.bos.dataentity.entity.DynamicObject; | ||||
| import kd.bos.entity.plugin.AbstractOperationServicePlugIn; | ||||
| import kd.bos.entity.plugin.args.AfterOperationArgs; | ||||
| import kd.bos.orm.query.QCP; | ||||
| import kd.bos.orm.query.QFilter; | ||||
| import kd.bos.servicehelper.BusinessDataServiceHelper; | ||||
| import kd.bos.servicehelper.operation.SaveServiceHelper; | ||||
| import kd.sdk.plugin.Plugin; | ||||
| 
 | ||||
| /** | ||||
|  * 付款单_付款操作 | ||||
|  * shjh_cas_paybill_ext | ||||
|  */ | ||||
| public class PaybillPayOperation extends AbstractOperationServicePlugIn implements Plugin { | ||||
| 
 | ||||
|     @Override | ||||
|     public void afterExecuteOperationTransaction(AfterOperationArgs e) { | ||||
|         super.afterExecuteOperationTransaction(e); | ||||
|         //付款操作之后查询有无单号为该付款单(cas_paybill)的银行日记账单(cas_bankjournal) | ||||
|         DynamicObject[] dataEntities = e.getDataEntities(); | ||||
|         for (DynamicObject bill : dataEntities) { | ||||
|             bill = BusinessDataServiceHelper.loadSingle(bill.getPkValue(),"cas_paybill"); | ||||
| 
 | ||||
|             DynamicObject bankjournal = BusinessDataServiceHelper.loadSingle("cas_bankjournal", new QFilter("billno", | ||||
|                     QCP.equals, bill.getString("billno")).toArray()); | ||||
|             if (null != bankjournal) { | ||||
|                 bankjournal.set("shjh_credentialnum",bill.getString("shjh_credentialnum")); | ||||
|                 SaveServiceHelper.save(new DynamicObject[]{bankjournal}); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -141,7 +141,7 @@ public class SapUtils { | |||
|         // 组装请求体 | ||||
|         JSONObject withholdingBody = withholdingBody(data); | ||||
|         // 发送请求并处理响应 | ||||
|         return processRequest(withholdingBody, thirdPartyMap, Apimenthod2); | ||||
|         return processRequest(withholdingBody, thirdPartyMap, Apimenthod3); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|  |  | |||
|  | @ -369,11 +369,10 @@ public class ApplyAdjustBillControler { | |||
| 
 | ||||
|     /** | ||||
|      * 根据公司编号加载组织信息 | ||||
|      * | ||||
|      * @param companyNum 公司编号 | ||||
|      * @return 组织信息的动态对象 | ||||
|      */ | ||||
|     private DynamicObject loadOrgByCompanyNum(String companyNum) { | ||||
|     public static DynamicObject loadOrgByCompanyNum(String companyNum) { | ||||
|         QFilter Q1 = new QFilter("number", QCP.equals, companyNum); | ||||
|         return BusinessDataServiceHelper.loadSingle(orgEntName, new QFilter[]{Q1}); | ||||
|     } | ||||
|  |  | |||
|  | @ -0,0 +1,126 @@ | |||
| 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 kd.bos.servicehelper.operation.SaveServiceHelper; | ||||
| import shjh.jhzj7.fi.fi.utils.JhzjUtils; | ||||
| import shjh.jhzj7.fi.fi.webapi.model.PaybillVoucherNumModel; | ||||
| 
 | ||||
| import javax.validation.Valid; | ||||
| import java.text.ParseException; | ||||
| import java.text.SimpleDateFormat; | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
| 
 | ||||
| import static shjh.jhzj7.fi.fi.webapi.ApplyAdjustBillControler.loadOrgByCompanyNum; | ||||
| 
 | ||||
| /** | ||||
|  * 费控-SAP付款凭证号接口 | ||||
|  */ | ||||
| @ApiController(value = "VouchernumControler", desc = "费控-SAP付款凭证号接口,自定义插件") | ||||
| public class VouchernumControler { | ||||
|     private static final String Apimenthod = "费控-SAP付款凭证号接口"; | ||||
|     private static final Log log = LogFactory.getLog(VouchernumControler.class); | ||||
|     private static final String apimenthod = "/paybill_vouchernum"; | ||||
| 
 | ||||
|     @ApiPostMapping(value = apimenthod, desc = "费控-SAP付款凭证号接口") | ||||
|     public CustomApiResult<ApiResult> paybill_vouchernum(@NotNull @Valid @ApiRequestBody(value = "入参json格式数据") PaybillVoucherNumModel paybillVouchertbill) { | ||||
| 
 | ||||
|         //select fopenorgid from T_CAS_PaymentBill where fbillno = 'FKZJ2025030006'; | ||||
|         //select * from t_org_org where fid = 2116753963226241024; | ||||
|         JSONObject json_body; | ||||
|         String jsonBodyString = null; | ||||
|         try { | ||||
|             // 解析入参,如果格式不正确,日志记录,并反馈esb7.4.1 | ||||
|             json_body = (JSONObject) JSON.toJSON(paybillVouchertbill); | ||||
|             jsonBodyString = JSON.toJSONString(json_body); | ||||
|         } catch (JSONException e) { | ||||
|             return handleErrorAndReturn("费控-SAP付款凭证号接口入参异常:" + e.getMessage(), "费控-SAP付款凭证号接口", null); | ||||
|         } | ||||
|         List<PaybillVoucherNumModel.EntryBean> items = paybillVouchertbill.getItems(); | ||||
|         for (PaybillVoucherNumModel.EntryBean item : items) { | ||||
|             String companyNum = item.getCompanyNum();//公司编号_对应金蝶财务组织 | ||||
|             String fkBillID = item.getFkBillID();//费控单据主表ID | ||||
|             String fkEntryID = item.getFkEntryID();//费控单据分录ID | ||||
|             String voucherNum = item.getVoucherNum();//SAP凭证号_存 | ||||
|             Date voucherDate = item.getVoucherDate();//SAP凭证过账日期_yyyy-MM-dd_存 | ||||
|             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); | ||||
|             String formattedDate = sdf.format(voucherDate); | ||||
|             Date formattedDateAsDate = null; | ||||
|             try { | ||||
|                 // 将字符串类型转换回 Date 类型 | ||||
|                 formattedDateAsDate = sdf.parse(formattedDate); | ||||
|             } catch (ParseException e) { | ||||
|                 // 处理解析异常 | ||||
|                 e.printStackTrace(); | ||||
|             } | ||||
| 
 | ||||
|             DynamicObject org = loadOrgByCompanyNum(companyNum); | ||||
|             if (org == null) { | ||||
|                 return handleErrorAndReturn("同步失败,凭证号:" + voucherNum + "的组织编码不存在", voucherNum, jsonBodyString); | ||||
|             } | ||||
| 
 | ||||
|             //获取付款单 | ||||
|             QFilter q1 = new QFilter("openorg.number", QCP.equals, companyNum); | ||||
|             QFilter q2 = new QFilter("shjh_fkbillid", QCP.equals, fkBillID); | ||||
|             QFilter q3 = new QFilter("shjh_fkentryid", QCP.equals, fkEntryID); | ||||
|             DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{q1, q2, q3}); | ||||
|             if (null == paybill) { | ||||
|                 return handleErrorAndReturn("同步失败:"+companyNum+"_"+fkBillID+"_"+fkEntryID+",付款单不存在", fkEntryID, jsonBodyString); | ||||
|             } | ||||
|             DynamicObject bankjournal = BusinessDataServiceHelper.loadSingle("cas_bankjournal", new QFilter("billno", | ||||
|                     QCP.equals, paybill.getString("billno")).toArray()); | ||||
|             //同步更新银行日记账单(cas_bankjournal)的SAP付款凭证号,若没有下游单据,付款操作后执行携带(PaybillPayOperation) | ||||
|             if (null != bankjournal) { | ||||
|                 bankjournal.set("shjh_credentialnum",voucherNum); | ||||
|                 SaveServiceHelper.save(new DynamicObject[]{bankjournal}); | ||||
|             } | ||||
| 
 | ||||
|             paybill.set("shjh_credentialnum",voucherNum);//SAP付款凭证号 | ||||
|             paybill.set("shjh_voucherdate",formattedDateAsDate);//SAP凭证过账日期 | ||||
|             SaveServiceHelper.save(new DynamicObject[]{paybill}); | ||||
|         } | ||||
|         return CustomApiResult.success(null); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 处理错误并返回失败结果 | ||||
|      * | ||||
|      * @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"); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,76 @@ | |||
| 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.sql.Date; | ||||
| import java.util.List; | ||||
| 
 | ||||
| @ApiModel | ||||
| public class PaybillVoucherNumModel { | ||||
| 
 | ||||
|     @ApiParam(value="明细数据集合",required=false,position=1) | ||||
|     private List<PaybillVoucherNumModel.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 fkBillID; | ||||
|         @ApiParam(value="费控单据分录ID",required=true,position=3) | ||||
|         private String fkEntryID; | ||||
|         @ApiParam(value="SAP凭证号",required=true,position=4) | ||||
|         private String voucherNum; | ||||
|         @ApiParam(value="SAP凭证过账日期",required=true,position=5) | ||||
|         private Date voucherDate; | ||||
| 
 | ||||
|         public String getCompanyNum() { | ||||
|             return companyNum; | ||||
|         } | ||||
| 
 | ||||
|         public void setCompanyNum(String companyNum) { | ||||
|             this.companyNum = companyNum; | ||||
|         } | ||||
| 
 | ||||
|         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 getVoucherNum() { | ||||
|             return voucherNum; | ||||
|         } | ||||
| 
 | ||||
|         public void setVoucherNum(String voucherNum) { | ||||
|             this.voucherNum = voucherNum; | ||||
|         } | ||||
| 
 | ||||
|         public Date getVoucherDate() { | ||||
|             return voucherDate; | ||||
|         } | ||||
| 
 | ||||
|         public void setVoucherDate(Date voucherDate) { | ||||
|             this.voucherDate = voucherDate; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public List<EntryBean> getItems() { | ||||
|         return items; | ||||
|     } | ||||
| 
 | ||||
|     public void setItems(List<EntryBean> items) { | ||||
|         this.items = items; | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue