[关闭]
@hucheng91 2016-12-08T05:58:10.000000Z 字数 4363 阅读 686

补货

新增

页面:下拉框选择仓库,输入外包公司名称,备注
后台数据:javareplenish_order插入一条数据,javastatus为待提交,javareplenishType为闲时补货

提交,将order状态改为待补货,ordr信息不可修改

页面,list页面点击提交按钮

后台数据:

  1. 往orderIdem插入信息
  2. 往replenish_recommend推荐表插入信息(目的是存储orderIdem中物料,货主,仓库id,对应存储区的物料,用补货时候,来源物料)
  3. 修改order状态(更新为待补货)

往orderIdem插入信息:

掉用javaCustomerMaterialPickingService,getSafeQuantity(warehouseId,lcCode)方法,这个接口是提供新增时选择仓库对应下需要补货的仓库物料,货主,捡货阀值,物料码盘规则(托或者箱,这个属相主要用于在插入orderItem表quantity字段,quantity的维度是到箱这个层级),伪代码

  1. class addReplenishOrderAndItem(ReplenishOrderDTO replenishOrderDTO){
  2. //获取需要补货的物料
  3. List<CMPickingForReplenishDTO> listQueryResult = customerMaterialPickingService.getSafeQuantity(customerMaterialPickingDTO);
  4. for(CMPickingForReplenishDTO mk : listQueryResult ){
  5. ReplenishOrderItem item = new ReplenishOrderItem();
  6. BeanUtils.copyProperties(itemDTO, item);
  7. //根据码盘规则确认库存量
  8. int locationStock = getQuantity(mk);
  9. if(mk.getPickingQuantity() <= locationStock){
  10. continue;
  11. }
  12. //补货阀值 - 目前库存量,需要补货的量
  13. item.setQuantity(mk.getPickingQuantity() - locationStock);
  14. replenishOrderItemDao.add(item);
  15. }
  16. private int getQuantity(CMPickingForReplenishDTO cMPickingForReplenishDTO){
  17. int plateCount = StringUtils.isEmpty(cMPickingForReplenishDTO.getPlateCount())?1 :cMPickingForReplenishDTO.getPlateCount();
  18. int reult = 0;
  19. //按箱补
  20. if(regionReplenishMode.equals(RegionReplenishModeEnum.BOX)){
  21. List<LocationStock> list = locationStockDao.findPageList();
  22. for (LocationStock stock : list){
  23. if (!StringUtils.isEmpty(stock.getTotalQuantity()))
  24. reult = reult + stock.getTotalQuantity();
  25. }
  26. }else {
  27. //托
  28. List<TrayStock> list = trayStockDao.findPageList();
  29. for (TrayStock stock : list){
  30. if (!StringUtils.isEmpty(stock.getQuantity()))
  31. reult = reult + stock.getQuantity();
  32. }
  33. reult = reult * plateCount;
  34. }
  35. return reult;
  36. }
  37. }

往replenish_recommend推荐表插入信息:

在循环插入orderItem信息时,同时插入replenish_recommend信息,这样replenish_recommend和orderItem关联起来,replenish_recommend的lcCode,mcode,WarehouseId,ShipperCode,都来源于item,根据replenish_recommend信息查询库位库存表里品相合格,质检状态不为未质检的,返回一个list,*取到到list里面库区id集合List slIds,对slIds去重,接着去根据slIds剔除掉当前库位库存所在库区不在存储区的,返回recommendLocationStockList;,将recommendLocationStockList插入replenish_recommend表

开始补货

查询orderoperate表,如果没有操作明细,不让开始补货,有操作明细,将order状态更新为补货中,将操作表物料1数量统计求和。回填orderItem的realquantity(实际库存物料数量)

完成补货

将order状态更新为补货完成,更新order状态,同时执行库位,托盘转储

作废

order状态为待提交的可以执行作废操作,删除order,orderItem,物理删除

维护补货单明细

操作orderOperate表,这个表和orderItem关联,作用是记录物料的操作流水,类似物料从哪里搬,到哪里去


质检

list页面,查询库位库位库存表质检状态为未质检的数据,

完成质检(释放仓库库存,更改库位库存质检状态,更改对应托盘库存质检状态)

前端

输入仓库,库区,物料,货主,批次,点击查询后才可以点击完成质检按钮,(这个是为了保证后台在释放仓库库存的时候,确保库存是是同一货主,同一物料,同一仓库)

后端数据走向

首先根据选择的前台勾选的库位库存ID,和物流中心代码,查询库位库存,数据库返回list,循环list,将lockQuailty(锁定基本数量),minLockQuality(最小锁定基本单位数量)相加统计,伪代码如下

  1. class relatedWorkhouseStock(List<Long>ids,String lc code)}{
  2. LocationStock locationStock = new LocationStock();
  3. LocationStockQuery query = new LocationStockQuery();
  4. StockReleaseDTO stockReleaseDTO = new StockReleaseDTO();
  5. UpdateWarehouseStockDTO updateWarehouseStockDTO = new UpdateWarehouseStockDTO();
  6. List<UpdateWarehouseStockDTO> warehouseStockList = new ArrayList<UpdateWarehouseStockDTO>();
  7. Integer quantity = 0;
  8. Integer minQuantity = 0;
  9. query.setLcCode(lcCode);
  10. List<LocationStock> locationStockList = locationStockDao.getListByIds(idList, query);
  11. if(null ==locationStockList|| locationStockList.isEmpty()){
  12. return false;
  13. }
  14. locationStock = locationStockList.get(0);
  15. for(LocationStock locationStock1 : locationStockList){
  16. quantity = quantity + locationStock1.getLockQuantity();
  17. minQuantity = minQuantity + locationStock1.getMinLockQuantity();
  18. }
  19. updateWarehouseStockDTO.setLcCode(lcCode);
  20. updateWarehouseStockDTO.setShipperCode(locationStock.getShipperCode());
  21. updateWarehouseStockDTO.setWarehouseId(locationStock.getWarehouseId());
  22. updateWarehouseStockDTO.setMcode(locationStock.getMcode());
  23. updateWarehouseStockDTO.setSpec(locationStock.getSpec());
  24. updateWarehouseStockDTO.setQuantity(quantity);
  25. updateWarehouseStockDTO.setMinQuantity(minQuantity);
  26. warehouseStockList.add(updateWarehouseStockDTO);
  27. stockReleaseDTO.setWarehouseStockList(warehouseStockList);
  28. stockReleaseDTO.setUpdateTime(new Date());
  29. houseStockExportService.batchReleaseStock(stockReleaseDTO);

库存释放后,批量更改ids对应质检状态,同时修改,对应托盘库存质检状态,


二次加工

添加

前台页面
order头信息,仓库,物料,货主,类型,外包公司名称,备注填完不可更改
fromSourceItem (物料来源信息),选择物料,根据物料代码查询库位库存,如果没有,弹出(该货主,这个物料下没有库存),有的话,返回一个list,这个list批次信息是不一样的,货主,物料,仓库都是一样,选择批次,根据批次就确认了库位1库存的id,将这个id对应信息,插入orderItem,productType为来源物料;
生成物料信息:
选择物料,输入相应信息,插入orderItem,productType为生成物料;

提交

将order状态改为待加工,ordr信息不可修改

开始加工

查询orderoperate表,如果没有操作明细,不让开始加工,有操作明细,将order状态更新为加工中,同时锁定库位库存,锁定的库位库存信息来源于orderItem(来源,生成都锁定)。

完成加工

减去来源物料库存,新增生成物料库存,然后释放库存

作废

删除item,operate,释放锁定库存

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注