|
|
|
|
@ -187,6 +187,15 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
Integer trayNum = packageVO.getTrayNum() != null ? packageVO.getTrayNum().intValue() : 0;
|
|
|
|
|
VUtil.trueThrowBusinessError(trayNum <= 0).throwMessage("托盘数量必须大于0");
|
|
|
|
|
|
|
|
|
|
return generateTrayWithTrayNum(packageVO, supplierCode, num, orderNum, trayNum);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 生成托盘(指定托盘数量)
|
|
|
|
|
*/
|
|
|
|
|
private GenerateTrayVO generateTrayWithTrayNum(PackageVO packageVO, String supplierCode, BigDecimal num, BigDecimal orderNum, Integer trayNum) {
|
|
|
|
|
VUtil.trueThrowBusinessError(trayNum <= 0).throwMessage("托盘数量必须大于0");
|
|
|
|
|
|
|
|
|
|
// 生成日期部分:年后2位+月2位+日2位
|
|
|
|
|
LocalDate now = LocalDate.now();
|
|
|
|
|
String datePart = String.format("%02d%02d%02d",
|
|
|
|
|
@ -212,7 +221,7 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
TrayVO tray = new TrayVO()
|
|
|
|
|
.setNo(generatedTrayNo)
|
|
|
|
|
.setTray("") // 托盘序号设置为空
|
|
|
|
|
// .setStation(material.getStation())
|
|
|
|
|
.setStation("")
|
|
|
|
|
.setMaterialNo(packageVO.getNo())
|
|
|
|
|
.setMaterialDesc(packageVO.getName())
|
|
|
|
|
.setTotalWeight(BigDecimal.ZERO);
|
|
|
|
|
@ -322,19 +331,13 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
.setNum(BigDecimal.ZERO)
|
|
|
|
|
.setStation(it.getStation())
|
|
|
|
|
.setTray(it.getTray())).toList();
|
|
|
|
|
List<WmsStructuralPackageOrderTrayItem> items = new ArrayList<>();
|
|
|
|
|
trays.forEach(tray -> {
|
|
|
|
|
List<TrayItemVO> itemVOS = trayVO.getItems().stream().filter(it -> StrUtil.equals(it.getNo(), tray.getNo())).toList();
|
|
|
|
|
items.addAll(itemVOS.stream().map(it -> {
|
|
|
|
|
WmsStructuralPackageOrderTrayItem item = Convert.convert(WmsStructuralPackageOrderTrayItem.class, it);
|
|
|
|
|
item.setOrderId(order.getId());
|
|
|
|
|
item.setTrayId(tray.getId());
|
|
|
|
|
tray.setNum(tray.getNum().add(item.getShipmentNum()));
|
|
|
|
|
tray.setWeight(tray.getWeight().add(NumberUtil.mul(it.getWeight(), item.getShipmentNum())));
|
|
|
|
|
return item;
|
|
|
|
|
}).toList()
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
List<WmsStructuralPackageOrderTrayItem> items = trayVO.getItems().stream().map(it -> {
|
|
|
|
|
WmsStructuralPackageOrderTrayItem item = Convert.convert(WmsStructuralPackageOrderTrayItem.class, it);
|
|
|
|
|
item.setOrderId(order.getId());
|
|
|
|
|
// 不再设置 trayId,断开与托盘的关联
|
|
|
|
|
item.setTrayId(-1L);
|
|
|
|
|
return item;
|
|
|
|
|
}).toList();
|
|
|
|
|
structuralPackageOrderTrayService.saveBatch(trays);
|
|
|
|
|
structuralPackageOrderTrayItemService.deleteByOrderId(order.getId());
|
|
|
|
|
structuralPackageOrderTrayItemService.saveBatch(items);
|
|
|
|
|
@ -430,11 +433,15 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
);
|
|
|
|
|
List<WmsStructuralPackageOrderTrayItem> items = structuralPackageOrderTrayItemService.getList(id);
|
|
|
|
|
vo.setItems(items.stream().map(item -> {
|
|
|
|
|
WmsStructuralPackageOrderTray tray = trays.stream().filter(it -> Objects.equals(it.getId(), item.getTrayId())).findFirst().get();
|
|
|
|
|
TrayItemVO ivo = Convert.convert(TrayItemVO.class, item);
|
|
|
|
|
ivo.setNo(tray.getNo());
|
|
|
|
|
if (Objects.equals(tray.getState(), (short) 3)) {
|
|
|
|
|
ivo.setStoreNum(item.getStoreNum());
|
|
|
|
|
// 由于断开了与托盘的关联,托盘号设置为空
|
|
|
|
|
ivo.setNo("");
|
|
|
|
|
// 获取订单下的任意一个托盘状态(如果有托盘的话)
|
|
|
|
|
if (CollectionUtil.isNotEmpty(trays)) {
|
|
|
|
|
WmsStructuralPackageOrderTray firstTray = trays.get(0);
|
|
|
|
|
if (Objects.equals(firstTray.getState(), (short) 3)) {
|
|
|
|
|
ivo.setStoreNum(item.getStoreNum());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ivo;
|
|
|
|
|
}).toList());
|
|
|
|
|
@ -490,33 +497,43 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
/**
|
|
|
|
|
* 获取托盘零件列表
|
|
|
|
|
*
|
|
|
|
|
* @param id 托盘id
|
|
|
|
|
* @param id 订单id
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping("getItems")
|
|
|
|
|
public ApiResult<List<DeliverStructuralPackageOrderTrayItemVO>> getItems(@Valid @RequestParam @NotNull Long id) {
|
|
|
|
|
return ApiResult.success(structuralPackageOrderTrayItemService.getListVOByTrayId(id));
|
|
|
|
|
// 直接根据订单ID获取物料项列表,不再依赖托盘关联
|
|
|
|
|
List<DeliverStructuralPackageOrderTrayItemVO> result = structuralPackageOrderTrayItemService.getListVOByOrderId(id);
|
|
|
|
|
return ApiResult.success(result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 导出托盘零件列表
|
|
|
|
|
*
|
|
|
|
|
* @param id 托盘id
|
|
|
|
|
* @param id 订单id
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("exportItems")
|
|
|
|
|
public void exportItems(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws IOException {
|
|
|
|
|
List<DeliverStructuralPackageOrderTrayItemVO> list = structuralPackageOrderTrayItemService.getListVOByTrayId(id);
|
|
|
|
|
// 直接根据订单ID获取物料项列表,不再依赖托盘关联
|
|
|
|
|
List<DeliverStructuralPackageOrderTrayItemVO> list = structuralPackageOrderTrayItemService.getListVOByOrderId(id);
|
|
|
|
|
EecExcelUtil.export("零件信息", "sheet1", list, response);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 导出老鼠图PDF
|
|
|
|
|
*
|
|
|
|
|
* @param id 托盘id
|
|
|
|
|
* @param id 订单id
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping("exportPdf")
|
|
|
|
|
public ApiResult<String> exportPdf(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception {
|
|
|
|
|
DeliverStructuralPackageOrderExtendVO trayVO = structuralPackageOrderTrayService.getInfo(id);
|
|
|
|
|
// 根据订单ID获取第一个托盘信息用于生成PDF
|
|
|
|
|
List<WmsStructuralPackageOrderTray> trays = structuralPackageOrderTrayService.getList(id);
|
|
|
|
|
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(trays)).throwMessage("数据不存在");
|
|
|
|
|
|
|
|
|
|
// 使用第一个托盘的信息
|
|
|
|
|
WmsStructuralPackageOrderTray firstTray = trays.get(0);
|
|
|
|
|
DeliverStructuralPackageOrderExtendVO trayVO = structuralPackageOrderTrayService.getInfo(firstTray.getId());
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(trayVO)).throwMessage("数据不存在");
|
|
|
|
|
|
|
|
|
|
PackageVO vo = new PackageVO()
|
|
|
|
|
.setNo(trayVO.getPackageNo())
|
|
|
|
|
.setExternalOrderNo(trayVO.getExternalOrderNo())
|
|
|
|
|
@ -531,8 +548,11 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
.setDrawingNo(trayVO.getPackageDrawingNo())
|
|
|
|
|
.setName(trayVO.getPackageDesc())
|
|
|
|
|
.setQrCode(QRCodeUtil.generateQRCodeBase64(trayVO.getPackageNo(), 100, 100));
|
|
|
|
|
List<DeliverStructuralPackageOrderTrayItemVO> list = structuralPackageOrderTrayItemService.getListVOByTrayId(id);
|
|
|
|
|
List<PackageMaterialDTO> items = list.stream().map(item -> new PackageMaterialDTO()
|
|
|
|
|
|
|
|
|
|
// 获取该订单下的所有物料项,不再依赖托盘关联
|
|
|
|
|
List<DeliverStructuralPackageOrderTrayItemVO> allItems = structuralPackageOrderTrayItemService.getListVOByOrderId(id);
|
|
|
|
|
|
|
|
|
|
List<PackageMaterialDTO> items = allItems.stream().map(item -> new PackageMaterialDTO()
|
|
|
|
|
.setImage(item.getImage())
|
|
|
|
|
.setNo(item.getMaterialNo())
|
|
|
|
|
.setDrawingNo(item.getDrawingNo())
|
|
|
|
|
@ -554,13 +574,21 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
/**
|
|
|
|
|
* 导出零件标签PDF
|
|
|
|
|
*
|
|
|
|
|
* @param id 托盘id
|
|
|
|
|
* @param id 订单id
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping("exportItemPdf")
|
|
|
|
|
public void exportItemPdf(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception {
|
|
|
|
|
DeliverStructuralPackageOrderExtendVO trayVO = structuralPackageOrderTrayService.getInfo(id);
|
|
|
|
|
// 根据订单ID获取第一个托盘信息
|
|
|
|
|
List<WmsStructuralPackageOrderTray> trays = structuralPackageOrderTrayService.getList(id);
|
|
|
|
|
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(trays)).throwMessage("数据不存在");
|
|
|
|
|
|
|
|
|
|
WmsStructuralPackageOrderTray firstTray = trays.get(0);
|
|
|
|
|
DeliverStructuralPackageOrderExtendVO trayVO = structuralPackageOrderTrayService.getInfo(firstTray.getId());
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(trayVO)).throwMessage("数据不存在");
|
|
|
|
|
List<DeliverStructuralPackageOrderTrayItemVO> list = structuralPackageOrderTrayItemService.getListVOByTrayId(id);
|
|
|
|
|
|
|
|
|
|
// 获取该订单下的所有物料项,不再依赖托盘关联
|
|
|
|
|
List<DeliverStructuralPackageOrderTrayItemVO> list = structuralPackageOrderTrayItemService.getListVOByOrderId(id);
|
|
|
|
|
|
|
|
|
|
List<DeliverStructuralPackageOrderTrayItemVO> datas = new ArrayList<>();
|
|
|
|
|
for (DeliverStructuralPackageOrderTrayItemVO it : list) {
|
|
|
|
|
String code = Base62Util.encode(it.getId());
|
|
|
|
|
@ -590,13 +618,21 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
/**
|
|
|
|
|
* 导出零件标签图片ZIP
|
|
|
|
|
*
|
|
|
|
|
* @param id 托盘id
|
|
|
|
|
* @param id 订单id
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping(value = "exportItemImageZip", produces = "application/zip")
|
|
|
|
|
public ResponseEntity<byte[]> exportItemImageZip(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception {
|
|
|
|
|
DeliverStructuralPackageOrderExtendVO trayVO = structuralPackageOrderTrayService.getInfo(id);
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(trayVO)).throwMessage("数据不存在");
|
|
|
|
|
List<DeliverStructuralPackageOrderTrayItemVO> list = structuralPackageOrderTrayItemService.getListVOByTrayId(id);
|
|
|
|
|
// 获取订单信息
|
|
|
|
|
DeliverStructuralPackageOrderVO orderVO = structuralPackageOrderService.getInfo(id);
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(orderVO)).throwMessage("数据不存在");
|
|
|
|
|
|
|
|
|
|
// 获取第一个托盘信息用于生成标签
|
|
|
|
|
List<WmsStructuralPackageOrderTray> trays = structuralPackageOrderTrayService.getList(id);
|
|
|
|
|
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(trays)).throwMessage("数据不存在");
|
|
|
|
|
DeliverStructuralPackageOrderExtendVO trayVO = structuralPackageOrderTrayService.getInfo(trays.get(0).getId());
|
|
|
|
|
|
|
|
|
|
// 直接根据订单ID获取物料项列表,不再依赖托盘关联
|
|
|
|
|
List<DeliverStructuralPackageOrderTrayItemVO> list = structuralPackageOrderTrayItemService.getListVOByOrderId(id);
|
|
|
|
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
|
|
|
try (ZipOutputStream zos = new ZipOutputStream(baos)) {
|
|
|
|
|
List<DeliverStructuralPackageOrderTrayItemVO> datas = new ArrayList<>();
|
|
|
|
|
@ -640,18 +676,27 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
/**
|
|
|
|
|
* 导出托盘标签PDF
|
|
|
|
|
*
|
|
|
|
|
* @param id 托盘id
|
|
|
|
|
* @param id 订单id
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping("exportTrayPdf")
|
|
|
|
|
public void exportTrayPdf(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception {
|
|
|
|
|
DeliverStructuralPackageOrderExtendVO trayVO = structuralPackageOrderTrayService.getInfo(id);
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(trayVO)).throwMessage("数据不存在");
|
|
|
|
|
trayVO.setQrCode(QRCodeUtil.generateQRCodeBase64(trayVO.getTrayNo(), 100, 100));
|
|
|
|
|
Map<String, Object> variables = new HashMap<>();
|
|
|
|
|
variables.put("info", trayVO);
|
|
|
|
|
String html = ThymeleafUtil.generator("/template/qrcode/", "tray", ".html", variables);
|
|
|
|
|
URL baseUrl = new ClassPathResource("template/qrcode/").getURL();
|
|
|
|
|
PdfGeneratorUtil.generatePdf("托盘标签" + trayVO.getTrayNo(), html, baseUrl.toString(), response);
|
|
|
|
|
// 根据订单ID获取所有托盘,为每个托盘生成标签
|
|
|
|
|
List<WmsStructuralPackageOrderTray> trays = structuralPackageOrderTrayService.getList(id);
|
|
|
|
|
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(trays)).throwMessage("数据不存在");
|
|
|
|
|
|
|
|
|
|
// 这里需要为订单下的所有托盘生成标签
|
|
|
|
|
// 由于原方法只处理单个托盘,现在需要遍历所有托盘
|
|
|
|
|
for (WmsStructuralPackageOrderTray tray : trays) {
|
|
|
|
|
DeliverStructuralPackageOrderExtendVO trayVO = structuralPackageOrderTrayService.getInfo(tray.getId());
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(trayVO)).throwMessage("数据不存在");
|
|
|
|
|
trayVO.setQrCode(QRCodeUtil.generateQRCodeBase64(trayVO.getTrayNo(), 100, 100));
|
|
|
|
|
Map<String, Object> variables = new HashMap<>();
|
|
|
|
|
variables.put("info", trayVO);
|
|
|
|
|
String html = ThymeleafUtil.generator("/template/qrcode/", "tray", ".html", variables);
|
|
|
|
|
URL baseUrl = new ClassPathResource("template/qrcode/").getURL();
|
|
|
|
|
// 注意:这里会多次调用response,实际使用时可能需要合并PDF或返回ZIP
|
|
|
|
|
PdfGeneratorUtil.generatePdf("托盘标签" + trayVO.getTrayNo(), html, baseUrl.toString(), response);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -677,20 +722,33 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
/**
|
|
|
|
|
* 导出齐套标签PDF
|
|
|
|
|
*
|
|
|
|
|
* @param id 托盘id
|
|
|
|
|
* @param id 订单id
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping("exportQiTaoPdf")
|
|
|
|
|
public void exportQiTaoPdf(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception {
|
|
|
|
|
DeliverStructuralPackageOrderExtendVO trayVO = structuralPackageOrderTrayService.getInfo(id);
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(trayVO)).throwMessage("数据不存在");
|
|
|
|
|
String temp = trayVO.getExternalOrderNo() + "$" + trayVO.getRowNo() + "$" + trayVO.getPackageNo();
|
|
|
|
|
List<WmsQrCodeMaster> codes = qrCodeMasterService.getByExtendId(trayVO.getOrderId());
|
|
|
|
|
trayVO.setQrCode(QRCodeUtil.generateQRCodeBase64(codes.get(0).getBarcodeCode() + "$" + temp, 100, 100));
|
|
|
|
|
Map<String, Object> variables = new HashMap<>();
|
|
|
|
|
variables.put("info", trayVO);
|
|
|
|
|
String html = ThymeleafUtil.generator("/template/qrcode/", "qitao", ".html", variables);
|
|
|
|
|
URL baseUrl = new ClassPathResource("template/qrcode/").getURL();
|
|
|
|
|
PdfGeneratorUtil.generatePdf("齐套标签" + trayVO.getTrayNo(), html, baseUrl.toString(), response);
|
|
|
|
|
// 根据订单ID获取所有托盘,为每个托盘生成齐套标签
|
|
|
|
|
List<WmsStructuralPackageOrderTray> trays = structuralPackageOrderTrayService.getList(id);
|
|
|
|
|
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(trays)).throwMessage("数据不存在");
|
|
|
|
|
|
|
|
|
|
// 获取订单信息用于生成二维码
|
|
|
|
|
WmsStructuralPackageOrder order = structuralPackageOrderService.getById(id);
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
|
|
|
|
|
|
|
|
|
|
List<WmsQrCodeMaster> codes = qrCodeMasterService.getByExtendId(id);
|
|
|
|
|
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(codes)).throwMessage("未找到二维码信息");
|
|
|
|
|
|
|
|
|
|
// 为每个托盘生成齐套标签
|
|
|
|
|
for (WmsStructuralPackageOrderTray tray : trays) {
|
|
|
|
|
DeliverStructuralPackageOrderExtendVO trayVO = structuralPackageOrderTrayService.getInfo(tray.getId());
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(trayVO)).throwMessage("数据不存在");
|
|
|
|
|
String temp = trayVO.getExternalOrderNo() + "$" + trayVO.getRowNo() + "$" + trayVO.getPackageNo();
|
|
|
|
|
trayVO.setQrCode(QRCodeUtil.generateQRCodeBase64(codes.get(0).getBarcodeCode() + "$" + temp, 100, 100));
|
|
|
|
|
Map<String, Object> variables = new HashMap<>();
|
|
|
|
|
variables.put("info", trayVO);
|
|
|
|
|
String html = ThymeleafUtil.generator("/template/qrcode/", "qitao", ".html", variables);
|
|
|
|
|
URL baseUrl = new ClassPathResource("template/qrcode/").getURL();
|
|
|
|
|
PdfGeneratorUtil.generatePdf("齐套标签" + trayVO.getTrayNo(), html, baseUrl.toString(), response);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -723,7 +781,16 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
DeliverStructuralPackageOrderTrayVO vo = structuralPackageOrderTrayService.getInfoByNo(trayNo);
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(vo)).throwMessage("无效的托盘号");
|
|
|
|
|
VUtil.trueThrowBusinessError(!Objects.equals(vo.getState(), 0)).throwMessage("该托盘已打包");
|
|
|
|
|
vo.setItems(structuralPackageOrderTrayItemService.getSimpleListByTrayNo(trayNo));
|
|
|
|
|
|
|
|
|
|
// 通过托盘的订单ID获取该订单下的所有物料项
|
|
|
|
|
List<DeliverStructuralPackageOrderTrayItemVO> items = structuralPackageOrderTrayItemService.getListVOByOrderId(vo.getOrderId());
|
|
|
|
|
vo.setItems(items.stream().map(item -> {
|
|
|
|
|
DeliverStructuralPackageOrderTrayItemSimpleVO simpleVO = new DeliverStructuralPackageOrderTrayItemSimpleVO();
|
|
|
|
|
simpleVO.setMaterialNo(item.getMaterialNo());
|
|
|
|
|
simpleVO.setMaterialDesc(item.getMaterialDesc());
|
|
|
|
|
simpleVO.setShipmentNum(item.getShipmentNum());
|
|
|
|
|
return simpleVO;
|
|
|
|
|
}).toList());
|
|
|
|
|
return ApiResult.success(vo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -739,7 +806,8 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(tray)).throwMessage("托盘不存在");
|
|
|
|
|
VUtil.trueThrowBusinessError(!Objects.equals(tray.getState(), OrderState.Unpackaged.getState())).throwMessage("请勿重复打包");
|
|
|
|
|
DeliverStructuralPackageOrderVO order = structuralPackageOrderService.getInfo(tray.getOrderId());
|
|
|
|
|
List<WmsStructuralPackageOrderTrayItem> trayItems = structuralPackageOrderTrayItemService.getListByTrayId(tray.getId());
|
|
|
|
|
// 获取订单下的所有物料项,而不是特定托盘的物料项
|
|
|
|
|
List<WmsStructuralPackageOrderTrayItem> trayItems = structuralPackageOrderTrayItemService.getList(tray.getOrderId());
|
|
|
|
|
List<String> materialNos = new ArrayList<>();
|
|
|
|
|
List<StructuralPackageMaterialQRCodeContentDTO> qrCodeDTOs = new ArrayList<>();
|
|
|
|
|
trayItems.forEach(it -> {
|
|
|
|
|
@ -1397,4 +1465,78 @@ public class StructuralPackageOrderController extends BaseController {
|
|
|
|
|
);
|
|
|
|
|
return ApiResult.success();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据指定托盘数量重新生成订单托盘信息
|
|
|
|
|
*
|
|
|
|
|
* @param request 请求参数
|
|
|
|
|
*/
|
|
|
|
|
@Transactional
|
|
|
|
|
@PostMapping("updateTrayNum")
|
|
|
|
|
public ApiResult<Void> updateTrayNum(@Valid @RequestBody UpdatePackageTrayNumQO request) {
|
|
|
|
|
// 1. 验证并获取订单信息
|
|
|
|
|
WmsStructuralPackageOrder order = structuralPackageOrderService.getById(request.getOrderId());
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
|
|
|
|
|
|
|
|
|
|
// 2. 检查是否有已打包的托盘
|
|
|
|
|
VUtil.trueThrowBusinessError(structuralPackageOrderTrayService.lambdaQuery()
|
|
|
|
|
.eq(WmsStructuralPackageOrderTray::getOrderId, order.getId())
|
|
|
|
|
.ne(WmsStructuralPackageOrderTray::getState, OrderState.Unpackaged.getState())
|
|
|
|
|
.exists())
|
|
|
|
|
.throwMessage("修改失败,该订单有托盘已打包或发货,无法修改托盘数量");
|
|
|
|
|
|
|
|
|
|
// 3. 验证托盘数量
|
|
|
|
|
BigDecimal trayNumDecimal = request.getTrayNum();
|
|
|
|
|
VUtil.trueThrowBusinessError(trayNumDecimal == null || trayNumDecimal.compareTo(BigDecimal.ZERO) <= 0)
|
|
|
|
|
.throwMessage("托盘数量必须大于0");
|
|
|
|
|
Integer trayNum = trayNumDecimal.intValue();
|
|
|
|
|
|
|
|
|
|
// 4. 获取钢构包信息
|
|
|
|
|
PackageVO packageVO = structuralPackageService.getInfo(order.getPackageId());
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(packageVO)).throwMessage("钢构包不存在");
|
|
|
|
|
|
|
|
|
|
// 5. 获取供应商代码
|
|
|
|
|
UserSupplier supplier = userSupplierService.getById(order.getSupplierId());
|
|
|
|
|
VUtil.trueThrowBusinessError(Objects.isNull(supplier)).throwMessage("供应商不存在");
|
|
|
|
|
String supplierCode = supplier.getSupplierCode();
|
|
|
|
|
|
|
|
|
|
// 6. 重新生成托盘信息(使用前端传入的托盘数量)
|
|
|
|
|
GenerateTrayVO trayVO = generateTrayWithTrayNum(packageVO, supplierCode,
|
|
|
|
|
BigDecimal.valueOf(order.getNum()), order.getPlanNum(), trayNum);
|
|
|
|
|
|
|
|
|
|
// 7. 删除旧的托盘和托盘项
|
|
|
|
|
structuralPackageOrderTrayService.deleteByOrderId(order.getId());
|
|
|
|
|
structuralPackageOrderTrayItemService.deleteByOrderId(order.getId());
|
|
|
|
|
|
|
|
|
|
// 8. 保存新的托盘信息
|
|
|
|
|
List<WmsStructuralPackageOrderTray> trays = trayVO.getTrays().stream().map(it -> new WmsStructuralPackageOrderTray()
|
|
|
|
|
.setId(IdUtil.getSnowflakeNextId())
|
|
|
|
|
.setOrderId(order.getId())
|
|
|
|
|
.setNo(it.getNo())
|
|
|
|
|
.setWeight(BigDecimal.ZERO)
|
|
|
|
|
.setNum(BigDecimal.ZERO)
|
|
|
|
|
.setStation(it.getStation())
|
|
|
|
|
.setTray(it.getTray())).toList();
|
|
|
|
|
|
|
|
|
|
List<WmsStructuralPackageOrderTrayItem> items = new ArrayList<>();
|
|
|
|
|
trays.forEach(tray -> {
|
|
|
|
|
List<TrayItemVO> itemVOS = trayVO.getItems().stream()
|
|
|
|
|
.filter(it -> StrUtil.equals(it.getNo(), tray.getNo()))
|
|
|
|
|
.toList();
|
|
|
|
|
items.addAll(itemVOS.stream().map(it -> {
|
|
|
|
|
WmsStructuralPackageOrderTrayItem item = Convert.convert(WmsStructuralPackageOrderTrayItem.class, it);
|
|
|
|
|
item.setOrderId(order.getId());
|
|
|
|
|
item.setTrayId(tray.getId());
|
|
|
|
|
tray.setNum(tray.getNum().add(item.getShipmentNum()));
|
|
|
|
|
tray.setWeight(tray.getWeight().add(NumberUtil.mul(it.getWeight(), item.getShipmentNum())));
|
|
|
|
|
return item;
|
|
|
|
|
}).toList()
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
structuralPackageOrderTrayService.saveBatch(trays);
|
|
|
|
|
structuralPackageOrderTrayItemService.saveBatch(items);
|
|
|
|
|
|
|
|
|
|
return ApiResult.success();
|
|
|
|
|
}
|
|
|
|
|
}
|