async def post(self): res = dict(code=0) name = self.get_argument('name') sex = int(self.get_argument('sex', 1)) email = self.get_argument('email') mobile = self.get_argument('mobile') birthday = self.get_argument('birthday') province_code = self.get_argument('province_code') # 省份编码 city_code = self.get_argument('city_code') # 城市编码 vehicle_code = self.get_argument('vehicle_code') # 车型编号 purchase_datetime = self.get_argument('purchase_datetime') # 车辆购买时间 content = self.get_argument('content') # 备注 status = int(self.get_argument('status', STATUS_USER_ACTIVE)) if name and mobile and email: # 校验用户名 if mobile: exist_count = await Member.count(dict(mobile=mobile)) if exist_count: res['code'] = -2 return res if email: email_valid = re.match( r"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", email) exist_count = await Member.count(dict(email=email)) if exist_count: res['code'] = -3 return res if not email_valid: res['code'] = -4 return res if mobile: member = Member() member.mobile = mobile member.code = get_increase_code(KEY_INCREASE_MEMBER_CODE) if email: member.email = email else: member = Member() member.email = email member.code = get_increase_code(KEY_INCREASE_MEMBER_CODE) if name: member.name = name member.sex = sex if birthday: member.birthday = str2datetime(birthday, '%Y-%m-%d') if vehicle_code: vehicle = await Vehicle.find_one( dict(code=vehicle_code, record_flag=1)) if vehicle: member.needless['vehicle_title'] = vehicle.title member.needless['vehicle_brand'] = vehicle.needless.get( 'brand') member.needless['vehicle_category'] = vehicle.needless.get( 'category') member.needless['vehicle_series'] = vehicle.needless.get( 'series') member.needless['vehicle_config'] = vehicle.needless.get( 'config') member.needless['vehicle_colour'] = vehicle.needless.get( 'colour') member.needless['vehicle_displace'] = vehicle.needless.get( 'displace') else: for attr in [ 'vehicle_brand', 'vehicle_category', 'vehicle_series', 'vehicle_config', 'vehicle_colour', 'vehicle_displace', 'vehicle_title' ]: try: member.needless.pop(attr) except KeyError: pass member.content = content member.status = status # 冗余信息 if province_code: province = await AdministrativeDivision.find_one( dict(parent_code=None, code=province_code)) if province: member.needless['province'] = province.title city = await AdministrativeDivision.find_one( dict(parent_code=province_code, code=city_code)) if city: member.needless['city'] = city.title member.province_code = province_code member.city_code = city_code member.source = SOURCE_TYPE_MEMBER_SYSTEM if vehicle_code: if vehicle_code: vehicle = await Vehicle.find_one( dict(code=vehicle_code, record_flag=1)) if vehicle: member.needless['vehicle_title'] = vehicle.title member.needless[ 'vehicle_brand'] = vehicle.needless.get('brand') member.needless[ 'vehicle_category'] = vehicle.needless.get( 'category') member.needless[ 'vehicle_series'] = vehicle.needless.get('series') member.needless[ 'vehicle_config'] = vehicle.needless.get('config') member.needless[ 'vehicle_colour'] = vehicle.needless.get('colour') member.needless[ 'vehicle_displace'] = vehicle.needless.get( 'displace') member.vehicle_code = vehicle_code if purchase_datetime: member.purchase_datetime = str2datetime( purchase_datetime, '%Y-%m') member.status = status member_id = await member.save() res['code'] = 1 res['member_id'] = member_id else: res['code'] = -1 return res
async def post(self): r_dict = {'code': 0} try: args_dict = json.loads(self.request.body) auth_code = args_dict.get('auth_code', None) user_info = args_dict.get('userInfo', {}) if not user_info: user_info = {} source = args_dict.get('source', None) if auth_code: params_dict = { 'app_id': MINI_APP_ID, 'app_secret': MINI_APP_SECRET, 'code': auth_code } exchange_url = API_CODE_EXCHANGE_SESSION_URL.format( **params_dict) http_client = AsyncHTTPClient() response = await http_client.fetch(exchange_url, validate_cert=False) if response.code == 200: rep_dict = json.loads(response.body) open_id = rep_dict.get('openid') friend_open_id = args_dict.get('friend_open_id', None) session_key = rep_dict.get('session_key') if open_id: member = await find_member_by_open_id(open_id) if not member: if source is not None: source_type = str(source) else: source_type = str(SOURCE_TYPE_MEMBER_SYSTEM) # 创建用户 member = Member(id=ObjectId(), code=get_increase_code( KEY_INCREASE_MEMBER_CODE), open_id=open_id, source=source_type, status=STATUS_USER_ACTIVE) wechat_info = await parse_wechat_info(user_info) member.sex = int( user_info.get('gender')) if user_info.get( 'gender') else SEX_NONE member.avatar = wechat_info.get( 'avatar' ) if wechat_info.get('avatar') else '%s://%s%s' % ( SERVER_PROTOCOL, SERVER_HOST, self.static_url('images/default/visitor.png')) member.nick_name = wechat_info.get( 'nick_name') if wechat_info.get( 'nick_name') else '游客' if wechat_info: member.province_code = wechat_info.get( 'province_code') member.city_code = wechat_info.get('city_code') member.district_code = wechat_info.get( 'district_code') member.needless['province'] = wechat_info.get( 'province_name') member.needless['city'] = wechat_info.get( 'city_name') member.needless['district'] = wechat_info.get( 'district_name') member.wechat_info = user_info member.register_datetime = datetime.datetime.now() member.login_datetime = datetime.datetime.now() member.login_times += 1 await member.save() # 会员属性统计 await start_task_member_property_statistics(member) r_dict['open_id'] = open_id r_dict['session_key'] = session_key r_dict['code'] = 1000 else: if member.status == STATUS_USER_INACTIVE: r_dict['code'] = 1002 else: member.login_datetime = datetime.datetime.now() member.login_times += 1 await member.save() r_dict['open_id'] = open_id r_dict['session_key'] = session_key r_dict['code'] = 1000 if friend_open_id: friend = await find_member_by_open_id( friend_open_id) if friend: friend_member = MemberFriend( member_cid=member.cid, friend_cid=friend.cid) await friend_member.save() member_friend = MemberFriend( member_cid=friend.cid, friend_cid=member.cid) await member_friend.save() else: r_dict['code'] = 1003 else: r_dict['code'] = 1001 except Exception: logger.error(traceback.format_exc()) return r_dict