1463 WMS系统钢构包采购业务功能优化
This commit is contained in:
parent
c616762d50
commit
3aed6fe789
|
|
@ -176,47 +176,76 @@ 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<>();
|
||||
|
||||
// 根据托盘数量生成托盘
|
||||
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;
|
||||
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())
|
||||
.setMaterialNo(packageVO.getNo())
|
||||
.setMaterialDesc(packageVO.getName())
|
||||
.setTotalWeight(BigDecimal.ZERO);
|
||||
trays.add(tray);
|
||||
}
|
||||
BigDecimal itemNum = material.getNum();
|
||||
items.add(new TrayItemVO()
|
||||
.setNo(tray.getNo())
|
||||
.setMaterialNo(material.getNo())
|
||||
.setMaterialDesc(material.getName())
|
||||
.setVersion(material.getVersion())
|
||||
.setWeight(material.getWeight())
|
||||
.setPlanNum(itemNum.multiply(orderNum))
|
||||
.setShipmentNum(itemNum.multiply(num))
|
||||
.setImage(material.getImage())
|
||||
.setDrawingNo(material.getDrawingNo())
|
||||
);
|
||||
if (Objects.nonNull(material.getWeight())) {
|
||||
BigDecimal itemWeight = itemNum.multiply(material.getWeight());
|
||||
tray.setTotalWeight(tray.getTotalWeight().add(itemWeight));
|
||||
totalWeight = totalWeight.add(itemWeight);
|
||||
List<PackageMaterialDTO> materials = packageVO.getMaterialList();
|
||||
if (CollectionUtil.isNotEmpty(materials)) {
|
||||
for (PackageMaterialDTO material : materials) {
|
||||
BigDecimal itemNum = material.getNum();
|
||||
TrayItemVO item = new TrayItemVO()
|
||||
.setNo("") // 托盘号设置为空
|
||||
.setMaterialNo(material.getNo())
|
||||
.setMaterialDesc(material.getName())
|
||||
.setVersion(material.getVersion())
|
||||
.setWeight(material.getWeight())
|
||||
.setPlanNum(itemNum.multiply(orderNum))
|
||||
.setShipmentNum(itemNum.multiply(num))
|
||||
.setImage(material.getImage())
|
||||
.setDrawingNo(material.getDrawingNo());
|
||||
items.add(item);
|
||||
|
||||
// 计算总重量
|
||||
if (Objects.nonNull(material.getWeight())) {
|
||||
BigDecimal itemWeight = itemNum.multiply(material.getWeight());
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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 "";
|
||||
|
|
|
|||
|
|
@ -58,6 +58,11 @@ public class PackageVO {
|
|||
*/
|
||||
private BigDecimal weight;
|
||||
|
||||
/**
|
||||
* 托盘数量
|
||||
*/
|
||||
private BigDecimal trayNum;
|
||||
|
||||
/**
|
||||
* 种类
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
Loading…
Reference in New Issue