预约单老系统数据导入;
This commit is contained in:
+57
@@ -15,6 +15,8 @@ import com.mhd.oms.domain.reserveStockOutOrder.repository.facade.IReserveStockOu
|
||||
import com.mhd.oms.domain.reserveStockOutOrder.repository.po.ReserveStockOutOrderPO;
|
||||
import com.mhd.oms.domain.reserveStockOutOrder.repository.todo.ReserveStockOutOrderDO;
|
||||
import com.mhd.oms.domain.reserveStockOutOrder.repository.todo.ReserveStockOutOrderDTO;
|
||||
import com.mhd.oms.domain.reserveStockOutOrder.repository.vo.LegacyReserveOutDetailVO;
|
||||
import com.mhd.oms.domain.reserveStockOutOrder.repository.vo.LegacyReserveOutOrderVO;
|
||||
import com.mhd.oms.domain.reserveStockOutOrder.repository.vo.ReservedInventoryOut;
|
||||
import com.mhd.oms.domain.reserveStockOutOrder.service.ReserveStockOutOrderApplicationService;
|
||||
import com.mhd.oms.domain.reserveStockOutOrder.service.ReserveStockOutOrderAssembler;
|
||||
@@ -303,4 +305,59 @@ public class ReserveStockOutOrderApi extends BaseController {
|
||||
return AjaxResult.success(stockOutOrderApplicationService.generateReserveOrderNumber());
|
||||
}
|
||||
|
||||
/**
|
||||
* 老系统出库预约单数据导入(两个文件:主表+明细)
|
||||
* 通过货主名称、仓库类型、物料名称等匹配基础数据,id类字段不使用
|
||||
* 仓库类型:1=干仓 2=冬仓
|
||||
* 明细物料名称:取物料名称1和物料名称2中有值的那一个
|
||||
*/
|
||||
@ApiOperation("老系统出库预约单数据导入")
|
||||
@PostMapping("/importLegacy")
|
||||
public ResponseEntity<Map<String, Object>> importLegacyData(
|
||||
@RequestParam("orderFile") MultipartFile orderFile,
|
||||
@RequestParam("detailFile") MultipartFile detailFile) {
|
||||
try {
|
||||
// 1. 解析两个Excel文件
|
||||
List<LegacyReserveOutOrderVO> orderList = ExcelParseUtil.parseLegacyOrderExcel(orderFile);
|
||||
List<LegacyReserveOutDetailVO> detailList = ExcelParseUtil.parseLegacyDetailExcel(detailFile);
|
||||
|
||||
// 2. 调用应用服务执行导入
|
||||
Map<String, Object> result = stockOutOrderApplicationService.importLegacyData(orderList, detailList);
|
||||
|
||||
Map<String, Object> successResponse = new HashMap<>();
|
||||
successResponse.put("code", 200);
|
||||
successResponse.put("message", "老系统出库预约单数据导入成功");
|
||||
successResponse.put("orderCount", result.get("orderCount"));
|
||||
successResponse.put("detailCount", result.get("detailCount"));
|
||||
if (result.containsKey("warnings")) {
|
||||
successResponse.put("warnings", result.get("warnings"));
|
||||
}
|
||||
return ResponseEntity.ok(successResponse);
|
||||
|
||||
} catch (ValidationException e) {
|
||||
log.error("老系统出库预约单数据验证失败: {}", e.getMessage(), e);
|
||||
Map<String, Object> errorResponse = new HashMap<>();
|
||||
errorResponse.put("code", 400);
|
||||
errorResponse.put("message", "数据验证失败");
|
||||
errorResponse.put("errorDetails", e.getMessage());
|
||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorResponse);
|
||||
|
||||
} catch (IOException e) {
|
||||
log.error("老系统出库预约单文件处理失败: {}", e.getMessage(), e);
|
||||
Map<String, Object> errorResponse = new HashMap<>();
|
||||
errorResponse.put("code", 500);
|
||||
errorResponse.put("message", "文件处理失败");
|
||||
errorResponse.put("errorDetails", e.getMessage());
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("老系统出库预约单导入失败: {}", e.getMessage(), e);
|
||||
Map<String, Object> errorResponse = new HashMap<>();
|
||||
errorResponse.put("code", 500);
|
||||
errorResponse.put("message", "导入失败");
|
||||
errorResponse.put("errorDetails", e.getMessage());
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+66
@@ -10,12 +10,15 @@ import com.mhd.oms.domain.reserveStockInOrder.repository.todo.ReserveStockInOrde
|
||||
import com.mhd.oms.domain.reserveStockInOrder.repository.todo.ReserveStockInOrderDTO;
|
||||
import com.mhd.oms.domain.reserveStockInOrder.repository.util.ExcelParseUtil;
|
||||
import com.mhd.oms.domain.reserveStockInOrder.repository.vo.InAndOutListVo;
|
||||
import com.mhd.oms.domain.reserveStockInOrder.repository.vo.LegacyReserveInDetailVO;
|
||||
import com.mhd.oms.domain.reserveStockInOrder.repository.vo.LegacyReserveInOrderVO;
|
||||
import com.mhd.oms.domain.reserveStockInOrder.repository.vo.ReservedInventory;
|
||||
import com.mhd.oms.domain.reserveStockInOrder.service.ReserveStockInOrderApplicationService;
|
||||
import com.mhd.oms.domain.reserveStockInOrder.service.ReserveStockInOrderAssembler;
|
||||
import com.mhd.system.api.domain.InMaterialDetailTZPD;
|
||||
import com.mhd.system.api.domain.StockInOrderTZPD;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
@@ -34,6 +37,7 @@ import java.util.Map;
|
||||
* @author gen
|
||||
* @date 2024-05-21
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/reserveStockInOrderApi")
|
||||
public class ReserveStockInOrderApi extends BaseController {
|
||||
@@ -256,6 +260,68 @@ public class ReserveStockInOrderApi extends BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 老系统入库预约单数据导入(主表+明细两个Excel文件批量导入,按名称匹配基础数据)
|
||||
*/
|
||||
@ApiOperation("老系统入库预约单数据导入")
|
||||
@PostMapping("/importLegacy")
|
||||
public ResponseEntity<Map<String, Object>> importLegacyExcel(
|
||||
@RequestParam("orderFile") MultipartFile orderFile,
|
||||
@RequestParam("detailFile") MultipartFile detailFile) {
|
||||
try {
|
||||
List<LegacyReserveInOrderVO> orderList = ExcelParseUtil.parseLegacyOrderExcel(orderFile);
|
||||
List<LegacyReserveInDetailVO> detailList = ExcelParseUtil.parseLegacyDetailExcel(detailFile);
|
||||
|
||||
Map<String, Object> importResult = stockInOrderApplicationService.importLegacyData(orderList, detailList);
|
||||
|
||||
Map<String, Object> successResponse = new HashMap<>();
|
||||
successResponse.put("code", 200);
|
||||
successResponse.put("message", "老系统数据导入成功");
|
||||
successResponse.put("orderCount", importResult.get("orderCount"));
|
||||
successResponse.put("detailCount", importResult.get("detailCount"));
|
||||
if (importResult.containsKey("warnings")) {
|
||||
successResponse.put("warnings", importResult.get("warnings"));
|
||||
}
|
||||
return ResponseEntity.ok(successResponse);
|
||||
|
||||
} catch (ValidationException e) {
|
||||
// 数据验证失败响应
|
||||
log.warn("老系统数据导入校验失败: {}", e.getMessage());
|
||||
Map<String, Object> errorResponse = new HashMap<>();
|
||||
errorResponse.put("code", 400);
|
||||
errorResponse.put("message", "数据验证失败");
|
||||
errorResponse.put("errorDetails", e.getMessage());
|
||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorResponse);
|
||||
|
||||
} catch (IOException e) {
|
||||
// 文件处理失败响应
|
||||
log.error("老系统数据导入文件处理失败", e);
|
||||
Map<String, Object> errorResponse = new HashMap<>();
|
||||
errorResponse.put("code", 500);
|
||||
errorResponse.put("message", "文件处理失败");
|
||||
errorResponse.put("errorDetails", e.getClass().getSimpleName() + ": " + e.getMessage());
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
|
||||
|
||||
} catch (Exception e) {
|
||||
// 其他未知错误响应:打印完整堆栈,把真正的报错信息报出来
|
||||
log.error("老系统数据导入发生未知异常", e);
|
||||
String errorType = e.getClass().getSimpleName();
|
||||
String errorMsg = e.getMessage() != null ? e.getMessage() : "无详细信息";
|
||||
// 如果异常带有 cause,则再追加 cause 信息,方便定位根因
|
||||
Throwable cause = e.getCause();
|
||||
StringBuilder detail = new StringBuilder();
|
||||
detail.append(errorType).append(": ").append(errorMsg);
|
||||
if (cause != null && cause != e) {
|
||||
detail.append(" | 根因: ").append(cause.getClass().getSimpleName()).append(": ").append(cause.getMessage());
|
||||
}
|
||||
Map<String, Object> errorResponse = new HashMap<>();
|
||||
errorResponse.put("code", 500);
|
||||
errorResponse.put("message", detail.toString());
|
||||
errorResponse.put("errorDetails", detail.toString());
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成入库预约单号
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user