12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- <?php
- namespace 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;
- }
- }
- }
|