供应商"个人支付类",在付款单收款人中显示名称

付款处理单,选择“票据”时,添加过滤:“票据到期日”小于排程付款日期(修改排程入款日期返回校验提醒"排程付款日期大于票据到期日"
优化排程合并提示
优化资金计划科目(申请单复选框逻辑)
付款单推送费控新增校验
定时调用SAP应付凭证接口生成付款申请单,过滤参数仅为临期(开始日期,结束日期逻辑优化)
s
This commit is contained in:
weiyunlong 2025-05-19 18:19:40 +08:00
parent 0fe09139c2
commit 34304bd911
6 changed files with 188 additions and 64 deletions

View File

@ -22,51 +22,51 @@ public class SchebillcalcFormPlugin extends AbstractFormPlugin {
@Override
public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
super.afterDoOperation(afterDoOperationEventArgs);
String operateKey = afterDoOperationEventArgs.getOperateKey();
if ("submit".equals(operateKey)) {
// 排程处理单提交后执行相关业务校验
// 1 排票金额>0 and 排票支付方式=票据背书时票据到期日均需大于付款排程单到期日信息应大于
// 付款排程明细(entryentity) 排票金额(e_draftamt) 排票支付方式(e_draftpaymethod) 付款排程单号(e_billno)
// 付款排程单(psd_schedulebill, billno, 到期日:shjh_duedate)
Map<String, Date> dateMap = new HashMap<>();
DynamicObjectCollection entrys = this.getModel().getEntryEntity("entryentity");
for (DynamicObject entry : entrys) {
BigDecimal eDraftamt = entry.getBigDecimal("e_draftamt");
String eDraftpaymethod = entry.getString("e_draftpaymethod");
String eBillno = entry.getString("e_billno");
if(eDraftamt.compareTo(BigDecimal.ZERO) > 0 && "票据背书".equals(eDraftpaymethod)){
QFilter qFilter = new QFilter("billno", QCP.equals, eBillno);
DynamicObject psdSchedulebill = BusinessDataServiceHelper.loadSingle("psd_schedulebill", qFilter.toArray());
if (null != psdSchedulebill) {
Date shjhDuedate = psdSchedulebill.getDate("shjh_duedate");
dateMap.put(eBillno, shjhDuedate);
}
}
}
Date minDate = null;
for (Map.Entry<String, Date> entry : dateMap.entrySet()) {
if (minDate == null || entry.getValue().before(minDate)) {
minDate = entry.getValue();
}
}
// minDate dateMap 中日期最小的那个
if (minDate != null) {
//遍历票面信息(draftinfoentry ) 票据到期日(de_draftbillexpiredate) 结算号(de_draftinfo , cdm_draftbillf7 draftbillexpiredate)
DynamicObjectCollection draftinfoentry = this.getModel().getEntryEntity("draftinfoentry");
for (int i = 0; i < draftinfoentry.size(); i++) {
DynamicObject dynamicObject = draftinfoentry.get(i);
DynamicObject draftinfo = dynamicObject.getDynamicObject("de_draftinfo");
if (null != draftinfo) {
draftinfo = BusinessDataServiceHelper.loadSingle(draftinfo.getPkValue(), "cdm_draftbillf7");
Date draftbillexpiredate = draftinfo.getDate("draftbillexpiredate");
if (draftbillexpiredate.before(minDate)) {
this.getView().showErrorNotification("遍历票面信息第"+ i +"行,票据到期日均需大于付款排程单到期日信息");
}
}
}
}
}
//逻辑迁移到shjh.jhzj7.fi.fi.plugin.operate.SchebillcalcSubmitOperation
// String operateKey = afterDoOperationEventArgs.getOperateKey();
// if ("presubmit".equals(operateKey)) {
// // 排程处理单提交后执行相关业务校验
// // 1 排票金额>0 and 排票支付方式=票据背书时票据到期日均需大于付款排程单到期日信息应大于
//
// // 付款排程明细(entryentity) 排票金额(e_draftamt) 排票支付方式(e_draftpaymethod) 付款排程单号(e_billno)
// // 付款排程单(psd_schedulebill, billno, 到期日:shjh_duedate)
// Map<String, Date> dateMap = new HashMap<>();
// DynamicObjectCollection entrys = this.getModel().getEntryEntity("entryentity");
// for (DynamicObject entry : entrys) {
// BigDecimal eDraftamt = entry.getBigDecimal("e_draftamt");
// String eDraftpaymethod = entry.getString("e_draftpaymethod");
// String eBillno = entry.getString("e_billno");
// if(eDraftamt.compareTo(BigDecimal.ZERO) > 0 && "draftbook".equals(eDraftpaymethod)){
// QFilter qFilter = new QFilter("billno", QCP.equals, eBillno);
// DynamicObject psdSchedulebill = BusinessDataServiceHelper.loadSingle("psd_schedulebill", qFilter.toArray());
// if (null != psdSchedulebill) {
// Date shjhDuedate = psdSchedulebill.getDate("shjh_duedate");
// dateMap.put(eBillno, shjhDuedate);
// }
// }
// }
// Date minDate = null;
// for (Map.Entry<String, Date> entry : dateMap.entrySet()) {
// if (minDate == null || entry.getValue().before(minDate)) {
// minDate = entry.getValue();
// }
// }
// // minDate dateMap 中日期最小的那个
// if (minDate != null) {
// //遍历票面信息(draftinfoentry ) 票据到期日(de_draftbillexpiredate) 结算号(de_draftinfo , cdm_draftbillf7 draftbillexpiredate)
// DynamicObjectCollection draftinfoentry = this.getModel().getEntryEntity("draftinfoentry");
// for (int i = 0; i < draftinfoentry.size(); i++) {
// DynamicObject dynamicObject = draftinfoentry.get(i);
// DynamicObject draftinfo = dynamicObject.getDynamicObject("de_draftinfo");
// if (null != draftinfo) {
// draftinfo = BusinessDataServiceHelper.loadSingle(draftinfo.getPkValue(), "cdm_draftbillf7");
// Date draftbillexpiredate = draftinfo.getDate("draftbillexpiredate");
// if (draftbillexpiredate.before(minDate)) {
// this.getView().showErrorNotification("遍历票面信息第"+ i +"行,票据到期日均需大于付款排程单到期日信息");
// }
// }
// }
// }
// }
}
}

View File

@ -1,5 +1,6 @@
package shjh.jhzj7.fi.fi.plugin.form;
import kd.bos.form.control.Label;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.ClientProperties;
@ -19,6 +20,10 @@ public class TextFieldDemo extends AbstractFormPlugin {
*/
@Override
public void afterBindData(EventObject e) {
//供应商"个人支付类"在付款单收款人中显示名称
Label label = this.getView().getControl("shjh_sjskfs");
label.setText(""+this.getView().getModel().getValue("shjh_asstactrealname"));
// 获取成本中心和利润中心的控件
BasedataEdit shjh_costcenter = this.getView().getControl("shjh_costcenter");

View File

@ -156,10 +156,11 @@ public class PayApplySaveOperation extends AbstractOperationServicePlugIn implem
JhzjUtils.saveLog(bill.getString("billno"), "付款申请携带资金计划科目(原因码)",""
,queryDyobj(qFilter), true, String.valueOf(BusinessDataServiceHelper.load("shjh_request_account",
"id,shjh_membersubject", qFilter.toArray()).length));
//单子为true 对应配置表是/ 为false 对应配置表否
//是否充值类
boolean shjhWhetherrechargecateg = bill.getBoolean("shjh_whetherrechargecateg");
if (shjhWhetherrechargecateg) {
QFilter q2 = new QFilter("shjh_czl", QCP.equals, shjhWhetherrechargecateg);
if (!shjhWhetherrechargecateg) {
QFilter q2 = new QFilter("shjh_czl", QCP.equals, false);
qFilter = qFilter.and(q2);
}
JhzjUtils.saveLog(bill.getString("billno"), "付款申请携带资金计划科目(是否充值类)",""
@ -167,8 +168,8 @@ public class PayApplySaveOperation extends AbstractOperationServicePlugIn implem
"id,shjh_membersubject", qFilter.toArray()).length));
//是否自行采购
boolean shjhZxcg = bill.getBoolean("shjh_zxcg");
if (shjhZxcg) {
QFilter q3 = new QFilter("shjh_zxcg", QCP.equals, shjhZxcg);
if (!shjhZxcg) {
QFilter q3 = new QFilter("shjh_zxcg", QCP.equals, false);
qFilter = qFilter.and(q3);
}
JhzjUtils.saveLog(bill.getString("billno"), "付款申请携带资金计划科目(是否自行采购)",""

View File

@ -41,6 +41,12 @@ public class PaybillOperation extends AbstractOperationServicePlugIn implements
bill = BusinessDataServiceHelper.loadSingle(bill.getPkValue(), "cas_paybill");
if (null != bill) {
DynamicObject paymentidentify = bill.getDynamicObject("paymentidentify");//付款标识
//SAP付款凭证号为空,不允许推送费控,请先推送sap
String credentialnum = bill.getString("shjh_credentialnum");//SAP付款凭证号
if (StringUtils.isEmpty(credentialnum)) {
addErrorInfo(bill, "SAP付款凭证号为空,不允许推送费控,请先推送sap");
isSuccess = false;
}
if (null != paymentidentify) {
if (!"FKBS02".equals(paymentidentify.getString("number"))) {
addErrorInfo(bill, "付款标识不为被动付款");

View File

@ -0,0 +1,113 @@
package shjh.jhzj7.fi.fi.plugin.operate;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.ExtendedDataEntity;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.AddValidatorsEventArgs;
import kd.bos.entity.validate.AbstractValidator;
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.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 排程处理单操作插件
* shjh_psd_schebillcalc_ext
*/
public class SchebillcalcSubmitOperation extends AbstractOperationServicePlugIn implements Plugin {
private static final Log log = LogFactory.getLog(SchebillcalcSubmitOperation.class);
@Override
public void onAddValidators(AddValidatorsEventArgs e) {
super.onAddValidators(e);
e.addValidator(new AbstractValidator() {
@Override
public void validate() {
String operateKey = this.getOperateKey();
if ("presubmit".equals(operateKey)) {
// 付款排程明细(entryentity) 排票金额(e_draftamt) 排票支付方式(e_draftpaymethod) 付款排程单号(e_billno)
// 付款排程单(psd_schedulebill, billno, 到期日:shjh_duedate)
ExtendedDataEntity[] entities = this.getDataEntities();
for (ExtendedDataEntity entity : entities) {
DynamicObject bill = entity.getDataEntity();
DynamicObjectCollection entrys = bill.getDynamicObjectCollection("entryentity");
for (DynamicObject entry : entrys) {
BigDecimal eDraftamt = entry.getBigDecimal("e_draftamt");//排票金额
String eBillno = entry.getString("e_billno");//付款排程单号
Date shjhDuedate = null;
//排票金额>0 and 废弃:排票支付方式=票据背书时
if (eDraftamt.compareTo(BigDecimal.ZERO) > 0) {
QFilter qFilter = new QFilter("billno", QCP.equals, eBillno);
//付款排程单
DynamicObject psdSchedulebill = BusinessDataServiceHelper.loadSingle("psd_schedulebill", qFilter.toArray());
if (null != psdSchedulebill) {
shjhDuedate = psdSchedulebill.getDate("shjh_duedate");//到期日
}
}
Date minDate = null;
if (shjhDuedate != null) {
//票据到期日中最小的日期均需大于付款排程单到期日信息
DynamicObjectCollection eDraftno = entry.getDynamicObjectCollection("e_draftno");
//票据号
StringBuilder str = new StringBuilder();
for (DynamicObject dynamicObject : eDraftno) {
DynamicObject fbasedataid = dynamicObject.getDynamicObject("fbasedataid");
str.append(fbasedataid.getString("billno")).append(",");
Date currentDate = fbasedataid.getDate("draftbillexpiredate");
// 跳过 null 日期
if (currentDate == null) {
continue;
}
// 如果是第一个有效日期或者当前日期比已记录的最小日期更早
if (minDate == null || currentDate.before(minDate)) {
minDate = currentDate;
}
}
if (str.length() > 0) {
str.deleteCharAt(str.length() - 1); // 删除最后一个逗号
}
//risk:如果没有有效票据则不进行校验
if (minDate != null && minDate.before(shjhDuedate)) {
// 格式化日期为 yyyy-MM-dd 字符串
String f1;
String f2;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
f1 = sdf.format(minDate);
f2 = sdf.format(shjhDuedate);
this.addErrorMessage(entity, "付款排程单号为" + eBillno +
"的付款排程明细,票据号:"+str+"。票据最小到期日"+ f1 + "应大于付款排程单到期日" + f2); // 票据到期日中最小的日期均需大于付款排程单到期日信息
}
}
}
}
}
}
});
}
}
// //遍历票面信息(draftinfoentry ) 票据到期日(de_draftbillexpiredate) 结算号(de_draftinfo , cdm_draftbillf7 draftbillexpiredate)
// DynamicObjectCollection draftinfoentry = bill.getDynamicObjectCollection("draftinfoentry");
// for (int i = 0; i < draftinfoentry.size(); i++) {
// DynamicObject dynamicObject = draftinfoentry.get(i);
// DynamicObject draftinfo = dynamicObject.getDynamicObject("de_draftinfo");
// if (null != draftinfo) {
// draftinfo = BusinessDataServiceHelper.loadSingle(draftinfo.getPkValue(), "cdm_draftbillf7");
// Date draftbillexpiredate = draftinfo.getDate("draftbillexpiredate");
// //票据到期日均需大于付款排程单到期日信息:应大于
// if (draftbillexpiredate.before(shjhDuedate)) {
// this.addErrorMessage(entity, "遍历票面信息第"+ i+1 +"行,票据到期日均需大于付款排程单到期日信息");
// }
// }
// }

View File

@ -42,20 +42,19 @@ public class QuerySapCreatePayApplyTask extends AbstractTask {
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
String lq = (String)map.get("临期");
// int daysToAdd = Integer.parseInt(lq);
int daysToAdd = 365;//1600000001 1600000009
String dateStr = "2025-01-01";
DateTimeFormatter format = DateTimeFormatter.ISO_LOCAL_DATE;
LocalDate currentDate = LocalDate.parse(dateStr, format);// 获取当前日期
// LocalDate currentDate = LocalDate.now();// 获取当前日期
LocalDate newDate = currentDate.plusDays(daysToAdd);// 计算新日期
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");// 格式化日期
String formattedoldDate = currentDate.format(formatter);//开始日期
String formattedNewDate = newDate.format(formatter);//结束日期
// 获取临期天数并转换
String lq = (String) map.get("临期");
if (StringUtils.isEmpty(lq)) {
return;
}
int daysToAdd = Integer.parseInt(lq); // 将临期字符串转为整数天数
// 获取当前日期
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDate endDate = currentDate.plusDays(daysToAdd);
// 格式化日期
String formattedoldDate = currentDate.format(formatter); //开始日期 当前日期
String formattedNewDate = endDate.format(formatter); //结束日期当前日期 + 临期天数
JSONArray IT_LIST = new JSONArray();
// 添加SAP应付凭到期日过滤条件