iwms入库时序图
2021-10-03 20:46:59 1 举报
wms仓库时序图
作者其他创作
大纲/内容
InboundFacade入库统一外观对象
1.1.1.1:builder不符约束则构建异常并抛出
putAwayTaskRuleService上架规则接口服务
1.1.2.2.1:createInboundOrder创建入库单
InboundOrderContainerDetailService入库单明细接口服务
InboundOrderServiceImpl入库服务实现类
1.1.2.1.2:builder构建库存不存在异常
InboundOrderService入库订单服务接口
自动创建上架事件监听AutoCreatePutAwayTaskHandle->handleAutoCreatePutAwayTaskEvent:1.根据List<PutAwayTaskDTO>构建任务记录List<KsEventRecord>并保存taskRecordService.saveAll入库2.遍历putAwayTaskDTOS任务集合: 2.1 创建上架任务 createPutAwayTask-》doCreatePutAwayTask: 如果收货模式,则需要做前置处理(通过管理后台或swagger请求put/away/task/createPutAwayTask对应属于收货模式) 2.1.1 容器是否可用(是否可用条件:容器为空或状态为初始化或库位为可用),不可用抛异常 2.1.2 根据容器编码查询上架任务明细记录putAwayTaskDetailRecordService.getContainerBoundDetails,如果为空则抛异常,以为理论上已经给这个容器绑定过,所以有记录才对。 2.1.3 无单收货,先执行穿件入库记录、 if(ksPutAwayTaskDetailRecords.get(0).getKsInboundOrderId().compareTo(0L)==0) { inboundOrderService.createInboundOrder(ksPutAwayTaskDetailRecords); } 2.1.4 构建上架任务对象 putAwayTaskDTO,此段逻辑有些类似1.1.2.4.1:transformToPutAwayTaskDTOS 2.1.5 创建或更新容器createOrUpdateContainer 2.2 遍历上架任务明细: 2.2.1 根据当前明细的skucode、客户编码、仓库编码、批次属性查询或创建批次并赋值给当前明细 2.2.2 查询子容器并赋值给当前明细 2.3 创建上架任务putAwayTaskService.createPutAwayTask 2.3.1 创建上架任务-》ksPutAwayTaskRepository.save(ksPutAwayTask) 2.3.2 创建上架任务明细-》putAwayTaskDetailService.createPutAwayTaskDetail 2.3.3 库存处理:收货模式上架任务创建即增加库存并锁定,非收货模式由上架任务完成时才增加库存 2.3.4 创建入库单和商家任务关联记录ksPutAwayTaskWithInboundOrderRepository.saveAll(ksPutAwayTaskWithInboundOrders) 2.3.5.更新容器状态 containerService.updateContainerStatus 为”等待上架“ 2.3.6 推送上架任务给ESSputAwayTaskProcessor.beginPutAwayTasks-> essContainerTaskService.createEssContainerTask 保存ess容器搬运任务 2.3.7 保存上架任务(包含了任务明细ids)ksPutAwayTaskRepository.save 2.4 删除容器绑定的记录 putAwayTaskDetailRecordService.removeRecords
1.1.2.1.4:getCustomerByCode根据编码查询货主编码
1.1.2.1.5:builder构建货主不存在异常
【inboundReceiptMode=非收货模式]1.1.2.5:builder构建自动创建上架任务事件
InboundApiService入库api接口服务
1.1.2.1.3:checkState库存为空抛异常
1.1.2.1.7:checkOrderIsDuplicate校验订单是否重复
1.1.2.1.13.2:getContainerSpecByCodeAndType校验容器规格是否存在,不存在抛异常
【inboundReceiptMode=非收货模式]1.1.2.6:publishEvent发布事件
1.1.2.1.1:getWarehouseByCode查询仓库
AutoCreatePutAwayTaskEvent创建上架任务事件
是否可用条件:容器为空或状态为初始化或库位为可用
【inboundReceiptMode=非收货模式]1.1.2.1.14:forEach遍历根据容器分组的入库明细groupByContainerCodeMap
【inboundReceiptMode=非收货模式]1.1.2.1.12:forEach遍历入库单明细并校验批次属性
BatchAttributeConfigService批次配置接口服务
1:createInboundOrder创建入库单
1.1.2.1.14.1:getWarehouseRule获取上架库区规则
Preconditions前置条件检查
1.1.2.1.13.1span style=\"font-size: inherit;\
KsInboundOrder对象
ApplicationEventPublisher事件发布者
非收货模式
1.1.2.4.1:transformToPutAwayTaskDTOS根据id集合查询入库单明细列表
ContainerService容器接口服务
ContainerSpecService容器规格接口服务
【inboundReceiptMode=非收货模式]1.1.2.4:transformToPutAwayTaskDTOS根据入库单+入库单明细转换成上架DTOS
1.1.2.1.6:checkState货主为空抛异常
1.1.1:validate验证InboundOrderDTO
1.1.2:createInboundOrder创建入库单
根据入库单+当前入库明细list 调用上架规则服务得到对应的上架任务库区逻辑区等信息。上架库区规则服务getWarehouseRuleByList逻辑: 1.加载读取在nacos对应配置上iwms-plugin.yml文件里extract.coordinate.config的配置。 2.是否有 putAwayExtractCoordinateDTO这个上架任务扩展点配置。 3.PluginSdkUtils.getPlugin得到对应上架库区插件 4.如果上架库区插件存在,则根据返回的logicCode,不为空则根据逻辑区code查询到逻辑区以及仓库库区并赋值给PutAwayTaskRuleParameter返回,为空则returen则最终容器创建的时候保存的容器扩展属性表记录这两个值为空(WarehouseAreaCode、WarehouseLogicCode) 5.如果插件不存在则根据入库单明细对应的仓库编码查询得到对应的仓库以及根据库区id查询到一个库区和库区id得到逻辑区并初始化PutAwayTaskRuleParameter。
1.1.2.2:createInboundOrder创建入库单
1.1.2.1.12.1:getByCode根据批次code查询批次属性
1.判断当前明细容器号、容器规格、格口(子容器号)是否为空,为空抛异常。2.校验子容器code是否真实存在(findByContainerSpecCodeAndSubContainerCode),不存在抛异常。备注:1.可优化2.入库单没有指定收货模式,则查询货主设置配置的默认收货模式。
1.1.2.1.12.2:forEach遍历批次属性对应规则getBatchAttributeRules
1.1.2.1.9:forEach遍历入库单明细,校验客户编码以及sku或给明细的customerCode赋值:
1.当规则状态为启用且必填且批次属性为空,则抛出异常备注:1.可优化2.groupByCustomerCodeMap当前货主批次属性编码为空结束当前循环
WarehouseService仓库接口服务
InboundDubboServiceImpl入库Dubbo服务提供者
ValidatorUtils自定义参数校验工具
根据customerOrderNo客户订单号或Lpn号对应状态为 New(新单据)或RECEIVING(收货中)的订单是否存在。存在则抛出异常。 备注:这里可以优化合并为一个查询,减少数据库连接以及代码量减半。
void
1.1.2.1.14.2:createOrUpdateContainer创建或修改容器
1.1.2.1.8:checkState校验明细inboundOrderContainerDetailDTOS为空抛异常
1.1:createInboundOrder创建入库单
1.1.2.1.11:getCustomerByCodes查询所有货主编码并分组
1.根据容器编码查询是否存在对应容器2.如果有则修改 2.1: 根据容器编码查询库存List,得到这个容器对应的库存数量(可用库存+锁定库存) 2.2:如果库存数量大于0 则不能修改容器,并抛出异常 2.3:如果库存数量等于0 则查询该容器,将数据库对应的规格与当前dto的规格对比。如果规格不相同,则需要修改子容器。 2.3.1:修改子容器:先删除改容器编码对应的子容器。如果dto里面子容器不为空,则创建子容器createSubContainerByDTOs。 如果为空则按照规格创建子容器。 2.4.保存容器 2.5 创建或修改容器的扩展属性 containerExternalAttributeService.createOrUpdateContainerExternalAttribute 2.6.如果规格修改了,则需要调用ess修改容器类型 essDubboService.createContainer 3.如果无则新增createContainerAndSubContainers 3.1 如果DTO规格编码不为空则按照规格创建容器,以及子容器createSubContainersByContainer 2.2 如果为空则直接创建容器,以及按照传的子容器信息创建子容器createSubContainerByDTOs 2.3 创建容器的扩展属性 2.4 调用ess接口创建容器 , 备注:提出疑问 如果此时成功,但是后续有异常抛出事物回滚,ESs会回滚吗?不一致是否有问题
1.1.2.1:validateInboundOrderDTO校验入库单对象
CustomerService货主接口服务
1.1.2.2.1.1:createInboundOrderContainerDetails创建入库单明细
1.1.2.3:getInboundOrderContainerDetailsByIds根据id集合查询入库单明细列表
Actor调用者
IwmsException自定义异常类
CustomerService货主服务接口
【inboundReceiptMode=非收货模式]1.1.2.1.13:forEach遍历根据容器分组的入库明细groupByContainerCodeMap
【inboundReceiptMode=非收货模式]1.1.2.1.10:forEach遍历入库单明细并校验容器等
0 条评论
下一页