Пример #1
0
def update_order_status():
    n = datetime.datetime.now()
    y = n-datetime.timedelta(hours=1)
    start = datetime_format(n)
    end = datetime_format(y)
    update_order_sql = 'update t_orders set Fstatus=2 where Fstatus!=2 and Fid in (select Forder_id from t_orders_schedule where Fid=4 and Fdatetime between %s and %s)'
    update_order_status.db.execute(update_order_sql%(start,end))
    update_order_status.db.commit()
Пример #2
0
    def get(self, *args, **kwargs):

        date_time = self.get_argument('month_date', None)
        input_category_id = self.get_argument('input_category_id', '')

        merchant_id = self.get_current_user().get('Fmerchant_id')
        schedule_service.set_db(self.db)
        if not date_time:
            start_date, end_date = datetime_format(
                "%Y-%m-%d"), datetime_format(
                    "%Y-%m-%d",
                    datetime.datetime.now() + datetime.timedelta(days=30))
        else:
            start_date, tmp, end_date = date_time.split()
        if input_category_id:
            try:
                int(input_category_id)
                category = schedule_service.query_default_category(
                    merchant_id, category_id=input_category_id)
            except:
                category = schedule_service.query_default_category(merchant_id)
        else:
            category = schedule_service.query_default_category(merchant_id)
        category_name = ""
        category_dict = {}
        for c in category:
            category_dict[c.Fid] = c.Fname
        if category:
            category_ids = [c.Fid for c in category]
            if category_ids:
                schedule_plans = schedule_service.query_schedule_by_input_time_and_category_ids(
                    category_ids, merchant_id, start_date, end_date)
            else:
                schedule_plans = []
                #category_name = category.Fname
        else:
            schedule_plans = None
        schedule_category = schedule_service.query_schedule_category(
            merchant_id)

        self.echo('crm/schedules/shot_schedule.html', {
            'input_category_id': input_category_id,
            'category_dict': category_dict,
            'category_name': category_name,
            'schedule_plans': schedule_plans,
            'start_date': start_date,
            'end_date': end_date,
            'week_day_dict': week_day_dict,
            'schedule_category': schedule_category
        },
                  layout='crm/common/base.html')
Пример #3
0
    def get(self):
        merchant_id = self.get_current_user().get('Fmerchant_id')

        input_date = self.get_argument('input_date',
                                       datetime_format(format='%Y-%m-%d'))
        _category = self.get_argument('schedule_categeory', None)
        schedule_type = self.get_argument('schedule_type', 0)

        schedule_service.set_db(self.db)
        schedule_category = schedule_service.query_schedule_category(
            merchant_id)
        query = OrderServices(self.db).query_orders_by_schedule_date(
            merchant_id,
            schedule_type,
            input_date,
            schedule_category=_category)
        orders = self.get_page_data(query)
        self.echo('crm/schedules/shot_schedule_detail.html', {
            'ORDER_TYPES': ORDER_TYPES,
            "input_date": input_date,
            "schedule_category": schedule_category,
            'orders': orders,
            '_category': _category,
            'schedule_type': schedule_type,
            'SCHEDULE_TYPE': _SCHEDULE_TYPE
        },
                  layout='crm/common/base.html')
Пример #4
0
    def post(self, evaluation_id):
        """
        todo:评论传图
        :evaluation_id:评论ID
        :returns:
        """
        schedule_service.set_db(self.db)

        date_format_prefix = datetime_format(format='%Y%m%d')
        file_prex = '/'.join(['evaluation', evaluation_id, date_format_prefix])
        try:
            is_ok, filenames = upload_to_oss(self,
                                             options.IMG_BUCKET,
                                             param_name='image',
                                             file_type='img',
                                             file_prex=file_prex)
            if is_ok:
                for f in filenames:
                    image_url = options.IMG_DOMAIN + '/' + f.get('full_name')
                    schedule_service.create_evaluation_images(
                        evaluation_id, image_url)
        except Exception, e:
            pass
            return self.write_json({
                'stat': '1001',
                'info': 'exception:' + e.message
            })
Пример #5
0
    def post(self, *args, **kwargs):
        rsg = {'stat': 'error', 'info': ""}
        self.get_paras_dict()
        banner_service.set_db(self.db)
        try:
            if self.request.files.get('banner_img'):
                file_prex = 'music/' + datetime_format(format="%Y%m%d%H%M")
                is_ok, filenames = upload_to_oss(self,
                                                 options.IMG_BUCKET,
                                                 param_name='banner_img',
                                                 file_type='img',
                                                 file_prex=file_prex)
                if is_ok:
                    for file in filenames:
                        img_url = options.IMG_DOMAIN + '/' + file.get(
                            'full_name')
                        self.qdict['img_url'] = img_url
                else:
                    return self.write(
                        ujson.dumps({
                            'stat': '1005',
                            'info': '图片上传失败'
                        }))
            banner = banner_service.create_banner(**self.qdict)
            self.delete_banner(banner.Fbanner_code)
        except Exception, e:

            rsg['info'] = e.message
            self.write(ujson.dumps(rsg))
Пример #6
0
    def post(self):
        """
        :todo 上传图片
        """

        date_format_prefix = datetime_format(format='%Y%m%d')
        try:

            rsp = {'filelink': '', 'stat': 'err', 'msg': ''}

            file_prex = '/'.join([
                'topics',
                str(self.get_current_user().get('Fid')), date_format_prefix
            ])

            is_ok, filenames = upload_to_oss(self,
                                             options.IMG_BUCKET,
                                             param_name='file',
                                             file_type='img',
                                             file_prex=file_prex,
                                             max_size=3)

            if is_ok:
                for f in filenames:
                    rsp['filelink'] = options.IMG_DOMAIN + '/' + f.get(
                        'full_name') + img_compression(f.get('size'))
                rsp['stat'] = 'ok'
            else:
                rsp['stat'] = 'err'
                rsp['msg'] = filenames
        except Exception, e:
            pass
Пример #7
0
    def post(self, *args, **kwargs):

        self.get_paras_dict()
        #print self.qdict
        #file_metas=self.request.files.get('appszip')       #提取表单中‘name’为‘file’的文件元数据
        data = {}
        size = 0
        try:
            file_prex = 'apps_crm/' + datetime_format(format="%Y%m%d%H%M")
            is_ok, filenames = upload_to_oss(self,
                                             options.APPS_BUCKET,
                                             param_name='appzip',
                                             file_type=None,
                                             file_prex=file_prex,
                                             is_apps=True)
            if is_ok:
                request_url = filenames[0].get('full_name')
                size = filenames[0].get('size')
            else:
                message = filenames

        except Exception, e:
            data['error'] = 1
            data['message'] = e.message
            data['url'] = ''
Пример #8
0
    def get(self, *args, **kwargs):

        merchant_id = self.get_current_user().get('Fmerchant_id')
        order_back = self.db.query(OrderDataBackup).filter(
            OrderDataBackup.Fmerchant_id == merchant_id).order_by(
                'Fcreate_time desc')
        self.echo(
            'crm/order/orders_backup.html', {
                'start_date':
                datetime_format(format='%Y-%m-%d',
                                input_date=datetime.datetime.now() -
                                datetime.timedelta(days=31)),
                'end_date':
                datetime_format('%Y-%m-%d'),
                'query':
                order_back
            })
Пример #9
0
 def query_month_scheduls(self, merchant_user_id, input_date=None):
     '''
     获取当前一周档期
     :param merchant_user_id:
     :return:
     '''
     sql = "select count(*),date_format(Fdatetime,'%Y-%c-%d')as shot_plan from t_orders_schedule where Fid=2 AND Fmerchant_id={0} AND Fdatetime between '{1}' and '{2}' group by shot_plan"
     #weekend = getdayofday(7)
     if input_date:
         format_date = datetime.datetime.strptime(input_date, "%Y-%m")
         start_date = datetime_format(format="%Y-%m-%d",
                                      input_date=format_date)
     else:
         start_date = datetime_format(format="%Y-%m-%d")
     start = start_date + ' 00:00:01'
     end = datetime_format("%Y-%m-%d", get_month_last_day()) + ' 23:59:59'
     result = self.db.execute(sql.format(str(merchant_user_id), start, end))
     return result
Пример #10
0
    def get_merchant_schedule_plan_by_month(self, merchant_id, month):

        month_date = datetime.datetime.strptime(month, "%Y-%m")
        start = get_month_first_day(month_date.month)
        end = datetime_format("%Y-%m-%d", get_month_last_day(
            month_date.month)) + ' 23:59:59'
        return self.db.query(SchedulePlan).filter(
            SchedulePlan.Fdeleted == 0, SchedulePlan.Fuser_id == merchant_id,
            SchedulePlan.Fschedule_day >= start,
            SchedulePlan.Fschedule_day <= end).order_by('Fschedule_day')
Пример #11
0
    def get(self, schedule_type, input_date, **kwargs):

        merchant_id = self.current_user.get('Fmerchant_id')
        schedule_service.set_db(self.db)
        orders = OrderServices(self.db).query_orders_by_schedule_date(
            merchant_id, schedule_type, input_date)
        name = u'档期明细导出'
        type_name = _SCHEDULE_TYPE[int(schedule_type)]
        file_name = datetime_format(
            format='%Y%m%d%H%M%S') + str(type_name) + u'档期明细导出' + '.xls'
        clumns = (u'订单号码', u'客户姓名', u'客户手机', u'订单类型', u'订单余额', u'订单时间',
                  u'排期时间')
        file = xlwt.Workbook(encoding='utf-8')  #注意这里的Workbook首字母是大写,无语吧
        table = file.add_sheet(name)

        table.write_merge(0, 0, 0, 6, name)
        for c in clumns:
            table.write(1, clumns.index(c), c)
        index = 2
        for i in xrange(7):
            table.col(i).width = 5000
        for order in orders:
            table.write(index, 0, order.Forder_id_user)
            table.write(index, 1, order.Fuser_name)
            table.write(index, 2, order.Fuser_mobi)
            table.write(index, 3, ORDER_TYPES[order.Forder_type])
            table.write(index, 4, str(order.Famount))
            table.write(
                index, 5,
                datetime_format(format='%Y-%m-%d',
                                input_date=order.Fcreate_time))
            table.write(index, 6, input_date)

            index += 1
        file.save(file_name)
        self.set_header('Content-Type', 'application/octet-stream')
        self.set_header('Content-Disposition',
                        'attachment; filename=' + file_name)
        with open(file_name, 'rb') as f:
            data = f.read()
            self.write(data)
        self.finish()
Пример #12
0
 def get(self, *args, **kwargs):
     schedule_service.set_db(self.db)
     try:
         schedules = schedule_service.query_schedule_category(
             self.get_current_user().get('Fmerchant_id'))
         start_date = datetime_format(format='%Y-%m-%d')
         end_date = datetime_format(format='%Y-%m-%d',
                                    input_date=datetime.datetime.now() +
                                    datetime.timedelta(days=30))
         lstdata = []
         for schedule in schedules:
             lstdata.append({'id': schedule.Fid, 'name': schedule.Fname})
     except Exception, e:
         pass
         return self.write_json({
             'stat': '1001',
             'list': [],
             'data': {},
             'info': '错误,错误原因:' + e.message
         })
Пример #13
0
    def post(self, *args, **kwargs):
        body = json.loads(self.request.body)
        start_date = body.get('start_date')
        end_date = body.get('end_date')
        category_id = body.get('category')

        merchant_id = self.get_current_user().get('Fmerchant_id')

        schedule_service.set_db(self.db)
        schedule_category = schedule_service.query_schedule_category_by_id(
            merchant_id, category_id)
        operation = '1'
        if operation == '0':
            self.redirect('/mobile/merchant/orders/add/')
        elif operation == '1':
            try:
                schedule = schedule_service.query_schedule_category_by_id(
                    merchant_id, category_id)
                if schedule:
                    _schedules = schedule_service.query_available_schedule_by_input_time_and_category(
                        category_id, merchant_id, start_date, end_date)
                else:
                    _schedules = []
                lstdata = []
                for schedule in _schedules:
                    lstdata.append({
                        'date':
                        datetime_format(format='%Y-%m-%d',
                                        input_date=schedule[0]),
                        'week_day':
                        week_day_dict[schedule[0].weekday()],
                        'total':
                        schedule[2]
                    })
            except Exception, e:
                pass
                return self.write_json({
                    'stat': '1001',
                    'list': [],
                    'data': {},
                    'info': '查询错误,错误原因:' + e.message
                })
            self.write_json({
                'stat': '1000',
                'list': lstdata,
                'data': {
                    'schedule_category_id': schedule_category.Fid,
                    'schedule_category_name': schedule_category.Fname,
                    'start_date': start_date,
                    'end_date': end_date
                }
            })
Пример #14
0
 def get(self):
     uid = self.get_current_user().get('Fid')
     photos_service.set_db(self.db)
     try:
         albums = photos_service.query_user_album_by_status(uid,1)
         lstdata = []
         for album in albums:
             dictionary = {}
             dictionary['id'] = album.Fid
             dictionary['album_name'] = album.Fablum_name
             dictionary['album_cover_url'] = self.get_show_img_url(album.Furl_pic_cover,600)
             dictionary['photo_list_url'] = '/mobile/user/album/list/'+str(album.Fid)+'/'
             dictionary['create_time'] = datetime_format(format='%Y-%m-%d',input_date = album.Fcreate_time)
             lstdata.append(dictionary)
     except Exception,e:
         pass
         return self.write(ujson.dumps({'stat':'1001','data':{},'list':[],'info':'获取相册失败,失败原因:'+e.message}))
Пример #15
0
    def get(self):
        department_service = DepartmentService(self.db)
        merchant_id = self.get_current_user().get('Fmerchant_id')
        departments = department_service.get_dpt_list(merchant_id)
        order_serice.set_db(self.db)
        orders_from = order_serice.query_order_from_conf(merchant_id)
        data = []
        for d in departments:
            dept = {'id': d[0], 'pId': d[4] and d[4] or 0, 'name': d[1]}
            data.append(dept)

        return self.echo(
            'crm/order/order_add_py.html', {
                'data': data,
                'orders_from': orders_from,
                'now': datetime_format(format='%Y-%m-%d')
            })
Пример #16
0
    def post(self, code):

        rsg = {'stat': 'error', 'msg': ''}
        self.get_paras_dict()

        type = self.qdict.get('Frecommend_type')
        position = self.qdict.get('Fposition')
        re_id = self.qdict.get('re_id')
        if not self.request.files.get('recommend_img') or not position:
            rsg['msg'] = '请上传首页展示图或选择展示位置'
            return self.write(ujson.dumps(rsg))

        home_service.set_db(self.db)
        self.qdict['Fis_on_share'] = 1

        try:
            old_re = home_service.query_recommend(**self.qdict)
            if old_re.count():
                old_re.update({'Fis_on_share': 0})
            date_format_prefix = datetime_format(format='%Y%m%d')
            file_prex = '/'.join([
                'recommends',
                str(self.get_current_user().get('Fid')), date_format_prefix
            ])
            is_ok, filenames = upload_to_oss(self,
                                             options.IMG_BUCKET,
                                             param_name='recommend_img',
                                             file_type='img',
                                             file_prex=file_prex,
                                             max_size=3)
            if is_ok:
                for f in filenames:
                    url = options.IMG_DOMAIN + '/' + f.get('full_name')
                    self.qdict['Frecommend_url'] = url
            self.qdict.pop('re_id')
            home_service.update_recommend(re_id, **self.qdict)
            if type == '1':
                self.delete_recommend_series()
            elif type == '2':
                self.delete_recommend_products()
            elif type == '3':
                self.delete_recommend_merchant()
        except Exception, e:
            rsg['msg'] = e.message
            return self.write(ujson.dumps(rsg))
Пример #17
0
 def post(self):
     rsg = {'stat': 'error', 'msg': ''}
     self.get_paras_dict()
     data = {}
     try:
         file_prex = 'music/' + datetime_format(format="%Y%m%d%H%M")
         is_ok, filenames = upload_to_oss(self,
                                          options.MEDIA_BUCKET,
                                          param_name='background_music',
                                          file_type=None,
                                          file_prex=file_prex)
         if is_ok:
             request_url = options.MEDIA_DOMAIN + '/' + filenames[0].get(
                 'full_name')
     except Exception, e:
         data['error'] = 1
         data['message'] = e.message
         data['url'] = ''
         raise
Пример #18
0
 def get(self,merchant_id):
     current_month = self.get_argument('start_date','')
     current_month = current_month and current_month or datetime_format(format='%Y-%m')
     schedule_service.set_db(self.db)
     schedule_plans = schedule_service.get_merchant_schedule_plan(merchant_id,current_month)
     lstdata = []
     for schedule_plan in schedule_plans:
         data = {}
         data['Fid'] = schedule_plan.Fid
         data['Fuser_id'] = schedule_plan.Fuser_id
         data['Ftotal_per_day'] = schedule_plan.Ftotal_per_day
         data['Fschedule_day'] = schedule_plan.Fschedule_day
         data['plan_count'] = schedule_service.get_oneday_plan(merchant_id,schedule_plan.Fschedule_day)
         if data['plan_count'] > schedule_plan.Ftotal_per_day: #如果已有的档期数>档期设置总数
             data['_plan_count'] = 0
         else:
             data['_plan_count'] = data['Ftotal_per_day'] - data['plan_count']
         lstdata.append(data)
     self.echo('ops/schedule_plan/schedule_plan.html',{'page_data':lstdata,'current_month':current_month})
Пример #19
0
    def get_merchant_schedule_plan(self, merchant_id, month=None):
        '''
        获取商户档期
        :param merchant_id:
        :return:
        '''
        start_date = datetime.datetime.strptime(month, "%Y-%m")

        start = get_month_first_day(month=start_date.month,
                                    year=start_date.year)
        end = datetime_format(
            "%Y-%m-%d",
            get_month_last_day(month=start_date.month,
                               year=start_date.year)) + ' 23:59:59'

        return self.db.query(SchedulePlan).filter(
            SchedulePlan.Fdeleted == 0, SchedulePlan.Fuser_id == merchant_id,
            SchedulePlan.Fschedule_day >= start,
            SchedulePlan.Fschedule_day <= end).order_by('Fschedule_day')
Пример #20
0
    def create_user_and_send_msg(self, album, args, order):
        '''
        :todo 创建用户并更新到相册信息 同时发送万丈秘法
        :param album:
        :param args:
        :return:
        '''
        user_service.set_db(self.db)
        passwd = create_random_passwd(3)
        content = PASSWD_TEMPLATE % (self.get_current_user().get(
            'Fcompany_name', ''), args.get('user_mobi'), passwd)
        is_success, is_create, user = user_service.create_user_by_order(
            args.get('user_mobi'), passwd, args.get('user_name'))
        if is_create:
            send_phone_msg(args.get('user_mobi'), content)

        if user and user.Fweixin:
            try:
                template = WEIXIN_TEMPLATES.get('new_order_confirm')
                page_cache = PageDataCache(self.db)
                access_token = page_cache.get_access_token(
                    setting.WX_GZH_AppID, setting.WX_GZH_AppSecret)
                send_msg_to_owner(
                    access_token,
                    user.Fweixin,
                    template.get('jsonText'),
                    link=str(
                        'http://m.gongzhuhao.com/mobile/20151985112504291695293/schedules'
                    ),
                    template_id=template.get('TEMPLATE_ID'),
                    first=str('尊敬的{0},您在“{1}”的生成了一条新订单,详细信息如下:'.format(
                        order.Fuser_name,
                        self.get_current_user().get('Fcompany_name', ''))),
                    keyword1=str(order.Forder_id_user),
                    keyword2=str(_TYPE_ORDER[order.Forder_type]),
                    keyword3='****',
                    keyword4=str(
                        datetime_format(input_date=order.Fcreate_time)),
                    keyword5=str(album.Fablum_name),
                    remark='祝您心情愉快,点击查看排期详情')
            except Exception, e:
                print e.message
Пример #21
0
    def create_schedule_plan(self, merchant_id, month, times):
        '''
        创建档期计划
        :param merchant_id:
        :param month:
        :param times:
        :return:
        '''
        today = datetime.datetime.today()
        set_month = datetime.datetime.today()

        # this_start_date = datetime_format(format="%Y-%m-%d")
        # this_date_end = datetime_format("%Y-%m-%d",get_month_last_day())+' 23:59:59'
        # print this_start_date,this_date_end
        # if int(month)<today.month:
        #     return False,'月份选择错误'

        #start_date = datetime_format(format="%Y-%m-%d",input_date=set_month)
        start = get_month_first_day(int(month))
        end = datetime_format("%Y-%m-%d",
                              get_month_last_day(month)) + ' 23:59:59'
        #print 'start_date,end',start_date,end
        schedules = self.db.query(SchedulePlan).filter(
            SchedulePlan.Fdeleted == 0, SchedulePlan.Fuser_id == merchant_id,
            SchedulePlan.Fschedule_day >= start,
            SchedulePlan.Fschedule_day <= end)
        if schedules.count() > 0:
            for schedule in schedules:
                schedule.Ftotal_per_day = times
                self.db.add(schedule)
            self.db.commit()
        else:
            for num in xrange((get_month_last_day(int(month)) -
                               get_month_first_day(int(month))).days + 1):
                schedule = SchedulePlan()
                schedule.Fuser_id = merchant_id
                schedule.Ftotal_per_day = times
                schedule.Fschedule_day = get_month_day(
                    get_month_first_day(int(month)), num)
                self.db.add(schedule)
            self.db.commit()
        return True, 'ok'
Пример #22
0
    def post(self):
        date_format_prefix = datetime_format(format='%Y%m%d')
        try:
            rsp = {'files': [], 'stat': 'err', 'msg': ''}
            file_prex = '/'.join([
                'topics',
                str(self.get_current_user().get('Fid')), date_format_prefix
            ])
            is_ok, filenames = upload_to_oss(self,
                                             options.IMG_BUCKET,
                                             param_name='files',
                                             file_type='img',
                                             file_prex=file_prex,
                                             max_size=3)
            if is_ok:
                for f in filenames:
                    rsp['files'].append({
                        "name":
                        f.get('file_name'),
                        "size":
                        f.get('size'),
                        "type":
                        f.get('content_type'),
                        "url":
                        options.IMG_DOMAIN + '/' + f.get('full_name') +
                        img_compression(f.get('size')),
                        "full_name":
                        f.get('full_name'),
                    })
                rsp['stat'] = 'ok'
                rsp['files'][0]['id'] = '0'
            else:
                rsp['stat'] = 'err'
                rsp['msg'] = filenames
            return self.write(ujson.dumps(rsp))

        except Exception, e:
            pass
            self.echo('views/500.html')
Пример #23
0
        def get_schedules(order_id):
            order_scheduls = self.db.query(OrdersSchedule).filter(
                OrdersSchedule.Forder_id == order_id).order_by('Fid')
            schedules = []
            # Foperation_id = Column(Integer, nullable=True)                              #操作人ID
            # Fnotified_num = Column(SmallInteger, default=0)                             # 此排期已通知用户次数0未通知
            # Fschedule_category_id = Column(Integer,doc='排期分类',nullable=True)         #档期分类id
            # Fschedule_category_name = Column(String(128),default='',doc='排期分类名称')   #档期分类name
            #
            # Fdatetime = Column(DateTime)                                                # 此排期时间
            # Fshot_date = Column(Date)                                                   # 此排期时间  精确到某一天
            #
            # Fsite = Column(String(128), default='')                             # 服务地点
            # Fuid_stf = Column(String(256), default='')                          # 排期中参与的员工ID
            # Fname_stf = Column(String(256), default='')                         # 排期中参与的员工姓名
            # Ftitle_stf = Column(String(256), default='')                        # 排期中员工职称
            # Freminder = Column(String(512), default='')                         # 温馨提示

            for os in order_scheduls:
                schedules.append(datetime_format(input_date=os.Fdatetime))
                if os.Fid == 1:
                    schedules.append(os.Fschedule_category_name)
                    tmp_s = []
                    if os.Fname_stf:
                        tmp_s = os.Fname_stf.split('&')
                        if len(tmp_s) == 2:
                            schedules.extend(tmp_s)
                        elif len(tmp_s) == 1:
                            schedules.append(os.Fname_stf)
                    else:
                        schedules.append('')
                        schedules.append('')
                else:
                    schedules.append(os.Fname_stf)
                schedules.append(os.Fsite)
            return schedules
Пример #24
0
def upload_resize(http_handle, bucket, img_url, file_prex=None, **kargs):
    """上传文件到OSS 压缩水印处理
    :param http_handle
    :param bucket  oss namespace
    :param_name form 参数名称
    :file_prex 文件前缀  example xxx/dd
    """
    img_url = img_url.split('@')[0]
    names = img_url.split('/')
    files = []

    try:
        name_prefix = datetime_format(format='%H%M%S') + get_chars()
        # #for meta in file_metas:
        filename = name_prefix + names[-1].replace('%', '').replace('%', '')
        if file_prex:
            save_name = ''.join(
                (file_prex, '/', name_prefix + names[-1].replace('%', '')))
        else:
            save_name = name_prefix + names[-1].replace('%', '')
        print 'filename:', filename
        parser = ImageFile.Parser()
        #for chunk in file_stream.chunks():
        print img_url
        file_stream = urllib.urlopen(img_url.strip()).read(
        )  #'http://img.zenmez.com/album/member/c1d5736e-f85d-30a6-95c7-7a5042a1a560/默认相册/20141230/tjyg.jpg')

        parser.feed(file_stream)
        width, height = parser.image.size

        img = parser.close()
        #print file_stream
        #oss_write = clip_img(img,width,height,kargs.get('x'),kargs.get('y'),kargs.get('x1'),kargs.get('y1'))#缩放 前切
        oss_write = clip_img(img, kargs.get('sf_w'), kargs.get('sf_h'),
                             kargs.get('x'), kargs.get('y'), kargs.get('x1'),
                             kargs.get('y1'))  #缩放 前切

        FILE_FORMAT = {
            'image/gif': 'GIF',
            'image/jpeg': 'JPEG',
            'image/jpg': 'JPEG',
            'image/pjpeg': 'PJEGP',
            'image/bmp': 'BMP',
            'image/png': 'PNG',
            'image/x-png': 'PNG'
        }
        content_type = None
        file_type = names[-1].split('.')[-1].lower()
        #print file_type
        for key in FILE_FORMAT.keys():
            if file_type in key:
                content_type = key
                break
        if not content_type:
            return False, '图片格式不正确'
        #图片转换成字符流输出到内存  然后会写oss
        import StringIO
        output = StringIO.StringIO()
        oss_write.save(output, format=FILE_FORMAT[content_type])
        contents = output.getvalue()
        output.close()
        #print contents
        #
        # else:
        #     contents = file_stream

        #response_time = (timeit.default_timer() - stat_time) % 1000
        #print 'img_ys:',response_time
        #print filename,save_name
        is_ok = upload_by_userinput(bucket, filename, save_name, contents)

        #response_time = (timeit.default_timer() - stat_time) % 1000
        #print 'write_oss:',response_time
        #print filename,save_name
        if is_ok == 'OK':
            files.append({
                'size': len(file_stream),
                'full_name': save_name,
                'file_name': filename,
                'content_type': ''
            })
        else:
            return False, 'Upload oss failure'
    except Exception, e:
        e = sys.exc_info()[0](traceback.format_exc())
        LOG.exception(e)
        return False, 'Upload oss failure'
Пример #25
0
    def post(self, *args, **kwargs):

        merchant_id = self.get_current_user().get('Fmerchant_id')
        back_date = self.get_argument('sch_date')
        start_date, tmp, end_date = back_date.split()
        orders = self.db.query(Orders).filter(
            Orders.Fdeleted == 0, Orders.Fuid_mct == merchant_id,
            Orders.Fcreate_time >= start_date,
            Orders.Fcreate_time <= end_date).order_by('Fcreate_time')

        name = u'订单数据备份'
        file_name = u'订单数据导出' + '.xls'
        clumns = (u'订单时间', u'类型', u'订单号', u'金额', u'定金', u'接单人', u'来源', u'备注',
                  u'主用户名/新娘', u'手机号', u'生日', u'新郎', u'手机号', u'生日', u'试衣时间',
                  u'礼服师', u'地点', u'摄影时间', u'档期类型', u'摄影师', u'化妆师', u'地点',
                  u'选样时间', u'选样师', u'地点', u'定稿时间', u'看样师', u'地点', u'取件时间',
                  u'客服', u'地点')

        from conf.order_conf import _TYPE_ORDER as ORDER_TYPES
        file = xlwt.Workbook(encoding='utf-8')  #注意这里的Workbook首字母是大写,无语吧
        table = file.add_sheet(name)

        table.write_merge(0, 0, 0, 31, name)
        clumn_index = 0
        for c in clumns:
            table.write(1, clumn_index, c)
            clumn_index += 1
        index = 2
        for i in xrange(7):
            table.col(i).width = 5000

        # orders_conf = self.db.query(OrderFromConf).filter(OrderFromConf.Fmerchant_id==merchant_id,OrderFromConf.Fdeleted==0)
        # order_conf={}
        # for conf in orders_conf:
        #     order_conf[conf.Fid]=conf.Fname

        def get_sign_names(order_id):
            data = self.db.query(OrderSignUser.Fstaff_name).filter(
                OrderSignUser.Forder_id == order_id)
            if data:
                return ','.join([d[0] for d in data])
            else:
                return ''

        def get_schedules(order_id):
            order_scheduls = self.db.query(OrdersSchedule).filter(
                OrdersSchedule.Forder_id == order_id).order_by('Fid')
            schedules = []
            # Foperation_id = Column(Integer, nullable=True)                              #操作人ID
            # Fnotified_num = Column(SmallInteger, default=0)                             # 此排期已通知用户次数0未通知
            # Fschedule_category_id = Column(Integer,doc='排期分类',nullable=True)         #档期分类id
            # Fschedule_category_name = Column(String(128),default='',doc='排期分类名称')   #档期分类name
            #
            # Fdatetime = Column(DateTime)                                                # 此排期时间
            # Fshot_date = Column(Date)                                                   # 此排期时间  精确到某一天
            #
            # Fsite = Column(String(128), default='')                             # 服务地点
            # Fuid_stf = Column(String(256), default='')                          # 排期中参与的员工ID
            # Fname_stf = Column(String(256), default='')                         # 排期中参与的员工姓名
            # Ftitle_stf = Column(String(256), default='')                        # 排期中员工职称
            # Freminder = Column(String(512), default='')                         # 温馨提示

            for os in order_scheduls:
                schedules.append(datetime_format(input_date=os.Fdatetime))
                if os.Fid == 1:
                    schedules.append(os.Fschedule_category_name)
                    tmp_s = []
                    if os.Fname_stf:
                        tmp_s = os.Fname_stf.split('&')
                        if len(tmp_s) == 2:
                            schedules.extend(tmp_s)
                        elif len(tmp_s) == 1:
                            schedules.append(os.Fname_stf)
                    else:
                        schedules.append('')
                        schedules.append('')
                else:
                    schedules.append(os.Fname_stf)
                schedules.append(os.Fsite)
            return schedules

        for order in orders:
            table.write(
                index, 0,
                datetime_format(format='%Y-%m-%d',
                                input_date=order.Fcreate_time))
            table.write(index, 1, ORDER_TYPES[order.Forder_type])
            table.write(index, 2, order.Forder_id_user)
            table.write(index, 3, str(order.Famount))
            table.write(index, 4, str(order.Fdeposit))
            table.write(index, 5, str(get_sign_names(order.Fid)))

            order_confs = self.db.query(OrdersFrom.Ffrom_name).filter(
                OrdersFrom.Forder_id == order.Fid)
            oconfs = ''
            if order_confs.count() > 0:
                oconfs = ','.join([of.Ffrom_name for of in order_confs])
            table.write(index, 6, str(oconfs))
            table.write(index, 7, order.Fcomment)
            table.write(index, 8, order.Fuser_name)
            table.write(index, 9, order.Fuser_mobi)
            table.write(index, 10, '')
            table.write(index, 11, order.Fuser_name_ex)
            table.write(index, 12, order.Fuser_mobi_ex)
            table.write(index, 13, '')
            schedule_index = 14
            for s in get_schedules(order.Fid):
                table.write(index, schedule_index, s)
                schedule_index += 1
            index += 1
        file.save(file_name)
        self.set_header('Content-Type', 'application/octet-stream')
        self.set_header('Content-Disposition',
                        'attachment; filename=' + file_name)
        contents = ''
        with open(file_name, 'rb') as f:
            contents = data = f.read()
            self.write(data)

        save_name = 'excel/' + str(merchant_id) + "/" + datetime_format(
            format="%Y%m%d%H%M") + '/' + file_name
        is_ok = upload_by_userinput(options.MEDIA_BUCKET, file_name, save_name,
                                    contents)
        if is_ok == 'OK':
            request_url = options.MEDIA_DOMAIN + '/' + save_name
            order_back = OrderDataBackup()
            order_back.Fmerchant_id = merchant_id
            order_back.Fback_url = request_url
            order_back.Fsave_name = save_name
            order_back.Fstart_date = start_date
            order_back.Fend_date = end_date
            self.db.add(order_back)
            self.db.commit()
        self.finish()
Пример #26
0
def upload_to_oss(http_handle,
                  bucket,
                  param_name='imgFile',
                  file_type='img',
                  file_prex=None,
                  max_size=100,
                  water_mark=False,
                  is_apps=False,
                  is_sort=False):
    """上传文件到OSS
    :param http_handle
    :param bucket  oss namespace
    :param_name form 参数名称
    :param max_size 上传文件的最大容量 单位M
    :file_prex 文件前缀  example xxx/dd
    """
    data = {}
    file_metas = http_handle.request.files.get(param_name)
    if http_handle.request.files == {} or param_name not in http_handle.request.files:
        return False, '参数不存在'
    avatar_file = http_handle.request.files[param_name][0]
    print avatar_file['content_type']
    if file_type == 'img':
        image_type_list = [
            'image/gif', 'image/jpeg', 'image/pjpeg', 'image/bmp', 'image/png',
            'image/x-png', 'application/octet-stream'
        ]
        if avatar_file['content_type'] not in image_type_list:
            return False, '仅支持jpg,jpeg,bmp,gif,png格式的图片!'

    elif file_type == 'pdf':
        pdf_type_list = ['application/pdf']
        if avatar_file['content_type'] not in pdf_type_list:
            return False, '仅支持pdf格式文件'
    if len(avatar_file['body']) / 1024 / 1024 > max_size:
        return False, '图片%s 过大,请使用%sM以内图片上传,' % (avatar_file['filename'],
                                                 max_size)
    files = []
    try:
        if is_apps:
            name_prefix = ''
        else:
            name_prefix = datetime_format(format='%H%M%S') + get_chars()
        for meta in file_metas:
            filename = name_prefix + format_img_name(meta['filename'])
            if file_prex:
                save_name = ''.join(
                    (file_prex, '/',
                     name_prefix + format_img_name(meta['filename'])))
            else:
                save_name = name_prefix + format_img_name(meta['filename'])

            if is_sort:
                files.append({
                    'size': len(meta['body']),
                    'full_name': save_name,
                    'name': filename,
                    'type': meta['content_type'],
                    "url": options.IMG_DOMAIN + '/' + save_name
                })
                file_ids = http_handle.album_service.album_add_photos(
                    http_handle.album_Fid,
                    http_handle.merchant_id,
                    http_handle.user_id,
                    files,
                    is_exquisite=False)
                files[0]['file_ids'] = file_ids
            file_stream = meta['body']
            contents = file_stream
            is_ok = upload_by_userinput(bucket, filename, save_name, contents)
            if is_ok == 'OK':
                if not is_sort:
                    files.append({
                        'size': len(meta['body']),
                        'full_name': save_name,
                        'file_name': filename,
                        'content_type': meta['content_type'],
                    })
            else:
                try:
                    if is_sort:
                        http_handle.album_service.delete_photo_by_photo_id(
                            http_handle.merchant_id, file_ids[0])
                except Exception, e:
                    print 'e.message:', e.message
                    pass
                return False, 'Upload oss failure'
    except Exception:
        e = sys.exc_info()[0](traceback.format_exc())
        LOG.exception(e)
    return True, files