同城跑腿系统源码,买货送货不出门,办事排队不用等

随着互联网时代的快速发展,实体餐厅模式正在发生着形态的转变,越来越多的餐饮业借助互联网模式进行宣传发展。同城跑腿、网上购物和各种程序便利服务层出不穷,不仅为快节奏的生活提供了便利,也促进了经济的快速发展。

83fbeb5ac93384f57fd090f1630700c0.jpeg

搭建一套完善的同城跑腿系统源码,系统选择很重要。对于运营者来说,要想运营好一套同城跑腿系统,就要选择好的系统程序,特别是订单高峰期的时候,出现延迟或是卡顿,会影响到送餐的速度,降低用户对系统的使用感。

所以选择一套成熟的系统是非常有必要的。那么一套完善的同城跑腿系统应该具备哪些功能呢?

1、主页显示功能:在同城跑腿系统的主页,显示各种服务的主要功能,商家选择,会员详细资料,订单详情,更多个人信息设置等。

2、地理位置精准系统:同城跑腿系统需要获取客户精准的地理位置,帮助工作者提高工作效率,并减少时间消耗。

3、精细的技术框架:同城跑腿系统源码对服务器的要求很高,所以系统必须是稳定的。只有技术精细合理,才能实现分秒级的订单响应,避免多订单堆。

4、订单查询功能:当配送员收到订单时,使用者可以不定时,随时随地的在系统上查看订单详情。订单状态显示为"正在进行中的订单任务"、"订单已完成"等等,这样用户能更加清楚的了解订单状况。

5、用户评论功能:订单显示完成后,用户需要对订单进行评估评价。用户评价可以为其他用户提供一定的参考数据,同时对跑腿人员起到督促监督作用,提高工作效率。

<?php

namespace app\student\controller;

use cmf\controller\HomeBaseController;
use think\Db;

if (!session_id()) session_start();
/**
 * 登录
 */
class LoginController extends HomebaseController {

    /* 手机验证码 */
    public function getCode(){

        $rs=['code'=>0,'msg'=>'','info'=>[]];

        $data = $this->request->param();
        $type=isset($data['type']) ? $data['type']: '0';
        $mobile=isset($data['mobile']) ? $data['mobile']: '';

        $mobile=checkNull($mobile);

        if($mobile==''){
            $this->error('请输入手机号');
        }

        $where['user_login']=$mobile;

        $checkuser = checkUser($where);

        if($type==1){
            /* 忘记密码 */
            if(!$checkuser){
                $this->error('该手机号尚未注册,请先注册');
            }

            $s_a='forget_account';
            $s_c='forget_code';
            $s_e='forget_expiretime';
        }else if($type==0){
            /* 登录 */
            if(!$checkuser){
                $this->error('该手机号尚未注册,请先注册');
            }

            $s_a='login_account';
            $s_c='login_code';
            $s_e='login_expiretime';
        }else{
            /* 注册 */
            if($checkuser){
                $this->error('该手机号已注册,请更换手机号');
            }

            $s_a='reg_account';
            $s_c='reg_code';
            $s_e='reg_expiretime';
        }

        $nowtime=time();

        if(isset($_SESSION[$s_a]) && $_SESSION[$s_a]==$mobile && isset($_SESSION[$s_e]) && $_SESSION[$s_e]> $nowtime ){
            $this->error('验证码5分钟有效,请勿多次发送');
        }

        $mobile_code = random(6,1);

        //密码可以使用明文密码或使用32位MD5加密
        $result = sendCode($mobile,$mobile_code);
        if($result['code']==0){
            $_SESSION[$s_a] = $mobile;
            $_SESSION[$s_c] = $mobile_code;
            $_SESSION[$s_e] = time() +60*5;
        }else if($result['code']==667){
            $_SESSION[$s_a] = $mobile;
            $_SESSION[$s_c] = $result['msg'];
            $_SESSION[$s_e] = time() +60*5;

            $this->success("验证码为:{$result['msg']}");
        }else{
            $this->error($result['msg']);
        }

        $this->success('验证码已送');
    }


    /* 注册 */
    public function reg(){

        $data = $this->request->param();
        $name=isset($data['name']) ? $data['name']: '';
        $pass=isset($data['pass']) ? $data['pass']: '';
        $code=isset($data['code']) ? $data['code']: '';
        $name=checkNull($name);
        $pass=checkNull($pass);
        $code=checkNull($code);

        if($name==''){
            $this->error('请输入手机号');
        }
        if($code==''){
            $this->error('请输入验证码');
        }
        if($pass==''){
            $this->error('请输入密码');
        }

        if( !isset($_SESSION['reg_account']) || !isset($_SESSION['reg_code']) ){
            $this->error('请先获取验证码');
        }

        if( !isset($_SESSION['reg_expiretime']) || $_SESSION['reg_expiretime'] < time() ){
            $this->error('验证码已过期');
        }

        if($name!=$_SESSION['reg_account']){
            $this->error('手机号码不一致');
        }

        if($code!=$_SESSION['reg_code']){
            $this->error('验证码错误');
        }

        $user_pass=cmf_password($pass);

        $avatar='/default.png';
        $avatar_thumb='/default_thumb.png';

        $default=array(
            'user_login'=>$name,
            'user_pass' =>$user_pass,
            'signature' =>'',
            'avatar' =>$avatar,
            'avatar_thumb' =>$avatar_thumb,
            'last_login_ip' =>get_client_ip(),
            'create_time' => time(),
            'user_status' => 1,
            'gradeid'=>0
        );


        $result=Db::name('users')->insert($default);

        if(!$result){
            $this->error('注册失败');
        }


        $userinfo=Db::name('users')->where(['user_login'=>$name])->find();

        $this->handleInfo($userinfo);

        $this->success('注册成功');

    }

    /* 密码登录 */
    public function loginbypass(){

        $data = $this->request->param();
        $name=isset($data['name']) ? $data['name']: '';
        $pass=isset($data['pass']) ? $data['pass']: '';
        $name=checkNull($name);
        $pass=checkNull($pass);

        if($name==''){
            $this->error('请输入手机号');
        }
        if($pass==''){
            $this->error('请输入密码');
        }


        $user_pass=cmf_password($pass);

        $where['user_login']=$name;
        $userinfo=Db::name('users')->where($where)->find();

        if(!$userinfo || $userinfo['user_pass'] != $user_pass){
            $this->error('账号或密码错误');
        }

        $this->handleInfo($userinfo);

        $this->success('登陆成功');

    }

    /* 验证码登录 */
    public function loginbycode(){

        $data = $this->request->param();
        $name=isset($data['name']) ? $data['name']: '';
        $code=isset($data['code']) ? $data['code']: '';
        $name=checkNull($name);
        $code=checkNull($code);

        if($name==''){
            $this->error('请输入手机号');
        }
        if($code==''){
            $this->error('请输入验证码');
        }

        if( !isset($_SESSION['login_account']) || !isset($_SESSION['login_code']) ){
            $this->error('请先获取验证码');
        }

        if( !isset($_SESSION['login_expiretime']) || $_SESSION['login_expiretime'] < time() ){
            $this->error('验证码已过期');
        }

        if($name!=$_SESSION['login_account']){
            $this->error('手机号码不一致');
        }

        if($code!=$_SESSION['login_code']){
            $this->error('验证码错误');
        }

        $where['user_login']=$name;
        $userinfo=Db::name('users')->where($where)->find();


        $this->handleInfo($userinfo);

        $this->success('登陆成功');
    }

    public function forget(){

        $data = $this->request->param();
        $name=isset($data['name']) ? $data['name']: '';
        $pass=isset($data['pass']) ? $data['pass']: '';
        $code=isset($data['code']) ? $data['code']: '';
        $name=checkNull($name);
        $pass=checkNull($pass);
        $code=checkNull($code);

        if($name==''){
            $this->error('请输入手机号');
        }
        if($code==''){
            $this->error('请输入验证码');
        }

        if($pass==''){
            $this->error('请输入密码');
        }


        if( !isset($_SESSION['forget_account']) || !isset($_SESSION['forget_code']) ){
            $this->error('请先获取验证码');
        }

        if( !isset($_SESSION['forget_expiretime']) || $_SESSION['forget_expiretime'] < time() ){
            $this->error('验证码已过期');
        }

        if($name!=$_SESSION['forget_account']){
            $this->error('手机号码不一致');
        }

        if($code!=$_SESSION['forget_code']){
            $this->error('验证码错误');
        }

        $check = checkPass($pass);

        if(!$check){
            $this->error('密码为6-20位数字与字母组合');
        }

        $user_pass=cmf_password($pass);

        $where['user_login']=$name;
        $ifreg=DB::name('users')->field("id")->where($where)->find();
        if(!$ifreg){
            $this->error('该帐号不存在');
        }
        $result=DB::name('users')->where('id',$ifreg['id'])->setField("user_pass",$user_pass);
        if($result===false){
            $this->error('重置失败,请重试');
        }
        $this->success('操作成功');
    }
    /* 退出 */
    public function logout(){

        session('student',null);

        $this->success('退出成功');
    }

    //qq第三方登录========
    public function qq()
    {
        $href=$_SERVER['HTTP_REFERER'];
        cookie('href',$href,3600000);
        cookie('identity','student',3600000);
        $referer = $_SERVER['HTTP_REFERER'];
        session('login_referer', $referer);

        require_once CMF_ROOT.'sdk/qqApi/qqConnectAPI.class.php';

        $qc1 = new \QC();
        $qc1->qq_login();
    }
    /**
    微信登陆
     **/
    public function weixin()
    {
        $configpri=getConfigPri();

        //-------配置
        $href=$_SERVER['HTTP_REFERER'];
        cookie('href',$href,3600000);
        $AppID = $configpri['wx_appid_pc'];
        $AppSecret = $configpri['wx_appsecret_pc'];
        $callback  = get_upload_path('/student/login/weixin_callback'); //回调地址
        //微信登录
        if (!session_id()) session_start();
        //-------生成唯一随机串防CSRF攻击
        $state  = md5(uniqid(rand(), TRUE));
        $_SESSION["wx_state"]    = $state; //存到SESSION
        $callback = urlencode($callback);
        $wxurl = "https://open.weixin.qq.com/connect/qrconnect?appid=".$AppID."&redirect_uri={$callback}&response_type=code&scope=snsapi_login&state={$state}#wechat_redirect";
        header("Location: $wxurl");
    }
    /**
    微信登陆回调
     **/
    public function weixin_callback()
    {
        $configpri=getConfigPri();
        $code=isset($_GET['code']) ? $_GET['code']:'';
        if($code!="")
        {
            $AppID = $configpri['wx_appid_pc'];
            $AppSecret = $configpri['wx_appsecret_pc'];
            $url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$AppID.'&secret='.$AppSecret.'&code='.$code.'&grant_type=authorization_code';
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
            curl_setopt($ch, CURLOPT_URL, $url);
            $json =  curl_exec($ch);
            curl_close($ch);
            $arr=json_decode($json,1);

            if(isset($arr['errcode'])){
                $this->error($arr['errmsg']);
            }

            //得到 access_token 与 openid
            $url='https://api.weixin.qq.com/sns/userinfo?access_token='.$arr['access_token'].'&openid='.$arr['openid'].'&lang=zh_CN';
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
            curl_setopt($ch, CURLOPT_URL, $url);
            $json =  curl_exec($ch);
            curl_close($ch);
            $arr=json_decode($json,1);
            //得到 用户资料
            // $openid=$arr['openid'];
            $openid=$arr['unionid'];

            $type='2';
            $openid=$openid;
            $nickname=$arr['nickname'];
            $avatar=$arr['headimgurl'];

            $this->loginByThird($type,$openid,$nickname,$avatar);

        }
    }

    protected function loginByThird($type,$openid,$nickname,$avatar){
        $userinfo=DB::name('users')
            //->where("openid='{$openid}' and login_type='{$type}'")
            ->where('openid',$openid)
            ->where('login_type',$type)
            ->find();

        if(!$userinfo){
            $nowtime = time();
            /* 注册 */
            $type_a=['web','qq','wx','sina','facebook','twitter'];
            $user_login=$type_a[$type].'_'.$nowtime.rand(100,999);

            if(!$nickname){
                //$nickname=\PhalApi\T('用户').substr($openid,-3);
                $nickname='';
            }

            $data=array(
                'user_login' => $user_login,
                'user_nickname' =>$nickname,
                "source"=>'web',
                "openid"=>$openid,
                "login_type"=>$type,
            );

            if($avatar){
                $avatar=htmlspecialchars_decode($avatar);
                $avatar_thumb=$avatar;

                $data['avatar']=$avatar;
                $data['avatar_thumb']=$avatar_thumb;
            }

            $user_pass='edu'.$nowtime;
            $user_pass=cmf_password($user_pass);

            $avatar='/default.png';
            $avatar_thumb='/default_thumb.png';

            $default=array(
                'user_pass' =>$user_pass,
                'signature' =>'',
                'avatar' =>$avatar,
                'avatar_thumb' =>$avatar_thumb,
                'last_login_ip' =>get_client_ip(),
                'create_time' => $nowtime,
                'user_status' => 1,
            );

            if(isset($data['user_pass'])){
                $data['user_pass']=cmf_password($data['user_pass']);
            }
            $insert=array_merge($default,$data);


            $rs=Db::name('users')->insertGetId($insert);
            $id=$rs;


            $userinfo=Db::name('users')
                ->where(['id'=>$id])
                ->find();
        }

        $this->handleInfo($userinfo);

        $href=cookie('href');
        echo "<meta http-equiv=refresh content='0; url=$href'>";
        exit;
    }
    /* 更新token 登陆信息 */
    protected function handleInfo($userinfo) {
        if(!$userinfo){
            $this->error('账号未注册');
        }

        if($userinfo['user_status']==0){
            $this->error('账号已被禁用');
        }

        $token=md5(md5($userinfo['id'].$userinfo['user_login'].time()));
        $userinfo['token']=$token;


        $this->updateToken($userinfo['id'],$userinfo['token']);

        $gradeid = session('student.gradeid');
        $gradeinfo = Db::name('course_grade')->where(['id'=>$gradeid])->find();

        if($gradeinfo){
            $gradename = $gradeinfo['name'];
        }else{
            $gradename = '';
        }

        $userinfo['gradename'] = $gradename;
        session('student',$userinfo);


    }
    /* 更新token 登陆信息 */
    protected function updateToken($uid,$token) {
        $nowtime=time();

        $expiretime=$nowtime+60*60*24*300;



        $ip = get_client_ip();
        $ipinfo=Db::name('ip_garde')
            ->where(['ip'=>$ip])
            ->find();

        $gradeid = 0;
        if($ipinfo){
            $gradeid = $ipinfo['gardeid'];
        }

        DB::name("users")
            ->where("id",$uid)
            ->update(array('last_login_time' => $nowtime, "last_login_ip"=>get_client_ip(0,true),'gradeid'=>$gradeid ));

        $isok=DB::name("users_token")
            ->where("user_id",$uid)
            ->update(array("token"=>$token, "expire_time"=>$expiretime , "create_time"=>$nowtime ));
        if(!$isok){
            DB::name("users_token")
                ->insert(array("user_id"=>$uid,"token"=>$token, "expire_time"=>$expiretime , "create_time"=>$nowtime ));
        }

        $token_info=array(
            'uid'=>$uid,
            'token'=>$token,
            'expire_time'=>$expiretime,
        );

        setcaches("token_".$uid,$token_info);
        /* 删除PUSH信息 */
        DB::name("users_pushid")->where("uid",$uid)->delete();

        return 1;
    }
}


配送的高效率和高质量是运行跑腿系统源码的成功之处。作为团队运营者,需要了解同城跑腿者中可能遇到的各种复杂问题,做出正确的应对措施,并定期对团队人员进行培训考试,给他们分享配送技能,保证在物品完好准确送达的同时,提高配送效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值