def set_rent_fee_rate(request): data = JSONParser().parse(request) try: type_id = data['type_id'] except Exception: return JsonResponse(retcode(errcode("9999", '箱子类型不能为空'), "9999", '箱子类型不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: fee_per_hour = data['fee_per_hour'] except Exception: return JsonResponse(retcode(errcode("9999", '箱子租赁价格不能为空'), "9999", '箱子租赁价格不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: box_type_info = BoxTypeInfo.objects.get(id=type_id) box_type_info.price = float(fee_per_hour) box_type_info.save() ser_data = BoxTypeInfoSerializer(box_type_info) except BoxTypeInfo.DoesNotExist, e: log.error(repr(e)) return JsonResponse(retcode(errcode("9999", '修改云箱租赁价格失败'), "9999", '修改云箱租赁价格失败'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def process_request(self, request): if request.path.startswith(r'/container/api/v1/cloudbox/tms/'): # 检测如果不是登录的话 try: token = request.META.get('HTTP_AUTHORIZATION') log.info("request token %s" % token) conn = self.get_connection_from_pool() if token: # try: # sess = Session.objects.get(pk=request.session.session_key) # sess_param = sess.get_decoded() # if sess_param[token] and (token in sess_param.keys()): # log.info('session is valid pass') # else: # log.info("session timeout or invalid session") # return JsonResponse(retcode(errcode("0401", "session timeout or invalid session"), # "0401", "session timeout or invalid session"), # safe=True, # status=status.HTTP_401_UNAUTHORIZED) # except Session.DoesNotExist: # return JsonResponse(retcode(errcode("0401", "no authorized, session invalid"), # "0401", "no authorized, session invalid"), # safe=True, # status=status.HTTP_401_UNAUTHORIZED) if conn.hexists(PERMISSION_GROUP_HASH, token): group = conn.hget(PERMISSION_GROUP_HASH, token) #admin level direct pass if group == 'admin': pass #guest and operator should filter else: if conn.hexists(PERMISSION_URL_HASH, group): url_list = conn.hget(PERMISSION_URL_HASH, group).split(',') req_url = request.path # print req_url match_flag = False for url_pattern in url_list: result = re.match(url_pattern, req_url) if result: match_flag = True # 非法请求url直接返回 if not match_flag: return JsonResponse(retcode(errcode("0401", "no authorized"), "0401", "no authorized"), safe=True, status=status.HTTP_401_UNAUTHORIZED) else: return JsonResponse(retcode(errcode("0401", "no authorized"), "0401", "no authorized"), safe=True, status=status.HTTP_401_UNAUTHORIZED) else: return JsonResponse(retcode(errcode("0401", "no authorized"), "0401", "no authorized, token is null"), safe=True, status=status.HTTP_401_UNAUTHORIZED) else: if request.path.startswith(r'/container/api/v1/cloudbox/tms/upload/'): log.info("request without valid token bypass, if the request is upload api") else: log.info("request without valid token reject") return JsonResponse(retcode(errcode("0401", "no authorized"), "0401", "令牌失效,请重新登录"), safe=True, status=status.HTTP_401_UNAUTHORIZED) except Exception: return JsonResponse(retcode(errcode("0401", "no authorized"), "0401", "no authorized exception"), safe=True, status=status.HTTP_401_UNAUTHORIZED)
def enterpriseuser_fuzzy_query(request): pagination_class = api_settings.DEFAULT_PAGINATION_CLASS paginator = pagination_class() data = JSONParser().parse(request) # group_id -> group.name group_map = {} try: keyword = data['keyword'] except Exception: return JsonResponse(retcode(errcode("9999", '关键字为空'), "9999", '关键字为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_id = data['enterprise_id'] except Exception: return JsonResponse(retcode(errcode("9999", '企业id为空'), "9999", '企业id为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user_data = EnterpriseUser.objects.filter( Q(user_name__contains=keyword), enterprise_id=enterprise_id).order_by('register_time') for item in user_data: group_map[item.group.access_group_id] = item.group.group log.info("group_map= %s" % group_map) page = paginator.paginate_queryset(user_data, request) ser_ret = EnterpriseUserSerializer(page, many=True) ser_data_list = [] for data in ser_ret.data: data['group'] = group_map[data['group']] ser_data_list.append(data) except Exception, e: log.error(repr(e))
def auth(request): data = JSONParser().parse(request) try: username = data['username'] except Exception: return JsonResponse(retcode(errcode("9999", '注册姓名不能为空'), "9999", '注册姓名不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: password = data['password'] except Exception: return JsonResponse(retcode(errcode("9999", '注册密码不能为空'), "9999", '注册密码不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user = EnterpriseUser.objects.get(user_name=username, user_password=password) except EnterpriseUser.DoesNotExist, e: log.error(repr(e)) return JsonResponse(retcode(errcode("0403", '用户不存在或用户密码不正确'), "0403", '用户不存在或用户密码不正确'), safe=True, status=status.HTTP_403_FORBIDDEN)
def box_bill_real_time_all_filter(request): ret_list = [] current_time = datetime.datetime.now(tz=timezone) pagination_class = api_settings.DEFAULT_PAGINATION_CLASS paginator = pagination_class() data = JSONParser().parse(request) try: keyword = data['keyword'] except Exception: return JsonResponse(retcode(errcode("9999", '关键字为空'), "9999", '关键字为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) log.info("input keyword is %s" % keyword) log.debug("input keyword type is %s" % type(keyword)) enterprise_id_list = EnterpriseInfo.objects.filter( Q(enterprise_name__contains=keyword)) enterprise_id_list_ser = EnterpriseInfoSerializer(enterprise_id_list, many=True) log.debug("enterprise_id_list is %s" % enterprise_id_list_ser.data) log.debug("current_time.year=%s, current_time.month=%s" % (current_time.year, current_time.month)) try: for enterprise in enterprise_id_list: rentlease_list = RentLeaseInfo.objects.filter( user_id__enterprise__enterprise_id=enterprise.enterprise_id) # rentlease_list = rentlease_list_with_today.exclude(lease_end_time__year=current_time.year, # lease_end_time__month=current_time.month, # lease_end_time__day=current_time.day) if rentlease_list: on_num = 0 off_num = 0 fee = 0 bill = {} for item in rentlease_list: if item.rent_status == 0 and (not item.lease_end_time): off_num = off_num + 1 if item.lease_end_time \ and (item.lease_end_time.year == current_time.year) \ and (item.lease_end_time.month == current_time.month): on_num = on_num + 1 fee = fee + item.rent bill['on_num'] = on_num bill['off_num'] = off_num bill['fee'] = fee bill['enterprise_id'] = enterprise.enterprise_id bill['enterprise_name'] = enterprise.enterprise_name ret_list.append(bill) else: log.info("rentlease_list is null") continue except Exception, e: log.error(repr(e)) return JsonResponse(retcode(errcode("0500", '云箱计费查询失败'), "0500", '云箱计费查询失败'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def list_enterprise_user(request, group): pagination_class = api_settings.DEFAULT_PAGINATION_CLASS paginator = pagination_class() group_query_set = AccessGroup.objects.all() group_map = {} for item in group_query_set: group_map[item.access_group_id] = item.group try: if group == 'all': enterprise_user_ret = EnterpriseUser.objects.all().exclude(group__group='admin') page = paginator.paginate_queryset(enterprise_user_ret, request) enterprise_user_ser = EnterpriseUserSerializer(page, many=True) revised_enterprise_user_list = [] for item in enterprise_user_ser.data: group_id = item['group'] item['group'] = group_map[group_id] revised_enterprise_user_list.append(item) else: try: obj_group = AccessGroup.objects.get(group=group) except AccessGroup.DoesNotExist: return JsonResponse(retcode(errcode("9999", '企业用户群组不存在'), "9999", '企业用户群组不存在'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR) enterprise_user_ret = EnterpriseUser.objects.filter(group=obj_group).order_by('-register_time') page = paginator.paginate_queryset(enterprise_user_ret, request) enterprise_user_ser = EnterpriseUserSerializer(page, many=True) revised_enterprise_user_list = [] for item in enterprise_user_ser.data: group_id = item['group'] item['group'] = group_map[group_id] revised_enterprise_user_list.append(item) except Exception, e: log.error(repr(e))
def change_password(request): data = JSONParser().parse(request) try: user_id = data['user_id'] except Exception: return JsonResponse(retcode(errcode("9999", '用户id不能为空'), "9999", '用户id不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: orig_password = data['orig_password'] except Exception: return JsonResponse(retcode(errcode("9999", '原密码不能为空'), "9999", '原密码不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: new_password = data['new_password'] except Exception: return JsonResponse(retcode(errcode("9999", '新密码不能为空'), "9999", '新密码不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: timestamp = data['timestamp'] except Exception: return JsonResponse(retcode(errcode("9999", '异常错误'), "9999", '异常错误'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user = EnterpriseUser.objects.get(user_id=user_id) # check salt valid current_utc = int(time.time()) if current_utc - timestamp > settings.SALT_DURATION: return JsonResponse(retcode(errcode("4031", '非法登陆未经授权'), "4031", '非法登陆未经授权'), safe=True, status=status.HTTP_403_FORBIDDEN) m2 = hashlib.md5() m2.update(user.user_password_encrypt + str(timestamp)) gen_password = m2.hexdigest() log.info( 'origin_password=%s, gen_password=%s, user_password_encrypt=%s, timestamp=%s' % (orig_password, gen_password, user.user_password_encrypt, timestamp)) if gen_password != orig_password: return JsonResponse(retcode(errcode("0403", '原始密码输入不正确'), "0403", '原始密码输入不正确'), safe=True, status=status.HTTP_403_FORBIDDEN) else: user.user_password_encrypt = new_password user.save() except EnterpriseUser.DoesNotExist, e: log.error(e) return JsonResponse(retcode(errcode("0403", '用户不存在或用户密码不正确'), "0403", '用户不存在或用户密码不正确'), safe=True, status=status.HTTP_403_FORBIDDEN)
def enterprise_user_detail(request, user_id): try: user = EnterpriseUser.objects.get(user_id=user_id) ser_user = EnterpriseUserSerializer(user) ret = ser_user.data ret['group'] = user.group.group except EnterpriseUser.DoesNotExist: return JsonResponse(retcode(errcode("9999", "查询用户信息失败"), "9999", "查询用户信息失败"), safe=True, status=status.HTTP_400_BAD_REQUEST) return JsonResponse(retcode(ret, "0000", "Succ"), safe=True, status=status.HTTP_200_OK)
def enterprise_month_bill(request, enterprise_id): pagination_class = api_settings.DEFAULT_PAGINATION_CLASS paginator = pagination_class() try: box_rent_fee_month_bill = BoxRentFeeByMonth.objects.filter( enterprise=enterprise_id).order_by('date') except BoxRentFeeByMonth.DoesNotExist, e: log.error(repr(e)) return JsonResponse(retcode(errcode("0500", '查询企业计费报表失败'), "0500", '查询企业计费报表失败'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def group_detail(request, access_group_id): try: group = AccessGroup.objects.get(access_group_id=access_group_id) ser_group = AccessGroupSerializer(group) except EnterpriseUser.DoesNotExist: return JsonResponse(retcode(errcode("9999", "查询用户信息失败"), "9999", "查询用户信息失败"), safe=True, status=status.HTTP_400_BAD_REQUEST) return JsonResponse(retcode(ser_group.data, "0000", "Succ"), safe=True, status=status.HTTP_200_OK)
def enterpise_info_detail(request, enterprise_id): try: ret_enterpriseinfo = EnterpriseInfo.objects.get( enterprise_id=enterprise_id) ser_enterpriseinfo = EnterpriseInfoSerializer(ret_enterpriseinfo) except EnterpriseInfo.DoesNotExist: return JsonResponse(retcode(errcode("9999", "查询企业信息失败"), "9999", "查询企业信息失败"), safe=True, status=status.HTTP_400_BAD_REQUEST) return JsonResponse(retcode(ser_enterpriseinfo.data, "0000", "Succ"), safe=True, status=status.HTTP_200_OK)
def del_enterpise_info(request, enterprise_id): ret = {} try: EnterpriseInfo.objects.get(enterprise_id=enterprise_id).delete() ret['enterprise_id'] = enterprise_id except EnterpriseInfo.DoesNotExist: return JsonResponse(retcode(errcode("9999", "删除企业信息失败"), "9999", "删除企业信息失败"), safe=True, status=status.HTTP_400_BAD_REQUEST) return JsonResponse(retcode(ret, "0000", "Succ"), safe=True, status=status.HTTP_200_OK)
def list_enterpise_info(request): pagination_class = api_settings.DEFAULT_PAGINATION_CLASS paginator = pagination_class() try: enterprise_ret = EnterpriseInfo.objects.all().order_by( '-last_update_time') page = paginator.paginate_queryset(enterprise_ret, request) ret_ser = EnterpriseInfoSerializer(page, many=True) except Exception: return JsonResponse(retcode(errcode("9999", "查询企业信息列表失败"), "9999", "查询企业信息列表失败"), safe=True, status=status.HTTP_400_BAD_REQUEST) return paginator.get_paginated_response(ret_ser.data)
def enterpise_deposit_confirm(request): data = JSONParser().parse(request) try: enterprise_id = data['enterprise_id'] except Exception: return JsonResponse(retcode(errcode("9999", '企业id为空'), "9999", '企业id为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: ret_enterpriseinfo = EnterpriseInfo.objects.get( enterprise_id=enterprise_id) ser_enterpriseinfo = EnterpriseInfoSerializer(ret_enterpriseinfo) ret_enterpriseinfo.enterprise_deposit_status = 1 ret_enterpriseinfo.save() except EnterpriseInfo.DoesNotExist: return JsonResponse(retcode(errcode("9999", "查询企业信息失败"), "9999", "查询企业信息失败"), safe=True, status=status.HTTP_400_BAD_REQUEST) return JsonResponse(retcode(ser_enterpriseinfo.data, "0000", "Succ"), safe=False, status=status.HTTP_200_OK)
def auth_user_logout(request): data = JSONParser().parse(request) try: user_id = data['user_id'] except Exception: return JsonResponse(retcode(errcode("9999", '用户id不能为空'), "9999", '用户id不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user = EnterpriseUser.objects.get(user_id=user_id) conn = get_connection_from_pool() if conn.hexists(USER_ALIAS_ID_HASH, user.user_id): conn.hdel(USER_ALIAS_ID_HASH, user.user_id) # if user.user_alias_id: # user.user_alias_id = '' user.save() except EnterpriseUser.DoesNotExist, e: log.error(e) return JsonResponse(retcode(errcode("0403", '登出用户不存在'), "0403", '登出用户不存在'), safe=True, status=status.HTTP_403_FORBIDDEN)
def enterprise_fuzzy_query(request): pagination_class = api_settings.DEFAULT_PAGINATION_CLASS paginator = pagination_class() data = JSONParser().parse(request) try: keyword = data['keyword'] except Exception: return JsonResponse(retcode(errcode("9999", '关键字为空'), "9999", '关键字为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) enterprise_data = EnterpriseInfo.objects.filter( Q(enterprise_name__contains=keyword)).order_by('register_time') page = paginator.paginate_queryset(enterprise_data, request) ser_ret = EnterpriseInfoSerializer(page, many=True) return paginator.get_paginated_response(ser_ret.data)
def auth_with_salt(request): data = JSONParser().parse(request) try: username = data['username'] except Exception: return JsonResponse(retcode(errcode("9999", '注册姓名不能为空'), "9999", '注册姓名不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: password = data['password'] except Exception: return JsonResponse(retcode(errcode("9999", '注册密码不能为空'), "9999", '注册密码不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: timestamp = data['timestamp'] except Exception: return JsonResponse(retcode(errcode("9999", '异常错误'), "9999", '异常错误'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user = EnterpriseUser.objects.get(user_name=username) # check salt valid current_utc = int(time.time()) if current_utc - timestamp > settings.SALT_DURATION: return JsonResponse(retcode(errcode("4031", '非法登陆未经授权'), "4031", '非法登陆未经授权'), safe=True, status=status.HTTP_403_FORBIDDEN) m2 = hashlib.md5() m2.update(user.user_password_encrypt + str(timestamp)) gen_password = m2.hexdigest() log.info("password=%s, gen_password=%s, timestamp=%s, username=%s" % (password, gen_password, timestamp, username)) if gen_password != password: return JsonResponse(retcode(errcode("0403", '用户不存在或用户密码不正确'), "0403", '用户不存在或用户密码不正确'), safe=True, status=status.HTTP_403_FORBIDDEN) log.info("login verify success, begin alias_id init") conn = get_connection_from_pool() conn.hset(USER_ALIAS_ID_HASH, user.user_id, uuid.uuid1().hex) # user.user_alias_id = uuid.uuid1().hex # user.save() except EnterpriseUser.DoesNotExist, e: log.error(repr(e)) return JsonResponse(retcode(errcode("0403", '用户不存在或用户密码不正确'), "0403", '用户不存在或用户密码不正确'), safe=True, status=status.HTTP_403_FORBIDDEN)
def enterprise_month_bill_detail(request, enterprise_id, date): pagination_class = api_settings.DEFAULT_PAGINATION_CLASS paginator = pagination_class() try: log.info("enterprise_id=%s, date=%s" % (enterprise_id, date)) year = date.split('-')[0] month = int(date.split('-')[1]) # if month <=0 or month >12: # return JsonResponse(retcode(errcode("0400", '日期参数错误'), safe=True, status=status.HTTP_400_BAD_REQUEST) rent_info_list = RentLeaseInfo.objects.filter( user_id__enterprise__enterprise_id=enterprise_id, lease_end_time__year=year, lease_end_time__month=month).order_by('-lease_end_time') except Exception, e: log.error(repr(e)) return JsonResponse(retcode(errcode("0500", '查询企业月报表明细错误'), "0500", '查询企业月报表明细错误'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def admin_auth_with_salt(request): data = JSONParser().parse(request) try: username = data['username'] except Exception: return JsonResponse(retcode(errcode("9999", '注册姓名不能为空'), "9999", '注册姓名不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: password = data['password'] except Exception: return JsonResponse(retcode(errcode("9999", '注册密码不能为空'), "9999", '注册密码不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: timestamp = data['timestamp'] except Exception: return JsonResponse(retcode(errcode("9999", '异常错误'), "9999", '异常错误'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user = EnterpriseUser.objects.get(user_name=username, group__group='admin') # check salt valid current_utc = int(time.time()) if current_utc - timestamp > settings.SALT_DURATION: return JsonResponse(retcode(errcode("4031", '非法登陆未经授权'), "4031", '非法登陆未经授权'), safe=True, status=status.HTTP_403_FORBIDDEN) m2 = hashlib.md5() m2.update(user.user_password_encrypt + str(timestamp)) gen_password = m2.hexdigest() log.info("password=%s, gen_password=%s, timestamp=%s, username=%s" % (password, gen_password, timestamp, username)) if gen_password != password: return JsonResponse(retcode(errcode("0403", '用户不存在或用户密码不正确'), "0403", '用户不存在或用户密码不正确'), safe=True, status=status.HTTP_403_FORBIDDEN) except EnterpriseUser.DoesNotExist, e: log.error(repr(e)) return JsonResponse(retcode(errcode("0403", '用户不存在或用户密码不正确'), "0403", '用户不存在或用户密码不正确'), safe=True, status=status.HTTP_403_FORBIDDEN)
def update_enterprise_user(request): ret = {} data = JSONParser().parse(request) try: avatar_url = data['avatar_url'] except Exception: return JsonResponse(retcode(errcode("9999", '修改头像url不能为空'), "9999", '修改头像url不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user_real_name = data['user_real_name'] except Exception: return JsonResponse(retcode(errcode("9999", '修改姓名不能为空'), "9999", '修改姓名不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user_gender = data['user_gender'] except Exception: return JsonResponse(retcode(errcode("9999", '修改用户性别不能为空'), "9999", '修改用户性别不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user_nickname = data['user_nickname'] except Exception: return JsonResponse(retcode(errcode("9999", '修改用户性别不能为空'), "9999", '修改用户性别不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user_phone = data['user_phone'] except Exception: return JsonResponse(retcode(errcode("9999", '用户号码不能为空'), "9999", '用户号码不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_id = data['enterprise_id'] except Exception: return JsonResponse(retcode(errcode("9999", '企业信息id不能为空'), "9999", '企业信息id不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user_id = data['user_id'] except Exception: return JsonResponse(retcode(errcode("9999", '修改用户id不能为空'), "9999", '修改用户id不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user_email = data['user_email'] except Exception, e: log.error(repr(e)) user_email = ''
def box_bill_real_time_all(request): ret_list = [] current_time = datetime.datetime.now(tz=timezone) pagination_class = api_settings.DEFAULT_PAGINATION_CLASS paginator = pagination_class() try: enterprise_query_list = EnterpriseInfo.objects.all() for enterprise in enterprise_query_list: rentlease_list = RentLeaseInfo.objects.filter( user_id__enterprise__enterprise_id=enterprise.enterprise_id) # rentlease_list = rentlease_list_with_today.exclude(lease_end_time__year=current_time.year, # lease_end_time__month=current_time.month, # lease_end_time__day=current_time.day) if rentlease_list: on_num = 0 off_num = 0 fee = 0 bill = {} for item in rentlease_list: if item.rent_status == 0 and (not item.lease_end_time): off_num = off_num + 1 if item.lease_end_time \ and (item.lease_end_time.year == current_time.year) \ and (item.lease_end_time.month == current_time.month): on_num = on_num + 1 fee = fee + item.rent bill['on_num'] = on_num bill['off_num'] = off_num bill['fee'] = fee bill['enterprise_id'] = enterprise.enterprise_id bill['enterprise_name'] = enterprise.enterprise_name ret_list.append(bill) else: continue except Exception, e: log.error(repr(e)) return JsonResponse(retcode(errcode("0500", '云箱计费查询失败'), "0500", '云箱计费查询失败'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def add_enterprise_user(request): ret = {} data = JSONParser().parse(request) try: user_name = data['user_name'] except Exception: return JsonResponse(retcode(errcode("9999", '注册登陆名不能为空'), "9999", '注册登陆名不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user_real_name = data['user_real_name'] except Exception: return JsonResponse(retcode(errcode("9999", '注册用户姓名不能为空'), "9999", '注册用户姓名不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user_gender = data['user_gender'] except Exception: return JsonResponse(retcode(errcode("9999", '注册用户性别不能为空'), "9999", '注册用户性别不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: user_phone = data['user_phone'] except Exception: return JsonResponse(retcode({}, "9999", '注册用户号码不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_id = data['enterprise_id'] except Exception: return JsonResponse(retcode({}, "9999", '企业信息id不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: role = data['role'] except Exception: return JsonResponse(retcode({}, "9999", '企业用户角色不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: group = data['group'] except Exception: return JsonResponse(retcode({}, "9999", '企业用户所属群组不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: try: enterprise = EnterpriseInfo.objects.get(enterprise_id=enterprise_id) except EnterpriseUser.DoesNotExist: return JsonResponse(retcode({}, "9999", '企业信息id不存在'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR) try: group_obj = AccessGroup.objects.get(group=group) except AccessGroup.DoesNotExist: return JsonResponse(retcode({}, "9999", '企业用户群组不存在'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR) try: usr = EnterpriseUser.objects.get(user_name=user_name) if usr: log.error("Enterprise User exists already and return 500 error") return JsonResponse(retcode({}, "0500", '登陆名已存在'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR) except EnterpriseUser.DoesNotExist: with transaction.atomic(): md = hashlib.md5() md.update('hna12345') md5_pwd = md.hexdigest() new_user = EnterpriseUser(user_id=uuid.uuid1(), user_name=user_name, user_password='******', status='', avatar_url='', user_phone=user_phone, user_email='', register_time=datetime.datetime.now(tz=tz), enterprise=enterprise, user_token=uuid.uuid4().hex, role=role, group=group_obj, user_real_name=user_real_name, user_gender=user_gender, user_alias_id=uuid.uuid1().hex, user_password_encrypt=md5_pwd) new_user.save() auth_user_group = AuthUserGroup(user_token=new_user.user_token, group=group_obj) auth_user_group.save() ret['user_id'] = new_user.user_id update_redis_token(new_user.user_token, group) except Exception, e: log.error(repr(e)) return JsonResponse(retcode({}, "0500", '创建用户失败'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def update_enterprise_info(request): data = JSONParser().parse(request) try: enterprise_id = data['enterprise_id'] except Exception: return JsonResponse(retcode(errcode("9999", '企业id为空'), "9999", '企业id为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_name = data['enterprise_name'] except Exception: return JsonResponse(retcode(errcode("9999", '企业名称不能为空'), "9999", '企业名称不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_tele = data['enterprise_tele'] except Exception: return JsonResponse(retcode(errcode("9999", '企业联系电话不能为空'), "9999", '企业联系电话不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_license_id = data['enterprise_license_id'] except Exception: return JsonResponse(retcode(errcode("9999", '企业营业执照序号不能为空'), "9999", '企业营业执照序号不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_legal_rep_name = data['enterprise_legal_rep_name'] except Exception: return JsonResponse(retcode(errcode("9999", '企业法人名称不能为空'), "9999", '企业法人名称不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_deposit = data['enterprise_deposit'] except Exception: return JsonResponse(retcode(errcode("9999", '企业保证金不能为空'), "9999", '企业保证金不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_email = data['enterprise_email'] except Exception: return JsonResponse(retcode(errcode("9999", '企业邮箱不能为空'), "9999", '企业邮箱不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_license_id_url = data['enterprise_license_id_url'] except Exception: return JsonResponse(retcode(errcode("9999", '企业营业执照照片url不能为空'), "9999", '企业营业执照照片url不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_homepage_url = data['enterprise_homepage_url'] except Exception: return JsonResponse(retcode(errcode("9999", '企业网址不能为空'), "9999", '企业网址不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_address = data['enterprise_address'] except Exception: return JsonResponse(retcode(errcode("9999", '企业地址不能为空'), "9999", '企业地址不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) ret = {} ret['enterprise_id'] = enterprise_id try: enterprise_edit = EnterpriseInfo.objects.get( enterprise_id=enterprise_id) enterprise_edit.enterprise_name = enterprise_name enterprise_edit.enterprise_tele = enterprise_tele enterprise_edit.enterprise_license_id = enterprise_license_id enterprise_edit.enterprise_license_id_url = enterprise_license_id_url enterprise_edit.enterprise_legal_rep_name = enterprise_legal_rep_name enterprise_edit.enterprise_email = enterprise_email enterprise_edit.enterprise_deposit = enterprise_deposit enterprise_edit.last_update_time = datetime.datetime.now(tz) enterprise_edit.enterprise_homepage_url = enterprise_homepage_url enterprise_edit.enterprise_address = enterprise_address enterprise_edit.save() except EnterpriseInfo.DoesNotExist: return JsonResponse(retcode(errcode("9999", '请求修改的企业信息不存在'), "9999", '请求修改的企业信息不存在'), safe=True, status=status.HTTP_400_BAD_REQUEST) return JsonResponse(retcode(ret, "0000", 'Succ'), safe=True, status=status.HTTP_200_OK)
def add_enterprise_info(request): data = JSONParser().parse(request) try: enterprise_name = data['enterprise_name'] except Exception: return JsonResponse(retcode(errcode("9999", '企业名称不能为空'), "9999", '企业名称不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_tele = data['enterprise_tele'] except Exception: return JsonResponse(retcode(errcode("9999", '企业联系电话不能为空'), "9999", '企业联系电话不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_license_id = data['enterprise_license_id'] except Exception: return JsonResponse(retcode(errcode("9999", '企业营业执照序号不能为空'), "9999", '企业营业执照序号不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_legal_rep_name = data['enterprise_legal_rep_name'] except Exception: return JsonResponse(retcode(errcode("9999", '企业法人名称不能为空'), "9999", '企业法人名称不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_deposit = data['enterprise_deposit'] except Exception: return JsonResponse(retcode(errcode("9999", '企业保证金不能为空'), "9999", '企业保证金不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_email = data['enterprise_email'] except Exception: return JsonResponse(retcode(errcode("9999", '企业邮箱不能为空'), "9999", '企业邮箱不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_license_id_url = data['enterprise_license_id_url'] except Exception: return JsonResponse(retcode(errcode("9999", '企业营业执照照片url不能为空'), "9999", '企业营业执照照片url不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_homepage_url = data['enterprise_homepage_url'] except Exception: return JsonResponse(retcode(errcode("9999", '企业网址不能为空'), "9999", '企业网址不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_address = data['enterprise_address'] except Exception: return JsonResponse(retcode(errcode("9999", '企业地址不能为空'), "9999", '企业地址不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: enterprise_info = EnterpriseInfo( enterprise_id=uuid.uuid1(), enterprise_name=enterprise_name, enterprise_tele=enterprise_tele, enterprise_license_id=enterprise_license_id, enterprise_license_id_url=enterprise_license_id_url, enterprise_legal_rep_name=enterprise_legal_rep_name, enterprise_email=enterprise_email, enterprise_deposit=enterprise_deposit, enterprise_deposit_status=0, register_time=datetime.datetime.now(tz), last_update_time=datetime.datetime.now(tz), enterprise_homepage_url=enterprise_homepage_url, enterprise_address=enterprise_address) enterprise_info.save() except Exception, e: log.error(repr(e))
def rent_boxes_order(request): ret = {} data = JSONParser().parse(request) try: site_id = data['site_id'] except Exception: return JsonResponse(retcode(errcode("9999", '堆场id不能为空'), "9999", '堆场id不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: box_id_list = data['box_id_list'] except Exception: return JsonResponse(retcode(errcode("9999", '租赁云箱列表不能为空'), "9999", '租赁云箱列表不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: appoint_id = data['appoint_id'] except Exception: return JsonResponse(retcode(errcode("9999", '预约单id不能为空'), "9999", '预约单id不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: try: site = SiteInfo.objects.get(id=site_id) except SiteInfo.DoesNotExist: return JsonResponse(retcode(errcode("9004", '仓库不存在'), "9004", '仓库不存在'), safe=True, status=status.HTTP_200_OK) try: user_appoint = UserAppointment.objects.get( appointment_id=appoint_id, flag=0) except UserAppointment.DoesNotExist: return JsonResponse(retcode(errcode("9005", '预约单不存在'), "9005", '预约单不存在'), safe=True, status=status.HTTP_200_OK) try: enterprise_user = EnterpriseUser.objects.get( user_id=user_appoint.user_id_id) except EnterpriseUser.DoesNotExist: return JsonResponse(retcode(errcode("9006", '预约单所属用户不存在'), "9006", '预约单所属用户不存在'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR) appoint_detail_queryset = AppointmentDetail.objects.select_related( 'appointment_id', 'box_type').filter(appointment_id=user_appoint, site_id=site, flag=0) if appoint_detail_queryset.count() == 0: return JsonResponse(retcode(errcode("9002", '没有可用预约单详情或预约单已完成'), "9002", '没有可用预约单详情或预约单已完成'), safe=True, status=status.HTTP_200_OK) # 所租云箱必须隶属于当前site,否则报错 box_info_list = BoxInfo.objects.filter(ava_flag='Y', deviceid__in=box_id_list, siteinfo__id=site_id) if box_info_list.count() == 0: log.error("there is no available box in the site") log.info( 'box_id_list = %s, site_id = %s, query result list is %s' % (box_id_list, site_id, BoxInfoSerializer(box_info_list, many=True).data)) return JsonResponse(retcode(errcode("9003", '堆场没有符合条件的云箱'), "9003", '堆场没有符合条件的云箱'), safe=True, status=status.HTTP_200_OK) appoint_box_type_map = {} for detail in appoint_detail_queryset: if detail.box_type.id in appoint_box_type_map.keys(): pass else: appoint_box_type_map[detail.box_type.id] = detail.box_num log.info("appoint_box_type_map = %s" % appoint_box_type_map) # map # key=box_type_id, value=num box_type_map = {} for box_id in box_info_list: try: box_info = BoxInfo.objects.get( deviceid=box_id.deviceid, siteinfo=site, ava_flag='Y', type__id__in=appoint_box_type_map.keys()) except BoxInfo.DoesNotExist: log.error("BoxInfo.DoseNotExist box_id=%s, site=%s" % (box_id.deviceid, site_id)) if box_info: if box_info.type.id in box_type_map.keys(): orig = box_type_map[box_info.type.id] box_type_map[box_info.type.id] = orig + 1 else: box_type_map[box_info.type.id] = 1 log.info("stat:box_type_map = %s" % box_type_map) for key in box_type_map.keys(): stock = SiteBoxStock.objects.get(site=site, box_type__id=key) if stock.ava_num < box_type_map[key]: log.error("request box type stat is %s" % box_type_map) log.error("SiteBoxStock box_type=%s, ava_num=%s" % (key, stock.ava_num)) return JsonResponse(retcode(errcode("9001", '堆场请求的云箱数目类型不匹配'), "9001", '堆场请求的云箱数目类型不匹配'), safe=True, status=status.HTTP_200_OK) else: continue log.info('box_id_list = %s, site_id = %s, query result list is %s' % (box_id_list, site_id, BoxInfoSerializer(box_info_list, many=True).data)) lease_info_list = [] current_time = datetime.datetime.now(tz=timezone) with transaction.atomic(): stock_data = {} stock_data['site_id'] = site_id box_para_list = [] for item in box_info_list: lease_info = RentLeaseInfo(lease_info_id=uuid.uuid1(), user_id=enterprise_user, lease_start_time=current_time, box=item, off_site=site, last_update_time=current_time) lease_info.save() lease_info_list.append(lease_info.lease_info_id) box_para = {} box_para['box_id'] = item.deviceid box_para['type'] = 0 box_para_list.append(box_para) # SiteBoxStock update stock_data['boxes'] = box_para_list enter_leave_site(stock_data) redis_update_content = {} conn = get_connection_from_pool() # 结束预约 for appoint_detail in appoint_detail_queryset: appoint_detail.flag = 1 appoint_detail.save() redis_update_content['site'] = site.id redis_update_content['box_type'] = appoint_detail.box_type.id if redis_update_content['box_type'] in box_type_map.keys(): redis_update_content['ava_num'] = box_type_map[ appoint_detail.box_type.id] log.info("box_num set into the real number") else: redis_update_content['ava_num'] = 0 redis_update_content['reserve_num'] = appoint_detail.box_num conn.rpush(settings.REDIS_KEY_SITE_BOX_STOCK, json.dumps(redis_update_content)) # stock = SiteBoxStock.objects.select_for_update().get(site=site, box_type=appoint_detail.box_type) # orig_num = stock.reserve_num # ava_orig = stock.ava_num # if (orig_num >= appoint_detail.box_num) and (ava_orig >= appoint_detail.box_num): # stock.reserve_num = orig_num - appoint_detail.box_num # stock.ava_num = ava_orig - appoint_detail.box_num # stock.save() # else: # log.info("reserved_num less than appoint_detail.box_num") # 判断预约单状态是否完成 if appoint_detail_queryset: unfinish_detail_counter = AppointmentDetail.objects.filter( appointment_id=appoint_detail_queryset[0].appointment_id, flag=0).count() if unfinish_detail_counter == 0: user_appoint.flag = 1 user_appoint.save() else: log.info("预约单还未全部完成") ret['rent_lease_info_id_list'] = lease_info_list # 增加消息 # if enterprise_user.user_alias_id is not None and enterprise_user.user_alias_id != "": user_id = enterprise_user.user_id if conn.hexists(USER_ALIAS_ID_HASH, user_id): alias = [] # alias.append(enterprise_user.user_alias_id) alias.append(conn.hget(USER_ALIAS_ID_HASH, user_id)) message = u'您的云箱已经租赁成功' celery.send_push_message.delay(alias, message) notify_message = u'您的云箱已经租赁成功,箱子ID分别是' for _box in box_info_list: notify_message += u' [ %s ] ' % _box.deviceid create_notify("云箱租赁", notify_message, enterprise_user.user_id) except Exception, e: log.error(repr(e)) return JsonResponse(retcode(errcode("0500", '租赁云箱失败'), "0500", '租赁云箱失败'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
try: tmpfile_path = os.path.join('.', file_obj.name) if os.path.exists(tmpfile_path): q = Auth(self.access_key, self.secret_key) log.info("begin base64 filename") file_name_base64 = base64.b64encode(self.to_str(file_obj.name)) log.info( "filename=%s, filenametype=%s, base64filename=%s" % (file_obj.name, type(file_obj.name), file_name_base64)) key = "%s-%s" % (uuid.uuid1(), file_name_base64) token = q.upload_token(self.bucket_name, key, 3600) ret, info = put_file(token, key, tmpfile_path) if info.status_code == 200: ret['url'] = "%s/%s" % (self.base_url, key) else: ret['url'] = "" os.remove(tmpfile_path) except Exception, e: log.error(repr(e)) ret['error'] = e os.remove(tmpfile_path) return Response(data=errcode('0500', ret), status=500) return Response(data=retcode(ret, "0000", "Succ"), status=200) def to_str(self, str_or_unicode): if isinstance(str_or_unicode, unicode): value = str_or_unicode.encode('utf-8') else: value = str_or_unicode return value
def finish_boxes_order(request): ret = {} data = JSONParser().parse(request) try: site_id = data['site_id'] except Exception: return JsonResponse(retcode(errcode("9999", '堆场id不能为空'), "9999", '堆场id不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: box_id_list = data['box_id_list'] except Exception: return JsonResponse(retcode(errcode("9999", '云箱列表不能为空'), "9999", '租赁云箱列表不能为空'), safe=True, status=status.HTTP_400_BAD_REQUEST) try: try: site = SiteInfo.objects.get(id=site_id) except SiteInfo.DoesNotExist: return JsonResponse(retcode(errcode("9101", '仓库不存在'), "9101", '仓库不存在'), safe=True, status=status.HTTP_200_OK) box_info_list = BoxInfo.objects.filter(ava_flag='Y', deviceid__in=box_id_list) try: rent_info_list = RentLeaseInfo.objects.select_related( 'user_id', 'box__type').filter(box_id__in=box_id_list, rent_status=0) except RentLeaseInfo.DoesNotExist: return JsonResponse(retcode(errcode("9102", '租赁信息不存在'), "9102", '租赁信息不存在'), safe=True, status=status.HTTP_200_OK) if rent_info_list.count() == 0: return JsonResponse(retcode(errcode("9103", '租赁信息不存在或请求的云箱已归还'), "9103", '租赁信息不存在或请求的云箱已归还'), safe=True, status=status.HTTP_200_OK) lease_info_list = [] box_para_list = [] box_type_set = set() for item in rent_info_list: item.rent_status = 1 item.lease_end_time = datetime.datetime.now(tz=timezone) rent_rate = get_rent_fee_rate(item) delta_datetime = item.lease_end_time - item.lease_start_time time_hours = (delta_datetime.days * 24 + delta_datetime.seconds / 3600) log.info("delta_datetime days=%s, seconds=%s" % (delta_datetime.days, delta_datetime.seconds)) if time_hours: if delta_datetime.seconds % 3600: item.rent = (time_hours + 1) * rent_rate else: item.rent = time_hours * rent_rate else: #不足1小时按1小时算 item.rent = rent_rate * 1 item.on_site = site lease_info_list.append(item.lease_info_id) item.save() box_para = {} box_para['box_id'] = item.box.deviceid box_para['type'] = 1 box_para_list.append(box_para) box_type_set.add(item.box.type.id) #update daily bill # celery.update_box_bill_daily() # update month bill # celery.update_box_bill_month_async() stock_data = {} stock_data['site_id'] = site_id stock_data['boxes'] = box_para_list enter_leave_site(stock_data) check_stock_ava_num(site_id, box_type_set) # 增加消息 log.info("push message to app: begin") alias = [] if rent_info_list: conn = get_connection_from_pool() user_id = rent_info_list[0].user_id.user_id # if rent_info_list[0].user_id.user_alias_id is not None and rent_info_list[0].user_id.user_alias_id != "": if conn.hexists(USER_ALIAS_ID_HASH, user_id): # alias.append(rent_info_list[0].user_id.user_alias_id) alias.append(conn.hget(USER_ALIAS_ID_HASH, user_id)) message = u'您的云箱已经归还成功' celery.send_push_message.delay(alias, message) notify_message = u'您的云箱已经归还成功,箱子ID分别是' for _box in box_info_list: notify_message += u' [ %s ] ' % _box.deviceid create_notify("云箱租赁", notify_message, rent_info_list[0].user_id.user_id) else: log.info("rent_info_list is null, dont' push message") log.info("push message to app: end") except Exception, e: log.error(repr(e)) return JsonResponse(retcode(errcode("0500", '归还云箱失败'), "0500", '归还云箱失败'), safe=True, status=status.HTTP_500_INTERNAL_SERVER_ERROR)