AgentRegionService.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2017~2021 LARAVEL研发中心
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://www.laravel.cn
  8. // +----------------------------------------------------------------------
  9. // | Author: laravel开发员 <laravel.qq.com>
  10. // +----------------------------------------------------------------------
  11. namespace App\Services\Common;
  12. use App\Models\AgentRegionModel;
  13. use App\Services\BaseService;
  14. /**
  15. * 代理城市管理-服务类
  16. * @author laravel开发员
  17. * @since 2020/11/11
  18. * @package App\Services\Common
  19. */
  20. class AgentRegionService extends BaseService
  21. {
  22. public static $instance = null;
  23. /**
  24. * 构造函数
  25. * @author laravel开发员
  26. * @since 2020/11/11
  27. */
  28. public function __construct()
  29. {
  30. $this->model = new AgentRegionModel();
  31. }
  32. /**
  33. * 获取城市列表
  34. * @return array
  35. * @since 2020/11/11
  36. * @author laravel开发员
  37. */
  38. public function getList()
  39. {
  40. $param = request()->all();
  41. // 查询条件
  42. $map = [];
  43. // 上级ID
  44. $pid = intval(getter($param, 'pid', 0));
  45. if (!$pid) {
  46. $map[] = ['pid', '=', 0];
  47. } else {
  48. $map[] = ['pid', '=', $pid];
  49. }
  50. // 城市名称
  51. $name = getter($param, "name");
  52. if ($name) {
  53. $map[] = ['name', 'like', "%{$name}%"];
  54. }
  55. $list = $this->model->getList($map, [['sort', 'asc']]);
  56. if (!empty($list)) {
  57. foreach ($list as &$val) {
  58. $val['label'] = $val['name'];
  59. $val['value'] = $val['id'];
  60. if ($val['level'] <= 2) {
  61. $val['hasChildren'] = true;
  62. }
  63. }
  64. }
  65. return message("操作成功", true, $list);
  66. }
  67. /**
  68. * 列表
  69. * @param $params
  70. * @param int $pageSize
  71. * @return array
  72. */
  73. public function getDataList($params, $pageSize = 10)
  74. {
  75. $where = ['a.mark' => 1];
  76. $list = $this->model->from('agent_region as a')
  77. ->where($where)
  78. ->where(function ($query) use($params){
  79. $keyword = isset($params['keyword'])? $params['keyword'] : '';
  80. if($keyword){
  81. $query->where('a.name','like',"%{$keyword}%");
  82. }
  83. })
  84. ->where(function ($query) use($params){
  85. $status = isset($params['status'])? $params['status'] : 0;
  86. if($status>0 && is_array($status)){
  87. $query->whereIn('a.status', $status);
  88. }else if($status){
  89. $query->where('a.status', $status);
  90. }
  91. $pid = isset($params['pid'])? $params['pid'] : 0;
  92. if($pid>=0){
  93. $query->where('a.pid', $pid);
  94. }
  95. })
  96. ->select(['a.*'])
  97. ->orderBy('a.sort','asc')
  98. ->orderBy('a.id','desc')
  99. ->paginate($pageSize > 0 ? $pageSize : 9999999);
  100. $list = $list? $list->toArray() :[];
  101. if($list){
  102. foreach($list['data'] as &$item){
  103. $item['create_time'] = $item['create_time']? datetime($item['create_time'],'Y-m-d H.i.s') : '';
  104. $item['expanded'] = true;
  105. $item['children'] = $this->model->with(['children'])->where(['pid'=> $item['id'],'mark'=>1])->get();
  106. if($item['children']){
  107. foreach($item['children'] as &$v){
  108. $v['expanded'] = true;
  109. }
  110. }
  111. }
  112. // $list['data'] = $this->formatRegions($list['data'],[]);
  113. }
  114. return [
  115. 'pageSize'=> $pageSize,
  116. 'total'=>isset($list['total'])? $list['total'] : 0,
  117. 'list'=> isset($list['data'])? $list['data'] : [],
  118. ];
  119. }
  120. public function edit()
  121. {
  122. $data = request()->post();
  123. // 验证重名
  124. $id = isset($data['id'])? trim($data['id']) : 0;
  125. $pid = isset($data['pid'])? trim($data['pid']) : 0;
  126. $name = isset($data['name'])? trim($data['name']) : '';
  127. if($name){
  128. $checkId = $this->model->where(['pid'=> $pid,'name'=>$name,'mark'=>1])->value('id');
  129. if($checkId && ($checkId != $id)){
  130. return message('该区域代理名称已存在',false);
  131. }
  132. }
  133. return parent::edit($data);
  134. }
  135. /**
  136. * 选项
  137. * @return array|false|mixed
  138. */
  139. public function options()
  140. {
  141. $param = request()->all();
  142. // 用户ID
  143. $keyword = getter($param, "keyword");
  144. $parentId = getter($param, "pid");
  145. $userId = getter($param, "id");
  146. $datas = $this->model->where(function($query) use($parentId){
  147. if($parentId){
  148. $query->where(['id'=> $parentId,'mark'=>1]);
  149. }else{
  150. $query->where(['status'=> 1,'mark'=>1]);
  151. }
  152. })
  153. ->where(function($query) use($userId){
  154. if($userId){
  155. $query->whereNotIn('id', [$userId]);
  156. }
  157. })
  158. ->where(function($query) use($keyword){
  159. if($keyword){
  160. $query->where('name','like',"%{$keyword}%");
  161. }
  162. })
  163. ->select(['id as value','name as label','pid','status'])
  164. ->get();
  165. $datas = $datas? $datas->toArray() : [];
  166. if($datas){
  167. $datas = $this->formatRegions($datas,0, []);
  168. }
  169. return array_values($datas);
  170. }
  171. /**
  172. * 格式化数据
  173. * @param $regions
  174. * @param int $pid
  175. * @param array $agents
  176. * @param array $temps
  177. * @return array|false|mixed
  178. */
  179. public function formatRegions($regions, $pid=0, $agents=[],$temps=[])
  180. {
  181. if(!is_array($regions) || empty($regions)){
  182. return false;
  183. }
  184. foreach($regions as $item){
  185. $id = isset($item['value'])? $item['value'] : 0;
  186. $parentId = isset($item['pid'])? $item['pid'] : 0;
  187. if($pid){
  188. if($parentId == $pid){
  189. $children = $this->formatRegions($regions, $id, $agents);
  190. if($children){
  191. $item['children'][0] = ['label'=>'全市','value'=>$id];
  192. $item['children'] = array_merge($item['children'], $children);
  193. }
  194. $temps[] = $item;
  195. }
  196. }else if(!$parentId){
  197. $children = $this->formatRegions($regions, $id, $agents);
  198. if($children){
  199. $item['children'] = $children;
  200. }
  201. $temps[$id] = $item;
  202. }
  203. }
  204. return $temps;
  205. }
  206. }