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") @PostMapping("generateTray")
public ApiResult<GenerateTrayVO> generateTray(@Valid @RequestBody @NotNull GenerateTrayQO request) { 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); PackageVO packageVO = structuralPackageService.getInfo(packageId);
VUtil.trueThrowBusinessError(Objects.isNull(packageVO)).throwMessage("钢构包不存在"); 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<TrayVO> trays = new ArrayList<>();
List<TrayItemVO> items = new ArrayList<>();
BigDecimal totalWeight = BigDecimal.ZERO; // 根据托盘数量生成托盘
for (PackageMaterialDTO material : materials) { for (int i = 1; i <= trayNum; i++) {
TrayVO tray = trays.stream().filter(it -> StrUtil.equals(it.getTray(), material.getTray()) && StrUtil.equals(it.getStation(), material.getStation())).findFirst().orElse(null); // 生成托盘号S+供应商代码后4位+年后2位+月2位+日2位-序号
if (Objects.isNull(tray)) { String generatedTrayNo = "S" + supplierSuffix + datePart + "-" + i;
tray = new TrayVO()
.setNo("S" + RandomUtil.randomNumbers(10)) TrayVO tray = new TrayVO()
.setTray(material.getTray()) .setNo(generatedTrayNo)
.setStation(material.getStation()) .setTray("") // 托盘序号设置为空
// .setStation(material.getStation())
.setMaterialNo(packageVO.getNo()) .setMaterialNo(packageVO.getNo())
.setMaterialDesc(packageVO.getName()) .setMaterialDesc(packageVO.getName())
.setTotalWeight(BigDecimal.ZERO); .setTotalWeight(BigDecimal.ZERO);
trays.add(tray); 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(); BigDecimal itemNum = material.getNum();
items.add(new TrayItemVO() TrayItemVO item = new TrayItemVO()
.setNo(tray.getNo()) .setNo("") // 托盘号设置为空
.setMaterialNo(material.getNo()) .setMaterialNo(material.getNo())
.setMaterialDesc(material.getName()) .setMaterialDesc(material.getName())
.setVersion(material.getVersion()) .setVersion(material.getVersion())
@ -209,14 +235,17 @@ public class StructuralPackageOrderController extends BaseController {
.setPlanNum(itemNum.multiply(orderNum)) .setPlanNum(itemNum.multiply(orderNum))
.setShipmentNum(itemNum.multiply(num)) .setShipmentNum(itemNum.multiply(num))
.setImage(material.getImage()) .setImage(material.getImage())
.setDrawingNo(material.getDrawingNo()) .setDrawingNo(material.getDrawingNo());
); items.add(item);
// 计算总重量
if (Objects.nonNull(material.getWeight())) { if (Objects.nonNull(material.getWeight())) {
BigDecimal itemWeight = itemNum.multiply(material.getWeight()); BigDecimal itemWeight = itemNum.multiply(material.getWeight());
tray.setTotalWeight(tray.getTotalWeight().add(itemWeight));
totalWeight = totalWeight.add(itemWeight); totalWeight = totalWeight.add(itemWeight);
} }
} }
}
return new GenerateTrayVO().setTrays(trays).setItems(items).setTotalWeight(totalWeight); 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> ordersForAdd = new ArrayList<>();
List<WmsStructuralPackageOrder> ordersForUpdate = 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 -> { request.getItems().forEach(orderQO -> {
WmsStructuralPackageOrder order = Convert.convert(WmsStructuralPackageOrder.class, orderQO); WmsStructuralPackageOrder order = Convert.convert(WmsStructuralPackageOrder.class, orderQO);
order.setOrderNo(orderNo); order.setOrderNo(orderNo);
@ -264,7 +301,9 @@ public class StructuralPackageOrderController extends BaseController {
order.setUpdateTime(LocalDateTime.now()); order.setUpdateTime(LocalDateTime.now());
ordersForUpdate.add(order); 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())) { if (Objects.nonNull(orderQO.getId())) {
WmsStructuralPackageOrder o = structuralPackageOrderService.getById(orderQO.getId()); WmsStructuralPackageOrder o = structuralPackageOrderService.getById(orderQO.getId());
VUtil.trueThrowBusinessError(Objects.isNull(o)).throwMessage("订单不存在"); VUtil.trueThrowBusinessError(Objects.isNull(o)).throwMessage("订单不存在");
@ -305,7 +344,6 @@ public class StructuralPackageOrderController extends BaseController {
List<WmsStructuralPackage> packages = structuralPackageService.lambdaQuery() List<WmsStructuralPackage> packages = structuralPackageService.lambdaQuery()
.in(WmsStructuralPackage::getId, request.getItems().stream().map(PackageDeliverOrderSaveItemQO::getPackageId).toList()) .in(WmsStructuralPackage::getId, request.getItems().stream().map(PackageDeliverOrderSaveItemQO::getPackageId).toList())
.list(); .list();
List<UserSupplier> suppliers = userSupplierService.listByIds(ordersForAdd.stream().map(WmsStructuralPackageOrder::getSupplierId).collect(Collectors.toSet()));
qrCodeMasterService.saveBatch( qrCodeMasterService.saveBatch(
ordersForAdd.stream() ordersForAdd.stream()
.map(it -> { .map(it -> {
@ -313,6 +351,7 @@ public class StructuralPackageOrderController extends BaseController {
.filter(pt -> pt.getId().equals(it.getPackageId())) .filter(pt -> pt.getId().equals(it.getPackageId()))
.findFirst() .findFirst()
.get(); .get();
String supplierCode = supplierCodeMap.get(it.getSupplierId());
UserSupplier supplier = suppliers.stream() UserSupplier supplier = suppliers.stream()
.filter(pt -> pt.getId().equals(it.getSupplierId())) .filter(pt -> pt.getId().equals(it.getSupplierId()))
.findFirst() .findFirst()
@ -1334,7 +1373,7 @@ public class StructuralPackageOrderController extends BaseController {
} }
} else { } else {
list.forEach(item -> { 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)); item.setWeight(item.getTray().getItems().stream().map(TrayItemVO::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add));
}); });
return ApiResult.success(list); return ApiResult.success(list);

View File

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

View File

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

View File

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

View File

@ -3,17 +3,19 @@
<mapper namespace="com.nflg.wms.repository.mapper.WmsStructuralPackageOrderTrayMapper"> <mapper namespace="com.nflg.wms.repository.mapper.WmsStructuralPackageOrderTrayMapper">
<select id="searchByState" resultType="com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderExtendVO"> <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" ,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 FROM wms_structural_package_order o
LEFT JOIN wms_workbench wb ON o.workbench_id=wb."id" LEFT JOIN wms_workbench wb ON o.workbench_id=wb."id"
LEFT JOIN user_supplier us ON o.supplier_id=us.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_structural_package sp ON o.package_id=sp."id"
LEFT JOIN wms_model m on o.model_id=m."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 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!=''"> <if test="request.orderNo!=null and request.orderNo!=''">
and o.order_no=#{request.orderNo} and o.order_no=#{request.orderNo}
</if> </if>
@ -27,7 +29,7 @@
and o.external_order_no=#{request.externalOrderNo} and o.external_order_no=#{request.externalOrderNo}
</if> </if>
<if test="request.trayNo!=null and request.trayNo!=''"> <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>
<if test="request.startDate!=null"> <if test="request.startDate!=null">
and o.create_time>= #{request.startDate} and o.create_time>= #{request.startDate}