InventoryController.php 8.6 KB

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