Compare commits

...

3 Commits

Author SHA1 Message Date
曹鹏飞 422a76133b feat(controller): 添加生产订单入库和库存管理控制器
- 新增 InProduceOrderController 实现生产订单入库管理功能
- 实现从 SAP 查询生产订单信息的功能
- 添加生产订单保存、搜索、删除等基本操作
- 实现物料条码 PDF 导出和标签图片 ZIP 批量导出
- 添加 PDA 使用的订单信息获取和收货入库接口
- 新增 InventoryController 提供库存盘点任务管理功能
- 实现库存盘点任务的创建、发布、删除等操作
- 添加盘点任务扫码记录和批量保存扫描结果功能
- 新增 InventoryCheckTaskScanRecord 文档实体用于存储盘点扫描记录
2026-03-31 16:47:54 +08:00
曹鹏飞 0c49a1c592 Merge remote-tracking branch 'origin/develop' into develop 2026-03-31 14:22:53 +08:00
曹鹏飞 11703b8518 feat(wms): 添加辅助出库单据相关功能
- 移除 ApplyReturnRequestItemVO 中的 TableField 注解
- 在 ApplyReturnRequestItemVO 中新增 poLineNumberNew 和 poNumberNew 字段
- 创建 WmsOutAssistanceTicketMapper.xml 映射文件
- 实现 search 方法用于查询辅助出库信息
- 实现 getInfo 方法用于获取单个辅助出库详情
- 配置辅助出库单据相关的数据库查询逻辑
2026-03-31 14:22:48 +08:00
12 changed files with 67 additions and 39 deletions

View File

@ -300,7 +300,6 @@ public class InProduceOrderController extends BaseController {
/** /**
* 导出物料标签图片ZIP * 导出物料标签图片ZIP
*
* @param id 订单ID * @param id 订单ID
*/ */
@GetMapping(value = "exportItemImageZip", produces = "application/zip") @GetMapping(value = "exportItemImageZip", produces = "application/zip")
@ -336,7 +335,6 @@ public class InProduceOrderController extends BaseController {
/** /**
* 导出报工单PDF单个 * 导出报工单PDF单个
*
* @param id 订单id * @param id 订单id
*/ */
@GetMapping("exportOrderPdf") @GetMapping("exportOrderPdf")
@ -346,7 +344,6 @@ public class InProduceOrderController extends BaseController {
/** /**
* 导出报工单PDF批量 * 导出报工单PDF批量
*
* @param ids 订单id列表 * @param ids 订单id列表
*/ */
@PostMapping("exportOrderPdf1") @PostMapping("exportOrderPdf1")

View File

@ -5,12 +5,10 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.nflg.wms.admin.repository.InventoryCheckTaskScanRecordResitory; import com.nflg.wms.admin.repository.InventoryCheckTaskScanRecordResitory;
import com.nflg.wms.admin.util.NoUtil;
import com.nflg.wms.common.constant.STATE; import com.nflg.wms.common.constant.STATE;
import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.document.InventoryCheckTaskScanRecord; import com.nflg.wms.common.pojo.document.InventoryCheckTaskScanRecord;
import com.nflg.wms.common.pojo.dto.MaterialQRCodeContentDTO;
import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.*; import com.nflg.wms.common.pojo.vo.*;
import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.UserUtil;
@ -63,6 +61,7 @@ public class InventoryController extends BaseController {
/** /**
* 库存查看 * 库存查看
*
* @param request 请求参数 * @param request 请求参数
*/ */
@PostMapping("search") @PostMapping("search")
@ -72,6 +71,7 @@ public class InventoryController extends BaseController {
/** /**
* 保存库存盘点任务 * 保存库存盘点任务
*
* @param request 请求参数 * @param request 请求参数
*/ */
@PostMapping("check/save") @PostMapping("check/save")
@ -82,6 +82,7 @@ public class InventoryController extends BaseController {
/** /**
* 查询库存盘点任务 * 查询库存盘点任务
*
* @param request 请求参数 * @param request 请求参数
*/ */
@PostMapping("check/search") @PostMapping("check/search")
@ -91,6 +92,7 @@ public class InventoryController extends BaseController {
/** /**
* 获取库存盘点任务仓库列表 * 获取库存盘点任务仓库列表
*
* @param id 任务ID * @param id 任务ID
* @return 仓库列表 * @return 仓库列表
*/ */
@ -120,6 +122,7 @@ public class InventoryController extends BaseController {
/** /**
* 发布库存盘点任务 * 发布库存盘点任务
*
* @param id 任务id * @param id 任务id
*/ */
@PostMapping("check/publish") @PostMapping("check/publish")
@ -130,6 +133,7 @@ public class InventoryController extends BaseController {
/** /**
* 删除库存盘点任务 * 删除库存盘点任务
*
* @param id ID * @param id ID
*/ */
@PostMapping("check/delete") @PostMapping("check/delete")
@ -148,6 +152,7 @@ public class InventoryController extends BaseController {
/** /**
* 盘点任务扫码PDA使用 * 盘点任务扫码PDA使用
*
* @param request 请求参数 * @param request 请求参数
*/ */
@PostMapping("check/scan") @PostMapping("check/scan")
@ -188,6 +193,7 @@ public class InventoryController extends BaseController {
/** /**
* 批量保存盘点结果PDA使用 * 批量保存盘点结果PDA使用
*
* @param request 请求参数 * @param request 请求参数
*/ */
@PostMapping("check/saveScan") @PostMapping("check/saveScan")
@ -215,6 +221,7 @@ public class InventoryController extends BaseController {
.setMaterialNo(qrCodeContent.getMaterialCode()) .setMaterialNo(qrCodeContent.getMaterialCode())
.setMaterialDesc(qrCodeContent.getMaterialDescription()) .setMaterialDesc(qrCodeContent.getMaterialDescription())
.setBatchNo(qrCodeContent.getBatchNo()) .setBatchNo(qrCodeContent.getBatchNo())
.setBinNo(qrCodeContent.getBinLocation())
.setItemId(item.getId()) .setItemId(item.getId())
.setTaskId(item.getTaskId()) .setTaskId(item.getTaskId())
.setNum(qrCodeContent.getQuantity()); .setNum(qrCodeContent.getQuantity());
@ -231,6 +238,7 @@ public class InventoryController extends BaseController {
.materialId(material.getId()) .materialId(material.getId())
.batchNo(qrCodeContent.getBatchNo()) .batchNo(qrCodeContent.getBatchNo())
.serialNo(qrCodeContent.getSerialNo()) .serialNo(qrCodeContent.getSerialNo())
.binNo(qrCodeContent.getBinLocation())
.num(qrCodeContent.getQuantity()) .num(qrCodeContent.getQuantity())
.content(qrCode) .content(qrCode)
.createBy(UserUtil.getUserName()) .createBy(UserUtil.getUserName())
@ -261,6 +269,7 @@ public class InventoryController extends BaseController {
/** /**
* 查看盘点结果 * 查看盘点结果
*
* @param request 请求参数 * @param request 请求参数
*/ */
@PostMapping("check/getMaterials") @PostMapping("check/getMaterials")
@ -270,6 +279,7 @@ public class InventoryController extends BaseController {
/** /**
* 查询物料扫码记录 * 查询物料扫码记录
*
* @param materialId 物料记录id * @param materialId 物料记录id
* @return 扫码记录列表 * @return 扫码记录列表
*/ */
@ -280,6 +290,7 @@ public class InventoryController extends BaseController {
/** /**
* 获取推荐出库批次信息 * 获取推荐出库批次信息
*
* @param qo 请求参数 * @param qo 请求参数
*/ */
@PostMapping("getForOut") @PostMapping("getForOut")

View File

@ -9,19 +9,19 @@ import com.nflg.wms.admin.repository.OutMaterialScanRecordRespository;
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService; import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
import com.nflg.wms.admin.service.BinService; import com.nflg.wms.admin.service.BinService;
import com.nflg.wms.admin.service.SapService; import com.nflg.wms.admin.service.SapService;
import com.nflg.wms.admin.util.NoUtil;
import com.nflg.wms.common.constant.BarCodeProcessStage; import com.nflg.wms.common.constant.BarCodeProcessStage;
import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.document.OutMaterialScanRecord; import com.nflg.wms.common.pojo.document.OutMaterialScanRecord;
import com.nflg.wms.common.pojo.dto.*; import com.nflg.wms.common.pojo.dto.InventoryOutDTO;
import com.nflg.wms.common.pojo.qo.OutProduceSubmitItemQO; import com.nflg.wms.common.pojo.dto.OptRecordDTO;
import com.nflg.wms.common.pojo.dto.ZWM3A06Input1DTO;
import com.nflg.wms.common.pojo.dto.ZWM3A06Input2DTO;
import com.nflg.wms.common.pojo.qo.OutPurchaseSearchQO; import com.nflg.wms.common.pojo.qo.OutPurchaseSearchQO;
import com.nflg.wms.common.pojo.qo.QRCodeQO; import com.nflg.wms.common.pojo.qo.QRCodeQO;
import com.nflg.wms.common.pojo.vo.OutPurchaseVO; import com.nflg.wms.common.pojo.vo.OutPurchaseVO;
import com.nflg.wms.common.pojo.vo.ZWM3A05ItemVO; import com.nflg.wms.common.pojo.vo.ZWM3A05ItemVO;
import com.nflg.wms.common.pojo.vo.ZWM3A05VO; import com.nflg.wms.common.pojo.vo.ZWM3A05VO;
import com.nflg.wms.common.pojo.vo.Zwm3a09VO;
import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil; import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.entity.*;
@ -109,11 +109,10 @@ public class OutPurchaseController extends BaseController {
.gt(WmsReturnRequestItem::getLeft, 0) .gt(WmsReturnRequestItem::getLeft, 0)
.list(); .list();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(items)).throwMessage("所有物料均已完成"); VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(items)).throwMessage("所有物料均已完成");
order.setPoNum(items.get(0).getPoNumberNew());
ZWM3A05VO vo = new ZWM3A05VO() ZWM3A05VO vo = new ZWM3A05VO()
.setPurchaseOrderId(order.getId()) .setPurchaseOrderId(order.getId())
.setLifnr(order.getSupplierCode()) .setLifnr(order.getSupplierCode())
.setEbeln(order.getPoNum()) .setEbeln(order.getPoNumberNew())
.setItems( .setItems(
items.stream() items.stream()
.map(it -> new ZWM3A05ItemVO() .map(it -> new ZWM3A05ItemVO()
@ -125,7 +124,7 @@ public class OutPurchaseController extends BaseController {
.setMeins(it.getUnit()) .setMeins(it.getUnit())
.setLgort(it.getStorageLocation()) .setLgort(it.getStorageLocation())
// .setEbelp(it.getPoLineNumberNew().toString()) // .setEbelp(it.getPoLineNumberNew().toString())
.setEbelp(Optional.ofNullable(it.getPoLineNumberNew()).map(Object::toString).orElse("")) .setEbelp(String.valueOf(it.getPoLineNumberNew()))
) )
.toList() .toList()
); );

View File

@ -243,7 +243,7 @@ public class PurchaseReturnController extends BaseController {
.findFirst() .findFirst()
.get(); .get();
dbItem.setPoLineNumberNew(item.getEbelp()); dbItem.setPoLineNumberNew(item.getEbelp());
dbItem.setPoNumberNew(item.getEbeln()); returnRequest.setPoNumberNew(item.getEbeln());
}); });
returnRequestItemService.updateBatchById(returnRequestItems); returnRequestItemService.updateBatchById(returnRequestItems);
} else if (request.getDocumentType().equals(2)) { //24 退换货 } else if (request.getDocumentType().equals(2)) { //24 退换货
@ -271,7 +271,7 @@ public class PurchaseReturnController extends BaseController {
.filter(it -> it.getMaterialCode().equals(materialNo)) .filter(it -> it.getMaterialCode().equals(materialNo))
.findFirst().orElse( null); .findFirst().orElse( null);
dbItem.setPoLineNumberNew(item.getEbelp()); dbItem.setPoLineNumberNew(item.getEbelp());
dbItem.setPoNumberNew(item.getEbeln()); returnRequest.setPoNumberNew(item.getEbeln());
returnRequestItemService.updateBatchById(returnRequestItems); returnRequestItemService.updateBatchById(returnRequestItems);
} }
} }
@ -524,16 +524,9 @@ public class PurchaseReturnController extends BaseController {
@GetMapping("exportTicket") @GetMapping("exportTicket")
public void exportTicket(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception { public void exportTicket(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception {
WmsReturnRequest order = returnRequestService.getById(id); WmsReturnRequest order = returnRequestService.getById(id);
List<WmsReturnRequestItem> orderItem = returnRequestItemService.lambdaQuery()
.eq(WmsReturnRequestItem::getApplicationId, id)
.list();
if(CollectionUtil.isNotEmpty(orderItem))
{
order.setPoNum(orderItem.get(0).getPoNumberNew());
}
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("申请单不存在"); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("申请单不存在");
VUtil.trueThrowBusinessError(order.getApprovalStatus() != 1).throwMessage("申请单未审核通过"); VUtil.trueThrowBusinessError(order.getApprovalStatus() != 1).throwMessage("申请单未审核通过");
order.setPoNum(order.getPoNumberNew());
UserSupplier supplier = userSupplierService.getByCode(order.getSupplierCode()); UserSupplier supplier = userSupplierService.getByCode(order.getSupplierCode());
List<WmsReturnRequestItem> list = returnRequestItemService.lambdaQuery() List<WmsReturnRequestItem> list = returnRequestItemService.lambdaQuery()
.eq(WmsReturnRequestItem::getApplicationId, id) .eq(WmsReturnRequestItem::getApplicationId, id)

View File

@ -79,4 +79,9 @@ public class InventoryCheckTaskScanRecord {
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Instant createTime; private Instant createTime;
/**
* 储位
*/
private String binNo;
} }

View File

@ -1,6 +1,5 @@
package com.nflg.wms.common.pojo.vo; package com.nflg.wms.common.pojo.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@ -110,4 +109,14 @@ public class ApplyReturnRequestItemVO {
* 单位 * 单位
*/ */
private String unit; private String unit;
/**
* sap过账的行号
*/
private Integer poLineNumberNew;
/**
* 新的采购单号
*/
private String poNumberNew;
} }

View File

@ -59,4 +59,9 @@ public class WmsInventoryCheckTaskItemMaterial implements Serializable {
* 数量 * 数量
*/ */
private BigDecimal num; private BigDecimal num;
/**
* 储位
*/
private String binNo;
} }

View File

@ -115,4 +115,9 @@ public class WmsReturnRequest implements Serializable {
* 0 PC端1 PDA端 * 0 PC端1 PDA端
*/ */
private Short dataSource; private Short dataSource;
/**
* 新的采购单号
*/
private String poNumberNew;
} }

View File

@ -128,9 +128,4 @@ public class WmsReturnRequestItem implements Serializable {
* sap过账的行号 * sap过账的行号
*/ */
private Integer poLineNumberNew; private Integer poLineNumberNew;
/**
* 新的采购单号
*/
private String poNumberNew;
} }

View File

@ -23,14 +23,17 @@
</select> </select>
<select id="getMaterials" resultType="com.nflg.wms.common.pojo.vo.InventoryCheckTaskItemMaterialVO"> <select id="getMaterials" resultType="com.nflg.wms.common.pojo.vo.InventoryCheckTaskItemMaterialVO">
SELECT ictim.*,di."name" AS "factory_no",wh."no" AS "warehouse_no",bin.no as "bin_no",i.num AS "inventory_num" SELECT ictim.*,di."name" AS "factory_no",wh."no" AS "warehouse_no",i.inventory_num
FROM wms_inventory_check_task_item_material ictim FROM wms_inventory_check_task_item_material ictim
LEFT JOIN wms_inventory_check_task_item icti ON ictim.item_id=icti."id" LEFT JOIN wms_inventory_check_task_item icti ON ictim.item_id=icti."id"
LEFT JOIN wms_warehouse wh ON icti.warehouse_id=wh."id" LEFT JOIN wms_warehouse wh ON icti.warehouse_id=wh."id"
LEFT JOIN dictionary_item di ON di."id"=wh.factory_id LEFT JOIN dictionary_item di ON di."id"=wh.factory_id
LEFT JOIN wms_inventory i ON ictim.material_no=i.material_no and i.factory_no=di.code AND i.warehouse_no=wh."no" AND i.batch_no=ictim.batch_no LEFT JOIN
LEFT JOIN wms_storage s ON s.material_no=ictim.material_no AND s.warehouse_id=icti.warehouse_id (
LEFT JOIN wms_bin bin ON s.bin_id=bin.id SELECT material_no,factory_no,warehouse_no,batch_no,bin_location,SUM(num) as inventory_num
FROM wms_inventory
GROUP BY material_no,factory_no,warehouse_no,batch_no,bin_location
) as i ON i.material_no=ictim.material_no AND i.factory_no=di.code AND i.warehouse_no=wh."no" AND i.batch_no=ictim.batch_no AND i.bin_location=ictim.bin_no
WHERE ictim.task_id=#{request.taskId} WHERE ictim.task_id=#{request.taskId}
</select> </select>
</mapper> </mapper>

View File

@ -7,6 +7,8 @@
,oat.audit_time,oat.audit_msg,oa.* ,oat.audit_time,oat.audit_msg,oa.*
FROM wms_out_assistance_ticket oat FROM wms_out_assistance_ticket oat
INNER JOIN wms_out_assistance oa ON oat.order_id=oa."id" INNER JOIN wms_out_assistance oa ON oat.order_id=oa."id"
INNER JOIN wms_out_assistance_ticket_item oati ON oati.ticket_id=oat."id"
INNER JOIN wms_out_assistance_item oai ON oai."id"=oati.order_item_id
<where> <where>
<if test="request.no != null and request.no!=''"> <if test="request.no != null and request.no!=''">
AND oa."no" ilike CONCAT('%', #{request.no}, '%') AND oa."no" ilike CONCAT('%', #{request.no}, '%')
@ -20,6 +22,9 @@
<if test="request.lifnr!=null and request.lifnr!=''"> <if test="request.lifnr!=null and request.lifnr!=''">
and lifnr like concat('%', #{request.lifnr}, '%') and lifnr like concat('%', #{request.lifnr}, '%')
</if> </if>
<if test="request.matnr!=null and request.matnr!=''">
and (oai.matnr like concat('%', #{request.matnr}, '%') OR oai.matnr1 like concat('%', #{request.matnr}, '%'))
</if>
<if test="request.startDate!=null"> <if test="request.startDate!=null">
and oat.create_time >= #{request.startDate} and oat.create_time >= #{request.startDate}
</if> </if>

View File

@ -54,10 +54,10 @@
<if test="request.poNum !=null and request.poNum !=''"> <if test="request.poNum !=null and request.poNum !=''">
and rr.po_num =#{request.poNum} and rr.po_num =#{request.poNum}
</if> </if>
<if test="request.approvalStatus !=null and request.approvalStatus !=''"> <if test="request.approvalStatus !=null">
and rr.approval_status =#{request.approvalStatus} and rr.approval_status =#{request.approvalStatus}
</if> </if>
<if test="request.documentType !=null and request.documentType !=''"> <if test="request.documentType !=null">
and rr.document_type =#{request.documentType} and rr.document_type =#{request.documentType}
</if> </if>
<if test="request.purchaseGroup !=null and request.purchaseGroup !=''"> <if test="request.purchaseGroup !=null and request.purchaseGroup !=''">
@ -69,6 +69,7 @@
<if test="request.endDate !=null"> <if test="request.endDate !=null">
and rr.approve_time &lt;= #{request.endDate} and rr.approve_time &lt;= #{request.endDate}
</if> </if>
ORDER BY rr.approval_status,rr.id DESC
</select> </select>
</mapper> </mapper>