fix(change): 添加转单物料规格一致性校验

This commit is contained in:
yangyufu
2026-07-15 14:14:09 +08:00
parent ea2b5f4c3a
commit 3a9f5f4524
3 changed files with 64 additions and 10 deletions

View File

@@ -13,6 +13,7 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.ResultBean;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.WqlUtil;
import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl;
@@ -26,7 +27,11 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.Map;
import java.util.stream.Collectors;
/**
* PC端出入库新增
@@ -149,6 +154,16 @@ public class ChangeServiceImpl implements ChangeService {
/**
* 根据传进来的载具物料明细,查询载具所有库存记录,并生成移库明细
*
* ids.append("'");
* if (!Struct_map.containsKey(storagevehicle_code)) {
* Struct_map.put(storagevehicle_code, row);
* }
* if (i != 0) {
* ids.append("','");
* }
* ids.append(storagevehicle_code);
* }
* ids.append("'");
* @param rows
*/
@Transactional(rollbackFor = Exception.class)
@@ -159,6 +174,8 @@ public class ChangeServiceImpl implements ChangeService {
double detail_count = 0;
//定义需要需要插入的库存集合
HashMap<String, HashMap> set = new HashMap<>();
Set<String> saleOrderSet = new HashSet<>();
Set<String> customerNameSet = new HashSet<>();
for (int i = 0; i < rows.size(); i++) {
HashMap row = rows.get(i);
String package_box_sn = (String) row.get("storagevehicle_code");
@@ -167,9 +184,38 @@ public class ChangeServiceImpl implements ChangeService {
} else {
set.put(package_box_sn, row);
}
// 收集去重的销售订单号和客户名称
saleOrderSet.add((String) row.get("new_sale_order_name"));
customerNameSet.add((String) row.get("new_customer_name"));
}
// 判断转单前后的物料是否保持一致,如果不一致拒绝转单 88549333 20260714
// 销售订单in
String saleOrderStr = saleOrderSet.stream()
.map(s -> "'" + s + "'")
.collect(Collectors.joining(","));
// 客户in 字段
String customerNameStr = customerNameSet.stream()
.map(s -> "'" + s + "'")
.collect(Collectors.joining(","));
JSONArray package_rows = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("sale_order_name in (" + saleOrderStr + ")" + " and customer_name in (" + customerNameStr + ")").getResultJSONArray(0);
// 获取查询结果里面的物料编码,去重
Set<String> materialCodeSet = new HashSet<>();
for (int i = 0; i < package_rows.size(); i++) {
JSONObject package_row = package_rows.getJSONObject(i);
materialCodeSet.add(package_row.getString("product_name"));
}
//判断物料编码去重后的个数是否大于1 如果大于1 直接返回错误
if (materialCodeSet.size() > 1) {
throw new BadRequestException("存在跨物料规格转单,不允许转单,请检查!");
}
// 判断物料编码和原订单的物料编码是否一致,如果不一致 返回错误
if (!materialCodeSet.isEmpty()) {
String packageMaterialCode = materialCodeSet.iterator().next();
String originalMaterialCode = (String) rows.get(0).get("material_code");
if (!packageMaterialCode.equals(originalMaterialCode)) {
throw new BadRequestException("转单物料编码[" + packageMaterialCode + "]与原订单物料编码[" + originalMaterialCode + "]不一致,不允许转单!");
}
}
for (String package_box_sn : set.keySet()) {
HashMap row = set.get(package_box_sn);
String SaleOrderItem = (String) row.get("new_sale_order_name");