Commit 517a4784 by yubin

Merge remote-tracking branch 'origin/master'

parents 90af9a4c c7f4c428
...@@ -56,7 +56,7 @@ public class InboundOrdersController extends BaseController ...@@ -56,7 +56,7 @@ public class InboundOrdersController extends BaseController
private IInboundOrdersService inboundOrdersService; private IInboundOrdersService inboundOrdersService;
@Autowired @Autowired
private ISysDictDataService iSysDictDataService; private ISysDictDataService iSysDictDataService;
private static final Logger log = LoggerFactory.getLogger(InboundOrdersServiceImpl.class); private static final Logger log = LoggerFactory.getLogger(InboundOrdersController.class);
/** /**
* 查询入库单主列表 * 查询入库单主列表
*/ */
......
package com.ruoyi.web.controller.inventory; package com.ruoyi.web.controller.inventory;
import java.util.Collections; import java.io.File;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.ruoyi.common.core.domain.entity.Materials; import com.ruoyi.common.core.domain.entity.Materials;
import com.ruoyi.inventory.domain.Inventory; import com.ruoyi.inventory.domain.Inventory;
import com.ruoyi.inventory.domain.OutboundOrderItems; import com.ruoyi.inventory.domain.OutboundOrderItems;
import com.ruoyi.inventory.service.impl.MaterialsServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -33,7 +37,7 @@ public class MaterialsController extends BaseController ...@@ -33,7 +37,7 @@ public class MaterialsController extends BaseController
{ {
@Autowired @Autowired
private IMaterialsService materialsService; private IMaterialsService materialsService;
private static final Logger log = LoggerFactory.getLogger(MaterialsController.class);
/** /**
* 查询物料列表 * 查询物料列表
*/ */
...@@ -100,7 +104,6 @@ public class MaterialsController extends BaseController ...@@ -100,7 +104,6 @@ public class MaterialsController extends BaseController
@PostMapping @PostMapping
public AjaxResult add(@RequestBody Materials materials) public AjaxResult add(@RequestBody Materials materials)
{ {
materials.setId(UUID.randomUUID().toString());
return toAjax(materialsService.insertMaterials(materials)); return toAjax(materialsService.insertMaterials(materials));
} }
...@@ -150,7 +153,7 @@ public class MaterialsController extends BaseController ...@@ -150,7 +153,7 @@ public class MaterialsController extends BaseController
ExcelUtil<Materials> util = new ExcelUtil<Materials>(Materials.class); ExcelUtil<Materials> util = new ExcelUtil<Materials>(Materials.class);
List<Materials> materialsList = util.importExcel(file.getInputStream()); List<Materials> materialsList = util.importExcel(file.getInputStream());
String operName = getUsername(); String operName = getUsername();
String message = materialsService.importMaterials(materialsList, updateSupport, operName); String message = materialsService.importMaterials(materialsList,updateSupport, operName);
return success(message); return success(message);
} }
......
...@@ -106,6 +106,7 @@ public interface MaterialsMapper ...@@ -106,6 +106,7 @@ public interface MaterialsMapper
* @return 结果 * @return 结果
*/ */
public int deleteMaterialsByIds(String[] ids); public int deleteMaterialsByIds(String[] ids);
/** /**
* 获取物料sap和id map字典 * 获取物料sap和id map字典
* *
...@@ -114,5 +115,10 @@ public interface MaterialsMapper ...@@ -114,5 +115,10 @@ public interface MaterialsMapper
@MapKey("sap_no") @MapKey("sap_no")
public Map<String,Map<String,String>> selectMaterialIdAndSapMap(); public Map<String,Map<String,String>> selectMaterialIdAndSapMap();
/**
* 获取物料sap是否存在
*
* @return 结果
*/
public List<Materials> sapIsExist(List<String> sapList);
} }
package com.ruoyi.inventory.service.impl; package com.ruoyi.inventory.service.impl;
import java.util.Date; import java.io.File;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.UUID;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.ruoyi.common.core.domain.entity.Materials; import com.ruoyi.common.core.domain.entity.Materials;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.inventory.domain.OutboundOrderItems; import com.ruoyi.inventory.domain.OutboundOrderItems;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.inventory.mapper.MaterialsMapper; import com.ruoyi.inventory.mapper.MaterialsMapper;
...@@ -28,7 +31,7 @@ public class MaterialsServiceImpl implements IMaterialsService ...@@ -28,7 +31,7 @@ public class MaterialsServiceImpl implements IMaterialsService
{ {
@Autowired @Autowired
private MaterialsMapper materialsMapper; private MaterialsMapper materialsMapper;
private static final Logger log = LoggerFactory.getLogger(MaterialsServiceImpl.class);
/** /**
* 查询物料 * 查询物料
* *
...@@ -66,14 +69,21 @@ public class MaterialsServiceImpl implements IMaterialsService ...@@ -66,14 +69,21 @@ public class MaterialsServiceImpl implements IMaterialsService
@Override @Override
public int insertMaterials(Materials materials) public int insertMaterials(Materials materials)
{ {
materials.setCreateTime(DateUtils.getNowDate()); List<Materials> materialsList = materialsMapper.selectMaterialsBySapNo(materials.getSapNo());
materials.setCreateUserCode(SystemUtils.getUserName()); if (materialsList == null || materialsList.isEmpty()){
materials.setCreateBy(SystemUtils.getUserName()); materials.setId(UUID.randomUUID().toString());
return materialsMapper.insertMaterials(materials); materials.setCreateTime(DateUtils.getNowDate());
materials.setCreateUserCode(SystemUtils.getUserName());
materials.setCreateBy(SystemUtils.getUserName());
materials.setIsUsed(1L);
return materialsMapper.insertMaterials(materials);
}else{
return updateMaterials(materials);
}
} }
/** /**
* 修改物料 * 修改物料(调用updateMaterialsIsUsed方法将原本的物料有效状态设置为0)
* *
* @param materials 物料 * @param materials 物料
* @return 结果 * @return 结果
...@@ -81,14 +91,20 @@ public class MaterialsServiceImpl implements IMaterialsService ...@@ -81,14 +91,20 @@ public class MaterialsServiceImpl implements IMaterialsService
@Override @Override
public int updateMaterials(Materials materials) public int updateMaterials(Materials materials)
{ {
String[] ids = materials.getId().split(",");
updateMaterialsIsUsed(ids);
materials.setId(UUID.randomUUID().toString());
materials.setUpdateUserCode(SystemUtils.getUserName()); materials.setUpdateUserCode(SystemUtils.getUserName());
materials.setUpdateBy(SystemUtils.getUserName()); materials.setUpdateBy(SystemUtils.getUserName());
materials.setUpdateTime(DateUtils.getNowDate()); materials.setUpdateTime(DateUtils.getNowDate());
return materialsMapper.updateMaterials(materials); materials.setIsUsed(1L);
return materialsMapper.insertMaterials(materials);
} }
/** /**
* 修改物料的使用状态 * 修改物料的使用状态(删除用)
* *
* @param ids 需要删除的物料主键 * @param ids 需要删除的物料主键
* @return 结果 * @return 结果
...@@ -111,8 +127,17 @@ public class MaterialsServiceImpl implements IMaterialsService ...@@ -111,8 +127,17 @@ public class MaterialsServiceImpl implements IMaterialsService
{ {
throw new ServiceException("导入用户数据不能为空!"); throw new ServiceException("导入用户数据不能为空!");
} }
int totalNum = 0;
int successNum = 0; int successNum = 0;
int failureNum = 0; int failureNum = 0;
int updateNum = 0;
List<String> sapList = extractSapCodes(materialsList);
List<Materials> sapExist = materialsMapper.sapIsExist(sapList);
Map<String,Integer> sapMap = new HashMap<>();
for (Materials materials : sapExist){
sapMap.put(materials.getSapNo(),1);
}
StringBuilder successMsg = new StringBuilder(); StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder(); StringBuilder failureMsg = new StringBuilder();
Date now = DateUtils.getNowDate(); Date now = DateUtils.getNowDate();
...@@ -122,10 +147,19 @@ public class MaterialsServiceImpl implements IMaterialsService ...@@ -122,10 +147,19 @@ public class MaterialsServiceImpl implements IMaterialsService
{ {
try try
{ {
totalNum++;
String sapNo = materials.getSapNo();
String materialName = materials.getMaterialName();
if (StringUtils.isBlank(sapNo) || StringUtils.isBlank(materialName)) {
failureNum++;
continue;
}
sapNo = materials.getSapNo().trim();
materials.setSapNo(sapNo);
materials.setId(UUID.randomUUID().toString()); materials.setId(UUID.randomUUID().toString());
// 填充创建人、创建时间、修改人、修改时间 // 填充创建人、创建时间、修改人、修改时间
materials.setCreateBy(operId); materials.setCreateBy(operId);
materials.setCreateUserCode(SystemUtils.getUserName());
materials.setCreateTime(now); materials.setCreateTime(now);
// 填充创建用户编码和更新用户编码 // 填充创建用户编码和更新用户编码
materials.setCreateUserCode(operId); materials.setCreateUserCode(operId);
...@@ -142,31 +176,72 @@ public class MaterialsServiceImpl implements IMaterialsService ...@@ -142,31 +176,72 @@ public class MaterialsServiceImpl implements IMaterialsService
{ {
materials.setSortNo(0L); // 默认排序号 materials.setSortNo(0L); // 默认排序号
} }
materialsMapper.insertMaterials(materials); if (sapMap.get(materials.getSapNo()) == null){
successNum++; materialsMapper.insertMaterials(materials);
successMsg.append("<br/>" + successNum + "、物料 " + materials.getMaterialName() + " 导入成功"); successNum++;
successMsg.append("<br/>" + successNum + "、物料 " + materials.getMaterialName() + " 导入成功");
}else{
updateMaterials(materials);
updateNum++;
successMsg.append("<br/>" + updateNum + "、物料 " + materials.getMaterialName() + " 已存在,覆盖完成");
}
} }
catch (Exception e) catch (Exception e)
{ {
failureNum++; failureNum++;
String msg = "<br/>" + failureNum + "、物料 " + materials.getMaterialName() + " 导入失败:"; String msg = "<br/>" + failureNum + "、物料 " + materials.getMaterialName() + " 导入失败:";
failureMsg.append(msg + e.getMessage()); failureMsg.append(msg + e.getMessage());
} }
} }
if (failureNum > 0) if (failureNum > 0)
{ {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确"); failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,SAPNo或物料名称可能不存在");
throw new ServiceException(failureMsg.toString());
}
else
{
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
} }
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + totalNum + " 条,数据如下:");
successMsg.append("<br/>" + failureMsg);
return successMsg.toString(); return successMsg.toString();
} }
/** /**
* 从物料列表中提取SAP标识并去重
* @param materialsList 物料列表(核心参数替换为这个)
* @return 去重后的SAP标识列表
*/
private List<String> extractSapCodes(List<Materials> materialsList) {
// 1. 初始化Set用于自动去重
Set<String> sapCodeSet = new HashSet<>();
// 2. 判空:避免传入null列表导致空指针
if (materialsList == null || materialsList.isEmpty()) {
log.warn("物料列表为空,未提取到任何SAP标识");
return new ArrayList<>();
}
// 3. 遍历物料列表,提取SAP标识
for (Materials material : materialsList) {
// 防御性判空:避免单个物料对象为null
if (material == null) {
continue;
}
// 4. 获取SAP标识(替换为你实际的getter方法,比如getSapId())
String sapCode = material.getSapNo();
// 5. 过滤空值/空白字符串/无效值(和原逻辑一致)
if (StringUtils.hasText(sapCode) && !"null".equalsIgnoreCase(sapCode.trim())) {
// 统一trim去空格,避免" SAP001 "和"SAP001"被判定为不同值
sapCodeSet.add(sapCode.trim());
}
}
// 6. 打印日志(和原逻辑一致)
log.info("物料列表解析完成,共提取到{}个不重复的SAP标识", sapCodeSet.size());
// 7. Set转List返回
return new ArrayList<>(sapCodeSet);
}
/**
* @description: 获取物料 的 sap_no Name 做成字典 * @description: 获取物料 的 sap_no Name 做成字典
* @author cs * @author cs
* @date 2025/12/4 * @date 2025/12/4
......
...@@ -295,4 +295,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -295,4 +295,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectMaterialIdAndSapMap" resultType="java.util.Map"> <select id="selectMaterialIdAndSapMap" resultType="java.util.Map">
select id,sap_no from materials where is_used = 1 select id,sap_no from materials where is_used = 1
</select> </select>
<!-- 精简后的resultMap -->
<resultMap type="Materials" id="MaterialSapResult">
<result column="sap_no" property="sapNo"/>
</resultMap>
<select id="sapIsExist" resultMap="MaterialSapResult" parameterType="java.util.List">
select sap_no from materials
<where>
is_used = 1
and sap_no in
<foreach collection="list" item="sapNo" separator="," open="(" close=")">
#{sapNo}
</foreach>
</where>
</select>
</mapper> </mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论