1463 WMS系统钢构包采购业务功能优化
This commit is contained in:
parent
c616762d50
commit
3aed6fe789
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数量
|
* 数量
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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 "";
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,11 @@ public class PackageVO {
|
||||||
*/
|
*/
|
||||||
private BigDecimal weight;
|
private BigDecimal weight;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 托盘数量
|
||||||
|
*/
|
||||||
|
private BigDecimal trayNum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 种类
|
* 种类
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue