diff --git a/mhd-auth/src/main/java/com/mhd/auth/system/controller/SsoAuthorizeController.java b/mhd-auth/src/main/java/com/mhd/auth/system/controller/SsoAuthorizeController.java
index 4891fb10e..024cb8c3f 100644
--- a/mhd-auth/src/main/java/com/mhd/auth/system/controller/SsoAuthorizeController.java
+++ b/mhd-auth/src/main/java/com/mhd/auth/system/controller/SsoAuthorizeController.java
@@ -79,6 +79,7 @@ public class SsoAuthorizeController {
// 5. 重定向到前端页面,token通过URL参数传递
// 前端页面需读取URL中的token参数并存入localStorage
log.info("SSO单点登录成功, account={}", account);
+ log.info("SSO单点登录成功, account={}, token={} , redirectUrl={}", account, accessToken, redirectUrl);
response.sendRedirect(redirectUrl + "?token=" + URLEncoder.encode(accessToken, StandardCharsets.UTF_8.name()));
} catch (Exception e) {
diff --git a/mhd-auth/src/main/java/com/mhd/auth/system/service/SsoAuthorizeService.java b/mhd-auth/src/main/java/com/mhd/auth/system/service/SsoAuthorizeService.java
index e3e6040d6..ee2613ecd 100644
--- a/mhd-auth/src/main/java/com/mhd/auth/system/service/SsoAuthorizeService.java
+++ b/mhd-auth/src/main/java/com/mhd/auth/system/service/SsoAuthorizeService.java
@@ -50,7 +50,7 @@ public class SsoAuthorizeService {
@Value("${sso.public-key}")
private String publicKeyStr;
- @Value("https://diglog.namkwong.com.mo/main_app/sso")
+ @Value("${sso.redirect-url}")
private String redirectUrl;
@Resource
diff --git a/mhd-auth/src/main/java/com/mhd/auth/system/service/SysLoginService.java b/mhd-auth/src/main/java/com/mhd/auth/system/service/SysLoginService.java
index dbf6b5e80..09112dcc3 100644
--- a/mhd-auth/src/main/java/com/mhd/auth/system/service/SysLoginService.java
+++ b/mhd-auth/src/main/java/com/mhd/auth/system/service/SysLoginService.java
@@ -550,11 +550,11 @@ public class SysLoginService {
throw new ServiceException("请输入手机号和短信验证码");
}
- //调用工具类校验,校验手机号格式错误
- if (!RegexUtil.isPhoneLegal(userPhone)) {
- recordLogininfor(userPhone, Constants.LOGIN_FAIL, UserError.USER_PHONE_REG_ERROR.errmsg(), 1);
- throw new DigitalLogisticsException(UserError.USER_PHONE_REG_ERROR);
- }
+// //调用工具类校验,校验手机号格式错误
+// if (!RegexUtil.isPhoneLegal(userPhone)) {
+// recordLogininfor(userPhone, Constants.LOGIN_FAIL, UserError.USER_PHONE_REG_ERROR.errmsg(), 1);
+// throw new DigitalLogisticsException(UserError.USER_PHONE_REG_ERROR);
+// }
//根据域名获取一级组织ID
AjaxResult topOrganizationIdR = organizationServiceFeign.getOrganizationByPath(path, SecurityConstants.INNER);
diff --git a/mhd-auth/src/main/resources/bootstrap.yml b/mhd-auth/src/main/resources/bootstrap.yml
index 0f7b839c1..828fff329 100644
--- a/mhd-auth/src/main/resources/bootstrap.yml
+++ b/mhd-auth/src/main/resources/bootstrap.yml
@@ -15,7 +15,7 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -24,7 +24,7 @@ spring:
# password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
# 测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
@@ -52,4 +52,4 @@ sso:
AwIDAQAB
-----END PUBLIC KEY-----
# SSO登录成功后跳转的前端页面地址
- redirect-url: "/"
+ redirect-url: "https://diglog.namkwong.com.mo/main_app/sso"
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/storageSection/service/StorageSectionDomainService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/storageSection/service/StorageSectionDomainService.java
index db2ba5435..5fbe57933 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/storageSection/service/StorageSectionDomainService.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/storageSection/service/StorageSectionDomainService.java
@@ -91,31 +91,15 @@ public class StorageSectionDomainService {
public Boolean update(StorageSectionDO storageSectionDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
- AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid());
- if (topOrganizationId == null || topOrganizationId == 0 || associationWarehouseCacheDO == null) {
- throw new ServiceException("获取当前登陆人组织与登陆仓库失败!");
+ if (topOrganizationId == null || topOrganizationId == 0) {
+ throw new ServiceException("获取当前登陆人组织失败!");
}
- checkStorageSectionDuplicate(topOrganizationId, associationWarehouseCacheDO.getWarehouseId(),
+ // 直接用记录自身的 warehouseId 做唯一校验,不再依赖缓存仓库
+ checkStorageSectionDuplicate(topOrganizationId, storageSectionDO.getWarehouseId(),
storageSectionDO.getStorageCode(), storageSectionDO.getStorageName(),
storageSectionDO.getStorageSectionId());
//设置仓库
setWarehouseInfo(storageSectionDO);
- String storageCode = storageSectionDO.getStorageCode();
- String storageName = storageSectionDO.getStorageName();
- Long warehouseId = storageSectionDO.getWarehouseId();
- List codelist = storageSectionService.list(new QueryWrapper().lambda()
- .eq(StorageSection::getStorageCode, storageCode)
- .eq(StorageSection::getWarehouseId, warehouseId)
- .ne(StorageSection::getStorageSectionId, storageSectionDO.getStorageSectionId())
- .eq(StorageSection::getDelFlag, 1));
- List namelist = storageSectionService.list(new QueryWrapper().lambda()
- .eq(StorageSection::getStorageName, storageName)
- .eq(StorageSection::getWarehouseId, warehouseId)
- .ne(StorageSection::getStorageSectionId, storageSectionDO.getStorageSectionId())
- .eq(StorageSection::getDelFlag, 1));
- if ((codelist != null && codelist.size() > 0) || (namelist != null && namelist.size() > 0)) {
- throw new ServiceException("库区编码或名称已存在");
- }
return storageSectionService.update(storageSectionDO);
}
diff --git a/mhd-modules/mhd-system/src/main/resources/bootstrap.yml b/mhd-modules/mhd-system/src/main/resources/bootstrap.yml
index 79f1a3df7..aa660b126 100644
--- a/mhd-modules/mhd-system/src/main/resources/bootstrap.yml
+++ b/mhd-modules/mhd-system/src/main/resources/bootstrap.yml
@@ -16,7 +16,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -25,7 +25,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/AgreementDetailsApplicationService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/AgreementDetailsApplicationService.java
index 4b9703459..99d56c911 100644
--- a/mhd-user-center/src/main/java/com/mhd/user/application/service/AgreementDetailsApplicationService.java
+++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/AgreementDetailsApplicationService.java
@@ -1,12 +1,22 @@
package com.mhd.user.application.service;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.user.domain.userAggregate.entity.AgreementDetails;
+import com.mhd.user.domain.userAggregate.entity.UserShipperEntity;
import com.mhd.user.domain.userAggregate.repository.mapper.AgreementDetailsMapper;
+import com.mhd.user.domain.userAggregate.repository.mapper.UserShipperMapper;
+import com.mhd.user.domain.userAggregate.repository.po.AgreementDetailsPo;
+import com.mhd.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
/**
@@ -19,18 +29,87 @@ public class AgreementDetailsApplicationService {
@Resource
private AgreementDetailsMapper agreementDetailsMapper;
+ @Resource
+ private UserShipperMapper userShipperMapper;
+
/**
- * 根据货主ID查询所有协议明细
+ * 根据货主ID查询当前登录用户组织下的协议明细
+ * 从user_shipper表的orgCode字段解析JSON,匹配当前登录用户组织code,
+ * 返回该组织下的agreedaydatas列表
*
* @param shipperId 货主ID
* @return 协议明细列表
*/
- public List listByShipperId(Long shipperId) {
- return agreementDetailsMapper.selectList(
- new LambdaQueryWrapper()
- .eq(AgreementDetails::getShipperId, shipperId)
- .orderByDesc(AgreementDetails::getCreateTime)
- );
+ public List listByShipperId(Long shipperId) {
+ // 1. 获取当前登录用户组织ID
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (ObjectUtil.isNull(loginUser) || ObjectUtil.isNull(loginUser.getUserPo())) {
+ log.warn("未获取到登录用户信息");
+ return Collections.emptyList();
+ }
+ Long organizationId = loginUser.getUserPo().getOrganizationId();
+ if (ObjectUtil.isNull(organizationId)) {
+ log.warn("当前登录用户无组织信息");
+ return Collections.emptyList();
+ }
+
+ // 2. 根据shipperId查询货主信息,获取orgCode字段
+ UserShipperEntity shipperEntity = userShipperMapper.selectById(shipperId);
+ if (ObjectUtil.isNull(shipperEntity)) {
+ log.warn("未找到货主信息,shipperId={}", shipperId);
+ return Collections.emptyList();
+ }
+ String orgCodeJson = shipperEntity.getOrgCode();
+ if (ObjectUtil.isNull(orgCodeJson) || orgCodeJson.isEmpty()) {
+ log.warn("货主orgCode为空,shipperId={}", shipperId);
+ return Collections.emptyList();
+ }
+
+ // 3. 解析orgCode JSON数组,匹配当前登录用户组织code
+ JSONArray orgCodeArray = JSONArray.parseArray(orgCodeJson);
+ if (orgCodeArray == null || orgCodeArray.isEmpty()) {
+ return Collections.emptyList();
+ }
+
+ JSONObject matchedOrg = null;
+ for (int i = 0; i < orgCodeArray.size(); i++) {
+ JSONObject orgItem = orgCodeArray.getJSONObject(i);
+ Long code = orgItem.getLong("code");
+ if (organizationId.equals(code)) {
+ matchedOrg = orgItem;
+ break;
+ }
+ }
+
+ if (matchedOrg == null) {
+ log.info("未匹配到当前组织的协议信息,shipperId={},organizationId={}", shipperId, organizationId);
+ return Collections.emptyList();
+ }
+
+ // 4. 获取匹配组织的agreedaydatas
+ JSONArray agreedaydatas = matchedOrg.getJSONArray("agreedaydatas");
+ if (agreedaydatas == null || agreedaydatas.isEmpty()) {
+ log.info("当前组织下无协议天数数据,shipperId={},organizationId={}", shipperId, organizationId);
+ return Collections.emptyList();
+ }
+
+ // 5. 转换为AgreementDetailsPo列表
+ List result = new ArrayList<>();
+ for (int i = 0; i < agreedaydatas.size(); i++) {
+ JSONObject item = agreedaydatas.getJSONObject(i);
+ AgreementDetailsPo po = new AgreementDetailsPo();
+ po.setCode(item.getString("code"));
+ po.setOrgcode(item.getString("orgcode"));
+ po.setPtypename(item.getString("ptypename"));
+ po.setPtype(item.getString("ptype"));
+ po.setPcode(item.getString("pcode"));
+ po.setPname(item.getString("pname"));
+ po.setPday(item.getString("pday"));
+ result.add(po);
+ }
+
+ log.info("查询协议明细成功,shipperId={},organizationId={},共{}条", shipperId, organizationId, result.size());
+ return result;
}
/**
diff --git a/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/repository/po/AgreementDetailsPo.java b/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/repository/po/AgreementDetailsPo.java
new file mode 100644
index 000000000..a01334043
--- /dev/null
+++ b/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/repository/po/AgreementDetailsPo.java
@@ -0,0 +1,32 @@
+package com.mhd.user.domain.userAggregate.repository.po;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 协议天数PO
+ */
+@Data
+public class AgreementDetailsPo {
+
+ @ApiModelProperty("客户编码")
+ private String code;
+
+ @ApiModelProperty("协议组织编码")
+ private String orgcode;
+
+ @ApiModelProperty("协议类型名称")
+ private String ptypename;
+
+ @ApiModelProperty("协议类型:1-付款协议天数,2-收款协议天数")
+ private String ptype;
+
+ @ApiModelProperty("财务系统协议编码")
+ private String pcode;
+
+ @ApiModelProperty("协议天数名称")
+ private String pname;
+
+ @ApiModelProperty("协议天数")
+ private String pday;
+}
diff --git a/mhd-user-center/src/main/resources/bootstrap.yml b/mhd-user-center/src/main/resources/bootstrap.yml
index 6bf4ff00a..dd13bfba5 100644
--- a/mhd-user-center/src/main/resources/bootstrap.yml
+++ b/mhd-user-center/src/main/resources/bootstrap.yml
@@ -21,14 +21,14 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
index af18fa80b..93070d2f4 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
@@ -271,9 +271,25 @@ public class ReservationStockInOrderImpl extends ServiceImpl接口层调用此方法,将文件保存到临时目录后立即返回"异步处理中",
+ * 实际导入由 {@link #doImportData(File, String, LoginUser)} 异步执行,
+ * 避免大数据量时接口超时。
+ */
+ public AjaxResult importDataAsync(MultipartFile file) {
+ if (file == null || file.isEmpty()) {
+ throw new ServiceException("上传文件不能为空");
+ }
+ String fileName = file.getOriginalFilename();
+ if (org.apache.commons.lang3.StringUtils.isBlank(fileName)
+ || (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx"))) {
+ throw new ServiceException("请上传xls或xlsx格式文件");
+ }
+
+ // 流式写入临时文件,避免大文件 getBytes() 导致内存溢出和接口超时
+ String tmpDir = System.getProperty("java.io.tmpdir") + File.separator + "material_import";
+ File dir = new File(tmpDir);
+ if (!dir.exists()) {
+ dir.mkdirs();
+ }
+ String tmpFileName = System.currentTimeMillis() + "_" + fileName;
+ File tmpFile = new File(dir, tmpFileName);
+ try {
+ file.transferTo(tmpFile);
+ } catch (Exception e) {
+ throw new ServiceException("文件保存失败:" + e.getMessage());
+ }
+
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ // 通过独立的异步 Service 执行导入(避免类内部 self-invocation 导致 @Async 失效)
+ materialBaseInfoAsyncService.doImportData(tmpFile, fileName, loginUser);
+
+ return AjaxResult.success("导入任务已提交,正在后台异步处理,请稍后查看导入结果日志");
+ }
+
+ /**
+ * 导入物料主数据(仅导入主表字段)- 原同步方法保留,供其他场景调用
*/
@Transactional(rollbackFor = Exception.class)
public AjaxResult importData(MultipartFile file) {
@@ -496,7 +542,6 @@ public class MaterialBaseInfoApplicationService {
row.setHsCode(row.getHsCodeImport().trim());
}
normalizeImportBarCodeWhenDuplicateOfHs(row);
- // 客户模板通常只有「货主名称」无「货主id」:须先按名称解析货主,再回填组织;勿提前写入登录组织以免组织校验拦截货主匹配
fillIdsFromExistingMasterData(row);
fillOrganizationFromShipperIfNeeded(row);
if (!isValidOrgId(row.getOrganizationId()) && isValidOrgId(loginOrgId)) {
@@ -567,25 +612,20 @@ public class MaterialBaseInfoApplicationService {
materialBaseInfoDO.setMaterialCommon(null);
materialBaseInfoDO.setMaterialWarehouseControl(null);
materialBaseInfoDO.setMaterialBarCodeList(buildImportBarCodeList(row));
- // 商品规则由 buildImportMaterialGoodsRule + insert() 统一写入,勿再单独 insert,避免 MATERIAL_GOODS_RULE 重复
insert(materialBaseInfoDO);
Long materialBaseInfoId = materialBaseInfoDO.getMaterialBaseInfoId();
- //公共信息
MaterialCommonDO materialCommonDO = materialBaseInfoDO.getMaterialCommon();
if (materialCommonDO != null) {
materialCommonDO.setMaterialBaseInfoId(materialBaseInfoId);
materialCommonDomainService.insert(materialCommonDO);
}
- //仓库控制信息
MaterialWarehouseControlDO materialWarehouseControlDO = materialBaseInfoDO.getMaterialWarehouseControl();
if (materialWarehouseControlDO != null) {
materialWarehouseControlDO.setMaterialBaseInfoId(materialBaseInfoId);
materialWarehouseControlDomainService.insert(materialWarehouseControlDO);
}
- //库存预警
materialInventoryWarningDomainService.batchInsertOrUpdate(materialBaseInfoDO);
- //条码信息
materialBarCodeDomainService.batchInsertOrUpdate(materialBaseInfoDO);
successCount++;
}
@@ -596,10 +636,11 @@ public class MaterialBaseInfoApplicationService {
return AjaxResult.success("导入成功,共" + successCount + "条");
}
+
/**
* 使用已存在主数据按名称/编码反查并回填ID
*/
- private void fillIdsFromExistingMasterData(MaterialBaseInfoDTO row) {
+ public void fillIdsFromExistingMasterData(MaterialBaseInfoDTO row) {
if (StringUtils.isBlank(row.getPackName()) && StringUtils.isNotBlank(row.getPackImport())) {
row.setPackName(row.getPackImport().trim());
}
@@ -818,10 +859,14 @@ public class MaterialBaseInfoApplicationService {
Object userCode = shipper.get("userCode");
Object userMemberCode = shipper.get("userMemberCode");
Object entName = shipper.get("shipperEnterpriseName");
- if (userName == null) {
+ // userName 可能为空字符串而非 null,需同时判断空字符串
+ if (userName == null || String.valueOf(userName).trim().isEmpty()) {
+ userName = shipper.get("userNameShipper");
+ }
+ if (userName == null || String.valueOf(userName).trim().isEmpty()) {
userName = shipper.get("name");
}
- if (userName == null) {
+ if (userName == null || String.valueOf(userName).trim().isEmpty()) {
userName = shipper.get("shipperName");
}
String normalizedName = StringUtils.isNotBlank(shipperName) ? shipperName : "";
@@ -919,7 +964,7 @@ public class MaterialBaseInfoApplicationService {
/**
* Excel 已填货主 ID、但未填组织时,从货主用户补全组织信息。
*/
- private void fillOrganizationFromShipperIfNeeded(MaterialBaseInfoDTO row) {
+ public void fillOrganizationFromShipperIfNeeded(MaterialBaseInfoDTO row) {
if (isValidOrgId(row.getOrganizationId()) || row.getShipperId() == null) {
return;
}
@@ -978,7 +1023,7 @@ public class MaterialBaseInfoApplicationService {
}
}
- private void fillOrganizationName(MaterialBaseInfoDTO row, LoginUser loginUser) {
+ public void fillOrganizationName(MaterialBaseInfoDTO row, LoginUser loginUser) {
if (StringUtils.isNotBlank(row.getOrganizationName())) {
return;
}
@@ -998,7 +1043,7 @@ public class MaterialBaseInfoApplicationService {
}
}
- private void fillClassifyTypeAndUnit(MaterialBaseInfoDTO row) {
+ public void fillClassifyTypeAndUnit(MaterialBaseInfoDTO row) {
normalizeMaterialClassifyImportFields(row);
// 按组织从 system 主数据反查分类编码,与名称列表对齐
fillMaterialClassifyCodesFromSystem(row);
@@ -1179,7 +1224,7 @@ public class MaterialBaseInfoApplicationService {
* 导入约定:「HS码/HS编码」与「物料条形码」为不同列。模板表头错位或两列误填相同 HS 时,
* barCode 会与 hsCode 相同;此时保留 hsCode,清空主表/子表条码,避免 HS 写入 bar_code。
*/
- private void normalizeImportBarCodeWhenDuplicateOfHs(MaterialBaseInfoDTO row) {
+ public void normalizeImportBarCodeWhenDuplicateOfHs(MaterialBaseInfoDTO row) {
if (row == null) {
return;
}
@@ -1194,7 +1239,7 @@ public class MaterialBaseInfoApplicationService {
}
}
- private List buildImportBarCodeList(MaterialBaseInfoDTO row) {
+ public List buildImportBarCodeList(MaterialBaseInfoDTO row) {
if (StringUtils.isBlank(row.getBarCode())) {
return null;
}
@@ -1234,7 +1279,7 @@ public class MaterialBaseInfoApplicationService {
return idObj == null ? null : Long.valueOf(String.valueOf(idObj));
}
- private MaterialGoodsRuleDO buildImportMaterialGoodsRule(MaterialBaseInfoDTO row) {
+ public MaterialGoodsRuleDO buildImportMaterialGoodsRule(MaterialBaseInfoDTO row) {
String batchName = StringUtils.isNotBlank(row.getBatchRuleNameImport())
? row.getBatchRuleNameImport().trim()
: (StringUtils.isNotBlank(row.getBatchName())
@@ -1309,7 +1354,7 @@ public class MaterialBaseInfoApplicationService {
.trim();
}
- private List