def get_activity_count(self, acfilter): settings = Partner() skiptype = settings.get_item('skip', 'skip_type') acfilter.add(Activity.ACisdelete == False) acfilter.add(Activity.ACSkipType == skiptype) return self.session.query(Activity).filter(*acfilter).count()
def get(self): """verfity token test""" pn = Partner() pn.three_level_divide = 'newthree' pn.three_level_divide return 'ok'
def get_show_type(self): if not is_admin(): raise AUTHORITY_ERROR(u'请使用管理员登录') settings = Partner() skiptype = settings.get_item('skip', 'skip_type') response = import_status("messages_get_item_ok", "OK") response['data'] = {'skiptype': skiptype} return response
def __init__(self): from WeiDian.service.SCommision import SCommision self.scommion = SCommision() from WeiDian.service.SUser import SUser self.suser = SUser() from WeiDian.control.Cuser import CUser self.cuser = CUser() from WeiDian.common.divide import Partner self.pn = Partner() self.empty = ['', {}, [], None]
def get_today_total(self): """今日""" if not is_partner(): raise TOKEN_ERROR(u'请使用vip登录') usid = request.user.id # 今日营业额 today_orders = self.sorder.get_today_order_by_usid_status( usid, finished_pay_status) sold_mount_list = [x.OImount for x in today_orders] or [0] sold_mount = sum(sold_mount_list) # 今日赚 today_earn = sold_mount * Partner().one_level_divide today_earn = round(today_earn, 2) # 额外赚 # todo other_earn = 0 # 新衣币 new_cloth_bit = self.sraward.get_reward_by_usid(usid) bit_num_list = [x.RAnumber for x in new_cloth_bit] or [0] bit_num_mount = sum(bit_num_list) response = import_status('get_today_earn_success', 'OK') data = { 'sold_mount': sold_mount, 'today_earn': today_earn, 'other_earn': other_earn, 'bit_num_mount': bit_num_mount } response['data'] = data return response
def set_share_params(self): if not is_admin(): raise TOKEN_ERROR(u'请使用管理员登录') data = request.json title = data.get('title') # title = title.encode("utf8") if isinstance(title, unicode) else title content = data.get('content') img = data.get('img') parameter_required('title', 'content', 'img') Partner().set_item('share', 'title', title) Partner().set_item('share', 'content', content) Partner().set_item('share', 'img', img) response = import_status('set_success', 'OK') return response
def post(self): """generic token test""" usid = '6882ad09-bf5f-4607-8ad1-1cd46b6158e0' pn = Partner() import ipdb raise BaseError(message='测试信d息')
def set_schedual_show(self): """设置个人主页升级进度显示(vip数据统计), 素材圈显示, 待评价""" if not is_admin(): raise TOKEN_ERROR(u'请使用管理员登录') # data = parameter_required(u'vip_match', u'material', u'wait_apply') data = request.json paras_list = ['vip_match', 'material', 'wait_apply'] if not data or not filter(lambda x: x in paras_list, data): raise PARAMS_MISS() if 'vip_match' in data: # vip进度, 写在model里 vip_match_show = False if str( data.get('vip_match')) == '1' else True updated = self.spartnermatch.update_partner_match( 1, { # 更改: 这里的level没有用 'PSIMisclose': vip_match_show }) if 'material' in data: # 素材圈是否显示, 写在model里 material_show = False if str(data.get('material')) == '1' else True updated = self.stopnav.update_topnav_by_tnidorname( data={'Tisdelete': material_show}, name='素材圈') if 'wait_apply' in data: # 写在配置文件里 wait_apply_show = data.get('wait_apply') wait_apply_show = '0' if str(wait_apply_show) == '0' else '1' Partner().set_item('show', 'wait_apply', wait_apply_show) msg = 'update_success' data = import_status(msg, "OK") return data
def get_true_price(self, pskid=None, partner=False): """获取真实价格""" psk = self.session.query(ProductSkuKey).filter( ProductSkuKey.PSKid == pskid, ProductSkuKey.PSisdelete != 0).first() # prid = psk.PRid # product = self.session.query(Product).filter(Product.PRid == prid).first() profit = Decimal(str(getattr(psk, 'PSKprofict', 5) or 5)) if partner: temp = profit * Decimal(str(Partner().one_level_divide)) return float(Decimal(str(psk.PSKprice)) - temp) return float(Decimal(str(psk.PSKprice)))
def get_share_params(self): args = request.args.to_dict() prid = args.get('prid') logger.debug("get share params args is %s", args) if prid: from WeiDian.service.SActivity import SActivity actext_by_prid = get_model_return_dict( SActivity().get_one_act_by_prid(prid))['ACtext'] title = actext_by_prid.split(u'。')[0] content = actext_by_prid.split(u'。')[-1] img = get_model_return_dict( self.sproduct.get_prmainpic_by_prid(prid))['PRmainpic'] else: settings = Partner() title = settings.get_item('share', 'title') content = settings.get_item('share', 'content') img = settings.get_item('share', 'img') response = import_status("messages_get_item_ok", "OK") response['data'] = {'title': title, 'content': content, 'img': img} return response
def set_show_type(self): if not is_admin(): raise TOKEN_ERROR(u'请使用管理员登录') data = parameter_required('skip_type') try: skip_type = str(data.get('skip_type')) if skip_type not in ['0', '1', '2']: raise TypeError() except TypeError as e: raise PARAMS_ERROR(u'参数skip_type错误') Partner().set_item('skip', 'skip_type', skip_type) response = import_status('set_success', 'OK') return response
def get_schedual_show(self): """获取控制中心显示隐藏详情""" match = self.spartnermatch.get_lasting_partner_match(level=1) vip_match = 1 if match else 0 mater = self.stopnav.get_topnav_by_name('素材圈') material = 0 if mater.Tisdelete else 1 wait_apply = Partner().get_item('show', 'wait_apply') data = import_status('get_success', 'OK') data['data'] = { 'vip_match': vip_match, 'material': material, 'wait_apply': wait_apply, } return data
def fill_product(self, act): """填充活动商品""" # 粉丝页面显示本身价格和店主价, 以及相关商品推荐(规则?) prid = act.AClinkvalue product = self.sproduct.get_product_by_prid(prid) if product: prkeeperprice = product.PRprice * (1 - Partner().one_level_divide) product.prkeeperprice = ('%.2f' % prkeeperprice) prsavemonty = product.PRprice - prkeeperprice product.PRprice = ('%.2f' % product.PRprice) product.prsavemonty = ('%.2f' % prsavemonty) product.add('prkeeperprice', 'prsavemonty', 'prprice') act.product = product act.add('product') return act
def fill_sku(self, cart): """ 填充选择的sku信息 """ pskid = cart.PSKid if pskid: sku = self.sproductskukey.get_psk_by_pskid(pskid) if not sku: return cart sku.add('PSKproperkey') # 价格计算, 合伙人优惠 cart.PRprice = float(sku.PSKprice) * \ Partner().one_level_divide if is_partner() else float(sku.PSKprice) cart.subtotal = cart.PRprice * cart.SCnums cart.current_sku = sku cart.add('current_sku', 'subtotal') return cart
def fill_recommend_product(self, recommend): """日荐页中中部商品填充""" reid = recommend.REid products = self.sproduct.get_product_list_by_reid(reid) from WeiDian.service.SRecommend import SRecommend for product in products: product.rpsort = get_model_return_dict( SRecommend().get_recommendproduct_sort_by_filter({ 'REid': reid, 'PRid': product.PRid }))['RPsort'] prkeeperprice = product.PRprice * (1 - Partner().one_level_divide) product.prkeeperprice = ('%.2f' % prkeeperprice) prsavemonty = product.PRprice - prkeeperprice product.prsavemonty = ('%.2f' % prsavemonty) product.PRprice = ('%.2f' % product.PRprice) product.add('prkeeperprice', 'prsavemonty', 'rpsort') recommend.products = products recommend.add('products') return recommend
def __init__(self): from WeiDian.service.SProduct import SProduct self.sproduct = SProduct() from WeiDian.service.SProductSkuValue import SProductSkuValue self.sproductskuvalue = SProductSkuValue() from WeiDian.service.SProductImage import SProductImage self.sproductimage = SProductImage() from WeiDian.service.SProductSkuKey import SProductSkuKey self.sproductskukey = SProductSkuKey() from WeiDian.service.SActivity import SActivity self.sactivity = SActivity() from WeiDian.service.SProductLike import SProductLike self.sproductlike = SProductLike() from WeiDian.control.Cuser import CUser self.cuser = CUser() from WeiDian.service.SBigActivity import SBigActivity self.sbigactivity = SBigActivity() from WeiDian.service.STopNav import STopNav self.stopnav = STopNav() from WeiDian.service.SOrder import SOrder self.sorder = SOrder() from WeiDian.service.SSuperUser import SSuperUser self.ssuperuser = SSuperUser() self.empty = ['', [], {}, None] # 后续修改 self.partner = Partner() self.update_sku_params = [ 'PRid', "PSVid", 'PSKproductnum', 'PSKalias', 'PSKprice', 'PSKpostfee', 'PSKactiviyid', 'PSKproperkey', "PSisdelete" ] self.update_product_params = [ 'PRmainpic', 'PRdetail', 'PRimporturl', 'PRishot', 'PRtitle', 'PRname', 'Maketlias', 'PRalias', 'PRprice', 'PReditstate', 'PRsalesvolume', 'PRoldprice', 'PRchannelname', 'PRvipprice', 'PRlogisticsfee', 'PRchannelid', 'SUid', 'PRstock', 'PRsalestatus', 'PRishhare', 'PRtarget', 'PRviewnum', 'PRfakeviewnum', 'PRfakelikenum', 'PRsalefakenum', 'PRbaid' ]
def get_all(self): """获取条件下的所有活动 """ if is_tourist(): return AUTHORITY_ERROR(u"未登录") args = request.args.to_dict() logger.info("this is get all activity args %s", args) parameter_required(u'tnid') tnid = args.get('tnid') # 导航id suid = args.get('suid') # 管理员id lasting = args.get('lasting', 'true') # 是否正在进行的活动 acid = args.get("acid") if not acid: acid = None start = int(args.get('start', 0)) # 起始位置 count = int(args.get('count', 5)) # 取出条数 page = (args.get('page')) # 过滤跳转类型 skiptype = args.get('skiptype') if skiptype is None: settings = Partner() skiptype = settings.get_item('skip', 'skip_type') # 配置文件中的过滤条件(默认) if skiptype == 'all': skiptype = None # 分页 if not page: page = int(math.floor(start / count) + 1) if not (tnid or suid): raise PARAMS_MISS(u"参数缺失") try: topnav = self.stopnav.get_topnav_by_tnid(tnid) if not topnav: raise NOT_FOUND(u'无此tnid') if topnav.TNtype == 2 and str(tnid) != '1': # '1'为每日十荐页tnid skiptype = 0 print(skiptype) now_time = None if str(lasting) == 'true': now_time = datetime.strftime(datetime.now(), format_for_db) activity_list = self.sactivity.get_activity_by_topnavid( tnid, page, count, skiptype, acid, suid, now_time) logger.info("get activity_list success") # if suid: # activity_list = self.sactivity.get_activity_by_suid(suid, page, count) # if not activity_list: # raise SYSTEM_ERROR(u'数据库错误') for activity in activity_list: self.sactivity.update_view_num(activity.ACid) self.fill_detail(activity) self.fill_like_num(activity) self.fill_type(activity) activity.fill(activity.AClinkvalue, 'aclinkvalue') if activity.ACSkipType == 0: self.fill_comment_two(activity) activity.fill('none_skip', 'skip_type') activity.fill('无跳转类型', 'zh_skip_type') elif activity.ACSkipType == 1: baid = activity.AClinkvalue activity.fill('bigactivity', 'skip_type') activity.fill('专题', 'zh_skip_type') bigactivity = self.sbigactivity.get_one_big_act(baid) if not bigactivity: # raise NOT_FOUND() pass else: bigactivity_type = bigactivity.BAtype big_activity_content = {'type': bigactivity_type} big_activity_content.setdefault( 'baid', bigactivity.BAid) # 图片类型专题 if bigactivity_type == 0: big_activity_content.setdefault( 'baimage', bigactivity.BAlongimg) # 返回字段不修改 big_activity_content.setdefault( 'baid', bigactivity.BAid) activity.fill(big_activity_content, 'bigactivity') elif activity.ACSkipType == 2: self.fill_soldnum(activity) self.fill_product(activity) activity.fill('product', 'skip_type') activity.fill('商品', 'zh_skip_type') activity.ACstarttime = get_web_time_str(activity.ACstarttime) activity.ACendtime = get_web_time_str(activity.ACendtime) data = import_status("get_activity_list_success", "OK") data["count"] = request.all_count data["page_count"] = request.page_count data["data"] = activity_list return data except Exception as e: logger.exception("get activity error") generic_log(e) return e
class CCommision(object): def __init__(self): from WeiDian.service.SCommision import SCommision self.scommion = SCommision() from WeiDian.service.SUser import SUser self.suser = SUser() from WeiDian.control.Cuser import CUser self.cuser = CUser() from WeiDian.common.divide import Partner self.pn = Partner() self.empty = ['', {}, [], None] @verify_token_decorator def get_commsion_list(self): """后台获取佣金统计表格""" if not is_admin(): raise AUTHORITY_ERROR(u'请使用管理员账号重新登录') args = request.args.to_dict() logger.debug("Get commsion list args is %s", args) kw = args.get('kw') kw = kw.encode('utf8') if kw not in self.empty else None time_start = args.get('time_start') time_start = get_db_time_str(time_start) if time_start not in self.empty else None time_end = args.get('time_end') time_end = get_db_time_str(time_end) if time_end not in self.empty else None pagenum, pagesize = self.cuser.get_pagesize_pagenum(args) user_list, count = self.suser.get_all_partner_by_filter(pagenum, pagesize, kw) commision_list = [] try: for user in user_list: usid = user.USid data = { 'usname': user.USname, 'usphone': user.USphone, 'total': self._total_commision(usid), # 总额 'sold_income': self._user_commision(usid, 0, time_start, time_end), # !销售佣金 'invite_open': self._user_commision(usid, 10, time_start, time_end), # !邀请开店佣金 'fans_outincome': self._user_commision(usid, 20, time_start, time_end), # !专粉佣金 'group_income': self._team_commision(usid), # 团队佣金 'remain': self._remain_commision(usid), # 余额 'reward_income': self._user_commision(usid, 40, time_start, time_end), # 周周奖佣金 'novice_reward': self._user_commision(usid, 45, time_start, time_end), # !新手任务佣金 'priview': self._privew_commision(usid), # 预估到帐 'extracting': self._extract_commision(usid) # 正在提现的佣金 } commision_list.append(data) except Exception as e: generic_log(e) raise e response = import_status('get_success', 'OK') response['data'] = commision_list response['count'] = count return response @verify_token_decorator def get_commission_overview(self): """后台佣金概况""" if not is_admin(): raise AUTHORITY_ERROR(u'请使用管理员账号重新登录') args = request.args.to_dict() logger.debug("Get commsion overview args is %s", args) time_start, time_end = None, None from WeiDian.models.model import User user_dict = { 'primary': 1, 'middle': 2, 'advanced': 3 } for k, v in user_dict.items(): user_dict[k] = self.suser.get_all_user_without_pagecut((User.USlevel == user_dict[k],)) p_sold_income, p_invite_open, p_week_reward, p_extra_reward, p_fans_outincome, p_novice_reward = 0, 0, 0, 0, 0, 0 for user in user_dict['primary']: usid = user.USid sold_income = self._user_commision(usid, 0, time_start, time_end) # 销售佣金(商品佣金支出) p_sold_income += sold_income invite_open = self._user_commision(usid, 10, time_start, time_end) # 邀请开店佣金 p_invite_open += invite_open reward_income = self._user_commision(usid, 40, time_start, time_end) # 周周奖 p_week_reward += reward_income extra_reward = self._user_commision(usid, 41, time_start, time_end) # 额外奖励 p_extra_reward += extra_reward fans_outincome = self._user_commision(usid, 20, time_start, time_end) # 专粉佣金支出 p_fans_outincome += fans_outincome novice_reward = self._user_commision(usid, 45, time_start, time_end) # 新店主任务奖励佣金 p_novice_reward += novice_reward primary = { "levelname": u'1级', "sold_income": p_sold_income, "invite_open": p_invite_open, "week_reward": p_week_reward, "reward_income": p_extra_reward, "fans_outincome": p_fans_outincome, "novice_reward": p_novice_reward } m_sold_income, m_invite_open, m_week_reward, m_extra_reward, m_fans_outincome, m_novice_reward = 0, 0, 0, 0, 0, 0 for user in user_dict['middle']: usid = user.USid sold_income = self._user_commision(usid, 0, time_start, time_end) # 销售佣金(商品佣金支出) m_sold_income += sold_income invite_open = self._user_commision(usid, 10, time_start, time_end) # 邀请开店佣金 m_invite_open += invite_open reward_income = self._user_commision(usid, 40, time_start, time_end) # 周周奖 m_week_reward += reward_income extra_reward = self._user_commision(usid, 41, time_start, time_end) # 额外奖励 m_extra_reward += extra_reward fans_outincome = self._user_commision(usid, 20, time_start, time_end) # 专粉佣金支出 m_fans_outincome += fans_outincome novice_reward = self._user_commision(usid, 45, time_start, time_end) # 新店主任务奖励佣金 m_novice_reward += novice_reward middle = { "levelname": u'2级', "sold_income": m_sold_income, "invite_open": m_invite_open, "week_reward": m_week_reward, "reward_income": m_extra_reward, "fans_outincome": m_fans_outincome, "novice_reward": m_novice_reward } a_sold_income, a_invite_open, a_week_reward, a_extra_reward, a_fans_outincome, a_novice_reward = 0, 0, 0, 0, 0, 0 for user in user_dict['advanced']: usid = user.USid sold_income = self._user_commision(usid, 0, time_start, time_end) # 销售佣金(商品佣金支出) a_sold_income += sold_income invite_open = self._user_commision(usid, 10, time_start, time_end) # 邀请开店佣金 a_invite_open += invite_open reward_income = self._user_commision(usid, 40, time_start, time_end) # 周周奖 a_week_reward += reward_income extra_reward = self._user_commision(usid, 41, time_start, time_end) # 额外奖励 a_extra_reward += extra_reward fans_outincome = self._user_commision(usid, 20, time_start, time_end) # 专粉佣金支出 a_fans_outincome += fans_outincome novice_reward = self._user_commision(usid, 45, time_start, time_end) # 新店主任务奖励佣金 a_novice_reward += novice_reward advanced = { "levelname": u'3级', "sold_income": a_sold_income, "invite_open": a_invite_open, "week_reward": a_week_reward, "reward_income": a_extra_reward, "fans_outincome": a_fans_outincome, "novice_reward": a_novice_reward } total = { "levelname": u'全部', "sold_income": primary['sold_income'] + middle['sold_income'] + advanced['sold_income'], "invite_open": primary['invite_open'] + middle['invite_open'] + advanced['invite_open'], "week_reward": primary['week_reward'] + middle['week_reward'] + advanced['week_reward'], "reward_income": primary['reward_income'] + middle['reward_income'] + advanced['reward_income'], "fans_outincome": primary['fans_outincome'] + middle['fans_outincome'] + advanced['fans_outincome'], "novice_reward": primary['novice_reward'] + middle['novice_reward'] + advanced['novice_reward'] } data = [total, primary, middle, advanced] response = import_status('get_success', 'OK') response['data'] = data return response @verify_token_decorator def set_commission(self): """佣金设置""" if not is_admin(): raise AUTHORITY_ERROR(u'请使用管理员账号重新登录') # todo 设置周周奖 (开始时间/结束时间 分周) # todo 设置额外活动 data = request.json logger.debug("SET commission data is %s", data) # 设置合伙人三级佣金比例 divide_one = data.get('divide_one') if divide_one not in self.empty and divide_one.isdigit(): divide_one = float(divide_one) / 100 self.pn.one_level_divide = str(divide_one) divide_two = data.get('divide_two') if divide_two not in self.empty and divide_two.isdigit(): divide_two = float(divide_two) / 100 self.pn.two_level_divide = str(divide_two) divide_three = data.get('divide_three') if divide_three not in self.empty and divide_three.isdigit(): divide_three = float(divide_three) / 100 self.pn.three_level_divide = str(divide_three) # 设置专粉单数及佣金限制 limit_time_one = data.get('time_one') # [1,5] fans_price_one = data.get('fans_price_one') # 30 if fans_price_one not in self.empty: fans_price_one = float(fans_price_one) / 100 self.pn.set_item("level_limit_1", "profit", fans_price_one) if limit_time_one not in self.empty: self.pn.set_item("level_limit_1", "min", limit_time_one[0]) self.pn.set_item("level_limit_1", "max", limit_time_one[-1]) limit_time_two = data.get('time_two') # [6, 20] fans_price_two = data.get('fans_price_two') # 30 if fans_price_two not in self.empty: fans_price_two = float(fans_price_two) / 100 self.pn.set_item("level_limit_1", "profit", fans_price_two) if limit_time_two not in self.empty: if limit_time_two[0] - limit_time_one[-1] != 1: raise PARAMS_ERROR(u'timeone 参数错误') self.pn.set_item("level_limit_2", "min", limit_time_two[0]) self.pn.set_item("level_limit_2", "max", limit_time_two[-1]) limit_time_three = data.get('time_three') # 21 fans_price_three = data.get('fans_price_three') # 30 if fans_price_three not in self.empty: fans_price_three = float(fans_price_three) / 100 self.pn.set_item("level_limit_1", "profit", fans_price_three) if limit_time_three not in self.empty: if limit_time_three[0] - limit_time_two[-1] != 1: raise PARAMS_ERROR(u'timeone 参数错误') self.pn.set_item("level_limit_3", "min", limit_time_three) response = import_status("set_success", "OK") response['data'] = { "divide_one": self.pn.one_level_divide, "divide_two": self.pn.two_level_divide, "divide_three": self.pn.three_level_divide } return response def _user_commision(self, usid, type, time_start, time_end): """用户佣金类型""" commsion = self.scommion.get_usercommsion_flow_filter({ 'USid': usid, 'UCFtype': type }, time_start, time_end) mount = sum(Decimal(x.UCFnums) for x in commsion) if commsion else 0 return float(mount) def _remain_commision(self, usid): """佣金余额""" user_commision = self.scommion.get_usercommsion_by_usid(usid) user_commision_num = getattr(user_commision, 'UCnum', 0) return user_commision_num def _total_commision(self, usid): """总获得""" user_commision = self.scommion.get_usercommsion_by_usid(usid) user_commision_num = getattr(user_commision, 'UCtotal', 0) return user_commision_num def _privew_commision(self, usid): """预估佣金""" commsion_privews = self.scommion.get_commision_preview_by_usid(usid) priview_mount = sum(Decimal(x.UCPnums) for x in commsion_privews) if commsion_privews else 0 return float(priview_mount) def _team_commision(self, usid): """团队佣金""" team_commision = self.scommion.get_teamcommision_by_usid(usid) team_amout = sum(Decimal(x.TCtotal) for x in team_commision) if team_commision else 0 return float(team_amout) def _extract_commision(self, usid): """正提现佣金""" extract_commision = self.scommion.get_extractcommision_by_filter({'USid': usid, 'CTCstatus': 0 }) extract_amout = sum(Decimal(x.CTCamount) for x in extract_commision) if extract_commision else 0 return float(extract_amout)
def __init__(self): from WeiDian.common.divide import Partner self.pt = Partner() self.access_token_server, self.ticket, self.access_time = self.pt.access_token