select('*'); $list = $this->limit($model,'',$data); return [200, $list]; } //获取卷膜真实库存 public static function getGoodsRealInventy($goods_id, $storehouse_id){ if(empty($roll_film_id) || empty($storehouse_id)) return []; $array = Inventory::where('storehouse_id',$storehouse_id) ->whereIn('goods_id',$goods_id) ->select('goods_id','storehouse_id','number','lock_number') ->get()->toArray(); if(empty($array)) return []; $return = []; foreach ($array as $v){ $return[$v['goods_id'].$v['storehouse_id']] = $v['number'] - $v['lock_number']; } return $return; } /** * 业务单据审核后 更新库存 * order_number 订单编号 */ public function changeInventory($data){ $result = InOutRecord::where('del_time',0) ->where('from_order_number',$data['order_number']) ->select('storehouse_id',DB::raw("sum(number) as number"),'goods_id') ->groupby('goods_id','storehouse_id') ->get()->toArray(); if (empty($result)) return false; //查询参数拼接 $search_args = ''; foreach ($result as $value){ $search_args .= "(goods_id = '{$value["goods_id"]} and storehouse_id = '{$value["storehouse_id"]}') OR "; } $search_args = rtrim($search_args,'OR '); DB::beginTransaction(); try { $inventory = Inventory::whereRaw($search_args) ->select('id','goods_id','number','storehouse_id') ->sharedLock() ->get() ->toArray(); $inventory_map = []; if(! empty($inventory)){ foreach ($inventory as $value){ $inventory_map[$value['goods_id'] . $value['storehouse_id']]['id'] = $value['id']; $inventory_map[$value['goods_id'] . $value['storehouse_id']]['number'] = $value['number']; } } foreach ($result as $key => $value){ $keys = $value['goods_id'] . $value['storehouse_id']; if(! isset($inventory_map[$keys])){ Inventory::insert($result[$key]); }else{ $array['number'] = $value['number'] + $inventory_map[$keys]['number']; $array['lock_number'] = $value['lock_number'] - $inventory_map[$keys]['number']; Inventory::where('id', $inventory_map[$keys]['id'])->update($array); } } DB::commit(); return true; }catch (\Throwable $exception){ DB::rollBack(); return false; } } }