CompanyItem.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. <?php
  2. namespace app\controller;
  3. use app\BaseController;
  4. use app\model\Account;
  5. use app\model\AccountCompany;
  6. use think\Exception;
  7. use think\facade\Db;
  8. use think\facade\Validate;
  9. //【组织架构】
  10. class CompanyItem extends BaseController
  11. {
  12. //列表
  13. public function getList()
  14. {
  15. $post = $this->request->only(['pid' => '', 'name' => '', 'nickname' => '', 'companyNo' => ''], 'post', 'trim');
  16. $condition = [['is_del', '=', 0]];
  17. $depart = [['a.is_del', '=', 0]];
  18. if ($post['pid'] !== '') $condition[] = ["pid", "=", $post['pid']];
  19. if ($post['name'] != "") $condition[] = ["name", "like", "%{$post['name']}%"];
  20. if ($post['pid'] === '' && $post['name'] == '' && $post['nickname'] == '') $condition[] = ["pid", "=", 0];
  21. if ($post['nickname'] != '') {
  22. $is = Db::name("account")
  23. ->alias('a')
  24. ->leftJoin('account_company b', 'b.account_id=a.id')
  25. ->leftJoin('user c', 'c.account_id=a.id')
  26. ->where('a.is_del', 0)
  27. ->whereLike('c.nickname', '%' . $post['nickname'] . '%')
  28. ->column('b.itemid');
  29. if (empty($is)) return json_show(1004, "未找到数据");
  30. $condition[] = ["id", "in", $is];
  31. }
  32. $pidlist = Db::name("company_item")
  33. ->where($condition)
  34. ->column("pid");
  35. if (!empty($pidlist)) $depart[] = [["b.itemid", "in", $pidlist]];
  36. else {
  37. if ($post['pid'] === "") $depart[] = ['b.itemid', '=', 0];
  38. else $depart[] = ['b.itemid', '=', $post['pid']];
  39. }
  40. $item = Db::name("account")
  41. ->alias('a')
  42. ->field('a.id account_id,c.nickname,b.itemid,a.is_del,a.status,b.position')
  43. ->leftJoin('account_company b', 'b.account_id=a.id')
  44. ->leftJoin('user c', 'c.account_id=a.id')
  45. ->where($depart)
  46. ->select()
  47. ->toArray();
  48. $list = Db::name("company_item")
  49. ->where($condition)
  50. ->select()
  51. ->toArray();
  52. return json_show(0, '获取成功', ["depart" => $list, "item" => $item]);
  53. }
  54. //添加
  55. public function add()
  56. {
  57. $param = $this->request->only([
  58. 'companyNo',
  59. 'name',
  60. 'pid',
  61. 'level' => 1,
  62. 'weight' => 1,
  63. ], 'post', 'trim');
  64. $val = Validate::rule([
  65. 'companyNo|所属企业' => 'require|max:255',
  66. 'name|部门名称' => 'require|max:255',
  67. 'pid|父级id' => 'require|number|gt:0',
  68. 'level|部门层级' => 'number|gt:0',
  69. 'weight|排序权重' => 'number|gt:0',
  70. ]);
  71. if ($val->check($param) == false) return json_show(1004, $val->getError());
  72. Db::startTrans();
  73. try {
  74. $tmp = Db::name('company_item')
  75. ->field('id')
  76. ->where(["is_del" => 0, "name" => $param['name'], 'companyNo' => $param['companyNo']])
  77. ->findOrEmpty();
  78. if (!empty($tmp)) throw new Exception('部门名称已存在');
  79. $spid = ['depart_link' => ''];
  80. if ($param['pid'] != 0) {
  81. $spid = Db::name('company_item')
  82. ->field('depart_link')
  83. ->where(['id' => $param['pid'], 'is_del' => 0])
  84. ->find();
  85. if (empty($spid)) throw new Exception('父级数据不能为空');
  86. }
  87. $id = Db::name('company_item')
  88. ->insertGetId([
  89. "name" => $param['name'],
  90. "pid" => $param['pid'],
  91. "level" => $param['level'],
  92. "weight" => $param['weight'],
  93. "is_del" => 0,
  94. 'companyNo' => $param['companyNo'],
  95. "addtime" => date("Y-m-d H:i:s"),
  96. "updatetime" => date("Y-m-d H:i:s"),
  97. ]);
  98. $depart_link = $spid['depart_link'] . "{$id}-";
  99. $level = explode('-', $depart_link);
  100. $level = array_filter($level);
  101. $level = count($level);
  102. Db::name('company_item')
  103. ->where('id', $id)
  104. ->update([
  105. 'depart_link' => $depart_link,
  106. 'level' => $level
  107. ]);
  108. Db::commit();
  109. return json_show(0, '添加成功');
  110. } catch (Exception $e) {
  111. Db::rollback();
  112. return json_show(1002, '添加失败,' . $e->getMessage());
  113. }
  114. }
  115. //编辑
  116. public function update()
  117. {
  118. $param = $this->request->only(['id', 'companyNo', 'name', 'pid', 'level' => 1, 'weight' => 1,], 'post', 'trim');
  119. $val = Validate::rule([
  120. 'id' => 'require|number|gt:0',
  121. 'companyNo|所属企业' => 'require|max:255',
  122. 'name|部门名称' => 'require|max:255',
  123. 'pid|父级id' => 'require|number|gt:0',
  124. 'level|部门层级' => 'number|gt:0',
  125. 'weight|排序权重' => 'number|gt:0',
  126. ]);
  127. if ($val->check($param) == false) return json_show(1004, $val->getError());
  128. Db::startTrans();
  129. try {
  130. $tmp = Db::name("company_item")
  131. ->field('id')
  132. ->where(['id' => $param['id'], 'is_del' => 0])
  133. ->findOrEmpty();
  134. if (empty($tmp)) throw new Exception('部门信息不存在');
  135. $tmp = Db::name('company_item')
  136. ->field('id')
  137. ->where(["is_del" => 0, "name" => $param['name'], 'companyNo' => $param['companyNo']])
  138. ->where('id', '<>', $param['id'])
  139. ->findOrEmpty();
  140. if (!empty($tmp)) throw new Exception('部门名称已存在');
  141. $spid = ['depart_link' => ''];
  142. if ($param['pid'] != 0) {
  143. $spid = Db::name('company_item')
  144. ->field('depart_link')
  145. ->where(['id' => $param['pid'], 'is_del' => 0])
  146. ->find();
  147. if (empty($spid)) throw new Exception('父级数据不能为空');
  148. }
  149. Db::name('company_item')
  150. ->where(['id' => $param['id'], 'is_del' => 0])
  151. ->update([
  152. "name" => $param['name'],
  153. "pid" => $param['pid'],
  154. "level" => $param['level'],
  155. "weight" => $param['weight'],
  156. 'companyNo' => $param['companyNo'],
  157. "updatetime" => date("Y-m-d H:i:s"),
  158. ]);
  159. $depart_link = $spid['depart_link'] . "{$param['id']}-";
  160. $level = explode('-', $depart_link);
  161. $level = array_filter($level);
  162. $level = count($level);
  163. Db::name('company_item')
  164. ->where('id', $param['id'])
  165. ->update([
  166. 'depart_link' => $depart_link,
  167. 'level' => $level
  168. ]);
  169. Db::commit();
  170. return json_show(0, '信息更新成功');
  171. } catch (Exception $e) {
  172. Db::rollback();
  173. return json_show(1002, '信息更新失败,' . $e->getMessage());
  174. }
  175. }
  176. //查询,层级列表
  177. public function query()
  178. {
  179. $param = $this->request->filter('trim')->only(['companyNo'=>''],'post');
  180. $where=[['pid','=',0],['is_del','=',0]];
  181. if($param['companyNo'] != '') $where[]=['companyNo','=',$param['companyNo']];
  182. //所有已经存在的公司
  183. $companyNo = Db::name('company_item')
  184. ->field('companyNo')
  185. ->where($where)
  186. ->group('companyNo')
  187. ->buildSql();
  188. $company = Db::name('headquarters')
  189. ->field('id,code,name,type')
  190. ->where('is_del', 0)
  191. ->where('code IN ' . $companyNo)
  192. ->select()
  193. ->toArray();
  194. foreach ($company as &$value) {
  195. $value['child'] = Db::name('company_item')
  196. ->where(['pid' => 0, 'is_del' => 0, 'companyNo' => $value['code']])
  197. ->order("weight desc")
  198. ->select()
  199. ->toArray();
  200. foreach ($value['child'] as &$item) {
  201. $item = crea($item);
  202. }
  203. }
  204. return json_show(0, '获取成功', $company);
  205. }
  206. //删除
  207. public function delete()
  208. {
  209. $id = $this->request->filter('trim')->post('id/d', 0);
  210. $rs = Db::name("company_item")
  211. ->where(['id' => $id, 'is_del' => 0])
  212. ->update(['is_del' => 1, 'updatetime' => date('Y-m-d H:i:s')]);
  213. return $rs ? json_show(0, '删除成功') : json_show(1003, '删除失败');
  214. }
  215. //启禁用
  216. public function status()
  217. {
  218. $id = $this->request->filter('trim')->post('id/d', 0);
  219. $rs = Db::name("company_item")
  220. ->field('id,status')
  221. ->where(['id' => $id, 'is_del' => 0])
  222. ->findOrEmpty();
  223. if (empty($rs)) return json_show(1005, '未找到部门');
  224. $status = $rs['status'] == 1 ? 0 : 1;
  225. $rs = Db::name("company_item")
  226. ->where(['id' => $id, 'is_del' => 0])
  227. ->update(['status' => $status, 'updatetime' => date('Y-m-d H:i:s')]);
  228. return $rs ? json_show(0, '更新成功') : json_show(1003, '更新失败');
  229. }
  230. //改变职位
  231. public function userp()
  232. {
  233. $post = $this->request->only(['account_id', 'itemid', 'position'], 'post', 'trim');
  234. $val = Validate::rule([
  235. 'account_id|账户id' => 'require|number|gt:0',
  236. 'itemid|部门id' => 'require|number|gt:0',
  237. 'position|职位' => 'require|number|in:1,2',
  238. ]);
  239. if ($val->check($post) == false) return json_show(1005, $val->getError());
  240. $rs = Db::name('account_item')
  241. ->where(['account_id' => $post['account_id'], 'itemid' => $post['itemid']])
  242. ->update(['position' => $post['position'], 'updatetime' => date('Y-m-d H:i:s')]);
  243. return $rs ? json_show(0, '修改成功') : json_show(1005, '修改失败');
  244. }
  245. }