DataGroup.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. <?php
  2. namespace app\admin\controller;
  3. //用户组
  4. use think\Exception;
  5. use think\facade\Db;
  6. use think\facade\Validate;
  7. use app\admin\model\DataGroup as DataGroupModel;
  8. class DataGroup extends Base
  9. {
  10. //用户组列表
  11. public function getDataGroupList()
  12. {
  13. $param = $this->request->filter('trim')->only(['page' => 1, 'size' => 10, 'status' => '', 'title' => '', 'nickname' => '', 'type' => '']);
  14. $db = new DataGroupModel();
  15. $rs = $db
  16. ->alias('a')
  17. ->leftJoin('data_group_userid b', 'b.data_group_id=a.id AND b.is_del=' . DataGroupModel::$delete_正常)
  18. ->leftJoin('depart_user u', 'u.uid=b.uid AND u.is_del=0')
  19. ->group('a.id')
  20. ->where('a.is_del', DataGroupModel::$delete_正常);
  21. $val = Validate::rule([
  22. 'page|页码' => 'require|number|gt:0',
  23. 'size|每页数量' => 'require|number|gt:0|elt:100',
  24. 'status|状态' => 'number|in:' . DataGroupModel::$status_启用 . ',' . DataGroupModel::$status_禁用,
  25. 'title|用户组名称' => 'max:100',
  26. 'nickname|成员名称' => 'max:100',
  27. 'type|共享类型' => 'number|in:' . DataGroupModel::$type_可编辑 . ',' . DataGroupModel::$type_只读 . ',' . DataGroupModel::$type_不共享,
  28. ]);
  29. if (!$val->check($param)) return error_show(1005, $val->getError());
  30. if ($param['status'] != '') $rs->where('a.status', $param['status']);
  31. if ($param['title'] != '') $rs->whereLike('a.title', '%' . $param['title'] . '%');
  32. if ($param['nickname'] != '') {
  33. $a =$param['nickname'];
  34. $rs->where( "a.id","IN",function ($query) use($a){
  35. $query->name("data_group_userid")->alias("m")->leftJoin('depart_user f', 'f.uid=m.uid AND f.is_del=0')
  36. ->where('f.nickname',"like","%$a%")->where("m.is_del","=",0)->field("m.data_group_id");
  37. });
  38. }
  39. if ($param['type'] != '') $rs->where('a.type', $param['type']);
  40. $count = $rs->count('a.id');
  41. $list = $rs
  42. ->field('a.*,GROUP_CONCAT(u.nickname) nickname')
  43. ->page($param['page'], $param['size'])
  44. ->order('a.id', 'desc')
  45. ->select()
  46. ->toArray();
  47. return app_show(0, '请求成功', ['count' => $count, 'list' => $list]);
  48. }
  49. //添加
  50. public function addDataGroup()
  51. {
  52. $param = $this->request->filter('trim')->only(['title', 'uids', 'type', 'remark' => '']);
  53. $val = Validate::rule([
  54. 'title|用户组名称' => 'require|max:100',
  55. 'uids|组成员' => 'require|array|max:100',
  56. 'type|共享类型' => 'require|number|in:' . DataGroupModel::$type_可编辑 . ',' . DataGroupModel::$type_只读 . ',' . DataGroupModel::$type_不共享,
  57. 'remark|备注' => 'max:100',
  58. ]);
  59. if (!$val->check($param)) return error_show(1005, $val->getError());
  60. Db::startTrans();
  61. try {
  62. //添加用户组
  63. $group_id = Db::name('data_group')->insertGetId([
  64. 'title' => $param['title'],
  65. 'type' => $param['type'],
  66. 'remark' => $param['remark'],
  67. 'is_del' => DataGroupModel::$delete_正常,
  68. 'status' => DataGroupModel::$status_启用,
  69. 'createrid' => $this->uid,
  70. 'creater' => $this->uname,
  71. 'addtime' => date('Y-m-d H:i:s'),
  72. 'updatetime' => date('Y-m-d H:i:s'),
  73. ]);
  74. //用户组-用户集合
  75. $insert_data = [];
  76. foreach ($param['uids'] as $uids) {
  77. $insert_data[] = [
  78. 'data_group_id' => $group_id,
  79. 'uid' => $uids['uid'],
  80. 'is_del' => DataGroupModel::$delete_正常,
  81. 'status' => DataGroupModel::$status_启用,
  82. ];
  83. }
  84. if ($insert_data) Db::name('data_group_userid')->insertAll($insert_data);
  85. Db::commit();
  86. return app_show(0, '添加用户组成功');
  87. } catch (Exception $exception) {
  88. Db::rollback();
  89. return error_show(1005, '添加用户组失败');
  90. }
  91. }
  92. //获取详情
  93. public function getDataGroupDetail()
  94. {
  95. $id = $this->request->filter('trim')->post('id/d', 0);
  96. $info = DataGroupModel::field(true)
  97. ->where(['id' => $id, 'is_del' => DataGroupModel::$delete_正常])
  98. ->append(['user_list'])
  99. ->withAttr('user_list', function ($val, $data) {
  100. return Db::name('data_group_userid')
  101. ->alias('a')
  102. ->field('a.id,a.uid,u.nickname,a.is_del')
  103. ->leftJoin('depart_user u', 'u.uid=a.uid AND u.is_del=0')
  104. ->where([
  105. 'a.is_del' => DataGroupModel::$delete_正常,
  106. // 'a.status' => DataGroupModel::$status_启用,
  107. 'a.data_group_id' => $data['id']
  108. ])
  109. ->select()
  110. ->toArray();
  111. })
  112. ->findOrEmpty()
  113. ->toArray();
  114. return app_show(0, '获取详情成功', $info);
  115. }
  116. //修改
  117. public function editDataGroup()
  118. {
  119. $param = $this->request->filter('trim')->only(['id', 'title', 'uids', 'type', 'remark']);
  120. $val = Validate::rule([
  121. 'id' => 'require|number|gt:0',
  122. 'title|用户组名称' => 'require|max:100',
  123. 'uids|组成员' => 'require|array|max:100',
  124. 'type|共享类型' => 'require|number|in:' . DataGroupModel::$type_可编辑 . ',' . DataGroupModel::$type_只读 . ',' . DataGroupModel::$type_不共享,
  125. 'remark|备注' => 'max:100',
  126. ]);
  127. if (!$val->check($param)) return error_show(1005, $val->getError());
  128. Db::startTrans();
  129. try {
  130. $res = DataGroupModel::field('id,status')
  131. ->where(['id' => $param['id'], 'is_del' => DataGroupModel::$delete_正常])
  132. ->findOrEmpty();
  133. if ($res->isEmpty()) throw new Exception('该记录不存在');
  134. $param['updatetime'] = date('Y-m-d H:i:s');
  135. DataGroupModel::where(['id' => $param['id'], 'is_del' => DataGroupModel::$delete_正常])->strict(false)->save($param);
  136. //用户组-用户集合
  137. $insert_data = $delete_data = [];
  138. foreach ($param['uids'] as $uid) {
  139. if (isset($uid['id']) && ((int)$uid['id']) != 0) {
  140. if ($uid['is_del'] == DataGroupModel::$delete_删除) $delete_data[] = $uid['id'];
  141. } else $insert_data[] = [
  142. 'data_group_id' => $param['id'],
  143. 'uid' => $uid['uid'],
  144. 'is_del' => DataGroupModel::$delete_正常,
  145. 'status' => $res->status,
  146. 'addtime' => date('Y-m-d H:i:s'),
  147. 'updatetime' => date('Y-m-d H:i:s'),
  148. ];
  149. }
  150. if ($delete_data) Db::name('data_group_userid')
  151. ->whereIn('id', $delete_data)
  152. ->where(['is_del' => DataGroupModel::$delete_正常, 'data_group_id' => $param['id']])
  153. ->update(['is_del' => DataGroupModel::$delete_删除, 'updatetime' => date('Y-m-d H:i:s')]);
  154. if ($insert_data) Db::name('data_group_userid')->insertAll($insert_data);
  155. Db::commit();
  156. return app_show(0, '修改用户组成功');
  157. } catch (Exception $exception) {
  158. Db::rollback();
  159. return error_show(1005, '修改用户组失败,' . $exception->getMessage());
  160. }
  161. }
  162. //删除
  163. public function deleteDataGroup()
  164. {
  165. $param = $this->request->filter('trim')->only(['id']);
  166. $val = Validate::rule(['id' => 'require|array|max:100']);
  167. if (!$val->check($param)) return error_show(1005, $val->getError());
  168. Db::startTrans();
  169. try {
  170. Db::name('data_group')
  171. ->whereIn('id', $param['id'])
  172. ->where(['is_del' => DataGroupModel::$delete_正常])
  173. ->update(['is_del' => DataGroupModel::$delete_删除, 'updatetime' => date('Y-m-d H:i:s')]);
  174. Db::name('data_group_userid')
  175. ->whereIn('data_group_id', $param['id'])
  176. ->where('is_del', DataGroupModel::$delete_正常)
  177. ->update(['is_del' => DataGroupModel::$delete_删除, 'updatetime' => date('Y-m-d H:i:s')]);
  178. Db::commit();
  179. return app_show(0, '删除用户组成功');
  180. } catch (Exception $exception) {
  181. Db::rollback();
  182. return error_show(1005, '删除用户组失败');
  183. }
  184. }
  185. //启/禁用用户组
  186. public function statusDataGroup()
  187. {
  188. $param = $this->request->filter('trim')->only(['id', 'status']);
  189. $val = Validate::rule([
  190. 'id' => 'require|array|max:100',
  191. 'status|状态' => 'require|number|in:' . DataGroupModel::$status_启用 . ',' . DataGroupModel::$status_禁用,
  192. ]);
  193. if (!$val->check($param)) return error_show(1005, $val->getError());
  194. $status = [0 => '禁用', 1 => '启用'];
  195. Db::startTrans();
  196. try {
  197. Db::name('data_group')
  198. ->where([
  199. ['id', 'in', $param['id']],
  200. ['is_del', '=', DataGroupModel::$delete_正常],
  201. ['status', '<>', $param['status']],
  202. ])->update(['status' => $param['status'], 'updatetime' => date('Y-m-d H:i:s')]);
  203. Db::name('data_group_userid')
  204. ->where([
  205. ['data_group_id', 'in', $param['id']],
  206. ['is_del', '=', DataGroupModel::$delete_正常],
  207. ['status', '<>', $param['status']],
  208. ])->update(['status' => $param['status'], 'updatetime' => date('Y-m-d H:i:s')]);
  209. Db::commit();
  210. return app_show(0, $status[$param['status']] . '用户组成功');
  211. } catch (Exception $exception) {
  212. Db::rollback();
  213. return error_show(1005, $status[$param['status']] . '用户组失败');
  214. }
  215. }
  216. //用户组列表(全部)
  217. public function getDataGroupListAll()
  218. {
  219. // $param = $this->request->filter('trim')->only(['status' => '', 'title' => '', 'type' => '']);
  220. $db = new DataGroupModel();
  221. $rs = $db
  222. ->alias('a')
  223. // ->leftJoin('data_group_userid b', 'b.data_group_id=a.id AND b.is_del=' . DataGroupModel::$delete_正常)
  224. // ->leftJoin('depart_user u', 'u.uid=b.uid AND u.is_del=0')
  225. // ->group('a.id')
  226. ->where('a.is_del', DataGroupModel::$delete_正常);
  227. // $val = Validate::rule([
  228. // 'status|状态' => 'number|in:' . DataGroupModel::$status_启用 . ',' . DataGroupModel::$status_禁用,
  229. // 'title|用户组名称' => 'max:100',
  230. //// 'nickname|成员名称' => 'max:100',
  231. // 'type|共享类型' => 'number|in:' . DataGroupModel::$type_可编辑 . ',' . DataGroupModel::$type_只读 . ',' . DataGroupModel::$type_不共享,
  232. // ]);
  233. // if (!$val->check($param)) return error_show(1005, $val->getError());
  234. // if ($param['status'] != '') $rs->where('a.status', $param['status']);
  235. // if ($param['title'] != '') $rs->whereLike('a.title', '%' . $param['title'] . '%');
  236. // if ($param['nickname'] != '') $rs->whereLike('u.nickname', '%' . $param['nickname'] . '%');
  237. // if ($param['type'] != '') $rs->where('a.type', $param['type']);
  238. $list = $db
  239. ->where('is_del', DataGroupModel::$delete_正常)
  240. // ->field('a.*,GROUP_CONCAT(u.nickname) nickname')
  241. ->field('id,title,status')
  242. ->order('id', 'desc')
  243. ->select()
  244. ->toArray();
  245. return app_show(0, '请求成功', $list);
  246. }
  247. }