Beispiel #1
0
 def __init__(self):
     try:
         self.session = db_session()  # 实例化
         self.status = True  # session异常的判断标记
     except Exception as e:
         print(e)
         self.status = False
Beispiel #2
0
 def modify(self):
     all_order = get_model_return_list(self.sorder.get_all_order(None, None, None, 1, None, None))\
         + get_model_return_list(self.sorder.get_all_order(None, None, None, 2, None, None))\
         + get_model_return_list(self.sorder.get_all_order(None, None, None, 4, None, None)) \
         + get_model_return_list(self.sorder.get_all_order(None, None, None, 5, None, None))
     session = db_session()
     try:
         for order in all_order:
             product_list = get_model_return_list(
                 self.sorder.get_product_list(order['OIid']))
             real_discount = 0
             for product in product_list:
                 check_product = get_model_return_dict(
                     self.sgoods.get_product_info(product['PRid']))
                 sku_list = get_model_return_list(
                     self.sorder.get_sku_list_by_opiid(product['OPIid']))
                 for sku in sku_list:
                     real_discount = real_discount + sku[
                         'number'] * check_product['PAdiscountnum']
             session.query(OrderInfo).filter(
                 OrderInfo.OIid == order['OIid']).update(
                     {'discountnum': real_discount})
         session.commit()
     except:
         session.rollback()
     finally:
         session.close()
     session = db_session()
     try:
         amount_list = get_model_return_list(
             session.query(Amount.AMmonth, Amount.USid).all())
         for amount in amount_list:
             real_amount = 0
             order_list = get_model_return_list(
                 session.query(OrderInfo.discountnum).filter(
                     OrderInfo.USid == amount['USid']).filter(
                         OrderInfo.OIstatus == 2).all())
             for order in order_list:
                 real_amount = real_amount + order['discountnum']
             session.query(Amount).filter(
                 Amount.USid == amount['USid']).update(
                     {'performance': real_amount})
         session.commit()
     except:
         session.rollback()
     finally:
         session.close()
 def inner(self, *args, **kwargs):
     parameter = request.args.to_dict()
     token = parameter.get('token')
     s = Serializer(current_app.config['SECRET_KEY'])
     try:
         data = s.loads(token)
     except BadSignature as e:
         # 签名出错的token
         return func(self, *args, **kwargs)
     except SignatureExpired as e:
         # 过期的token
         return func(self, *args, **kwargs)
     except Exception as e:
         # 无法解析的token
         return func(self, *args, **kwargs)
     id = data['id']
     time = data['time']
     type = data['type']
     if type != 'User' and type != 'SuperUser' and type != 'Temp':
         return func(self, *args, **kwargs)
     sessions = db_session()
     try:
         if type == 'User':
             from models.model import User
             user = sessions.query(User).filter_by(USid=id).first()
             if not user:
                 # 不存在的用户
                 return func(self, *args, **kwargs)
             user.id = user.USid
             user.type = 'User'
         if type == 'SuperUser':
             from models.model import Admin
             user = sessions.query(Admin).filter_by(ADid=id).first()
             if not user:
                 # 不存在的管理
                 return func(self, *args, **kwargs)
             user.id = user.ADid
             user.type = 'SuperUser'
             user.level = user.ADlevel
         if type == 'Temp':
             request.temp = id
         sessions.expunge_all()
         sessions.commit()
         if user:
             request.user = user
         return func(self, *args, **kwargs)
     finally:
         sessions.close()
Beispiel #4
0
 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
Beispiel #5
0
 def delete_shoppingcart_sku(self):
     if not is_ordirnaryuser():
         return TOKEN_ERROR
     try:
         data = request.json
         scidlist = data.get('scidlist')
     except:
         return PARAMS_ERROR
     update = {
         "SCstatus": 0
     }
     session = db_session()
     try:
         for scid in scidlist:
             self.sgoods.update_user_sku_by_scid(session, request.user.id, str(scid), update)
         session.commit()
     except Exception as e:
         print e
         session.rollback()
         return SYSTEM_ERROR
     finally:
         session.close()
     response = import_status("delete_shoppingcart_sku_success", "OK")
     return response
Beispiel #6
0
    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
Beispiel #7
0
 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
Beispiel #8
0
 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
Beispiel #9
0
    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
Beispiel #10
0
    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
Beispiel #11
0
 def create_update_product(self):
     if not is_admin():
         return AUTHORITY_ERROR
     params = ['paid', 'prname', 'prpic', 'sowingmap', 'proldprice', 'prprice', 'skulist', 'prlogisticsfee'
         , 'prdiscountnum', 'prstatus', 'detailpics']
     data = request.json
     for param in params:
         if param not in data:
             response = {}
             response['message'] = u"参数缺失"
             response['paramname'] = param
             response['status'] = 405
             return response
     paid = data.get('paid')
     prname = data.get('prname')
     prpic = data.get('prpic')
     proldprice = data.get('proldprice')
     prprice = data.get('prprice')
     prlogisticsfee = data.get('prlogisticsfee')
     prdiscountnum = data.get('prdiscountnum')
     prstatus = data.get('prstatus')
     prid = data.get('prid')
     skulist = data.get('skulist')
     sowingmap = ",".join(data.get('sowingmap'))
     detailpics = ",".join(data.get('detailpics'))
     session = db_session()
     try:
         if prid:
             product = {}
             product['PAid'] = paid
             product['PRname'] = prname
             product['PRpic'] = prpic
             product['PRoldprice'] = proldprice
             product['PRprice'] = prprice
             product['PRlogisticsfee'] = prlogisticsfee
             product['PRstatus'] = prstatus
             product['PAdiscountnum'] = prdiscountnum
             product['sowingmap'] = sowingmap
             product['detailpics'] = detailpics
             result = self.sgoods.update_product(session, prid, product)
             if not result:
                 return SYSTEM_ERROR
             skuid_list = get_model_return_list(self.sgoods.get_all_skuid(session, prid))
             db_skuid_list = []
             for id in skuid_list:
                 db_skuid_list.append(id['PSid'])
             web_skuid_list = []
             for sku in skulist:
                 if not sku['psid']:
                     coid = sku['coid']
                     colorname = sku['colorname']
                     siid = sku['siid']
                     sizename = sku['sizename']
                     stock = sku['stock']
                     time_now = datetime.strftime(datetime.now(), format_for_db)
                     self.sgoods.create_sku(session, prid, coid, colorname, siid, sizename, stock, time_now)
                 if sku['psid']:
                     web_skuid_list.append(sku['psid'])
                     self.sgoods.update_sku(session, prid, sku['psid'], {'PSstock': sku['stock']})
             for dbskuid in db_skuid_list:
                 if dbskuid not in web_skuid_list:
                     session.query(ProductSku).filter(ProductSku.PRid == prid).filter(ProductSku.PSid == dbskuid)\
                     .update({'PSstatus': 0})
             session.commit()
             response = import_status("update_product_success", "OK")
             return response
         else:
             time_now = datetime.strftime(datetime.now(), format_for_db)
             prid = str(uuid.uuid4())
             result = self.sgoods.create_product(session, prid, paid, prname, prpic, proldprice, prprice
                                        , prlogisticsfee, prstatus, prdiscountnum, time_now, sowingmap, detailpics)
             if not result:
                 return SYSTEM_ERROR
             for sku in skulist:
                 coid = sku['coid']
                 colorname = sku['colorname']
                 siid = sku['siid']
                 sizename = sku['sizename']
                 stock = sku['stock']
                 time_now = datetime.strftime(datetime.now(), format_for_db)
                 self.sgoods.create_sku(session, prid, coid, colorname, siid, sizename, stock, time_now)
             session.commit()
             response = import_status("create_product_success", "OK")
             return response
     except Exception as e:
         print e
         session.rollback()
         return SYSTEM_ERROR
     finally:
         session.close()
Beispiel #12
0
 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