FloorRepository.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. namespace App\Repositories\V2;
  3. use App\Models\Floor;
  4. use Illuminate\Support\Facades\Log;
  5. use Illuminate\Support\Facades\Redis;
  6. use Symfony\Component\HttpKernel\Exception\HttpException;
  7. use Dingo\Api\Http\Response;
  8. use Illuminate\Support\Facades\DB;
  9. use Illuminate\Database\QueryException;
  10. /**
  11. * Created by PhpStorm.
  12. * User: durong
  13. * Date: 2019/6/3
  14. * Time: 下午2:36
  15. */
  16. class FloorRepository
  17. {
  18. public function __construct(Floor $floor)
  19. {
  20. $this->floor = $floor;
  21. }
  22. public function index($request)
  23. {
  24. $where = [];
  25. if(isset($request['id'])){
  26. $where[] = ['id', '=', $request['id']];
  27. }
  28. return $this->floor->where($where)->orderBy('id', 'asc')->paginate(20);
  29. }
  30. public function create($request)
  31. {
  32. $strlen = mb_strlen($request['name'], "utf-8");
  33. if ($strlen > 20) {
  34. throw new HttpException(500, '名称不能超过20字');
  35. }
  36. if (is_array($request['group_ids'])){
  37. $group_ids = implode(',',$request['group_ids']);
  38. }else{
  39. $group_ids = $request['group_ids'];
  40. }
  41. $data = [
  42. 'name' => $request['name'],
  43. 'floor_location' => $request['floor_location'],
  44. 'group_ids' => $group_ids,//多个banner用英文,隔开
  45. 'floor_type' => $request['floor_type'],
  46. 'is_open' => $request['is_open']
  47. ];
  48. if (!$this->floor->create($data)) {
  49. throw new HttpException(500, '添加失败');
  50. }
  51. }
  52. public function edit($request)
  53. {
  54. $floor = $this->floor->where('id', $request['id'])->first();
  55. $strlen = mb_strlen($request['name'], "utf-8");
  56. if ($strlen > 20) {
  57. throw new HttpException(500, '名称不能超过20字');
  58. }
  59. if (is_array($request['group_ids'])){
  60. $group_ids = implode(',',$request['group_ids']);
  61. }else{
  62. $group_ids = $request['group_ids'];
  63. }
  64. $floor->name = $request['name'];
  65. $floor->floor_location = $request['floor_location'];
  66. $floor->group_ids = $group_ids;
  67. $floor->floor_type = $request['floor_type'];
  68. $floor->is_open = $request['is_open'] ?? 0;
  69. DB::beginTransaction();
  70. try{
  71. $res = $floor->save();
  72. Redis::DEL('suggest_post_floor');
  73. if($res){
  74. DB::commit();
  75. return Response::create();
  76. }
  77. DB::rollBack();
  78. return Response::create([
  79. 'message' => '编辑失败,请重试',
  80. 'status_code' => 500
  81. ]);
  82. }catch (QueryException $exception){
  83. Log::debug('编辑楼层:'.$exception->getMessage());
  84. DB::rollBack();
  85. return Response::create([
  86. 'message' => '编辑失败,请重试',
  87. 'error' => $exception->getMessage(),
  88. 'status_code' => 500
  89. ]);
  90. }
  91. }
  92. public function editStatus($request)
  93. {
  94. $floor = $this->floor->find($request['id']);
  95. $floor->is_open = $request['is_open'];
  96. $floor->updated_at = date('Y-m-d H:i:s');
  97. $res = $floor->save();
  98. if (!$res) {
  99. throw new HttpException(500, '修改状态失败');
  100. }
  101. }
  102. public function floorBind($request)
  103. {
  104. $banner_id = $request['banner_id'];
  105. $floor_array = $this->floor->select('id','group_ids')->where('floor_type',0)->get();
  106. $floor_ids = [];
  107. foreach ($floor_array->toArray() as $value){
  108. if ($banner_id == $value['group_ids']){
  109. $floor_ids[] = $value['id'];
  110. }
  111. }
  112. if (count($floor_ids)>0){
  113. $edit_floor = $this->floor->whereIn('id',$floor_ids)->update(['is_open'=>0]);
  114. if (!$edit_floor){
  115. throw new HttpException(500, '该楼层关闭失败');
  116. }
  117. }
  118. }
  119. }