1463 WMS系统钢构包采购业务功能优化

This commit is contained in:
10001392 2026-05-08 08:34:45 +08:00
parent c616762d50
commit 3aed6fe789
5 changed files with 99 additions and 40 deletions

View File

@ -176,32 +176,58 @@ public class StructuralPackageOrderController extends BaseController {
*/
@PostMapping("generateTray")
public ApiResult<GenerateTrayVO> generateTray(@Valid @RequestBody @NotNull GenerateTrayQO request) {
return ApiResult.success(generateTray(request.getPackageId(), request.getNum(), request.getPlanNum()));
return ApiResult.success(generateTray(request.getPackageId(), request.getSupplierCode(), request.getNum(), request.getPlanNum()));
}
private GenerateTrayVO generateTray(Long packageId, BigDecimal num, BigDecimal orderNum) {
private GenerateTrayVO generateTray(Long packageId, String supplierCode, BigDecimal num, BigDecimal orderNum) {
PackageVO packageVO = structuralPackageService.getInfo(packageId);
VUtil.trueThrowBusinessError(Objects.isNull(packageVO)).throwMessage("钢构包不存在");
List<PackageMaterialDTO> materials = packageVO.getMaterialList();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(materials)).throwMessage("物料清单为空");
// 获取托盘数量
Integer trayNum = packageVO.getTrayNum() != null ? packageVO.getTrayNum().intValue() : 0;
VUtil.trueThrowBusinessError(trayNum <= 0).throwMessage("托盘数量必须大于0");
// 生成日期部分年后2位+月2位+日2位
LocalDate now = LocalDate.now();
String datePart = String.format("%02d%02d%02d",
now.getYear() % 100,
now.getMonthValue(),
now.getDayOfMonth());
// 供应商代码后4位supplierCode是6位数字
String supplierSuffix = "";
if (StrUtil.isNotBlank(supplierCode)) {
supplierSuffix = supplierCode.length() >= 4
? supplierCode.substring(supplierCode.length() - 4)
: supplierCode;
}
List<TrayVO> trays = new ArrayList<>();
List<TrayItemVO> items = new ArrayList<>();
BigDecimal totalWeight = BigDecimal.ZERO;
for (PackageMaterialDTO material : materials) {
TrayVO tray = trays.stream().filter(it -> StrUtil.equals(it.getTray(), material.getTray()) && StrUtil.equals(it.getStation(), material.getStation())).findFirst().orElse(null);
if (Objects.isNull(tray)) {
tray = new TrayVO()
.setNo("S" + RandomUtil.randomNumbers(10))
.setTray(material.getTray())
.setStation(material.getStation())
// 根据托盘数量生成托盘
for (int i = 1; i <= trayNum; i++) {
// 生成托盘号S+供应商代码后4位+年后2位+月2位+日2位-序号
String generatedTrayNo = "S" + supplierSuffix + datePart + "-" + i;
TrayVO tray = new TrayVO()
.setNo(generatedTrayNo)
.setTray("") // 托盘序号设置为空
// .setStation(material.getStation())
.setMaterialNo(packageVO.getNo())
.setMaterialDesc(packageVO.getName())
.setTotalWeight(BigDecimal.ZERO);
trays.add(tray);
}
// 处理物料清单生成TrayItemVO
List<TrayItemVO> items = new ArrayList<>();
BigDecimal totalWeight = BigDecimal.ZERO;
List<PackageMaterialDTO> materials = packageVO.getMaterialList();
if (CollectionUtil.isNotEmpty(materials)) {
for (PackageMaterialDTO material : materials) {
BigDecimal itemNum = material.getNum();
items.add(new TrayItemVO()
.setNo(tray.getNo())
TrayItemVO item = new TrayItemVO()
.setNo("") // 托盘号设置为空
.setMaterialNo(material.getNo())
.setMaterialDesc(material.getName())
.setVersion(material.getVersion())
@ -209,14 +235,17 @@ public class StructuralPackageOrderController extends BaseController {
.setPlanNum(itemNum.multiply(orderNum))
.setShipmentNum(itemNum.multiply(num))
.setImage(material.getImage())
.setDrawingNo(material.getDrawingNo())
);
.setDrawingNo(material.getDrawingNo());
items.add(item);
// 计算总重量
if (Objects.nonNull(material.getWeight())) {
BigDecimal itemWeight = itemNum.multiply(material.getWeight());
tray.setTotalWeight(tray.getTotalWeight().add(itemWeight));
totalWeight = totalWeight.add(itemWeight);
}
}
}
return new GenerateTrayVO().setTrays(trays).setItems(items).setTotalWeight(totalWeight);
}
@ -251,6 +280,14 @@ public class StructuralPackageOrderController extends BaseController {
}
List<WmsStructuralPackageOrder> ordersForAdd = new ArrayList<>();
List<WmsStructuralPackageOrder> ordersForUpdate = new ArrayList<>();
// 预先获取所有供应商信息
Set<Long> supplierIds = request.getItems().stream()
.map(PackageDeliverOrderSaveItemQO::getSupplierId)
.collect(Collectors.toSet());
List<UserSupplier> suppliers = userSupplierService.listByIds(supplierIds);
Map<Long, String> supplierCodeMap = suppliers.stream()
.collect(Collectors.toMap(UserSupplier::getId, UserSupplier::getSupplierCode));
request.getItems().forEach(orderQO -> {
WmsStructuralPackageOrder order = Convert.convert(WmsStructuralPackageOrder.class, orderQO);
order.setOrderNo(orderNo);
@ -264,7 +301,9 @@ public class StructuralPackageOrderController extends BaseController {
order.setUpdateTime(LocalDateTime.now());
ordersForUpdate.add(order);
}
GenerateTrayVO trayVO = generateTray(orderQO.getPackageId(), orderQO.getNum(), orderQO.getPlanNum());
// 获取供应商代码
String supplierCode = supplierCodeMap.get(orderQO.getSupplierId());
GenerateTrayVO trayVO = generateTray(orderQO.getPackageId(), supplierCode, orderQO.getNum(), orderQO.getPlanNum());
if (Objects.nonNull(orderQO.getId())) {
WmsStructuralPackageOrder o = structuralPackageOrderService.getById(orderQO.getId());
VUtil.trueThrowBusinessError(Objects.isNull(o)).throwMessage("订单不存在");
@ -305,7 +344,6 @@ public class StructuralPackageOrderController extends BaseController {
List<WmsStructuralPackage> packages = structuralPackageService.lambdaQuery()
.in(WmsStructuralPackage::getId, request.getItems().stream().map(PackageDeliverOrderSaveItemQO::getPackageId).toList())
.list();
List<UserSupplier> suppliers = userSupplierService.listByIds(ordersForAdd.stream().map(WmsStructuralPackageOrder::getSupplierId).collect(Collectors.toSet()));
qrCodeMasterService.saveBatch(
ordersForAdd.stream()
.map(it -> {
@ -313,6 +351,7 @@ public class StructuralPackageOrderController extends BaseController {
.filter(pt -> pt.getId().equals(it.getPackageId()))
.findFirst()
.get();
String supplierCode = supplierCodeMap.get(it.getSupplierId());
UserSupplier supplier = suppliers.stream()
.filter(pt -> pt.getId().equals(it.getSupplierId()))
.findFirst()
@ -1334,7 +1373,7 @@ public class StructuralPackageOrderController extends BaseController {
}
} else {
list.forEach(item -> {
item.setTray(generateTray(item.getPackageId(), item.getNum(), item.getTransportNum()));
item.setTray(generateTray(item.getPackageId(), item.getSupplierCode(), item.getNum(), item.getTransportNum()));
item.setWeight(item.getTray().getItems().stream().map(TrayItemVO::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add));
});
return ApiResult.success(list);

View File

@ -1,5 +1,6 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -14,6 +15,12 @@ public class GenerateTrayQO {
@NotNull
private Long packageId;
/**
* 供应商代码6位数字
*/
@NotBlank
private String supplierCode;
/**
* 数量
*/

View File

@ -5,6 +5,7 @@ import lombok.Data;
import lombok.experimental.Accessors;
import org.ttzero.excel.annotation.ExcelColumn;
import java.math.BigDecimal;
import java.util.Objects;
@Data
@ -63,6 +64,11 @@ public class DeliverStructuralPackageOrderExtendVO extends DeliverStructuralPack
*/
private Short totalNum;
/**
* 托盘数量
*/
private BigDecimal trayNum;
public String getStateDesc() {
if (Objects.isNull(state)) {
return "";

View File

@ -58,6 +58,11 @@ public class PackageVO {
*/
private BigDecimal weight;
/**
* 托盘数量
*/
private BigDecimal trayNum;
/**
* 种类
*/

View File

@ -3,17 +3,19 @@
<mapper namespace="com.nflg.wms.repository.mapper.WmsStructuralPackageOrderTrayMapper">
<select id="searchByState" resultType="com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderExtendVO">
SELECT ROW_NUMBER() OVER (ORDER BY o.id desc) AS "index",ot.id,o.*,m.no||wb."no" AS "workbench_code"
SELECT ROW_NUMBER() OVER (ORDER BY o.id desc) AS "index",o.*,m.no||wb."no" AS "workbench_code"
,us.supplier_code,us.supplier_name,sp.order_no AS "package_order_no",sp."no" AS "package_no"
,sp."name" AS "package_desc",m."no" AS "model_no",ot.no as "tray_no",ot.tray,ot.station,ot.state,spdom.deliver_id
,sp."name" AS "package_desc",sp.tray_num,m."no" AS "model_no",'' as "tray_no",null as "tray",spdom.deliver_id
FROM wms_structural_package_order o
LEFT JOIN wms_workbench wb ON o.workbench_id=wb."id"
LEFT JOIN user_supplier us ON o.supplier_id=us.id
LEFT JOIN wms_structural_package sp ON o.package_id=sp."id"
LEFT JOIN wms_model m on o.model_id=m."id"
inner join wms_structural_package_order_tray ot on o.id=ot.order_id
left join wms_structural_package_deliver_order_map spdom on o.id=spdom.order_id
where ot.state=#{request.state}
where 1=1
<if test="request.state!=null">
and exists (select 1 from wms_structural_package_order_tray ot where ot.order_id=o.id and ot.state=#{request.state})
</if>
<if test="request.orderNo!=null and request.orderNo!=''">
and o.order_no=#{request.orderNo}
</if>
@ -27,7 +29,7 @@
and o.external_order_no=#{request.externalOrderNo}
</if>
<if test="request.trayNo!=null and request.trayNo!=''">
and ot.no=#{request.trayNo}
and exists (select 1 from wms_structural_package_order_tray ot where ot.order_id=o.id and ot.no=#{request.trayNo})
</if>
<if test="request.startDate!=null">
and o.create_time>= #{request.startDate}