RewardController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Rewards;
  4. use App\Models\System;
  5. use App\Models\Store;
  6. use App\Models\Goods;
  7. use App\Models\GoodsSku;
  8. use App\Models\GoodsSpec;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\DB;
  11. use Illuminate\Support\Facades\Log;
  12. use Illuminate\Support\Facades\Auth;
  13. use Illuminate\Database\Eloquent\Builder;
  14. use \Exception;
  15. class RewardController extends Controller
  16. {
  17. public function getRewardList(Request $request){
  18. $input=$request->all();
  19. $page_size=$input['page_size'];
  20. $page_index=$input['page_index'];
  21. $num = ($page_index - 1) * $page_size;
  22. $search_name=$input['search_name'];
  23. $where=[];
  24. $where['type']=$input['type'];
  25. $count=Rewards::with('recom:id,realname','agent:id,realname')
  26. ->where($where)
  27. ->count();
  28. if($count==0){
  29. $this->error('400001','没有数据');
  30. }
  31. $list=Rewards::with('recom:id,realname','agent:id,realname')
  32. ->where($where)
  33. ->orderBy('id','desc')
  34. ->skip($num)->take($page_size)
  35. ->get();
  36. if(empty($list)){
  37. return $this->error('400002','没有获取到数据');
  38. }
  39. return $this->success_list($list,'success',$count);
  40. }
  41. //代理业绩奖励结算
  42. public function uploadAgentSalesResult(Request $request){
  43. $input=$request->all();
  44. $userId=$input['userids'];
  45. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  46. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  47. $time = [$starttime, $endtime];
  48. $sales_area_reward_str=System::where('keys','sales_area_reward')->value('values');
  49. $sales_area_reward_arr=explode('/',$sales_area_reward_str);
  50. foreach($sales_area_reward_arr as $key =>$val){
  51. $sales_area_reward[$key]=explode('*',$val);
  52. }
  53. $result = array();
  54. foreach($sales_area_reward as $k=>$v){
  55. $result[$k] = $v[0];
  56. }
  57. $minValue=min($result);
  58. DB::beginTransaction();
  59. try {
  60. foreach($userId as $key=>$val){
  61. $rewards=Rewards::where('recom_id',$val)->where('type',2)->where('month',$input['time'])->first();
  62. if($rewards){
  63. DB::rollBack();
  64. return $this->error('400111','用户id=>'.$val.'当月已结算');
  65. }
  66. $list=DB::table('users')
  67. ->select('users.id','users.nickname','users.level','warea.name as warea','uu.nickname as agent',DB::raw('SUM(order_goods.totalprice) as account'))
  68. ->leftJoin('order','order.user_id','=','users.id')
  69. ->leftJoin('order_goods','order.id','=','order_goods.order_id')
  70. ->leftJoin('warea','warea.id','=','users.warea_id')
  71. ->leftJoin('users as uu','uu.id','=','users.agent_id')
  72. ->where('order.status',2)
  73. ->where('users.id',$val)
  74. ->whereBetween('order.created_at',$time)
  75. ->get()->toArray();
  76. if($list){
  77. $list[0]->rewards=0;
  78. foreach($sales_area_reward as $k=>$v){
  79. if($list[0]->account>=$v[0] && $list[0]->account<$v[1]){
  80. $list[0]->rewards=round($list[0]->account*$v[2]/100,2);
  81. }
  82. }
  83. if($list[0]->rewards>0){
  84. $data['agent_id']=1;
  85. $data['recom_id']=$list[0]->id;
  86. $data['type']=2;
  87. $data['bonus']=$list[0]->rewards;
  88. $data['spec']='1';
  89. $data['totalprice']=$list[0]->account;
  90. $data['month']=$input['time'];
  91. Rewards::create($data);
  92. }else{
  93. DB::rollBack();
  94. return $this->error('400111','用户'.$list[0]->nickname.'结算失败');
  95. }
  96. }else{
  97. DB::rollBack();
  98. return $this->error('400111','用户结算失败');
  99. }
  100. }
  101. DB::commit();
  102. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')结算代理业绩奖励,代理id:'.json_encode($input['userids']));
  103. return $this->success([]);
  104. }catch(Exception $e){
  105. DB::rollBack();
  106. return $this->error();
  107. }
  108. }
  109. //门店业绩奖励结算钱
  110. public function uploadAgentSalesResultMoney(Request $request){
  111. $input=$request->all();
  112. $storeId=$input['storeids'];
  113. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  114. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  115. $time = [$starttime, $endtime];
  116. $type=$input['type'];
  117. if($type==2){
  118. $rate=System::where('keys','store_reward_money_enjoy')->value('values');
  119. }elseif($type==3){
  120. $rate=System::where('keys','store_reward_money_experience')->value('values');
  121. }
  122. $rates=explode('/',$rate);
  123. DB::beginTransaction();
  124. try {
  125. foreach($storeId as $key=>$val){
  126. $list=DB::table('store')->where('id',$val)->get();
  127. $list[0]->account=0;
  128. $rewards=Rewards::where('recom_id',$list[0]->man_id)->where('type',3)->where('month',$input['time'])->first();
  129. if($rewards){
  130. DB::rollBack();
  131. return $this->error('400111','门店'.$list[0]->name.'当月已结算');
  132. }
  133. $info=DB::table('store')
  134. ->select('goods.type','goods.name', DB::raw('SUM(order_goods.num) as total'))
  135. ->leftJoin('users', function ($join) {
  136. $join->on('users.store_id', '=', 'store.id');
  137. })
  138. ->leftJoin('order', 'order.user_id', '=', 'users.id')
  139. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  140. ->Join('goods', 'goods.id', '=', 'order_goods.goods_id')
  141. ->where('store.id',$val)
  142. ->where('order.status', 2)
  143. ->whereBetween('order.created_at',$time)
  144. ->groupBy('goods.type')
  145. ->get();
  146. if(!$info){
  147. DB::rollBack();
  148. return $this->error('400111','门店奖励结算失败');
  149. }
  150. foreach($info as $k =>$v){
  151. if($v->type==1){
  152. $info[$k]->price=$rates[0];
  153. $info[$k]->totalprice=$v->total*$rates[0];
  154. $list[0]->account+=$v->total*$rates[0];
  155. }
  156. if($v->type==2){
  157. $info[$k]->price=$rates[1];
  158. $info[$k]->totalprice=$v->total*$rates[1];
  159. $list[0]->account+=$v->total*$rates[1];
  160. }
  161. if($v->type==3){
  162. $info[$k]->price=$rates[2];
  163. $info[$k]->totalprice=$v->total*$rates[2];
  164. $list[0]->account+=$v->total*$rates[2];
  165. }
  166. }
  167. $list[0]->info=$info;
  168. if(!$list[0]->account){
  169. DB::rollBack();
  170. return $this->error('400111','门店'.$list[0]->name.'奖励结算失败');
  171. }
  172. $data['agent_id']=1;
  173. $data['recom_id']=$list[0]->man_id;
  174. $data['store_id']=$list[0]->id;
  175. $data['type']=3;
  176. $data['bonus']=$list[0]->account;
  177. $data['spec']='1';
  178. $data['totalprice']='';
  179. $data['month']=$input['time'];
  180. Rewards::create($data);
  181. }
  182. DB::commit();
  183. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')结算门店业绩奖励,代理id:'.json_encode($input['storeids']));
  184. return $this->success([]);
  185. }catch(Exception $e){
  186. DB::rollBack();
  187. return $this->error();
  188. }
  189. }
  190. //门店业绩奖励 物
  191. public function uploadAgentSalesResultGoods(Request $request){
  192. $input=$request->all();
  193. $storeId=$input['storeids'];
  194. $starttime=date("Y-m-01 00:00:00",strtotime($input['time']));
  195. $endtime= date("Y-m-01 00:00:00",strtotime($input['time'] ."+1 months"));
  196. $time = [$starttime, $endtime];
  197. // $goodsInfo=$input['goodsinfo'];
  198. $type=$input['type'];
  199. if($type==1){
  200. $rate=System::where('keys','store_reward_goods_job')->value('values');
  201. }elseif($type==2){
  202. $rate=System::where('keys','store_reward_goods_enjoy')->value('values');
  203. }
  204. DB::beginTransaction();
  205. try {
  206. foreach($storeId as $key=>$val){
  207. $list=DB::table('store')
  208. ->select('store.name','store.man_id','store.id', DB::raw('SUM(order_goods.totalprice) as account'))
  209. ->leftJoin('users', function ($join) {
  210. $join->on('users.store_id', '=', 'store.id');
  211. })
  212. ->leftJoin('order', 'order.user_id', '=', 'users.id')
  213. ->leftJoin('order_goods', 'order.id', '=', 'order_goods.order_id')
  214. ->where('store.id',$val)
  215. ->where('order.status', 2)
  216. ->whereBetween('order.created_at',$time)
  217. ->groupBy('store.id')
  218. ->get();
  219. if(!$list){
  220. DB::rollBack();
  221. return $this->error('400111','门店奖励结算失败');
  222. }
  223. $rewards=Rewards::where('recom_id',$list[0]->man_id)->where('type',3)->where('month',$input['time'])->first();
  224. if($rewards){
  225. DB::rollBack();
  226. return $this->error('400111','门店'.$list[0]->name.'当月已结算');
  227. }
  228. foreach($list as $key =>$val){
  229. $list[$key]->rewards=round($val->account*$rate/100,2);
  230. }
  231. if(!$list[0]->rewards){
  232. DB::rollBack();
  233. return $this->error('400111','门店'.$list[0]->name.'奖励结算失败');
  234. }
  235. $data['agent_id']=1;
  236. $data['recom_id']=$list[0]->man_id;
  237. $data['store_id']=$list[0]->id;
  238. $data['type']=3;
  239. $data['bonus']='';
  240. $data['spec']='2';
  241. $data['totalprice']=$list[0]->account;
  242. $data['goods_id']=$input['goods_id'];
  243. $data['goods_price']=$input['goods_price'];
  244. $data['goods_num']=$input['goods_num'];
  245. $data['month']=$input['time'];
  246. $row=Rewards::create($data);
  247. // foreach($goodsInfo as $k=>$v){
  248. // $dd['reward_id']=$row;
  249. // $dd['goods_id']=$v['id'];
  250. // $dd['sku_id']=$v['sku_id'];
  251. // $dd['price']=$v['price'];
  252. // $dd['num']=$v['num'];
  253. // $dd['totalprice']=$v['price']*$v['num'];
  254. // OrderGoods::create($dd);
  255. // }
  256. }
  257. DB::commit();
  258. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')结算门店业绩奖励,代理id:'.json_encode($input['storeids']));
  259. return $this->success([]);
  260. }catch(Exception $e){
  261. DB::rollBack();
  262. return $this->error();
  263. }
  264. }
  265. public function getRewardGoodsList(){
  266. $list = Goods::where('status',1)->select('id','name','type','tjprice','total')->get();
  267. if(!$list){
  268. return $this->error('400133','没有可用商品信息');
  269. }
  270. foreach($list as $key=>$val){
  271. $sku=GoodsSku::where('goods_id',$val->id)->where('is_show',1)->select('id','sku_path')->get();
  272. foreach($sku as $k=>$v){
  273. $sku[$k]->info=$this->getSku($v->id);
  274. }
  275. $list[$key]->sku=$sku;
  276. }
  277. return $this->success($list);
  278. }
  279. //获取商品规格数据
  280. public function getSku($id){
  281. $path=GoodsSku::withTrashed()->find($id)->sku_path;
  282. $arr=explode('/',$path);
  283. $goodsSku=[];
  284. foreach($arr as $k=>$v){
  285. $upSpec=GoodsSpec::withTrashed()->where('id',$v)->first();
  286. $upSpec['uptitle']=GoodsSpec::where('id',$upSpec->pid)->value('title');
  287. $goodsSku[$upSpec['uptitle']]=$upSpec->title;
  288. }
  289. return $goodsSku;
  290. }
  291. }