Merge remote-tracking branch 'origin/master-hlq20260506ganggoubao' into develop

# Conflicts:
#	nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java
This commit is contained in:
10001392 2026-05-11 16:47:07 +08:00
commit 7285d359ee
23 changed files with 1290 additions and 134 deletions

View File

@ -109,7 +109,8 @@
<tr>
<td>订单号:<span th:text="${info.externalOrderNo}">12255665451615</span></td>
<td>行号:<span th:text="${info.rowNo}">1111</span></td>
<td>托盘号:<span th:text="${info.trayNo}">1111</span></td>
<!-- 托盘号已移除,保留空单元格 -->
<td></td>
<td colspan="2">供应商:<span th:text="${info.supplierName}">1111</span></td>
<td rowspan="3" class="cell-img" style="width: 130px;">
<img alt="" style="width: 100px;" th:src="${info.qrCode}" src="../img/logo1.png"/>
@ -149,4 +150,4 @@
</div>
</div>
</body>
</html>
</html>

View File

@ -0,0 +1,52 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serializable;
/**
* 差异项QO
*/
@Data
public class DiffItemQO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 物料编号
*/
@NotBlank(message = "物料编号不能为空")
private String materialNo;
/**
* 物料描述
*/
@NotBlank(message = "物料描述不能为空")
private String materialDesc;
/**
* 出货数量
*/
@NotNull(message = "出货数量不能为空")
private Integer shipmentNum;
/**
* 已装数量
*/
@NotNull(message = "已装数量不能为空")
private Integer actualQty;
/**
* 差异数量
*/
@NotNull(message = "差异数量不能为空")
private Integer diffQty;
/**
* 差异原因描述必填
*/
@NotBlank(message = "差异原因不能为空")
private String remark;
}

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

@ -0,0 +1,34 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serializable;
/**
* 物料汇总QO按物料编号统计
*/
@Data
public class MaterialSummaryQO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 物料编号
*/
@NotBlank(message = "物料编号不能为空")
private String materialNo;
/**
* 物料描述
*/
@NotBlank(message = "物料描述不能为空")
private String materialDesc;
/**
* 所有托盘该物料的总数量
*/
@NotNull(message = "物料总数量不能为空")
private Integer totalQty;
}

View File

@ -0,0 +1,38 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 钢构件打包提交QO
*/
@Data
public class PackTraySubmitQO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 采购单号/钢构件订单号
*/
@NotBlank(message = "订单号不能为空")
private String orderNo;
/**
* 托盘列表
*/
@NotEmpty(message = "托盘列表不能为空")
@Valid
private List<TraySubmitQO> trays;
/**
* 物料汇总列表按物料编号统计的总数量
*/
@NotEmpty(message = "物料汇总列表不能为空")
@Valid
private List<MaterialSummaryQO> materialSummary;
}

View File

@ -0,0 +1,38 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 钢构件打包提交带差异原因QO
*/
@Data
public class PackTraySubmitWithDiffQO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 采购单号/钢构件订单号
*/
@NotBlank(message = "订单号不能为空")
private String orderNo;
/**
* 托盘列表
*/
@NotEmpty(message = "托盘列表不能为空")
@Valid
private List<TraySubmitQO> trays;
/**
* 差异列表
*/
@NotEmpty(message = "差异列表不能为空")
@Valid
private List<DiffItemQO> diffList;
}

View File

@ -0,0 +1,40 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 托盘物料QO
*/
@Data
public class TrayMaterialQO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 物料编号
*/
@NotBlank(message = "物料编号不能为空")
private String materialNo;
/**
* 物料描述
*/
@NotBlank(message = "物料描述不能为空")
private String materialDesc;
/**
* 二维码列表该物料的所有条码
*/
private List<String> qrCodes;
/**
* 该物料的总数量
*/
@NotNull(message = "物料数量不能为空")
private Integer totalQty;
}

View File

@ -0,0 +1,37 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 托盘提交QO
*/
@Data
public class TraySubmitQO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 托盘号
*/
@NotBlank(message = "托盘号不能为空")
private String trayNo;
/**
* 订单号
*/
@NotBlank(message = "订单号不能为空")
private String orderNo;
/**
* 托盘内物料明细
*/
@NotEmpty(message = "物料明细不能为空")
@Valid
private List<TrayMaterialQO> items;
}

View File

@ -0,0 +1,25 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.math.BigDecimal;
/**
* 修改钢构包订单托盘数量请求对象
*/
@Data
public class UpdatePackageTrayNumQO {
/**
* 钢构包订单ID
*/
@NotNull(message = "钢构包订单ID不能为空")
private Long orderId;
/**
* 托盘数量
*/
@NotNull(message = "托盘数量不能为空")
private BigDecimal trayNum;
}

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

@ -8,6 +8,11 @@ import java.util.List;
@Data
public class DeliverStructuralPackageOrderTrayVO {
/**
* 订单ID
*/
private Long orderId;
/**
* 供应商代码
*/

View File

@ -0,0 +1,43 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.io.Serializable;
/**
* 差异项VO
*/
@Data
public class DiffItemVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 物料编号
*/
private String materialNo;
/**
* 物料描述
*/
private String materialDesc;
/**
* 出货数量
*/
private Integer shipmentNum;
/**
* 已装数量
*/
private Integer actualQty;
/**
* 差异数量
*/
private Integer diffQty;
/**
* 差异原因描述必填
*/
private String remark;
}

View File

@ -0,0 +1,29 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 打包提交返回结果VO
*/
@Data
public class PackTraySubmitResultVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 是否有差异
*/
private Boolean hasDiff;
/**
* 差异列表如果有差异
*/
private List<DiffItemVO> diffList;
/**
* 提示信息
*/
private String message;
}

View File

@ -0,0 +1,29 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 钢构件打包提交带差异原因VO
*/
@Data
public class PackTraySubmitWithDiffVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 采购单号/钢构件订单号
*/
private String orderNo;
/**
* 托盘列表
*/
private List<TrayItemVO2> trays;
/**
* 差异列表
*/
private List<DiffItemVO> diffList;
}

View File

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

View File

@ -0,0 +1,30 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 托盘项VO
*/
@Data
public class TrayItemVO2 implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 托盘号
*/
private String trayNo;
/**
* 订单号
*/
private String orderNo;
/**
* 托盘内物料明细
*/
private List<TrayMaterialVO> items;
}

View File

@ -0,0 +1,34 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 托盘物料VO
*/
@Data
public class TrayMaterialVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 物料编号
*/
private String materialNo;
/**
* 物料描述
*/
private String materialDesc;
/**
* 二维码列表该物料的所有条码
*/
private List<String> qrCodes;
/**
* 该物料的总数量
*/
private Integer totalQty;
}

View File

@ -20,4 +20,9 @@ public interface WmsStructuralPackageOrderTrayItemMapper extends BaseMapper<WmsS
List<DeliverStructuralPackageOrderTrayItemVO> getListByTrayId(Long id);
List<DeliverStructuralPackageOrderTrayItemSimpleVO> getSimpleListByTrayNo(String trayNo);
/**
* 根据订单ID获取物料项列表不依赖托盘关联
*/
List<DeliverStructuralPackageOrderTrayItemVO> getListByOrderId(Long orderId);
}

View File

@ -31,4 +31,9 @@ public interface IWmsStructuralPackageOrderTrayItemService extends IService<WmsS
List<DeliverStructuralPackageOrderTrayItemSimpleVO> getSimpleListByTrayNo(@Valid @NotBlank String trayNo);
List<WmsStructuralPackageOrderTrayItem> getListByTrayId(Long id);
/**
* 根据订单ID获取物料项列表不依赖托盘关联
*/
List<DeliverStructuralPackageOrderTrayItemVO> getListVOByOrderId(@Valid @NotNull Long orderId);
}

View File

@ -54,4 +54,9 @@ public class WmsStructuralPackageOrderTrayItemServiceImpl extends ServiceImpl<Wm
public List<WmsStructuralPackageOrderTrayItem> getListByTrayId(Long id) {
return lambdaQuery().eq(WmsStructuralPackageOrderTrayItem::getTrayId, id).list();
}
@Override
public List<DeliverStructuralPackageOrderTrayItemVO> getListVOByOrderId(Long orderId) {
return baseMapper.getListByOrderId(orderId);
}
}

View File

@ -21,4 +21,16 @@
where ot.no=#{trayNo}
order by oti.id
</select>
<select id="getListByOrderId" resultType="com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderTrayItemVO">
SELECT ROW_NUMBER() OVER (ORDER BY oti.id) AS "index",m.image,m.drawing_no,oti.*,
'' as "tray_no",0 as "state",
sp."no" as "package_no",sp."name" as "package_desc"
FROM wms_structural_package_order o
INNER JOIN wms_structural_package_order_tray_item oti ON o."id"=oti.order_id
LEFT JOIN wms_structural_package sp ON o.package_id=sp."id"
LEFT JOIN wms_material m ON oti.material_no=m."no" and oti."version"=m."version"
where o.id=#{orderId}
order by oti.id
</select>
</mapper>

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}
@ -81,7 +83,7 @@
</select>
<select id="getInfoByNo" resultType="com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderTrayVO">
SELECT o.external_order_no,o.row_no,sp."no" AS "package_no",sp."name" AS "package_desc",ot.num,us.supplier_name
SELECT ot.order_id,o.external_order_no,o.row_no,sp."no" AS "package_no",sp."name" AS "package_desc",ot.num,us.supplier_name
,us.supplier_code,ot.state
FROM wms_structural_package_order o
LEFT JOIN wms_workbench wb ON o.workbench_id=wb."id"