예제 #1
0
    def get_create_list(self, result_mapping):
        staff_list = result_mapping.get(StaffGenerator.get_key())
        role_list = result_mapping.get(RoleGenerator.get_key())
        department_list = result_mapping.get(DepartmentGenerator.get_key())

        auth_list = []
        for staff in staff_list:
            if staff.id == 1:
                department = department_list[0]
                role = role_list[0]
            else:
                department = random.choice(department_list)
                role = random.choice(role_list)
                
            auth_access_department = DictWrapper({})
            auth_access_department.staff = staff
            auth_access_department.access_id = department.id
            auth_access_department.access_type = AccessTypes.DEPARTMENT

            auth_access_role = DictWrapper({})
            auth_access_role.staff = staff
            auth_access_role.access_id = role.id
            auth_access_role.access_type = AccessTypes.ROLE

            auth_list.append(auth_access_department)
            auth_list.append(auth_access_role)

        return auth_list
예제 #2
0
 def init(self, obj_info):
     obj_infos = []
     if type(obj_info) == list:
         for obj in obj_info:
             obj_infos.append(DictWrapper(obj))
     else:
         obj_infos.append(DictWrapper(obj_info))
     return obj_infos
예제 #3
0
    def summing(cls, measure_shop_qs):
        total_sales_sum_list = []
        add_order_number_sum_list = []
        add_order_total_money_sum_list = []
        single_point_total_money_sum_list = []
        through_number_sum_list = []
        through_money_sum_list = []
        total_freight_sum_list = []

        sum_data = DictWrapper({})

        for measure_shop in measure_shop_qs:
            total_sales_sum_list.append(measure_shop.total_sales)
            add_order_number_sum_list.append(measure_shop.add_order_number)
            add_order_total_money_sum_list.append(
                measure_shop.add_order_total_money)
            single_point_total_money_sum_list.append(
                measure_shop.single_point_total_money)
            through_number_sum_list.append(measure_shop.through_number)
            through_money_sum_list.append(measure_shop.through_money)
            total_freight_sum_list.append(measure_shop.total_freight)

        sum_data.total_sales = sum(total_sales_sum_list)
        sum_data.add_order_number = sum(add_order_number_sum_list)
        sum_data.add_order_total_money = sum(add_order_total_money_sum_list)
        sum_data.single_point_total_money = sum(
            single_point_total_money_sum_list)
        sum_data.through_number = sum(through_number_sum_list)
        sum_data.through_money = sum(through_money_sum_list)
        sum_data.total_freight = sum(total_freight_sum_list)

        sum_data = cls.calculation_byitem(sum_data)

        return sum_data
예제 #4
0
    def summing(cls, measure_staff_qs):
        new_number_sum_list = []
        exhale_number_sum_list = []
        call_number_sum_list = []
        wechat_number_sum_list = []

        sum_data = DictWrapper({})

        for measure_staff in measure_staff_qs:
            new_number_sum_list.append(measure_staff.new_number)
            exhale_number_sum_list.append(measure_staff.exhale_number)
            call_number_sum_list.append(measure_staff.call_number)
            wechat_number_sum_list.append(measure_staff.wechat_number)

        sum_data.new_number = sum(new_number_sum_list)
        sum_data.exhale_number = sum(exhale_number_sum_list)
        sum_data.call_number = sum(call_number_sum_list)
        sum_data.wechat_number = sum(wechat_number_sum_list)
        sum_data.call_rate = "0%"

        if sum_data.exhale_number > 0:
            sum_data.call_rate = "{rate}%".format(rate=str(
                round((sum_data.call_number / sum_data.exhale_number *
                       100), 2)))
        return sum_data
예제 #5
0
 def parse(self, all_parms):
     data = all_parms.copy()
     pro_parms = {}
     fields = self.parser.get_fields()
     for field, helper in fields.items():
         if field in data:
             value = data.pop(field)
             try:
                 pro_parms[field] = helper.execute(value)
             except Exception as e:
                 raise pro_errors(ProtocolCodes.PROTOCOL_FORMAT_ERROR,
                                  field,
                                  helper.get_field().__class__.__name__)
         else:
             raise pro_errors(ProtocolCodes.PROTOCOL_LOST_PARAM, field)
     return DictWrapper(pro_parms), DictWrapper(data)
예제 #6
0
 def execute_task(self, group, task):
     exec_parms = DictWrapper(json.loads(task.exec_parms))
     organization, operator = self.get_shop_infos(exec_parms)
     if organization and operator:
         organization = self.create_customer_infos(organization, operator)
         return organization
     return None
예제 #7
0
    def check(self, row_list):
        fields = self.get_fields()
        row_infos = DictWrapper({})
        error_infos = {}
        for index, field in enumerate(fields):
            cell = row_list[index]
            if isinstance(cell, str):
                cell = cell.strip()
            key, helper = fields[index]
            try:
                row_infos.update({key: helper.parse(cell)})
            except Exception as e:

                error_infos.update({key: [helper, index]})

        error_msg = ""
        if error_infos:
            error_info_list = [ helper.get_desc() \
                    for helper, _ in error_infos.values()]
            error_msg = ', '.join(error_info_list)
        return row_infos, error_msg
예제 #8
0
    def get_create_list(self, result_mapping):
        order_list = result_mapping.get(OrderGenerator.get_key())

        service_list = []
        for order in order_list:
            service = DictWrapper({})
            server = StaffHelper().generate()
            service.customer = order.customer
            service.order = order
            service.seller = order._chance.staff
            service.server = server
            service.end_time = order.create_time + datetime.timedelta(days=365)
            service.remark = "服务单备注"
            service_list.append(service)
        return service_list
예제 #9
0
    def get_create_list(self, result_mapping):
        order_list = result_mapping.get(OrderGenerator.get_key())

        logistics_list = []
        # 暂时一笔订单只发一个
        for order in order_list:
            logistics = DictWrapper({})
            logistics.order = order
            logistics.customer = order.customer
            logistics.company = LogisticsCompanyHelper().generate()
            logistics.number = LogisticsNumberHelper().generate()
            logistics.total_quantity = order.total_quantity
            logistics.create_time = order.create_time + datetime.timedelta(
                days=2)
            logistics_list.append(logistics)
        return logistics_list
예제 #10
0
 def get_shop_infos(self, shop_infos):
     page = pq(url=shop_infos.url, opener=lambda link, **kw:
                    urllib.request.urlopen(link).read().decode("utf-8"))
     infor_board = page.find('.s_major')
     if infor_board:
         phone, name = infor_board.find('.s_tel').text().split(' ')
         address = infor_board.find('.s_add span').text()
         organization = DictWrapper({
             'name': shop_infos.name,
             'site': shop_infos.url,
             'city': shop_infos.city,
             'industry': '装修',
             'source': SourceType.ZYW,
             'address': address,
         })
         operator = DictWrapper({
             'name': name,
             'phone': phone,
         })
         return organization, operator
     else:
         print("error : {}".format(shop_infos))
         return None, None
예제 #11
0
 def _get_shop_task(ele_list):
     shop_tasks = []
     for ele_obj in ele_list:
         shop_info = ele_obj.parents('li:first').find('span.l_txt')
         a_obj = shop_info.find('.li_tle b a')
         shop_name = a_obj.text()
         shop_url = a_obj.attr('href')
         if shop_name and shop_url:
             shop_tasks.append(DictWrapper({
                 'url': shop_url,
                 'city': addr,
                 'name': shop_name
             }))
     return shop_tasks
예제 #12
0
 def get_shop_infos(self, shop_infos):
     url = shop_infos.url
     page = pq(url=url, opener=lambda link, **kw:
                    urllib.request.urlopen(link).read().decode("utf-8"))
     infor_board = page.find('.shop_introduce')
     if infor_board:
         shop = infor_board.find('.temp-company-v span').text().split(' ')[0]
         name = infor_board.find('.ico-shop-01').text()
         phone = infor_board.find('.ico-shop-02').text()
         tel = infor_board.find('.ico-shop-03').text()
         wx = infor_board.find('.ico-shop-05').text()
         title_list = infor_board.find('.c999').text().split(' ')
         content_list = infor_board.find('.con').text().split(' ')
         other = dict(zip(title_list, content_list))
         relative = infor_board.find('.jyhname').text()
         organization = DictWrapper({
             'name': shop,
             'site': url,
             'address': "{} {}".format(shop_infos.address, shop_infos.layer),
             'category': shop_infos.category,
             'city': "浙江-义务",
             'industry': '小商品',
             'source': SourceType.YWG,
             'other': json.dumps(other),
             'relative': relative,
         })
         operator = DictWrapper({
             'name': name,
             'phone': phone,
             'tel': tel,
             'wx': wx,
             'phone': phone,
         })
         return organization, operator
     else:
         raise Exception("error : {}".format(url))
예제 #13
0
    def hung_measure_forshops(cls, shop_list):
        """店铺挂载店铺绩效"""
        current_time = datetime.datetime.now()
        day_begin = '%d-%02d-01' % (current_time.year, current_time.month)
        day_begin = datetime.datetime.strptime("2018-05-01", '%Y-%m-%d')
        day_end = datetime.datetime.strptime("2018-06-01", '%Y-%m-%d')

        measure_shop_qs = MeasureShop.search(record_date__range=(day_begin,
                                                                 day_end))

        chance_time = day_begin
        init_data = {}
        while (chance_time < current_time):
            init_data[chance_time.strftime('%Y-%m-%d')] = DictWrapper({})
            init_data_item = init_data[chance_time.strftime('%Y-%m-%d')]
            init_data_item.total_sales = 0
            init_data_item.add_order_number = 0
            init_data_item.through_number = 0
            init_data_item.through_money = 0
            init_data_item.shop = None
            chance_time = chance_time + datetime.timedelta(days=1)

        shop_mapping = {}
        for shop in shop_list:
            shop.measure_shop = init_data
            shop_mapping[shop.id] = shop

        last_day = day_begin + datetime.timedelta(days=-1)

        measure_shop_qs = measure_shop_qs.values('shop_id', 'record_date').\
            annotate(count = Count('record_date'), sum_total_sales = Sum('total_sales'), sum_add_order_number = Sum('add_order_number'), \
                      sum_through_number = Sum('through_number'), sum_through_money = Sum('through_money'))

        for measure_shop_item in measure_shop_qs:
            if measure_shop_item["shop_id"] in shop_mapping:
                shop_month_date_item = shop_mapping[
                    measure_shop_item["shop_id"]].measure_shop[
                        measure_shop_item["record_date"].strftime('%Y-%m-%d')]
                shop_month_date_item.total_sales = measure_shop_item[
                    "sum_total_sales"]
                shop_month_date_item.add_order_number = measure_shop_item[
                    "sum_add_order_number"]
                shop_month_date_item.through_number = measure_shop_item[
                    "sum_through_number"]
                shop_month_date_item.through_money = measure_shop_item[
                    "sum_through_money"]

        return shop_list
예제 #14
0
    def calculate(cls, user_id, role):
        cur_time, expire_time = cls._get_time_scope()
        random_num = random.randint(1, 99999)
        token_str = cls._token_fmt.format(user_id = user_id,\
                           timestamp = cur_time, random_num = random_num)
        token_md5 = hashlib.md5(token_str.encode("utf-8")).hexdigest()
        size = int(len(token_md5) / 2)
        auth_token = token_md5[:size]
        renew_flag = token_md5[size:]

        return DictWrapper({
            "renew_flag": renew_flag,
            "user_id": user_id,
            "role": role,
            "expire_time": expire_time,
            "auth_token": auth_token,
        })
예제 #15
0
 def get_create_list(self, result_mapping):
     staff_list = result_mapping.get(StaffGenerator.get_key())
     account_list = []
     for staff in staff_list:
         if staff.name == "admin":
             username = staff.name
         else:
             username = staff.phone
         account_info = DictWrapper({
             "username": username,
             "password": hashlib.md5("123456".encode('utf8'))\
                             .hexdigest(),
             "status": StatusType.ENABLE,
             "staff": staff
         })
         account_list.append(account_info)
     return account_list
예제 #16
0
    def get_create_list(self, result_mapping):
        logistics_list = result_mapping.get(LogisticsGenerator.get_key())

        item_list = []
        # 暂时一笔订单只发一个
        for logistics in logistics_list:
            for order_item in OrderItem.query(order=logistics.order):
                item = DictWrapper({})
                item.logistics = logistics
                item.customer = logistics.customer
                item.order_item = order_item
                item.quantity = order_item.quantity
                item_list.append(item)
        return item_list
예제 #17
0
    def formatting(self, value):
        if type(value) is not dict:
            raise Exception("paramter is not dict")

        fields = self.get_fields()
        result = {}
        for key, helper in fields.items():
            if key not in value:
                if self._is_required:
                    raise Exception("paramter '{}' losted".format(key))
                else:
                    continue

            try:
                cur_value = helper.format(value[key])
            except Exception as e:
                print('====~~~~~~~~~~~~~~~~~~>>>>  ', value[key],
                      type(value[key]))
                raise Exception("paramter '{}' format error, e = {}".format(
                    key, e))
            else:
                result[key] = cur_value
        return DictWrapper(result)
예제 #18
0
    def parsing(self, value):
        if type(value) is str:
            value = self.json_loads(value)

        if type(value) is dict:
            fields = self.get_fields()
            result = {}
            for key, helper in fields.items():
                if key not in value:
                    if helper._is_required:
                        raise Exception("paramter '{}' losted".format(key))
                    else:
                        continue

                try:
                    cur_value = helper.parse(value[key])
                except Exception as e:
                    raise Exception("paramter '{}' format error".format(key))
                else:
                    result[key] = cur_value
            return DictWrapper(result)

        raise Exception("paramter is not dict")
예제 #19
0
    def summing(cls, sum_data, **search_info):

        sum_measure_data = DictWrapper({})

        sum_measure_data.volume_total = 0
        sum_measure_data.open_number_total = 0
        sum_measure_data.activation_number_total = 0
        sum_measure_data.conversion_rate_total = "0%"
        sum_measure_data.open_rate_total = "0%"
        sum_measure_data.activation_rate_total = "0%"


        if 'cur_user' in search_info:
            user_pro = search_info.pop('cur_user')
            if not user_pro._is_admin:
                search_info.update({"service__seller_id__in": user_pro._staff_id_list})
        if "begin_time" in search_info:
            begin_time = search_info.pop("begin_time")
            search_info.update({"order__pay_time__gte":\
                                datetime.datetime(begin_time.year, begin_time.month, begin_time.day, 0, 0, 0)})
        if "end_time" in search_info:
            end_time = search_info.pop("end_time")
            search_info.update({"order__pay_time__lte":\
                                datetime.datetime(end_time.year, end_time.month, end_time.day, 23, 59, 59)})
        if "staff__in" in search_info:
            staff_list = search_info.pop("staff__in")
            search_info.update({"service__seller__in":staff_list})
        service_item_qs = cls.search_qs(**search_info)
        sum_measure_data.volume_total = service_item_qs.count()
        for service_item in service_item_qs:
            if service_item.dsinfo_status != "red":
                sum_measure_data.open_number_total += 1
            if service_item.rebate_status != "red":
                sum_measure_data.activation_number_total += 1

        if sum_data.new_number > 0 and sum_measure_data.volume_total > 0:
            sum_measure_data.conversion_rate_total = "{number}%".format(number = round((sum_measure_data.volume_total \
                                                / sum_data.new_number) * 100, 2))
        if sum_measure_data.volume_total > 0 and sum_measure_data.open_number_total > 0:
            sum_measure_data.open_rate_total = "{number}%".format(number = round((sum_measure_data.open_number_total \
                                                        / sum_measure_data.volume_total) * 100, 2))
        if sum_measure_data.volume_total > 0 and sum_measure_data.activation_number_total > 0:
            sum_measure_data.activation_rate_total = "{number}%".format(number = round((sum_measure_data.activation_number_total \
                                                                    / sum_measure_data.volume_total) * 100, 2))

        return sum_measure_data
예제 #20
0
    def get_create_list(self, result_mapping):
        item_list = result_mapping.get(LogisticsItemGenerator.get_key())
        service_list = result_mapping.get(ServiceGenerator.get_key())
        service_mapping = {service.order: service for service in service_list}

        service_item_list = []
        for item in item_list:
            try:
                product_model = item.order_item.goods.product_model
                order = item.order_item.order
            except Exception as e:
                # 当获取不到信息时,默认跳过发货(理论上应该是发货前,发货中,发货后)
                continue

            for _ in range(item.quantity):
                try:
                    equipment = EquipmentModelHelper().generate(\
                        product_model = product_model, can_send = True)
                    service_item = DictWrapper({})
                    service_item.customer = item.customer
                    service_item.order = order
                    service_item.service = service_mapping.get(order)
                    service_item.equipment = equipment
                    service_item.buyinfo_status = EquipStatusHelper().generate(
                    )
                    service_item.dsinfo_status = EquipStatusHelper().generate()
                    service_item.rebate_status = EquipStatusHelper().generate()
                    service_item.sn_status = EquipStatusHelper().generate()
                    service_item.remark = "设备服务单备注"
                    service_item_list.append(service_item)
                except Exception as e:
                    print("缺少库存")

        return service_item_list
예제 #21
0
 def get(cls, auth_str):
     token_str = redis.get(auth_str, cls._cache_category)
     if token_str is None:
         raise api_errors(ApiCodes.INTERFACE_TOKEN_INVALIED)
     return cls(DictWrapper(json.loads(token_str)))
예제 #22
0
    def Statistics(cls, search_time=None):
        if isinstance(search_time, dict):
            search_time_in = search_time['search_time']
            user_pro = search_time['cur_user']
        if search_time_in is None:
            current_time = datetime.datetime.now()
        else:
            current_time = search_time_in
        cur_date_first = datetime.date(current_time.year, current_time.month,
                                       1)
        cur_date_last = datetime.date(current_time.year, current_time.month +
                                      1, 1) - datetime.timedelta(1)
        if user_pro:

            measure_staff_list = MeasureStaffHelper.search_qs(
                begin_time=cur_date_first,
                end_time=cur_date_last,
                cur_user=user_pro)
        else:
            measure_staff_list = MeasureStaffHelper.search_qs(
                begin_time=cur_date_first, end_time=cur_date_last)
        measure_staff_mapping = {}
        cal_time = cur_date_last
        while (cal_time >= cur_date_first):
            temp_calc = DictWrapper({})

            temp_calc.new_number = 0
            temp_calc.exhale_number = 0
            temp_calc.call_number = 0
            temp_calc.call_rate = '0%'
            temp_calc.wechat_number = 0
            temp_calc.volume = 0
            temp_calc.conversion_rate = '0%'
            temp_calc.open_number = 0
            temp_calc.open_rate = '0%'
            temp_calc.activation_number = 0
            temp_calc.activation_rate = '0%'

            temp_calc_day = {}
            time_str = cal_time.strftime('%Y-%m-%d')
            measure_staff_mapping[time_str] = temp_calc
            cal_time = cal_time - datetime.timedelta(1)
        for measure_staff in measure_staff_list:
            report_date_str = str(measure_staff.report_date)
            temp_item = measure_staff_mapping[report_date_str]
            temp_item["new_number"] += measure_staff.new_number
            temp_item["exhale_number"] += measure_staff.exhale_number
            temp_item["call_number"] += measure_staff.call_number
            temp_item["wechat_number"] += measure_staff.wechat_number
        return measure_staff_mapping
예제 #23
0
 def _get_response_data(self, result):
     result = DictWrapper(result)
     status = result.status
     if status != "ok":
         return None
     return result.result