class CompanyRegisitServiceAllContent(Base):
    __tablename__ = 'CompanyRegisitServiceAllContent'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    company_all_service_content = db.Column(db.String(255))
    grade = db.Column(db.Integer, default=0)
class CompanyRegisitKind(Base):
    __tablename__ = 'CompanyRegisitKind'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    company_all_kind = db.Column(db.String(255))
    grade = db.Column(db.Integer, default=0)
class CompanyProviderSonContent(Base):
    __tablename__ = 'CompanyProviderSonContent'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    provider_regisit_id = db.Column(
        db.String(255), ForeignKey("CompanyProviderInfo.main_id"))  # 服务商Id
    provider_son_service_content = db.Column(db.String(255))  # 服务商自定义内容
class CompanyProviderAllContent(Base):
    __tablename__ = 'CompanyRegisitProviderAllContent'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    provider_all_service_content = db.Column(db.String(255))  # 服务商服务内容
    grade = db.Column(db.Integer, default=0)
class CompanyProviderContent(Base):
    __tablename__ = 'CompanyProviderContent'  # 数据库名称
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    provider_regisit_id = db.Column(
        db.String(255), ForeignKey("CompanyProviderInfo.main_id"))  # 服务商id
    provider_regisit_info = db.Column(db.String(255))  # 服务商可注册内容
class CompanyRegisitSonLegalPerson(Base):
    __tablename__ = 'CompanyRegisitSonLegalPerson'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    company_regisit_id = db.Column(db.String(255),
                                   ForeignKey("CompanyRegisitInfo.main_id"))
    company_son_legal_name = db.Column(db.String(255))
class Marketing_Articles_Info(Base):
    __tablename__ = 'Marketing_Articles_Info'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    ma_update_time = db.Column(db.DateTime)  #文章更新时间
    ma_content = db.Column(db.Text)  #文章内容
    ma_img = db.Column(db.String(255))  # 文章首图
    ma_img_min = db.Column(db.String(255))  # 文章首图缩略图
    ma_title = db.Column(db.String(255))  # 文章标题
    ma_browser_count = db.Column(db.Integer, default=0)  # 用户浏览量
    ma_nice = db.Column(db.Integer)  #文章是否精品 1是 0否
    ma_original = db.Column(db.Integer)  #文章是否原创 1是 0否
    ma_article_top = db.Column(db.Integer)  #用户置顶等级
    ma_user_id = db.Column(db.String(255),
                           ForeignKey("user_and_oa.user_id"))  #作者Id (引用用户表信息)
    ma_article_good_count = db.Column(db.Integer, default=0)  #文章点赞量
    last_user_id = db.Column(db.String(255))  # 上次作品拥有者
    check_status = db.Column(db.Integer, default=0)  # 审核状态0 未审核, 1 审核
    source = db.Column(db.String(255))  # 来源
    random_read_count = db.Column(db.Integer,
                                  default=random.randint(101, 201))  # 随机阅读数量

    def to_json(self):
        json_data = {
            'main_id': self.main_id,
            'ma_update_time': str(self.ma_update_time),
            'ma_content': self.ma_content,
            'ma_img': self.ma_img,
            'ma_img_min': self.ma_img_min,
            'ma_title': self.ma_title,
            'ma_browser_count': self.ma_browser_count,
            'ma_article_top': self.ma_article_top,
            'ma_user_id': self.ma_user_id,
            'ma_original': self.ma_original,
            'ma_article_good_count': self.ma_article_good_count
        }
        return json_data

    @staticmethod
    def Write(mydirt):
        marketing_Articles_Info = Marketing_Articles_Info()
        marketing_Articles_Info.set_attrs(mydirt)
        db.session.add(marketing_Articles_Info)
        db.session.commit()

    @staticmethod
    def Read(main_id):
        marketing_Articles_Info = Marketing_Articles_Info.query.filter(
            Marketing_Articles_Info.main_id == main_id).first()
        return marketing_Articles_Info

    @staticmethod
    def Delete(marketing_Articles):
        db.session.delete(marketing_Articles)
        db.session.commit()

    @staticmethod
    def Update(marketing_Articles, mydirt):
        marketing_Articles.set_attrs(mydirt)
        db.session.commit()

    @staticmethod
    def ReadAll():
        marketing_Articles = Marketing_Article_Labels.query.all()
        return marketing_Articles

    @staticmethod
    def getMarketingAllData(user_id, search, putong_page, page_num, kind):
        allData = db.session.query(
            Marketing_Articles_Info.main_id,
            Marketing_Articles_Info.ma_update_time,
            Marketing_Articles_Info.ma_img, Marketing_Articles_Info.ma_img_min,
            Marketing_Articles_Info.ma_title,
            Marketing_Articles_Info.ma_browser_count,
            Marketing_Articles_Info.ma_article_top,
            Marketing_Articles_Info.ma_article_good_count,
            Marketing_Articles_Info.ma_nice,
            Marketing_Articles_Info.ma_original,
            Marketing_Articles_Info.check_status, UserAndOA.username,
            Marketing_Articles_Info.ma_user_id).filter(
                Marketing_Articles_Info.ma_user_id == UserAndOA.user_id,
                Marketing_Articles_Info.ma_nice == kind).filter(
                    or_(
                        Marketing_Articles_Info.ma_title.like(
                            '%{}%'.format(search)),
                        UserAndOA.username.like('%{}%'.format(search)))
                ).order_by(
                    Marketing_Articles_Info.ma_update_time.desc()).paginate(
                        putong_page, page_num, False).items

        putongInfo = []
        for item in allData:
            isgood = Marketing_and_GoodCnt.query.filter(
                Marketing_and_GoodCnt.mg_article_id == item.main_id,
                Marketing_and_GoodCnt.mg_user_Id == user_id).first()

            marketing_and_ArticleLabels = Marketing_and_ArticleLabel.query.filter(
                Marketing_and_ArticleLabel.mar_article_id ==
                item.main_id).all()
            labels = []
            for t in marketing_and_ArticleLabels:
                temp = Marketing_Article_Labels.query.filter(
                    Marketing_Article_Labels.main_id ==
                    t.mar_article_Label_Id).first()
                mydirt = temp.serialize
                mydirt['label'] = mydirt['mal_article_label_name']
                labels.append(mydirt)

            # 查找一篇文章的所有总板块
            marketing_and_AdvancedLabels = Marketing_and_AdvancedLabel.query.filter(
                Marketing_and_AdvancedLabel.mad_article_id ==
                item.main_id).all()
            for t in marketing_and_AdvancedLabels:
                temp = AdvancedLabel.query.filter(
                    AdvancedLabel.al_uid == t.mad_advanced_id).first()
                mydirt = temp.serialize
                mydirt['label'] = mydirt['al_label']
                labels.append(mydirt)

            Comment = Marketing_Comment_Info.ReadAll(item.main_id)
            GoodCnt = Marketing_and_GoodCnt.ReadAll(item.main_id)
            marketing_and_Collection = Marketing_and_Collection.query.filter(
                Marketing_and_Collection.mc_article_id == item.main_id,
                Marketing_and_Collection.mc_user_Id == user_id).first()
            data = {
                'main_id': item.main_id,
                'ma_update_time': str(item.ma_update_time),
                'ma_img': item.ma_img,
                'ma_img_min': item.ma_img_min,
                'ma_title': item.ma_title,
                'ma_browser_count': item.ma_browser_count,
                'ma_article_top': item.ma_article_top,
                'ma_article_good_count': len(GoodCnt),
                'username': item.username,
                'ma_nice': item.ma_nice,
                'ma_original': item.ma_original,
                'comment_cnt': len(Comment),
                'delete_status': 1 if item.ma_user_id == user_id else 0,
                'good': 1 if isgood else 0,
                'collection_status': 1 if marketing_and_Collection else 0,
                'labels': labels,
                'check_status': item.check_status
            }
            putongInfo.append(data)
        return putongInfo

    @staticmethod
    def getMarketingSonData(user_id, search, putong_page, page_num, kind,
                            label_id):
        allData = db.session.query(
            Marketing_Articles_Info.main_id,
            Marketing_Articles_Info.ma_update_time,
            Marketing_Articles_Info.ma_img, Marketing_Articles_Info.ma_img_min,
            Marketing_Articles_Info.ma_title,
            Marketing_Articles_Info.ma_browser_count,
            Marketing_Articles_Info.ma_article_top,
            Marketing_Articles_Info.ma_article_good_count,
            Marketing_Articles_Info.ma_nice,
            Marketing_Articles_Info.ma_original,
            Marketing_Articles_Info.check_status, UserAndOA.username,
            Marketing_Articles_Info.ma_user_id).filter(
                Marketing_Articles_Info.ma_user_id == UserAndOA.user_id,
                Marketing_Articles_Info.ma_nice == kind,
                Marketing_and_ArticleLabel.mar_article_id ==
                Marketing_Articles_Info.main_id,
                Marketing_and_ArticleLabel.mar_article_Label_Id ==
                label_id).filter(
                    or_(
                        Marketing_Articles_Info.ma_title.like(
                            '%{}%'.format(search)),
                        UserAndOA.username.like('%{}%'.format(search)))
                ).order_by(
                    Marketing_Articles_Info.ma_update_time.desc()).paginate(
                        putong_page, page_num, False).items

        putongInfo = []
        for item in allData:
            isgood = Marketing_and_GoodCnt.query.filter(
                Marketing_and_GoodCnt.mg_article_id == item.main_id,
                Marketing_and_GoodCnt.mg_user_Id == user_id).first()

            marketing_and_ArticleLabels = Marketing_and_ArticleLabel.query.filter(
                Marketing_and_ArticleLabel.mar_article_id ==
                item.main_id).all()
            labels = []
            for t in marketing_and_ArticleLabels:
                temp = Marketing_Article_Labels.query.filter(
                    Marketing_Article_Labels.main_id ==
                    t.mar_article_Label_Id).first()
                mydirt = temp.serialize
                mydirt['label'] = mydirt['mal_article_label_name']
                labels.append(mydirt)

            # 查找一篇文章的所有总板块
            marketing_and_AdvancedLabels = Marketing_and_AdvancedLabel.query.filter(
                Marketing_and_AdvancedLabel.mad_article_id ==
                item.main_id).all()
            for t in marketing_and_AdvancedLabels:
                temp = AdvancedLabel.query.filter(
                    AdvancedLabel.al_uid == t.mad_advanced_id).first()
                mydirt = temp.serialize
                mydirt['label'] = mydirt['al_label']
                labels.append(mydirt)

            Comment = Marketing_Comment_Info.ReadAll(item.main_id)
            GoodCnt = Marketing_and_GoodCnt.ReadAll(item.main_id)
            marketing_and_Collection = Marketing_and_Collection.query.filter(
                Marketing_and_Collection.mc_article_id == item.main_id,
                Marketing_and_Collection.mc_user_Id == user_id).first()
            data = {
                'main_id': item.main_id,
                'ma_update_time': str(item.ma_update_time),
                'ma_img': item.ma_img,
                'ma_img_min': item.ma_img_min,
                'ma_title': item.ma_title,
                'ma_browser_count': item.ma_browser_count,
                'ma_article_top': item.ma_article_top,
                'ma_article_good_count': len(GoodCnt),
                'username': item.username,
                'ma_nice': item.ma_nice,
                'ma_original': item.ma_original,
                'comment_cnt': len(Comment),
                'delete_status': 1 if item.ma_user_id == user_id else 0,
                'good': 1 if isgood else 0,
                'collection_status': 1 if marketing_and_Collection else 0,
                'labels': labels,
                'check_status': item.check_status
            }
            putongInfo.append(data)
        return putongInfo

    @staticmethod
    def getVideoAdvData(user_id, search, putong_page, page_num, kind,
                        label_id):
        allData = db.session.query(
            Marketing_Articles_Info.main_id,
            Marketing_Articles_Info.ma_update_time,
            Marketing_Articles_Info.ma_img, Marketing_Articles_Info.ma_img_min,
            Marketing_Articles_Info.ma_title,
            Marketing_Articles_Info.ma_browser_count,
            Marketing_Articles_Info.ma_article_top,
            Marketing_Articles_Info.ma_article_good_count,
            Marketing_Articles_Info.ma_nice,
            Marketing_Articles_Info.ma_original, UserAndOA.username,
            Marketing_Articles_Info.ma_user_id).filter(
                Marketing_Articles_Info.ma_user_id == UserAndOA.user_id,
                Marketing_Articles_Info.ma_nice == kind,
                Marketing_Articles_Info.main_id ==
                Marketing_and_AdvancedLabel.mad_article_id,
                Marketing_and_AdvancedLabel.mad_advanced_id ==
                label_id).filter(
                    or_(
                        Marketing_Articles_Info.ma_title.like(
                            '%{}%'.format(search)),
                        UserAndOA.username.like('%{}%'.format(search)))
                ).order_by(
                    Marketing_Articles_Info.ma_update_time.desc()).paginate(
                        putong_page, page_num, False).items

        putongInfo = []
        for item in allData:
            isgood = Marketing_and_GoodCnt.query.filter(
                Marketing_and_GoodCnt.mg_article_id == item.main_id,
                Marketing_and_GoodCnt.mg_user_Id == user_id).first()

            marketing_and_ArticleLabels = Marketing_and_ArticleLabel.query.filter(
                Marketing_and_ArticleLabel.mar_article_id ==
                item.main_id).all()
            labels = []
            for t in marketing_and_ArticleLabels:
                temp = Marketing_Article_Labels.query.filter(
                    Marketing_Article_Labels.main_id ==
                    t.mar_article_Label_Id).first()
                mydirt = temp.serialize
                mydirt['label'] = mydirt['mal_article_label_name']
                labels.append(mydirt)

            # 查找一篇文章的所有总板块
            marketing_and_AdvancedLabels = Marketing_and_AdvancedLabel.query.filter(
                Marketing_and_AdvancedLabel.mad_article_id ==
                item.main_id).all()
            for t in marketing_and_AdvancedLabels:
                temp = AdvancedLabel.query.filter(
                    AdvancedLabel.al_uid == t.mad_advanced_id).first()
                mydirt = temp.serialize
                mydirt['label'] = mydirt['al_label']
                labels.append(mydirt)

            Comment = Marketing_Comment_Info.ReadAll(item.main_id)
            GoodCnt = Marketing_and_GoodCnt.ReadAll(item.main_id)
            marketing_and_Collection = Marketing_and_Collection.query.filter(
                Marketing_and_Collection.mc_article_id == item.main_id,
                Marketing_and_Collection.mc_user_Id == user_id).first()
            data = {
                'main_id': item.main_id,
                'ma_update_time': str(item.ma_update_time),
                'ma_img': item.ma_img,
                'ma_img_min': item.ma_img_min,
                'ma_title': item.ma_title,
                'ma_browser_count': item.ma_browser_count,
                'ma_article_top': item.ma_article_top,
                'ma_article_good_count': len(GoodCnt),
                'username': item.username,
                'ma_nice': item.ma_nice,
                'ma_original': item.ma_original,
                'comment_cnt': len(Comment),
                'delete_status': 1 if item.ma_user_id == user_id else 0,
                'good': 1 if isgood else 0,
                'collection_status': 1 if marketing_and_Collection else 0,
                'labels': labels
            }
            putongInfo.append(data)
        return putongInfo