@hucheng91
2016-12-08T05:58:10.000000Z
字数 4363
阅读 686
页面:下拉框选择仓库,输入外包公司名称,备注
后台数据:javareplenish_order
插入一条数据,javastatus
为待提交,javareplenishType
为闲时补货
掉用javaCustomerMaterialPickingService,getSafeQuantity(warehouseId,lcCode)
方法,这个接口是提供新增时选择仓库对应下需要补货的仓库物料,货主,捡货阀值,物料码盘规则(托或者箱,这个属相主要用于在插入orderItem表quantity字段,quantity的维度是到箱这个层级),伪代码
class addReplenishOrderAndItem(ReplenishOrderDTO replenishOrderDTO){
//获取需要补货的物料
List<CMPickingForReplenishDTO> listQueryResult = customerMaterialPickingService.getSafeQuantity(customerMaterialPickingDTO);
for(CMPickingForReplenishDTO mk : listQueryResult ){
ReplenishOrderItem item = new ReplenishOrderItem();
BeanUtils.copyProperties(itemDTO, item);
//根据码盘规则确认库存量
int locationStock = getQuantity(mk);
if(mk.getPickingQuantity() <= locationStock){
continue;
}
//补货阀值 - 目前库存量,需要补货的量
item.setQuantity(mk.getPickingQuantity() - locationStock);
replenishOrderItemDao.add(item);
}
private int getQuantity(CMPickingForReplenishDTO cMPickingForReplenishDTO){
int plateCount = StringUtils.isEmpty(cMPickingForReplenishDTO.getPlateCount())?1 :cMPickingForReplenishDTO.getPlateCount();
int reult = 0;
//按箱补
if(regionReplenishMode.equals(RegionReplenishModeEnum.BOX)){
List<LocationStock> list = locationStockDao.findPageList();
for (LocationStock stock : list){
if (!StringUtils.isEmpty(stock.getTotalQuantity()))
reult = reult + stock.getTotalQuantity();
}
}else {
//托
List<TrayStock> list = trayStockDao.findPageList();
for (TrayStock stock : list){
if (!StringUtils.isEmpty(stock.getQuantity()))
reult = reult + stock.getQuantity();
}
reult = reult * plateCount;
}
return reult;
}
}
在循环插入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关联,作用是记录物料的操作流水,类似物料从哪里搬,到哪里去
输入仓库,库区,物料,货主,批次,点击查询后才可以点击完成质检按钮,(这个是为了保证后台在释放仓库库存的时候,确保库存是是同一货主,同一物料,同一仓库)
首先根据选择的前台勾选的库位库存ID,和物流中心代码,查询库位库存,数据库返回list,循环list,将lockQuailty(锁定基本数量),minLockQuality(最小锁定基本单位数量)相加统计,伪代码如下
class relatedWorkhouseStock(List<Long>ids,String lc code)}{
LocationStock locationStock = new LocationStock();
LocationStockQuery query = new LocationStockQuery();
StockReleaseDTO stockReleaseDTO = new StockReleaseDTO();
UpdateWarehouseStockDTO updateWarehouseStockDTO = new UpdateWarehouseStockDTO();
List<UpdateWarehouseStockDTO> warehouseStockList = new ArrayList<UpdateWarehouseStockDTO>();
Integer quantity = 0;
Integer minQuantity = 0;
query.setLcCode(lcCode);
List<LocationStock> locationStockList = locationStockDao.getListByIds(idList, query);
if(null ==locationStockList|| locationStockList.isEmpty()){
return false;
}
locationStock = locationStockList.get(0);
for(LocationStock locationStock1 : locationStockList){
quantity = quantity + locationStock1.getLockQuantity();
minQuantity = minQuantity + locationStock1.getMinLockQuantity();
}
updateWarehouseStockDTO.setLcCode(lcCode);
updateWarehouseStockDTO.setShipperCode(locationStock.getShipperCode());
updateWarehouseStockDTO.setWarehouseId(locationStock.getWarehouseId());
updateWarehouseStockDTO.setMcode(locationStock.getMcode());
updateWarehouseStockDTO.setSpec(locationStock.getSpec());
updateWarehouseStockDTO.setQuantity(quantity);
updateWarehouseStockDTO.setMinQuantity(minQuantity);
warehouseStockList.add(updateWarehouseStockDTO);
stockReleaseDTO.setWarehouseStockList(warehouseStockList);
stockReleaseDTO.setUpdateTime(new Date());
houseStockExportService.batchReleaseStock(stockReleaseDTO);
}
库存释放后,批量更改ids对应质检状态,同时修改,对应托盘库存质检状态,
前台页面
order头信息,仓库,物料,货主,类型,外包公司名称,备注填完不可更改
fromSourceItem (物料来源信息),选择物料,根据物料代码查询库位库存,如果没有,弹出(该货主,这个物料下没有库存),有的话,返回一个list,这个list批次信息是不一样的,货主,物料,仓库都是一样,选择批次,根据批次就确认了库位1库存的id,将这个id对应信息,插入orderItem,productType为来源物料;
生成物料信息:
选择物料,输入相应信息,插入orderItem,productType为生成物料;
将order状态改为待加工,ordr信息不可修改
查询orderoperate表,如果没有操作明细,不让开始加工,有操作明细,将order状态更新为加工中,同时锁定库位库存,锁定的库位库存信息来源于orderItem(来源,生成都锁定)。
减去来源物料库存,新增生成物料库存,然后释放库存
删除item,operate,释放锁定库存