def __init__(self): try: self.session = db_session() # 实例化 self.status = True # session异常的判断标记 except Exception as e: print(e) self.status = False
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()
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 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
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
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
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 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
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
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()
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