StoreController.php 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832
  1. <?php
  2. namespace Modules\Manager\Http\Controllers;
  3. use App\Handlers\UploadFilesHandler;
  4. use App\Models\ExpStoreAgent;
  5. use App\Models\Orderdetail;
  6. use App\Models\Ordertest;
  7. use App\Models\Store;
  8. use App\Models\StoreRewardInfo;
  9. use App\Models\StoreRewards;
  10. use App\Models\StoreRewardSet;
  11. use App\Models\User;
  12. use App\Models\StoreUser;
  13. //use App\Exports\ExportStoreSubsidies;
  14. use Carbon\Carbon;
  15. use Illuminate\Http\Request;
  16. use Illuminate\Validation\Rule;
  17. use Illuminate\Support\Facades\DB;
  18. use Illuminate\Support\Facades\Log;
  19. use Illuminate\Support\Facades\Auth;
  20. use Illuminate\Support\Facades\Validator;
  21. use \Exception;
  22. use Excel;
  23. use App\Imports\ReportImport;
  24. class StoreController extends Controller
  25. {
  26. //获取门店列表
  27. public function getStoreList(Request $request){
  28. $input=$request->all();
  29. $page_size=$input['page_size'];
  30. $page_index=$input['page_index'];
  31. $num = ($page_index - 1) * $page_size;
  32. $search_name=$input['search_name'];
  33. $type=$input['type'];
  34. // $search_name='';
  35. // $type='';
  36. $where=[];
  37. $data=Store::where($where);
  38. if($type){
  39. $data->where('type',$type);
  40. }
  41. if($search_name){
  42. $data->where('name', 'like', '%' . $search_name . '%');
  43. }
  44. $count=$data->count();
  45. if($count==0){
  46. $this->error('400001','没有数据');
  47. }
  48. $list=$data->with(['store_user'=>function($query){
  49. $query->with('user:id,nickname,mobile,level')
  50. ->select('id','user_id','store_id','equity_rate')
  51. ->orderByDesc('equity_rate');
  52. }])
  53. ->skip($num)->take($page_size)
  54. ->orderBy('id','desc')
  55. ->get();
  56. if(empty($list)){
  57. return $this->error('400002','没有获取到数据');
  58. }
  59. return $this->success_list($list,'success',$count);
  60. }
  61. //根据手机号获取代理信息
  62. public function getAgentInfo(Request $request){
  63. $phone=$request->input('phone');
  64. $type=$request->input('type');
  65. switch($type){
  66. case 1:
  67. $level=[2,3];
  68. break;
  69. case 2:
  70. case 3:
  71. $level=[3];
  72. break;
  73. default:
  74. $level=[];
  75. }
  76. $user=User::where('mobile',$phone)
  77. ->whereIn('level',$level)
  78. ->whereNull('deleted_at')->where('status',0)->where('cert_status',6)->where('service_status',0)
  79. ->select('id','nickname','mobile','level','warea_id')
  80. ->first();
  81. if($user){
  82. return $this->success($user);
  83. }else{
  84. return $this->error('450001','代理账号有误');
  85. }
  86. }
  87. //添加门店信息
  88. public function uploadStore(Request $request){
  89. $input=$request->all();
  90. $rules=[
  91. 'name'=>[
  92. 'required',
  93. Rule::unique('store')->whereNull('deleted_at')
  94. ],
  95. ];
  96. $messages=[
  97. 'name.required'=>'门店名称不能为空.',
  98. 'name.unique'=>'门店名称已存在.',
  99. ];
  100. $validator = Validator::make($input, $rules, $messages);
  101. if($validator->fails()){
  102. return $this->error('400013',$validator->errors()->first());
  103. }
  104. if($input['type']==1 || $input['type']==3){ //1为工作室 2为体验店 3为优享店
  105. if(count($input['member']) > 1){
  106. return $this->error('400111','工作室与优享店只能有一个成员');
  107. }
  108. }
  109. if($input['type']==2){ //1为工作室 2为体验店 3为优享店
  110. if(count($input['member']) > 2){
  111. return $this->error('400111','体验店最多只能有两个成员');
  112. }
  113. }
  114. $data['name']=$input['name'];
  115. $data['type']=$input['type'];
  116. $data['status']=1;
  117. $data['man_id']=$input['man_id'];
  118. $data['address']=$input['address'];
  119. $data['province']=$input['province'];
  120. $data['warea_id']=$input['warea_id'];
  121. $data['city']=$input['city'];
  122. $data['area']=$input['area'];
  123. $data['size']=$input['size'];
  124. $data['cost']=$input['cost'];
  125. $data['opening_time']=$input['opening_time'];
  126. try{
  127. DB::transaction(function()use($data,$input){
  128. $store=Store::create($data);
  129. foreach($input['members'] as $key=>$val){
  130. StoreUser::create(['store_id'=>$store->id,'user_id'=>$key,'equity_rate'=>$val]);
  131. }
  132. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')添加门店信息成功(id='.$store->id.')');
  133. },5);
  134. return $this->success([]);
  135. }catch(Exception $e){
  136. return $this->error('450001',$e->getMessage());
  137. }
  138. }
  139. //修改店铺人员股份
  140. public function editStoreUserRate(Request $request){
  141. $user_id=$request->input('user_id');
  142. $store_id=$request->input('store_id');
  143. $equity_rate=$request->input('equity_rate');
  144. $res=StoreUser::where('user_id',$user_id)->where('store_id',$store_id)->update([
  145. 'equity_rate'=>$equity_rate
  146. ]);
  147. if($res){
  148. return $this->success([]);
  149. }
  150. return $this->error();
  151. }
  152. //添加店铺人员
  153. public function addStoreUser(Request $request){
  154. $user_id=$request->input('user_id');
  155. $store_id=$request->input('store_id');
  156. $equity_rate=$request->input('equity_rate');
  157. $res=StoreUser::create(['store_id'=>$store_id,'user_id'=>$user_id,'equity_rate'=>$equity_rate]);
  158. if($res){
  159. return $this->success([]);
  160. }
  161. return $this->error();
  162. }
  163. //删除店铺人员
  164. public function deleteStoreUser(Request $request){
  165. $user_id=$request->input('user_id');
  166. $store_id=$request->input('store_id');
  167. $res=StoreUser::where('user_id',$user_id)->where('store_id',$store_id)->delete();
  168. if($res){
  169. return $this->success([]);
  170. }
  171. return $this->error();
  172. }
  173. //切换管理员
  174. public function switchMan(Request $request){
  175. $store_id=$request->input('store_id');
  176. $man_id=$request->input('man_id');
  177. $res=Store::where('id',$store_id)->update(['man_id'=>$man_id]);
  178. if($res){
  179. return $this->success([]);
  180. }
  181. return $this->error();
  182. }
  183. //修改门店信息
  184. public function updateStore(Request $request){
  185. $input=$request->all();
  186. $rules=[
  187. 'name'=>[
  188. 'required',
  189. Rule::unique('store')->ignore($input['id'])->whereNull('deleted_at')
  190. ],
  191. ];
  192. $messages=[
  193. 'name.required'=>'门店名称不能为空.',
  194. 'name.unique'=>'门店名称已存在.',
  195. ];
  196. $validator = Validator::make($input, $rules, $messages);
  197. if($validator->fails()){
  198. return $this->error('400013',$validator->errors()->first());
  199. }
  200. // if (count($input['member_ids']) != count(array_unique($input['member_ids']))) {
  201. // return $this->error('450001','店铺成员重复提交');
  202. // }
  203. // $oldAgent=StoreUser::where('store_id',$input['id'])->pluck('user_id')->toArray();
  204. //
  205. // $inter=array_intersect($oldAgent,$input['member']);//交集 原有保持不变代理
  206. //
  207. // $oldDiff=array_diff($oldAgent,$inter);//需删除代理
  208. //
  209. // $AgeDiff=array_diff($input['member'],$inter);//新增代理
  210. // if($input['type']==1 || $input['type']==3){
  211. // if(count($input['member']) > 1){
  212. // return $this->error('400111','工作室和优享店只能有一个代理');
  213. // }
  214. // }
  215. // if($input['type']==2){
  216. // if(count($input['member']) > 2){
  217. // return $this->error('400111','体验店最多只能有两个代理');
  218. // }
  219. // }
  220. $data['name']=$input['name'];
  221. $data['type']=$input['type'];
  222. $data['address']=$input['address'];
  223. $data['province']=$input['province'];
  224. $data['city']=$input['city'];
  225. $data['area']=$input['area'];
  226. $data['size']=$input['size'];
  227. $data['cost']=$input['cost'];
  228. $data['man_id']=$input['man_id'];
  229. $data['warea_id']=$input['warea_id'];
  230. $data['opening_time']=$input['opening_time'];
  231. $res=Store::where('id',$input['id'])->update($data);
  232. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')修改门店信息成功(id='.$input['id'].')');
  233. if($res){
  234. return $this->success([]);
  235. }
  236. return $this->error();
  237. }
  238. /* 门店禁用/启用 */
  239. public function shelvedStore(Request $request){
  240. $store=Store::find($request->post('id'));
  241. $store->status=($user->status==0)?'1':'0';
  242. $row=$store->save();
  243. if($row){
  244. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')禁用门店信息成功(id='.$row->id.')');
  245. return $this->success([]);
  246. }
  247. return $this->error();
  248. }
  249. //删除门店信息
  250. public function destoryStore(Request $request)
  251. {
  252. $input = $request->all();
  253. $store = Store::find($input['id']);
  254. DB::beginTransaction();
  255. try {
  256. $store->delete();
  257. StoreUser::where('store_id', $input['id'])->delete();
  258. DB::commit();
  259. return $this->success([]);
  260. } catch (Exception $e) {
  261. DB::rollBack();
  262. return $this->error();
  263. }
  264. }
  265. public function uploadStoreImg(Request $request){
  266. $file= $request->file('file');
  267. $path_url='store/store';
  268. $upload= new UploadFilesHandler();
  269. $result= $upload->save($file, $path_url, null, 'image');
  270. if($result){
  271. return $this->success($result['path']);
  272. }
  273. return $this->error();
  274. // $input=$request->all();
  275. // $path_url='public/store';
  276. // $path = $request->file('file')->store($path_url);
  277. // $url = Storage::url($path);
  278. // if($url){
  279. // return $this->success($url);
  280. // }
  281. // return $this->error();
  282. }
  283. public function getStoreRewardInfo(Request $request)
  284. {
  285. $input = $request->all();
  286. $page_index = $input['page_index'];
  287. $page_size = $input['page_size'];
  288. $num = $page_size * ($page_index - 1);
  289. // $month = $input['month'];
  290. $where = [];
  291. // if ($month) {
  292. // $where['month'] = $month;
  293. // }
  294. $count = StoreRewardSet::where($where)->count();
  295. $list = StoreRewardSet::with(['rewards'])->where($where)
  296. ->skip($num)->take($page_size)
  297. ->orderBy('month', 'desc')
  298. ->get();
  299. return $this->success_list($list, '成功', $count);
  300. }
  301. public function addStoreRewardInfo(Request $request)
  302. {
  303. $input = $request->all();
  304. $rules = [
  305. 'month' => [
  306. 'required',
  307. Rule::unique('store_rewards_set'),
  308. // ->ignore($input['id'], 'id')
  309. // ->where(function ($query) {
  310. // $query->where('deleted_at', null);
  311. // })
  312. ],
  313. ];
  314. $messages = [
  315. 'month.required' => '月份不能为空.',
  316. 'month.unique' => '月份已存在.',
  317. ];
  318. $validator = Validator::make($input, $rules, $messages);
  319. if ($validator->fails()) {
  320. return $this->error('400013', $validator->errors()->first());
  321. }
  322. $row = StoreRewardSet::create([
  323. 'month' => $input['month'],
  324. 'account_rate' => $input['account_rate'],
  325. // 'goods' => json_encode($input['goods']),
  326. // 'money' => $input['money'],
  327. 'enjoy_hard' => $input['enjoy_hard'],
  328. 'enjoy_other' => $input['enjoy_other'],
  329. 'over_enjoy_hard' => $input['over_enjoy_hard'],
  330. 'over_enjoy_other' => $input['over_enjoy_other'],
  331. 'experience_hard' => $input['experience_hard'],
  332. 'experience_other' => $input['experience_other'],
  333. ]);
  334. foreach($input['goods'] as $key=>$val){
  335. StoreRewards::create([
  336. 'month'=>$input['month'],
  337. 'name'=>$val['name'],
  338. 'price'=>$val['price'],
  339. ]);
  340. }
  341. if ($row) {
  342. return $this->success([]);
  343. }
  344. return $this->error();
  345. }
  346. public function updateStoreRewardInfo(Request $request)
  347. {
  348. $input = $request->all();
  349. $rules = [
  350. 'month' => [
  351. 'required',
  352. Rule::unique('store_rewards_set')
  353. ->ignore($input['id'], 'id')
  354. ],
  355. ];
  356. $messages = [
  357. 'month.required' => '月份不能为空.',
  358. 'month.unique' => '月份已存在.',
  359. ];
  360. $validator = Validator::make($input, $rules, $messages);
  361. if ($validator->fails()) {
  362. return $this->error('400013', $validator->errors()->first());
  363. }
  364. $row = StoreRewardSet::where('id',$input['id'])->update([
  365. 'month' => $input['month'],
  366. 'account_rate' => $input['account_rate'],
  367. 'enjoy_hard' => $input['enjoy_hard'],
  368. 'enjoy_other' => $input['enjoy_other'],
  369. 'over_enjoy_hard' => $input['over_enjoy_hard'],
  370. 'over_enjoy_other' => $input['over_enjoy_other'],
  371. 'experience_hard' => $input['experience_hard'],
  372. 'experience_other' => $input['experience_other'],
  373. ]);
  374. $before_ids=StoreRewards::where('month',$input['month'])->pluck('id')->toArray();
  375. // return $before_ids;
  376. $after_ids=[];
  377. foreach($input['goods'] as $key=>$val){
  378. if(array_key_exists('isAdd',$val)){
  379. StoreRewards::create([
  380. 'month'=>$input['month'],
  381. 'name'=>$val['name'],
  382. 'price'=>$val['price'],
  383. ]);
  384. }else{
  385. $after_ids[]=$val['id'];
  386. }
  387. }
  388. $diff_ids=array_diff($before_ids,$after_ids);
  389. StoreRewards::whereIn('id',$diff_ids)->delete();
  390. if ($row) {
  391. return $this->success([]);
  392. }
  393. return $this->error();
  394. }
  395. public function deleteStoreRewardInfo(Request $request)
  396. {
  397. $input = $request->all();
  398. $row = StoreRewardSet::where('id', $input['id'])->delete();
  399. if ($row) {
  400. return $this->success([]);
  401. }
  402. return $this->error();
  403. }
  404. public function getStoreRewardList(Request $request)
  405. {
  406. $input = $request->all();
  407. $page_index = $input['page_index'];
  408. $page_size = $input['page_size'];
  409. $num = $page_size * ($page_index - 1);
  410. $month = $input['month'];
  411. $search_name = $input['search_name'];
  412. $type = $input['type'];//店铺级别 1工作室 3优享店 2体验店
  413. //<<<<<<< HEAD
  414. // $where = [];
  415. // $where['store.type'] = $type;
  416. // $alr_store_ids=StoreRewardInfo::where('month',$month)->groupBy('store_id')->pluck('store_id');
  417. // $count=Store::whereIn('id',$alr_store_ids)
  418. // ->where('type',$type)
  419. // ->where('name','like','%'.$search_name.'%')
  420. // ->count();
  421. // $list=Store::whereIn('id',$alr_store_ids)
  422. // ->where('type',$type)
  423. // ->where('name','like','%'.$search_name.'%')
  424. //=======
  425. $alr_store_ids=StoreRewardInfo::where('month',$month)->groupBy('store_id')->pluck('store_id');
  426. $count=Store::whereIn('id',$alr_store_ids)->where('name','like','%'.$search_name.'%')->where('type',$type)->count();
  427. $list=Store::whereIn('id',$alr_store_ids)
  428. ->where('name','like','%'.$search_name.'%')
  429. ->where('type',$type)
  430. //>>>>>>> store_rewards
  431. ->skip($num)->take($page_size)
  432. ->orderBy('account', 'desc')
  433. ->get();
  434. foreach($list as $key=>$val){
  435. //<<<<<<< HEAD
  436. $list[$key]->rewards=StoreRewardInfo::where('month',$month)->where('store_id',$val->id)
  437. ->select('content','rewards','type','created_at','money')
  438. ->groupBy('store_id','month','type')->get();
  439. //=======
  440. // $list[$key]->rewards=StoreRewardInfo::where('month',$month)->where('store_id',$val->id)
  441. // ->groupBy('type')->get();
  442. //>>>>>>> store_rewards
  443. }
  444. return $this->success_list($list,'成功',$count);
  445. }
  446. public function getStoreNoRewardList1(Request $request)
  447. {
  448. $input = $request->all();
  449. $page_index = $input['page_index'];
  450. $page_size = $input['page_size'];
  451. $num = $page_size * ($page_index - 1);
  452. $month = $input['month'];
  453. $search_name = $input['search_name'];
  454. $type = $input['type'];//店铺级别 1工作室 3优享店 2体验店
  455. $where = [];
  456. $where['store.type'] = $type;
  457. $start_time = Carbon::parse($month)->startOfMonth()->toDateTimeString();
  458. $end_time = Carbon::parse($month)->endOfMonth()->toDateTimeString();
  459. $alr_store_ids=StoreRewardInfo::where('month',$month)->groupBy('store_id')->pluck('store_id');
  460. $store_ids=Store::whereNotIn('id',$alr_store_ids)->pluck('id');
  461. $data = Store::where($where)->whereIn('store.id',$store_ids)
  462. ->join('store_user as su', 'su.store_id', '=', 'store.id')
  463. ->join('users', 'users.id', '=', 'su.user_id')
  464. ->leftJoin('order_test as ot', function ($query) use ($start_time, $end_time) {
  465. $query->on('ot.user_id', '=', 'users.id')
  466. ->whereIn('ot.status', [3, 4])
  467. ->whereBetween('ot.created_at', [$start_time, $end_time]);
  468. })
  469. ->groupBy('store.id');
  470. $count=$data->get()->count();
  471. $list=$data->select('store.id', 'store.name', 'store.type','store.account as store_account','store.decorate_account', DB::raw('sum(ifNull(ot.money,0)) as account'), DB::raw('sum(ifNull(ot.total,0)) as total'))
  472. ->skip($num)->take($page_size)
  473. ->orderBy('account', 'desc')
  474. ->get();
  475. foreach ($list as $key => $val) {
  476. $user_ids = StoreUser::where('store_id', $val->id)->pluck('user_id');
  477. $list[$key]->goods = [];
  478. if ($user_ids) {
  479. $order_ids = Ordertest::whereIn('user_id', $user_ids)
  480. ->whereIn('status', [3, 4])
  481. ->whereBetween('created_at', [$start_time, $end_time])
  482. ->pluck('id');
  483. $info = Orderdetail::join('goods_test as gt','gt.id','=','order_detail.goods_id')
  484. ->whereIn('order_detail.order_id', $order_ids)->groupBy('gt.main_attr')
  485. ->select('gt.main_attr','gt.unit', DB::raw('sum(order_detail.num) as total') ,DB::raw('sum(order_detail.money) as account'))->get();
  486. $list[$key]->goods = $info;
  487. $rewardInfo=StoreRewardInfo::where('month',$month)->where('store_id',$val->id)->first();
  488. $list[$key]->reward=$rewardInfo;
  489. }
  490. }
  491. return $this->success_list($list,'成功',$count);
  492. }
  493. public function getStoreNoRewardList(Request $request)
  494. {
  495. $input = $request->all();
  496. $page_index = $input['page_index'];
  497. $page_size = $input['page_size'];
  498. $num = $page_size * ($page_index - 1);
  499. $month = $input['month'];
  500. $search_name = $input['search_name'];
  501. $type = $input['type'];//店铺级别 1工作室 3优享店 2体验店
  502. $where = [];
  503. $where['store.type'] = $type;
  504. $start_time = Carbon::parse($month)->startOfMonth()->toDateTimeString();
  505. $end_time = Carbon::parse($month)->endOfMonth()->toDateTimeString();
  506. $alr_store_ids=StoreRewardInfo::where('month',$month)->groupBy('store_id')->pluck('store_id');
  507. $count=Store::where('type',$type)->where('name','like','%'.$search_name.'%')->whereNotIn('id',$alr_store_ids)->count();
  508. $list=Store::where('store.type',$type)->where('store.name','like','%'.$search_name.'%')->whereNotIn('store.id',$alr_store_ids)
  509. ->join('store_user as su','su.store_id','=','store.id')
  510. ->leftJoin('order_test as ot',function($query) use ($start_time, $end_time){
  511. $query->on('ot.user_id','=','su.user_id')
  512. ->whereIn('ot.status',[3,4])
  513. ->whereBetween('ot.created_at', [$start_time, $end_time]);
  514. })
  515. ->select('store.name','store.id','store.account as store_account','store.decorate_account','store.type',DB::raw('sum(ifNull(ot.money,0)) as account'),DB::raw('sum(ifNull(ot.total,0)) as total'))
  516. ->groupBy('store.id')
  517. ->skip($num)->take($page_size)
  518. ->orderBy('account', 'desc')
  519. ->get();
  520. foreach($list as $key=>$val){
  521. $user_ids=StoreUser::where('store_id',$val->id)->pluck('user_id');
  522. if($type==2){
  523. $original_orders_ids=Ordertest::whereIn('status',[3,4])->where('user_id',$user_ids)->whereBetween('created_at', [$start_time, $end_time])->pluck('id')->toArray();
  524. $manual_orders_ids=Ordertest::whereIn('status',[3,4])->where('store_id',$val->id)
  525. ->whereBetween('created_at', [$start_time, $end_time])->pluck('id')->toArray();
  526. $order_ids=array_unique(array_merge($original_orders_ids,$manual_orders_ids));
  527. }else{
  528. $order_ids=Ordertest::whereIn('status',[3,4])->where('user_id',$user_ids)->whereBetween('created_at', [$start_time, $end_time])->pluck('id');
  529. }
  530. $goods=Ordertest::join('order_detail as od','od.order_id','=','order_test.id')
  531. ->join('goods_test as gt','gt.id','=','od.goods_id')->whereIn('order_test.id',$order_ids)
  532. ->groupBy('gt.main_attr')
  533. ->select('gt.main_attr','gt.unit', DB::raw('sum(od.num) as total') ,DB::raw('sum(od.money) as account'))->get();
  534. $list[$key]->goods=$goods;
  535. }
  536. return $this->success_list($list,'成功',$count);
  537. }
  538. public function settlement(Request $request)
  539. {
  540. $input = $request->all();
  541. $store_id = $input['store_id'];
  542. $month = $input['month'];
  543. $info=$input['info'];
  544. $reward=StoreRewardInfo::where('month',$month)->where('store_id',$store_id)->get();
  545. if(count($reward)>0){
  546. return $this->error('450001','该门店当月已结算奖励');
  547. }
  548. $start_time = Carbon::parse($month)->startOfMonth()->toDateTimeString();
  549. $end_time = Carbon::parse($month)->endOfMonth()->toDateTimeString();
  550. $set = StoreRewardSet::where('month', $month)->first();
  551. $user_ids = StoreUser::where('store_id', $store_id)->pluck('user_id');
  552. if (count($user_ids) <= 0) {
  553. return $this->error('门店无代理,不能结算');
  554. }
  555. $account = Ordertest::whereIn('user_id', $user_ids)
  556. ->whereIn('status', [3, 4])->whereBetween('created_at', [$start_time, $end_time])
  557. ->sum('money');
  558. if ($account <= 0) {
  559. return $this->error('当月该门店总金额为0,不能结算');
  560. }
  561. $store = Store::where('id',$store_id)->first();
  562. DB::beginTransaction();
  563. try {
  564. if ($store->type == 1) {//工作室
  565. $goods = $input['goods'];
  566. $amount = 0;
  567. foreach ($goods as $key => $val) {
  568. $amount += $val['price'] * $val['number'];
  569. }
  570. if ($amount > $account * $set->account_rate) {
  571. return $this->error('450001','商品总价超出门店总金额,不能结算');
  572. }
  573. foreach ($goods as $key => $val) {
  574. StoreRewardInfo::create([
  575. 'month' => $month,
  576. 'store_id' => $store_id,
  577. 'type' => 1,
  578. 'rewards' => json_encode($goods, JSON_UNESCAPED_UNICODE),
  579. 'rewards_id' => $val['id'],
  580. 'content' => json_encode($info, JSON_UNESCAPED_UNICODE),
  581. 'num' => $val['number'],
  582. 'money' => null
  583. ]);
  584. }
  585. } elseif ($store->type == 2) {//体验店
  586. $goods = $input['goods'];
  587. $amount = 0;//总数量
  588. foreach ($goods as $key => $val) {
  589. $amount += $val['number'] * $val['price'];
  590. }
  591. Store::where('id',$store_id)->increment('account',$amount);
  592. StoreRewardInfo::create([
  593. 'month' => $month,
  594. 'store_id' => $store_id,
  595. 'type' => 2,
  596. 'rewards_id' => null,
  597. 'num' => null,
  598. 'rewards' => json_encode($goods, JSON_UNESCAPED_UNICODE),
  599. 'content' => json_encode($info, JSON_UNESCAPED_UNICODE),
  600. 'money' => $amount,
  601. ]);
  602. } else {//优享店
  603. $decorate = $store->decorate_account;//装修金额
  604. if (empty($decorate)) {
  605. return $this->error('当前门店无装修金额,不能结算');
  606. }
  607. $goods = $input['goods'];
  608. $amount = 0;
  609. foreach ($goods as $key => $val) {
  610. $amount += $val['price'] * $val['number'];
  611. }
  612. if ($amount > $account * $set->account_rate) {
  613. return $this->error('商品总价超出门店总金额,不能结算');
  614. }
  615. foreach ($goods as $key => $val) {
  616. StoreRewardInfo::create([
  617. 'month' => $month,
  618. 'store_id' => $store_id,
  619. 'type' => 1,
  620. 'rewards' => json_encode($goods, JSON_UNESCAPED_UNICODE),
  621. 'rewards_id' => $val['id'],
  622. 'content' => json_encode($info, JSON_UNESCAPED_UNICODE),
  623. 'num' => $val['number'],
  624. 'money' => null
  625. ]);
  626. }
  627. $goods_price = $input['goods_price'];
  628. $amount = 0;//总数量
  629. foreach ($goods_price as $key => $val) {
  630. $amount += $val['number1'] * $val['price1'] + $val['number2'] * $val['price2'];
  631. }
  632. Store::where('id',$store_id)->increment('account',$amount);
  633. StoreRewardInfo::create([
  634. 'month' => $month,
  635. 'store_id' => $store_id,
  636. 'type' => 2,
  637. 'rewards_id' => null,
  638. 'num' => null,
  639. 'rewards' => json_encode($goods_price, JSON_UNESCAPED_UNICODE),
  640. 'content' => json_encode($info, JSON_UNESCAPED_UNICODE),
  641. 'money' => $amount,
  642. ]);
  643. }
  644. DB::commit();
  645. return $this->success([]);
  646. }catch(Exception $e){
  647. DB::rollBack();
  648. return $this->error($e->getMessage());
  649. }
  650. }
  651. public function undoStoreRewardsInfo(Request $request){
  652. $input=$request->all();
  653. $month=$input['month'];
  654. $store_id=$input['store_id'];
  655. $next_month=date("Y-m",strtotime('+1 month',strtotime($month)));
  656. $curr_month=date("Y-m");
  657. if($next_month!=$curr_month){
  658. return $this->error('450001','当前月份兑换不能撤销');
  659. }
  660. DB::beginTransaction();
  661. try{
  662. $amount=StoreRewardInfo::where('month',$month)->where('store_id',$store_id)->where('type',2)->value('money');
  663. if($amount>0){
  664. Store::where('id',$store_id)->decrement('money',$amount);
  665. }
  666. StoreRewardInfo::where('month',$month)->where('store_id',$store_id)->delete();
  667. DB::commit();
  668. return $this->success([]);
  669. }catch(Exception $e){
  670. DB::rollBack();
  671. return $this->error();
  672. }
  673. }
  674. public function getStoreInfo(Request $request){
  675. $input=$request->all();
  676. $month=$input['month'];
  677. $info=StoreRewardSet::where('month',$month)->first();
  678. $goods=StoreRewards::where('month',$month)->get();
  679. if($info){
  680. $info->goods=$goods;
  681. return $this->success($info);
  682. }else{
  683. return $this->error('450001','当月未设置兑换信息');
  684. }
  685. }
  686. //导入门店
  687. public function import(Request $request){
  688. if(!$request->hasFile('file')){
  689. exit('上传文件为空!');
  690. }
  691. $data=[];
  692. $array = Excel::toArray(new ReportImport, request()->file('file'));
  693. DB::beginTransaction();
  694. try{
  695. foreach($array[0] as $key => $val){
  696. if(!empty($val[0]) && $val[0]!='昵称'){
  697. $user=User::where('mobile',$val[2])->select('id','nickname','warea_id')->first();
  698. if(empty($user)){
  699. return $this->error('450001',$val[0].'手机号不存在');
  700. }
  701. if(!isset($user->warea_id) || empty($user->warea_id) ){
  702. return $this->error('450001',$val[0].'没有战区');
  703. }
  704. $data[$key]['name']=$val[0].$val[4];
  705. $data[$key]['type']=1;
  706. $data[$key]['status']=1;
  707. $data[$key]['man_id']=$user->id;
  708. if($val[4]=='工作室'){
  709. $type=1;
  710. }elseif($val[4]=='优享店'){
  711. $type=3;
  712. }else{
  713. $type=2;
  714. }
  715. $row=Store::create(['name'=>$val[0].$val[4],'type'=>$type,'status'=>1,'man_id'=>$user->id,'warea_id'=>$user->warea_id]);
  716. StoreUser::create(['user_id'=>$user->id,'user_mobile'=>$val[2],'store_id'=>$row->id]);
  717. }
  718. }
  719. DB::commit();
  720. return $this->success([]);
  721. }catch(\Exception $e){
  722. DB::rollback();
  723. return $this->error();
  724. }
  725. }
  726. //获取体验店代理
  727. public function getExpStoreAgent(Request $request){
  728. $page_size=$request->input('page_size');
  729. $page_index=$request->input('page_index');
  730. $num=$page_size*($page_index-1);
  731. $store_id=$request->input('store_id');
  732. $data=ExpStoreAgent::query()->with(['user:id,nickname,level,mobile','store:id,name']);
  733. if(!empty($store_id)){
  734. $data->where('store_id',$store_id);
  735. }
  736. $count=$data->count();
  737. $list=$data->skip($num)->take($page_size)->get();
  738. return $this->success_list($list,'',$count);
  739. }
  740. //获取体验店信息
  741. public function getExpStore(){
  742. $stores=Store::where('type',2)->select('id','name')->get();
  743. return $this->success($stores);
  744. }
  745. //查询代理公司信息
  746. public function searchCompanyInfo(Request $request){
  747. $mobile=$request->input('mobile');
  748. $user=User::where('mobile',$mobile)
  749. ->where('level',3)
  750. ->whereNull('deleted_at')->where('status',0)->where('cert_status',6)->where('service_status',0)
  751. ->select('id','nickname','mobile','level')
  752. ->first();
  753. if($user){
  754. return $this->success($user);
  755. }else{
  756. return $this->error('450001','代理账号有误');
  757. }
  758. }
  759. public function addExpStoreAgent(Request $request){
  760. $store_id=$request->input('store_id');
  761. $user_id=$request->input('user_id');
  762. $res=ExpStoreAgent::create([
  763. 'store_id'=>$store_id,
  764. 'user_id'=>$user_id
  765. ]);
  766. if($res){
  767. return $this->success([]);
  768. }else{
  769. return $this->error();
  770. }
  771. }
  772. public function editExpStoreAgent(Request $request){
  773. $id=$request->input('id');
  774. $store_id=$request->input('store_id');
  775. $user_id=$request->input('user_id');
  776. $res=ExpStoreAgent::where('id',$id)
  777. ->update([
  778. 'store_id'=>$store_id,
  779. 'user_id'=>$user_id
  780. ]);
  781. if($res){
  782. return $this->success([]);
  783. }else{
  784. return $this->error();
  785. }
  786. }
  787. public function deleteExpStoreAgent(Request $request){
  788. $id=$request->input('id');
  789. $res=ExpStoreAgent::where('id',$id)->delete();
  790. if($res){
  791. return $this->success([]);
  792. }else{
  793. return $this->error();
  794. }
  795. }
  796. public function exportStoreSubsidies(){
  797. $stores=Store::with(['store_user'=>function($query){
  798. $query->with('user:id,nickname,mobile,level')
  799. ->select('id','user_id','store_id','equity_rate')
  800. ->orderByDesc('equity_rate');
  801. }])->get();
  802. return $this->success($stores);
  803. }
  804. }