Browse Source

导入bug修复

master
常熟吴彦祖 2 weeks ago
parent
commit
ee0ea4d3d2
  1. 2
      src/main/java/com/gaotao/modules/autoWareHourceHaian/controller/HaiAnPdaAutoWarehouseController.java
  2. 2
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnPdaAutoWarehouseService.java
  3. 32
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaAutoWarehouseServiceImpl.java
  4. 80
      src/main/java/com/gaotao/modules/notify/service/impl/IssureNotifyServiceImpl.java

2
src/main/java/com/gaotao/modules/autoWareHourceHaian/controller/HaiAnPdaAutoWarehouseController.java

@ -622,7 +622,7 @@ public class HaiAnPdaAutoWarehouseController {
/**
* @author rqrq
* @Description 栈板特殊修改按区域查询全部地面站点,立库区域不使用本接口 - rqrq
* @Description 栈板特殊修改按区域查询所在位置。立库返回固定的4个手工分拣位,其它区域返回地面站点 - rqrq
*/
@PostMapping("/listStationsForSpecialEdit")
public R listStationsForSpecialEdit(@RequestBody HaiAnPdaRequest params) {

2
src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnPdaAutoWarehouseService.java

@ -351,7 +351,7 @@ public interface HaiAnPdaAutoWarehouseService {
/**
* @author rqrq
* @Description 栈板特殊修改按区域查全部地面站点。立库区域拒绝,其它区域合并空闲、已装载、运输中、空载,供所在位置下拉 - rqrq
* @Description 栈板特殊修改按区域查所在位置。立库固定返回手工分拣4个工位,不查WCS;其它区域合并空闲、已装载、运输中、空载 - rqrq
*/
List<HaiAnStationRow> listStationsForSpecialEdit(HaiAnPdaRequest request);

32
src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaAutoWarehouseServiceImpl.java

@ -4160,7 +4160,7 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
/**
* @author rqrq
* @Description 标记立库区域。A01所在位置用手输,其它区域改成站点下拉;比较忽略大小写,空编码不算立库 - rqrq
* @Description 标记立库区域。A01位置下拉改走固定分拣位,是否在货架仍只对立库开放;比较忽略大小写,空编码不算立库 - rqrq
*/
private void markStockArea(List<HaiAnAreaOption> areas) {
for (HaiAnAreaOption area : areas) {
@ -4174,7 +4174,7 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
/**
* @author rqrq
* @Description 栈板特殊修改查询区域全部地面站点。立库不走站点下拉;其它区域按四种状态合并,避免只剩空闲点导致当前占用站点选不中 - rqrq
* @Description 栈板特殊修改查询所在位置。立库不查WCS,固定返回手工分拣4个工位;其它区域按四种状态合并,避免只剩空闲点导致当前占用站点选不中 - rqrq
*/
@Override
public List<HaiAnStationRow> listStationsForSpecialEdit(HaiAnPdaRequest request) {
@ -4184,8 +4184,12 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
if (!StringUtils.hasText(areaId)) {
throw new RuntimeException("所在区域不能为空");
}
// 立库位置不依赖地面点位接口。区域仍须属于当前工厂,避免把别的工厂A01分拣位写进来 - rqrq
if (HaiAnAreaStaticData.STOCK_AREA.equalsIgnoreCase(areaId)) {
throw new RuntimeException("立库区域请直接输入所在位置");
if (haiAnPdaAutoWarehouseMapper.getHaianArea(site, areaId) == null) {
throw new RuntimeException("所在区域不存在:" + areaId);
}
return buildStockAreaSortStations();
}
// 区域必须属于当前工厂,并取出下级区域码再问地面点位 - rqrq
HaiAnAreaOption area = haiAnPdaAutoWarehouseMapper.getHaianArea(site, areaId);
@ -4198,6 +4202,28 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
return queryAllGroundLocations(site, area.getWcsAreaCode().trim());
}
/**
* @author rqrq
* @Description 立库特殊修改的位置候选。固定手工分拣4个工位,顺序与站点常量一致,不查WCS,也不把被分拣位、自动分拣位混进来 - rqrq
*/
private List<HaiAnStationRow> buildStockAreaSortStations() {
List<HaiAnStationRow> rows = new ArrayList<HaiAnStationRow>();
for (String station : HaiAnStationStaticData.MANUAL_SORT_STATIONS) {
if (!StringUtils.hasText(station)) {
continue;
}
String locationCode = station.trim();
HaiAnStationRow row = new HaiAnStationRow();
row.setStationId(locationCode);
row.setStationCode(locationCode);
row.setLocationCode(locationCode);
row.setStationName(locationCode);
row.setStationArea(HaiAnAreaStaticData.STOCK_AREA);
rows.add(row);
}
return rows;
}
/**
* @author rqrq
* @Description 按空闲、已装载、运输中、空载四次查询地面点位并去重。某一种状态失败不丢已查到的站点;四种都失败时,联调模式回退静态点,真实模式抛错 - rqrq

80
src/main/java/com/gaotao/modules/notify/service/impl/IssureNotifyServiceImpl.java

@ -1253,48 +1253,44 @@ public class IssureNotifyServiceImpl implements IssureNotifyService {
throw new RuntimeException("文件格式不正确,只支持.xls和.xlsx格式的Excel文件");
}
// 2. 读取Excel数据 - rqrq
List<Map<String, Object>> excelDataList = ExcelUtil.readExcelToMapList(file);
if (excelDataList.isEmpty()) {
throw new RuntimeException("Excel文件中没有有效数据");
}
// 3. 遍历每行数据,查询是否在立库和可用库存 - rqrq
// 2. 用老导入同一套POI读取。跳过表头,空行跳过;不再走ExcelUtil,避免运行时缺少该类 - rqrq
List<BaoFeiImportResultVo> resultList = new ArrayList<>();
for (int i = 0; i < excelDataList.size(); i++) {
Map<String, Object> rowData = excelDataList.get(i);
int rowIndex = i + 2; // Excel行号(考虑表头)
try (InputStream is = file.getInputStream(); Workbook workbook = WorkbookFactory.create(is)) {
Sheet sheet = workbook.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();
for (int i = 1; i <= lastRowNum; i++) {
Row row = sheet.getRow(i);
if (row == null) {
continue;
}
int rowIndex = i + 1;
// 列顺序与原报废模板一致:A物料号、B批次号、C数量。取值走老方法,后续校验仍按新逻辑 - rqrq
String partNo = StringUtils.trim(getStringCellValue(row, 0));
String batchNoRaw = StringUtils.trim(getStringCellValue(row, 1));
String qtyRaw = StringUtils.trim(getStringCellValue(row, 2));
if (StringUtils.isBlank(partNo) && StringUtils.isBlank(batchNoRaw) && StringUtils.isBlank(qtyRaw)) {
continue;
}
BaoFeiImportResultVo vo = new BaoFeiImportResultVo();
BaoFeiImportResultVo vo = new BaoFeiImportResultVo();
if (StringUtils.isBlank(partNo)) {
throw new RuntimeException("第" + rowIndex + "行的物料号不能为空");
}
vo.setPartNo(partNo);
// 第一列:物料号(A列,索引0)- rqrq
Object partNoObj = rowData.get("0");
if (partNoObj == null || StringUtils.isBlank(partNoObj.toString())) {
throw new RuntimeException("第" + rowIndex + "行的物料号不能为空");
}
String partNo = partNoObj.toString().trim();
vo.setPartNo(partNo);
// 第二列:批次号(B列,索引1)- rqrq
Object batchNoObj = rowData.get("1");
String batchNo = null;
if (batchNoObj != null && StringUtils.isNotBlank(batchNoObj.toString())) {
batchNo = batchNoObj.toString().trim();
}
vo.setBatchNo(batchNo);
String batchNo = StringUtils.isNotBlank(batchNoRaw) ? batchNoRaw : null;
vo.setBatchNo(batchNo);
// 第三列:数量(C列,索引2)- rqrq
Object qtyObj = rowData.get("2");
BigDecimal remark = BigDecimal.ZERO;
if (qtyObj != null && StringUtils.isNotBlank(qtyObj.toString())) {
try {
remark = new BigDecimal(qtyObj.toString().trim());
} catch (NumberFormatException e) {
// 数量格式错误,设为0
remark = BigDecimal.ZERO;
BigDecimal remark = BigDecimal.ZERO;
if (StringUtils.isNotBlank(qtyRaw)) {
try {
remark = new BigDecimal(qtyRaw);
} catch (NumberFormatException e) {
// 数量格式错误,设为0,和原来报废导入一致 - rqrq
remark = BigDecimal.ZERO;
}
}
}
vo.setRemark(remark);
vo.setRemark(remark);
// 4. 查询是否在立库 - rqrq
String isInWh = issureNotifyMapper.getPartIsInWh(site, partNo);
@ -1328,7 +1324,15 @@ public class IssureNotifyServiceImpl implements IssureNotifyService {
// 6. 设置申请数量为可用库存 - rqrq
vo.setApplyQty(availableQty);
resultList.add(vo);
resultList.add(vo);
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new RuntimeException("读取Excel文件失败: " + e.getMessage(), e);
}
if (resultList.isEmpty()) {
throw new RuntimeException("Excel文件中没有有效数据");
}
System.out.println("报废Excel处理完成,共" + resultList.size() + "条数据 - rqrq");

Loading…
Cancel
Save