InventoryService.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Service;
  3. use App\Model\InOutRecord;
  4. use App\Model\Inventory;
  5. use Illuminate\Support\Facades\DB;
  6. class InventoryService extends Service
  7. {
  8. public function getList($data){
  9. $model = Inventory::where('')
  10. ->select('*');
  11. $list = $this->limit($model,'',$data);
  12. return [200, $list];
  13. }
  14. //获取卷膜真实库存
  15. public static function getGoodsRealInventy($goods_id, $storehouse_id){
  16. if(empty($roll_film_id) || empty($storehouse_id)) return [];
  17. $array = Inventory::where('storehouse_id',$storehouse_id)
  18. ->whereIn('goods_id',$goods_id)
  19. ->select('goods_id','storehouse_id','number','lock_number')
  20. ->get()->toArray();
  21. if(empty($array)) return [];
  22. $return = [];
  23. foreach ($array as $v){
  24. $return[$v['goods_id'].$v['storehouse_id']] = $v['number'] - $v['lock_number'];
  25. }
  26. return $return;
  27. }
  28. /**
  29. * 业务单据审核后 更新库存
  30. * order_number 订单编号
  31. */
  32. public function changeInventory($data){
  33. $result = InOutRecord::where('del_time',0)
  34. ->where('from_order_number',$data['order_number'])
  35. ->select('storehouse_id',DB::raw("sum(number) as number"),'goods_id')
  36. ->groupby('goods_id','storehouse_id')
  37. ->get()->toArray();
  38. if (empty($result)) return false;
  39. //查询参数拼接
  40. $search_args = '';
  41. foreach ($result as $value){
  42. $search_args .= "(goods_id = '{$value["goods_id"]} and storehouse_id = '{$value["storehouse_id"]}') OR ";
  43. }
  44. $search_args = rtrim($search_args,'OR ');
  45. DB::beginTransaction();
  46. try {
  47. $inventory = Inventory::whereRaw($search_args)
  48. ->select('id','goods_id','number','storehouse_id')
  49. ->sharedLock()
  50. ->get()
  51. ->toArray();
  52. $inventory_map = [];
  53. if(! empty($inventory)){
  54. foreach ($inventory as $value){
  55. $inventory_map[$value['goods_id'] . $value['storehouse_id']]['id'] = $value['id'];
  56. $inventory_map[$value['goods_id'] . $value['storehouse_id']]['number'] = $value['number'];
  57. }
  58. }
  59. foreach ($result as $key => $value){
  60. $keys = $value['goods_id'] . $value['storehouse_id'];
  61. if(! isset($inventory_map[$keys])){
  62. Inventory::insert($result[$key]);
  63. }else{
  64. $array['number'] = $value['number'] + $inventory_map[$keys]['number'];
  65. $array['lock_number'] = $value['lock_number'] - $inventory_map[$keys]['number'];
  66. Inventory::where('id', $inventory_map[$keys]['id'])->update($array);
  67. }
  68. }
  69. DB::commit();
  70. return true;
  71. }catch (\Throwable $exception){
  72. DB::rollBack();
  73. return false;
  74. }
  75. }
  76. }