InventoryController.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Inventory;
  4. use App\Models\Order;
  5. use App\Models\GoodsSku;
  6. use App\Models\GoodsSpec;
  7. use App\Models\GoodsSkuPrice;
  8. use App\Models\Goodtest;
  9. use App\Models\GoodsLog;
  10. use Carbon\Carbon;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Facades\Auth;
  13. use Illuminate\Support\Facades\Cache;
  14. use Illuminate\Support\Facades\DB;
  15. use Illuminate\Support\Facades\Validator;
  16. use Illuminate\Database\Eloquent\Builder;
  17. class InventoryController extends Controller
  18. {
  19. //商品库存
  20. public function getGoodsInventory(Request $request){
  21. $input=$request->all();
  22. $page_size=$input['page_size'];
  23. $page_index=$input['page_index'];
  24. $num = ($page_index - 1) * $page_size;
  25. $search_name=$input['search_name'];
  26. $status=$input['status'];
  27. $where=[];
  28. if ($status==1){
  29. $where=function ($query){
  30. $query->whereIn('is_show',[2,3]);
  31. };
  32. }elseif($status==-1){
  33. $where=[];
  34. }elseif($status==0){
  35. $where['is_show']=1;
  36. }elseif($status==2){
  37. $where['is_show']=4;
  38. }
  39. $data=Goodtest::where($where)->where('is_deleted',0);
  40. if($search_name){
  41. $data->where('name','like','%'.$search_name.'%');
  42. }
  43. $count=$data->count();
  44. if($count==0){
  45. $this->error('450001','没有数据');
  46. }
  47. $list=$data->skip($num)->take($page_size)
  48. ->get();
  49. return $this->success_list($list,'success',$count);
  50. }
  51. public function exportGoodsInventory(Request $request){
  52. $input=$request->all();
  53. $search_name=$input['search_name'];
  54. $status=$input['status'];
  55. $where=[];
  56. if ($status==1){
  57. $where=function ($query){
  58. $query->whereIn('is_show',[2,3]);
  59. };
  60. }elseif($status==-1){
  61. $where=[];
  62. }elseif($status==0){
  63. $where['is_show']=1;
  64. }elseif($status==2){
  65. $where['is_show']=4;
  66. }
  67. $data=Goodtest::where($where)->where('is_deleted',0);
  68. if($search_name){
  69. $data->where('name','like','%'.$search_name.'%');
  70. }
  71. $count=$data->count();
  72. if($count==0){
  73. $this->error('450001','没有数据');
  74. }
  75. $list=$data->get();
  76. return $this->success_list($list,'success',$count);
  77. }
  78. public function importGoodsInventory(Request $request){
  79. $input=$request->all();
  80. $data=$input['data'];
  81. DB::beginTransaction();
  82. try{
  83. foreach($data as $key => $val){
  84. if(empty($val['商品id'])){
  85. return $this->error('450001','第'.($key+2).'行附近,商品id不能为空');
  86. }
  87. if(empty($val['商品名称'])){
  88. return $this->error('450001','第'.($key+2).'行附近,商品名称不能为空');
  89. }
  90. if(empty($val['款式'])){
  91. return $this->error('450001','第'.($key+2).'行附近,款式不能为空');
  92. }
  93. if(empty($val['总库存']) && $val['总库存']!=0){
  94. return $this->error('450001','第'.($key+2).'行附近,总库存不能为空');
  95. }
  96. if(!is_numeric($val['总库存'])){
  97. return $this->error('450001','第'.($key+2).'行附近,总库存数据类型有误');
  98. }
  99. $storage=Goodtest::where('id',$val['商品id'])->lockForUpdate()->first();
  100. if (!Cache::has('dwbs_good_num'.$storage->id)){
  101. $num=$val['总库存'];
  102. Cache::remember('dwbs_good_num'.$storage->id,Carbon::now()->addDays(5),function ()use ($num){
  103. return $num;
  104. });
  105. }
  106. if($storage->storage!=$val['总库存']){
  107. $storage->storage=$val['总库存'];
  108. $storage->save();
  109. GoodsLog::create([
  110. 'admin_id'=> Auth::user()->id,
  111. 'admin_name'=>Auth::user()->name,
  112. 'goods_id'=>$val['商品id'],
  113. 'type'=>1,//修改库存
  114. 'name' => $val['商品名称'],
  115. 'text'=>'管理员:'.Auth::user()->name.',修改商品:'.$val['商品名称'].'('.$val['款式'].')库存,修改前库存:'.$storage.',修改后库存:'.$val['总库存']
  116. ]);
  117. }
  118. }
  119. DB::commit();
  120. return $this->success([]);
  121. }catch (\Exception $e){
  122. DB::rollback();
  123. return $e->getMessage();
  124. return $this->error();
  125. }
  126. }
  127. public function updateGoodsInventory(Request $request){
  128. $input=$request->all();
  129. $ids=$input['ids'];
  130. $num=$input['num'];
  131. $rules=[
  132. 'ids'=>'required|array',
  133. 'num'=>'required|numeric',
  134. ];
  135. $messages=[
  136. 'ids.required'=>'商品id不能为空.',
  137. 'ids.array'=>'商品id需为数组.',
  138. 'num.required'=>'库存数量不能为空.',
  139. 'num.numeric'=>'库存数量格式有误.',
  140. ];
  141. $validator = Validator::make($input, $rules, $messages);
  142. if($validator->fails()){
  143. return $this->error('400013',$validator->errors()->first());
  144. }
  145. foreach($ids as $key=>$val){
  146. DB::beginTransaction();
  147. try{
  148. $goods=Goodtest::where('id',$val)->lockForUpdate()->first();
  149. $count=$goods->storage;
  150. $goods->storage+=$num;
  151. GoodsLog::create([
  152. 'admin_id'=> Auth::user()->id,
  153. 'admin_name'=>Auth::user()->name,
  154. 'goods_id'=>$val,
  155. 'type'=>1,//修改库存
  156. 'name' => $goods->name,
  157. 'text'=>'管理员:'.Auth::user()->name.',修改商品:'.$goods->name.'('.$goods->size.')库存,修改前库存:'.$count.',修改后库存:'.$goods->storage
  158. ]);
  159. $goods->save();
  160. DB::commit();
  161. if (!Cache::has('dwbs_good_num'.$val)){
  162. $nums=$goods->storage;
  163. Cache::remember('dwbs_good_num'.$val,Carbon::now()->addDays(5),function ()use ($nums){
  164. return $nums;
  165. });
  166. }else{
  167. Cache::increment('dwbs_good_num'.$val,$num);
  168. }
  169. }catch (\Exception $exception){
  170. DB::rollBack();
  171. }
  172. }
  173. return $this->success([]);
  174. }
  175. public function getGoodsInventoryLog(Request $request){
  176. $input=$request->all();
  177. $id=$input['id'];
  178. $list=GoodsLog::where('goods_id',$id)->where('type',1)->orderBy('id','desc')->get();
  179. if(count($list)<=0){
  180. $this->error('450001','没有数据');
  181. }
  182. return $this->success($list);
  183. }
  184. //获取商品规格数据
  185. public function getSku($id){
  186. $path=GoodsSku::withTrashed()->find($id)->sku_path;
  187. $arr=explode('/',$path);
  188. $goodsSku=[];
  189. foreach($arr as $k=>$v){
  190. $upSpec=GoodsSpec::withTrashed()->where('id',$v)->first();
  191. $upSpec['uptitle']=GoodsSpec::withTrashed()->where('id',$upSpec->pid)->value('title');
  192. $goodsSku[$upSpec['uptitle']]=$upSpec->title;
  193. }
  194. return $goodsSku;
  195. }
  196. //皇冠库存
  197. public function getCrownInventoryInfo(Request $request){
  198. $input=$request->all();
  199. $page_size=$input['page_size'];
  200. $page_index=$input['page_index'];
  201. $num = ($page_index - 1) * $page_size;
  202. $search_name=$input['search_name'];
  203. $where=[];
  204. $ll=Inventory::with('user:id,nickname,mobile')
  205. ->whereHas('user',function ($query) {
  206. $query->where('level', 3);
  207. })
  208. ->whereHas('user', function (Builder $query) use ($search_name) {
  209. $query->where('nickname', 'like', '%' . $search_name . '%');
  210. $query->orwhere('mobile', 'like', '%' . $search_name . '%');
  211. })
  212. ->where($where)
  213. ->groupBy('user_id','goods_id')
  214. ->get();
  215. if($ll){
  216. $count=sizeof($ll);
  217. }else{
  218. $this->error('400001','没有数据');
  219. }
  220. $list=Inventory::with('user:id,nickname,mobile','goods:id,name')
  221. ->whereHas('user',function ($query) {
  222. $query->where('level', 3);
  223. })
  224. ->whereHas('user', function (Builder $query) use ($search_name) {
  225. $query->where('nickname', 'like', '%' . $search_name . '%');
  226. $query->orwhere('mobile', 'like', '%' . $search_name . '%');
  227. })
  228. ->select('user_id','goods_id')
  229. ->where($where)
  230. ->groupBy('user_id','goods_id')
  231. ->orderBy('user_id','desc')
  232. ->orderBy('goods_id','desc')
  233. ->skip($num)->take($page_size)
  234. ->get();
  235. if(empty($list)){
  236. return $this->error('400002','没有获取到数据');
  237. }
  238. foreach($list as $key=>$val){
  239. $sku= Inventory::where('goods_id',$val['goods_id'])->where('user_id',$val['user_id'])->select('sku_id','total')->get();
  240. foreach($sku as $k=>$v){
  241. $price=GoodsSkuPrice::withTrashed()->where('goods_id',$val['goods_id'])->where('sku_id',$v->sku_id)->where('user_level','3')->value('price');
  242. $sku[$k]->price=$price?$price:0;
  243. $sku[$k]->style=$this->getSku($v->sku_id);
  244. }
  245. $list[$key]->style=$sku;
  246. }
  247. return $this->success_list($list,'success',$count);
  248. }
  249. public function Add(){
  250. // Cache::rememberForever('ddd',function (){
  251. // return 12;
  252. // });
  253. dd(Cache::get('ddd'));
  254. }
  255. }