Пример #1
0
    def bind_phone(self):
        """绑定手机"""
        code = self.args["code"]
        phone = Emoji.filter_emoji(self.args["phone"].strip())

        if not self.current_user:
            return self.write_error(401)

        if len(phone) != 11:
            return self.send_fail("请填写正确的手机号")

        check_msg_res = check_msg_token(phone, code, use="bind")
        if not options.debug and not check_msg_res:
            return self.send_fail("验证码过期或者不正确")

        # 尝试合并账号
        success, errmsg = AuthFunc.merge_passport(
            self.session, self.current_user.passport_id, phone)
        if success:
            self.clear_current_user()
            return self.send_success()
        elif errmsg != "USE UPDATE":
            return self.send_fail(errmsg)

        # 尝试使用 UPDATE
        success, errmsg = AuthFunc.update_passportinfo(
            self.current_user.passport_id, "phone", phone)
        if not success:
            if errmsg == "NOT EXIST":
                return self.send_fail("账户不存在,请联系森果客服 400-027-0135")
            elif errmsg == "SAME VALUE":
                return self.send_fail("无需重复绑定")
            elif errmsg == "ALREADY BIND":
                return self.send_fail("该手机号已绑定,请更换手机号绑定或联系森果客服 400-027-0135")
            else:
                return self.send_fail("绑定失败,请联系森果客服 400-027-0135")

        self.current_user.phone = phone

        # 更新门店联系人 ID
        contacts = self.session.query(models.ShopContact) \
            .filter(models.ShopContact.phone == phone) \
            .all()
        if contacts:
            for contact in contacts:
                contact.account_id = self.current_user.id

        self.session.commit()
        self.clear_current_user()
        return self.send_success()
Пример #2
0
    def bind_wx(self):
        """绑定微信"""
        scene_id = self.args['scene_id']

        wx_userinfo = pf_redis.get('pf_scene_openid:%s' % scene_id)
        if not wx_userinfo:
            return self.send_success(done=False)
        wx_userinfo = json.loads(wx_userinfo.decode())
        wx_unionid = wx_userinfo["unionid"]

        # 绑定微信
        if len(str(scene_id)) == 8:
            bind_key = "ph_scene_bind_account:%s" % scene_id
            bind_user_id = redis.get(bind_key) or -1
            user = models.AccountInfo.get_by_id(self.session, bind_user_id)

            # scene_id 不对或者 Redis 的 key 过期了
            if not user or not user.passport_id:
                return self.send_fail("请刷新页面后重试")

            success, errmsg = AuthFunc.update_passportinfo(
                user.passport_id, "wx_unionid", wx_unionid)
            if not success:
                if errmsg == "NOT EXIST":
                    return self.send_fail("账户不存在,请联系森果客服 400-027-0135")
                elif errmsg == "SAME VALUE":
                    # 重复绑定是为了取微信信息
                    pass
                elif errmsg == "ALREADY BIND":
                    return self.send_fail("该微信已被其他账户绑定")
                else:
                    return self.send_fail("绑定失败,请联系森果客服 400-027-0135")

            redis.delete(bind_key)
        else:
            return self.send_fail("scene_id 无效")

        pf_redis.delete('pf_scene_openid:%s' % scene_id)
        redis.delete("ph_scene_bind_account:%s" % scene_id)

        # 更新微信信息
        AuthFunc.update_through_wx(self.session,
                                   wx_userinfo,
                                   user,
                                   action="bind")
        return self.send_success(done=True)
Пример #3
0
    def post(self):
        name = self.args["name"]
        city_code = self.args["city_code"]
        address = self.args["address"]
        phone = self.args["phone"]
        code = self.args["code"]

        province_code = ProvinceCityFunc.city_to_province(city_code)
        if not province_code:
            return self.send_fail("请填写正确的省份")

        if len(phone) != 11:
            return self.send_fail("请填写正确的手机号")

        check_msg_res = check_msg_token(phone, code, use="station_register")
        if not options.debug and not check_msg_res:
            return self.send_fail("验证码过期或者不正确")

        # 检查用于注册的手机号
        success, errmsg = AuthFunc.update_passportinfo(
            self.current_user.passport_id, "phone", phone)
        if not success:
            if errmsg == "NOT EXIST":
                return self.send_fail("请登录后重试")
            elif errmsg == "SAME VALUE":
                pass
            elif errmsg == "ALREADY BIND":
                return self.send_fail("该手机号已被注册")
        self.current_user.phone = phone

        existed_station = self.session.query(models.TransferStation) \
            .join(models.Staff, models.Staff.station_id == models.TransferStation.id) \
            .filter(models.Staff.super_admin_status == 1,
                    models.Staff.status == 0,
                    models.Staff.account_id == self.current_user.id) \
            .first()
        if existed_station:
            return self.send_fail("您已经是 {} 的超级管理员了".format(
                existed_station.name))

        # 添加新中转站
        new_station = models.TransferStation(
            name=name,
            province=province_code,
            city=city_code,
            address=address,
            creator_id=self.current_user.id,
        )
        self.session.add(new_station)
        self.session.flush()

        # 添加默认超管
        super_admin = models.Staff(
            station_id=new_station.id,
            account_id=self.current_user.id,
            super_admin_status=1,
            admin_status=1,
            purchaser_status=0,
            date_onboarding=datetime.date.today(),
        )
        super_admin.set_admin_permissions(None, grant_all=True)
        super_admin.set_purchaser_permissions(None, grant_all=True)
        self.session.add(super_admin)

        # 添加设置项
        config = models.Config(id=new_station.id)
        self.session.add(config)

        self.session.commit()
        self.clear_current_user()
        return self.send_success()