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
*
* @param id 订单ID
*/
@GetMapping(value = "exportItemImageZip", produces = "application/zip")
@ -336,7 +335,6 @@ public class InProduceOrderController extends BaseController {
/**
* 导出报工单PDF单个
*
* @param id 订单id
*/
@GetMapping("exportOrderPdf")
@ -346,7 +344,6 @@ public class InProduceOrderController extends BaseController {
/**
* 导出报工单PDF批量
*
* @param ids 订单id列表
*/
@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.StrUtil;
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.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
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.vo.*;
import com.nflg.wms.common.util.UserUtil;
@ -63,6 +61,7 @@ public class InventoryController extends BaseController {
/**
* 库存查看
*
* @param request 请求参数
*/
@PostMapping("search")
@ -72,6 +71,7 @@ public class InventoryController extends BaseController {
/**
* 保存库存盘点任务
*
* @param request 请求参数
*/
@PostMapping("check/save")
@ -82,6 +82,7 @@ public class InventoryController extends BaseController {
/**
* 查询库存盘点任务
*
* @param request 请求参数
*/
@PostMapping("check/search")
@ -91,6 +92,7 @@ public class InventoryController extends BaseController {
/**
* 获取库存盘点任务仓库列表
*
* @param id 任务ID
* @return 仓库列表
*/
@ -120,6 +122,7 @@ public class InventoryController extends BaseController {
/**
* 发布库存盘点任务
*
* @param id 任务id
*/
@PostMapping("check/publish")
@ -130,6 +133,7 @@ public class InventoryController extends BaseController {
/**
* 删除库存盘点任务
*
* @param id ID
*/
@PostMapping("check/delete")
@ -148,6 +152,7 @@ public class InventoryController extends BaseController {
/**
* 盘点任务扫码PDA使用
*
* @param request 请求参数
*/
@PostMapping("check/scan")
@ -188,6 +193,7 @@ public class InventoryController extends BaseController {
/**
* 批量保存盘点结果PDA使用
*
* @param request 请求参数
*/
@PostMapping("check/saveScan")
@ -215,6 +221,7 @@ public class InventoryController extends BaseController {
.setMaterialNo(qrCodeContent.getMaterialCode())
.setMaterialDesc(qrCodeContent.getMaterialDescription())
.setBatchNo(qrCodeContent.getBatchNo())
.setBinNo(qrCodeContent.getBinLocation())
.setItemId(item.getId())
.setTaskId(item.getTaskId())
.setNum(qrCodeContent.getQuantity());
@ -231,6 +238,7 @@ public class InventoryController extends BaseController {
.materialId(material.getId())
.batchNo(qrCodeContent.getBatchNo())
.serialNo(qrCodeContent.getSerialNo())
.binNo(qrCodeContent.getBinLocation())
.num(qrCodeContent.getQuantity())
.content(qrCode)
.createBy(UserUtil.getUserName())
@ -261,6 +269,7 @@ public class InventoryController extends BaseController {
/**
* 查看盘点结果
*
* @param request 请求参数
*/
@PostMapping("check/getMaterials")
@ -270,6 +279,7 @@ public class InventoryController extends BaseController {
/**
* 查询物料扫码记录
*
* @param materialId 物料记录id
* @return 扫码记录列表
*/
@ -280,6 +290,7 @@ public class InventoryController extends BaseController {
/**
* 获取推荐出库批次信息
*
* @param qo 请求参数
*/
@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.BinService;
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.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.document.OutMaterialScanRecord;
import com.nflg.wms.common.pojo.dto.*;
import com.nflg.wms.common.pojo.qo.OutProduceSubmitItemQO;
import com.nflg.wms.common.pojo.dto.InventoryOutDTO;
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.QRCodeQO;
import com.nflg.wms.common.pojo.vo.OutPurchaseVO;
import com.nflg.wms.common.pojo.vo.ZWM3A05ItemVO;
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.VUtil;
import com.nflg.wms.repository.entity.*;
@ -109,11 +109,10 @@ public class OutPurchaseController extends BaseController {
.gt(WmsReturnRequestItem::getLeft, 0)
.list();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(items)).throwMessage("所有物料均已完成");
order.setPoNum(items.get(0).getPoNumberNew());
ZWM3A05VO vo = new ZWM3A05VO()
.setPurchaseOrderId(order.getId())
.setLifnr(order.getSupplierCode())
.setEbeln(order.getPoNum())
.setEbeln(order.getPoNumberNew())
.setItems(
items.stream()
.map(it -> new ZWM3A05ItemVO()
@ -125,7 +124,7 @@ public class OutPurchaseController extends BaseController {
.setMeins(it.getUnit())
.setLgort(it.getStorageLocation())
// .setEbelp(it.getPoLineNumberNew().toString())
.setEbelp(Optional.ofNullable(it.getPoLineNumberNew()).map(Object::toString).orElse(""))
.setEbelp(String.valueOf(it.getPoLineNumberNew()))
)
.toList()
);

View File

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

View File

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

View File

@ -1,6 +1,5 @@
package com.nflg.wms.common.pojo.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.experimental.Accessors;
@ -110,4 +109,14 @@ public class ApplyReturnRequestItemVO {
* 单位
*/
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 String binNo;
}

View File

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

View File

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

View File

@ -23,14 +23,17 @@
</select>
<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
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 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 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
LEFT JOIN
(
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}
</select>
</mapper>

View File

@ -7,6 +7,8 @@
,oat.audit_time,oat.audit_msg,oa.*
FROM wms_out_assistance_ticket oat
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>
<if test="request.no != null and request.no!=''">
AND oa."no" ilike CONCAT('%', #{request.no}, '%')
@ -20,6 +22,9 @@
<if test="request.lifnr!=null and request.lifnr!=''">
and lifnr like concat('%', #{request.lifnr}, '%')
</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">
and oat.create_time >= #{request.startDate}
</if>

View File

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