Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
程小伟 2025-04-07 14:06:27 +08:00
commit 13844f37c3
6 changed files with 520 additions and 1 deletions

View File

@ -53,5 +53,4 @@ public class ContractProcessRevisionFilterPlugin extends AbstractBillPlugIn impl
}
}
// }
}

View File

@ -0,0 +1,45 @@
package zcgj.zcdev.zcdev.pr.plugin.form;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.list.ListShowParameter;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.sdk.plugin.Plugin;
import java.util.EventObject;
public class OutContractSettleProcessFilterPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener {
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
BasedataEdit contractprocess = this.getControl("zcgj_pa_process");
if(contractprocess != null) {
contractprocess.addBeforeF7SelectListener(this);
}
}
@Override
public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
String name1 = beforeF7SelectEvent.getProperty().getName();
if(name1.equals("zcgj_pa_process")) {
String name = this.getModel().getDataEntity().getDataEntityType().getName();
Object projectObj = this.getModel().getValue("project");
if(projectObj instanceof DynamicObject) {
DynamicObject project = (DynamicObject) projectObj;
QFilter qFilter = new QFilter("project.id", QCP.equals, project.getLong("id"));
QFilter treeFilter = new QFilter("number", QCP.equals, project.getString("number"));
ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
showParameter.getListFilterParameter().getQFilters().add(qFilter);
showParameter.getTreeFilterParameter().getQFilters().add(treeFilter);
}
}
}
}

View File

@ -0,0 +1,65 @@
package zcgj.zcdev.zcdev.pr.plugin.form;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.LoadDataEventArgs;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.ec.contract.formplugin.PaymentApplyEditUI;
import java.math.BigDecimal;
import java.util.EventObject;
import java.util.HashSet;
import java.util.Set;
public class PaymentApplyEditUIExtPlugin extends PaymentApplyEditUI {
@Override
protected void thisApplyOfTaxChanged(ChangeData changeData) {
this.sumApplyOfTax();
//this.setRealPayAmt();
if (this.getPageCache().get("thisApplyAmountCache") != null) {
this.getPageCache().remove("thisApplyAmountCache");
} else {
int rowIndex = changeData.getRowIndex();
if (!this.hasInvoice(rowIndex)) {
this.setShouldPayOfTax(rowIndex);
BigDecimal applyOfTaxAmount = (BigDecimal)changeData.getNewValue();
BigDecimal taxRate = (BigDecimal)this.getModel().getValue("conttaxrate", rowIndex);
BigDecimal applyAmount = applyOfTaxAmount.divide(BigDecimal.ONE.add(taxRate.divide(BigDecimal.valueOf(100L), 4)), 10, 5);
this.getPageCache().put("thisApplyOfTaxCache", "1");
this.getModel().setValue("thisapplyamount", applyAmount, rowIndex);
}
}
}
private void setRealPayAmt() {
DynamicObjectCollection dynamicObjectCollection = this.getModel().getDataEntity().getDynamicObjectCollection("entryentity");
BigDecimal totalAmount = BigDecimal.ZERO;
Set<String> contractNo = new HashSet<>();
for (DynamicObject dynamicObject : dynamicObjectCollection) {
DynamicObject contract = dynamicObject.getDynamicObject("contract");
if(contract != null) {
String billno = contract.getString("id");
if(!contractNo.contains(billno)) {
totalAmount = dynamicObject.getBigDecimal("thisrealpayamt");
contractNo.add(billno);
}
}
}
this.getModel().setValue("realpayamt", totalAmount);
//Object id = this.getModel().getValue("id");
//DynamicObject paymentapply = BusinessDataServiceHelper.loadSingle(id, "ec_paymentapply", "realpayamt");
//paymentapply.set("realpayamt", 99999);
//SaveServiceHelper.update(new DynamicObject[]{paymentapply});
this.getView().updateView("realpayamt");
}
@Override
public void afterLoadData(EventObject e) {
this.setRealPayAmt();
super.afterLoadData(e);
}
}

View File

@ -41,6 +41,15 @@ public class PaymentapplyCopyPlugin extends AbstractBillPlugIn implements Plugi
this.getModel().setValue("totalshouldpay", this.getSum("entryentity", "applyoftaxamount"));
this.getView().updateView(ENTITY_KEY);
this.getView().updateView("totalshouldpay");
//判断是否有发票有发票则锁定本次申请金额
for (int i = 0; i < entity.size(); i++) {
DynamicObject dynamicObject = entity.get(i);
DynamicObjectCollection dynamicObjectCollection = dynamicObject.getDynamicObjectCollection("subentryentity");
if(dynamicObjectCollection == null || dynamicObjectCollection.isEmpty()){
this.getView().setEnable(false,i,"thisapplyoftax");
}
}
}
}

View File

@ -0,0 +1,346 @@
package zcgj.zcdev.zcdev.pr.plugin.operate;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.EntityMetadataCache;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.ec.basedata.common.enums.PayDirectionEnum;
import kd.ec.basedata.common.enums.ecma.OrderSourceEnum;
import kd.ec.contract.common.utils.EcNumberHelper;
import kd.ec.contract.common.utils.TypeUtils;
import kd.ec.contract.opplugin.OutContractRevisionBillOp;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class OutContractRevisionBillOpExt extends OutContractRevisionBillOp {
private static String selector = (String) Stream.of("totalrevisionamount", "totalrevisionoftaxamount", "totalamount", "totaloftaxamount", "ismultirate", "taxrate", "originalamount", "avgtaxrate", "originaloftaxamount", "taxamount").collect(Collectors.joining(","));
@Override
public void reverseWritingToContract(String operationKey, DynamicObject source) {
boolean isFromDB = source.getDataEntityState().getFromDatabase();
if (isFromDB) {
source = BusinessDataServiceHelper.loadSingle(source.getPkValue(), EntityMetadataCache.getDataEntityType("ec_outrevision"));
DynamicObject contract = BusinessDataServiceHelper.loadSingle(source.getDynamicObject("contract").getPkValue(), "ec_out_contract", selector);
BigDecimal totalRevisionAmount = contract.getBigDecimal("totalrevisionamount");
BigDecimal totalRevisionOfTaxAmount = contract.getBigDecimal("totalrevisionoftaxamount");
BigDecimal totalAmount = contract.getBigDecimal("totalamount");
BigDecimal totalOfTaxAmount = contract.getBigDecimal("totaloftaxamount");
BigDecimal revisionAmount = source.getBigDecimal("revisionamount");
BigDecimal revisionOfTaxAmount = source.getBigDecimal("revisionoftaxamount");
DynamicObject currency = source.getDynamicObject("currency");
int pricePrecision = currency == null ? 10 : currency.getInt("priceprecision");
if (operationKey.equals("audit")) {
this.doHandlerTaxRateChange(contract, source);
contract.set("totalrevisionamount", totalRevisionAmount.add(revisionAmount));
contract.set("totalrevisionoftaxamount", totalRevisionOfTaxAmount.add(revisionOfTaxAmount));
contract.set("totalamount", totalAmount.add(revisionAmount));
contract.set("totaloftaxamount", totalOfTaxAmount.add(revisionOfTaxAmount));
DynamicObjectCollection kapianEntry = (DynamicObjectCollection)source.get("kapianentry");
List<DynamicObject> listUpdateList = new ArrayList();
List<DynamicObject> listaddList = new ArrayList();
Map<Long, BigDecimal> entryId_biangengsl = new HashMap();
boolean isSingleRateChangeMultyRate = false;//单税率改为多税率
boolean isMultyRateChangeSingleRate = false;//多税率改为单税率
for(int i = 0; i < kapianEntry.size(); ++i) {
DynamicObjectCollection subentrys = (DynamicObjectCollection)((DynamicObject)kapianEntry.get(i)).get("entryentity");
HashMap<String, DynamicObject> newListingMap = new HashMap();
ArrayList<DynamicObject> updateLevelList = new ArrayList();
for(int k = 0; k < subentrys.size(); ++k) {
DynamicObject subEntry = (DynamicObject)subentrys.get(k);
int changeType = TypeUtils.nullToInt(subEntry.get("subchangetype"));
if (changeType == 3) {
DynamicObject listing = new DynamicObject(EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
listing.set("id", subEntry.get("newlistingid"));
listing.set("isaddnew", true);
listing.set("listparentid", subEntry.get("superlistingid"));
listing.set("parent", subEntry.get("superlistingid"));
if (subEntry.getDynamicObject("parentgroup") != null) {
listing.set("level", subEntry.getDynamicObject("parentgroup").getInt("level") + 1);
} else {
updateLevelList.add(listing);
}
listing.set("paydirection", PayDirectionEnum.OUT.getValue());
listing.set("number", subEntry.get("listnumber"));
listing.set("name", subEntry.get("listname"));
listing.set("sysnumber", subEntry.get("sysnum"));
listing.set("desc", subEntry.get("remark"));
if (subEntry.get("boqnumber") != null) {
listing.set("boqnumber", subEntry.getDynamicObject("boqnumber").getPkValue());
}
DynamicObject parentnode = (DynamicObject)subEntry.getParent();
listing.set("listingmodel", parentnode.get("listmodelid"));
listing.set("contractid", contract.getPkValue().toString());
listing.set("enable", 1);
listing.set("status", "C");
listing.set("isleaf", false);
listing.set("currency", source.getDynamicObject("currency").getPkValue());
listaddList.add(listing);
newListingMap.put(subEntry.get("newlistingid").toString(), listing);
}
}
for(DynamicObject listing : updateLevelList) {
if (listing.get("listparentid") != null && listing.getLong("listparentid") != 0L) {
DynamicObject parent = (DynamicObject)newListingMap.get(String.valueOf(listing.getLong("listparentid")));
listing.set("level", parent.getInt("level") + 1);
} else {
listing.set("level", 1);
}
}
for(int k = 0; k < subentrys.size(); ++k) {
DynamicObject subEntry = (DynamicObject)subentrys.get(k);
int changeType = TypeUtils.nullToInt(subEntry.get("subchangetype"));
if (changeType == 0) {
DynamicObject listing = (DynamicObject)subEntry.get("listid");
if (listing == null) {
continue;
}
listing = BusinessDataServiceHelper.loadSingle(listing.getPkValue(), EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
listing.set("ischanged", true);
listing.set("enable", 1);
BigDecimal changeQty = listing.getBigDecimal("changeqty");
BigDecimal addQty = subEntry.getBigDecimal("biangengsl");
entryId_biangengsl.put((Long)listing.getPkValue(), addQty);
changeQty = changeQty.add(addQty);
listing.set("changeqty", changeQty);
BigDecimal changedTaxAmount = (BigDecimal)subEntry.get("hsbgje");
BigDecimal lastChangedTaxAmount = (BigDecimal)listing.get("chgoftaxamount");
listing.set("chgoftaxamount", lastChangedTaxAmount.add(changedTaxAmount));
BigDecimal totalQty = listing.getBigDecimal("totalqty").add(addQty);
listing.set("totalqty", totalQty);
BigDecimal lastTotalChangedTaxAmount = listing.getBigDecimal("lstoftaxamount");
BigDecimal totalChangedTaxAmount = lastTotalChangedTaxAmount.add(changedTaxAmount);
listing.set("lstoftaxamount", totalChangedTaxAmount);
listing.set("lasttotalamt", subEntry.getBigDecimal("bghzje"));
if (totalQty.compareTo(BigDecimal.ZERO) != 0) {
BigDecimal avgTaxPrice = EcNumberHelper.divide(totalChangedTaxAmount, totalQty, pricePrecision);
listing.set("avgtaxprice", avgTaxPrice);
BigDecimal avgPrice = EcNumberHelper.divide(subEntry.getBigDecimal("bghzje"), totalQty, pricePrecision);
listing.set("avgprice", avgPrice);
}
listUpdateList.add(listing);
}
if (changeType == 1 || changeType == 4 || changeType == 5) {
DynamicObject listing = (DynamicObject)subEntry.get("listid");
if (listing == null) {
continue;
}
listing = BusinessDataServiceHelper.loadSingle(listing.getPkValue(), EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
if (this.isSingleRateChange(contract, source)) {
//如果是单税率变更为多税率的情况下需要判断综合税率是不是为空如果当前税率为空则有可能是单改多
Object curtaxrate = source.get("curtaxrate");
if (curtaxrate != null) {
listing.set("rateobj", source.get("curtaxrate"));
listing.set("taxrate", source.getDynamicObject("curtaxrate").get("taxrate"));
}else{
Object rateobj = subEntry.get("rateobj");
listing.set("rateobj", rateobj);
listing.set("taxrate", subEntry.getDynamicObject("rateobj").get("taxrate"));
listing.set("taxprice", subEntry.get("biangenghouhsdj")); //含税单价
listing.set("oftax", subEntry.get("bghhszje")); //价税合计
listing.set("tax", subEntry.get("bghse")); //税额
listing.set("desc", subEntry.get("remark")); //备注
isSingleRateChangeMultyRate = true;
}
}
if (this.isMultyRateChange(contract, source)) {
boolean ismultirate = source.getBoolean("ismultirate");
Object rateobj = subEntry.get("rateobj");
if(rateobj!=null){
listing.set("rateobj", rateobj);
listing.set("taxrate", subEntry.getDynamicObject("rateobj").get("taxrate"));
}
if(!ismultirate){
Object curtaxrate = source.get("curtaxrate");
listing.set("rateobj", curtaxrate);
listing.set("taxrate", source.getDynamicObject("curtaxrate").get("taxrate"));
listing.set("taxprice", subEntry.get("biangenghouhsdj")); //含税单价
listing.set("oftax", subEntry.get("bghhszje")); //价税合计
listing.set("tax", subEntry.get("bghse")); //税额
listing.set("desc", subEntry.get("remark")); //备注
isMultyRateChangeSingleRate = true;
}
}
listing.set("ischanged", true);
listing.set("enable", 1);
BigDecimal effectQty = subEntry.getBigDecimal("shouyingxsl");
BigDecimal lastChangedEffectQty = listing.getBigDecimal("chgeffectqty");
listing.set("chgeffectqty", effectQty.add(lastChangedEffectQty));
listing.set("curtaxprice", subEntry.getBigDecimal("biangenghouhsdj"));
BigDecimal changedTaxAmount = subEntry.getBigDecimal("hsbgje");
BigDecimal lastChangedTaxAmount = (BigDecimal)listing.get("chgoftaxamount");
listing.set("chgoftaxamount", lastChangedTaxAmount.add(changedTaxAmount));
BigDecimal lastTotalChangedTaxAmount = listing.getBigDecimal("lstoftaxamount");
BigDecimal totalChangedTaxAmount = lastTotalChangedTaxAmount.add(changedTaxAmount);
listing.set("lstoftaxamount", totalChangedTaxAmount);
listing.set("currentprice", subEntry.getBigDecimal("biangenghoudj"));
listing.set("lasttotalamt", subEntry.getBigDecimal("bghzje"));
BigDecimal addQty = subEntry.getBigDecimal("biangengsl");
entryId_biangengsl.put((Long)listing.getPkValue(), addQty);
BigDecimal totalQty = listing.getBigDecimal("totalqty").add(addQty);
listing.set("totalqty", totalQty);
if (totalQty.compareTo(BigDecimal.ZERO) != 0) {
BigDecimal avgTaxPrice = EcNumberHelper.divide(totalChangedTaxAmount, totalQty, pricePrecision);
listing.set("avgtaxprice", avgTaxPrice);
BigDecimal avgPrice = EcNumberHelper.divide(subEntry.getBigDecimal("bghzje"), totalQty, pricePrecision);
listing.set("avgprice", avgPrice);
}
listUpdateList.add(listing);
}
if (changeType == 2) {
DynamicObject listing = new DynamicObject(EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
listing.set("id", subEntry.get("newlistingid"));
listing.set("isaddnew", true);
listing.set("paydirection", PayDirectionEnum.OUT.getValue());
listing.set("listparentid", subEntry.getString("superlistingid"));
listing.set("number", subEntry.get("listnumber"));
listing.set("name", subEntry.get("listname"));
listing.set("sysnumber", subEntry.get("sysnum"));
if (subEntry.get("measureunit") != null) {
listing.set("measureunit", subEntry.getDynamicObject("measureunit").getPkValue());
}
listing.set("qty", subEntry.get("qty"));
listing.set("totalqty", subEntry.get("qty"));
listing.set("price", subEntry.get("price"));
listing.set("avgprice", subEntry.get("price"));
listing.set("currentprice", subEntry.get("price"));
listing.set("cbsnumber", subEntry.get("cbsnumber"));
listing.set("amount", subEntry.get("amount"));
listing.set("lasttotalamt", subEntry.get("amount"));
listing.set("taxrate", subEntry.get("taxrate1"));
listing.set("tax", subEntry.get("tax"));
listing.set("taxprice", subEntry.get("hanshuidanj"));
listing.set("avgtaxprice", subEntry.get("hanshuidanj"));
listing.set("curtaxprice", subEntry.get("hanshuidanj"));
listing.set("oftax", subEntry.get("oftax"));
listing.set("lstoftaxamount", subEntry.get("oftax"));
listing.set("desc", subEntry.get("remark"));
DynamicObject parentnode = (DynamicObject)subEntry.getParent();
listing.set("listingmodel", parentnode.get("listmodelid"));
listing.set("contractid", contract.getPkValue().toString());
if (subEntry.get("resourceitem") != null) {
listing.set("resourceitem", subEntry.getDynamicObject("resourceitem").getPkValue());
}
if (subEntry.get("materiel") != null) {
listing.set("material", subEntry.getDynamicObject("materiel").getPkValue());
}
if (subEntry.get("boqnumber") != null) {
listing.set("boqnumber", subEntry.getDynamicObject("boqnumber").getPkValue());
}
if (subEntry.get("contlistnumber") != null) {
listing.set("contlistnumber", subEntry.getDynamicObject("contlistnumber").getPkValue());
}
if (subEntry.get("listunitproject") != null) {
listing.set("listunitproject", subEntry.getDynamicObject("listunitproject").getPkValue());
}
if (subEntry.get("rateobj") != null) {
listing.set("rateobj", subEntry.getDynamicObject("rateobj").getPkValue());
}
listing.set("directfee", subEntry.get("directfee"));
listing.set("equfee", subEntry.get("equfee"));
listing.set("manequfee", subEntry.get("manequfee"));
listing.set("manfee", subEntry.get("manfee"));
listing.set("tmpfee", subEntry.get("tmpfee"));
listing.set("enable", 1);
listing.set("status", "C");
listing.set("currency", source.getDynamicObject("currency").getPkValue());
listing.set("isleaf", true);
if (subEntry.getDynamicObject("parentgroup") != null) {
listing.set("level", subEntry.getDynamicObject("parentgroup").getInt("level") + 1);
listing.set("parent", subEntry.getDynamicObject("parentgroup").getPkValue());
} else if (subEntry.get("superlistingid") != null && subEntry.getLong("superlistingid") != 0L) {
DynamicObject superListing = (DynamicObject)newListingMap.get(String.valueOf(subEntry.getLong("superlistingid")));
listing.set("level", superListing.getInt("level") + 1);
listing.set("parent", subEntry.getLong("superlistingid"));
} else {
listing.set("level", 1);
listing.set("parent", (Object)null);
}
listing.set("leaseunit", subEntry.get("leaseunit"));
listing.set("leaseqty", subEntry.get("leaseqty"));
listing.set("leasebegintime", subEntry.get("leasebegintime"));
listing.set("leaseendtime", subEntry.get("leaseendtime"));
listing.set("leasedayqty", subEntry.get("leasedayqty"));
listing.set("arrivaldate", subEntry.get("arrivaldate"));
listaddList.add(listing);
}
}
}
this.writeBackPurchaseOrder(entryId_biangengsl, contract);
if (!listUpdateList.isEmpty()) {
SaveServiceHelper.save(((DynamicObject)listUpdateList.get(0)).getDataEntityType(), listUpdateList.toArray());
}
if (!listaddList.isEmpty()) {
SaveServiceHelper.save(((DynamicObject)listaddList.get(0)).getDataEntityType(), listaddList.toArray());
}
boolean ismultirate = source.getBoolean("ismultirate");
if(isSingleRateChangeMultyRate && ismultirate){
contract.set("ismultirate", true);//多税率
}
if(isMultyRateChangeSingleRate && !ismultirate){
contract.set("ismultirate", false);//单税率
}
} else if (operationKey.equals("unaudit")) {
contract.set("totalrevisionamount", totalRevisionAmount.subtract(revisionAmount));
contract.set("totalrevisionoftaxamount", totalRevisionOfTaxAmount.subtract(revisionOfTaxAmount));
contract.set("totalamount", totalAmount.subtract(revisionAmount));
contract.set("totaloftaxamount", totalOfTaxAmount.subtract(revisionOfTaxAmount));
}
SaveServiceHelper.save(new DynamicObject[]{contract});
}
}
private void writeBackPurchaseOrder(Map<Long, BigDecimal> entryId_biangengsl, DynamicObject contract) {
QFilter contractFilter = new QFilter("contract", "=", contract.getPkValue());
QFilter sourceFilter = new QFilter("source", "=", OrderSourceEnum.PUR_CONT.getValue());
DynamicObject[] orderBillArr = BusinessDataServiceHelper.load("ecma_purchaseorderbill", "billno,billname,orderentry,orderentry.sourceqty,orderentry.restqty,orderentry.listingid", new QFilter[]{contractFilter, sourceFilter});
for(DynamicObject item : orderBillArr) {
for(DynamicObject entry : item.getDynamicObjectCollection("orderentry")) {
Long listingId = entry.getLong("listingid");
BigDecimal biangengsl = (BigDecimal)entryId_biangengsl.get(listingId);
BigDecimal sourceQty = entry.getBigDecimal("sourceqty");
BigDecimal restQty = entry.getBigDecimal("restqty");
if (biangengsl != null) {
entry.set("sourceqty", sourceQty.add(biangengsl));
entry.set("restqty", restQty.add(biangengsl));
}
}
}
SaveServiceHelper.save(orderBillArr);
}
}

View File

@ -0,0 +1,55 @@
package zcgj.zcdev.zcdev.pr.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.plugin.PreparePropertysEventArgs;
import kd.bos.entity.validate.AbstractValidator;
import java.math.BigDecimal;
/**
* 工序分摊金额校验
*/
public class OutContractSettleProcessCheckOp extends AbstractOperationServicePlugIn {
@Override
public void onPreparePropertys(PreparePropertysEventArgs e) {
super.onPreparePropertys(e);
e.getFieldKeys().add("itementry");
e.getFieldKeys().add("zcgj_processallocatentity");
}
@Override
public void onAddValidators(AddValidatorsEventArgs e) {
super.onAddValidators(e);
//当前所在的组织是属于矿山下的
e.getValidators().add(new ValidatorExt());
}
class ValidatorExt extends AbstractValidator {
@Override
public void validate() {
ExtendedDataEntity[] extendedDataEntities = this.getDataEntities();
for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) {
DynamicObject dataEntity = extendedDataEntity.getDataEntity();
DynamicObjectCollection itementryCollection = dataEntity.getDynamicObjectCollection("itementry");
int i=1;
for (DynamicObject itementry : itementryCollection) {
BigDecimal oftaxamount = itementry.getBigDecimal("oftaxamount");
DynamicObjectCollection processallocatentityCollection = itementry.getDynamicObjectCollection("zcgj_processallocatentity");
BigDecimal totalPaAmount = BigDecimal.ZERO;
for (DynamicObject dynamicObject : processallocatentityCollection) {
totalPaAmount = totalPaAmount.add(dynamicObject.getBigDecimal("zcgj_pa_amount"));
}
if(totalPaAmount.compareTo(oftaxamount)!=0){
this.addFatalErrorMessage(extendedDataEntity, "合同支付项第"+i+"条,价税合计金额与工序分摊金额不一致,请重新核对并调整分摊金额,以确保两者相等。");
}
i++;
}
}
}
}
}