fix:
1.发运提交的时候 如果该合同下发运明细单的历史总数量+本次发运总数量等于 关联合同的总数量,那么历史发运金额+当前发运金额的汇总值必须等于合同金额 否则,不需判断
This commit is contained in:
parent
0d1a1ea2c2
commit
5f718ba1cb
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user