1
0

Designer.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. <?php
  2. namespace app\api\controller;
  3. use app\model\Customer;
  4. use app\model\CustomerSharing;
  5. use app\model\CustomerVisitLog;
  6. use app\model\Employee;
  7. use app\model\Org;
  8. use think\facade\Db;
  9. use think\facade\Request;
  10. use app\model\Designer as DesignerModel;
  11. use app\model\MaterialCase;
  12. use app\model\Housetype;
  13. use app\model\Decostyle;
  14. use app\model\Setting;
  15. class Designer extends Base
  16. {
  17. /**
  18. * 设计师列表
  19. */
  20. public function list()
  21. {
  22. $token = $this->request->token;
  23. $keyword = input('keyword', '', 'trim');
  24. //搜索关键词时直接显示人员列表
  25. $org_type = input('org_type', 2); // 0全部人员 ,1销售人员 ,2设计师
  26. $from = input('from', '', 'trim'); // 团队客户查设计师部门,只查询子部门的设计师部门
  27. if ($org_type == 2 && $from == 'team') {
  28. $sub_org = orgSubIds($token['org_id']);
  29. $query[] = ['id', 'in', $sub_org];
  30. } else {
  31. $query[] = ['path', 'like', $token['root_org'] . '-%'];
  32. }
  33. if ($org_type) $query[] = ['org_type', '=', $org_type];
  34. if ($keyword) {
  35. $orgs = Org::where($query)->column('id');
  36. $where[] = ['org_id', 'in', $orgs];
  37. $where[] = ['name', 'like', '%' . $keyword . '%'];
  38. $where[] = ['state', '=', '在职'];
  39. $where[] = ['uid', '>', 0];
  40. $result = Employee::with(['user' => function ($query) {
  41. $query->field('id,headimgurl')->bind(['headimgurl' => 'headimgurl']);
  42. }])->where($where)->field('id,name,org_id,uid')->select()->toArray();
  43. return json(['code' => 0, 'data' => $result]);
  44. }
  45. $orgs = Org::with(['employee' => function ($query) {
  46. $e_where[] = ['e.state', '=', '在职'];
  47. // if ($keyword){
  48. // $e_where[] = ['e.name', 'like', '%' . $keyword . '%'];
  49. // }
  50. $query->field('e.id,e.name,user.headimgurl,e.org_id')
  51. ->alias('e')
  52. ->where($e_where)
  53. ->join('user', 'user.id=e.uid');
  54. }])->where($query)->order(['level' => 'desc', 'id' => 'desc'])->field('id,name,pid,path,org_type')->select()->toArray();
  55. foreach ($orgs as $k => $v){
  56. foreach ($v['employee'] as $kk => $vv){
  57. $orgs[$k]['employee'][$kk]['org_type'] = $v['org_type'];
  58. }
  59. }
  60. $orgsAll = Org::field('id,name,pid')->column('name,pid', 'id');
  61. // 查询限定数量
  62. $limitNum = (int)Setting::where(['root_id' => $token['root_org'], 'name' => 'designerNum'])->value('content');
  63. // 查询员工已制定的人数
  64. if ($limitNum != 0) {
  65. //获取当月时间跨度
  66. $start_time = date('Y-m').'-01 00:00:00';
  67. $end_time = date('Y-m-d',strtotime("$start_time +1 month -1 day")).' 23:59:59';
  68. $where_d[] = ['addtime', 'between', [strtotime($start_time),strtotime($end_time)]];
  69. $where_d[] = ['root_id', '=', $token['root_org']];
  70. $empShareNum = CustomerSharing::where($where_d)->group('employee_id')->column('count(customer_id)', 'employee_id');
  71. foreach ($orgs as &$o) {
  72. if ($o['org_type'] != 2) continue;
  73. if (empty($o['employee'])) continue;
  74. foreach ($o['employee'] as &$e) {
  75. $e['select_disable'] = 0;
  76. if (isset($empShareNum[$e['id']]) && $empShareNum[$e['id']] >= $limitNum) $e['select_disable'] = 1;
  77. }
  78. }
  79. }
  80. $data = [];
  81. while (!empty($orgs)) {
  82. $org = array_pop($orgs);
  83. $childOrg = [
  84. 'id' => $org['id'],
  85. 'pid' => $org['pid'],
  86. 'name' => $org['name'],
  87. 'designer' => $org['employee'],
  88. 'designer_num' => count($org['employee'])
  89. ];
  90. $pathList = explode('-', trim($org['path'], '-'));
  91. $w = &$data;
  92. foreach ($pathList as $p) {
  93. if (isset($w[$p])) {
  94. $w[$p]['designer_num'] += $childOrg['designer_num'];
  95. } else {
  96. $w[$p] = [
  97. 'id' => (int)$p,
  98. 'name' => $orgsAll[$p]['name'],
  99. 'pid' => $orgsAll[$p]['pid'],
  100. 'designer' => [],
  101. 'designer_num' => $childOrg['designer_num'],
  102. 'child_org' => [],
  103. ];
  104. }
  105. isset($w[$p]['child_org']) ?: $w[$p]['child_org'] = [];
  106. $w = &$w[$p]['child_org'];
  107. if ($org['pid'] == $p) {
  108. if (isset($w[$org['id']])) {
  109. $w[$org['id']]['designer'] = $childOrg['designer'];
  110. $w[$org['id']]['designer_num'] += $childOrg['designer_num'];
  111. } else {
  112. $w[$org['id']] = $childOrg;
  113. }
  114. break;
  115. }
  116. }
  117. // $data[$org['pid']]['designer_num'] = isset($data[$org['pid']]) ? $data[$org['pid']]['designer_num'] + count($org['employee']) : 0;
  118. // if (isset($data[$org['id']])) {
  119. // $childOrg['child_org'] = $data[$org['id']]['child_org'];
  120. // $childOrg['designer_num'] += $data[$org['id']]['designer_num'];
  121. // unset($data[$org['id']]);
  122. // }
  123. // $data[$org['pid']]['child_org'][] = $childOrg;
  124. // $data[$org['pid']]['designer_num'] = isset($data[$org['pid']]['designer_num']) ? $data[$org['pid']]['designer_num'] + $childOrg['designer_num'] : $childOrg['designer_num'];
  125. }
  126. $data = array_pop($data);
  127. $this->resetChildOrgKey($data);
  128. // 剔除掉没有人的部门
  129. if (isset($data['child_org'])) {
  130. foreach ($data['child_org'] as $k => $c) {
  131. if ($c['designer_num'] == 0) {
  132. unset($data['child_org'][$k]);
  133. }
  134. }
  135. }
  136. $result = [
  137. 'designer' => isset($data['designer']) ? $data['designer'] : [],
  138. 'child_org' => isset($data['child_org']) ? $data['child_org'] : []
  139. ];
  140. return json(['code' => 0, 'data' => $result]);
  141. }
  142. /**
  143. * 重置
  144. */
  145. private function resetChildOrgKey(&$item)
  146. {
  147. if (empty($item['child_org'])) return;
  148. $item['child_org'] = array_values($item['child_org']);
  149. foreach ($item['child_org'] as $a) {
  150. $this->resetChildOrgKey($a);
  151. }
  152. }
  153. /**
  154. * 设计师列表
  155. */
  156. public function index()
  157. {
  158. $token = $this->request->token;
  159. $param = Request::only(['page' => 1, 'limit' => 10, 'keyword' => '', 'at' => '', 'house' => '']);
  160. $w[] = ['path', 'like', $token['root_org'] . '-%'];
  161. $w[] = ['org_type', '=', 2];
  162. $orgs = Org::where($w)->column('id');
  163. if ($param['keyword']) {
  164. $w1[] = ['name', 'like', '%' . trim($param['keyword']) . '%'];
  165. $w1[] = ['root_id', '=', $token['root_id']];
  166. $ids1 = DesignerModel::where($w1)->column('employee_id');
  167. $w2[] = ['root_id', '=', $token['root_id']];
  168. $ids2 = DesignerModel::where($w2)->where("name is null AND name = ''")->column('employee_id');
  169. $w2[] = ['name', 'like', '%' . trim($param['keyword']) . '%'];
  170. $w2[] = ['id', 'not in', $ids2];
  171. $ids3 = Employee::where($w2)->column('id');
  172. $w3[] = ['id', 'in', array_merge($ids1, $ids3)];
  173. }
  174. $w3[] = ['org_id', 'in', $orgs];
  175. $w3[] = ['root_id', '=', $token['root_org']];
  176. $w3[] = ['state', '=', '在职'];
  177. $w5 = [];
  178. if ($param['at']) {
  179. $w5[] = ['good_at', 'like', '%' . trim($param['at']) . '%'];
  180. }
  181. if ($param['house']) {
  182. $w5[] = ['good_house', 'like', '%' . trim($param['house']) . '%'];
  183. }
  184. if ($w5) {
  185. $ids = DesignerModel::where($w5)->column('employee_id');
  186. $w3[] = ['id', 'in', $ids];
  187. }
  188. $root_id = $token['root_org'];
  189. $w3[] = ['show', '=', 0];
  190. $list = Employee::with(['designer' => function ($query) use ($root_id) {
  191. $query->where('root_id', $root_id);
  192. // ->bind(['desc','good_at','work_years','good_house','design_concept','vcr']);
  193. }])->withCount(['materialCase' => function ($query) {
  194. $query->where([['publish', '=', 1], ['del', '=', 0]]);
  195. }])->where($w3)->field('name title,id,show,id designer_id')->order('material_case_count desc')->page($param['page'], $param['limit'])->select()->toArray();
  196. $count = Employee::where($w3)->count();
  197. if ($list) {
  198. foreach ($list as $k => $v) {
  199. $list[$k]['name'] = $v['title'];
  200. $list[$k]['show'] = $v['show'] ? '不展示' : '展示';
  201. $list[$k]['case_count'] = $v['material_case_count'];
  202. $list[$k]['position'] = isset($v['designer']) ? $v['designer']['position'] : '';
  203. $list[$k]['headimgurl'] = isset($v['designer']) ? $v['designer']['headimgurl'] : '';
  204. $list[$k]['desc'] = isset($v['designer']) ? $v['designer']['desc'] : '';
  205. $list[$k]['good_at'] = isset($v['designer']) ? $v['designer']['good_at'] : '';
  206. $list[$k]['work_years'] = isset($v['designer']) ? $v['designer']['work_years'] : '';
  207. $list[$k]['good_house'] = isset($v['designer']) ? $v['designer']['good_house'] : '';
  208. $list[$k]['design_concept'] = isset($v['designer']) ? $v['designer']['design_concept'] : '';
  209. $list[$k]['vcr'] = isset($v['designer']) ? $v['designer']['vcr'] : '';
  210. unset($list[$k]['designer']);
  211. unset($list[$k]['title']);
  212. }
  213. }
  214. return json(['code' => 0, 'data' => $list, 'count' => $count]);
  215. }
  216. /**
  217. * 设计师列表下拉
  218. */
  219. public function select()
  220. {
  221. $token = $this->request->token;
  222. // $token['root_org'] =23;
  223. $condition = [['root_id', '=', $token['root_org']]];
  224. //风格获取
  225. $decostyles = Decostyle::where($condition)->where([['type', '=', 0]])->field('id,name')->select()->toArray();
  226. //户型获取
  227. $housetype = Housetype::where($condition)->field('id,name')->select()->toArray();
  228. $data['decostyles'] = $decostyles;
  229. $data['housetype'] = $housetype;
  230. return json(['code' => 0, 'data' => $data]);
  231. }
  232. /**
  233. * 设计师详情
  234. */
  235. public function read()
  236. {
  237. $token = $this->request->token;
  238. // $token['root_org'] = 23;
  239. $param = Request::only(['id' => '']);
  240. $w[] = ['id', '=', $param['id']];
  241. $w[] = ['root_id', '=', $token['root_org']];
  242. $root_id = $token['root_org'];
  243. $data = Employee::with(['designer' => function ($query) use ($root_id) {
  244. $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', 'designer_id' => 'id']);
  245. }])->where($w)->field('name title,id,show')->findOrEmpty();
  246. if (!$data->isEmpty()) {
  247. $data->name = $data->name ?: $data->title;
  248. $cw[] = ['designer_id', '=', $data->id];
  249. $cw[] = ['del', '=', 0];
  250. $cw[] = ['publish', '=', 1];
  251. $data->caseCount = MaterialCase::where($cw)->count();
  252. }
  253. return json(['code' => 0, 'data' => $data]);
  254. }
  255. /**
  256. * 设计师编辑
  257. */
  258. public function edit()
  259. {
  260. $token = $this->request->token;
  261. // $token['root_org'] = 23;
  262. $param = Request::only(['id' => 0, 'position' => '', 'name' => '', 'good_at' => '', 'desc' => '', 'work_years' => 0, 'good_house' => '', 'design_concept' => '', 'vcr' => '', 'headimgurl' => '']);
  263. if (!$param['headimgurl']) return json(['code' => 1, 'data' => '请选择形象照', 'msg' => '请选择形象照']);
  264. //if(!$param['vcr']) return json(['code' => 1, 'data' =>'请选择vcr','msg'=>'请选择vcr']);
  265. $w[] = ['root_id', '=', $token['root_org']];
  266. $w[] = ['id', '=', $param['id']];
  267. $row = Employee::where($w)->findOrEmpty();
  268. if ($row->isEmpty()) return json(['code' => 1, 'data' => '数据不存在', 'msg' => '数据不存在']);
  269. $w1[] = ['root_id', '=', $token['root_org']];
  270. $w1[] = ['employee_id', '=', $param['id']];
  271. $row = DesignerModel::where($w1)->findOrEmpty();
  272. $save['root_id'] = $token['root_org'];
  273. $save['name'] = $param['name'];
  274. $save['good_at'] = $param['good_at'];
  275. $save['desc'] = $param['desc'];
  276. $save['work_years'] = $param['work_years'];
  277. $save['good_house'] = $param['good_house'];
  278. $save['design_concept'] = $param['design_concept'];
  279. $save['vcr'] = $param['vcr'];
  280. $save['position'] = $param['position'];
  281. $save['headimgurl'] = $param['headimgurl'];
  282. if ($row->isEmpty()) {
  283. $save['employee_id'] = $param['id'];
  284. DesignerModel::insertGetId($save);
  285. } else {
  286. $row->save($save);
  287. }
  288. Employee::where('id', $param['id'])->update(['image_photo' => $param['headimgurl']]);
  289. return json(['code' => 0, 'data' => '操作成功', 'msg' => '操作成功']);
  290. }
  291. }