Compare commits

...

2 Commits

Author SHA1 Message Date
曹鹏飞 2a8d96a14a 生产订单入库如果是齐套物料,子项的数量改为比例而不是总数 2026-04-02 14:06:45 +08:00
曹鹏飞 a9cbdbed26 feat(wms): 添加生产订单入库功能并优化组件包装逻辑
- 新增 InProduceOrderController 实现生产订单入库管理功能
- 在 BOM 服务中添加 isQiTao 方法用于判断物料是否为齐套物料
- 重构组件包装控制器中的齐套判断逻辑,统一使用 isQiTao 方法
- 移除 ComponentPackingController 中未使用的 PageUtil 导入
- 为生产订单添加完整的 CRUD 操作和 PDF 导出功能
- 实现 PDA 端生产订单收货和入库流程
- 添加物料扫描记录和库存同步功能
- 优化多个出库控制器中的齐套判断逻辑
- 实现出库单据的批量处理和打印功能
2026-04-02 10:23:58 +08:00
9 changed files with 44 additions and 37 deletions

View File

@ -16,7 +16,6 @@ import com.nflg.wms.common.pojo.qo.ComponentPackingEditInputQO;
import com.nflg.wms.common.pojo.qo.ComponentPackingInputQO; import com.nflg.wms.common.pojo.qo.ComponentPackingInputQO;
import com.nflg.wms.common.pojo.qo.ComponentPackingQO; import com.nflg.wms.common.pojo.qo.ComponentPackingQO;
import com.nflg.wms.common.pojo.vo.*; import com.nflg.wms.common.pojo.vo.*;
import com.nflg.wms.common.util.PageUtil;
import com.nflg.wms.common.util.VUtil; import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.WmsComponentPacking; import com.nflg.wms.repository.entity.WmsComponentPacking;
import com.nflg.wms.repository.entity.WmsComponentPackingItem; import com.nflg.wms.repository.entity.WmsComponentPackingItem;
@ -195,12 +194,12 @@ public class ComponentPackingController {
if (CollectionUtil.isEmpty(tasks)) { if (CollectionUtil.isEmpty(tasks)) {
return ApiResult.success(Collections.emptyList()); return ApiResult.success(Collections.emptyList());
} }
Integer type = bomService.getScanType(packing.getMatnr());
// 转换为 VO 对象 // 转换为 VO 对象
List<ComponentPackingItemPdaVO> daVos = tasks.stream() List<ComponentPackingItemPdaVO> daVos = tasks.stream()
.map(item1 -> { .map(item1 -> {
ComponentPackingItemPdaVO vo = Convert.convert(ComponentPackingItemPdaVO.class, item1); ComponentPackingItemPdaVO vo = Convert.convert(ComponentPackingItemPdaVO.class, item1);
vo.setQiTao(type > 0); vo.setQiTao(bomService.isQiTao(vo.getIdnrk()));
Integer type = bomService.getScanType(vo.getIdnrk());
if (Objects.equals(type, 1)) { if (Objects.equals(type, 1)) {
vo.setChildren(bomService.getChildrenVO(vo.getIdnrk())); vo.setChildren(bomService.getChildrenVO(vo.getIdnrk()));
} }

View File

@ -22,9 +22,13 @@ import com.nflg.wms.common.pojo.vo.InProduceOrderItemVO;
import com.nflg.wms.common.pojo.vo.InProduceOrderMaterialVO; import com.nflg.wms.common.pojo.vo.InProduceOrderMaterialVO;
import com.nflg.wms.common.pojo.vo.InProduceOrderVO; import com.nflg.wms.common.pojo.vo.InProduceOrderVO;
import com.nflg.wms.common.util.DateTimeUtil; import com.nflg.wms.common.util.DateTimeUtil;
import com.nflg.wms.common.util.NumberUtil;
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.WmsBom;
import com.nflg.wms.repository.entity.WmsInProduceOrder;
import com.nflg.wms.repository.entity.WmsInProduceOrderItem;
import com.nflg.wms.repository.entity.WmsQrCodeMaster;
import com.nflg.wms.repository.service.*; import com.nflg.wms.repository.service.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
@ -118,7 +122,6 @@ public class InProduceOrderController extends BaseController {
/** /**
* 从SAP查询生产订单信息 * 从SAP查询生产订单信息
*
* @param no 生产订单号 * @param no 生产订单号
* @return 订单信息 * @return 订单信息
*/ */
@ -129,7 +132,6 @@ public class InProduceOrderController extends BaseController {
/** /**
* 保存 * 保存
*
* @param request 请求参数 * @param request 请求参数
*/ */
@Transactional @Transactional
@ -169,7 +171,7 @@ public class InProduceOrderController extends BaseController {
.setId(IdUtil.getSnowflakeNextId()) .setId(IdUtil.getSnowflakeNextId())
.setOrderId(order.getId()) .setOrderId(order.getId())
.setParentId(parent.getId()) .setParentId(parent.getId())
.setNum(request.getNum().multiply(it.getNum())) .setNum(it.getNum())
.setMaterialNo(it.getNo()) .setMaterialNo(it.getNo())
.setMaterialDesc(it.getDescribe()) .setMaterialDesc(it.getDescribe())
.setUnit(request.getMeins()) .setUnit(request.getMeins())
@ -189,7 +191,7 @@ public class InProduceOrderController extends BaseController {
.setMaterialCode(it.getMaterialNo()) .setMaterialCode(it.getMaterialNo())
.setMaterialDescription(it.getMaterialDesc()) .setMaterialDescription(it.getMaterialDesc())
.setPackagingType((short) 0) .setPackagingType((short) 0)
.setQuantity(it.getNum()) .setQuantity(NumberUtil.multiply(it.getNum(), parent.getNum()))
.setUnit(it.getUnit()) .setUnit(it.getUnit())
.setBatchNo(it.getBatchNo()) .setBatchNo(it.getBatchNo())
.setSerialNo(it.getSernr()) .setSerialNo(it.getSernr())
@ -222,7 +224,6 @@ public class InProduceOrderController extends BaseController {
/** /**
* 搜索 * 搜索
*
* @param request 搜索参数 * @param request 搜索参数
* @return 搜索结果 * @return 搜索结果
*/ */
@ -233,7 +234,6 @@ public class InProduceOrderController extends BaseController {
/** /**
* 获取订单的物料列表 * 获取订单的物料列表
*
* @param id 订单ID * @param id 订单ID
* @return 列表 * @return 列表
*/ */
@ -252,7 +252,6 @@ public class InProduceOrderController extends BaseController {
/** /**
* 删除 * 删除
*
* @param id 订单ID * @param id 订单ID
*/ */
@Transactional @Transactional
@ -269,7 +268,6 @@ public class InProduceOrderController extends BaseController {
/** /**
* 导出物料条码pdf(逐个) * 导出物料条码pdf(逐个)
*
* @param id 订单ID * @param id 订单ID
* @param type 1逐个2一页 * @param type 1逐个2一页
*/ */
@ -378,7 +376,6 @@ public class InProduceOrderController extends BaseController {
/** /**
* 获取订单信息PDA使用 * 获取订单信息PDA使用
*
* @param no 报工单号 * @param no 报工单号
*/ */
@GetMapping("getOrderInfo") @GetMapping("getOrderInfo")
@ -398,13 +395,13 @@ public class InProduceOrderController extends BaseController {
List<InProduceOrderItemVO> children = list.stream() List<InProduceOrderItemVO> children = list.stream()
.filter(child -> Objects.equals(child.getParentId(), it.getId())) .filter(child -> Objects.equals(child.getParentId(), it.getId()))
.toList(); .toList();
it.setQiTao(CollectionUtil.isNotEmpty(children));
Integer type = bomService.getScanType(it.getMaterialNo()); Integer type = bomService.getScanType(it.getMaterialNo());
it.setQiTao(type > 0);
if (Objects.equals(type, 0)) { if (Objects.equals(type, 0)) {
it.setMustScan(false); it.setMustScan(false);
} }
children.forEach(child -> { children.forEach(child -> {
child.setQiTao(it.isQiTao()); child.setQiTao(false);
child.setMustScan(it.isMustScan()); child.setMustScan(it.isMustScan());
child.setBinNo(binService.getBinNo(child.getMaterialNo(), child.getFactoryNo(), child.getWarehouseNo())); child.setBinNo(binService.getBinNo(child.getMaterialNo(), child.getFactoryNo(), child.getWarehouseNo()));
child.setIsDisableLocation(warehouseService.isEnableLocation(child.getFactoryNo(), child.getWarehouseNo())); child.setIsDisableLocation(warehouseService.isEnableLocation(child.getFactoryNo(), child.getWarehouseNo()));
@ -418,7 +415,6 @@ public class InProduceOrderController extends BaseController {
/** /**
* 收货和入库PDA使用 * 收货和入库PDA使用
*
* @param request 请求参数 * @param request 请求参数
*/ */
@Transactional @Transactional
@ -432,19 +428,21 @@ public class InProduceOrderController extends BaseController {
List<InProduceOrderItemVO> datas; List<InProduceOrderItemVO> datas;
if (order.getList()) { if (order.getList()) {
datas = new ArrayList<>(); datas = new ArrayList<>();
list.stream().filter(it -> Objects.equals(it.getParentId(), 0L)).forEach(it -> { list.stream().filter(it -> Objects.equals(it.getParentId(), 0L))
List<InProduceOrderItemVO> children = list.stream() .forEach(it -> {
.filter(child -> Objects.equals(child.getParentId(), it.getId())) List<InProduceOrderItemVO> children = list.stream()
.toList(); .filter(child -> Objects.equals(child.getParentId(), it.getId()))
Integer type = bomService.getScanType(it.getMaterialNo()); .toList();
children.forEach(child -> { Integer type = bomService.getScanType(it.getMaterialNo());
child.setQiTao(type > 0); children.forEach(child -> {
if (Objects.equals(type, 0)) { child.setNum(NumberUtil.multiply(child.getNum(), it.getNum()));
child.setMustScan(false); child.setQiTao(false);
} if (Objects.equals(type, 0)) {
}); child.setMustScan(false);
datas.addAll(children); }
}); });
datas.addAll(children);
});
} else { } else {
datas = list; datas = list;
} }
@ -459,9 +457,9 @@ public class InProduceOrderController extends BaseController {
List<WmsQrCodeMaster> qrCodeMasters = CollectionUtil.isEmpty(allQrCodes) List<WmsQrCodeMaster> qrCodeMasters = CollectionUtil.isEmpty(allQrCodes)
? Collections.emptyList() ? Collections.emptyList()
: qrCodeMasterService.lambdaQuery() : qrCodeMasterService.lambdaQuery()
.ne(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState()) .ne(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
.in(WmsQrCodeMaster::getBarcodeCode, allQrCodes) .in(WmsQrCodeMaster::getBarcodeCode, allQrCodes)
.list(); .list();
datas.forEach(it -> { datas.forEach(it -> {
InventoryIn1ItemQO qitem = request.getItems().stream() InventoryIn1ItemQO qitem = request.getItems().stream()
.filter(item -> Objects.equals(item.getItemId(), it.getId())) .filter(item -> Objects.equals(item.getItemId(), it.getId()))

View File

@ -211,7 +211,7 @@ public class OutAssistanceController extends BaseController {
.setMatnr(item.getMatnr1()) .setMatnr(item.getMatnr1())
.setMeins(item.getMeins()) .setMeins(item.getMeins())
.setNum(item.getLeft()); .setNum(item.getLeft());
vo.setQiTao(type > 0); vo.setQiTao(bomService.isQiTao(item.getMatnr1()));
if (Objects.equals(type, 1)) { if (Objects.equals(type, 1)) {
vo.setChildren(bomService.getChildrenVO(item.getMatnr1())); vo.setChildren(bomService.getChildrenVO(item.getMatnr1()));
} }

View File

@ -213,7 +213,7 @@ public class OutCostCenterController extends BaseController {
.setMatnr(item.getMatnr()) .setMatnr(item.getMatnr())
.setNum(item.getLeft()) .setNum(item.getLeft())
.setMeins(item.getMeins()); .setMeins(item.getMeins());
vo.setQiTao(type > 0); vo.setQiTao(bomService.isQiTao(item.getMatnr()));
if (Objects.equals(type, 1)) { if (Objects.equals(type, 1)) {
vo.setChildren(bomService.getChildrenVO(item.getMatnr())); vo.setChildren(bomService.getChildrenVO(item.getMatnr()));
} }

View File

@ -365,7 +365,7 @@ public class OutProduceController extends BaseController {
.setMeins(item.getMeins()) .setMeins(item.getMeins())
.setNum(item.getSqsl().subtract(item.getNum())); .setNum(item.getSqsl().subtract(item.getNum()));
Integer type = bomService.getScanType(item.getMatnr()); Integer type = bomService.getScanType(item.getMatnr());
vo.setQiTao(type > 0); vo.setQiTao(bomService.isQiTao(item.getMatnr()));
if (Objects.equals(type, 1)) { if (Objects.equals(type, 1)) {
vo.setChildren(bomService.getChildrenVO(item.getMatnr())); vo.setChildren(bomService.getChildrenVO(item.getMatnr()));
} }

View File

@ -269,7 +269,7 @@ public class TransferCompanyController extends BaseController {
.setMaktx(item.getMaktx()) .setMaktx(item.getMaktx())
.setNum(item.getLeft()) .setNum(item.getLeft())
.setMeins(item.getMeins()); .setMeins(item.getMeins());
vo.setQiTao(type > 0); vo.setQiTao(bomService.isQiTao(item.getMatnr()));
if (Objects.equals(type, 1)) { if (Objects.equals(type, 1)) {
vo.setChildren(bomService.getChildrenVO(item.getMatnr())); vo.setChildren(bomService.getChildrenVO(item.getMatnr()));
} }

View File

@ -268,7 +268,7 @@ public class TransferFactoryController extends BaseController {
.setMeins(item.getMeins()) .setMeins(item.getMeins())
.setBinIn(StrUtil.join("/", storageService.getBinNo(item.getMatnr(), order.getWerks(), order.getUmlgo()))) .setBinIn(StrUtil.join("/", storageService.getBinNo(item.getMatnr(), order.getWerks(), order.getUmlgo())))
.setBinOut(StrUtil.join("/", storageService.getBinNo(item.getMatnr(), order.getWerks(), order.getLgort()))); .setBinOut(StrUtil.join("/", storageService.getBinNo(item.getMatnr(), order.getWerks(), order.getLgort())));
vo.setQiTao(type > 0); vo.setQiTao(bomService.isQiTao(item.getMatnr()));
if (Objects.equals(type, 1)) { if (Objects.equals(type, 1)) {
vo.setChildren(bomService.getChildrenVO(item.getMatnr())); vo.setChildren(bomService.getChildrenVO(item.getMatnr()));
} }

View File

@ -35,4 +35,6 @@ public interface IWmsBomService extends IService<WmsBom> {
// boolean isParent(String materialNo); // boolean isParent(String materialNo);
Integer getScanType(String materialNo); Integer getScanType(String materialNo);
boolean isQiTao(String materialNo);
} }

View File

@ -188,4 +188,12 @@ public class WmsBomServiceImpl extends ServiceImpl<WmsBomMapper, WmsBom> impleme
).orElse(new WmsBom().setScanType(-1)) ).orElse(new WmsBom().setScanType(-1))
.getScanType(); .getScanType();
} }
@Override
public boolean isQiTao(String materialNo) {
return lambdaQuery()
.eq(WmsBom::getParentId, 0)
.eq(WmsBom::getNo, materialNo)
.exists();
}
} }