| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595 |
- <?php
- namespace addons\qingdong\controller;
- use addons\qingdong\model\Contacts;
- use addons\qingdong\model\Contract;
- use addons\qingdong\model\Customer;
- use addons\qingdong\model\Flow;
- use addons\qingdong\model\Leads;
- use addons\qingdong\model\Receivables;
- use addons\qingdong\model\Remind;
- use addons\qingdong\model\Staff as StaffModel;
- use addons\qingdong\model\StaffDepartment;
- use addons\qingdong\library\Wechat;
- use addons\qingdong\model\Achievement;
- use addons\qingdong\model\Record;
- use fast\Http;
- use think\Exception;
- use think\Log;
- use think\Validate;
- /**
- * * 操作文档:https://doc.fastadmin.net/qingdong
- * 软件介绍:https://www.fastadmin.net/store/qingdong.html
- * 售后微信:qingdong_crm
- * 员工登录 注册接口
- */
- class Staff extends StaffApi
- {
- protected $noNeedLogin = ['test', 'wxLogin', 'login','logintest'];
- protected $noNeedRight = ['getInfo', 'editInfo', "use_phone"];
- public function _initialize()
- {
- parent::_initialize();
- }
- //是否登录
- public function isLogin()
- {
- $this->success('已登录', ['userinfo' => $this->auth->getUserinfo()]);
- }
- /**
- * 会员登录
- *
- * @ApiMethod (POST)
- * @param string $account 账号
- * @param string $password 密码
- */
- public function login()
- {
- $account = $this->request->post('account');
- $password = $this->request->post('password');
- if (!$account || !$password) {
- $this->error(__('Invalid parameters'));
- }
- $ret = $this->auth->login($account, $password);
- if ($ret) {
- $data = ['userinfo' => $this->auth->getUserinfo()];
- $this->success(__('Logged in successful'), $data);
- } else {
- $this->error($this->auth->getError());
- }
- }
- //获取个人基本信息
- public function getInfo()
- {
- $staff = StaffModel::where(['id' => $this->auth->id])->with(['department', 'parent'])->find();
- $group_ids=explode(',',$staff['group_ids']);
- $staff['role_type'] = 1;//基础和团队
- if (in_array(1, $group_ids)) {//超级管理员
- $staff['role_type'] = 9;
- }
- $this->success('请求成功', $staff);
- }
- //员工绑定信息
- public function staffBind(){
- $staff=StaffModel::get($this->auth->id);
- $data=[
- 'is_bind_wechat'=>$staff['openid']?1:($staff['wx_openid']?1:0)
- ];
- $this->success('请求成功',$data);
- }
- //绑定微信
- public function wechatBind(){
- $type=input('type');//applet小程序 web 网页授权
- $code = input('code');
- if($type == 'web'){
- $wechat = new Wechat('wxOfficialAccount');
- if(empty($wechat->config['app_id'])){
- $this->error('微信公众号appid未设置');
- }
- if(empty($wechat->config['secret'])){
- $this->error('微信公众号secret未设置');
- }
- $decryptSession = $wechat->getOfficialAccessToken($code);
- if (isset($decryptSession['errcode']) && $decryptSession['errcode'] != 0) {
- $this->error(__('解析失败!'));
- }
- $openid = $decryptSession['openid'];
- $unionid = $decryptSession['unionid'] ?? '';
- Log::info(json_encode($decryptSession,JSON_UNESCAPED_UNICODE));
- //判断用户是否存在
- $staff = StaffModel::where(['wx_openid' => $openid])->find();
- if($staff){
- $this->error('该微信号已绑定账号');
- }
- $staffModel=new StaffModel();
- $result=$staffModel->save(['wx_openid'=>$openid,'unionid'=>$unionid],['id'=>$this->auth->id]);
- if($result){
- $this->success('绑定成功');
- }
- $this->error('绑定失败');
- }elseif($type == 'applet'){
- $wechat = new Wechat('wxMiniProgram');
- if(empty($wechat->config['app_id'])){
- $this->error('微信小程序appid未设置');
- }
- if(empty($wechat->config['secret'])){
- $this->error('微信小程序secret未设置');
- }
- $decryptSession = $wechat->code($code);
- if (isset($decryptSession['errcode']) && $decryptSession['errcode'] != 0) {
- $this->error(__('解析失败!'));
- }
- $openid = $decryptSession['openid'];
- $unionid = $decryptSession['unionid'] ?? '';
- //判断用户是否存在
- $staff = StaffModel::where(['openid' => $openid])->find();
- if($staff){
- $this->error('该微信号已绑定账号');
- }
- $staffModel=new StaffModel();
- $result=$staffModel->save(['openid'=>$openid,'unionid'=>$unionid],['id'=>$this->auth->id]);
- if($result){
- $this->success('绑定成功');
- }
- $this->error('绑定失败');
- }
- }
- //解绑微信
- public function unboundWechat()
- {
- $staffId = $this->auth->id;
- $model = new StaffModel();
- $staff = $model->where(['id' => $staffId])->find();
- if (empty($staff)) {
- $this->error('员工不存在');
- }
- if ($model->isUpdate(true)->save(['id' => $staffId, 'wx_openid' => null,
- 'unionid' => null, 'openid' => null])) {
- $this->success('解绑微信成功');
- }
- $this->error('操作失败');
- }
- //修改个人基本信息
- public function editInfo()
- {
- $name = input('name');
- $img = input('img');
- $email = input('email');
- $sex = input('sex');
- $num = input('num');
- $post = input('post');
- $mobile = input('mobile');
- $staffs = StaffModel::where(array('id' => $this->auth->id))->find();
- $staffs->mobile = $mobile;
- $staffs->img = $img;
- $staffs->email = $email;
- $staffs->sex = $sex;
- $staffs->num = $num;
- $staffs->post = $post;
- $staffs->updatetime = time();
- $result = $staffs->save();
- if (!$result) {
- $this->error('修改失败');
- }
- $this->success('修改成功');
- }
- //授权手机号
- public function use_phone()
- {
- $code = $this->request->post('code','',null);
- $encryptedData = $this->request->post('encryptedData','',null);
- $iv = $this->request->post('iv','',null);
- $config = new Wechat('wxMiniProgram');
- $url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $config->config['app_id'] . "&secret=" . $config->config['secret'] . "&js_code=" . $code . "&grant_type=authorization_code";
- $user = curl_getinfo($url);
- $arr = json_decode($user, true);
- if (isset($arr['errcode']) && $arr['errcode'] != 0) {
- $this->error('操作失败!');
- }
- if (!isset($arr['openid']) || !isset($arr['session_key'])) {
- $this->error('授权失败,请重新授权!');
- }
- $openId = $arr['openid'];
- $pc = new Wxbizdatacrypt($config->config['app_id'], $arr['session_key']);
- $errCode = $pc->decryptData($encryptedData, $iv, $data);
- if ($errCode != 0) {
- $this->error('授权失败,请重新授权!');
- }
- $decryptUserInfo = json_decode($data, true);
- if (isset($decryptUserInfo['phoneNumber']) && !empty($decryptUserInfo['phoneNumber'])) {
- $user_id = $this->auth->id;
- $userInfo = StaffModel::where(array('id' => $user_id))->update(array('mobile' => $decryptUserInfo['phoneNumber']));
- if ($userInfo === false) {
- $this->error('绑定失败!');
- }
- $data = ['mobile' => $decryptUserInfo['phoneNumber']];
- $this->success('绑定成功', $data);
- } else {
- $this->error('授权失败!');
- }
- }
- //获取下级员工列表
- public function getStaffList()
- {
- $ids = StaffModel::getLowerStaffId();
- $staff = StaffModel::where([
- 'id' => ['in', $ids],
- 'status' => 1
- ])->with(['parent'])->field('id,name,nickname,img,num,mobile,post,parent_id')->select();
- $this->success('请求成功', $staff);
- }
- //获取员工详情
- public function getStaffDetail()
- {
- $id = input('id');
- if (empty($id)) {
- $this->error('员工不存在');
- }
- $staff = StaffModel::with(['department', 'parent'])->where([
- 'id' => $id,
- ])->find();
- $this->success('请求成功', $staff);
- }
- //待审核员工列表
- public function getCheckStaffList()
- {
- $staff = StaffModel::where([
- 'status' => 0,
- 'name' => ['neq', '']
- ])->field('id,name,nickname,img,num,mobile,post,status')->select();
- $this->success('请求成功', $staff);
- }
- //修改员工信息
- public function updateStaff()
- {
- $name = input('name', '');
- $img = input('img', '');
- $email = input('email', '');
- $sex = input('sex', 0);
- $num = input('num', '');
- $post = input('post', '');
- $parent_id = input('parent_id', 0);
- $id = input('id', 0, 'intval');
- if (StaffModel::where(['id' => $id])->update([
- 'name' => $name,
- 'img' => $img,
- 'email' => $email,
- 'sex' => $sex,
- 'num' => $num,
- 'post' => $post,
- 'parent_id' => $parent_id,
- 'updatetime' => time()
- ]) == false) {
- $this->error('修改失败');
- }
- $this->success('修改成功');
- }
- //审核员工成功
- public function checkStaffSuccess()
- {
- $name = input('name', '');
- $img = input('img', '');
- $email = input('email', '');
- $sex = input('sex', 0);
- $role = input('role', 0);
- $num = input('num', '');
- $post = input('post', '');
- $mobile = input('mobile', '');
- $department_id = input('department_id', 0);
- $parent_id = input('parent_id', 0);
- $id = input('id', 0, 'intval');
- if (StaffModel::where(['id' => $id, 'status' => 0])->find() == false) {
- $this->error('待审核员工不存在');
- }
- if (empty($department_id)) {
- $this->error('请选择员工部门!');
- }
- if (StaffModel::where(['id' => $id])->update([
- 'name' => $name,
- 'img' => $img,
- 'email' => $email,
- 'sex' => $sex,
- 'num' => $num,
- 'role' => $role,
- 'mobile' => $mobile,
- 'post' => $post,
- 'parent_id' => $parent_id,
- 'department_id' => $department_id,
- 'status' => 1,
- 'updatetime' => time()
- ]) == false) {
- $this->error('审核失败');
- }
- $this->success('审核成功');
- }
- //审核员工拒绝
- public function checkStaffError(){
- $id = input('id');
- if (StaffModel::where(['id' => $id, 'status' => 0])->find() == false) {
- $this->error('待审核员工不存在');
- }
- if (StaffModel::where(['id' => $id, 'status' => 0])->update(['deletetime' => time()]) == false) {
- $this->error('拒绝失败');
- }
- $this->success('审核成功');
- }
- //获取员工统计
- public function getStaffStatistics()
- {
- $id = input('id');
- if (empty($id)) {
- $this->error('员工不存在');
- }
- $date = input('date', date('Y-m'));
- //月底
- $endDate = strtotime('+1 month', strtotime(date($date . '-1')));
- $date = strtotime($date);
- //客户 线索 联系人 合同 回款 跟进次数 处理审批
- $leads = Leads::where([
- 'create_staff_id' => $id,
- 'createtime' => ['between', [$date, $endDate]],
- ])->count();
- $customer = Customer::where([
- 'create_staff_id' => $id,
- 'createtime' => ['between', [$date, $endDate]],
- ])->count();
- $contacts = Contacts::where([
- 'create_staff_id' => $id,
- 'createtime' => ['between', [$date, $endDate]],
- ])->count();
- $contract = Contract::where([
- 'create_staff_id' => $id,
- 'createtime' => ['between', [$date, $endDate]],
- 'check_status' => 2
- ])->count();
- $contract_money = Contract::where([
- 'create_staff_id' => $id,
- 'createtime' => ['between', [$date, $endDate]],
- 'check_status' => 2
- ])->sum('money');
- $receivables = Receivables::where([
- 'create_staff_id' => $id,
- 'createtime' => ['between', [$date, $endDate]],
- 'check_status' => 2
- ])->count();
- $receivables_money = Receivables::where([
- 'create_staff_id' => $id,
- 'createtime' => ['between', [$date, $endDate]],
- 'check_status' => 2
- ])->sum('money');
- $record = Record::where([
- 'create_staff_id' => $id,
- 'createtime' => ['between', [$date, $endDate]],
- ])->count();
- $field = Achievement::getMonthField(date('Y-m', $date));
- $contractAchievement = Achievement::where([
- 'year' => date('Y', $date),
- 'type' => 3,
- 'obj_id' => $id,
- 'status' => 1
- ])->value($field);
- $receivablesAchievement = Achievement::where([
- 'year' => date('Y', $date),
- 'type' => 3,
- 'obj_id' => $id,
- 'status' => 2
- ])->value($field);
- $this->success('请求成功', [
- 'leads' => $leads,
- 'customer' => $customer,
- 'contacts' => $contacts,
- 'contract' => $contract,
- 'contract_money' => $contract_money,
- 'receivables' => $receivables,
- 'receivables_money' => $receivables_money,
- 'record' => $record,
- 'contractAchievement' => $contractAchievement ?: 0,
- 'receivablesAchievement' => $receivablesAchievement ?: 0,
- ]);
- }
- //获取员工所属客户
- public function getStaffCustomer()
- {
- $id = input('id');
- $limit = input("limit/d", 10);
- $row = StaffModel::get($id);
- if (empty($row)) {
- $this->error('员工不存在');
- }
- $where = [];
- $where['owner_staff_id'] = $id;
- $list = Customer::where($where)->with([
- 'ownerStaff',
- 'contacts'
- ])->field('id,name,next_time,owner_staff_id,level,follow')->order('id desc')->paginate($limit);
- $this->success('请求成功', $list);
- }
- //获取部门列表
- public function getDepartment()
- {
- $this->success('请求成功', StaffDepartment::getDepartmentList());
- }
- //获取上级列表
- public function getParentList()
- {
- $id = input('id');
- if (empty($id)) {
- $this->error('参数错误');
- }
- $this->success('请求成功', StaffModel::getList([$id]));
- }
- /**
- * 获取用户上级IDs
- */
- public function getStaffIds()
- {
- // record 跟进 contract 合同 consume 费用 receivables 回款
- $type = input('type');
- $remind=Remind::where(['type'=>$type])->find();
- if($remind){
- $staff = StaffModel::where(['id' => ['in', $remind['staff_ids']]])->field('id,name,img')->select();
- $this->success('请求成功', $staff);
- }
- $pid = StaffModel::where(['id' => $this->auth->id])->value('parent_id');
- $pids = [$pid];
- $staff = StaffModel::where(['id' => ['in', $pids]])->field('id,name,img')->select();
- $this->success('请求成功', $staff);
- }
- /**
- * 获取审批列表
- */
- public function getsteplist()
- {
- // record 跟进 contract 合同 consume 费用 receivables 回款 formapproval_1 审批
- $type = input('type');
- //获取审批
- $data = Flow::getsteplist($type);
- if (empty($data)) {
- $this->error('无可用审批流,请联系管理员');
- }
- $this->success('请求成功', $data);
- }
- /**
- * 获取审批详情
- */
- public function getstepdetail()
- {
- // record 跟进 contract 合同 consume 费用 receivables 回款
- $type = input('type');
- $relation_id=input('relation_id');
- $data = Flow::getstepdetail($type,$relation_id);
- if (empty($data)) {
- $this->error('无可用审批流,请联系管理员');
- }
- $this->success('请求成功', $data);
- }
- //禁用账号
- public function disable_user()
- {
- $id = input('id');
- $status = 2;
- $model = new StaffModel();
- $staff = $model->where(['id' => $id])->find();
- if (empty($staff)) {
- $this->error('员工不存在');
- }
- if ($model->isUpdate(true)->save(['id' => $id, 'status' => $status])) {
- $this->success('操作成功');
- }
- $this->error('操作失败');
- }
- /**
- * 退出登录
- * @ApiMethod (POST)
- */
- public function logout()
- {
- if (!$this->request->isPost()) {
- $this->error(__('Invalid parameters'));
- }
- $this->auth->logout();
- $this->success(__('Logout successful'));
- }
- /**
- * 修改密码
- */
- public function changepwd()
- {
- if ($this->request->isPost()) {
- $oldpassword = $this->request->post("oldpassword");
- $newpassword = $this->request->post("newpassword");
- $renewpassword = $this->request->post("renewpassword");
- $rule = [
- 'oldpassword' => 'require|length:6,30',
- 'newpassword' => 'require|length:6,30',
- 'renewpassword' => 'require|length:6,30|confirm:newpassword',
- ];
- $msg = [
- 'renewpassword.confirm' =>'两次输入的密码不一致'
- ];
- $data = [
- 'oldpassword' => $oldpassword,
- 'newpassword' => $newpassword,
- 'renewpassword' => $renewpassword,
- ];
- $field = [
- 'oldpassword' => '旧密码',
- 'newpassword' => '新密码',
- 'renewpassword' => '确认密码'
- ];
- $validate = new Validate($rule, $msg, $field);
- $result = $validate->check($data);
- if (!$result) {
- $this->error(__($validate->getError()));
- return false;
- }
- $ret = $this->auth->changepwd($newpassword, $oldpassword);
- if ($ret) {
- $this->success('修改密码成功');
- } else {
- $this->error($this->auth->getError());
- }
- }
- }
- //直接体验
- public function logintest()
- {
- $staff = StaffModel::where([])->order('id asc')->find();
- if(!$staff){
- $this->error('员工不存在');
- }
- $stafflogin= $this->auth->direct($staff['id']);
- if ($stafflogin) {
- $data = ['userinfo' => $this->auth->getUserinfo()];
- $this->success(__('Logged in successful'), $data);
- } else {
- $this->error('登录失败');
- }
- }
- }
|