| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | <?phpnamespace App\Service;use App\Model\InOutRecord;use App\Model\Inventory;use Illuminate\Support\Facades\DB;class InventoryService extends Service{    public function getList($data){        $model = Inventory::where('')            ->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;        }    }}
 |