feat(shipment): 新增物料码管理功能并优化生产订单流程
- 新增 MaterialCodeController 控制器实现物料清单的增删改查功能 - 实现物料清单导入导出 Excel 模板功能 - 添加物料清单明细项的二维码生成功能 - 优化生产订单中二维码生成逻辑,支持齐套物料批量处理 - 重构生产订单打印数据查询逻辑,过滤父级物料项目 - 更新订单详情展示逻辑,按层级结构显示物料及子物料 - 修复生产订单中齐套物料扫描类型判断逻辑 - 完善物料码相关服务接口和数据模型定义
This commit is contained in:
parent
752f9d6c66
commit
fb1fb9e265
|
|
@ -159,6 +159,45 @@ public class InProduceOrderController extends BaseController {
|
|||
.setBatchNo(date + index)
|
||||
.setSernr(request.getSernr());
|
||||
produceOrderItemService.save(parent);
|
||||
if (request.getList()) {
|
||||
List<WmsBom> children = bomService.getChildren(request.getMatnr());
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(children)).throwMessage("请先添加齐套物料");
|
||||
List<WmsInProduceOrderItem> items = children.stream()
|
||||
.map(it -> new WmsInProduceOrderItem()
|
||||
.setId(IdUtil.getSnowflakeNextId())
|
||||
.setOrderId(order.getId())
|
||||
.setParentId(parent.getId())
|
||||
.setNum(request.getNum().multiply(it.getNum()))
|
||||
.setMaterialNo(it.getNo())
|
||||
.setMaterialDesc(it.getDescribe())
|
||||
.setUnit(request.getMeins())
|
||||
.setFactoryNo(request.getPwerk())
|
||||
.setWarehouseNo(request.getLgort())
|
||||
.setOrderNum(request.getPsmng())
|
||||
.setBatchNo(parent.getBatchNo())
|
||||
.setSernr(request.getSernr())
|
||||
)
|
||||
.toList();
|
||||
produceOrderItemService.saveBatch(items);
|
||||
qrCodeMasterService.saveBatch(
|
||||
items.stream().map(it -> new WmsQrCodeMaster()
|
||||
.setBarcodeCode(KeyUtil.next())
|
||||
.setProcessStage(BarCodeProcessStage.ForStorage.getState())
|
||||
.setBarcodeType(BarCodeType.Production.getState())
|
||||
.setMaterialCode(it.getMaterialNo())
|
||||
.setMaterialDescription(it.getMaterialDesc())
|
||||
.setPackagingType((short) 0)
|
||||
.setQuantity(it.getNum())
|
||||
.setUnit(it.getUnit())
|
||||
.setBatchNo(it.getBatchNo())
|
||||
.setSerialNo(it.getSernr())
|
||||
.setExtendId(it.getId())
|
||||
.setCreateUserId(UserUtil.getUserId())
|
||||
.setCreateUserName(UserUtil.getUserName())
|
||||
.setCreateTime(LocalDateTime.now())
|
||||
).toList()
|
||||
);
|
||||
} else {
|
||||
qrCodeMasterService.save(new WmsQrCodeMaster()
|
||||
.setBarcodeCode(KeyUtil.next())
|
||||
.setProcessStage(BarCodeProcessStage.ForStorage.getState())
|
||||
|
|
@ -175,21 +214,6 @@ public class InProduceOrderController extends BaseController {
|
|||
.setCreateUserName(UserUtil.getUserName())
|
||||
.setCreateTime(LocalDateTime.now())
|
||||
);
|
||||
if (request.getList()) {
|
||||
List<WmsBom> children = bomService.getChildren(request.getMatnr());
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(children)).throwMessage("请先添加齐套信息");
|
||||
produceOrderItemService.saveBatch(children.stream().map(it -> new WmsInProduceOrderItem()
|
||||
.setOrderId(order.getId())
|
||||
.setParentId(parent.getId())
|
||||
.setNum(request.getNum().multiply(it.getNum()))
|
||||
.setMaterialNo(it.getNo())
|
||||
.setMaterialDesc(it.getDescribe())
|
||||
.setUnit(request.getMeins())
|
||||
.setFactoryNo(request.getPwerk())
|
||||
.setWarehouseNo(request.getLgort())
|
||||
.setOrderNum(request.getPsmng())
|
||||
).toList()
|
||||
);
|
||||
}
|
||||
return ApiResult.success(order.getId());
|
||||
}
|
||||
|
|
@ -248,16 +272,13 @@ public class InProduceOrderController extends BaseController {
|
|||
, @Valid @RequestParam @NotNull Integer type) throws Exception {
|
||||
WmsInProduceOrder order = produceOrderService.getById(id);
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
|
||||
List<QrCodeMasterPrintDTO> datas = convertToPrintDTO(qrCodeMasterService.getByExtendIds(
|
||||
produceOrderItemService.lambdaQuery()
|
||||
.select(WmsInProduceOrderItem::getId)
|
||||
List<WmsInProduceOrderItem> items = produceOrderItemService.lambdaQuery()
|
||||
.eq(WmsInProduceOrderItem::getOrderId, id)
|
||||
.list()
|
||||
.stream()
|
||||
.map(WmsInProduceOrderItem::getId)
|
||||
.toList()
|
||||
)
|
||||
);
|
||||
.list();
|
||||
if (order.getList()) {
|
||||
items.removeIf(it -> it.getParentId() == 0);
|
||||
}
|
||||
List<QrCodeMasterPrintDTO> datas = convertToPrintDTO(qrCodeMasterService.getByExtendIds(items.stream().map(WmsInProduceOrderItem::getId).toList()));
|
||||
Map<String, Object> variables = new HashMap<>();
|
||||
variables.put("list", datas);
|
||||
if (Objects.equals(type, 1)) {
|
||||
|
|
@ -279,16 +300,13 @@ public class InProduceOrderController extends BaseController {
|
|||
public ResponseEntity<byte[]> exportItemImageZip(@Valid @RequestParam @NotNull Long id) throws Exception {
|
||||
WmsInProduceOrder order = produceOrderService.getById(id);
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
|
||||
List<QrCodeMasterPrintDTO> datas = convertToPrintDTO(qrCodeMasterService.getByExtendIds(
|
||||
produceOrderItemService.lambdaQuery()
|
||||
.select(WmsInProduceOrderItem::getId)
|
||||
List<WmsInProduceOrderItem> items = produceOrderItemService.lambdaQuery()
|
||||
.eq(WmsInProduceOrderItem::getOrderId, id)
|
||||
.list()
|
||||
.stream()
|
||||
.map(WmsInProduceOrderItem::getId)
|
||||
.toList()
|
||||
)
|
||||
);
|
||||
.list();
|
||||
if (order.getList()) {
|
||||
items.removeIf(it -> it.getParentId() == 0);
|
||||
}
|
||||
List<QrCodeMasterPrintDTO> datas = convertToPrintDTO(qrCodeMasterService.getByExtendIds(items.stream().map(WmsInProduceOrderItem::getId).toList()));
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
try (ZipOutputStream zos = new ZipOutputStream(baos)) {
|
||||
for (QrCodeMasterPrintDTO it : datas) {
|
||||
|
|
@ -336,7 +354,7 @@ public class InProduceOrderController extends BaseController {
|
|||
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
|
||||
List<InProduceOrderItemVO> list = produceOrderItemService.getVOByOrderId(id);
|
||||
if (order.getList()) {
|
||||
list.removeIf(item -> Objects.equals(item.getParentId(), 0L));
|
||||
list.removeIf(item -> item.getParentId() != 0L);
|
||||
}
|
||||
InProduceOrderItemVO first = list.get(0);
|
||||
Map<String, String> base = new HashMap<>();
|
||||
|
|
@ -362,33 +380,32 @@ public class InProduceOrderController extends BaseController {
|
|||
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
|
||||
VUtil.trueThrowBusinessError(!Objects.equals(order.getState(), (short) 0))
|
||||
.throwMessage("该订单非待收货状态");
|
||||
InProduceOrderVO vo=Convert.convert(InProduceOrderVO.class,order);
|
||||
InProduceOrderVO vo = Convert.convert(InProduceOrderVO.class, order);
|
||||
List<InProduceOrderItemVO> list = produceOrderItemService.getVOByOrderId(order.getId());
|
||||
list.forEach(it -> {
|
||||
if (it.getParentId() == 0) {
|
||||
it.setBinNo(binService.getBinNo(it.getMaterialNo(), it.getFactoryNo(), it.getWarehouseNo()));
|
||||
it.setIsDisableLocation(warehouseService.isEnableLocation(it.getFactoryNo(), it.getWarehouseNo()));
|
||||
vo.getItems().add(it);
|
||||
if (order.getList()) {
|
||||
List<InProduceOrderItemVO> datas = new ArrayList<>();
|
||||
list.stream().filter(it -> Objects.equals(it.getParentId(), 0L)).forEach(it -> {
|
||||
List<InProduceOrderItemVO> children = list.stream()
|
||||
.filter(child -> Objects.equals(child.getParentId(), it.getId()))
|
||||
.toList();
|
||||
Integer type = bomService.getScanType(it.getMaterialNo());
|
||||
children.forEach(child -> {
|
||||
child.setQiTao(type > 0);
|
||||
it.setQiTao(type > 0);
|
||||
if (Objects.equals(type, 0)) {
|
||||
child.setMustScan(false);
|
||||
it.setMustScan(false);
|
||||
}
|
||||
children.forEach(child -> {
|
||||
child.setQiTao(it.isQiTao());
|
||||
child.setMustScan(it.isMustScan());
|
||||
child.setBinNo(binService.getBinNo(child.getMaterialNo(), child.getFactoryNo(), child.getWarehouseNo()));
|
||||
child.setIsDisableLocation(warehouseService.isEnableLocation(child.getFactoryNo(), child.getWarehouseNo()));
|
||||
});
|
||||
datas.addAll(children);
|
||||
});
|
||||
vo.setItems(datas);
|
||||
} else {
|
||||
list.forEach(it -> {
|
||||
it.setBinNo(binService.getBinNo(it.getMaterialNo(), it.getFactoryNo(), it.getWarehouseNo()));
|
||||
it.setIsDisableLocation(warehouseService.isEnableLocation(it.getFactoryNo(), it.getWarehouseNo()));
|
||||
});
|
||||
vo.setItems(list);
|
||||
it.setChildren(children);
|
||||
}
|
||||
}
|
||||
});
|
||||
return ApiResult.success(vo);
|
||||
}
|
||||
|
||||
|
|
@ -431,7 +448,9 @@ public class InProduceOrderController extends BaseController {
|
|||
.flatMap(Collection::stream)
|
||||
.map(InventoryInItemQRCodeQO::getQrCode)
|
||||
.collect(Collectors.toSet());
|
||||
List<WmsQrCodeMaster> qrCodeMasters = CollectionUtil.isEmpty(allQrCodes) ? Collections.emptyList() : qrCodeMasterService.lambdaQuery()
|
||||
List<WmsQrCodeMaster> qrCodeMasters = CollectionUtil.isEmpty(allQrCodes)
|
||||
? Collections.emptyList()
|
||||
: qrCodeMasterService.lambdaQuery()
|
||||
.ne(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
|
||||
.in(WmsQrCodeMaster::getBarcodeCode, allQrCodes)
|
||||
.list();
|
||||
|
|
@ -581,7 +600,7 @@ public class InProduceOrderController extends BaseController {
|
|||
);
|
||||
}
|
||||
OptRecordDTO optRecordDTO = new OptRecordDTO();
|
||||
optRecordDTO.setOperationType((short)1);
|
||||
optRecordDTO.setOperationType((short) 1);
|
||||
optRecordDTO.setOrderId(order.getNo());
|
||||
optRecordService.add(optRecordDTO);
|
||||
//同步入库信息到SAP
|
||||
|
|
|
|||
|
|
@ -25,11 +25,6 @@ public class MaterialCodeSearchQO extends SearchBaseQO {
|
|||
*/
|
||||
private String customerName;
|
||||
|
||||
/**
|
||||
* 装箱状态
|
||||
*/
|
||||
private Integer packingStatus;
|
||||
|
||||
/**
|
||||
* 下单开始日期
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import lombok.Data;
|
|||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
|
|
@ -83,4 +84,9 @@ public class InProduceOrderItemVO {
|
|||
*/
|
||||
@JsonProperty("isDisableLocation")
|
||||
private Boolean isDisableLocation = true;
|
||||
|
||||
/**
|
||||
* 清点件的齐套物料列表
|
||||
*/
|
||||
private List<InProduceOrderItemVO> children;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
|
|||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
|
|
@ -67,5 +68,5 @@ public class InProduceOrderVO {
|
|||
*/
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
private List<InProduceOrderItemVO> items;
|
||||
private List<InProduceOrderItemVO> items=new ArrayList<>();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -161,8 +161,7 @@ public class MaterialCodeController extends BaseController {
|
|||
.like(StrUtil.isNotBlank(request.getNo()), WmsShipmentMaterialCode::getNo, request.getNo())
|
||||
.like(StrUtil.isNotBlank(request.getSoNo()), WmsShipmentMaterialCode::getSoNo, request.getSoNo())
|
||||
.like(StrUtil.isNotBlank(request.getMaterialNo()), WmsShipmentMaterialCode::getMaterialNo, request.getMaterialNo())
|
||||
.like(StrUtil.isNotBlank(request.getCustomerName()), WmsShipmentMaterialCode::getCustomerName, request.getCustomerName())
|
||||
.eq(Objects.nonNull(request.getPackingStatus()), WmsShipmentMaterialCode::getStatus, request.getPackingStatus()) .orderByAsc(WmsShipmentMaterialCode::getStatus)
|
||||
.like(StrUtil.isNotBlank(request.getCustomerName()), WmsShipmentMaterialCode::getCustomerName, request.getCustomerName()) .orderByAsc(WmsShipmentMaterialCode::getStatus)
|
||||
.orderByDesc(WmsShipmentMaterialCode::getId)
|
||||
.page(new Page<>(request.getPage(), request.getPageSize()))
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in New Issue