Exemplo n.º 1
0
    def update_channel_read(self):
        """
        更新通道为已读状态

        参数 channel_id --> channel 的本地ID
            msgSource --> 消息类型 可选参数(message_center/order_msg)
        :return:
        """
        channel_id = self.params.get("channel_id", "")
        msgSource = self.params.get("msgSource", "")

        with sessionCM() as session:
            channel = Channel.find_by_id(session, channel_id)

        if not channel:
            return {"status": 0, "data": "\"channel_id\"不存在!"}
        if msgSource not in ["message_center", "order_msg"]:
            return {"status": 0, "data": "\"msgSource\"参数的值不在合法值列表中"}

        message_handler = AliMessage(self.shop)

        result = message_handler.update_msg_read_status(channel.origin_id,
                                                        msg_source=msgSource)

        if result.get("isSuccess", ""):
            with sessionCM() as session:
                Channel.update(session, channel, {"read_stat", 1})
            return {"status": 1, "data": "状态更新成功!"}
        else:
            return {"status": 0, "data": "状态更新失败!"}
Exemplo n.º 2
0
    def update_channel_state(self):
        """
        更新 channel 的处理状态 (已处理、未处理)

        参数:channel_id --> channel 的本地Id
            state --> 状态 0表示未处理、 1表示已处理
        :return:
        """
        channel_id = self.params.get("channel_id", "")
        state = self.params.get("state", "")

        with sessionCM() as session:
            channel = Channel.find_by_id(session, channel_id)

        if not channel:
            return {"status": 0, "data": "\"channel id\"不存在!"}

        if state not in ["1", "0"]:
            return {"status": 0, "data": "\"state\"值只能是字符串0或1!"}

        message_handler = AliMessage(self.shop)

        result = message_handler.update_msg_process_status(
            channel.origin_id, state)

        if result.get("isSuccess", ""):
            with sessionCM() as session:
                Channel.update(session, channel, {"deal_stat", int(state)})
            return {"status": 1, "data": "状态更新成功!"}
        else:
            return {
                "status": 0,
                "data": "状态更新失败!",
                "errors": result.get("Errors", "")
            }
Exemplo n.º 3
0
    def update_channel_flag(self):
        """
        更新 channel 的标签

        参数:channel_id --> channel 的本地Id
             rank --> 标志 取值 rank0,rank1,rank2,rank3,rank4,rank5
                                (白,红,橙,绿,蓝,紫)
        :return:
        """
        channel_id = self.params.get("channel_id", "")
        rank = self.params.get("rank", "")

        with sessionCM() as session:
            channel = Channel.find_by_id(session, channel_id)

        if not channel:
            return {"status": 0, "data": "\"channel_id\"不存在!"}
        if rank not in ["rank0", "rank1", "rank2", "rank3", "rank4", "rank5"]:
            return {"status": 0, "data": "\"rank\"参数的值不在合法值列表中"}

        message_handler = AliMessage(self.shop)

        result = message_handler.update_msg_rank(channel.origin_id, rank=rank)

        if result.get("isSuccess", ""):
            with sessionCM() as session:
                Channel.update(session, channel, {"flag": rank})
            return {
                "status": 1,
                "data": "为channel %s 打上了 %s 标签!" % (str(channel_id), str(rank))
            }
        else:
            return {"status": 0, "data": "打标签失败"}
Exemplo n.º 4
0
    def update_channel_flag(self):
        """
        更新 channel 的标签

        参数:channel_id --> channel 的本地Id
             rank --> 标志 取值 rank0,rank1,rank2,rank3,rank4,rank5
                                (白,红,橙,绿,蓝,紫)
        :return:
        """
        channel_id = self.params.get("channel_id", "")
        rank = self.params.get("rank", "")

        with sessionCM() as session:
            channel = Channel.find_by_id(session, channel_id)

        if not channel:
            return {"status": 0, "data": "\"channel_id\"不存在!"}
        if rank not in ["rank0", "rank1", "rank2", "rank3", "rank4", "rank5"]:
            return {"status": 0, "data": "\"rank\"参数的值不在合法值列表中"}

        try:
            with sessionCM() as session:
                Channel.update(session, channel, {"flag": rank})
            return {
                "status": 1,
                "data": "为channel %s 打上了 %s 标签!" % (str(channel_id), str(rank))
            }
        except Exception, e:
            logger.error(traceback.format_exc(e))
            return {"status": 0, "data": "打标签失败"}
Exemplo n.º 5
0
    def update_channel_state(self):
        """
        更新 channel 的处理状态 (已处理、未处理)

        参数:channel_id --> channel 的本地Id
            state --> 状态 0表示未处理、 1表示已处理
        :return:
        """
        channel_id = self.params.get("channel_id", "")
        state = self.params.get("state", "")

        with sessionCM() as session:
            channel = Channel.find_by_id(session, channel_id)

        if not channel:
            return {"status": 0, "data": "\"channel id\"不存在!"}

        if state not in ["1", "0"]:
            return {"status": 0, "data": "\"state\"值只能是字符串0或1!"}

        try:
            with sessionCM() as session:
                Channel.update(session, channel, {"deal_stat", int(state)})
            return {"status": 1, "data": "状态更新成功!"}
        except Exception, e:
            logger.error(traceback.format_exc(e))
            return {"status": 0, "data": "状态更新失败!"}
Exemplo n.º 6
0
    def sync_message_list(self, msg_source, current_page=1, page_size=100):
        """
        同步订单留言
        :return:
        """
        with sessionCM() as session:
            while True:
                result = self.msg_handler.get_msg_relation_list(
                    msg_source, current_page, page_size)
                print type(result), len(result)
                print result
                if not result["success"]:
                    return  # result["exception"]
                current_page += 1
                for relation in result.get("result", []):
                    print relation
                    # 判断当前同步下来的Channel是否存在
                    chanel = Channel.find_by_origin_id(session,
                                                       relation["channelId"])
                    # 若和上次lastMessageId相同,就不用再获取详情
                    if chanel and relation["lastMessageId"] == chanel[
                            "last_msg_id"]:
                        continue
                    if len(str(relation["messageTime"])) == 13:
                        last_msg_date_timestamp = long(
                            str(relation["messageTime"])[:-3])
                    else:
                        last_msg_date_timestamp = relation["messageTime"]

                    # seller_id 只有在卖家发送一条消息之后从summary中获取到,relation["childId"] 只是子账号ID 并不是loginId
                    chanel = Channel.update(
                        session,
                        chanel,
                        shop_id=self.shop.id,
                        seller_id=relation["childId"],
                        seller_name=relation["childName"],
                        buyer_id=relation["otherLoginId"],
                        buyer_name=relation["otherName"],
                        read_stat=relation["readStat"],
                        deal_stat=relation["dealStat"],
                        open_date="",
                        close_date="",
                        closed_by="",
                        flag=relation["rank"],
                        origin_id=relation["channelId"],
                        msg_source=msg_source,
                        relation_type="",
                        relation_id="",
                        last_msg_id=relation["lastMessageId"],
                        last_msg_date=time.strftime(
                            "%Y-%m-%d %H:%M:%S",
                            time.localtime(last_msg_date_timestamp)),
                        last_msg_content=relation["lastMessageContent"])
                    # sync_smt_customer_detail.delay(self, chanel.id, msg_source)
                    print chanel.id, chanel.seller_id, chanel.seller_name, chanel.last_msg_content
                    yield chanel.id
                if len(result["result"]) == 0:
                    break
Exemplo n.º 7
0
 def sync_message_detail(self, channel_id, **kwargs):
     # 第三步获取Message的详细信息
     # 首先删除此管道中已经发送的消息, 查询参数:channel_id original_id=async
     message_ids = kwargs["message_ids"]
     result = self.msg_handler.get_my_messages("ReturnMessages", message_ids=message_ids)
     txt_pattern = re.compile('<div id="UserInputtedText">([\s\S]+?)</div>')
     pic_pattern = re.compile('<img id="previewimage\d+".+?src="(.+?)">')
     href_pattern = re.compile('(<a[^>]+?)>')
     with sessionCM() as session:
         channel = Channel.find_by_id(session, channel_id)
         # 清除‘异步消息’
         session.query(Message).filter(and_(Message.channel_id == channel.id, Message.origin_id == 'async')).delete()
         message_list = result["Messages"]["Message"]
         if not isinstance(message_list, list):
             message_list = [message_list]
         for message in message_list:
             # if Message.find_by_origin_id(session, message["MessageID"]):
             #     continue
             if message["Sender"] == "eBay":
                 href_rs = href_pattern.findall(message["Text"])
                 for href in href_rs:
                     message["Text"] = message["Text"].replace(href, href + ' target="_blank"')
                 print "创建 Ebay Message ..."
                 Message.create(
                     session, channel_id=channel_id, origin_id=message["MessageID"],
                     image_urls="", content=message["Text"], source="ebay", external_message_id="",
                     receive_time=message["ReceiveDate"].rsplit(".", 1)[0],
                 )
                 print "创建 Ebay Message 完成!"
             else:
                 txt_rs = txt_pattern.findall(message["Text"])
                 content = txt_rs[0] if txt_rs else ""
                 pic_rs = pic_pattern.findall(message["Text"])
                 print "创建普通消息 ..."
                 Message.create(
                     session, channel_id=channel_id, origin_id=message["MessageID"],
                     image_urls=";".join(pic_rs), content=content,
                     receive_time=message["ReceiveDate"].rsplit(".", 1)[0],
                     external_message_id=message.get("ExternalMessageID", ""),
                     source="seller" if message["Sender"] == channel.seller_id else "buyer"
                 )
                 print "创建普通消息完成!"
                 if message["MessageID"] == channel.last_msg_id:  # ??
                     Channel.update(session, channel, last_msg_content=content)
Exemplo n.º 8
0
 def _deal_with_result(datas):
     if isinstance(datas, dict):
         datas = [datas]
     print "处理Ticket ... "
     for ticket in datas:
         print ticket
         ticket = ticket["Ticket"]
         print shop_id
         kw = {
             "shop_id":
             shop_id,
             "seller_id":
             ticket["merchant_id"],
             "seller_name":
             "",
             "buyer_id":
             ticket["UserInfo"]["id"],
             "buyer_name":
             ticket["UserInfo"]["name"],
             "read_stat":
             "0",
             "deal_stat":
             0 if ticket["state_id"] == '4' else 1,
             "open_date":
             ticket["open_date"],
             "close_date":
             ticket.get("close-date", ""),
             "closed_by":
             "",
             "flag":
             "",
             "msg_source":
             "",
             "origin_id":
             ticket["id"],
             "relation_id":
             ticket["transaction_id"],
             "relation_type":
             "transaction",
             "last_msg_date":
             ticket["last_update_date"],
             "last_msg_id":
             "",
             "last_msg_content":
             ticket["subject"] + ";" + ticket["sublabel"]
         }
         with sessionCM() as session:
             channel = Channel.find_by_origin_id(session, ticket["id"])
             print "更新/生成Ticket ... "
             channel = Channel.update(session, channel, **kw)
             print "更新Replies ... "
             # 直接同步消息内容
             self.sync_message_detail(channel, ticket["replies"])
             print "更新Replies 完成!"
Exemplo n.º 9
0
    def update_channel_read(self):
        """
        更新通道为已读状态

        参数 channel_id --> channel 的本地ID
            msgSource --> 消息类型 可选参数(message_center/order_msg)
        :return:
        """
        channel_id = self.params.get("channel_id", "")

        with sessionCM() as session:
            channel = Channel.find_by_id(session, channel_id)

        if not channel:
            return {"status": 0, "data": "\"channel_id\"不存在!"}

        try:
            with sessionCM() as session:
                Channel.update(session, channel, {"read_stat", 1})
            return {"status": 1, "data": "状态更新成功!"}
        except Exception, e:
            logger.error(traceback.format_exc(e))
            return {"status": 0, "data": "状态更新失败!"}
Exemplo n.º 10
0
    def close_ticket(self):
        """
        关闭 ticket


        :return:
        """
        ticket_id = self.params.get("channel_id", "")
        if not ticket_id:
            return {"status": 0, "message": "缺少channel_id!"}
        handler = WishTicket(self.shop)
        with sessionCM() as session:
            ticket = Channel.find_by_id(session, ticket_id)
            if not ticket:
                return {"status": 0, "message": "无效的channel_id!"}

            result = handler.close_ticket_by_id(ticket["origin_id"])

            if result.get("success", ""):
                Channel.update(session, channel=ticket, closed_by="buyer")
                return {"status": 1, "message": "已关闭!"}
            else:
                return {"status": 0, "message": result.get("message", "关闭失败!")}
Exemplo n.º 11
0
    def _get_messages_in_folder(self, folder_id, start, end, current_page=1, page_size=200):
        seller_id = self.shop.owner
        with sessionCM() as session:
            message_dict = dict()
            while True:
                logger.info("eBay-%d:正在同步第%d页的MessageList" % (self.shop.id, current_page))
                print ("eBay-%d:正在同步第%d页的MessageList" % (self.shop.id, current_page))
                result = self.msg_handler.get_my_messages(
                    "ReturnHeaders", folder_id=folder_id, start_time=start, end_time=end,
                    current_page=current_page, page_size=page_size)
                print result
                if not result["Messages"]:
                    break
                message_list = result["Messages"]["Message"]
                if not isinstance(message_list, list):
                    message_list = [message_list]
                for header in message_list:
                    read_stat, deal_stat = True, True
                    if header["Sender"] == seller_id:
                        seller_name, buyer_id, buyer_name = seller_id, header["SendToName"], header["SendToName"]
                    else:
                        seller_name, buyer_id, buyer_name = seller_id, header["Sender"], header["Sender"]
                        read_stat = header["Read"] == "true"  # ??
                        deal_stat = header["Replied"] == "true"  # ??

                    channel = Channel.find_by_channel_composition(session, seller_id, buyer_id, header.get("ItemID", 0))
                    # header中包含来自eBay的消息,该消息不一定拥有ItemID字段,取默认值0
                    receive_date = datetime.datetime.strptime(
                        header["ReceiveDate"].rsplit(".", 1)[0], "%Y-%m-%dT%H:%M:%S")
                    if channel:
                        kwargs = dict()
                        if receive_date > channel.last_msg_date:
                            kwargs["last_msg_date"] = receive_date
                            kwargs["last_msg_id"] = header["MessageID"]
                        if receive_date < channel.open_date:
                            kwargs["open_date"] = receive_date
                        # 更新channel状态
                        # kwargs["read_stat"] = channel.read_stat and read_stat
                        # kwargs["deal_stat"] = channel.deal_stat and deal_stat
                        Channel.update(session, channel, **kwargs)
                    else:
                        channel = Channel.create(
                            session, shop_id=self.shop.id, seller_id=seller_id, seller_name=seller_name,
                            buyer_id=buyer_id, buyer_name=buyer_name, read_stat=read_stat,
                            deal_stat=deal_stat, flag="rank0" if header["Flagged"] == "true" else "",
                            msg_source="from ebay" if buyer_id == "eBay" else "from members",
                            relation_id=header.get("ItemID", 0), relation_type="product", origin_id=0,
                            open_date=receive_date, last_msg_date=receive_date, last_msg_id=header["MessageID"],
                            last_msg_content="同步中..."
                        )
                        product_url = "http://www.ebay.com/itm/%s" % header.get("ItemID", 0)
                    # if not channel:  # ???
                        Attachment.create(
                            session, channel_id=channel.id,
                            name=header.get("ItemTitle", ""), product_url=product_url,
                            product_id=header.get("ItemID", "0"), image_url="",
                            order_id="", order_url=""
                        )
                    if not message_dict.get(channel.id):
                        message_dict[channel.id] = list()
                    message_dict[channel.id].append(header["MessageID"])
                if len(message_list) < page_size:
                    break
                current_page += 1
        return message_dict
Exemplo n.º 12
0
 def sync_message_detail(self,
                         channel_id,
                         msg_source,
                         current_page=1,
                         page_size=100):
     """
     同步订单留言
     :return:
     """
     with sessionCM() as session:
         channel = Channel.find_by_id(session, channel_id)
         # if channel:
         #     print "通道id为%d, buyer_name: %s " % (channel.id, channel.buyer_name)
         additional_flag = False
         while True:
             print current_page
             result = self.msg_handler.get_msg_detail_list(
                 channel.origin_id, msg_source, current_page, page_size)
             print json.dumps(result, indent=2, encoding='utf8')
             # raw_input("enter ... ")
             if not result["success"]:
                 return result["exception"]
             current_page += 1
             for message in result.get("result", []):
                 old_msg = Message.find_by_origin_id(session, message["id"])
                 if old_msg:
                     continue
                 print "创建新消息..."
                 Message.create(
                     session,
                     channel_id=channel_id,
                     origin_id=message["id"],
                     content=message["content"],
                     image_urls=";".join(
                         [im["sPath"] for im in message["filePath"]]),
                     receive_time=time.strftime(
                         "%Y-%m-%d %H:%M:%S",
                         time.localtime(long(
                             str(message["gmtCreate"])[:-3]))),
                     source="seller" if message["summary"]["senderName"]
                     == channel.seller_name else "buyer",
                     external_message_id="")
                 print "创建消息完成 !"
                 if additional_flag:
                     continue
                 print "设置关联关系..."
                 if not channel.relation_type or not channel.relation_id:
                     print "更新通道..."
                     Channel.update(session,
                                    channel,
                                    shop_id=self.shop.id,
                                    relation_type=message["messageType"],
                                    relation_id=message["typeId"])
                     print "创建Attachment..."
                     Attachment.create(
                         session,
                         channel_id=channel_id,
                         name=message["summary"]["productName"],
                         image_url=message["summary"]["productImageUrl"],
                         product_url=message.get("productDetailUrl",
                                                 ""),  # ???
                         order_url=message["summary"]["orderUrl"],
                         product_id="",
                         order_id="")
                     channel.update(session, channel, **{})
                     additional_flag = True
                 print "设置关联完成..."
             if len(result["result"]) == 0:
                 break