预付单增加收款人信息校验

This commit is contained in:
zhangzhiguo 2025-07-23 16:50:59 +08:00
parent d9e9c80ca2
commit 09119816f2
1 changed files with 127 additions and 0 deletions

View File

@ -0,0 +1,127 @@
package zcgj.zcdev.zcdev.fs.plugin.operate;
import kd.bos.context.RequestContext;
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.plugin.PreparePropertysEventArgs;
import kd.bos.entity.validate.AbstractValidator;
import kd.bos.servicehelper.user.UserServiceHelper;
import zcgj.zcdev.zcdev.fs.utils.OrgCheckUtils;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 预付单单收款信息账户检查
*/
public class PrepaybillRecAccountCkOp extends AbstractOperationServicePlugIn {
@Override
public void onPreparePropertys(PreparePropertysEventArgs e) {
super.onPreparePropertys(e);
e.getFieldKeys().add("costcompany");
e.getFieldKeys().add("accountentry");
e.getFieldKeys().add("billpayertype");
e.getFieldKeys().add("billpayerid");
}
@Override
public void onAddValidators(AddValidatorsEventArgs e) {
super.onAddValidators(e);
Long currentUserId = UserServiceHelper.getCurrentUserId();
// 当前用户所属组织
Long mainOrgId = UserServiceHelper.getUserMainOrgId(currentUserId);
//当前切换选择的组织
Long currentOrgId = RequestContext.get().getOrgId();
//当前所在的组织是属于矿山下的
//if(OrgCheckUtils.isKS(currentOrgId)){
e.getValidators().add(new ValidatorExt());
//}
}
class ValidatorExt extends AbstractValidator {
@Override
public void validate() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
ExtendedDataEntity[] extendedDataEntities = this.getDataEntities();
Map<Long, Map<String,Object>> allMap = new HashMap<>();
//当前提交的探亲单据id集合
Map<Long, List<Long>> currentBillIdListMap = new HashMap<>();
for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) {
DynamicObject dataEntity = extendedDataEntity.getDataEntity();
long aLong = dataEntity.getLong("id");
//获取报销人
DynamicObject applier = dataEntity.getDynamicObject("applier");
long applierId = applier.getLong("id");
//获取申请日期
Object costcompanyObj = dataEntity.get("costcompany");
Object costdeptObj = dataEntity.get("costdept");
if(costcompanyObj!=null && costdeptObj != null){
DynamicObject costcompany = (DynamicObject)costcompanyObj;
long costcompanyId = costcompany.getLong("id");
if(OrgCheckUtils.isKS(costcompanyId)){
String billpayertype = dataEntity.getString("billpayertype"); //往来单位类型
if(billpayertype ==null){
this.addFatalErrorMessage(extendedDataEntity, String.format("往来类型不能为空"));
return;
}
DynamicObject billpayerid = dataEntity.getDynamicObject("billpayerid");//往来单位
String numberVal = null;
if(billpayerid!=null){
numberVal = billpayerid.getString("number");
}else{
this.addFatalErrorMessage(extendedDataEntity, String.format("往来单位不能为空"));
return;
}
DynamicObjectCollection accountentry = dataEntity.getDynamicObjectCollection("accountentry");
int i = 0;
for (DynamicObject dynamicObject : accountentry) {
i++;
String payertype = dynamicObject.getString("payertype");//收款人类型
String payeraccountname = dynamicObject.getString("payeraccountname"); //账户名称
String accountTxt = dynamicObject.getString("zcgj_account_txt"); //账户名称
boolean isOk=true;
if("bd_supplier".equals(payertype)){ //供应商
DynamicObject supplier = dynamicObject.getDynamicObject("supplier");
if(supplier ==null){
this.addFatalErrorMessage(extendedDataEntity, String.format("收款信息第%d行收款人不能为空",i));
continue;
}
String name = supplier.getString("name");
isOk = payeraccountname.equals(name);
if(isOk && "bd_supplier".equals(billpayertype)){
String number = supplier.getString("number");
isOk = number.equals(numberVal);
}
}else if("bd_customer".equals(payertype)){ //客户
DynamicObject customer = dynamicObject.getDynamicObject("customer");
if(customer ==null){
this.addFatalErrorMessage(extendedDataEntity, String.format("收款信息第%d行收款人不能为空",i));
continue;
}
String name = customer.getString("name");
isOk = payeraccountname.equals(name);
if(isOk && "bd_customer".equals(billpayertype)){
String number = customer.getString("number");
isOk = number.equals(numberVal);
}
}
if(!isOk && accountTxt.isEmpty()){
this.addFatalErrorMessage(extendedDataEntity, String.format("收款信息第%d行往来单位、收款人名称和账户名称不一致请在当前行填写账户不一致说明",i));
}
}
}
}
}
}
}
}