iWMS二次开发小案例(1)
FMR入库后,如何将过账记录中的目标仓位改为到达的仓位。

FMR入库后更改过账记录数据

1. 背景

当前FMR入库流程,入库更新库存后会创建库存变更记录,然后会触发过账。根据库存变更记录生成过账记录。但是,入库更新库存那一时刻,库存变更记录的目标仓位desBinCode还是空的,后续不会更新这个字段,过账记录也拿不到真实的目标仓位,如何解决呢?

2. 思路

  1. FMR返程任务到达后,会上报iWMS到达仓位reachBin,里面会携带到达的目标库区和目标仓位,可以考虑此时反向更新对应库存变更记录

  2. 需要修改过账的触发时机,在过账时,如果这个库存变更记录没有目标仓位,则需要过滤掉。

3. 实现

  1. 修改回库参数构建,库存变更记录和返程的移动任务号保持一致。

回库参数构建.jpg

  1. cms上报仓位到达时,根据移动任务号,查询库存变更记录,并更新库存变更记录的目标仓位
    到达仓位.png
package robot.wms.groovy import robot.glory.framework.core.context.SpringContext import robot.wms.base.change.model.StockChangeRecord import robot.wms.base.change.param.StockChangeRecordParam import robot.wms.base.change.service.StockChangeRecordService import robot.wms.base.constant.WmsBaseConstant import robot.wms.base.task.model.MoveTask import robot.wms.framework.util.CollectionUtil /** * 根据移动任务号,查询库存变更记录,并更新库存变更记录的desBinCode为上报的目标仓位号。目标库区为上报的库区号 */ def reportTaskDto = context.get('reportTaskDto') MoveTask moveTask = context.get('moveTask') String binCode = reportTaskDto.getBinCode(); String zoneCode = reportTaskDto.extra.values.zoneCode; if (robot.glory.framework.util.StringUtil.isNotBlank(binCode) && moveTask != null) { StockChangeRecordService stockChangeRecordService = SpringContext.getBean(StockChangeRecordService.class) //根据移动任务号,查找对应的库存变更记录 String moveTaskCode = moveTask.getMoveTaskCode(); if (moveTaskCode.endsWith("RETURN")) { moveTaskCode = moveTaskCode.substring(0, moveTaskCode.length() - 6); // 删除尾部 "RETURN" } List<StockChangeRecord> stockChangeRecords = stockChangeRecordService.findByParam(StockChangeRecordParam.build().setMoveTaskCode(moveTaskCode)) if(CollectionUtil.isEmpty(stockChangeRecords)){ log.debug('为空的任务' + moveTaskCode) return } //更新库存变更记录的目标仓位 stockChangeRecords.forEach { o -> o.setDesBinCode(binCode) } //更新库存变更记录的目标库区 stockChangeRecords.forEach { o -> o.setDesAreaCode(zoneCode) } stockChangeRecordService.updateCondition(stockChangeRecords, StockChangeRecordParam.build().setDesBinCode(WmsBaseConstant.MARKER_STRING).setDesAreaCode(WmsBaseConstant.MARKER_STRING)) }
  1. 按任务过账的过滤流程中,一个任务下的库存变更记录目标仓位必须全部存在,否则此任务不过账。
package robot.wms.groovy import robot.glory.framework.util.StringUtil import robot.wms.core.common.context.WmsSysContext import robot.wms.third.account.param.AccountDto import robot.wms.third.account.param.data.AccountData /** * 一个任务下的库存变更记录目标仓位必须全部存在,否则此任务不过账。 */ AccountDto account = context.get('account') List<AccountData> accountDataList = account.getData(); //获取 目标仓位为空的 且是入库任务类型的 移动任务单号 Set<String> moveTaskCodes = new HashSet<>() for (AccountData data : accountDataList) { if (StringUtil.isBlank(data.getDesBinCode()) && WmsSysContext.getIntoTaskTypeMap().containsKey(data.getTaskType())) { moveTaskCodes.add(data.getMoveTaskCode()) } } //过滤没有目标仓位的 库存变更记录 accountDataList.removeIf(accountData -> moveTaskCodes.contains(accountData.getMoveTaskCode())); context.put('account',account)
  1. 过账参数中binCode和area就是实际到达的仓位和库区啦

4. 总结

  1. 库存变更记录生成时,如果没有目标仓位,默认是空;目标库区没有默认是90XX。载具到达后,需要手动更新库存变更记录
  2. 通过控制过账过滤条件可以实现不同方式的过账

5. 版本适用情况

适配 4.1.2,4.1.3

版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

DataBus问题排查

下一篇
已经是最后一篇啦~
评论请先登录 登录
全部评论 0
Lv.0
0
关注
0
粉丝
0
创作
0
获赞
相关阅读
  • 一文带你入门RCS4.X-(4.2.8单独档)【任务编排】(四)
    2025-06-23 浏览 0
  • 秒懂VisionMaster!「VM助手」上线,有问必答的AI导师来了!
    2025-06-26 浏览 0
  • AMR助手,你的技术外挂,上线啦!
    2025-07-03 浏览 0
  • 魔都车展,海康机器人携最新“眼”技报道!
    2025-07-04 浏览 0
  • [第三届启智杯大赛决赛】-应用3D赛道-果宝特攻队-九通阀密封垫缺陷检测系统
    2025-06-09 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器