1.发运提交的时候  如果该合同下发运明细单的历史总数量+本次发运总数量等于  关联合同的总数量,那么历史发运金额+当前发运金额的汇总值必须等于合同金额
  否则,不需判断
This commit is contained in:
ljw 2024-12-05 15:45:26 +08:00
parent 0d1a1ea2c2
commit 5f718ba1cb

View File

@ -22,29 +22,50 @@ public class ShippingDetailSubmitValidator extends AbstractValidator {
@Override @Override
public void validate() { public void validate() {
ExtendedDataEntity[] dataEntities = this.getDataEntities(); ExtendedDataEntity[] dataEntities = this.getDataEntities();
for(ExtendedDataEntity dataEntitie : dataEntities){ for (ExtendedDataEntity dataEntitie : dataEntities) {
DynamicObject dataEntity = dataEntitie.getDataEntity(); DynamicObject dataEntity = dataEntitie.getDataEntity();
long aLong = dataEntity.getLong("yem_sourcebillid"); long aLong = dataEntity.getLong("yem_sourcebillid");
//外销合同
String selectfield = DynamicObjectUtil.getSelectfields("yem_es_salesorder", false); String selectfield = DynamicObjectUtil.getSelectfields("yem_es_salesorder", false);
String selectfields = DynamicObjectUtil.getEntrySelectfields(selectfield, "yem_es_salesorder", "yem_es_materialinfo", false); String selectfields = DynamicObjectUtil.getEntrySelectfields(selectfield, "yem_es_salesorder", "yem_es_materialinfo", false);
DynamicObject yemEsSaleorder = BusinessDataServiceHelper.loadSingle("yem_es_salesorder", selectfields, new QFilter[]{new QFilter("id", QCP.equals, aLong)}); DynamicObject yemEsSaleorder = BusinessDataServiceHelper.loadSingle("yem_es_salesorder", selectfields
DynamicObjectCollection materialInfos = dataEntity.getDynamicObjectCollection("yem_es_materialinfo"); , new QFilter[]{new QFilter("id", QCP.equals, aLong)});
// String billtype = dataEntity.getString("yem_billtype.number"); BigDecimal yemQty = BigDecimal.ZERO;//合同数量
// if("yem_shippingdetails_zj".equals(billtype)||"yem_shippingdetails_nmzj".equals(billtype)){ BigDecimal yemSumcost = BigDecimal.ZERO;//合同金额
for (int i = 0; i < materialInfos.size(); i++) { if (yemEsSaleorder != null) {
DynamicObject materialInfo = materialInfos.get(i); yemSumcost = yemEsSaleorder.getBigDecimal("yem_sumcost");
// String businesssort = materialInfo.getString("yem_businesssort"); DynamicObjectCollection yemEsMaterialinfo = yemEsSaleorder.getDynamicObjectCollection("yem_es_materialinfo");
// if ("Z".equals(businesssort)){ for (DynamicObject dynamicObject : yemEsMaterialinfo) {
BigDecimal qty = materialInfo.getBigDecimal("yem_qty"); yemQty = yemQty.add(dynamicObject.getBigDecimal("yem_qty"));
DynamicObject resourceNog = materialInfo.getDynamicObject("yem_resourcenog");
DynamicObjectCollection completeProductions = materialInfo.getDynamicObjectCollection("yem_es_salesorder_z");
// int completeProductionRows = completeProductions.size();
// if(qty.compareTo(new BigDecimal(completeProductionRows)) != 0){
// this.addErrorMessage(dataEntitie,"明细信息第%s行%s资源号的出运数量与对应的整机数量不一致请检查数据后,点击保存,在点击提交!!");
// }
// }
} }
// } }
DynamicObjectCollection materialInfos = dataEntity.getDynamicObjectCollection("yem_es_materialinfo");
BigDecimal qty = BigDecimal.ZERO;//发运数量
BigDecimal sumcost = dataEntity.getBigDecimal("yem_sumcost");//发运金额
for (int i = 0; i < materialInfos.size(); i++) {
DynamicObject materialInfo = materialInfos.get(i);
qty = qty.add(materialInfo.getBigDecimal("yem_qty"));
}
String yemShippingdetails = DynamicObjectUtil.getSelectfields("yem_shippingdetails", false);
String yemShippingdetail = DynamicObjectUtil.getEntrySelectfields(yemShippingdetails,"yem_shippingdetails","yem_es_materialinfo", false);
DynamicObject[] yem_shippingdetails = BusinessDataServiceHelper.load("yem_shippingdetails", yemShippingdetail, new QFilter[]{new QFilter("id"
, QCP.not_equals, dataEntity.getLong("id")), new QFilter("yem_sourcebillid", QCP.equals, yemEsSaleorder.getLong("id"))});
if (YEM.isNotEmpty(yem_shippingdetails)){
for (DynamicObject yem_shippingdetail : yem_shippingdetails) {
DynamicObjectCollection yemEsMaterialinfo = yem_shippingdetail.getDynamicObjectCollection("yem_es_materialinfo");
sumcost = sumcost.add(yem_shippingdetail.getBigDecimal("yem_sumcost"));
for (int i = 0; i < yemEsMaterialinfo.size(); i++) {
DynamicObject materialInfo = yemEsMaterialinfo.get(i);
qty = qty.add(materialInfo.getBigDecimal("yem_qty"));
}
}
}
if (yemQty.compareTo(qty) == 0){
if (sumcost.compareTo(yemSumcost)!=0){
this.addMessage(dataEntitie,"历史发运金额:"+sumcost.subtract(dataEntity.getBigDecimal("yem_sumcost"))+"元+当前发运金额:"+
dataEntity.getBigDecimal("yem_sumcost")+"元,不等于合同金额:"+yemSumcost+"元,请自行修改发运金额!");
}
}
vehicleNoSingle(dataEntitie); vehicleNoSingle(dataEntitie);
validateTaxRefundRate(dataEntitie); validateTaxRefundRate(dataEntitie);
} }
@ -52,6 +73,7 @@ public class ShippingDetailSubmitValidator extends AbstractValidator {
/** /**
* 发运明细是否报关为是提交时需要校验商品信息非赠品行退税率必须都有值 * 发运明细是否报关为是提交时需要校验商品信息非赠品行退税率必须都有值
*
* @param dataEntitie * @param dataEntitie
*/ */
private void validateTaxRefundRate(ExtendedDataEntity dataEntitie) { private void validateTaxRefundRate(ExtendedDataEntity dataEntitie) {
@ -85,17 +107,17 @@ public class ShippingDetailSubmitValidator extends AbstractValidator {
* @time 2023/10/19 18:19 * @time 2023/10/19 18:19
*/ */
public void vehicleNoSingle(ExtendedDataEntity dataEntitie){ public void vehicleNoSingle(ExtendedDataEntity dataEntitie) {
DynamicObject dataEntity = dataEntitie.getDataEntity(); DynamicObject dataEntity = dataEntitie.getDataEntity();
String name = dataEntity.getDynamicObjectType().getName(); String name = dataEntity.getDynamicObjectType().getName();
Map<String, Map<Integer, List<String>>> map = new HashMap(); Map<String, Map<Integer, List<String>>> map = new HashMap();
String selectfields = DynamicObjectUtil.getSelectfields(name,false); String selectfields = DynamicObjectUtil.getSelectfields(name, false);
selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields,name,"yem_es_materialinfo",false); selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, name, "yem_es_materialinfo", false);
selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields,name,"yem_es_materialinfo","yem_es_salesorder_z",false); selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, name, "yem_es_materialinfo", "yem_es_salesorder_z", false);
DynamicObject[] shippingDetails = BusinessDataServiceHelper.load(name, selectfields, DynamicObject[] shippingDetails = BusinessDataServiceHelper.load(name, selectfields,
new QFilter[]{new QFilter("billno", QCP.not_equals,dataEntity.getString("billno")), new QFilter[]{new QFilter("billno", QCP.not_equals, dataEntity.getString("billno")),
new QFilter("billstatus", QCP.in,new String[]{"B","C"})}); new QFilter("billstatus", QCP.in, new String[]{"B", "C"})});
for(DynamicObject shippingDetail : shippingDetails){ for (DynamicObject shippingDetail : shippingDetails) {
String billNo = shippingDetail.getString("billno"); String billNo = shippingDetail.getString("billno");
DynamicObjectCollection materialInfos = shippingDetail.getDynamicObjectCollection("yem_es_materialinfo"); DynamicObjectCollection materialInfos = shippingDetail.getDynamicObjectCollection("yem_es_materialinfo");
HashMap<Integer, List<String>> materialInfoMap = new HashMap<>(); HashMap<Integer, List<String>> materialInfoMap = new HashMap<>();
@ -103,13 +125,13 @@ public class ShippingDetailSubmitValidator extends AbstractValidator {
DynamicObject materialInfo = materialInfos.get(i); DynamicObject materialInfo = materialInfos.get(i);
DynamicObjectCollection machineProductInfos = materialInfo.getDynamicObjectCollection("yem_es_salesorder_z"); DynamicObjectCollection machineProductInfos = materialInfo.getDynamicObjectCollection("yem_es_salesorder_z");
List<String> vehicleNoList = new ArrayList<>(); List<String> vehicleNoList = new ArrayList<>();
for(DynamicObject machineProductInfo : machineProductInfos){ for (DynamicObject machineProductInfo : machineProductInfos) {
String vehicleNo = machineProductInfo.getString("yem_vehicleno"); String vehicleNo = machineProductInfo.getString("yem_vehicleno");
vehicleNoList.add(vehicleNo); vehicleNoList.add(vehicleNo);
} }
materialInfoMap.put(i + 1,vehicleNoList); materialInfoMap.put(i + 1, vehicleNoList);
} }
map.put(billNo,materialInfoMap); map.put(billNo, materialInfoMap);
} }
DynamicObjectCollection materialInfos = dataEntity.getDynamicObjectCollection("yem_es_materialinfo"); DynamicObjectCollection materialInfos = dataEntity.getDynamicObjectCollection("yem_es_materialinfo");
@ -119,16 +141,16 @@ public class ShippingDetailSubmitValidator extends AbstractValidator {
for (int j = 0; j < machineProductInfos.size(); j++) { for (int j = 0; j < machineProductInfos.size(); j++) {
DynamicObject machineProductInfo = machineProductInfos.get(j); DynamicObject machineProductInfo = machineProductInfos.get(j);
String vehicleNo = machineProductInfo.getString("yem_vehicleno"); String vehicleNo = machineProductInfo.getString("yem_vehicleno");
if(YEM.isNotEmpty(vehicleNo)){ if (YEM.isNotEmpty(vehicleNo)) {
Set<String> mapKeys = map.keySet(); Set<String> mapKeys = map.keySet();
for(String mapKey : mapKeys){ for (String mapKey : mapKeys) {
Map<Integer, List<String>> materialInfoMap = map.get(mapKey); Map<Integer, List<String>> materialInfoMap = map.get(mapKey);
Set<Integer> materialInfoMapKeys = materialInfoMap.keySet(); Set<Integer> materialInfoMapKeys = materialInfoMap.keySet();
for (Integer materialInfoMapKey : materialInfoMapKeys){ for (Integer materialInfoMapKey : materialInfoMapKeys) {
List<String> vehicleNoList = materialInfoMap.get(materialInfoMapKey); List<String> vehicleNoList = materialInfoMap.get(materialInfoMapKey);
if(vehicleNoList.contains(vehicleNo)){ if (vehicleNoList.contains(vehicleNo)) {
this.addErrorMessage(dataEntitie, this.addErrorMessage(dataEntitie,
String.format("明细信息第%s行的子分录整机生产信息第%s行的整机编号【%s】与出运明细单号【%s】的明细信息第%s行的子分录整机生产信息中的整机编号【%s】重复",i + 1,j + 1,vehicleNo,mapKey,materialInfoMapKey,vehicleNo)); String.format("明细信息第%s行的子分录整机生产信息第%s行的整机编号【%s】与出运明细单号【%s】的明细信息第%s行的子分录整机生产信息中的整机编号【%s】重复", i + 1, j + 1, vehicleNo, mapKey, materialInfoMapKey, vehicleNo));
} }
} }
} }
@ -143,11 +165,11 @@ public class ShippingDetailSubmitValidator extends AbstractValidator {
for (int j = 0; j < machineProductInfos.size(); j++) { for (int j = 0; j < machineProductInfos.size(); j++) {
DynamicObject machineProductInfo = machineProductInfos.get(j); DynamicObject machineProductInfo = machineProductInfos.get(j);
String vehicleNo = machineProductInfo.getString("yem_vehicleno"); String vehicleNo = machineProductInfo.getString("yem_vehicleno");
if(YEM.isNotEmpty(vehicleNo)){ if (YEM.isNotEmpty(vehicleNo)) {
if(list.contains(vehicleNo)){ if (list.contains(vehicleNo)) {
this.addErrorMessage(dataEntitie, this.addErrorMessage(dataEntitie,
String.format("商品明细第%s行的子分录整机生产信息第%s行的整机编号【%s】与本单的整机生产信息中的整机编号重复",i + 1,j + 1,vehicleNo)); String.format("商品明细第%s行的子分录整机生产信息第%s行的整机编号【%s】与本单的整机生产信息中的整机编号重复", i + 1, j + 1, vehicleNo));
}else{ } else {
list.add(vehicleNo); list.add(vehicleNo);
} }
} }