Example #1
0
    def order_detail_parse_xyj(self):
        """针对洗悦家清洁业务"""
        account_info = query_md_merchant(2)[0]  # 1是midea账号表中宏旺的id
        usename = account_info.account
        pwd = account_info.password
        cookies = login(usename, pwd)
        # 测试用17
        res_json = get_orders(cookies=cookies)  # 默认抓取已派工订单
        # print 'daijie_orders:%s'%res_json
        order_list = res_json['content']['rows']
        if order_list:
            for od in order_list:
                try:
                    if od['ORDER_ORIGIN'] != u'网点自建':  # 只有订单来源是非网点自建的才做同步
                        # 从dm_midea_factory_order查询工单号,如果查不到进行同步
                        rs = query_md_factory(od['SERVICE_ORDER_NO'])
                        if not rs:
                            print od['SERVICE_ORDER_NO']
                            # 解析原始订单数据
                            detail_item = xyj_detail_parse(od)
                            clear_db = CleanDb(od_detail=detail_item)
                            # 保存详情数据
                            order_id = clear_db.save_order_detail()  # 保存订单详情
                            print ('order_id:%s' % order_id)
                            # errorReport('success save order_detail:'+str(order_id))
                            # 保存原始工单和对应的二师兄平台的订单对应id
                            save_md_factory(od, int(order_id),usename)
                            # errorReport('xyj success save md_factory:'+od['SERVICE_ORDER_NO']+' '+time.asctime(time.localtime(time.time())))
                            # 保存日志
                            api_logs = {'client': 'media_save_orderdetail',
                                        'order_source_data': od,
                                        'order_parse_data': detail_item,
                                        'order_id': order_id,
                                        'time': time.time()
                                        }
                            saveApiLogs(api_logs)

                            self.log('finish order crawl:%s' % order_id)
                            # 增加跟单记录
                            track_time = current_timestamp()
                            track_desc = u"系统在{}从美的同步了订单".format(current_timestr())
                            orderTracking(order_id, 1, 'system', u'同步', track_desc, track_time)

                except Exception as e:
                    # import traceback
                    # traceback.print_exc()
                    errorReport('xyj crawl exception->' + od['SERVICE_ORDER_NO'] + ':' + str(e) + str(e.args) + time.asctime(time.localtime(time.time())))
        # 保存美的师傅的数据
        shifu_data = get_engineers_data(cookies=cookies)
        if shifu_data:
            for shifu_data in shifu_data['content']['rows']:
                save_account(shifu_data, usename)  # 保存师傅数据
        self.log('finish save shifu_data')
Example #2
0
 def on_message(self, message):
     print(message)
     message = json.loads(message)
     mdappapi = MdAppApi()
     try:
         r = eval(message['cmd'])(message['params'])
         '''example: {'cmd': 'mdappapi.appsearchfromsn', 'params': {'businessFlag': 'AZ', 'parseType': '10', 'productSn1': 'f'}, 'admin_uid': 5}'''
         print(r)
         self.write_message(json.dumps(r))
     except Exception as e:
         self.write_message({'status': False, 'msg': str(e)})
         print(str(e))
         utils.errorReport(str(e), system_name='MdAppapi')
     LOGGER.debug('Message incomming: %s', message)
Example #3
0
def use_queue(in_queue):
    while True:
        p = in_queue.get()
        p = json.loads(p)
        try:
            eval(p['cmd'])(p['params'])
        except Exception as e:
            exc_type, exc_obj, exc_tb = sys.exc_info()
            fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
            msg = str(
                exc_type
            ) + ":" + e.message + " in file '" + fname + "' line " + str(
                exc_tb.tb_lineno)
            utils.errorReport(msg, "redis subpub")
        in_queue.task_done()  #向任务已经完成的队列发送一个消息
Example #4
0
 def dispatch_order(self,orderno, userid,operator = None):
     '''派单接口
     orderno:订单号,字符串
     userid:订单的内容数据,字典
     '''
     dispatch_url = 'http://aux.bangjia.me/index.php/Auxtest/dispatchorder.html'
     from_data = {
         'orderno': orderno,
         'userid[]': userid
     }
     r = self.s.post(url = dispatch_url,data = from_data,headers = self.headers)
     print("dispatch:")
     ret = r.text
     print(r.text)
     try:
         if '派单成功' in ret or u'派单成功' in ret:
             print('dispatch ok')
             self._after_dispatch(orderno = orderno,userid = userid,operator = operator)
             print('dispatch ok after')
             return True
     except Exception as e:
         pass
 
     try:
         if str(ret['status']) == '1':
             print('dispatch field')
             self._after_dispatch(orderno,userid,operator,ret)
             return False
     except Exception as e:
         pass
     return utils.errorReport('帮家派单失败,' + ',orderno:' + orderno,system_name = self.system_name)
Example #5
0
    def order_detail_parse_fortianmao(self, cookies):
        res_json = get_orders(cookies=cookies, order_status='14')  #   已接单以后开始
        # print 'daijie_orders:%s'%res_json
        order_list = res_json['content']['rows']
        if order_list:
            for od in order_list[:1]:
                print 'tianmao :%s' % od['SERVICE_ORDER_NO']
                try:
                    if od['ORDER_ORIGIN'] == u'天猫接入':  # 只有订单来源是非网点自建的才做同步
                        rs = query_md_factory(od['SERVICE_ORDER_NO'])
                        if not rs:
                            # 解析原始订单数据
                            meidi_detail_item = md_detail_parse(od)
                            # 保存详情数据
                            order_id = self.md_db.save_order_detail(
                                meidi_detail_item)  # 保存订单详情
                            self.log('order_id:%s' % order_id)
                            # 保存原始工单和对应的二师兄平台的订单对应id
                            save_md_factory_tm(od, int(order_id))
                            # errorReport('success save md_factory:' + od['SERVICE_ORDER_NO'] + ' ' + time.asctime(
                            #     time.localtime(time.time())))
                            # 保存日志
                            api_logs = {
                                'client': 'media_save_orderdetail',
                                'order_source_data': od,
                                'order_parse_data': meidi_detail_item,
                                'order_id': order_id,
                                'time': time.time()
                            }
                            saveApiLogs(api_logs)

                            self.log('finish order crawl:%s' % order_id)
                            # 增加跟单记录
                            track_time = current_timestamp()
                            track_desc = u"系统在{}从美的同步了订单".format(
                                current_timestr())
                            orderTracking(order_id, 1, 'system', u'同步',
                                          track_desc, track_time)

                except Exception as e:
                    errorReport('media tianmao crawl exception->' +
                                od['SERVICE_ORDER_NO'] + ':' + str(e) +
                                str(e.args) +
                                time.asctime(time.localtime(time.time())))
Example #6
0
 def add_dispatch(self,data,operator = None):
     '''
     建单,接单,派单业务处理
     '''
     print('add_dispatch')
     print(self.account)
     add_ret = self.add_order(data['adddata'],operator = operator)
     if add_ret is False:
        return add_ret
     grid = self.gridIndex(None)
     if grid.get('total') != '0':
         for item in grid['rows']:
             if item['mobile']==data['adddata']['callNo']:
                 receipt = self.providerReceiptOrder(item['factorynumber'],operator = operator)
                 print("receiptJon:",receipt)
                 if receipt is False:
                     return receipt
                 account = self.getAccountByName(data['info']['user'])
                 print("account:",account)
                 aux = AuxOrder()
                 session = DBSession()
                 aux.aux_orderno = receipt['orderno']
                 aux.platform_orderid = data['info']['platform_orderid']
                 aux.aux_userid = account['aux_id_number']
                 session.add(aux)
                 fac = AuxFactoryOrder()
                 fac.factorynumber = item['factorynumber']
                 fac.platform_id = data['info']['platform_orderid']
                 fac.aux_orderno = receipt['orderno']
                 fac.order_type = data['adddata']['servDesc']
                 fac.created_at = str(time.time())[:str(time.time()).index('.')]
                 fac.order_type = self.get_order_type(data['adddata']['servDesc'])
                 session.add(fac)
                 session.commit()
                 session.close()
                 return self.dispatch_order(orderno = receipt['orderno'],userid = account['aux_id_number'],operator = operator)
     print('no wait accept order.')
     utils.errorReport('notice:no wait accept order',system_name = self.system_name)
     return False
Example #7
0
 def __init__(self,account,password):
     print(account,password)
     self.headers = {
         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
         'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0',
         'Host': 'aux.bangjia.me',
         'Connection': 'keep-alive',
         'Upgrade-Insecure-Requests': '1',
         "Accept-Encoding":"gzip, deflate",
         "Accept-Language":"zh-CN,zh;q=0.8"
     }
     self.index_url = "http://aux.bangjia.me/index.php/Ucenter/index.html"
     self.account = account
     self.password = password
     self.system_name = "Aux web"
     self.s = requests.Session()
     self.s.get(self.index_url)
     r = self.login()
     if "用户名或密码错误" in r:
         utils.errorReport("用户名或密码错误:"+self.account,system_name = self.system_name)
         print("用户名或密码错误")
         return None
Example #8
0
 def providerReceiptOrder(self,factorynumber,operator = None):
     url = 'http://aux.bangjia.me/index.php/Auxtest/providerReceiptOrder.html'
     data = {'factorynumber':factorynumber}
     r = self.s.post(url = url,headers = self.headers,data = data)
     print('接单返回:')
     print(r.text)
     ret = json.loads(r.text)
     print("ret",ret)
     print(ret['ret'])
     if str(ret['ret']) == '1':
         self._after_Receipt(factorynumber,operator,ret)        
         return ret
     return utils.errorReport('[帮家]商家接单失败:factorynumber' + factorynumber + 'info:' + ret['msg'],system_name = self.system_name)
Example #9
0
 def add_order(self,data,operator = None):
     '''添加订单接口
     data:字典'''
     add_order_url = 'http://aux.bangjia.me/index.php/Auxtest/auxaddOrder.html'
     r = self.s.post(url = add_order_url,data = data,headers = self.headers,timeout = 30.0)
     ret = r.text
     print(r.text)
     try:
         if u'添加成功' in ret or '添加成功' in ret:
             self._after_add(data,operator)
             return True
     except Exception as e:
         pass
     
     try:
         if str(ret['status']) == '1':
             self._after_add(data,operator)
             return True
     except Exception as e:
         pass
     return utils.errorReport('帮家建单失败:'+json.dumps(ret)+'info:' + json.dumps(ret),system_name = self.system_name)
Example #10
0
# coding: utf8
import sys, os
reload(sys)
sys.setdefaultencoding('utf8')
from appBot import utils
from appBot.auxcss_api import Auxcss

utils.errorReport(u"auxcss爬虫运行", "auxcss Bot")
try:
    auxcss = Auxcss()
    auxcss.get_amt()
except Exception as e:
    exc_type, exc_obj, exc_tb = sys.exc_info()
    fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
    msg = str(exc_type) + ":" + str(
        e.message) + " in file '" + str(fname) + "' line " + str(
            exc_tb.tb_lineno)
    utils.errorReport(msg, "auxcss Bot")
    print(msg)
Example #11
0
    def order_detail_parse(self,merchant):
        """在订单详情页提取订单详情数据"""
        jd_login = jp.JdLogin(merchant)
        cookies = jd_login.login()
        res_json = jp.quest_orders(cookies=cookies,merchant=merchant)  # 默认抓取已预约订单
        order_list = res_json['rows']
        # print('order_list',order_list)
        if order_list:
            for od in order_list:
                print '*' * 20 + str(od['orderno'])+'_start_' + '*' * 20
                try:
                    # 解析原始订单数据
                    static_data = parse_static_data(od['ordernoSecret'], cookies)
                    print 'orderno:%s' % od['orderno']
                    # 非送装一体的工单才同步
                    if not static_data['is_ins_join_send']:
                        # 查询factory表,查询为空才同步
                        is_exist_factory = query_factory(od['orderno'])
                        if not is_exist_factory:
                            is_exist_jd_ordid = query_jd_ordid(od['orderId'])
                            detail_item = detail_parse(od, static_data,merchant)

                            # 保存详情数据
                            spider_db = JdDb(od_detail=detail_item)
                            if not is_exist_jd_ordid:
                                # 同步订单,dm_order和apl表插入数据
                                order_id = spider_db.new_save_order_detail()  # 保存订单详情
                                # errorReport('success save order_detail:'+str(order_id))
                                # 保存原始工单和对应的二师兄平台的订单对应id
                                track_time = current_timestamp()
                                track_desc = u"系统在{}从{}同步了订单".format(current_timestr(), self.order_source)
                                orderTracking(order_id, 1, 'system', u'同步', track_desc, track_time)
                                print 'finish add order:%s'%order_id
                            if is_exist_jd_ordid:
                                # 更新订单,更新dm_order和apl
                                order_id = is_exist_jd_ordid[0]
                                spider_db.update_order_detail(order_id)
                                track_time = current_timestamp()
                                track_desc = u"系统在{}修改了订单".format(current_timestr())
                                orderTracking(order_id, 1, 'system', u'改单', track_desc, track_time)
                                print 'finish update order:%s'%order_id

                            # 保存factory信息
                            print('order_id:%s' % order_id)
                            save_factory(od, int(order_id), static_data)
                            # report_message = '%s->success save:' % self.name + str(
                            #     od['orderno']) + ' ' + od['orderId']+' '+time.asctime(time.localtime(time.time()))
                            # errorReport(report_message)
                            # 保存日志

                            print '*' * 20 + str(od['orderno'])+'_success_' + '*' * 20
                            api_logs = {'client': self.name,
                                        'order_source_data': od,
                                        'order_parse_data': detail_item,
                                        'order_id': order_id,
                                        'time': time.time()
                                        }
                            saveApiLogs(api_logs)

                            # print('finish order crawl:%s' % order_id)
                            # 增加跟单记录


                except Exception as e:
                    # import traceback
                    # traceback.print_exc()
                    errorReport('%s exception->' % self.name + str(od['orderno']) + ':' + str(e) + str(
                        e.args) + time.asctime(time.localtime(time.time())))

        # 保存师傅的数据
        shifu_datas = jp.get_engineers(cookies=cookies,merchant=merchant)
        if shifu_datas:
            for shifu_data in shifu_datas['rows']:
                save_account(shifu_data)  # 保存师傅数据
        print ('finish save shifu_data')
Example #12
0
 def report_errror(self, failure):
     utils.errorReport('aux_crawl:' + repr(failure.value))
Example #13
0
    def order_detail_parse(self, response):
        """在订单详情页提取订单详情数据"""
        order_detail = OrderedDict()
        try:
            work_order_info = u"工单信息"
            cust_info = u"客户信息"
            service_post = u"服务请求"
            product_info = u"产品信息"

            selector = Selector(response)
            # 顾客姓名
            order_detail['ord_cust_name'] = self.new_selector(
                selector,
                '//input[@class="detail-data-form customerName"]/@value')
            # print('ord_cust_name:%s'%order_detail['ord_cust_name'])

            # 以下为dm_order所需数据
            # 拼接电话
            # print(self.new_selector(selector,'//div[@title="%s"]'%work_order_info))
            laidian_num = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[2]/td[2]/input/@value' %
                work_order_info)
            print('laidian_numxxx:%s' % laidian_num)
            # laidian_num = self.new_selector(selector,'//div[@title="%s"]/table/tr[1]/td[2]/input/@value'%work_order_info)
            mobile_phone = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[3]/td[6]/input/@value' %
                cust_info)
            print('mobile_phone:%s' % mobile_phone)
            order_detail['ord_cust_tel'] = laidian_num
            print('ord_cust_tel:%s' % order_detail['ord_cust_tel'])

            # 拼接具体用户地址
            town = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[1]/td[4]/select[4]/option[@selected="selected"]/text()'
                % (cust_info))
            addr_detail = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[2]/td[2]/input/@value' %
                (cust_info))
            distrct = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[1]/td[4]/select[3]/option[@selected="selected"]/text()'
                % (cust_info))
            if distrct in addr_detail:
                ord_cust_addr = intercept_qu(addr_detail)
            elif town in addr_detail:
                ord_cust_addr = addr_detail.replace(town, '')
            else:
                ord_cust_addr = addr_detail
            order_detail['ord_cust_addr'] = ord_cust_addr
            # print('ord_cust_addr:%s'%order_detail['ord_cust_addr'])
            # 客户省市区
            order_detail['ord_province'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[1]/td[4]/select[1]/option[@selected="selected"]/text()'
                % (cust_info))
            order_detail['ord_city'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[1]/td[4]/select[2]/option[@selected="selected"]/text()'
                % (cust_info))
            order_detail['ord_district'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[1]/td[4]/select[3]/option[@selected="selected"]/text()'
                % (cust_info))
            order_detail['ord_street'] = town

            # 服务描述
            order_detail['ord_remark'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[1]/td[2]/textarea/text()' %
                service_post)
            # print('ord_remark:%s'%order_detail['ord_remark'])
            # 订单号
            order_detail['ord_num'] = create_sn()  # 利用东哥算法计算
            print("ord_num:%s" % order_detail['ord_num'])
            # 微信支付号
            order_detail['ord_pay_num'] = create_sn()  # 利用东哥算法计算
            print("ord_pay_num:%s" % order_detail['ord_pay_num'])
            # 联合地址
            order_detail['ord_grab_addr'] = order_detail[
                'ord_province'] + order_detail['ord_city'] + order_detail[
                    'ord_district'] + order_detail['ord_cust_addr']
            # print('ord_grab_addr:%s'%order_detail['ord_grab_addr'])
            # 服务描述
            order_detail['ord_cust_fault'] = order_detail['ord_remark']
            # 工单号
            order_detail['ord_accept_no'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[2]/td[4]/input/@value' %
                work_order_info)
            print('ord_accept_no:%s' % order_detail['ord_accept_no'])
            # 要求服务时间
            ymd_time = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[3]/td[2]/input[1]/@value' %
                service_post)

            # print(ymd_time)
            ymd_time_timestamps = time_to_timestamp(ymd_time)
            # ap_time = self.new_selector(selector,'//div[@title="请求"]/table/tbody/tr[3]/td[2]/input[2]/@value')
            order_detail['ord_ask_time'] = ymd_time_timestamps
            # print('ord_ask_time:%s'%order_detail['ord_ask_time'])
            # 当前时间戳
            order_detail['ord_create_time'] = current_timestamp()
            print('ord_create_time:%s' % order_detail['ord_create_time'])
            # 购买时间,存时间戳格式
            buy_time = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[2]/td[2]/input/@value' %
                product_info)
            order_detail['ord_buy_time'] = time_to_timestamp(buy_time)
            print('ord_buy_time:%s' % order_detail['ord_buy_time'])
            # 经纬度
            # if u"区" in addr_detail:
            #     point_index = addr_detail.index(u'区')
            #     addr_detail = addr_detail[point_index+1:]
            order_detail['ord_cust_lng'], order_detail[
                'ord_cust_lat'] = get_latlng(
                    order_detail['ord_city'], order_detail['ord_district'] +
                    order_detail['ord_street'] + order_detail['ord_cust_addr'])
            # print('ord_cust_lng:%s'%order_detail['ord_cust_lng'])

            order_detail['ord_weixin_num'] = ''
            order_detail['ord_merc_id'] = response.meta['account_info'][
                'platform_id']  # 根据登录的账号商家决定
            print('ord_merc_id:%s' % order_detail['ord_merc_id'])
            order_detail['ord_purchase_unit'] = u'厂派'
            order_detail['ord_purchase_unit_id'] = 0
            order_detail['ord_status'] = 0
            order_detail['ord_need_build'] = 2  #//不用建单
            order_detail['ord_type'] = 1
            # 销售单位,购买单位
            order_detail['ord_sale_unit'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[3]/td[6]/input/@value' %
                (product_info))
            # 接件时间,受理日期
            order_detail['ord_accept_time'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[2]/td[4]/input/@value' %
                service_post)
            order_detail['ord_accept_time'] = time_to_timestamp3(
                order_detail['ord_accept_time'])
            # order_detail['ord_show_cost'] = 0.0
            # 服务原因
            order_detail['service_reason'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[3]/td[2]/select[1]/option[@selected="selected"]/text()'
                % work_order_info)

            if order_detail['service_reason'] == u'维修':
                if u'移机' in order_detail['ord_remark']:
                    order_detail['ord_type'] = 3
                else:
                    order_detail['ord_type'] = 5
            print 'ord_type:%s' % order_detail['ord_type']

            # 解析渠道,不会立即插入dm_order,这些渠道名称根据dm_merchant_purchase_unit获得
            if order_detail[
                    'ord_merc_id'] == 91:  # 聚杰因为没有厂家系统,京东其他渠道的配置,所以区别对待
                order_detail['qudao'] = u'天猫'
            elif u'京东' in order_detail['ord_sale_unit']:
                order_detail['qudao'] = u'京东'
            elif u'京.东' in order_detail['ord_sale_unit']:
                order_detail['qudao'] = u'京东'
            elif u'天猫' in order_detail['ord_sale_unit']:
                order_detail['qudao'] = u'天猫'
            elif u'国美' in order_detail['ord_sale_unit']:
                order_detail['qudao'] = u'国美'
            else:
                order_detail['qudao'] = u'厂家系统'

            # 下面为dm_order 暂时不需要数据
            # 以下工单信息
            # 进展查询码
            order_detail['ord_check_num'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[1]/td[6]/input/@value' %
                work_order_info)
            # 工单途径
            order_detail['ord_way'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[1]/td[8]/input/@value' %
                work_order_info)
            # # 服务原因
            # order_detail['service_reason'] = self.new_selector(selector,'//div[@title="%s"]/table/tr[2]/td[2]/select[1]/option[@selected="selected"]/text()'%work_order_info)
            # 投诉原因
            order_detail['complaint_reason'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[2]/td[4]/select[1]/option[@selected="selected"]/text()'
                % work_order_info)
            # 处理类别
            order_detail['deal_category'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[2]/td[6]/select[1]/option[@selected="selected"]/text()'
                % work_order_info)
            # 指令人
            order_detail['zhilin_ren'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[2]/td[8]/input/@value' %
                work_order_info)
            # 工程单
            order_detail['eng_form'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[3]/td[2]/span/text()' %
                work_order_info)
            # 处理级别
            order_detail['deal_level'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[3]/td[4]/select[1]/option[@selected="selected"]/text()'
                % work_order_info)
            # 历史工单数
            order_detail['work_num_history'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[3]/td[6]/select[1]/option[@selected="selected"]/text()'
                % work_order_info)
            # 重电次数
            order_detail['call_repeat_num'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[3]/td[8]/input/@value' %
                work_order_info)
            # 工单类型
            order_detail['work_order_category'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[4]/td[2]/select[1]/option[@selected="selected"]/text()'
                % work_order_info)
            # 处理阶段
            order_detail['deal_stage'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[4]/td[4]/select[1]/option[@selected="selected"]/text()'
                % work_order_info)
            # 处理状态
            order_detail['deal_status'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[4]/td[6]/select[1]/option[@selected="selected"]/text()'
                % work_order_info)
            # 督办
            order_detail['duban'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[4]/td[8]/span/text()' %
                work_order_info)
            # 督办日期
            order_detail['duban_date'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[5]/td[2]/input/@value' %
                work_order_info)
            # 退单次数
            order_detail['return_num'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[5]/td[4]/input/@value' %
                work_order_info)
            # 服务时长
            order_detail['service_time_length'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[5]/td[6]/input/@value' %
                work_order_info)
            # 承诺时间
            order_detail['commit_time'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[5]/td[8]/input/@value' %
                work_order_info)
            # 做出承诺人
            order_detail['commit_person'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[6]/td[2]/input/@value' %
                work_order_info)
            # 做出承诺时间
            order_detail['do_commit_time'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[6]/td[4]/input/@value' %
                work_order_info)
            # 废单次数
            order_detail['discard_order_num'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[6]/td[6]/input/@value' %
                work_order_info)
            # 处理工程师
            order_detail['engineer'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[6]/td[8]/input/@value' %
                work_order_info)

            # 以下服务请求
            # 故障树方案
            order_detail['guzhang_'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[1]/td[4]/textarea/text()' %
                service_post)
            # 空调台数
            order_detail['condition_num'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[2]/td[2]/input/@value' %
                service_post)
            # 受理日期
            # order_detail['accepted_date'] = self.new_selector(selector,'//div[@title="%s"]/table/tr[2]/td[4]/input/@value'%service_post)
            # 服务项目
            order_detail['service_project'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[2]/td[6]/input/@value' %
                service_post)
            # 上门预约日期
            ymr_yuyue = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[3]/td[4]/input/@value' %
                service_post)
            # sfm_yuyue = self.new_selector(selector,'//div[@title="%s"]/table/tr[3]/td[4]/select[1]/option[@selected="selected"]/text()'%service_post)
            order_detail['yuyue_date'] = time_to_timestamp(ymr_yuyue)

            # 以下客户信息
            # 家庭电话
            order_detail['family_phone'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[3]/td[2]/input/@value' %
                (cust_info))
            # 办公电话
            order_detail['office_phone'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[3]/td[4]/input/@value' %
                (cust_info))
            # 移动电话
            order_detail['mobile_phone'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[2]/td[6]/input/@value' %
                (cust_info))
            # 电话区号
            order_detail['quhao'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[4]/td[2]/input/@value' %
                (cust_info))
            # 微信账号
            order_detail['weixin_account'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[4]/td[4]/input/@value' %
                (cust_info))
            # 是否延保金用户
            order_detail['is_yanbao_account'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[5]/td[2]/span/text()' %
                (cust_info))
            # 延保卡号
            order_detail['yanbao_cardno'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[5]/td[4]/input/@value' %
                (cust_info))
            # 延保金卡地址
            order_detail['yanbao_card_addr'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[5]/td[6]/input/@value' %
                (cust_info))
            # 保养卡号
            order_detail['baoyang_cardno'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[5]/td[8]/input/@value' %
                (cust_info))

            # 以下产品信息
            # 品牌
            order_detail['brand'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[1]/td[2]/select[1]/option[@selected="selected"]/text()'
                % (product_info))
            # 产品大类
            order_detail['product_category'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[1]/td[4]/select[1]/option[@selected="selected"]/text()'
                % (product_info))
            # 整机型号
            order_detail['machine_model'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[1]/td[6]/select[1]/option[@selected="selected"]/text()'
                % (product_info))
            # 整机型编号
            order_detail['machine_num'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[1]/td[8]/select[1]/option[@selected="selected"]/text()'
                % (product_info))
            # 是否延保
            order_detail['is_yanbao'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[2]/td[4]/span/text()' %
                (product_info))
            # 延保年限
            order_detail['yanbao_year'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[2]/td[6]/input/@value' %
                (product_info))
            # 匹数
            order_detail['pi_num'] = self.new_selector(
                selector,
                '//div[@title="%s"]/table/tr[2]/td[8]/select[1]/option[@selected="selected"]/text()'
                % (product_info))
            # 内机编号
            order_detail['neiji_num'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[3]/td[2]/input/@value' %
                (product_info))
            # 外机编号
            order_detail['waiji_num'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[3]/td[4]/input/@value' %
                (product_info))
            # 购买单位
            # order_detail['buy_unit'] = self.new_selector(selector,'//div[@title="%s"]/table/tr[3]/td[6]/input/@value'%(product_info))
            # 安装单位
            order_detail['anzhuang_unit'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[3]/td[8]/input/@value' %
                (product_info))
            # 维修单位
            order_detail['weixiu_unit'] = self.new_selector(
                selector, '//div[@title="%s"]/table/tr[4]/td[2]/input/@value' %
                (product_info))

            # 保存订单详情数据
            # print(order_detail)
            if not order_detail['ord_accept_no']:
                utils.errorReport('aux_exption->parse order_detail fail' +
                                  ':' +
                                  time.asctime(time.localtime(time.time())))
            order_id = self.aux_db.save_order_detail(order_detail)
            print 'order_id:%s' % order_id
            # 保存工单和订单插入id的映射关系
            print 'ord_accept_no:%s' % order_detail['ord_accept_no']
            self.aux_db.save_auxfactory(
                order_detail['ord_accept_no'], order_id, current_timestamp(),
                order_detail['ord_type'],
                response.meta['account_info']['username'])
            # utils.errorReport('aux->success save order_detail:%s'%order_detail['ord_accept_no']+' '+response.meta['account_info']['username']+' '+time.asctime(time.localtime(time.time())))
            # 保存日志
            api_logs = {
                'client': 'media_save_orderdetail',
                'order_source_data': response.body,
                'order_parse_data': order_detail,
                'order_id': order_id,
                'time': time.time()
            }
            utils.saveApiLogs(api_logs)
            track_time = current_timestamp()
            track_desc = u"系统在{}从奥克斯同步了订单".format(current_timestr())
            utils.orderTracking(order_id, 1, 'system', u'同步', track_desc,
                                track_time)

        except Exception as e:
            # import traceback
            # traceback.print_exc()
            # print('aux_exption-->>'+str(e))
            utils.errorReport('aux_exption->' + order_detail['ord_accept_no'] +
                              ':' + str(e) + str(e.args) +
                              time.asctime(time.localtime(time.time())))
Example #14
0
def detail_parse(od_dict, static_data, merchant):
    '''订单详情数据组装'''
    item = OrderedDict()

    # dm_order 表所需数据
    # 接件单号
    item['ord_cust_name'] = od_dict['customerName']
    item['ord_cust_tel'] = static_data['ord_cust_tel']
    addr_dict = parse_addr_jd(od_dict['serviceStreet'])  # 计算地址dict
    item['ord_cust_addr'] = addr_dict['addr_detail']
    item['ord_province'] = addr_dict['province']
    item['ord_city'] = addr_dict['city']
    item['ord_district'] = addr_dict['strict']
    item['ord_street'] = addr_dict['street']
    # 备注,对应于美的的服务请求描述
    item['ord_remark'] = ''
    # 用户报修故障
    item['ord_cust_fault'] = ''
    item['ord_num'] = create_sn()
    item['ord_pay_num'] = create_sn()
    item['ord_grab_addr'] = ''
    # 接件单号
    item['ord_accept_no'] = od_dict['orderId']
    # item['ord_ask_time'] =
    item['ord_create_time'] = current_timestamp()
    item['ord_buy_time'] = item['ord_create_time']
    lng_lat = get_latlng(
        addr_dict['city'],
        addr_dict['strict'] + addr_dict['street'] + addr_dict['addr_detail'])
    item['ord_cust_lng'] = lng_lat[0]
    item['ord_cust_lat'] = lng_lat[1]
    item['ord_weixin_num'] = ''
    # 商家id
    item['ord_merc_id'] = 1  # 兴科域
    # 购买单位,在后台表示信息来源
    item['ord_purchase_unit'] = u'京东'
    item['ord_status'] = 0  # 待发布
    item['ord_need_build'] = 2  # 不用建单
    # 业务类型
    if u'维修' in od_dict['serviceTypeName']:  # 根据实施业务类型字段判断业务类型
        item['ord_type'] = 5
    else:
        item['ord_type'] = 1
    ## 预约安装时间
    item['ord_ins_time'] = static_data['appoint_time']  # 和售后确认
    # 接件时间,接入时间
    item['ord_accept_time'] = time_to_timestamp3(
        static_data['ord_accept_time'])
    # 销售单位,购买渠道
    item['ord_sale_unit'] = u'京东'
    # 是否0元装
    if od_dict['freeinstall'] == 1:
        item['ord_free_ins'] = 1  # 免费
    elif od_dict['freeinstall'] == 2:
        item['ord_free_ins'] = 0  # 不免费
    # 购买渠道id
    item[
        'ord_purchase_unit_id'] = 0  # 和渠道表的是同一个值,在查到渠道id后更新,和ord_purchase_unit对应

    # dm_order之外所需数据
    product_name = od_dict['productName']
    p_num_regex = r")??.*?(?P<pi_num>[1-9](.[1-9])?)匹".decode('utf-8')
    model_regex = r"\((.*?)\)"
    # 商家名称
    item['shangjia'] = od_dict['outletsName']

    # 商家id
    item['merchant_id'] = merchant.platform_id
    # 购买渠道
    item['qudao'] = item['ord_sale_unit']

    # 匹数
    pi_result = re.search(p_num_regex, product_name)
    if pi_result:
        # item['pi_num'] = pi_result.group('pi_num') + 'P'   # 从产品名称中正则匹配匹数
        pass
    else:
        errorReport('regex pi_num fail', system_name='jd_parse_order')
    item['pi_num'] = pi_result.group('pi_num') + 'P'  # 从产品名称中正则匹配匹数

    # 产品型号
    model_result = re.search(model_regex, product_name)
    item['pro_model'] = model_result.group(1)  # 从产品名称中正则匹配型号

    ## 需要的数量
    item['pro_num'] = 1

    # 品牌名称
    point_index = od_dict['productBrandName'].index(u'(')
    item['brand'] = od_dict['productBrandName'][:point_index]

    # 默认电器id
    item['default_apl_id'] = 91  # 京东后台目前只有奥克斯的,渠道就是京东,商家兴科域

    return item
Example #15
0
        t.start()

    in_queue.join()

    rc = redis.Redis(host='r-wz9ba7101fdca794.redis.rds.aliyuncs.com',
                     port=6379,
                     password='******')
    # rc = redis.Redis(host='127.0.0.1')
    ps = rc.pubsub()
    # 订阅列表
    ps.subscribe(['auxbot', 'mdcode'])
    print('Listen start.')

    for item in ps.listen():
        if item['type'] == 'message':
            try:
                print(item['data'])
                save_cmd(item)
                in_queue.put(item['data'])
            except Exception as e:
                exc_type, exc_obj, exc_tb = sys.exc_info()
                fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
                msg = str(
                    exc_type
                ) + ":" + e.message + " in file '" + fname + "' line " + str(
                    exc_tb.tb_lineno)
                utils.errorReport(msg, "redis subpub")
    else:
        utils.errorReport("listen stop!(For loop quit.)")

    print('Listen stop.(Exception)')
Example #16
0
    def order_detail_parse(self, merchant):
        """在订单详情页提取订单详情数据"""
        # 从数据库获取账号信息
        # account_info = query_md_merchant(1)[0]       # 1是midea账号表中宏旺的id
        #
        # usename = account_info.account
        # pwd = account_info.password
        usename = merchant.account
        pwd = merchant.password
        # 登录获取订单
        cookies = login(usename, pwd)
        self.order_detail_parse_fortianmao(cookies)
        res_json = get_orders(cookies=cookies)  # 默认抓取已派工订单
        # print 'daijie_orders:%s'%res_json
        order_list = res_json['content']['rows']
        if order_list:
            for od in order_list:
                try:
                    if od['ORDER_ORIGIN'] != u'网点自建':  # 只有订单来源是非网点自建的才做同步
                        print '*' * 20 + od['SERVICE_ORDER_NO'] + '*' * 20

                        # r = receive_order(od['SERVICE_ORDER_ID'], od['UNIT_CODE'], cookies=cookies)  # 对待接单订单进行接单
                        # # r=True
                        # if r:
                        # 从dm_midea_factory_order查询工单号,如果查不到进行同步
                        rs = query_md_factory(od['SERVICE_ORDER_NO'])
                        print 'success query rs:%s' % od['SERVICE_ORDER_NO']
                        if not rs:
                            # 解析原始订单数据
                            meidi_detail_item = md_detail_parse(od, merchant)
                            print 'success parse order:%s' % od[
                                'SERVICE_ORDER_NO']
                            # 保存详情数据
                            order_id = self.md_db.save_order_detail(
                                meidi_detail_item)  # 保存订单详情
                            print('success save order_id:%s' % order_id)
                            # errorReport('success save order_detail:'+str(order_id))
                            # 保存原始工单和对应的二师兄平台的订单对应id
                            save_md_factory(od, int(order_id), usename)
                            print('success save md_factory:%s' %
                                  od['SERVICE_ORDER_NO'])
                            # errorReport('success save md_factory:'+od['SERVICE_ORDER_NO']+' '+time.asctime(time.localtime(time.time())))
                            print('*' * 20 + od['SERVICE_ORDER_NO'] + '*' * 20)
                            # 保存日志
                            api_logs = {
                                'client': 'media_save_orderdetail',
                                'order_source_data': od,
                                'order_parse_data': meidi_detail_item,
                                'order_id': order_id,
                                'time': time.time()
                            }
                            saveApiLogs(api_logs)
                            # print('success save apilogs:%s'%od['SERVICE_ORDER_NO'])
                            # 增加跟单记录
                            track_time = current_timestamp()
                            track_desc = u"系统在{}从美的同步了订单".format(
                                current_timestr())
                            orderTracking(order_id, 1, 'system', u'同步',
                                          track_desc, track_time)

                except Exception as e:
                    # import traceback
                    # traceback.print_exc()
                    errorReport('media crawl exception->' +
                                od['SERVICE_ORDER_NO'] + ':' + str(e) +
                                str(e.args) +
                                time.asctime(time.localtime(time.time())))

        # 保存美的师傅的数据
        shifu_data = get_engineers_data(cookies=cookies)
        if shifu_data:
            for shifu_data in shifu_data['content']['rows']:
                save_account(shifu_data, usename)  # 保存师傅数据
        self.log('finish save shifu_data')