Designer.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <?php
  2. namespace app\client\controller;
  3. use app\event\FootPrints;
  4. use app\model\DesignerReserve;
  5. use app\model\Footprints as FootprintsModel;
  6. use app\model\Employee;
  7. use app\model\Org;
  8. use app\model\User;
  9. use app\event\Msg;
  10. use app\model\Designer as DesignerModel;
  11. use think\facade\Request;
  12. use app\model\MaterialCase;
  13. class Designer extends Base
  14. {
  15. /**
  16. * 设计师预约
  17. */
  18. public function designer_make()
  19. {
  20. $token = request()->token;
  21. if ($token['isEmployee']) {
  22. return json(['code' => 1, 'data' => '员工无法预约', 'msg' => '员工无法预约']);
  23. }
  24. $param = Request::only(['designer_id' => '', 'designer_name' => '']);
  25. if (empty($param['designer_id'])) return json(['code' => 1, 'data' => '未选择设计师', 'msg' => '未选择设计师']);
  26. $w[] = ['uid', '=', $token['uid']];
  27. $w[] = ['pipe_type', '=', 'designer'];
  28. $had = FootprintsModel::where($w)->whereRaw('reg_info->"$.id" = ' . (int)$param['designer_id'])->whereRaw('reg_info->"$.share_pipe_type" != ""')->count();
  29. if ($had) {
  30. return json(['code' => 1, 'data' => '已经预约', 'msg' => '已经预约']);
  31. }
  32. // 设计师信息获取
  33. $w3[] = ['id', '=', $param['designer_id']];
  34. $w3[] = ['root_id', '=', $token['root_org']];
  35. $data = Employee::where($w3)->field('name title,id,show,root_id')->findOrEmpty();
  36. $data['share_pipe_type'] = 'designer';
  37. $data['share_data_id'] = $param['designer_id'];
  38. // 如果有分享人
  39. if (isset($token['share_employee'])) {
  40. // 添加足迹
  41. event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, $data, 'designer'));
  42. // 获取当前人的昵称
  43. $w1[] = ['id', '=', $token['uid']];
  44. $w1[] = ['root_id', '=', $token['root_org']];
  45. $username = User::where($w1)->value('nickname');
  46. // 获取分享人id
  47. $w2[] = ['id', '=', $token['share_employee']];
  48. $w2[] = ['root_id', '=', $token['root_org']];
  49. $employeeId = Employee::where($w2)->value('id');
  50. //预约设计师获客线索提醒:*** 预约了 **** 设计师,请跟进沟通
  51. $new = $username . '预约了' . $param['designer_name'] . '设计师,请及时跟进';
  52. event(new Msg($employeeId, $new, 'designer'));
  53. }
  54. $designer_data['designer_id'] = $param['designer_id'];
  55. $designer_data['uid'] = $token['uid'];
  56. $designer_data['employee_id'] = $employeeId ?? 0;
  57. $designer_data['pipe_type'] = 'designer';
  58. $designer_data['data_id'] = $param['designer_id'];
  59. $designer_data['root_id'] = $token['root_org'];
  60. DesignerReserve::create($designer_data);
  61. return json(['code' => 0, 'data' => '预约成功', 'msg' => '预约成功']);
  62. }
  63. /**
  64. * 设计师详情
  65. */
  66. public function designer_read()
  67. {
  68. $token = request()->token;
  69. $id = Request::param('id');
  70. if (empty($id)) return json(['code' => 0, 'data' => []]);
  71. $w[] = ['id', '=', $id];
  72. $w[] = ['root_id', '=', $token['root_org']];
  73. $root_id = $token['root_org'];
  74. $data = Employee::with(['designer' => function ($query) use ($root_id) {
  75. $query->where('root_id', $root_id)->visible(['headimgurl', 'employee_id', 'desc', 'good_at', 'position', 'work_years', 'addtime', 'good_house', 'design_concept', 'vcr', 'id designer_id'])->bind(['desc', 'good_at', 'position', 'work_years', 'addtime', 'good_house', 'design_concept', 'vcr', 'name', 'headimgurl']);
  76. }])->where($w)->field('name title,id,show,id designer_id,root_id,image_photo')->findOrEmpty();
  77. if ($data->isEmpty()) return json(['code' => 0, 'data' => []]);
  78. $cw[] = ['designer_id', '=', $data->id];
  79. $cw[] = ['del', '=', 0];
  80. $cw[] = ['publish', '=', 1];
  81. $data->caseCount = MaterialCase::where($cw)->count();
  82. //是否预约
  83. $w1[] = ['uid', '=', $token['uid']];
  84. $w1[] = ['pipe_type', '=', 'designer'];
  85. $data->make = FootprintsModel::where($w1)->whereRaw('reg_info->"$.id" = ' . (int)$data->id)->whereRaw('reg_info->"$.share_pipe_type" != ""')->count() ? 1 : 0;
  86. if (!empty($token['uid']) && !$token['isEmployee']) {
  87. event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, $data, 'designer'));
  88. }
  89. return json(['code' => 0, 'data' => $data]);
  90. }
  91. /**
  92. * 设计师案例列表
  93. */
  94. public function designer_case_list()
  95. {
  96. $token = request()->token;
  97. $param = Request::only(['id' => 0, 'page' => 1, 'limit' => 15]);
  98. $w[] = ['designer_id', '=', $param['id']];
  99. $w[] = ['root_id', '=', $token['root_org']];
  100. $w[] = ['del', '=', 0];
  101. $w[] = ['publish', '=', 1];
  102. $list = MaterialCase::where($w)->with(['community' => function ($query) {
  103. $query->bind(['community_name' => 'name']);
  104. }, 'designer' => function ($query) {
  105. $query->bind(['designer_name' => 'name']);
  106. }, 'decostyle' => function ($query) {
  107. $query->bind(['decostyle_name' => 'name']);
  108. }, 'housetype'])->field('id,title,id,cover_img,shared_times,desc,square,community_id,designer_id,style_id,housetype_id,housetype_type,vr_case')->order('addtime desc,view_times desc')->page($param['page'], $param['limit'])->select();
  109. $list = $list->append(['housetype.name'])->toArray();
  110. foreach($list as &$item){
  111. $item['housetype_name'] = $item['housetype']['name'];
  112. unset($item['housetype']);
  113. }
  114. $count = MaterialCase::where($w)->count();
  115. return json(['code' => 0, 'data' => $list, 'count' => $count]);
  116. }
  117. /**
  118. * 设计师部门列表
  119. */
  120. public function designer_org()
  121. {
  122. $token = request()->token;
  123. $where = [
  124. ['path', 'like', $token['root_org'] . '-%'],
  125. ['org_type','=',2],
  126. ['status','=',1]
  127. ];
  128. $data = Org::where($where)->column('id,name,pid');
  129. //查询部门设计师人数
  130. $employee = Employee::where([['uid', '<>', 0], ['root_id', '=', $token['root_org']], ['state', '=', '在职']])->group('org_id')->column('count(id)','org_id');
  131. foreach($data as &$val){
  132. $val['employee_count'] = isset($employee[$val['id']]) ? $employee[$val['id']] : 0 ;
  133. }
  134. $new_arr = [];
  135. $persons = [];
  136. foreach($data as &$v){
  137. $children = tree($data, $v['id'], $persons);
  138. $v['children'] = array_merge_recursive($children,$persons);
  139. if (empty($v['children'])) $v['disabled']=true;
  140. $new_arr[] =$v;
  141. }
  142. return json(['code' => 0, 'data' => $new_arr]);
  143. }
  144. /**
  145. * 设计师列表
  146. */
  147. public function index()
  148. {
  149. $token = request()->token;
  150. $param = Request::only(['page' => 1, 'limit' => 10, 'keyword' => '', 'at' => '', 'house' => '', 'org_id' => '']);
  151. if(!empty($param['org_id'])) {
  152. $orgs = [$param['org_id']];
  153. }else{
  154. $orgs = Org::where([['path', 'like', $token['root_org'] . '-%'], ['org_type', '=', 2]])->column('id');
  155. }
  156. if (!empty($param['keyword'])) {
  157. $w1[] = ['name', 'like', '%' . trim($param['keyword']) . '%'];
  158. $w1[] = ['root_id', '=', $token['root_id']];
  159. $ids1 = DesignerModel::where($w1)->column('employee_id');
  160. $w2[] = ['root_id', '=', $token['root_id']];
  161. $ids2 = DesignerModel::where($w2)->where("name is null AND name = ''")->column('employee_id');
  162. $w2[] = ['name', 'like', '%' . trim($param['keyword']) . '%'];
  163. $w2[] = ['id', 'not in', $ids2];
  164. $ids3 = Employee::where($w2)->column('id');
  165. $w3[] = ['id', 'in', array_merge($ids1, $ids3)];
  166. }
  167. $w3[] = ['org_id', 'in', $orgs];
  168. $w3[] = ['root_id', '=', $token['root_org']];
  169. $w3[] = ['state', '=', '在职'];
  170. $w5 = [];
  171. if ($param['at']) {
  172. $w5[] = ['good_at', 'like', '%' . trim($param['at']) . '%'];
  173. }
  174. if ($param['house']) {
  175. $w5[] = ['good_house', 'like', '%' . trim($param['house']) . '%'];
  176. }
  177. if ($w5) {
  178. $ids = DesignerModel::where($w5)->column('employee_id');
  179. $w3[] = ['id', 'in', $ids];
  180. }
  181. $root_id = $token['root_org'];
  182. $w3[] = ['show', '=', 0];
  183. $list = Employee::with(['designer' => function ($query) use ($root_id) {
  184. $query->where('root_id', $root_id);
  185. }])->withCount(['materialCase' => function ($query) {
  186. $query->where([['publish', '=', 1], ['del', '=', 0]]);
  187. }])->where($w3)->field('name title,id,show,id designer_id')->order('material_case_count desc')->page($param['page'], $param['limit'])->select()->toArray();
  188. $count = Employee::where($w3)->count();
  189. if ($list) {
  190. foreach ($list as $k => $v) {
  191. $list[$k]['name'] = $v['title'];
  192. $list[$k]['show'] = $v['show'] ? '不展示' : '展示';
  193. $list[$k]['case_count'] = $v['material_case_count'];
  194. $list[$k]['position'] = isset($v['designer']) ? $v['designer']['position'] : '';
  195. $list[$k]['headimgurl'] = isset($v['designer']) ? $v['designer']['headimgurl'] : '';
  196. $list[$k]['desc'] = isset($v['designer']) ? $v['designer']['desc'] : '';
  197. $list[$k]['good_at'] = isset($v['designer']) ? $v['designer']['good_at'] : '';
  198. $list[$k]['work_years'] = isset($v['designer']) ? $v['designer']['work_years'] : '';
  199. $list[$k]['good_house'] = isset($v['designer']) ? $v['designer']['good_house'] : '';
  200. $list[$k]['design_concept'] = isset($v['designer']) ? $v['designer']['design_concept'] : '';
  201. $list[$k]['vcr'] = isset($v['designer']) ? $v['designer']['vcr'] : '';
  202. unset($list[$k]['designer']);
  203. unset($list[$k]['title']);
  204. //是否预约
  205. $list[$k]['make'] = 0;//FootprintsModel::where([['uid', '=', $token['uid']], ['pipe_type', '=', 'designer']])->whereRaw('reg_info->"$.id" = ' . (int)$v['id'])->whereRaw('reg_info->"$.share_pipe_type" != ""')->count() ? 1 : 0;
  206. }
  207. }
  208. return json(['code' => 0, 'data' => $list, 'count' => $count]);
  209. }
  210. }