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