Beispiel #1
0
 def __init__(self):
     self.suser = SUser()
     self.smycenter = SMyCenter()
     self.saccount = SAccount()
     self.smessage = SMessage()
     self.conf = ConfigParser()
     self.conf.read('config/setting.ini')
Beispiel #2
0
 def __init__(self):
     self.suser = SUser()
     self.sorder = SOrder()
     self.sgoods = SGoods()
     self.smycenter = SMyCenter()
     self.smessage = SMessage()
     self.saccount = SAccount()
Beispiel #3
0
 def __init__(self):
     self.smycenter = SMyCenter()
     self.suser = SUser()
Beispiel #4
0
class CMyCenter():

    def __init__(self):
        self.smycenter = SMyCenter()
        self.suser = SUser()

    def get_inforcode(self):
        print "get_inforcode"
        try:
            args = request.args.to_dict()
            print args
            phonenum = args.get('usphonenum')
        except Exception as e:
            return PARAMS_ERROR
        if not phonenum:
            return PARAMS_ERROR
        user = self.suser.getuser_by_phonenum(phonenum)
        if not user:
            return NOT_FOUND_PHONENUM
        code = ""
        while len(code) < 6:
            import random
            item = random.randint(1, 9)
            code = code + str(item)

        # 获取当前时间,与上一次获取的时间进行比较,小于60秒的获取直接报错
        import datetime
        from common.timeformat import format_for_db
        time_time = datetime.datetime.now()
        time_str = datetime.datetime.strftime(time_time, format_for_db)

        # 根据电话号码获取时间
        time_up = get_model_return_dict(self.smycenter.get_uptime_by_usphonenum(phonenum))
        if time_up:
            time_up_time = datetime.datetime.strptime(time_up['ICtime'], format_for_db)
            delta = time_time - time_up_time
            if delta.seconds < 60:
                return import_status("ERROR_MESSAGE_GET_CODE_FAST", "BEILI_ERROR", "ERROR_CODE_GET_CODE_FAST")

        new_inforcode = self.smycenter.add_inforcode(phonenum, code, time_str)
        if not new_inforcode:
            return SYSTEM_ERROR

        from config.Inforcode import SignName, TemplateCode
        from common.Inforsend import send_sms
        params = '{\"code\":\"' + code + '\",\"product\":\"etech\"}'

        __business_id = uuid.uuid1()
        response_send_message = send_sms(__business_id, phonenum, SignName, TemplateCode, params)
        response_send_message = json.loads(response_send_message)

        if response_send_message["Code"] == "OK":
            status = 200
        else:
            status = 405

        response_ok = {"usphone": phonenum}
        response_ok["status"] = status
        response_ok["messages"] = response_send_message["Message"]
        return response_ok

    def check_inforcode(self):
        data = request.json
        try:
            phonenum = data.get('usphonenum')
            iccode = data.get('iccode')
        except Exception as e:
            return PARAMS_ERROR
        if not phonenum or not iccode:
            return PARAMS_ERROR
        codeinfo = get_model_return_dict(self.smycenter.get_inforcode_by_usphonenum(phonenum))
        if not codeinfo:
            return SYSTEM_ERROR
        checkstatus = True if iccode == codeinfo['ICcode'] else False
        checkmessage = u"验证码正确" if checkstatus is True else u"验证码错误"
        response = import_status("check_inforcode_access", "OK")
        response["data"] = {"checkstatus": checkstatus,
                            "checkmessage": checkmessage
                            }
        return response

    @verify_token_decorator
    def update_headimg(self):  # 更新头像
        if is_tourist():
           return TOKEN_ERROR
        files = request.files.get("file")
        if not files:
            return NOT_FOUND_IMAGE
        if platform.system() == "Windows":
            rootdir = "D:/task"
        else:
            rootdir = "/opt/beili/file/mycenter/"
        if not os.path.isdir(rootdir):
            os.makedirs(rootdir)
        lastpoint = str(files.filename).rindex(".")
        filessuffix = str(files.filename)[lastpoint + 1:]
        filename = request.user.id + get_db_time_str() + "." + filessuffix
        filepath = os.path.join(rootdir, filename)
        print(filepath)
        files.save(filepath)
        response = import_status("updata_headimg_success", "OK")
        # url = Inforcode.ip + Inforcode.LinuxImgs + "/" + filename
        url = QRCODEHOSTNAME + "/file/mycenter/" + filename
        user_update = {}
        user_update['USheadimg'] = url
        self.suser.update_user_by_uid(request.user.id, user_update)
        response["data"] = url
        return response

    @verify_token_decorator
    def get_user_basicinfo(self):
        if is_tourist():
            return TOKEN_ERROR
        result = get_model_return_dict(self.smycenter.get_user_basicinfo(request.user.id))
        if result:
            res = import_status("get_user_basicinfo_success", "OK")
            res['data'] = result
            return res
        else:
            return SYSTEM_ERROR

    @verify_token_decorator
    def get_user_totalinfo(self):
        if is_tourist():
            return TOKEN_ERROR
        result = get_model_return_dict(self.smycenter.get_user_totalinfo(request.user.id))
        if result:
            res = import_status("get_user_basicinfo_success", "OK")
            res['data'] = result
            return res
        else:
            return SYSTEM_ERROR


    """省市区地址"""
    def get_province(self):
        try:
            province_list = get_model_return_list(self.smycenter.get_province())
            res = import_status("get_province_list_success", "OK")
            res["data"] = province_list
            return res
        except:
            return SYSTEM_ERROR

    def get_city_by_province(self):
        try:
            args = request.args.to_dict()
            province_id = args["provinceid"]
        except:
            return PARAMS_ERROR
        city_list = get_model_return_list(self.smycenter.get_city_by_provincenum(province_id))
        # map(lambda x: x.hide('_id'), city_list)
        res = import_status("get_city_list_success", "OK")
        res["data"] = city_list
        return res

    def get_area_by_city(self):
        try:
            args = request.args.to_dict()
            city_id = args['cityid']
        except:
            return PARAMS_ERROR
        area_list = get_model_return_list(self.smycenter.get_area_by_citynum(city_id))
        res = import_status("get_area_list_success", "OK")
        res["data"] = area_list
        return res

    def get_all_area(self):
        try:
            province_return = []
            province_list = get_model_return_list(self.smycenter.get_province())
            for province in province_list:
                province_dic = {}
                province_dic['name'] = province['provincename']
                province_dic['id'] = province['provinceid']
                city_list = get_model_return_list(self.smycenter.get_city_by_provincenum(province['provinceid']))
                city_return = []
                for city in city_list:
                        city_dic = {}
                        city_dic['name'] = city['cityname']
                        city_dic['id'] = city['cityid']
                        area_list = get_model_return_list(self.smycenter.get_area_by_citynum(city['cityid']))
                        area_return = []
                        for area in area_list:
                            area_dict = {}
                            area_dict['name'] = area['areaname']
                            area_dict['id'] = area['areaid']
                            area_return.append(area_dict)
                        city_dic['area'] = area_return
                        city_return.append(city_dic)
                province_dic['city'] = city_return
                province_return.append(province_dic)
            res = import_status("get_all_area_success", "OK")
            res['data'] = province_return
        except:
            return SYSTEM_ERROR
        return res

    @verify_token_decorator
    def add_useraddress(self):
        if is_tourist():
            return TOKEN_ERROR

        try:
            data = request.json
            USname = data.get('USname')
            USphonenum = data.get("USphonenum")
            USdatails = data.get("details")
            areaid = data.get("areaid")
            if not areaid:
                cityid = data.get("cityid")
        except:
            return PARAMS_ERROR
        try:
            if areaid:
                all_areaid = get_model_return_list(self.smycenter.get_all_areaid())
                area_list = []
                for area in all_areaid:
                    area_list.append(area['areaid'])
                if areaid not in area_list:
                    return BAD_ADDRESS
                import datetime
                from common.timeformat import format_for_db
                time_time = datetime.datetime.now()
                time_str = datetime.datetime.strftime(time_time, format_for_db)
                uaid = str(uuid.uuid1())
                exist_default = self.smycenter.get_default_address_by_usid(request.user.id)
                uadefault = True if not exist_default else False
                self.smycenter.add_address(uaid, request.user.id, USname, USphonenum, USdatails, areaid, uadefault, time_str, None)
                response = import_status("add_address_success", "OK")
                response['data'] = {
                    "UAid": uaid
                }
                return response
            else :
                all_cityid = get_model_return_list(self.smycenter.get_all_cityid())
                cityid_list = []
                for city in all_cityid:
                    cityid_list.append(city['cityid'])
                if cityid not in cityid_list:
                    return BAD_ADDRESS
                import datetime
                from common.timeformat import format_for_db
                time_time = datetime.datetime.now()
                time_str = datetime.datetime.strftime(time_time, format_for_db)
                uaid = str(uuid.uuid1())
                exist_default = self.smycenter.get_default_address_by_usid(request.user.id)
                uadefault = True if not exist_default else False
                self.smycenter.add_address(uaid, request.user.id, USname, USphonenum, USdatails, None, uadefault, time_str, cityid)
                response = import_status("add_address_success", "OK")
                response['data'] = {
                    "UAid": uaid
                }
                return response
        except:
            return SYSTEM_ERROR

    @verify_token_decorator
    def get_useraddress(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            isdefault = int(data.get('isdefault'))
            all = int(data.get('all'))
            UAid = data.get('UAid')
        except:
            return PARAMS_ERROR
        from common.timeformat import get_web_time_str
        if all == 1:
            all_address = get_model_return_list(self.smycenter.get_all_address(request.user.id))
            if not all_address:
                response = import_status("get_address_success", "OK")
                response['data'] = []
                return response
            address_list = []
            for address in all_address:
                address = get_model_return_dict(self.smycenter.get_other_address(request.user.id, address['UAid']))
                if not address:
                    return NO_ADDRESS
                area = get_model_return_dict(self.smycenter.get_area_by_areaid(address['areaid']))
                if area:
                    city = get_model_return_dict(self.smycenter.get_city_by_cityid(area['cityid']))
                    province = get_model_return_dict(self.smycenter.get_province_by_provinceid(city['provinceid']))
                    data = {}
                    data['provincename'] = province['provincename']
                    data['provinceid'] = province['provinceid']
                    data['cityname'] = city['cityname']
                    data['cityid'] = city['cityid']
                    data['areaname'] = area['areaname']
                    data['areaid'] = area['areaid']
                    data['details'] = address['UAdetails']
                    data['username'] = address['UAname']
                    data['userphonenum'] = address['UAphonenum']
                    data['uaid'] = address['UAid']
                    data['isdefault'] = address['UAdefault']
                    data['createtime'] = get_web_time_str(address['UAcreatetime'])
                    address_list.append(data)
                else:
                    city = get_model_return_dict(self.smycenter.get_city_by_cityid(address['cityid']))
                    province = get_model_return_dict(self.smycenter.get_province_by_provinceid(city['provinceid']))
                    data = {}
                    data['provincename'] = province['provincename']
                    data['provinceid'] = province['provinceid']
                    data['cityname'] = city['cityname']
                    data['cityid'] = city['cityid']
                    data['details'] = address['UAdetails']
                    data['username'] = address['UAname']
                    data['userphonenum'] = address['UAphonenum']
                    data['uaid'] = address['UAid']
                    data['isdefault'] = address['UAdefault']
                    data['createtime'] = get_web_time_str(address['UAcreatetime'])
                    address_list.append(data)
            response = import_status("get_address_success", "OK")
            response['data'] = address_list
            return response
        if isdefault == 1:
            address = get_model_return_dict(self.smycenter.get_default_address(request.user.id))
            if not address:
                response = import_status("get_address_success", "OK")
                response['data'] = []
                return response
            area = get_model_return_dict(self.smycenter.get_area_by_areaid(address['areaid']))
            if area:
                city = get_model_return_dict(self.smycenter.get_city_by_cityid(area['cityid']))
                province = get_model_return_dict(self.smycenter.get_province_by_provinceid(city['provinceid']))
                data = {}
                data['provincename'] = province['provincename']
                data['provinceid'] = province['provinceid']
                data['cityname'] = city['cityname']
                data['cityid'] = city['cityid']
                data['areaname'] = area['areaname']
                data['areaid'] = area['areaid']
                data['details'] = address['UAdetails']
                data['username'] = address['UAname']
                data['userphonenum'] = address['UAphonenum']
                data['uaid'] = address['UAid']
                data['createtime'] = get_web_time_str(address['UAcreatetime'])
                response = import_status("get_address_success", "OK")
                response['data'] = data
                return response
            else:
                city = get_model_return_dict(self.smycenter.get_city_by_cityid(address['cityid']))
                province = get_model_return_dict(self.smycenter.get_province_by_provinceid(city['provinceid']))
                data = {}
                data['provincename'] = province['provincename']
                data['provinceid'] = province['provinceid']
                data['cityname'] = city['cityname']
                data['cityid'] = city['cityid']
                data['details'] = address['UAdetails']
                data['username'] = address['UAname']
                data['userphonenum'] = address['UAphonenum']
                data['uaid'] = address['UAid']
                data['createtime'] = get_web_time_str(address['UAcreatetime'])
                response = import_status("get_address_success", "OK")
                response['data'] = data
                return response
        elif isdefault == 0:
            address = get_model_return_dict(self.smycenter.get_other_address(request.user.id, UAid))
            if not address:
                response = import_status("get_address_success", "OK")
                response['data'] = []
                return response
            area = get_model_return_dict(self.smycenter.get_area_by_areaid(address['areaid']))
            if area:
                city = get_model_return_dict(self.smycenter.get_city_by_cityid(area['cityid']))
                province = get_model_return_dict(self.smycenter.get_province_by_provinceid(city['provinceid']))
                data = {}
                data['provincename'] = province['provincename']
                data['provinceid'] = province['provinceid']
                data['cityname'] = city['cityname']
                data['cityid'] = city['cityid']
                data['areaname'] = area['areaname']
                data['areaid'] = area['areaid']
                data['details'] = address['UAdetails']
                data['username'] = address['UAname']
                data['userphonenum'] = address['UAphonenum']
                data['uaid'] = address['UAid']
                data['createtime'] = get_web_time_str(address['UAcreatetime'])
                response = import_status("get_address_success", "OK")
                response['data'] = data
                return response
            else:
                city = get_model_return_dict(self.smycenter.get_city_by_cityid(address['cityid']))
                province = get_model_return_dict(self.smycenter.get_province_by_provinceid(city['provinceid']))
                data = {}
                data['provincename'] = province['provincename']
                data['provinceid'] = province['provinceid']
                data['cityname'] = city['cityname']
                data['cityid'] = city['cityid']
                data['details'] = address['UAdetails']
                data['username'] = address['UAname']
                data['userphonenum'] = address['UAphonenum']
                data['uaid'] = address['UAid']
                data['createtime'] = get_web_time_str(address['UAcreatetime'])
                response = import_status("get_address_success", "OK")
                response['data'] = data
                return response

    @verify_token_decorator
    def update_useraddress(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            UAid = data.get('UAid')
            USname = data.get('USname')
            USphonenum = data.get('USphonenum')
            details = data.get('details')
            areaid = data.get('areaid')
        except:
            return PARAMS_ERROR
        update_address = {}
        update_address['UAname'] = USname
        update_address['UAphonenum'] = USphonenum
        update_address['UAdetails'] = details
        update_address['areaid'] = areaid
        update_result = self.smycenter.update_address(request.user.id, UAid, update_address)
        if update_result:
            response = import_status("update_address_success", "OK")
            return response
        else:
            return UPDATE_ADDRESS_FAIL

    @verify_token_decorator
    def change_default(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            old_defaultid = data.get('old_defaultid')
            new_defaultid = data.get('new_defaultid')
        except:
            return PARAMS_ERROR
        change_result = self.smycenter.change_default(request.user.id, old_defaultid, new_defaultid)
        if change_result:
            response = import_status("change_address_success", "OK")
            return response
        else:
            return CHANGE_ADDRESS_FAIL


    @verify_token_decorator
    def delete_useraddress(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            UAid = data.get('UAid')
        except:
            return PARAMS_ERROR
        this_address = get_model_return_dict(self.smycenter.get_other_address(request.user.id, UAid))
        if not this_address:
            return  NOT_FOUND_ADDRESS
        updatde_address = {}
        updatde_address['UAstatus'] = False
        result = self.smycenter.delete_useraddress(request.user.id, UAid, updatde_address)
        if result:
            if this_address['UAdefault']:
                try:
                    one_address = get_model_return_dict(self.smycenter.get_one_address())
                    if one_address:
                        updatde_address = {}
                        updatde_address['UAdefault'] = True
                        self.smycenter.set_default(one_address['UAid'], updatde_address)
                except:
                    return SYSTEM_ERROR
            response = import_status("delete_address_success", "OK")
            return response
        else:
            return NOT_FOUND_ADDRESS
Beispiel #5
0
class CUser():
    def __init__(self):
        self.suser = SUser()
        self.smycenter = SMyCenter()
        self.saccount = SAccount()
        self.smessage = SMessage()
        self.conf = ConfigParser()
        self.conf.read('config/setting.ini')

    def login(self):
        print "hello"
        json_data = request.json
        if not json_data:
            return PARAMS_ERROR
        usphonenum = json_data.get('usphonenum')
        uspassword = str(json_data.get('uspassword'))
        if not usphonenum or not uspassword:
            return PARAMS_MISS
        print type(usphonenum)

        user = get_model_return_dict(
            self.suser.getuser_by_phonenum(usphonenum))
        if user:
            if not check_password_hash(user['USpassword'], uspassword):
                return PHONE_OR_PASSWORD_WRONG
        # 从注册申请表里查询信息
        else:
            info = get_model_return_dict(
                self.suser.get_registerrecord_by_phonenum(usphonenum))
            if info:
                if int(info['IRIstatus']) == 1:
                    returnbody = {
                        "status": 405,
                        "status_code": 405006,
                        "message": u"您的账户正在审核中,请稍后再试!"
                    }
                    return returnbody
                if int(info['IRIstatus']) == 3:
                    returnbody = {
                        "status":
                        405,
                        "status_code":
                        405006,
                        "message":
                        u"您的账户未审核通过,请联系客服微信:" +
                        self.conf.get('account', 'service')
                    }
                    return returnbody
            return PHONE_OR_PASSWORD_WRONG
        token = usid_to_token(user['USid'])
        data = import_status('generic_token_success', "OK")
        data['data'] = {
            'token': token,
        }
        return data

    @verify_token_decorator
    def update_pwd(self):
        if is_tourist():
            return TOKEN_ERROR
        json_data = request.json
        if not json_data:
            return PARAMS_MISS
        oldpassword = json_data.get('oldpassword')
        newpassword = json_data.get('newpassword')
        user = get_model_return_list(self.suser.getuser_by_uid(
            request.user.id))
        if not user or not check_password_hash(user[0]['USpassword'],
                                               oldpassword):
            return PASSWORD_WRONG
        user_update = {}
        user_update["USpassword"] = generate_password_hash(newpassword)
        self.suser.update_user_by_uid(request.user.id, user_update)
        data = import_status("update_password_success", "OK")
        return data

    def findback_pwd(self):
        try:
            data = request.json
            phonenum = data.get('usphonenum')
            iccode = data.get('iccode')
            newpassword = data.get('newpassword')
        except Exception as e:
            return PARAMS_ERROR
        if not phonenum or not iccode or not newpassword:
            return PARAMS_ERROR
        codeinfo = get_model_return_dict(
            self.smycenter.get_inforcode_by_usphonenum(phonenum))
        if not codeinfo:
            return SYSTEM_ERROR
        if iccode != codeinfo['ICcode']:
            return INFORCODE_WRONG
        user = get_model_return_dict(self.suser.getuser_by_phonenum(phonenum))
        if not user:
            return NOT_FOUND_USER
        user_update = {}
        user_update["USpassword"] = generate_password_hash(newpassword)
        self.suser.update_user_by_uid(user['USid'], user_update)
        data = import_status("update_password_success", "OK")
        return data

    @verify_token_decorator
    def update_headimg(self):  # 更新头像
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            url = data.get('url')
        except:
            return PARAMS_ERROR
        user_update = {}
        user_update['USheadimg'] = url
        result = self.suser.update_user_by_uid(request.user.id, user_update)
        if result:
            response = import_status("updata_headimg_success", "OK")
            return response
        else:
            return SYSTEM_ERROR

    @verify_token_decorator
    def upload_file(self):
        try:
            param = request.args.to_dict()
            type = param.get("type")
        except:
            type = None
        if is_ordirnaryuser() or is_admin():
            try:
                files = request.files.get("file")
            except:
                return PARAMS_ERROR
            if not files:
                return NOT_FOUND_FILE
            if platform.system() == "Windows":
                rootdir = "D:/task"
            else:
                rootdir = "/opt/beili/file/"
            if not os.path.isdir(rootdir):
                os.makedirs(rootdir)
            lastpoint = str(files.filename).rindex(".")
            filessuffix = str(files.filename)[lastpoint + 1:]
            print 'filessuffix', filessuffix
            if is_ordirnaryuser():
                if filessuffix.lower() in ['png', 'jpg', 'jpeg', 'gif']:
                    image = Image.open(files)
                    w, h = image.size
                    filename = request.user.id + get_db_time_str(
                    ) + get_random_str(6) + "." + filessuffix
                    filepath = os.path.join(rootdir, filename)
                    if type == 1:
                        image.resize((128, 128)).save(filepath)
                    else:
                        image.resize((w / 2, h / 2)).save(filepath)
                    response = import_status("upload_file_success", "OK")
                    url = QRCODEHOSTNAME + "/file/" + filename
                    response["data"] = url
                    return response
            if is_admin():
                if filessuffix.lower() in ['png', 'jpg', 'jpeg', 'gif']:
                    image = Image.open(files)
                    w, h = image.size
                    filename = request.user.id + get_db_time_str(
                    ) + get_random_str(6) + "." + filessuffix
                    filepath = os.path.join(rootdir, filename)
                    # image.resize((w / 2, h / 2)).save(filepath)
                    if w > 1000:
                        image.resize((w * 2 / 3, h * 2 / 3)).save(filepath)
                    else:
                        image.save(filepath)
                    response = import_status("upload_file_success", "OK")
                    url = QRCODEHOSTNAME + "/file/" + filename
                    response["data"] = url
                    return response
            filename = request.user.id + get_db_time_str() + get_random_str(
                6) + "." + filessuffix
            filepath = os.path.join(rootdir, filename)
            print(filepath)
            files.save(filepath)
            response = import_status("upload_file_success", "OK")
            url = QRCODEHOSTNAME + "/file/" + filename
            response["data"] = url
            return response
        else:
            id1 = str(uuid.uuid4())
            token = usid_to_token(id=id1, type='Temp')
            try:
                files = request.files.get("file")
            except:
                return PARAMS_ERROR
            if not files:
                return NOT_FOUND_FILE
            if platform.system() == "Windows":
                rootdir = "D:/task"
            else:
                rootdir = "/opt/beili/file/"
            if not os.path.isdir(rootdir):
                os.makedirs(rootdir)
            lastpoint = str(files.filename).rindex(".")
            filessuffix = str(files.filename)[lastpoint + 1:]  # 后缀名
            print filessuffix
            if filessuffix.lower() in ['png', 'jpg', 'jpeg', 'gif']:
                image = Image.open(files)
                w, h = image.size
                filename = id1 + get_db_time_str() + "." + filessuffix
                filepath = os.path.join(rootdir, filename)
                if type == 1:
                    image.resize((128, 128)).save(filepath)
                else:
                    image.resize((w / 2, h / 2)).save(filepath)
                url = QRCODEHOSTNAME + "/file/" + filename
                data = import_status("upload_file_success", "OK")
                data['data'] = {'token': token, 'url': url}
                return data
            filename = id1 + get_db_time_str() + "." + filessuffix
            filepath = os.path.join(rootdir, filename)
            print(filepath)
            files.save(filepath)
            url = QRCODEHOSTNAME + "/file/" + filename
            data = import_status("upload_file_success", "OK")
            data['data'] = {'token': token, 'url': url}
            return data

    @verify_token_decorator
    def remove_file(self):
        if is_ordirnaryuser() or is_admin():
            try:
                data = request.json
                url = str(data.get('url'))
            except:
                return PARAMS_ERROR
            real_url = "/opt/beili/file/" + url
            if request.user.id not in real_url:
                return AUTHORITY_ERROR
            try:
                os.remove(real_url)
                response = import_status("remove_file_success", "OK")
                return response
            except:
                return AUTHORITY_ERROR
        elif is_temp():
            try:
                data = request.json
                url = str(data.get('url'))
            except:
                return PARAMS_ERROR
            real_url = "/opt/beili/file/" + url
            if request.temp not in real_url:
                return AUTHORITY_ERROR
            try:
                os.remove(real_url)
                response = import_status("remove_file_success", "OK")
                return response
            except:
                return AUTHORITY_ERROR
        else:
            return TOKEN_ERROR

    @verify_token_decorator
    def check_qrcode(self):
        try:
            data = request.json
            id = str(data.get('qrid'))
        except:
            return PARAMS_ERROR
        result = get_model_return_dict(self.suser.get_arcode_details(
            id)) if self.suser.get_arcode_details(id) else None
        if not result:
            return NOT_FOUND_QRCODE
        user_info = get_model_return_dict(self.smycenter.get_user_basicinfo(result['USid'])) if self.smycenter \
            .get_user_basicinfo(result['USid']) else None
        if not user_info:
            return NOT_FOUND_USER
        if user_info['USbail'] < float(self.conf.get('account', 'bail')):
            return NO_BAIL
        else:
            response = {}
            date = result['QRovertime']
            number = result['QRnumber']
            timenow = datetime.strftime(datetime.now(), format_for_db)
            if date < timenow:
                response['message'] = u"二维码已过期"
                response['success'] = False
                return response
            if number < 1:
                response['message'] = u"二维码次数已用完"
                response['success'] = False
                return response
            from common.timeformat import get_web_time_str
            result['QRovertime'] = get_web_time_str(result['QRovertime'])
            response['status'] = 200
            response['data'] = result
            response['success'] = True
            return response

    @verify_token_decorator
    def add_qrcode(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            date = str(data.get('overtime'))
            number = int(data.get('number'))
        except:
            return PARAMS_ERROR
        user_info = get_model_return_dict(self.smycenter.get_user_basicinfo(request.user.id)) if self.smycenter\
                .get_user_basicinfo(request.user.id) else None
        if not user_info:
            return NOT_FOUND_USER
        if user_info['USbail'] < float(self.conf.get('account', 'bail')):
            return NO_BAIL
        result = self.suser.add_qrcode(str(uuid.uuid4()), request.user.id,
                                       date, number)
        if result:
            response = import_status("add_qrcode_success", "OK")
            return response
        else:
            return SYSTEM_ERROR

    @verify_token_decorator
    def get_qrcode(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
        except:
            return PARAMS_ERROR
        time = datetime.strftime(datetime.now(), format_for_db)
        from common.timeformat import get_web_time_str
        qrcode_list = self.suser.get_qrcode_list(request.user.id)
        if qrcode_list:
            return_list = []
            qrcode_list = get_model_return_list(qrcode_list)
            for code in qrcode_list:
                if str(code['QRovertime']) > time and int(
                        code['QRnumber']) > 0:
                    code['QRovertime'] = get_web_time_str(code['QRovertime'])
                    return_list.append(code)
            response = import_status("get_qrcode_success", "OK")
            response['data'] = return_list
            return response
        else:
            response = import_status("get_qrcode_success", "OK")
            response['data'] = []
            return response

    @verify_token_decorator
    def delete_qrcode(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            qrcodeid = str(data.get('qrcodeid'))
        except:
            return PARAMS_ERROR
        if not qrcodeid:
            return PARAMS_ERROR
        result = self.suser.delete_qrcode(request.user.id, qrcodeid)
        if request:
            response = import_status("delete_qrcode_success", "OK")
            return response
        else:
            return DELETE_CODE_FAIL

    def get_registerinfo(self):
        try:
            data = request.json
            qrcodeid = str(data.get('qrid'))
        except:
            return PARAMS_ERROR

        if not qrcodeid:
            user_dict = {}
            user_dict['alipaynum'] = self.conf.get('account', 'alipaynum')
            user_dict['alipayname'] = self.conf.get('account', 'alipayname')
            user_dict['bankname'] = self.conf.get('account', 'bankname')
            user_dict['accountname'] = self.conf.get('account', 'accountname')
            user_dict['cardnum'] = self.conf.get('account', 'cardnum')
            user_dict['money'] = float(self.conf.get('account', 'money'))
            user_dict['service'] = self.conf.get('account', 'service')
            user_dict['drawbank'] = self.conf.get('account', 'drawbank')
            response = import_status("get_registerinfo_success", "OK")
            response['data'] = user_dict
            return response
        usid = self.suser.get_user_by_qrid(qrcodeid)
        if not usid:
            return NOT_FOUND_QRCODE
        usid = get_model_return_dict(usid)
        user = self.suser.getuserinfo_by_uid(usid['USid'])
        if not user:
            return NOT_FOUND_USER
        user = get_model_return_dict(user)
        user_dict = {}
        user_dict['name'] = user['USname']
        user_dict['USphonenum'] = user['USphonenum']
        user_dict['alipaynum'] = self.conf.get('account', 'alipaynum')
        user_dict['alipayname'] = self.conf.get('account', 'alipayname')
        user_dict['bankname'] = self.conf.get('account', 'bankname')
        user_dict['accountname'] = self.conf.get('account', 'accountname')
        user_dict['cardnum'] = self.conf.get('account', 'cardnum')
        user_dict['money'] = float(self.conf.get('account', 'money'))
        user_dict['service'] = self.conf.get('account', 'service')
        user_dict['drawbank'] = self.conf.get('account', 'drawbank')
        address = self.smycenter.get_user_default_details(usid['USid'])
        if address:
            address = get_model_return_dict(address)
            area = get_model_return_dict(
                self.smycenter.get_area_by_areaid(address['areaid']))
            if area:
                city = get_model_return_dict(
                    self.smycenter.get_city_by_cityid(area['cityid']))
                province = get_model_return_dict(
                    self.smycenter.get_province_by_provinceid(
                        city['provinceid']))
                provincename = province['provincename']
                cityname = city['cityname']
                areaname = area['areaname']
                details = address['UAdetails']
                real_address = provincename + cityname + areaname + details
                user_dict['address'] = real_address
                response = import_status("get_registerinfo_success", "OK")
                response['data'] = user_dict
                return response
            else:
                city = get_model_return_dict(
                    self.smycenter.get_city_by_cityid(address['cityid']))
                province = get_model_return_dict(
                    self.smycenter.get_province_by_provinceid(
                        city['provinceid']))
                data = {}
                provincename = province['provincename']
                cityname = city['cityname']
                details = address['UAdetails']
                real_address = provincename + cityname + details
                user_dict['address'] = real_address
                response = import_status("get_registerinfo_success", "OK")
                response['data'] = user_dict
                return response
        else:
            address = self.smycenter.get_user_otherdefault_details(
                usid['USid'])
            if address:
                address = get_model_return_dict(address)
                area = get_model_return_dict(
                    self.smycenter.get_area_by_areaid(address['areaid']))
                if area:
                    city = get_model_return_dict(
                        self.smycenter.get_city_by_cityid(area['cityid']))
                    province = get_model_return_dict(
                        self.smycenter.get_province_by_provinceid(
                            city['provinceid']))
                    provincename = province['provincename']
                    cityname = city['cityname']
                    areaname = area['areaname']
                    details = address['UAdetails']
                    real_address = provincename + cityname + areaname + details
                    response = import_status("get_registerinfo_success", "OK")
                    response['data'] = user_dict
                    return response
                else:
                    city = get_model_return_dict(
                        self.smycenter.get_city_by_cityid(address['cityid']))
                    province = get_model_return_dict(
                        self.smycenter.get_province_by_provinceid(
                            city['provinceid']))
                    data = {}
                    provincename = province['provincename']
                    cityname = city['cityname']
                    details = address['UAdetails']
                    real_address = provincename + cityname + details
                    user_dict['address'] = real_address
                    response = import_status("get_registerinfo_success", "OK")
                    response['data'] = user_dict
                    return response
        return SYSTEM_ERROR

    @verify_token_decorator
    def register(self):
        params = [
            'qrid', 'preusername', 'prephonenum', 'username', 'phonenum',
            'inforcode', 'password', 'idcardnum', 'wechat', 'cityid', 'areaid',
            'details', 'paytype', 'payamount', 'paytime', 'headimg', 'proof',
            'alipaynum', 'bankname', 'accountname', 'cardnum'
        ]
        data = request.json
        for param in data:
            if param not in params:
                return PARAMS_MISS
        try:
            qrid = data['qrid']
            preusername = data['preusername']
            prephonenum = data['prephonenum']
            username = data['username']
            phonenum = data['phonenum']
            inforcode = data['inforcode']  # 验证码
            password = data['password']
            idcardnum = data['idcardnum']
            wechat = data['wechat']
            cityid = data['cityid']
            areaid = data['areaid']
            details = data['details']
            paytype = data['paytype']
            payamount = data['payamount']
            paytime = data['paytime']
            headimg = data['headimg']
            proof = data['proof']
            alipaynum = data['alipaynum']
            bankname = data['bankname']
            accountname = data['accountname']
            cardnum = data['cardnum']
            if int(paytype) == 1:
                if not alipaynum or bankname or accountname or cardnum:
                    return PARAMS_ERROR
            if int(paytype) == 2:
                if alipaynum or not bankname or not accountname or not cardnum:
                    return PARAMS_ERROR
        except:
            return PARAMS_ERROR
        qr = get_model_return_dict(self.suser.get_qrcode_by_qrid(
            qrid)) if self.suser.get_qrcode_by_qrid(qrid) else None
        if not qr:
            return NOT_FOUND_QRCODE
        update = {}
        update['QRnumber'] = str(int(qr['QRnumber']) - 1)
        result = self.suser.update_qrcode(qrid, update)
        if not result:
            return NOT_FOUND_QRCODE
        check_phone = self.suser.getuser_by_phonenum(phonenum)
        if check_phone:
            return HAS_REGISTER
        codeinfo = get_model_return_dict(self.smycenter.get_inforcode_by_usphonenum(phonenum)) if self.smycenter\
            .get_inforcode_by_usphonenum(phonenum) else None
        if not codeinfo:
            return SYSTEM_ERROR
        if inforcode != codeinfo['ICcode']:
            return INFORCODE_WRONG
        session = db_session()
        try:
            result = self.suser.insertInvitate(session, data)
            if not result:
                raise dberror
            session.commit()
        except Exception as e:
            print e
            session.rollback()
            return SYSTEM_ERROR
        finally:
            session.close()
        response = import_status("register_success", "OK")
        return response

    @verify_token_decorator
    def get_register_record(self):
        if not is_admin():
            return TOKEN_ERROR
        try:
            data = request.json
            status = int(data.get('status'))
            page_size = data.get('page_size')
            page_num = data.get('page_num')
        except:
            return PARAMS_ERROR
        list = get_model_return_list(self.suser.get_register_record(status))
        if not list:
            response = import_status("get_registerinfo_success", "OK")
            response['data'] = []
            return response
        from common.timeformat import get_web_time_str
        for record in list:
            record['IRIcreatetime'] = get_web_time_str(record['IRIcreatetime'])
            record['IRIpaytime'] = get_web_time_str(record['IRIpaytime'])
            record['IRIproof'] = record['IRIproof'].split(',')

            if record['IRIarea']:
                area = get_model_return_dict(
                    self.smycenter.get_area_by_areaid(record['IRIarea']))
                city = get_model_return_dict(
                    self.smycenter.get_city_by_cityid(area['cityid']))
                province = get_model_return_dict(
                    self.smycenter.get_province_by_provinceid(
                        city['provinceid']))
                record['address'] = province['provincename'] + city[
                    'cityname'] + area['areaname']
            else:
                city = get_model_return_dict(
                    self.smycenter.get_city_by_cityid(record['IRIcity']))
                province = get_model_return_dict(
                    self.smycenter.get_province_by_provinceid(
                        city['provinceid']))
                record['address'] = province['provincename'] + city['cityname']

        mount = len(list)
        page = mount / page_size
        if page == 0 or page == 1 and mount % page_size == 0:
            real_return_list = list[0:]
        else:
            if ((mount - (page_num - 1) * page_size) / page_size) >= 1 and \
                    (mount - (page_num * page_size)) > 0:
                real_return_list = list[((page_num - 1) *
                                         page_size):(page_num * page_size)]
            else:
                real_return_list = list[((page_num - 1) * page_size):]
        response = import_status("get_registerinfo_success", "OK")
        response['data'] = real_return_list
        response['mount'] = mount
        return response

    @verify_token_decorator
    def deal_register_record(self):
        if not is_admin():
            return TOKEN_ERROR
        try:
            data = request.json
            IRIid = data.get('IRIid')
            willstatus = data.get('willstatus')
        except:
            return PARAMS_ERROR
        info = get_model_return_dict(
            self.suser.get_registerrecord_by_IRIid(IRIid))
        if not info:
            return NOT_FOUND_USER
        if willstatus == 2:
            session = db_session()
            try:
                user = self.smycenter.get_user_basicinfo_byphone(
                    info['IRIprephonenum'])  # 插入销售表,有数据就更新
                if not user:
                    raise dberror
                user = get_model_return_dict(user)
                monthnow = datetime.strftime(datetime.now(),
                                             format_for_db)[0:6]
                amount_data = self.saccount.get_user_date(
                    user['USid'], monthnow)
                if amount_data:
                    amount_data = get_model_return_dict(amount_data)
                    new_data = {}
                    new_data['reward'] = amount_data['reward'] + float(
                        self.conf.get('account', 'reward'))
                    try:
                        session.query(Amount).filter(
                            Amount.USid == user['USid']).update(new_data)
                    except:
                        raise dberror
                else:
                    amount = Amount()
                    amount.USid = user['USid']
                    amount.AMid = str(uuid.uuid4())
                    amount.USagentid = user['USagentid']
                    amount.USname = user['USname']
                    amount.reward = float(self.conf.get('account', 'reward'))
                    amount.AMstatus = 1
                    amount.USheadimg = user['USheadimg']
                    amount.AMcreattime = datetime.strftime(
                        datetime.now(), format_for_db)
                    amount.AMmonth = datetime.strftime(datetime.now(),
                                                       format_for_db)[0:6]
                    session.add(amount)

                new_userid = str(uuid.uuid4())  # 插入新用户
                new_user = User()
                new_user.USid = new_userid
                new_user.USname = info['IRIname']
                new_user.USpre = user['USid']
                new_user.USagentid = get_random_str(12)
                new_user.USheadimg = info['IRIpic'] if info['IRIpic'] else 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_100' \
                                                             '00&sec=1540919391&di=91c' \
                                                             '1ae656341d5814e63280616ad8ade&imgtype=jpg&er=1&src=http%3A%2F%2Fimg.zcool.cn%2Fcommun' \
                                                             'ity%2F0169d55548dff50000019ae9973427.jpg%401280w_1l_2o_100sh.jpg'
                new_user.USphonenum = info['IRIphonenum']
                new_user.USmount = 0
                new_user.USbail = 0
                new_user.USwechat = info['IRIwechat']
                new_user.idcardnum = info['IRIidcardnum']
                new_user.UScreatetime = datetime.strftime(
                    datetime.now(), format_for_db)
                new_user.USpassword = generate_password_hash(
                    info['IRIpassword'])
                session.add(new_user)

                reward = Reward()  # 插入直推奖励表
                reward.REid = str(uuid.uuid4())
                reward.RElastuserid = user['USid']
                reward.REnextuserid = new_userid
                reward.REmonth = datetime.strftime(datetime.now(),
                                                   format_for_db)[0:6]
                reward.REmount = float(self.conf.get('account', 'reward'))
                reward.REcreatetime = datetime.strftime(
                    datetime.now(), format_for_db)
                session.add(reward)

                session.query(User).filter(User.USid == user['USid'])\
                    .update({"USmount": user['USmount'] + float(self.conf.get('account', 'reward'))})

                # 写入代理消息
                content = u'您推荐的代理已审核通过,直推奖励已发放至余额'
                agent_result = self.smessage.create_agentmessage(
                    session, user['USid'],
                    datetime.strftime(datetime.now(), format_for_db), content,
                    2)
                if not agent_result:
                    return SYSTEM_ERROR

                USname = info['IRIname']  # 插入默认收货地址
                USphonenum = info['IRIphonenum']
                USdatails = info['IRIaddress']
                areaid = info['IRIarea']
                cityid = info['IRIcity']
                if areaid:
                    all_areaid = get_model_return_list(
                        self.smycenter.get_all_areaid())
                    area_list = []
                    for area in all_areaid:
                        area_list.append(area['areaid'])
                    if areaid not in area_list:
                        return BAD_ADDRESS
                    time_time = datetime.now()
                    time_str = datetime.strftime(time_time, format_for_db)
                    uaid = str(uuid.uuid1())
                    exist_default = self.smycenter.get_default_address_by_usid(
                        new_userid)
                    uadefault = True if not exist_default else False
                    self.smycenter.add_address_selfsession(session, uaid, new_userid, USname, USphonenum, USdatails, \
                                                           areaid, uadefault, time_str, None)
                else:
                    all_cityid = get_model_return_list(
                        self.smycenter.get_all_cityid())
                    cityid_list = []
                    for city in all_cityid:
                        cityid_list.append(city['cityid'])
                    if cityid not in cityid_list:
                        return BAD_ADDRESS
                    time_time = datetime.now()
                    time_str = datetime.strftime(time_time, format_for_db)
                    uaid = str(uuid.uuid1())
                    exist_default = self.smycenter.get_default_address_by_usid(
                        new_userid)
                    uadefault = True if not exist_default else False
                    self.smycenter.add_address_selfsession(session, uaid, new_userid, USname, USphonenum, USdatails, \
                                                           None, uadefault, time_str, cityid)
                session.commit()
            except Exception as e:
                print e
                session.rollback()
                return SYSTEM_ERROR
            finally:
                session.close()
        update = {}
        update['IRIstatus'] = int(willstatus)
        result = self.suser.update_register_record(IRIid, update)
        response = import_status("register_success", "OK")
        return response

    @verify_token_decorator
    def check_openid(self):
        if is_tourist():
            return TOKEN_ERROR
        state = request.args.to_dict().get('state')
        usid = request.user.id
        openid = get_model_return_dict(self.saccount.check_openid(usid))
        if not openid['openid']:
            response = {}
            response['message'] = u'执行跳转'
            response['status'] = 302
            data = {}
            update = {}
            state2 = get_random_str(10)
            update['state'] = state2
            result = self.suser.update_user_by_uid(usid, update)
            if not result:
                return SYSTEM_ERROR
            login = WeixinLogin(APP_ID, APP_SECRET)
            state = state2 + "$$$" + state
            data['url'] = login.authorize(SERVER + "/user/get_code",
                                          'snsapi_base',
                                          state=state)
            response['data'] = data
            return response
        response = import_status("has_opid", "OK")
        return response

    def get_code(self):
        args = request.args.to_dict()
        code = args.get('code')
        state = args.get('state')
        print code, state
        login = WeixinLogin(APP_ID, APP_SECRET)
        data = login.access_token(code)

        openid = data.openid
        update = {}
        update['openid'] = openid
        state_list = str(state).split('$$$')

        self.suser.update_user_by_state(state_list[0], update)
        # response = import_status("get_openid_success", "OK")
        return flask.redirect(state_list[1])

    @verify_token_decorator
    def get_authorization(self):
        if is_tourist():
            return TOKEN_ERROR
        result = get_model_return_dict(self.suser.get_authorization(request.user.id)) if\
                self.suser.get_authorization(request.user.id) else None
        if result['authorization']:
            response = import_status("get_authorization_success", "OK")
            response['data'] = {"url": result['authorization']}
            return response
        else:
            from common.make_pic import make_pic
            user = get_model_return_dict(
                self.smycenter.get_user_basicinfo(request.user.id))
            if not user:
                return SYSTEM_ERROR
            url = make_pic(user['USname'], user['USwechat'], user['USagentid'],
                           user['idcardnum'])
            update = {'authorization': url}
            self.suser.update_user_by_uid(request.user.id, update)
            response = import_status("get_authorization_success", "OK")
            response['data'] = {"url": url}
            return response
Beispiel #6
0
class COrder():
    def __init__(self):
        self.suser = SUser()
        self.sorder = SOrder()
        self.sgoods = SGoods()
        self.smycenter = SMyCenter()
        self.smessage = SMessage()
        self.saccount = SAccount()
        self.conf = ConfigParser()
        self.conf.read('config/setting.ini')

    @verify_token_decorator
    def create_order(self):
        if is_tourist():
            return TOKEN_ERROR
        data = request.json
        if not data:
            return PARAMS_MISS
        params_list = [
            "UAid", "product_list", "OInote", "PRlogisticsfee", "totalprice"
        ]
        for param in params_list:
            if param not in data:
                response = {}
                response['message'] = u"参数缺失"
                response['paramname'] = param
                response['status'] = 405
                return response
        try:
            UAid = data['UAid']
            OInote = data['OInote']
            product_list = data['product_list']
            PRlogisticsfee = float(data['PRlogisticsfee'])
            totalprice = float(data['totalprice'])
        except:
            return PARAMS_ERROR
        real_PRlogisticsfee = 0
        if len(product_list) == 1 and len(
                product_list[0]['skulist']) == 1 and int(
                    product_list[0]['skulist'][0]['number']) == 1:
            real_PRlogisticsfee = get_model_return_dict(
                self.sgoods.get_product_details(
                    product_list[0]['PRid']))['PRlogisticsfee']
        user_info = get_model_return_dict(
            self.smycenter.get_user_basicinfo(request.user.id))
        if not user_info:
            return SYSTEM_ERROR
        if user_info['USbail'] < float(self.conf.get('account', 'bail')):
            return NO_BAIL
        mount = 0
        new_list = []
        all_psid = []
        discountnum = 0
        product_num = 0
        try:
            for product in product_list:
                check_product = get_model_return_dict(
                    self.sgoods.get_product_info(product['PRid']))
                if not check_product:
                    return PRODUCT_OFFLINE
                for sku in product['skulist']:
                    sku_info = get_model_return_dict(
                        self.sgoods.get_sku_status(sku['psid']))
                    if not sku_info:
                        return SKU_WRONG
                    if sku['number'] > sku_info['PSstock']:
                        return STOCK_NOT_ENOUGH
                    mount = mount + sku['number'] * check_product['PRprice']
                    product_num = product_num + sku['number']
                    discountnum = discountnum + sku['number'] * check_product[
                        'PAdiscountnum']
                    all_psid.append(sku['psid'])
                product['PRprice'] = check_product['PRprice']
                new_list.append(product)
            if round(totalprice,
                     2) != round(mount + real_PRlogisticsfee,
                                 2) or real_PRlogisticsfee != PRlogisticsfee:
                response = {}
                response['status'] = 200
                response['success'] = False
                response['data'] = new_list
                response['PRlogisticsfee'] = real_PRlogisticsfee
                response['totalprice'] = round(mount + real_PRlogisticsfee, 2)
                return response
            if user_info['USmount'] < round(mount + PRlogisticsfee, 2):
                return NO_ENOUGH_MOUNT
        except Exception as e:
            print e
            return SYSTEM_ERROR
        session = db_session()
        try:
            OIid = str(uuid.uuid4())
            OIsn = datetime.strftime(datetime.now(),
                                     format_for_db) + get_random_int()
            OIcreatetime = datetime.strftime(datetime.now(), format_for_db)
            address = get_model_return_dict(
                self.smycenter.get_other_address(request.user.id, UAid))
            if not address:
                return NO_ADDRESS
            area = get_model_return_dict(
                self.smycenter.get_area_by_areaid(address['areaid']))
            from common.timeformat import get_web_time_str
            if area:
                city = get_model_return_dict(
                    self.smycenter.get_city_by_cityid(area['cityid']))
                province = get_model_return_dict(
                    self.smycenter.get_province_by_provinceid(
                        city['provinceid']))
                provincename = province['provincename']
                cityname = city['cityname']
                areaname = area['areaname']
                details = address['UAdetails']
                username = address['UAname']
                userphonenum = address['UAphonenum']
            else:
                city = get_model_return_dict(
                    self.smycenter.get_city_by_cityid(address['cityid']))
                province = get_model_return_dict(
                    self.smycenter.get_province_by_provinceid(
                        city['provinceid']))
                provincename = province['provincename']
                cityname = city['cityname']
                areaname = None
                details = address['UAdetails']
                username = address['UAname']
                userphonenum = address['UAphonenum']

            result = self.sorder.add_order(session, OIid, OIsn,
                                           request.user.id, OInote, mount,
                                           UAid, OIcreatetime, PRlogisticsfee,
                                           provincename, cityname, areaname,
                                           details, username, userphonenum,
                                           product_num, discountnum)
            if not result:
                raise dberror

            # 插入订单商品详情表
            for product in new_list:
                OPIid = str(uuid.uuid4())
                PRid = product['PRid']
                PRname = product['PRname']
                PRimage = get_model_return_dict(
                    self.sgoods.get_product(PRid))['PRpic']
                PRprice = product['PRprice']
                result = self.sorder.add_orderproductinfo(
                    session, OPIid, OIid, PRid, PRname, PRprice, PRimage)
                if not result:
                    raise dberror
                # 插入订单sku详情表
                for sku in product['skulist']:
                    orderskuinfo = OrderSkuInfo()
                    orderskuinfo.OSIid = str(uuid.uuid4())
                    orderskuinfo.OPIid = OPIid
                    orderskuinfo.number = sku['number']
                    orderskuinfo.sizename = sku['sizename']
                    orderskuinfo.colorname = sku['colorname']
                    session.add(orderskuinfo)
                    sku_info = get_model_return_dict(
                        self.sgoods.get_sku_status(sku['psid']))
                    session.query(ProductSku).filter(ProductSku.PSid == sku['psid'])\
                        .update({"PSstock": sku_info['PSstock'] - sku['number']})

            # 更改用户购物车商品状态
            for psid in all_psid:
                session.query(ShoppingCart).filter(ShoppingCart.USid == request.user.id).filter(ShoppingCart.PSid == psid)\
                    .update({"SCstatus": 0})
            # 减余额并插入代理消息
            user = {}
            user['USmount'] = round(
                user_info['USmount'] - round(mount + real_PRlogisticsfee, 2),
                2)
            session.query(User).filter_by(USid=request.user.id).update(user)
            agentmessage = AgentMessage()
            agentmessage.AMid = str(uuid.uuid4())
            agentmessage.USid = request.user.id
            agentmessage.AMdate = OIcreatetime
            agentmessage.AMtype = 0
            agentmessage.AMcontent = u'您的订单创建成功,订单号为' + ' ' + str(OIsn)
            session.add(agentmessage)

            moneyrecord = MoneyRecord()  # 插入收支记录表
            moneyrecord.MRid = str(uuid.uuid4())
            moneyrecord.MRtype = 1
            moneyrecord.OIid = OIsn
            moneyrecord.MRamount = -(mount + real_PRlogisticsfee)
            moneyrecord.MRcreatetime = datetime.strftime(
                datetime.now(), format_for_db)
            moneyrecord.USid = request.user.id
            session.add(moneyrecord)
            session.commit()
        except stockerror as e:
            session.rollback()
            return STOCK_NOT_ENOUGH
        except Exception as e2:
            session.rollback()
            print e2.message
            return SYSTEM_ERROR
        finally:
            session.close()
        response = import_status("create_order_success", "OK")
        response['success'] = True
        return response

    @verify_token_decorator
    def get_order_list(self):
        if is_tourist():
            return TOKEN_ERROR
        data = request.json
        if not data:
            return PARAMS_MISS
        try:
            type = int(data.get('type'))
            page = int(data.get('page'))
            count = int(data.get('count'))
        except:
            return PARAMS_ERROR
        order_return_list = []
        if type == 0:
            order_list = get_model_return_list(
                self.sorder.get_allorder_list(request.user.id, page, count))
            state0 = int(self.sorder.get_total_order_num(
                request.user.id)) if self.sorder.get_total_order_num(
                    request.user.id) else 0
            state1 = int(self.sorder.get_order_num(
                request.user.id, 1)) if self.sorder.get_order_num(
                    request.user.id, 1) else 0
            state2 = int(self.sorder.get_order_num(
                request.user.id, 2)) if self.sorder.get_order_num(
                    request.user.id, 2) else 0
            state3 = int(self.sorder.get_order_num(
                request.user.id, 3)) if self.sorder.get_order_num(
                    request.user.id, 3) else 0
            state4 = int(self.sorder.get_order_num(
                request.user.id, 4)) if self.sorder.get_order_num(
                    request.user.id, 4) else 0
            state1 = state1 + state4
            for order in order_list:
                product_list = get_model_return_list(
                    self.sorder.get_product_list(order['OIid']))
                for product in product_list:
                    product['PRnum'] = 0
                    sku_list = get_model_return_list(
                        self.sorder.get_sku_list_by_opiid(product['OPIid']))
                    for sku in sku_list:
                        product['PRnum'] = product['PRnum'] + sku['number']
                    product['skulist'] = sku_list
                order['product_list'] = product_list
                from common.timeformat import get_web_time_str
                order['OIcreatetime'] = get_web_time_str(order['OIcreatetime'])
                order_return_list.append(order)
            response = import_status("get_orderlist_success", "OK")
            response['data'] = order_return_list
            response['state0_num'] = state0
            response['state1_num'] = state1
            response['state2_num'] = state2
            response['state3_num'] = state3
            return response
        else:
            order_list = get_model_return_list(
                self.sorder.get_order_list(request.user.id, type, page, count))
            if type == 1:
                order_list = order_list + get_model_return_list(
                    self.sorder.get_order_list(request.user.id, 4, page,
                                               count))
                new_list = sorted(order_list,
                                  key=lambda order: order['OIcreatetime'],
                                  reverse=True)
                order_list = new_list
            if not order_list:
                response = import_status("get_orderlist_success", "OK")
                response['data'] = order_return_list
                return response
            for order in order_list:
                product_list = get_model_return_list(
                    self.sorder.get_product_list(order['OIid']))
                for product in product_list:
                    product['PRnum'] = 0
                    sku_list = get_model_return_list(
                        self.sorder.get_sku_list_by_opiid(product['OPIid']))
                    for sku in sku_list:
                        product['PRnum'] = product['PRnum'] + sku['number']
                    product['skulist'] = sku_list
                order['product_list'] = product_list
                from common.timeformat import get_web_time_str
                order['OIcreatetime'] = get_web_time_str(order['OIcreatetime'])
                order_return_list.append(order)
            response = import_status("get_orderlist_success", "OK")
            response['data'] = order_return_list
            return response

    @verify_token_decorator
    def get_order_details(self):
        if is_tourist():
            return TOKEN_ERROR
        data = request.json
        if not data:
            return PARAMS_MISS
        try:
            OIsn = int(data.get('OIsn'))
        except:
            return PARAMS_ERROR
        detail = get_model_return_dict(self.sorder.get_order_details(OIsn))
        from common.timeformat import get_web_time_str
        detail['createtime'] = get_web_time_str(detail['OIcreatetime'])
        product_list = get_model_return_list(
            self.sorder.get_product_list(detail['OIid']))
        for product in product_list:
            product['PRnum'] = 0
            sku_list = get_model_return_list(
                self.sorder.get_sku_list_by_opiid(product['OPIid']))
            for sku in sku_list:
                product['PRnum'] = product['PRnum'] + sku['number']
            product['skulist'] = sku_list
        detail['product_list'] = product_list
        response = import_status("get_orderdetails_success", "OK")
        response['data'] = detail
        return response

    @verify_token_decorator
    def get_all_order(self):
        if not is_admin():
            return AUTHORITY_ERROR
        params = [
            'page_size', 'page_num', 'oisn', 'starttime', 'endtime', 'status',
            'username', 'userphonenum', 'productname'
        ]
        try:
            data = request.json
            for param in params:
                if param not in data:
                    response = {}
                    response['message'] = u"参数缺失"
                    response['paramname'] = param
                    response['status'] = 405
                    return response
        except:
            return PARAMS_ERROR
        page_size = data.get('page_size')
        page_num = data.get('page_num')
        oisn = data.get('oisn')
        starttime = str(data.get('starttime')) + '000000' if data.get(
            'starttime') else None
        endtime = data.get('endtime') + '000000' if data.get(
            'endtime') else None
        status = data.get('status')
        username = data.get('username')
        userphonenum = data.get('userphonenum')
        productname = data.get('productname')
        all_order = get_model_return_list(
            self.sorder.get_all_order(oisn, starttime, endtime, status,
                                      username, userphonenum))
        return_list = []
        for order in all_order:
            detail = get_model_return_dict(
                self.sorder.get_order_details(order['OIsn']))
            from common.timeformat import get_web_time_str
            order['OIcreatetime'] = get_web_time_str(order['OIcreatetime'])
            product_list = get_model_return_list(
                self.sorder.get_product_list(detail['OIid']))
            for product in product_list:
                product['PRnum'] = 0
                sku_list = get_model_return_list(
                    self.sorder.get_sku_list_by_opiid(product['OPIid']))
                for sku in sku_list:
                    product['PRnum'] = product['PRnum'] + sku['number']
                product['skulist'] = sku_list
            order['product_list'] = product_list
            if productname:
                for product in product_list:
                    if productname in product['PRname']:
                        return_list.append(order)
                        break
            else:
                return_list.append(order)

        mount = len(return_list)
        page = mount / page_size
        if page == 0 or page == 1 and mount % page_size == 0:
            real_return_list = return_list[0:]
        else:
            if ((mount - (page_num - 1) * page_size) / page_size) >= 1 and \
                    (mount - (page_num  * page_size)) > 0:
                real_return_list = return_list[((page_num - 1) *
                                                page_size):(page_num *
                                                            page_size)]
            else:
                real_return_list = return_list[((page_num - 1) * page_size):]

        response = import_status("get_allorder_success", "OK")
        response['data'] = real_return_list
        response['mount'] = mount
        return response

    @verify_token_decorator
    def update_order(self):
        if not is_admin():
            return AUTHORITY_ERROR
        try:
            data = request.json
            oisn = data.get('oisn')
            expressname = data.get('expressname')
            expressnum = data.get('expressnum')
            if not expressname or not expressnum:
                raise dberror
        except:
            return PARAMS_ERROR
        detail = get_model_return_dict(self.sorder.get_order_details(oisn))
        if not detail:
            return NOT_FOUND_ORDER
        session = db_session()
        try:
            is_exits = get_model_return_dict(
                session.query(OrderInfo.expressnum).filter(
                    OrderInfo.OIsn == oisn).first())
            if is_exits['expressnum']:
                update = {}
                update['OIstatus'] = 2
                update['expressname'] = expressname
                update['expressnum'] = expressnum
                session.query(OrderInfo).filter(
                    OrderInfo.OIsn == oisn).update(update)
            else:
                update = {}
                update['OIstatus'] = 2
                update['expressname'] = expressname
                update['expressnum'] = expressnum
                session.query(OrderInfo).filter(
                    OrderInfo.OIsn == oisn).update(update)
                monthnow = datetime.strftime(datetime.now(),
                                             format_for_db)[0:6]
                amount_data = self.saccount.get_user_date(
                    detail['USid'], monthnow)
                order = get_model_return_dict(
                    self.sorder.get_order_details(oisn))
                user = self.smycenter.get_user_basicinfo(
                    detail['USid'])  # 插入销售表,有数据就更新
                if not user:
                    raise dberror
                user = get_model_return_dict(user)
                if not order:
                    raise dberror
                if amount_data:
                    amount_data = get_model_return_dict(amount_data)
                    new_data = {}
                    new_data['performance'] = amount_data[
                        'performance'] + order['discountnum']
                    try:
                        session.query(Amount).filter(
                            Amount.USid == detail['USid']).filter(
                                Amount.AMmonth == monthnow).update(new_data)
                    except:
                        raise dberror
                else:
                    amount = Amount()
                    amount.USid = detail['USid']
                    amount.AMid = str(uuid.uuid4())
                    amount.USagentid = user['USagentid']
                    amount.performance = order['discountnum']
                    amount.USname = user['USname']
                    amount.AMstatus = 1
                    amount.USheadimg = user['USheadimg']
                    amount.AMcreattime = datetime.strftime(
                        datetime.now(), format_for_db)
                    amount.AMmonth = monthnow
                    session.add(amount)

                performance = Performance()  # 插入业绩表
                performance.USid = detail['USid']
                performance.REmonth = datetime.strftime(
                    datetime.now(), format_for_db)[0:6]
                performance.PEid = str(uuid.uuid4())
                performance.PEdiscountnum = order['discountnum']
                performance.PEcreatetime = datetime.strftime(
                    datetime.now(), format_for_db)
                session.add(performance)
            session.commit()
        except Exception as e:
            print e
            session.rollback()
            return SYSTEM_ERROR
        finally:
            session.close()
        reponse = import_status("update_order_success", "OK")
        detail = get_model_return_dict(self.sorder.get_order_details(oisn))
        from common.timeformat import get_web_time_str
        detail['OIcreatetime'] = get_web_time_str(detail['OIcreatetime'])
        product_list = get_model_return_list(
            self.sorder.get_product_list(detail['OIid']))
        detail['product_list'] = product_list
        reponse['data'] = detail
        return reponse

    @verify_token_decorator
    def get_willsend_products(self):
        if not is_admin():
            return TOKEN_ERROR
        # workbook = xlrd.open_workbook(r'/Users/fx/Desktop/项目相关/1.xls')
        # print (workbook.sheet_names())
        # sheet = workbook.sheet_names()[0]
        # sheet_data = workbook.sheet_by_name(sheet)
        # print(sheet_data)
        # print (sheet_data.name, sheet_data.nrows, sheet_data.ncols)
        # rows = sheet_data.row_values(0)  # 获取第一行内容
        # cols = sheet_data.col_values(0)  # 获取第一列内容
        # print (rows)
        try:
            data = request.json
            oisnlist = data.get('oisnlist')
        except:
            return PARAMS_ERROR
        new_oisn_list = []
        for oisn in oisnlist:
            order = get_model_return_dict(
                self.sorder.get_order_details(str(oisn)))
            if order['OIstatus'] == 1:
                new_oisn_list.append(order)
        style = xlwt.XFStyle()
        font = xlwt.Font()
        font.name = u'宋体'
        font.bold = True
        style.font = font
        time_now = datetime.strftime(datetime.now(), format_for_db)
        workbook = xlwt.Workbook(encoding='utf-8')
        worksheet = workbook.add_sheet('sheet1')
        # worksheet.write_merge()
        worksheet.write(0, 0, label='订单号', style=style)
        worksheet.write(0, 1, label='收货地址', style=style)
        worksheet.write(0, 2, label='卖家备注', style=style)
        worksheet.write(0, 3, label='发件人姓名', style=style)
        worksheet.write(0, 4, label='发件人电话', style=style)
        worksheet.write(0, 5, label='发件人地址', style=style)
        worksheet.write(0, 6, label='发货商品', style=style)
        font = xlwt.Font()
        font.name = u'宋体'
        font.bold = False
        style.font = font
        url = ''
        session = db_session()
        try:
            if new_oisn_list:
                for i, order in enumerate(new_oisn_list):
                    oisn = order['OIsn']
                    username = order['username']
                    phone = order['userphonenum']
                    provincename = order['provincename']
                    cityname = order['cityname']
                    areaname = order['areaname'] if order['areaname'] else ''
                    details = order['details']
                    address = username + ' ' + phone + ' ' + provincename + cityname + areaname + details
                    OInote = order['OInote']
                    product_list = get_model_return_list(
                        self.sorder.get_product_list(order['OIid']))
                    productname = self.get_product_name(product_list)
                    worksheet.write(i + 1, 0, label=oisn, style=style)
                    worksheet.write(i + 1, 1, label=address, style=style)
                    worksheet.write(i + 1, 2, label=OInote, style=style)
                    worksheet.write(i + 1,
                                    3,
                                    label=self.conf.get('account', 'sendname'),
                                    style=style)
                    worksheet.write(i + 1,
                                    4,
                                    label=self.conf.get(
                                        'account', 'sendphone'),
                                    style=style)
                    worksheet.write(i + 1,
                                    5,
                                    label=self.conf.get(
                                        'account', 'sendaddress'),
                                    style=style)
                    session.query(OrderInfo).filter(
                        OrderInfo.OIsn == oisn).update({"OIstatus": 4})
                    worksheet.write(i + 1, 6, label=productname, style=style)
            if platform.system() == "Windows":
                rootdir = "D:/task"
            else:
                rootdir = "/opt/beili/file/"
            if not os.path.isdir(rootdir):
                os.makedirs(rootdir)
            filename = get_db_time_str() + "." + 'xls'
            filepath = os.path.join(rootdir, filename)
            print(filepath)
            workbook.save(filepath)
            url = QRCODEHOSTNAME + "/file/" + filename
        except Exception as e:
            print e
            session.rollback()
            return SYSTEM_ERROR
        finally:
            session.commit()
        response = import_status("get_willsend_products_success", "OK")
        response['data'] = url
        return response

    def get_product_name(self, list):
        name = ''
        for product in list:
            sku_list = get_model_return_list(
                self.sorder.get_sku_list_by_opiid(product['OPIid']))
            productName = product['PRname'].split("返")[0].strip()
            result = re.match('[0-9A-Za-z]+', productName)
            if result:
                productName = result.group()
            for sku in sku_list:
                name = name + productName + sku['colorname'] + sku[
                    'sizename'] + str(sku['number']) + u'件' + ' '
        return name

    @verify_token_decorator
    def cancel_order(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            oisn = data.get('oisn')
        except:
            return PARAMS_ERROR
        order = get_model_return_dict(self.sorder.get_order_details(oisn))
        if not order:
            print order
            return SYSTEM_ERROR
        if int(order['OIstatus']) != 1:
            return CANNOT_CANCEL
        session = db_session()
        try:
            session.query(OrderInfo).filter(OrderInfo.OIsn == oisn).update(
                {"OIstatus": 5})
            user = self.smycenter.get_user_basicinfo(request.user.id)
            if not user:
                raise dberror
            user = get_model_return_dict(user)
            session.query(User).filter(User.USid == request.user.id).update(
                {"USmount": user['USmount'] + order['OImount']})
            moneyrecord = MoneyRecord()  # 插入收支记录表
            moneyrecord.MRid = str(uuid.uuid4())
            moneyrecord.MRtype = 8
            moneyrecord.OIid = oisn
            moneyrecord.MRamount = order['OImount']
            moneyrecord.MRcreatetime = datetime.strftime(
                datetime.now(), format_for_db)
            moneyrecord.USid = request.user.id
            session.add(moneyrecord)
            session.commit()
        except Exception as e:
            print e
            session.rollback()
            return SYSTEM_ERROR
        finally:
            session.close()
        response = import_status("cancel_order_success", "OK")
        return response

    def timer_fun(self):  # 定时器
        global TIMER
        print "start timer_fun !"
        import datetime
        time_now = datetime.datetime.strftime(datetime.datetime.now(),
                                              '%Y%m%d%H%M%S')
        print time_now
        if time_now[8:10] == '04' or time_now[8:10] == '05' or time_now[
                8:10] == '06':
            order_list = get_model_return_list(
                self.sorder.get_all_order(None, None, None, 2, None, None))
            if order_list:
                for order in order_list:
                    time = datetime.datetime.strptime(order['OIcreatetime'],
                                                      '%Y%m%d%H%M%S')
                    print 'time', time
                    days_10 = (
                        time +
                        datetime.timedelta(days=10)).strftime("%Y%m%d%H%M%S")
                    print 'days_10', days_10
                    if time_now > days_10:
                        self.sorder.update_order(order['OIsn'],
                                                 {"OIstatus": 3})
        # 继续添加定时器,周期执行,否则只会执行一次
        print(u'当前线程数为{}'.format(threading.activeCount()))
        TIMER = threading.Timer(3600, self.timer_fun)
        TIMER.setDaemon(True)
        TIMER.start()
Beispiel #7
0
class CMyCenter():
    def __init__(self):
        self.smycenter = SMyCenter()
        self.suser = SUser()

    def get_inforcode(self):
        print "get_inforcode"
        try:
            args = request.args.to_dict()
            print args
            phonenum = args.get('usphonenum')
        except Exception as e:
            return PARAMS_ERROR
        if not phonenum:
            return PARAMS_ERROR
        code = ""
        while len(code) < 6:
            import random
            item = random.randint(1, 9)
            code = code + str(item)

        # 获取当前时间,与上一次获取的时间进行比较,小于60秒的获取直接报错
        import datetime
        from common.timeformat import format_for_db
        time_time = datetime.datetime.now()
        time_str = datetime.datetime.strftime(time_time, format_for_db)

        # 根据电话号码获取时间
        time_up = get_model_return_dict(
            self.smycenter.get_uptime_by_usphonenum(phonenum))
        if time_up:
            time_up_time = datetime.datetime.strptime(time_up['ICtime'],
                                                      format_for_db)
            delta = time_time - time_up_time
            if delta.seconds < 60:
                return import_status("ERROR_MESSAGE_GET_CODE_FAST",
                                     "BEILI_ERROR", "ERROR_CODE_GET_CODE_FAST")

        new_inforcode = self.smycenter.add_inforcode(phonenum, code, time_str)
        if not new_inforcode:
            return SYSTEM_ERROR

        from config.Inforcode import SignName, TemplateCode
        from common.Inforsend import send_sms
        params = '{\"code\":\"' + code + '\",\"product\":\"etech\"}'

        __business_id = uuid.uuid1()
        response_send_message = send_sms(__business_id, phonenum, SignName,
                                         TemplateCode, params)
        response_send_message = json.loads(response_send_message)

        if response_send_message["Code"] == "OK":
            status = 200
        else:
            status = 405

        response_ok = {"usphone": phonenum}
        response_ok["status"] = status
        response_ok["messages"] = response_send_message["Message"]
        return response_ok

    def check_inforcode(self):
        data = request.json
        try:
            phonenum = data.get('usphonenum')
            iccode = data.get('iccode')
        except Exception as e:
            return PARAMS_ERROR
        if not phonenum or not iccode:
            return PARAMS_ERROR
        codeinfo = get_model_return_dict(
            self.smycenter.get_inforcode_by_usphonenum(phonenum))
        if not codeinfo:
            return SYSTEM_ERROR
        checkstatus = True if iccode == codeinfo['ICcode'] else False
        checkmessage = u"验证码正确" if checkstatus is True else u"验证码错误"
        response = import_status("check_inforcode_access", "OK")
        response["data"] = {
            "checkstatus": checkstatus,
            "checkmessage": checkmessage
        }
        return response

    @verify_token_decorator
    def update_headimg(self):  # 更新头像
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            url = str(data.get("url"))
        except:
            return PARAMS_ERROR
        if not len(url) > 5:
            return PARAMS_MISS
        update = {}
        update['USheadimg'] = url
        self.suser.update_user_by_uid(request.user.id, update)
        response = import_status("updata_headimg_success", "OK")
        response["data"] = url
        return response

    @verify_token_decorator
    def get_user_basicinfo(self):
        if is_tourist():
            return TOKEN_ERROR
        result = get_model_return_dict(
            self.smycenter.get_user_basicinfo(request.user.id))
        if result:
            result['USmount'] = round(result['USmount'], 2)
            res = import_status("get_user_basicinfo_success", "OK")
            res['data'] = result
            return res
        else:
            return SYSTEM_ERROR

    @verify_token_decorator
    def get_user_totalinfo(self):
        if is_tourist():
            return TOKEN_ERROR
        result = get_model_return_dict(
            self.smycenter.get_user_totalinfo(request.user.id))

        if result:
            result['USmount'] = round(result['USmount'], 2)
            result['UScreatetime'] = get_web_time_str(result['UScreatetime'])
            res = import_status("get_user_totalinfo_success", "OK")
            res['data'] = result
            return res
        else:
            return SYSTEM_ERROR

    """省市区地址"""

    def get_province(self):
        try:
            province_list = get_model_return_list(
                self.smycenter.get_province())
            res = import_status("get_province_list_success", "OK")
            res["data"] = province_list
            return res
        except:
            return SYSTEM_ERROR

    def get_city_by_province(self):
        try:
            args = request.args.to_dict()
            province_id = args["provinceid"]
        except:
            return PARAMS_ERROR
        city_list = get_model_return_list(
            self.smycenter.get_city_by_provincenum(province_id))
        # map(lambda x: x.hide('_id'), city_list)
        res = import_status("get_city_list_success", "OK")
        res["data"] = city_list
        return res

    def get_area_by_city(self):
        try:
            args = request.args.to_dict()
            city_id = args['cityid']
        except:
            return PARAMS_ERROR
        area_list = get_model_return_list(
            self.smycenter.get_area_by_citynum(city_id))
        res = import_status("get_area_list_success", "OK")
        res["data"] = area_list
        return res

    def get_all_area(self):
        try:
            province_return = []
            province_list = get_model_return_list(
                self.smycenter.get_province())
            for province in province_list:
                province_dic = {}
                province_dic['name'] = province['provincename']
                province_dic['id'] = province['provinceid']
                city_list = get_model_return_list(
                    self.smycenter.get_city_by_provincenum(
                        province['provinceid']))
                city_return = []
                for city in city_list:
                    city_dic = {}
                    city_dic['name'] = city['cityname']
                    city_dic['id'] = city['cityid']
                    area_list = get_model_return_list(
                        self.smycenter.get_area_by_citynum(city['cityid']))
                    area_return = []
                    for area in area_list:
                        area_dict = {}
                        area_dict['name'] = area['areaname']
                        area_dict['id'] = area['areaid']
                        area_return.append(area_dict)
                    city_dic['area'] = area_return
                    city_return.append(city_dic)
                province_dic['city'] = city_return
                province_return.append(province_dic)
            res = import_status("get_all_area_success", "OK")
            res['data'] = province_return
        except:
            return SYSTEM_ERROR
        return res

    @verify_token_decorator
    def add_useraddress(self):
        if is_tourist():
            return TOKEN_ERROR

        try:
            data = request.json
            USname = data.get('USname')
            USphonenum = data.get("USphonenum")
            USdatails = data.get("details")
            areaid = data.get("areaid")
            if not areaid:
                cityid = data.get("cityid")
        except:
            return PARAMS_ERROR
        try:
            if areaid:
                all_areaid = get_model_return_list(
                    self.smycenter.get_all_areaid())
                area_list = []
                for area in all_areaid:
                    area_list.append(area['areaid'])
                if areaid not in area_list:
                    return BAD_ADDRESS
                import datetime
                from common.timeformat import format_for_db
                time_time = datetime.datetime.now()
                time_str = datetime.datetime.strftime(time_time, format_for_db)
                uaid = str(uuid.uuid1())
                exist_default = self.smycenter.get_default_address_by_usid(
                    request.user.id)
                uadefault = True if not exist_default else False
                self.smycenter.add_address(uaid, request.user.id, USname,
                                           USphonenum, USdatails, areaid,
                                           uadefault, time_str, None)
                response = import_status("add_address_success", "OK")
                response['data'] = {"UAid": uaid}
                return response
            else:
                all_cityid = get_model_return_list(
                    self.smycenter.get_all_cityid())

                cityid_list = []
                for city in all_cityid:
                    cityid_list.append(city['cityid'])
                if cityid not in cityid_list:
                    return BAD_ADDRESS
                import datetime
                from common.timeformat import format_for_db
                time_time = datetime.datetime.now()
                time_str = datetime.datetime.strftime(time_time, format_for_db)
                uaid = str(uuid.uuid1())
                exist_default = self.smycenter.get_default_address_by_usid(
                    request.user.id)
                uadefault = True if not exist_default else False
                self.smycenter.add_address(uaid, request.user.id, USname,
                                           USphonenum, USdatails, None,
                                           uadefault, time_str, cityid)
                response = import_status("add_address_success", "OK")
                response['data'] = {"UAid": uaid}
                return response
        except:
            return SYSTEM_ERROR

    @verify_token_decorator
    def get_useraddress(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            isdefault = int(data.get('isdefault'))
            all = int(data.get('all'))
            UAid = data.get('UAid')
        except:
            return PARAMS_ERROR
        from common.timeformat import get_web_time_str
        if all == 1:
            all_address = get_model_return_list(
                self.smycenter.get_all_address(request.user.id))
            if not all_address:
                response = import_status("get_address_success", "OK")
                response['data'] = []
                return response
            address_list = []
            for address in all_address:
                address = get_model_return_dict(
                    self.smycenter.get_other_address(request.user.id,
                                                     address['UAid']))
                if not address:
                    return NO_ADDRESS
                area = get_model_return_dict(
                    self.smycenter.get_area_by_areaid(address['areaid']))
                if area:
                    city = get_model_return_dict(
                        self.smycenter.get_city_by_cityid(area['cityid']))
                    province = get_model_return_dict(
                        self.smycenter.get_province_by_provinceid(
                            city['provinceid']))
                    data = {}
                    data['provincename'] = province['provincename']
                    data['provinceid'] = province['provinceid']
                    data['cityname'] = city['cityname']
                    data['cityid'] = city['cityid']
                    data['areaname'] = area['areaname']
                    data['areaid'] = area['areaid']
                    data['details'] = address['UAdetails']
                    data['username'] = address['UAname']
                    data['userphonenum'] = address['UAphonenum']
                    data['uaid'] = address['UAid']
                    data['isdefault'] = address['UAdefault']
                    data['createtime'] = get_web_time_str(
                        address['UAcreatetime'])
                    address_list.append(data)
                else:
                    city = get_model_return_dict(
                        self.smycenter.get_city_by_cityid(address['cityid']))
                    province = get_model_return_dict(
                        self.smycenter.get_province_by_provinceid(
                            city['provinceid']))
                    data = {}
                    data['provincename'] = province['provincename']
                    data['provinceid'] = province['provinceid']
                    data['cityname'] = city['cityname']
                    data['cityid'] = city['cityid']
                    data['details'] = address['UAdetails']
                    data['username'] = address['UAname']
                    data['userphonenum'] = address['UAphonenum']
                    data['uaid'] = address['UAid']
                    data['isdefault'] = address['UAdefault']
                    data['createtime'] = get_web_time_str(
                        address['UAcreatetime'])
                    address_list.append(data)
            response = import_status("get_address_success", "OK")
            response['data'] = address_list
            return response
        if isdefault == 1:
            address = get_model_return_dict(
                self.smycenter.get_default_address(request.user.id))
            if not address:
                response = import_status("get_address_success", "OK")
                response['data'] = []
                return response
            area = get_model_return_dict(
                self.smycenter.get_area_by_areaid(address['areaid']))
            if area:
                city = get_model_return_dict(
                    self.smycenter.get_city_by_cityid(area['cityid']))
                province = get_model_return_dict(
                    self.smycenter.get_province_by_provinceid(
                        city['provinceid']))
                data = {}
                data['provincename'] = province['provincename']
                data['provinceid'] = province['provinceid']
                data['cityname'] = city['cityname']
                data['cityid'] = city['cityid']
                data['areaname'] = area['areaname']
                data['areaid'] = area['areaid']
                data['details'] = address['UAdetails']
                data['username'] = address['UAname']
                data['userphonenum'] = address['UAphonenum']
                data['uaid'] = address['UAid']
                data['createtime'] = get_web_time_str(address['UAcreatetime'])
                response = import_status("get_address_success", "OK")
                response['data'] = data
                return response
            else:
                city = get_model_return_dict(
                    self.smycenter.get_city_by_cityid(address['cityid']))
                province = get_model_return_dict(
                    self.smycenter.get_province_by_provinceid(
                        city['provinceid']))
                data = {}
                data['provincename'] = province['provincename']
                data['provinceid'] = province['provinceid']
                data['cityname'] = city['cityname']
                data['cityid'] = city['cityid']
                data['details'] = address['UAdetails']
                data['username'] = address['UAname']
                data['userphonenum'] = address['UAphonenum']
                data['uaid'] = address['UAid']
                data['createtime'] = get_web_time_str(address['UAcreatetime'])
                response = import_status("get_address_success", "OK")
                response['data'] = data
                return response
        elif isdefault == 0:
            address = get_model_return_dict(
                self.smycenter.get_other_address(request.user.id, UAid))
            if not address:
                response = import_status("get_address_success", "OK")
                response['data'] = []
                return response
            area = get_model_return_dict(
                self.smycenter.get_area_by_areaid(address['areaid']))
            if area:
                city = get_model_return_dict(
                    self.smycenter.get_city_by_cityid(area['cityid']))
                province = get_model_return_dict(
                    self.smycenter.get_province_by_provinceid(
                        city['provinceid']))
                data = {}
                data['provincename'] = province['provincename']
                data['provinceid'] = province['provinceid']
                data['cityname'] = city['cityname']
                data['cityid'] = city['cityid']
                data['areaname'] = area['areaname']
                data['areaid'] = area['areaid']
                data['details'] = address['UAdetails']
                data['username'] = address['UAname']
                data['userphonenum'] = address['UAphonenum']
                data['uaid'] = address['UAid']
                data['createtime'] = get_web_time_str(address['UAcreatetime'])
                response = import_status("get_address_success", "OK")
                response['data'] = data
                return response
            else:
                city = get_model_return_dict(
                    self.smycenter.get_city_by_cityid(address['cityid']))
                province = get_model_return_dict(
                    self.smycenter.get_province_by_provinceid(
                        city['provinceid']))
                data = {}
                data['provincename'] = province['provincename']
                data['provinceid'] = province['provinceid']
                data['cityname'] = city['cityname']
                data['cityid'] = city['cityid']
                data['details'] = address['UAdetails']
                data['username'] = address['UAname']
                data['userphonenum'] = address['UAphonenum']
                data['uaid'] = address['UAid']
                data['createtime'] = get_web_time_str(address['UAcreatetime'])
                response = import_status("get_address_success", "OK")
                response['data'] = data
                return response

    @verify_token_decorator
    def update_useraddress(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            UAid = data.get('UAid')
            USname = data.get('USname')
            USphonenum = data.get('USphonenum')
            details = data.get('details')
            areaid = data.get('areaid')
            if not areaid:
                cityid = data.get('cityid')
        except:
            return PARAMS_ERROR
        update_address = {}
        update_address['UAname'] = USname
        update_address['UAphonenum'] = USphonenum
        update_address['UAdetails'] = details
        update_address['areaid'] = areaid
        if not areaid:
            update_address['cityid'] = cityid
        update_result = self.smycenter.update_address(request.user.id, UAid,
                                                      update_address)
        if update_result:
            response = import_status("update_address_success", "OK")
            return response
        else:
            return UPDATE_ADDRESS_FAIL

    @verify_token_decorator
    def change_default(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            old_defaultid = data.get('old_defaultid')
            new_defaultid = data.get('new_defaultid')
        except:
            return PARAMS_ERROR
        change_result = self.smycenter.change_default(request.user.id,
                                                      old_defaultid,
                                                      new_defaultid)
        if change_result:
            response = import_status("change_address_success", "OK")
            return response
        else:
            return CHANGE_ADDRESS_FAIL

    @verify_token_decorator
    def delete_useraddress(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            UAid = data.get('UAid')
        except:
            return PARAMS_ERROR
        this_address = get_model_return_dict(
            self.smycenter.get_other_address(request.user.id, UAid))
        if not this_address:
            return NOT_FOUND_ADDRESS
        updatde_address = {}
        updatde_address['UAstatus'] = False
        result = self.smycenter.delete_useraddress(request.user.id, UAid,
                                                   updatde_address)
        if result:
            if this_address['UAdefault']:
                try:
                    one_address = get_model_return_dict(
                        self.smycenter.get_one_address())
                    if one_address:
                        updatde_address = {}
                        updatde_address['UAdefault'] = True
                        self.smycenter.set_default(one_address['UAid'],
                                                   updatde_address)
                except:
                    return SYSTEM_ERROR
            response = import_status("delete_address_success", "OK")
            return response
        else:
            return NOT_FOUND_ADDRESS

    @verify_token_decorator
    def add_comments(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            data = request.json
            CMcontent = data['CMcontent']
        except:
            return PARAMS_ERROR
        try:
            import datetime
            from common.timeformat import format_for_db
            time_time = datetime.datetime.now()
            CMcreatetime = datetime.datetime.strftime(time_time, format_for_db)
            usid = request.user.id
            user = get_model_return_dict(
                self.smycenter.get_user_basicinfo(usid))
            if not user:
                return NOT_FOUND_USER
            result = self.smycenter.add_comment(usid, user['USname'],
                                                user['USphonenum'], CMcontent,
                                                CMcreatetime)
            if not result:
                return SYSTEM_ERROR
            response = import_status("add_comment_success", "OK")
            return response
        except Exception as e:
            print e
            return SYSTEM_ERROR

    @verify_token_decorator
    def get_comment_list(self):
        if not is_admin():
            return TOKEN_ERROR
        try:
            args = request.args.to_dict()
            page_num = int(args.get("page_num"))
            page_size = int(args.get("page_size"))
            status = int(args.get("status"))
        except:
            return PARAMS_ERROR
        try:
            comment_list = get_model_return_list(
                self.smycenter.get_comments(status))
            if not comment_list:
                response = import_status('get_commentslist_success', 'OK')
                response['data'] = []
                response['mount'] = 0
                return response
            for comment in comment_list:
                comment['CMcreatetime'] = get_web_time_str(
                    comment['CMcreatetime'])
            mount = len(comment_list)
            page = mount / page_size
            if page == 0 or page == 1 and mount % page_size == 0:
                return_list = comment_list[0:]
            else:
                if ((mount - (page_num - 1) * page_size) / page_size) >= 1 and \
                        (mount - (page_num * page_size)) > 0:
                    return_list = comment_list[((page_num - 1) *
                                                page_size):(page_num *
                                                            page_size)]
                else:
                    return_list = comment_list[((page_num - 1) * page_size):]
            response = import_status('get_commentslist_success', 'OK')
            response['data'] = return_list
            response['mount'] = mount
            return response
        except Exception as e:
            print e
            return SYSTEM_ERROR

    @verify_token_decorator
    def deal_comments(self):
        if not is_admin():
            return TOKEN_ERROR
        try:
            data = request.json
            cmid = data.get('cmid')
        except:
            return PARAMS_ERROR
        result = self.smycenter.deal_comments(cmid)
        if not result:
            return SYSTEM_ERROR
        response = import_status("deal_comment_success", "OK")
        return response
Beispiel #8
0
class CUser():
    def __init__(self):
        self.suser = SUser()
        self.smycenter = SMyCenter()

    def login(self):
        print "hello"
        json_data = request.json
        if not json_data:
            return PARAMS_ERROR
        usphonenum = json_data.get('usphonenum')
        uspassword = json_data.get('uspassword')
        if not usphonenum or not uspassword:
            return PARAMS_MISS(u'请输入手机号或密码')
        print type(usphonenum)
        user = get_model_return_dict(
            self.suser.getuser_by_phonenum(usphonenum))
        # print "aaaa" + user.USphone + ":" + user.USpassword
        # print(dir(user))
        # print user.USphonenum
        # print type(user.USphonenum)
        if not user or uspassword != user['USpassword']:
            return PHONE_OR_PASSWORD_WRONG
        token = usid_to_token(user['USid'])
        data = import_status('generic_token_success', "OK")
        data['data'] = {
            'token': token,
        }
        return data

    @verify_token_decorator
    def update_pwd(self):
        if is_tourist():
            return TOKEN_ERROR(u"未登录")
        json_data = request.json
        if not json_data:
            return PARAMS_MISS
        oldpassword = json_data.get('oldpassword')
        newpassword = json_data.get('newpassword')
        user = get_model_return_list(self.suser.getuser_by_uid(
            request.user.id))
        if not user or user[0]['USpassword'] != oldpassword:
            return PASSWORD_WRONG
        user_update = {}
        user_update["USpassword"] = newpassword
        self.suser.update_user_by_uid(request.user.id, user_update)
        data = import_status("update_password_success", "OK")
        return data

    def findback_pwd(self):
        try:
            data = request.json
            phonenum = data.get('usphonenum')
            iccode = data.get('iccode')
            newpassword = data.get('newpassword')
        except Exception as e:
            return PARAMS_ERROR
        if not phonenum or not iccode or not newpassword:
            return PARAMS_ERROR
        codeinfo = get_model_return_dict(
            self.smycenter.get_inforcode_by_usphonenum(phonenum))
        if not codeinfo:
            return SYSTEM_ERROR
        if iccode != codeinfo['ICcode']:
            return INFORCODE_WRONG
        user = get_model_return_dict(self.suser.getuser_by_phonenum(phonenum))
        if not user:
            return NOT_FOUND_USER
        user_update = {}
        user_update["USpassword"] = newpassword
        self.suser.update_user_by_uid(user['USid'], user_update)
        data = import_status("update_password_success", "OK")
        return data

    @verify_token_decorator
    def update_headimg(self):  # 更新头像
        if not is_ordirnaryuser():
            return AUTHORITY_ERROR(u"权限不足")
        files = request.files.get("file")
        if not files:
            return NOT_FOUND_IMAGE(u"图片不存在")
        if platform.system() == "Windows":
            rootdir = "D:/task"
        else:
            rootdir = "/opt/beili/imgs/mycenter/"
        if not os.path.isdir(rootdir):
            os.mkdir(rootdir)
        lastpoint = str(files.filename).rindex(".")
        filessuffix = str(files.filename)[lastpoint + 1:]
        filename = request.user.id + get_db_time_str() + "." + filessuffix
        filepath = os.path.join(rootdir, filename)
        print(filepath)
        files.save(filepath)
        response = import_status("updata_headimg_success", "OK")
        # url = Inforcode.ip + Inforcode.LinuxImgs + "/" + filename
        url = QRCODEHOSTNAME + "/imgs/mycenter/" + filename
        user_update = {}
        user_update['USheadimg'] = url
        self.suser.update_user_by_uid(request.user.id, user_update)
        # print(url)
        response["data"] = url
        return response

    @verify_token_decorator
    def upload_file(self):
        if is_tourist():
            return TOKEN_ERROR
        try:
            files = request.files.get("file")
        except:
            return PARAMS_ERROR
        if not files:
            return NOT_FOUND_FILE
        if platform.system() == "Windows":
            rootdir = "D:/task"
        else:
            rootdir = "/opt/beili/file/"
        if not os.path.isdir(rootdir):
            os.makedirs(rootdir)
        lastpoint = str(files.filename).rindex(".")
        filessuffix = str(files.filename)[lastpoint + 1:]
        filename = request.user.id + get_db_time_str() + "." + filessuffix
        filepath = os.path.join(rootdir, filename)
        print(filepath)
        files.save(filepath)
        response = import_status("upload_file_success", "OK")
        url = QRCODEHOSTNAME + "/file/" + filename
        response["data"] = url
        return response
Beispiel #9
0
class COrder():
    def __init__(self):
        self.suser = SUser()
        self.sorder = SOrder()
        self.sgoods = SGoods()
        self.smycenter = SMyCenter()
        self.smessage = SMessage()

    @verify_token_decorator
    def create_order(self):
        if is_tourist():
            return TOKEN_ERROR
        data = request.json
        if not data:
            return PARAMS_MISS
        params_list = [
            "UAid", "product_list", "OInote", "PRlogisticsfee", "totalprice"
        ]
        for params in params_list:
            if params not in data:
                return PARAMS_MISS
        try:
            UAid = data['UAid']
            OInote = data['OInote']
            product_list = data['product_list']
            PRlogisticsfee = float(data['PRlogisticsfee'])
            totalprice = float(data['totalprice'])
        except:
            return PARAMS_ERROR
        if len(product_list) > 1:
            real_PRlogisticsfee = 0
        else:
            real_PRlogisticsfee = get_model_return_dict(
                self.sgoods.get_product(
                    product_list[0]['PRid']))['PRlogisticsfee']
        user_info = get_model_return_dict(
            self.smycenter.get_user_basicinfo(request.user.id))
        if not user_info:
            return SYSTEM_ERROR
        if user_info['USbail'] < BAIL:
            return NO_BAIL
        mount = 0
        new_list = []
        try:
            for product in product_list:
                num = product['PRnum']
                check_product = get_model_return_dict(
                    self.sgoods.get_product(product['PRid']))
                mount = mount + num * check_product['PRprice']
                product['PRprice'] = check_product['PRprice']
                new_list.append(product)
            if totalprice != mount or real_PRlogisticsfee != PRlogisticsfee:
                response = {}
                response['status'] = 200
                response['success'] = False
                response['data'] = new_list
                response['PRlogisticsfee'] = real_PRlogisticsfee
                response['totalprice'] = mount
                return response
            if user_info['USmount'] < mount + PRlogisticsfee:
                return NO_ENOUGH_MOUNT
        except:
            return SYSTEM_ERROR
        session = db_session()
        try:
            OIid = str(uuid.uuid4())
            OIsn = datetime.strftime(datetime.now(), format_for_db) + str(
                random.randint(10000, 100000))
            OIcreatetime = datetime.strftime(datetime.now(), format_for_db)
            result = self.sorder.check_stock(new_list)
            if not result:
                return SYSTEM_ERROR
            result = self.sorder.add_order(session, OIid, OIsn,
                                           request.user.id, OInote, mount,
                                           UAid, OIcreatetime, PRlogisticsfee)
            if not result:
                raise dberror
            for product in new_list:
                OPIid = str(uuid.uuid4())
                PRid = product['PRid']
                PRnum = product['PRnum']
                PRname = product['PRname']
                PRimage = get_model_return_dict(
                    self.sgoods.get_product(PRid))['PRpic']
                PRprice = product['PRprice']
                result = self.sorder.add_orderproductinfo(
                    session, OPIid, OIid, PRid, PRname, PRprice, PRnum,
                    PRimage)
                if not result:
                    raise dberror
            user = {}
            user['USmount'] = user_info['USmount'] - mount
            session.query(User).filter_by(USid=request.user.id).update(user)
            agentmessage = AgentMessage()
            agentmessage.AMid = str(uuid.uuid4())
            agentmessage.USid = request.user.id
            agentmessage.AMdate = OIcreatetime
            agentmessage.AMtype = 0
            agentmessage.AMcontent = u'您的订单创建成功,订单号为' + ' ' + str(OIsn)
            session.add(agentmessage)
            session.commit()
        except stockerror as e:
            session.rollback()
            return STOCK_NOT_ENOUGH
        except Exception as e2:
            session.rollback()
            print e2.message
            return SYSTEM_ERROR
        finally:
            session.close()
        response = import_status("create_order_success", "OK")
        response['success'] = True
        return response

    @verify_token_decorator
    def get_order_list(self):
        if is_tourist():
            return TOKEN_ERROR
        data = request.json
        if not data:
            return PARAMS_MISS
        try:
            type = int(data.get('type'))
            page = int(data.get('page'))
            count = int(data.get('count'))
        except:
            return PARAMS_ERROR
        order_return_list = []
        if type == 0:
            order_list = get_model_return_list(
                self.sorder.get_allorder_list(request.user.id, page, count))
            state0 = int(self.sorder.get_total_order_num(
                request.user.id)) if self.sorder.get_total_order_num(
                    request.user.id) else 0
            state1 = int(self.sorder.get_order_num(
                request.user.id, 1)) if self.sorder.get_order_num(
                    request.user.id, 1) else 0
            state2 = int(self.sorder.get_order_num(
                request.user.id, 2)) if self.sorder.get_order_num(
                    request.user.id, 2) else 0
            state3 = int(self.sorder.get_order_num(
                request.user.id, 3)) if self.sorder.get_order_num(
                    request.user.id, 3) else 0
            for order in order_list:
                product_list = get_model_return_list(
                    self.sorder.get_product_list(order['OIid']))
                order['product_list'] = product_list
                from common.timeformat import get_web_time_str
                order['OIcreatetime'] = get_web_time_str(order['OIcreatetime'])
                order_return_list.append(order)
            response = import_status("get_orderlist_success", "OK")
            response['data'] = order_return_list
            response['state0_num'] = state0
            response['state1_num'] = state1
            response['state2_num'] = state2
            response['state3_num'] = state3
            return response
        else:
            order_list = get_model_return_list(
                self.sorder.get_order_list(request.user.id, type, page, count))
            if not order_list:
                response = import_status("get_orderlist_success", "OK")
                response['data'] = order_return_list
                return response
            for order in order_list:
                product_list = get_model_return_list(
                    self.sorder.get_product_list(order['OIid']))
                order['product_list'] = product_list
                from common.timeformat import get_web_time_str
                order['OIcreatetime'] = get_web_time_str(order['OIcreatetime'])
                order_return_list.append(order)
            response = import_status("get_orderlist_success", "OK")
            response['data'] = order_return_list
            return response

    @verify_token_decorator
    def get_order_details(self):
        if is_tourist():
            return TOKEN_ERROR
        data = request.json
        if not data:
            return PARAMS_MISS
        try:
            OIsn = int(data.get('OIsn'))
        except:
            return PARAMS_ERROR
        detail = get_model_return_dict(self.sorder.get_order_details(OIsn))
        if not detail:
            response = import_status("get_orderdetails_success", "OK")
            response['data'] = []
            return response
        address = get_model_return_dict(
            self.smycenter.get_other_address(request.user.id, detail['UAid']))
        if not address:
            return NO_ADDRESS
        area = get_model_return_dict(
            self.smycenter.get_area_by_areaid(address['areaid']))
        from common.timeformat import get_web_time_str
        if area:
            city = get_model_return_dict(
                self.smycenter.get_city_by_cityid(area['cityid']))
            province = get_model_return_dict(
                self.smycenter.get_province_by_provinceid(city['provinceid']))
            detail['provincename'] = province['provincename']
            detail['cityname'] = city['cityname']
            detail['areaname'] = area['areaname']
            detail['details'] = address['UAdetails']
            detail['username'] = address['UAname']
            detail['userphonenum'] = address['UAphonenum']
            detail['createtime'] = get_web_time_str(address['UAcreatetime'])
        else:
            city = get_model_return_dict(
                self.smycenter.get_city_by_cityid(address['cityid']))
            province = get_model_return_dict(
                self.smycenter.get_province_by_provinceid(city['provinceid']))
            detail['provincename'] = province['provincename']
            detail['cityname'] = city['cityname']
            detail['details'] = address['UAdetails']
            detail['username'] = address['UAname']
            detail['userphonenum'] = address['UAphonenum']
            detail['createtime'] = get_web_time_str(address['UAcreatetime'])
        product_list = get_model_return_list(
            self.sorder.get_product_list(detail['OIid']))
        detail['product_list'] = product_list
        response = import_status("get_orderdetails_success", "OK")
        response['data'] = detail
        return response