package shkd.repc.repe.opplugin; 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.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.util.StringUtils; import java.math.BigDecimal; import java.util.Objects; import static shkd.repc.repe.formplugin.RepeOrderFormPlugin.getOrderCount; public class RepeOrderSubmitOPPlugin extends AbstractOperationServicePlugIn { @Override public void onAddValidators(AddValidatorsEventArgs e) { super.onAddValidators(e); e.addValidator(new AbstractValidator() { @Override public void validate() { String operateKey = this.getOperateKey(); ExtendedDataEntity[] dataEntities1 = this.getDataEntities(); switch (operateKey) { case "save": case "submit": // 在订单提交校验时,查询当前合同所有订单当前明细行的数量,超过合同数量时校验 for (int i = 0; i < dataEntities1.length; i++) { // DynamicObject dataEntity = dataEntities1[i].getDataEntity(); DynamicObjectCollection orderformentrys = dataEntity.getDynamicObjectCollection("orderformentry"); for (int j = 0; j < orderformentrys.size(); j++) { DynamicObject dy = orderformentrys.get(j); String number = ""; String name = ""; DynamicObject cqcontract = dataEntity.getDynamicObject("cqcontract"); if (null != cqcontract) { number = cqcontract.getString("number"); name = cqcontract.getString("name"); } QFilter q1 = new QFilter("billno", QCP.equals, number); QFilter q2 = new QFilter("billname", QCP.equals, name); DynamicObject recon_contractbill = BusinessDataServiceHelper.loadSingle("recon_contractbill", new QFilter[]{q1,q2}); if (null != recon_contractbill) { //查询当前合同所有相关订单 QFilter q3 = new QFilter("cqcontract.number", QCP.equals, recon_contractbill.getString("billno")); QFilter q4 = new QFilter("cqcontract.name", QCP.equals, recon_contractbill.getString("billname")); DynamicObject[] repeOrderforms = BusinessDataServiceHelper.load("repe_orderform", "id,cqcontract.number,cqcontract.name,cqcontract,orderformentry," + "orderformentry.ordercount,orderformentry.contractnum", new QFilter[]{q3, q4}); //通过行号获取--订货数量总和 BigDecimal ordercount = getOrderCount(repeOrderforms, j);//订货数量总和 BigDecimal contractnum =(BigDecimal) dy.get("contractnum");//合同数量 BigDecimal contractremainnum = contractnum.subtract(ordercount);//剩余订货数量 = 合同数量 - 总订货数量 BigDecimal ordercounts = dy.getBigDecimal("ordercount");//本次订货数量 int result = ordercounts.compareTo(contractremainnum); if (result > 0) { this.addErrorMessage(dataEntities1[i], "订单明细第" + (j + 1) + "行 本次订货数量 不能大于 合同剩余数量"); System.out.println("num1 < num2"); } } } } break; default: break; } } }); } }