出库导入修改
This commit is contained in:
+113
-106
@@ -7,6 +7,7 @@ import com.alibaba.excel.read.builder.ExcelReaderBuilder;
|
|||||||
import com.alibaba.excel.read.metadata.ReadSheet;
|
import com.alibaba.excel.read.metadata.ReadSheet;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.alibaba.fastjson.TypeReference;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.mhd.common.core.domain.po.SysDictDataVo;
|
import com.mhd.common.core.domain.po.SysDictDataVo;
|
||||||
import com.mhd.common.core.domain.po.UserPo;
|
import com.mhd.common.core.domain.po.UserPo;
|
||||||
@@ -35,6 +36,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -155,10 +157,20 @@ public class ExcelParseService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initParam(StockOutOrderDO stockOutOrderDO) {
|
private void initParam(StockOutOrderDO stockOutOrderDO) {
|
||||||
//设置货主信息
|
String customerName = stockOutOrderDO.getCustomerName();
|
||||||
shipperParam(stockOutOrderDO);
|
if (StringUtils.isEmpty(customerName)) {
|
||||||
//设置客户信息
|
return;
|
||||||
customerParam(stockOutOrderDO);
|
}
|
||||||
|
UserPo userPo = resolveCustomerShipperUserPoForImport(customerName);
|
||||||
|
if (userPo == null) {
|
||||||
|
throw new ServiceException("获取客户信息失败:未在名称与货主列表中匹配到当前组织下的客户,请核对名称或改用客户编号/ID");
|
||||||
|
}
|
||||||
|
stockOutOrderDO.setShipperId(userPo.getUserId());
|
||||||
|
stockOutOrderDO.setShipperCode(userPo.getUserMemberCode());
|
||||||
|
stockOutOrderDO.setShipperName(userPo.getUserName());
|
||||||
|
stockOutOrderDO.setCustomerId(userPo.getUserId());
|
||||||
|
stockOutOrderDO.setCustomerCode(userPo.getUserMemberCode());
|
||||||
|
stockOutOrderDO.setCustomerName(userPo.getUserName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -168,88 +180,6 @@ public class ExcelParseService {
|
|||||||
return stockOutOrderDomainService.insert(stockOutOrderDO);
|
return stockOutOrderDomainService.insert(stockOutOrderDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 封装货主信息
|
|
||||||
* @author ZhouGY
|
|
||||||
* @date 2024/5/9 20:43
|
|
||||||
* @param stockOutOrderDO
|
|
||||||
*/
|
|
||||||
private void shipperParam(StockOutOrderDO stockOutOrderDO){
|
|
||||||
String customerName = stockOutOrderDO.getCustomerName();
|
|
||||||
if (StringUtils.isEmpty(customerName)) return;
|
|
||||||
Long loginOrganizationId = null;
|
|
||||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
|
||||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
|
||||||
loginOrganizationId = loginUser.getUserPo().getOrganizationId();
|
|
||||||
}
|
|
||||||
if (!customerName.matches("\\d+")) {
|
|
||||||
AjaxResult ajaxResult = userServiceFeign.getInfoByName(customerName);
|
|
||||||
if(!"200".equals(String.valueOf(ajaxResult.get("code")))){
|
|
||||||
throw new ServiceException("获取客户信息失败");
|
|
||||||
}
|
|
||||||
UserPo userPo = JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
|
||||||
if (!shipperMatchesImporterOrganization(userPo, loginOrganizationId)) {
|
|
||||||
throw new ServiceException("当前登录用户组织下不存在该货主信息或客户名称与组织不匹配");
|
|
||||||
}
|
|
||||||
stockOutOrderDO.setShipperId(userPo.getUserId());
|
|
||||||
stockOutOrderDO.setShipperCode(userPo.getUserMemberCode());
|
|
||||||
stockOutOrderDO.setShipperName(userPo.getUserName());
|
|
||||||
} else {
|
|
||||||
AjaxResult ajaxResult = userServiceFeign.getInfo(Long.valueOf(customerName));
|
|
||||||
if(!"200".equals(String.valueOf(ajaxResult.get("code")))){
|
|
||||||
throw new ServiceException("获取货主信息失败");
|
|
||||||
}
|
|
||||||
UserPo userPo = JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
|
||||||
if (!shipperMatchesImporterOrganization(userPo, loginOrganizationId)) {
|
|
||||||
throw new ServiceException("当前登录用户组织下不存在该货主信息或客户名称与组织不匹配");
|
|
||||||
}
|
|
||||||
stockOutOrderDO.setShipperId(userPo.getUserId());
|
|
||||||
stockOutOrderDO.setShipperCode(userPo.getUserMemberCode());
|
|
||||||
stockOutOrderDO.setShipperName(userPo.getUserName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 封装客户信息
|
|
||||||
* @author ZhouGY
|
|
||||||
* @date 2024/5/9 20:43
|
|
||||||
* @param stockOutOrderDO
|
|
||||||
*/
|
|
||||||
private void customerParam(StockOutOrderDO stockOutOrderDO){
|
|
||||||
String customerName = stockOutOrderDO.getCustomerName();
|
|
||||||
if (StringUtils.isEmpty(customerName)) return;
|
|
||||||
Long loginOrganizationId = null;
|
|
||||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
|
||||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
|
||||||
loginOrganizationId = loginUser.getUserPo().getOrganizationId();
|
|
||||||
}
|
|
||||||
if (!customerName.matches("\\d+")) {
|
|
||||||
AjaxResult ajaxResult = userServiceFeign.getInfoByName(customerName);
|
|
||||||
if(!"200".equals(String.valueOf(ajaxResult.get("code")))){
|
|
||||||
throw new ServiceException("获取客户信息失败");
|
|
||||||
}
|
|
||||||
UserPo userPo = JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
|
||||||
if (!shipperMatchesImporterOrganization(userPo, loginOrganizationId)) {
|
|
||||||
throw new ServiceException("当前登录用户组织下不存在该客户信息或客户名称与组织不匹配");
|
|
||||||
}
|
|
||||||
stockOutOrderDO.setCustomerId(userPo.getUserId());
|
|
||||||
stockOutOrderDO.setCustomerCode(userPo.getUserMemberCode());
|
|
||||||
stockOutOrderDO.setCustomerName(userPo.getUserName());
|
|
||||||
} else {
|
|
||||||
AjaxResult ajaxResult = userServiceFeign.getInfo(Long.valueOf(customerName));
|
|
||||||
if(!"200".equals(String.valueOf(ajaxResult.get("code")))){
|
|
||||||
throw new ServiceException("获取客户信息失败");
|
|
||||||
}
|
|
||||||
UserPo userPo = JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
|
||||||
if (!shipperMatchesImporterOrganization(userPo, loginOrganizationId)) {
|
|
||||||
throw new ServiceException("当前登录用户组织下不存在该客户信息或客户名称与组织不匹配");
|
|
||||||
}
|
|
||||||
stockOutOrderDO.setCustomerId(userPo.getUserId());
|
|
||||||
stockOutOrderDO.setCustomerCode(userPo.getUserMemberCode());
|
|
||||||
stockOutOrderDO.setCustomerName(userPo.getUserName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验导入明细是否已在当前货主下维护物料基础信息
|
* 校验导入明细是否已在当前货主下维护物料基础信息
|
||||||
*/
|
*/
|
||||||
@@ -324,11 +254,6 @@ public class ExcelParseService {
|
|||||||
return errorMsg;
|
return errorMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 根据客户名称获取货主ID(用于导入时提前获取货主ID)
|
|
||||||
* @param customerName 客户名称(在出库单中,客户名称就是货主名称)
|
|
||||||
* @return 货主ID,如果找不到则返回null
|
|
||||||
*/
|
|
||||||
/**
|
/**
|
||||||
* 导入出库单:解析出的货主用户是否属于当前登录用户同一组织(organizationId)。
|
* 导入出库单:解析出的货主用户是否属于当前登录用户同一组织(organizationId)。
|
||||||
* 仅当登录用户带有 organizationId 时启用过滤;否则保持与旧行为一致。
|
* 仅当登录用户带有 organizationId 时启用过滤;否则保持与旧行为一致。
|
||||||
@@ -344,42 +269,124 @@ public class ExcelParseService {
|
|||||||
return oid != null && loginOrganizationId.equals(oid);
|
return oid != null && loginOrganizationId.equals(oid);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Long getShipperIdByCustomerName(String customerName) {
|
/**
|
||||||
|
* 按客户名称或数字ID解析货主用户,逻辑与入库单导入一致:getInfoByName → 货主列表兜底,均做 organizationId 校验。
|
||||||
|
*/
|
||||||
|
private UserPo resolveCustomerShipperUserPoForImport(String customerName) {
|
||||||
if (StringUtils.isEmpty(customerName)) {
|
if (StringUtils.isEmpty(customerName)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Long loginOrganizationId = null;
|
Long loginOrganizationId = null;
|
||||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||||
loginOrganizationId = loginUser.getUserPo().getOrganizationId();
|
loginOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||||
}
|
}
|
||||||
|
String shipperName = customerName.trim();
|
||||||
|
if (StringUtils.isEmpty(shipperName)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 纯数字:按用户ID查询
|
||||||
|
if (shipperName.matches("\\d+")) {
|
||||||
try {
|
try {
|
||||||
if (!customerName.matches("\\d+")) {
|
Long possibleId = Long.valueOf(shipperName);
|
||||||
// 按名称查询
|
AjaxResult ajaxResult = userServiceFeign.getInfo(possibleId);
|
||||||
AjaxResult ajaxResult = userServiceFeign.getInfoByName(customerName);
|
if ("200".equals(String.valueOf(ajaxResult.get("code"))) && ajaxResult.get("data") != null) {
|
||||||
if ("200".equals(String.valueOf(ajaxResult.get("code")))) {
|
|
||||||
UserPo userPo = JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
UserPo userPo = JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
||||||
if (userPo != null && shipperMatchesImporterOrganization(userPo, loginOrganizationId)) {
|
if (userPo != null && shipperMatchesImporterOrganization(userPo, loginOrganizationId)) {
|
||||||
return userPo.getUserId();
|
return userPo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 按名称查询(用户中心)
|
||||||
|
try {
|
||||||
|
AjaxResult ajaxResult = userServiceFeign.getInfoByName(shipperName);
|
||||||
|
if ("200".equals(String.valueOf(ajaxResult.get("code"))) && ajaxResult.get("data") != null) {
|
||||||
|
UserPo userPo = JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
||||||
|
if (userPo != null && shipperMatchesImporterOrganization(userPo, loginOrganizationId)) {
|
||||||
|
return userPo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
// 继续货主列表兜底
|
||||||
|
}
|
||||||
|
|
||||||
|
// 货主列表兜底(与入库单 getShipperIdByNameOrCode 一致)
|
||||||
|
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 {
|
} else {
|
||||||
// 按ID查询
|
String jsonStr = JSONObject.toJSONString(data);
|
||||||
AjaxResult ajaxResult = userServiceFeign.getInfo(Long.valueOf(customerName));
|
shipperList = JSON.parseObject(jsonStr, new TypeReference<List<Map<String, Object>>>(){});
|
||||||
if ("200".equals(String.valueOf(ajaxResult.get("code")))) {
|
}
|
||||||
UserPo userPo = JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class);
|
|
||||||
if (userPo != null && shipperMatchesImporterOrganization(userPo, loginOrganizationId)) {
|
if (shipperList != null && !shipperList.isEmpty()) {
|
||||||
return userPo.getUserId();
|
String normalizedShipperName = shipperName;
|
||||||
|
for (Map<String, Object> shipper : shipperList) {
|
||||||
|
Object userId = shipper.get("userId");
|
||||||
|
Object userName = shipper.get("userName");
|
||||||
|
if (userName == null) {
|
||||||
|
userName = shipper.get("name");
|
||||||
|
}
|
||||||
|
if (userName == null) {
|
||||||
|
userName = shipper.get("shipperName");
|
||||||
|
}
|
||||||
|
boolean matched = false;
|
||||||
|
if (StringUtils.isNotEmpty(normalizedShipperName) && userName != null) {
|
||||||
|
String normalizedUserName = String.valueOf(userName).trim();
|
||||||
|
if (normalizedShipperName.equals(normalizedUserName)
|
||||||
|
|| normalizedUserName.contains(normalizedShipperName)) {
|
||||||
|
matched = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (matched && userId != null) {
|
||||||
|
Long candidateId = Long.valueOf(String.valueOf(userId));
|
||||||
|
AjaxResult infoRes = userServiceFeign.getInfo(candidateId);
|
||||||
|
if ("200".equals(String.valueOf(infoRes.get("code"))) && infoRes.get("data") != null) {
|
||||||
|
UserPo up = JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(infoRes.get("data")), UserPo.class);
|
||||||
|
if (shipperMatchesImporterOrganization(up, loginOrganizationId)) {
|
||||||
|
return up;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 如果查询失败,返回null,后续在shipperParam方法中会再次尝试
|
// ignore
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
/**
|
||||||
|
* @description 根据客户名称获取货主ID(用于导入时提前获取货主ID)
|
||||||
|
* @param customerName 客户名称(在出库单中,客户名称就是货主名称)
|
||||||
|
* @return 货主ID,如果找不到则返回null
|
||||||
|
*/
|
||||||
|
private Long getShipperIdByCustomerName(String customerName) {
|
||||||
|
UserPo userPo = resolveCustomerShipperUserPoForImport(customerName);
|
||||||
|
return userPo != null ? userPo.getUserId() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user