CsmadminUtils.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. namespace addons\csmadmin\library;
  3. use addons\csmadmin\library\service\AdminService;
  4. use addons\csmadmin\library\service\CsmAdminService;
  5. use think\Request;
  6. class CsmadminUtils
  7. {
  8. public static function getSessionKey($mobile, $event)
  9. {
  10. return "csmadmin_ccode_{$event}_{$mobile}";
  11. }
  12. /**
  13. * 根据ID获取带有父组织的部门名称
  14. */
  15. public static function getDepartWithParentname($ids){
  16. $srlist = [];
  17. $llidtoname = [];
  18. $dao = new \app\admin\model\csmadmin\Depart();
  19. //先查出row的list
  20. $readyqueryids = [];
  21. $ll = $dao->where("id","in",$ids)->select();
  22. //var_dump($ll);
  23. //一次性读取出所有的根节点和父节点的row
  24. $llrow = [];
  25. foreach ($ll as $value) {
  26. $readyqueryids[] = $value->parent_id;
  27. $readyqueryids[] = $value->root_id;
  28. $llrow['ID#'.$value->id] = $value;
  29. $llidtoname['ID#'.$value->id] = $value->name;
  30. }
  31. $ll = $dao->where("id","in",$readyqueryids)->select();
  32. foreach($ll as $ii){
  33. $llidtoname['ID#'.$ii->id] = $ii->name;
  34. }
  35. //如果根节点显示名称、第三层节点 xxx\..\xxx
  36. foreach ($ids as $id) {
  37. if(isset($llrow['ID#'.$id])){
  38. $name = "";
  39. $row = $llrow['ID#'.$id];
  40. if($row->parent_id==0){
  41. $name = $row->name;
  42. }else{
  43. if($row->root_id==$row->parent_id){
  44. $name = $llidtoname['ID#'.$row->root_id] . ' \\ ' . $row->name;
  45. }else{
  46. $name = $llidtoname['ID#'.$row->root_id] . ' \\ .. \\ ' . $llidtoname['ID#'.$row->parent_id] . ' \\ ' . $row->name;
  47. }
  48. }
  49. $srlist['ID#'.$id] = $name;
  50. }
  51. }
  52. return $srlist;
  53. }
  54. /**
  55. * 注册后创建帐号
  56. *
  57. * @return boolean
  58. */
  59. public static function createAdminByApply($id, $sessionuser, $neednotify = true)
  60. {
  61. $dao = new \app\admin\model\csmadmin\Adminapply();
  62. $row = $dao->where("id", "=", $id)->find();
  63. if (! $row) {
  64. CsmUtils::error("id不存在:" . $id);
  65. }
  66. // 检测帐号是否存在
  67. $service = new AdminService();
  68. //$dao = new \app\admin\model\csmadmin\Adminapply();
  69. $row2 = $dao->where("id", "=", $id)->find();
  70. $rowkey = '';
  71. $faadminmodel = [
  72. 'updatepsdtime' => time(), // 自己注册的帐号,认为首次密码不需要强制
  73. 'createtime' => time()
  74. ];
  75. switch ($row2->applytype) {
  76. case 'email':
  77. $row2 = $service->getRowByEmail($row->email);
  78. $rowkey = $row->email;
  79. $faadminmodel['emailactive'] = 'Y';
  80. break;
  81. case 'mobile':
  82. $row2 = $service->getRowByMobile($row->mobile);
  83. $rowkey = $row->mobile;
  84. $faadminmodel['mobile'] = $row->mobile;
  85. $faadminmodel['mobileactive'] = 'Y';
  86. break;
  87. case 'wx':
  88. $row2 = $service->getRowByWx($row->wxuserid);
  89. $rowkey = $row->wxuserid;
  90. $wxuser = WxUtils::getInfoByOpenID($row->wxuserid);
  91. $faadminmodel['wxuserid'] = $row->wxuserid;
  92. $faadminmodel['wxusername'] = $wxuser['nickname'];
  93. $faadminmodel['wxsex'] = $wxuser['sex'];
  94. $faadminmodel['wxcountry'] = $wxuser['country'];
  95. $faadminmodel['wxprovince'] = $wxuser['province'];
  96. $faadminmodel['wxcity'] = $wxuser['city'];
  97. $faadminmodel['wxheadimgurl'] = $wxuser['headimgurl'];
  98. break;
  99. }
  100. if ($row2) {
  101. CsmUtils::error("帐号已经存在,无法审核通过:.{$rowkey}");
  102. }
  103. // 创建管理员帐号
  104. $username = ($row->username!=null&&$row->username!='')?$row->username:time();
  105. $params = [
  106. 'username' => $username,
  107. 'nickname' => $row->nickname,
  108. 'salt' => $row->salt,
  109. 'password' => $row->password,
  110. 'email' => $rowkey, // 如果邮箱为空,则认为是手机号码或微信id
  111. 'loginfailure' => 0,
  112. 'avatar' => '/assets/img/avatar.png',
  113. 'mobile' => $row->mobile,//v2.1.3 适配fa.1.3.4增加手机号码调整
  114. ];
  115. $admindao = new \app\admin\model\Admin();
  116. $admindao->save($params);
  117. $adminid = $admindao->getLastInsID();
  118. // insert fa_csmadmin_admin
  119. $service = new CsmAdminService();
  120. $faadminmodel['faadmin_id'] = $adminid;
  121. $service->insertOrUpdateByByAdminId($faadminmodel, $adminid);
  122. // 分配角色组
  123. $config = get_addon_config(CsmContants::$ADDONS);
  124. //$request = Request::instance();
  125. $auth_group_ids = $row->auth_group_ids;//$config["registeradmindefaultroles"];
  126. //var_dump($auth_group_ids);die();
  127. $canadmindepratmng = $config["canadmindepratmng"];
  128. $auth_group_idarray = explode(",", $auth_group_ids);
  129. if($canadmindepratmng=='Y'){
  130. //如果部门管理,则按角色授权表
  131. $dataset = [];
  132. foreach ($auth_group_idarray as $value) {
  133. $dataset[] = [
  134. 'faadmin_id' => $adminid,
  135. 'auth_group_id' => $value
  136. ];
  137. }
  138. $dao = new \app\admin\model\csmadmin\Group2admin();
  139. $dao->saveAll($dataset);
  140. }else{
  141. //按照fa的授权模式
  142. $dataset = [];
  143. foreach ($auth_group_idarray as $value) {
  144. $dataset[] = [
  145. 'uid' => $adminid,
  146. 'group_id' => $value
  147. ];
  148. }
  149. $dao = new \app\admin\model\AuthGroupAccess();
  150. $dao->saveAll($dataset);
  151. }
  152. // 更新审核状态
  153. $params = [
  154. "faadmin_id" => $adminid,
  155. "auditstatus" => "1",
  156. "audittime" => time(),
  157. "auditreturn" => "",
  158. "audituser_id" => $sessionuser ? $sessionuser->id : null,
  159. "audituser" => $sessionuser ? $sessionuser->username : null,
  160. "auth_group_ids" => $auth_group_ids,
  161. "auditreturn" => '',
  162. "updatetime" => time()
  163. ];
  164. $row->allowField(true)->save($params);
  165. // 通过发送邮件或短信
  166. if ($neednotify === true) {
  167. CsmNotify::notifyToAdminapplyid($id, '注册审核通过', '注册审核通过', []);
  168. }
  169. return true;
  170. }
  171. }