入库单导入修改调整
This commit is contained in:
+184
-228
@@ -1080,8 +1080,10 @@ public class StockInOrderApplicationService {
|
||||
// 货主信息:优先使用表头,如果表头为空则使用明细行
|
||||
String shipperName = StringUtils.isNotBlank(headerInfo.getShipperName()) ? headerInfo.getShipperName() : h.getShipperName();
|
||||
String shipperCode = StringUtils.isNotBlank(headerInfo.getShipperCode()) ? headerInfo.getShipperCode() : h.getShipperCode();
|
||||
// 货主ID先设置为null,后续在shipperParam方法中根据名称或编号查找
|
||||
order.setShipperId(null);
|
||||
// 提前获取货主ID,用于查询物料基础信息时过滤
|
||||
Long shipperId = getShipperIdByNameOrCode(shipperName, shipperCode);
|
||||
// 货主ID先设置为获取到的值,后续在shipperParam方法中会再次确认
|
||||
order.setShipperId(shipperId);
|
||||
if (StringUtils.isNotBlank(shipperName)) {
|
||||
order.setShipperName(shipperName);
|
||||
}
|
||||
@@ -1168,6 +1170,7 @@ public class StockInOrderApplicationService {
|
||||
r.getWarehouseQuantity(), r.getInboundQuantity());
|
||||
|
||||
// 根据明细表中的字段查询物料基础信息(优先:料号 > 商品SKU码 > 商品名称)
|
||||
// 注意:查询时必须加上货主ID条件,确保查询到的是该货主绑定的物料
|
||||
Long materialBaseInfoId = null;
|
||||
LoginUser currentLoginUser = SecurityUtils.getLoginUser();
|
||||
Long topOrganizationId = currentLoginUser != null && currentLoginUser.getUserPo() != null
|
||||
@@ -1180,14 +1183,20 @@ public class StockInOrderApplicationService {
|
||||
if (topOrganizationId != null) {
|
||||
queryDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
log.info("尝试通过料号查询物料基础信息,料号: [{}], topOrganizationId: {}", r.getMaterialCode(), topOrganizationId);
|
||||
// 加上货主ID条件,确保查询到的是该货主绑定的物料
|
||||
if (shipperId != null) {
|
||||
queryDO.setShipperId(shipperId);
|
||||
}
|
||||
log.info("尝试通过料号查询物料基础信息,料号: [{}], topOrganizationId: {}, shipperId: {}",
|
||||
r.getMaterialCode(), topOrganizationId, shipperId);
|
||||
List<MaterialBaseInfoPO> materialList = materialBaseInfoService.queryList(queryDO);
|
||||
log.info("料号查询结果,查询到 {} 条记录", materialList != null ? materialList.size() : 0);
|
||||
if (materialList != null && !materialList.isEmpty()) {
|
||||
materialBaseInfoId = materialList.get(0).getMaterialBaseInfoId();
|
||||
log.info("通过料号查询到物料基础信息,料号: {}, 物料ID: {}", r.getMaterialCode(), materialBaseInfoId);
|
||||
log.info("通过料号查询到物料基础信息,料号: {}, 物料ID: {}, 货主ID: {}",
|
||||
r.getMaterialCode(), materialBaseInfoId, shipperId);
|
||||
} else {
|
||||
log.warn("通过料号未查询到物料基础信息,料号: [{}]", r.getMaterialCode());
|
||||
log.warn("通过料号未查询到物料基础信息,料号: [{}], 货主ID: [{}]", r.getMaterialCode(), shipperId);
|
||||
}
|
||||
} else {
|
||||
log.warn("料号为空,跳过料号查询");
|
||||
@@ -1200,14 +1209,20 @@ public class StockInOrderApplicationService {
|
||||
if (topOrganizationId != null) {
|
||||
queryDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
log.info("尝试通过商品SKU码查询物料基础信息,SKU码: [{}], topOrganizationId: {}", r.getSkuCode(), topOrganizationId);
|
||||
// 加上货主ID条件,确保查询到的是该货主绑定的物料
|
||||
if (shipperId != null) {
|
||||
queryDO.setShipperId(shipperId);
|
||||
}
|
||||
log.info("尝试通过商品SKU码查询物料基础信息,SKU码: [{}], topOrganizationId: {}, shipperId: {}",
|
||||
r.getSkuCode(), topOrganizationId, shipperId);
|
||||
List<MaterialBaseInfoPO> materialList = materialBaseInfoService.queryList(queryDO);
|
||||
log.info("SKU码查询结果,查询到 {} 条记录", materialList != null ? materialList.size() : 0);
|
||||
if (materialList != null && !materialList.isEmpty()) {
|
||||
materialBaseInfoId = materialList.get(0).getMaterialBaseInfoId();
|
||||
log.info("通过商品SKU码查询到物料基础信息,SKU码: {}, 物料ID: {}", r.getSkuCode(), materialBaseInfoId);
|
||||
log.info("通过商品SKU码查询到物料基础信息,SKU码: {}, 物料ID: {}, 货主ID: {}",
|
||||
r.getSkuCode(), materialBaseInfoId, shipperId);
|
||||
} else {
|
||||
log.warn("通过SKU码未查询到物料基础信息,SKU码: [{}]", r.getSkuCode());
|
||||
log.warn("通过SKU码未查询到物料基础信息,SKU码: [{}], 货主ID: [{}]", r.getSkuCode(), shipperId);
|
||||
}
|
||||
} else if (materialBaseInfoId == null) {
|
||||
log.warn("SKU码为空,跳过SKU码查询");
|
||||
@@ -1220,14 +1235,20 @@ public class StockInOrderApplicationService {
|
||||
if (topOrganizationId != null) {
|
||||
queryDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
log.info("尝试通过商品名称查询物料基础信息,商品名称: [{}], topOrganizationId: {}", r.getMaterialName(), topOrganizationId);
|
||||
// 加上货主ID条件,确保查询到的是该货主绑定的物料
|
||||
if (shipperId != null) {
|
||||
queryDO.setShipperId(shipperId);
|
||||
}
|
||||
log.info("尝试通过商品名称查询物料基础信息,商品名称: [{}], topOrganizationId: {}, shipperId: {}",
|
||||
r.getMaterialName(), topOrganizationId, shipperId);
|
||||
List<MaterialBaseInfoPO> materialList = materialBaseInfoService.queryList(queryDO);
|
||||
log.info("商品名称查询结果,查询到 {} 条记录", materialList != null ? materialList.size() : 0);
|
||||
if (materialList != null && !materialList.isEmpty()) {
|
||||
materialBaseInfoId = materialList.get(0).getMaterialBaseInfoId();
|
||||
log.info("通过商品名称查询到物料基础信息,商品名称: {}, 物料ID: {}", r.getMaterialName(), materialBaseInfoId);
|
||||
log.info("通过商品名称查询到物料基础信息,商品名称: {}, 物料ID: {}, 货主ID: {}",
|
||||
r.getMaterialName(), materialBaseInfoId, shipperId);
|
||||
} else {
|
||||
log.warn("通过商品名称未查询到物料基础信息,商品名称: [{}]", r.getMaterialName());
|
||||
log.warn("通过商品名称未查询到物料基础信息,商品名称: [{}], 货主ID: [{}]", r.getMaterialName(), shipperId);
|
||||
}
|
||||
} else if (materialBaseInfoId == null) {
|
||||
log.warn("商品名称为空,跳过商品名称查询");
|
||||
@@ -1486,231 +1507,166 @@ public class StockInOrderApplicationService {
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 封装货主信息(货主信息就是客户)
|
||||
* @description 根据货主名称或编号获取货主ID(用于导入时提前获取货主ID)
|
||||
* @param shipperName 货主名称
|
||||
* @param shipperCode 货主编号
|
||||
* @return 货主ID,如果找不到则返回null
|
||||
*/
|
||||
private Long getShipperIdByNameOrCode(String shipperName, String shipperCode) {
|
||||
if (StringUtils.isBlank(shipperName) && StringUtils.isBlank(shipperCode)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Long shipperId = null;
|
||||
|
||||
// 优先尝试:如果名称是纯数字,可能是误传的ID,直接按ID查询
|
||||
if (StringUtils.isNotEmpty(shipperName) && shipperName.matches("\\d+")) {
|
||||
try {
|
||||
Long possibleId = Long.valueOf(shipperName);
|
||||
AjaxResult ajaxResult = userServiceFeign.getInfo(possibleId);
|
||||
if ("200".equals(String.valueOf(ajaxResult.get("code"))) && ajaxResult.get("data") != null) {
|
||||
UserPo userPo = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
||||
if (userPo != null) {
|
||||
shipperId = userPo.getUserId();
|
||||
log.info("根据货主名称(实际为ID)找到货主ID:{}", shipperId);
|
||||
return shipperId;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.debug("尝试将货主名称作为ID查询失败,货主名称:{},错误:{}", shipperName, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 如果仍未找到,尝试根据名称查询
|
||||
if (shipperId == null && StringUtils.isNotEmpty(shipperName) && !shipperName.matches("\\d+")) {
|
||||
try {
|
||||
AjaxResult ajaxResult = userServiceFeign.getInfoByName(shipperName);
|
||||
String code = String.valueOf(ajaxResult.get("code"));
|
||||
if ("200".equals(code) && ajaxResult.get("data") != null) {
|
||||
UserPo userPo = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
||||
if (userPo != null) {
|
||||
shipperId = userPo.getUserId();
|
||||
log.info("根据货主名称找到货主ID,货主名称:{},货主ID:{}", shipperName, shipperId);
|
||||
return shipperId;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.debug("根据货主名称查询失败,货主名称:{},错误:{}", shipperName, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 如果仍未找到,尝试从货主列表中根据编号或名称查找
|
||||
if (shipperId == null && (StringUtils.isNotEmpty(shipperName) || StringUtils.isNotEmpty(shipperCode))) {
|
||||
try {
|
||||
AjaxResult shipperListResult = userServiceFeign.userShipperListAll();
|
||||
if ("200".equals(String.valueOf(shipperListResult.get("code"))) && shipperListResult.get("data") != null) {
|
||||
Object data = shipperListResult.get("data");
|
||||
List<Map<String, Object>> shipperList = null;
|
||||
if (data instanceof List) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Object> rawList = (List<Object>) data;
|
||||
shipperList = new ArrayList<>();
|
||||
for (Object item : rawList) {
|
||||
if (item instanceof Map) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> mapItem = (Map<String, Object>) item;
|
||||
shipperList.add(mapItem);
|
||||
} else {
|
||||
Map<String, Object> mapItem = JSON.parseObject(JSONObject.toJSONString(item), Map.class);
|
||||
shipperList.add(mapItem);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
String jsonStr = JSONObject.toJSONString(data);
|
||||
shipperList = JSON.parseObject(jsonStr, new com.alibaba.fastjson.TypeReference<List<Map<String, Object>>>(){});
|
||||
}
|
||||
|
||||
if (shipperList != null && !shipperList.isEmpty()) {
|
||||
String normalizedShipperName = shipperName != null ? shipperName.trim() : "";
|
||||
String normalizedShipperCode = shipperCode != null ? shipperCode.trim() : "";
|
||||
|
||||
for (Map<String, Object> shipper : shipperList) {
|
||||
Object userId = shipper.get("userId");
|
||||
Object userName = shipper.get("userName");
|
||||
Object userCode = shipper.get("userCode");
|
||||
Object userMemberCode = shipper.get("userMemberCode");
|
||||
|
||||
if (userName == null) {
|
||||
userName = shipper.get("name");
|
||||
}
|
||||
if (userName == null) {
|
||||
userName = shipper.get("shipperName");
|
||||
}
|
||||
|
||||
boolean matched = false;
|
||||
// 优先根据编号匹配
|
||||
if (StringUtils.isNotEmpty(normalizedShipperCode)) {
|
||||
String normalizedUserCode = userCode != null ? String.valueOf(userCode).trim() : "";
|
||||
String normalizedUserMemberCode = userMemberCode != null ? String.valueOf(userMemberCode).trim() : "";
|
||||
if (normalizedShipperCode.equals(normalizedUserCode) ||
|
||||
normalizedShipperCode.equals(normalizedUserMemberCode)) {
|
||||
matched = true;
|
||||
}
|
||||
}
|
||||
// 如果编号不匹配,再根据名称匹配
|
||||
if (!matched && StringUtils.isNotEmpty(normalizedShipperName) && userName != null) {
|
||||
String normalizedUserName = String.valueOf(userName).trim();
|
||||
if (normalizedShipperName.equals(normalizedUserName) ||
|
||||
normalizedUserName.contains(normalizedShipperName)) {
|
||||
matched = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (matched && userId != null) {
|
||||
shipperId = Long.valueOf(String.valueOf(userId));
|
||||
log.info("从货主列表中找到货主ID,货主名称:{},货主编号:{},货主ID:{}",
|
||||
shipperName, shipperCode, shipperId);
|
||||
return shipperId;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.debug("从货主列表中查找货主ID失败,货主名称:{},货主编号:{},错误:{}",
|
||||
shipperName, shipperCode, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
if (shipperId == null) {
|
||||
log.warn("未找到货主ID,货主名称:{},货主编号:{}", shipperName, shipperCode);
|
||||
}
|
||||
|
||||
return shipperId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 封装货主信息(改为与出库单相同的简洁逻辑,使用入库单的字段shipperName)
|
||||
* @author ZhouGY
|
||||
* @date 2024/5/9 20:43
|
||||
* @param stockInOrderDO
|
||||
*/
|
||||
private void shipperParam(StockInOrderDO stockInOrderDO){
|
||||
Long shipperId = stockInOrderDO.getShipperId();
|
||||
String shipperName = stockInOrderDO.getShipperName();
|
||||
String shipperCode = stockInOrderDO.getShipperCode();
|
||||
|
||||
// 如果货主ID为空,尝试根据货主名称或编号查找
|
||||
if (shipperId == null) {
|
||||
// 优先尝试:如果名称是纯数字,可能是误传的ID,直接按ID查询
|
||||
if (StringUtils.isNotEmpty(shipperName) && shipperName.matches("\\d+")) {
|
||||
try {
|
||||
Long possibleId = Long.valueOf(shipperName);
|
||||
AjaxResult ajaxResult = userServiceFeign.getInfo(possibleId);
|
||||
if ("200".equals(String.valueOf(ajaxResult.get("code"))) && ajaxResult.get("data") != null) {
|
||||
UserPo userPo = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
||||
if (userPo != null) {
|
||||
shipperId = userPo.getUserId();
|
||||
log.info("根据货主名称(实际为ID)找到货主ID:{}", shipperId);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("尝试将货主名称作为ID查询失败,货主名称:{},错误:{}", shipperName, e.getMessage());
|
||||
}
|
||||
if (StringUtils.isEmpty(shipperName)) return;
|
||||
if (!shipperName.matches("\\d+")) {
|
||||
// 按名称查询
|
||||
AjaxResult ajaxResult = userServiceFeign.getInfoByName(shipperName);
|
||||
if(!"200".equals(String.valueOf(ajaxResult.get("code")))){
|
||||
throw new ServiceException("获取货主信息失败");
|
||||
}
|
||||
|
||||
// 如果仍未找到,尝试根据名称查询(使用 getInfoByName 接口,更高效)
|
||||
// 注意:如果接口返回404,说明接口可能未实现,继续尝试从列表中查找
|
||||
if (shipperId == null && StringUtils.isNotEmpty(shipperName) && !shipperName.matches("\\d+")) {
|
||||
try {
|
||||
AjaxResult ajaxResult = userServiceFeign.getInfoByName(shipperName);
|
||||
String code = String.valueOf(ajaxResult.get("code"));
|
||||
if ("200".equals(code) && ajaxResult.get("data") != null) {
|
||||
UserPo userPo = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
||||
if (userPo != null) {
|
||||
shipperId = userPo.getUserId();
|
||||
log.info("根据货主名称找到货主ID,货主名称:{},货主ID:{}", shipperName, shipperId);
|
||||
}
|
||||
} else {
|
||||
// 接口返回非200(可能是404),记录日志但继续尝试其他方式
|
||||
log.debug("getInfoByName接口返回非200,货主名称:{},返回码:{},将继续尝试从列表中查找", shipperName, code);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 接口调用异常(包括404),记录日志但继续尝试其他方式
|
||||
log.debug("根据货主名称查询失败(可能是接口未实现),货主名称:{},错误:{},将继续尝试从列表中查找", shipperName, e.getMessage());
|
||||
}
|
||||
UserPo userPo = JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
||||
stockInOrderDO.setShipperId(userPo.getUserId());
|
||||
stockInOrderDO.setShipperCode(userPo.getUserMemberCode());
|
||||
stockInOrderDO.setShipperName(userPo.getUserName());
|
||||
} else {
|
||||
// 按ID查询
|
||||
AjaxResult ajaxResult = userServiceFeign.getInfo(Long.valueOf(shipperName));
|
||||
if(!"200".equals(String.valueOf(ajaxResult.get("code")))){
|
||||
throw new ServiceException("获取货主信息失败");
|
||||
}
|
||||
|
||||
// 如果仍未找到,尝试从货主列表中根据编号或名称查找(兜底方案)
|
||||
if (shipperId == null && (StringUtils.isNotEmpty(shipperName) || StringUtils.isNotEmpty(shipperCode))) {
|
||||
try {
|
||||
log.debug("开始从货主列表中查找,货主名称:{},货主编号:{}", shipperName, shipperCode);
|
||||
AjaxResult shipperListResult = userServiceFeign.userShipperListAll();
|
||||
if ("200".equals(String.valueOf(shipperListResult.get("code"))) && shipperListResult.get("data") != null) {
|
||||
Object data = shipperListResult.get("data");
|
||||
List<Map<String, Object>> shipperList = null;
|
||||
// 尝试解析为列表
|
||||
if (data instanceof List) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Object> rawList = (List<Object>) data;
|
||||
shipperList = new ArrayList<>();
|
||||
for (Object item : rawList) {
|
||||
if (item instanceof Map) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> mapItem = (Map<String, Object>) item;
|
||||
shipperList.add(mapItem);
|
||||
} else {
|
||||
// 如果不是Map,尝试转换为Map
|
||||
Map<String, Object> mapItem = JSON.parseObject(JSONObject.toJSONString(item), Map.class);
|
||||
shipperList.add(mapItem);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 如果不是列表,尝试转换为列表
|
||||
String jsonStr = JSONObject.toJSONString(data);
|
||||
shipperList = JSON.parseObject(jsonStr, new com.alibaba.fastjson.TypeReference<List<Map<String, Object>>>(){});
|
||||
}
|
||||
if (shipperList != null && !shipperList.isEmpty()) {
|
||||
log.debug("货主列表大小:{},开始匹配查找,查找货主名称:{},货主编号:{}",
|
||||
shipperList.size(), shipperName, shipperCode);
|
||||
|
||||
// 输出前3个货主的详细信息,用于调试
|
||||
if (log.isDebugEnabled() && shipperList.size() > 0) {
|
||||
int debugCount = Math.min(3, shipperList.size());
|
||||
for (int i = 0; i < debugCount; i++) {
|
||||
Map<String, Object> debugShipper = shipperList.get(i);
|
||||
log.debug("货主列表示例[{}]:所有字段={}", i, debugShipper.keySet());
|
||||
log.debug("货主列表示例[{}]:userId={}, userName={}, userCode={}, userMemberCode={}, name={}, shipperName={}",
|
||||
i,
|
||||
debugShipper.get("userId"),
|
||||
debugShipper.get("userName"),
|
||||
debugShipper.get("userCode"),
|
||||
debugShipper.get("userMemberCode"),
|
||||
debugShipper.get("name"),
|
||||
debugShipper.get("shipperName"));
|
||||
}
|
||||
}
|
||||
|
||||
// 标准化输入的货主名称和编号(去除空格,用于匹配)
|
||||
String normalizedShipperName = shipperName != null ? shipperName.trim() : "";
|
||||
String normalizedShipperCode = shipperCode != null ? shipperCode.trim() : "";
|
||||
|
||||
for (Map<String, Object> shipper : shipperList) {
|
||||
Object userId = shipper.get("userId");
|
||||
Object userName = shipper.get("userName");
|
||||
Object userCode = shipper.get("userCode");
|
||||
Object userMemberCode = shipper.get("userMemberCode");
|
||||
|
||||
// 尝试多个可能的字段名(按优先级顺序)
|
||||
if (userName == null) {
|
||||
userName = shipper.get("name");
|
||||
}
|
||||
if (userName == null) {
|
||||
userName = shipper.get("shipperName");
|
||||
}
|
||||
if (userName == null) {
|
||||
userName = shipper.get("userName");
|
||||
}
|
||||
// 尝试其他可能的字段名
|
||||
if (userName == null) {
|
||||
userName = shipper.get("customerName");
|
||||
}
|
||||
if (userName == null) {
|
||||
userName = shipper.get("companyName");
|
||||
}
|
||||
|
||||
boolean matched = false;
|
||||
// 优先根据编号匹配(更准确)
|
||||
if (StringUtils.isNotEmpty(normalizedShipperCode)) {
|
||||
String normalizedUserCode = userCode != null ? String.valueOf(userCode).trim() : "";
|
||||
String normalizedUserMemberCode = userMemberCode != null ? String.valueOf(userMemberCode).trim() : "";
|
||||
if (normalizedShipperCode.equals(normalizedUserCode) ||
|
||||
normalizedShipperCode.equals(normalizedUserMemberCode)) {
|
||||
matched = true;
|
||||
log.debug("通过编号匹配成功,货主编号:{},货主ID:{}", normalizedShipperCode, userId);
|
||||
}
|
||||
}
|
||||
// 如果编号不匹配,再根据名称匹配(支持去除空格后匹配)
|
||||
if (!matched && StringUtils.isNotEmpty(normalizedShipperName) && userName != null) {
|
||||
String normalizedUserName = String.valueOf(userName).trim();
|
||||
// 精确匹配(优先)
|
||||
if (normalizedShipperName.equals(normalizedUserName)) {
|
||||
matched = true;
|
||||
log.debug("通过名称精确匹配成功,货主名称:{},货主ID:{}", normalizedShipperName, userId);
|
||||
}
|
||||
// 如果精确匹配失败,尝试包含匹配(列表中的名称包含导入的名称,例如列表中是"珠海百思科鞋材有限公司",导入的是"百思科")
|
||||
// 注意:这里不使用反向包含匹配(导入的名称包含列表中的名称),因为这样会误匹配(例如导入"珠海百思科鞋材有限公司"会匹配到"百思科")
|
||||
if (!matched && normalizedUserName.contains(normalizedShipperName)) {
|
||||
matched = true;
|
||||
log.debug("通过名称包含匹配成功,货主名称:{},列表中的名称:{},货主ID:{}",
|
||||
normalizedShipperName, normalizedUserName, userId);
|
||||
}
|
||||
// 不再使用反向包含匹配,避免误匹配
|
||||
// 例如:导入"珠海百思科鞋材有限公司"不应该匹配到列表中的"百思科"
|
||||
}
|
||||
|
||||
if (matched && userId != null) {
|
||||
shipperId = Long.valueOf(String.valueOf(userId));
|
||||
log.info("从货主列表中找到货主ID,货主名称:{},货主编号:{},货主ID:{}",
|
||||
shipperName, shipperCode, shipperId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (shipperId == null) {
|
||||
// 输出所有货主名称,帮助排查
|
||||
List<String> allShipperNames = new ArrayList<>();
|
||||
for (Map<String, Object> shipper : shipperList) {
|
||||
Object name = shipper.get("userName");
|
||||
if (name == null) {
|
||||
name = shipper.get("name");
|
||||
}
|
||||
if (name == null) {
|
||||
name = shipper.get("shipperName");
|
||||
}
|
||||
if (name != null) {
|
||||
allShipperNames.add(String.valueOf(name));
|
||||
}
|
||||
}
|
||||
log.warn("从货主列表中未找到匹配的货主,货主名称:{},货主编号:{},列表大小:{},所有货主名称:{}",
|
||||
shipperName, shipperCode, shipperList.size(), allShipperNames);
|
||||
}
|
||||
} else {
|
||||
log.warn("货主列表为空或解析失败");
|
||||
}
|
||||
} else {
|
||||
log.warn("获取货主列表失败,返回码:{}", shipperListResult.get("code"));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("从货主列表中查找货主ID失败,货主名称:{},货主编号:{},错误:{}", shipperName, shipperCode, e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
// 如果仍然找不到货主ID,抛出异常
|
||||
if (shipperId == null) {
|
||||
String errorMsg = "货主ID不能为空(货主信息就是客户)";
|
||||
if (StringUtils.isNotEmpty(shipperName)) {
|
||||
errorMsg += "。已提供货主名称:" + shipperName + ",但未找到对应的货主ID,请确保货主名称正确或直接提供货主ID";
|
||||
} else if (StringUtils.isNotEmpty(shipperCode)) {
|
||||
errorMsg += "。已提供货主编号:" + shipperCode + ",但未找到对应的货主ID,请确保货主编号正确或直接提供货主ID";
|
||||
} else {
|
||||
errorMsg += "。请提供货主ID、货主名称或货主编号";
|
||||
}
|
||||
throw new ServiceException(errorMsg);
|
||||
}
|
||||
stockInOrderDO.setShipperId(shipperId);
|
||||
}
|
||||
|
||||
// 根据货主ID获取详细信息
|
||||
AjaxResult ajaxResult = userServiceFeign.getInfo(shipperId);
|
||||
if(!"200".equals(String.valueOf(ajaxResult.get("code")))){
|
||||
String errorMsg = ajaxResult.get("msg") != null ? String.valueOf(ajaxResult.get("msg")) : "未知错误";
|
||||
throw new ServiceException("获取货主信息失败(货主ID: " + shipperId + "),错误信息: " + errorMsg);
|
||||
}
|
||||
UserPo userPo = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
||||
if (userPo == null) {
|
||||
throw new ServiceException("获取货主信息失败:返回数据为空(货主ID: " + shipperId + ")");
|
||||
}
|
||||
stockInOrderDO.setShipperCode(userPo.getUserMemberCode());
|
||||
// 如果原始shipperName不为空,保留原始值(导入时读取的客户名称应该保留)
|
||||
// 只有在原始shipperName为空时,才使用查询到的userName
|
||||
if (StringUtils.isBlank(stockInOrderDO.getShipperName())) {
|
||||
UserPo userPo = JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
||||
stockInOrderDO.setShipperId(userPo.getUserId());
|
||||
stockInOrderDO.setShipperCode(userPo.getUserMemberCode());
|
||||
stockInOrderDO.setShipperName(userPo.getUserName());
|
||||
}
|
||||
}
|
||||
|
||||
+10
@@ -74,6 +74,16 @@ public interface IOutMaterialDetailService extends IService<OutMaterialDetail>
|
||||
*/
|
||||
public StockOutOrderPO batchCancelAssignUpdate(String outOrderNumber, List<OutMaterialDetailDO> outMaterialDetailDOList);
|
||||
|
||||
/**
|
||||
* @description 手动取消分配批量修改物流明细(弹窗方式,类似batchAssignUpdate)
|
||||
* @author ZhouGY
|
||||
* @date 2024/5/22 9:27
|
||||
* @param outOrderNumber
|
||||
* @param outMaterialDetailDOList
|
||||
* @return StockOutOrderPO
|
||||
*/
|
||||
public StockOutOrderPO batchManualCancelAssignUpdate(String outOrderNumber, List<OutMaterialDetailDO> outMaterialDetailDOList);
|
||||
|
||||
/**
|
||||
* @description 拣货批量修改物流明细
|
||||
* @author ZhouGY
|
||||
|
||||
Reference in New Issue
Block a user