package model

import (
	"database/sql"
	"database/sql/driver"
	"encoding/json"
	"log"
	"strings"
	"time"

	"github.com/pingcap/crm-bot/pkg/util"
)

type PingcapCrmActivity struct {
	ID              string `json:"记录ID" gorm:"primaryKey"`
	AssociateObject string `json:"关联业务对象"`
	AssociateData   string `json:"关联业务数据"`
	CreateTime      int64  `json:"创建时间"`
	RecordContent   string `json:"记录内容"`
	Type            string `json:"跟进类型"`
	Creator         string `json:"创建人"`
}

type PingcapCrmOrder struct {
	Aid                      JsonString  `json:"id" gorm:"column:id"`
	A销售订单编号                  JsonString  `json:"销售订单编号" gorm:"column:销售订单编号"`
	A优惠折扣off                 JsonFloat64 `json:"优惠折扣off" gorm:"column:优惠折扣off;type:double"`
	A签约日期                    JsonString  `json:"签约日期" gorm:"column:签约日期"`
	A待回款金额                   JsonFloat64 `json:"待回款金额" gorm:"column:待回款金额;type:double"`
	A收货人                     JsonString  `json:"收货人" gorm:"column:收货人"`
	A商机                      JsonString  `json:"商机" gorm:"column:商机"`
	A报价单                     JsonString  `json:"报价单" gorm:"column:报价单"`
	A已回款金额                   JsonFloat64 `json:"已回款金额" gorm:"column:已回款金额;type:double"`
	A价目表                     JsonString  `json:"价目表" gorm:"column:价目表"`
	A已开票金额                   JsonFloat64 `json:"已开票金额" gorm:"column:已开票金额;type:double"`
	A退货单金额                   JsonFloat64 `json:"退货单金额" gorm:"column:退货单金额;type:double"`
	A已退款金额                   JsonFloat64 `json:"已退款金额" gorm:"column:已退款金额;type:double"`
	A产品及人天总计                 JsonFloat64 `json:"产品及人天总计" gorm:"column:产品及人天总计;type:double"`
	A客户名称                    JsonString  `json:"客户名称" gorm:"column:客户名称"`
	A待开票金额                   JsonFloat64 `json:"待开票金额" gorm:"column:待开票金额;type:double"`
	A提成信息                    JsonString  `json:"提成信息" gorm:"column:提成信息"`
	A销售订单金额                  JsonFloat64 `json:"销售订单金额" gorm:"column:销售订单金额;type:double"`
	A电子签章附件                  JsonString  `json:"电子签章附件" gorm:"column:电子签章附件"`
	A已计划回款金额                 JsonFloat64 `json:"已计划回款金额" gorm:"column:已计划回款金额;type:double"`
	A服务结束日期_旧                JsonString  `json:"服务结束日期_旧" gorm:"column:服务结束日期_旧"`
	A备注                      JsonString  `json:"备注" gorm:"column:备注;type:text"`
	A合作伙伴                    JsonString  `json:"合作伙伴" gorm:"column:合作伙伴"`
	A产品类型                    JsonString  `json:"产品类型" gorm:"column:产品类型"`
	A合同类型                    JsonString  `json:"合同类型" gorm:"column:合同类型"`
	A项目名称_手填                 JsonString  `json:"项目名称_手填" gorm:"column:项目名称_手填"`
	A合作伙伴_签约方                JsonString  `json:"合作伙伴_签约方" gorm:"column:合作伙伴_签约方"`
	A签约日期_旧                  JsonString  `json:"签约日期_旧" gorm:"column:签约日期_旧"`
	A计价时长_年                  JsonFloat64 `json:"计价时长_年" gorm:"column:计价时长_年;type:double"`
	A续约时间                    JsonString  `json:"续约时间" gorm:"column:续约时间"`
	A合约财务条款                  JsonString  `json:"合约财务条款" gorm:"column:合约财务条款;type:text"`
	A关联PoC                   JsonString  `json:"关联PoC" gorm:"column:关联PoC"`
	A维保时长_年                  JsonFloat64 `json:"维保时长_年" gorm:"column:维保时长_年;type:double"`
	A维保折扣                    JsonFloat64 `json:"维保折扣" gorm:"column:维保折扣;type:double"`
	A维保费用_MA                 JsonFloat64 `json:"维保费用_MA" gorm:"column:维保费用_MA;type:double"`
	A产品合计_旧                  JsonFloat64 `json:"产品合计_旧" gorm:"column:产品合计_旧;type:double"`
	A人天服务金额                  JsonFloat64 `json:"人天服务金额" gorm:"column:人天服务金额;type:double"`
	A合同属性                    JsonString  `json:"合同属性" gorm:"column:合同属性"`
	A服务时长_月                  JsonFloat64 `json:"服务时长_月" gorm:"column:服务时长_月;type:double"`
	A税点                      JsonString  `json:"税点" gorm:"column:税点"`
	A开户银行                    JsonString  `json:"开户银行" gorm:"column:开户银行"`
	A一期款                     JsonString  `json:"一期款" gorm:"column:一期款;type:text"`
	A二期款                     JsonString  `json:"二期款" gorm:"column:二期款;type:text"`
	A三期款                     JsonString  `json:"三期款" gorm:"column:三期款;type:text"`
	A订单金额_大写                 JsonString  `json:"订单金额_大写" gorm:"column:订单金额_大写;type:varchar(192)"`
	A产品_人天                   JsonString  `json:"产品_人天" gorm:"column:产品_人天;type:varchar(192)"`
	A一期款_含税                  JsonFloat64 `json:"一期款_含税" gorm:"column:一期款_含税;type:double"`
	A二期款_含税                  JsonFloat64 `json:"二期款_含税" gorm:"column:二期款_含税;type:double"`
	A三期款_含税                  JsonFloat64 `json:"三期款_含税" gorm:"column:三期款_含税;type:double"`
	A主合同                     JsonString  `json:"主合同" gorm:"column:主合同"`
	A项目名称                    JsonString  `json:"项目名称" gorm:"column:项目名称"`
	A签约主体_作废                 JsonString  `json:"签约主体_作废" gorm:"column:签约主体_作废"`
	A产品版本                    JsonString  `json:"产品版本" gorm:"column:产品版本"`
	A签约主体                    JsonString  `json:"签约主体" gorm:"column:签约主体"`
	A币种                      JsonString  `json:"币种" gorm:"column:币种"`
	A已开票金额_新                 JsonString  `json:"已开票金额_新" gorm:"column:已开票金额_新;type:varchar(192)"`
	A待开票金额_新                 JsonString  `json:"待开票金额_新" gorm:"column:待开票金额_新;type:varchar(192)"`
	A合同归档状态                  JsonString  `json:"合同归档状态" gorm:"column:合同归档状态"`
	A合同归档日期                  JsonString  `json:"合同归档日期" gorm:"column:合同归档日期"`
	A产品合计                    JsonString  `json:"产品合计" gorm:"column:产品合计;type:varchar(192)"`
	A人天合计                    JsonString  `json:"人天合计" gorm:"column:人天合计;type:varchar(192)"`
	A服务开始日期_订阅维保             JsonString  `json:"服务开始日期_订阅维保" gorm:"column:服务开始日期_订阅维保"`
	A服务结束日期_订阅维保             JsonString  `json:"服务结束日期_订阅维保" gorm:"column:服务结束日期_订阅维保"`
	A国家                      JsonString  `json:"国家" gorm:"column:国家"`
	A服务时长_月_订阅维保             JsonString  `json:"服务时长_月_订阅维保" gorm:"column:服务时长_月_订阅维保;type:varchar(192)"`
	A服务线                     JsonString  `json:"服务线" gorm:"column:服务线"`
	A产品订阅金额                  JsonString  `json:"产品订阅金额" gorm:"column:产品订阅金额;type:varchar(192)"`
	A技术咨询服务金额                JsonString  `json:"技术咨询服务金额" gorm:"column:技术咨询服务金额;type:varchar(192)"`
	A维保服务金额                  JsonString  `json:"维保服务金额" gorm:"column:维保服务金额;type:varchar(192)"`
	A发货状态标记                  JsonString  `json:"发货状态标记" gorm:"column:发货状态标记"`
	A验收状态                    JsonString  `json:"验收状态" gorm:"column:验收状态"`
	A回款状态                    JsonString  `json:"回款状态" gorm:"column:回款状态;type:varchar(192)"`
	A开票状态                    JsonString  `json:"开票状态" gorm:"column:开票状态;type:varchar(192)"`
	A已服务人天数量                 JsonString  `json:"已服务人天数量" gorm:"column:已服务人天数量;type:varchar(192)"`
	A定制开发服务金额                JsonString  `json:"定制开发服务金额" gorm:"column:定制开发服务金额;type:varchar(192)"`
	A是否采用外采_外包               JsonString  `json:"是否采用外采_外包" gorm:"column:是否采用外采_外包"`
	A外采_外包成本                 JsonFloat64 `json:"外采_外包成本" gorm:"column:外采_外包成本;type:double"`
	A购买人天服务数量                JsonString  `json:"购买人天服务数量" gorm:"column:购买人天服务数量;type:varchar(192)"`
	A产品永久授权金额                JsonString  `json:"产品永久授权金额" gorm:"column:产品永久授权金额;type:varchar(192)"`
	A发行版支持订阅服务金额             JsonString  `json:"发行版支持订阅服务金额" gorm:"column:发行版支持订阅服务金额;type:varchar(192)"`
	A是否有下级代理商                JsonString  `json:"是否有下级代理商" gorm:"column:是否有下级代理商"`
	A分销商                     JsonString  `json:"分销商" gorm:"column:分销商"`
	A伙伴类型                    JsonString  `json:"伙伴类型" gorm:"column:伙伴类型;type:varchar(192)"`
	A是否总代理                   JsonString  `json:"是否总代理" gorm:"column:是否总代理;type:varchar(192)"`
	A是否能保存                   JsonString  `json:"是否能保存" gorm:"column:是否能保存"`
	A续约状态                    JsonString  `json:"续约状态" gorm:"column:续约状态"`
	A未续约原因                   JsonString  `json:"未续约原因" gorm:"column:未续约原因;type:text"`
	A终止续约原因                  JsonString  `json:"终止续约原因" gorm:"column:终止续约原因;type:text"`
	A销售类型                    JsonString  `json:"销售类型" gorm:"column:销售类型"`
	A服务时长_年_订阅维保             JsonString  `json:"服务时长_年_订阅维保" gorm:"column:服务时长_年_订阅维保;type:varchar(192)"`
	A服务时长_年_保留一位             JsonString  `json:"服务时长_年_保留一位" gorm:"column:服务时长_年_保留一位;type:varchar(192)"`
	A服务时长_年_整数               JsonString  `json:"服务时长_年_整数" gorm:"column:服务时长_年_整数;type:varchar(192)"`
	ACY年份                    JsonString  `json:"CY年份" gorm:"column:CY年份"`
	ACY季度                    JsonString  `json:"CY季度" gorm:"column:CY季度"`
	AFY季度                    JsonString  `json:"FY季度" gorm:"column:FY季度"`
	A预计续约时间_FY               JsonString  `json:"预计续约时间_FY" gorm:"column:预计续约时间_FY"`
	AFY年份                    JsonString  `json:"FY年份" gorm:"column:FY年份"`
	A关联原始订单编号                JsonString  `json:"关联原始订单编号" gorm:"column:关联原始订单编号"`
	Anew_acv_License_PS      JsonFloat64 `json:"new_acv_License_PS" gorm:"column:new_acv_License_PS;type:double"`
	Anew_arr_1yr             JsonFloat64 `json:"new_arr_1yr" gorm:"column:new_arr_1yr;type:double"`
	Anew_arr_multi_yr        JsonFloat64 `json:"new_arr_multi_yr" gorm:"column:new_arr_multi_yr;type:double"`
	Aexpansion_arr_1yr       JsonFloat64 `json:"expansion_arr_1yr" gorm:"column:expansion_arr_1yr;type:double"`
	Aexpansion_arr_multi_yr  JsonFloat64 `json:"expansion_arr_multi_yr" gorm:"column:expansion_arr_multi_yr;type:double"`
	Arenew_arr_1yr           JsonFloat64 `json:"renew_arr_1yr" gorm:"column:renew_arr_1yr;type:double"`
	Arenew_arr_multi_yr      JsonFloat64 `json:"renew_arr_multi_yr" gorm:"column:renew_arr_multi_yr;type:double"`
	A1st_outer_yr_arr        JsonFloat64 `json:"1st_outer_yr_arr" gorm:"column:1st_outer_yr_arr;type:double"`
	A2nd_outer_yr_arr        JsonFloat64 `json:"2nd_outer_yr_arr" gorm:"column:2nd_outer_yr_arr;type:double"`
	AACV                     JsonFloat64 `json:"ACV" gorm:"column:ACV;type:double"`
	AOuter_Years_CV          JsonFloat64 `json:"Outer_Years_CV" gorm:"column:Outer_Years_CV;type:double"`
	A续约金额_1年                 JsonFloat64 `json:"续约金额_1年" gorm:"column:续约金额_1年;type:double"`
	Anew_arr_subscription_ma JsonFloat64 `json:"new_arr_subscription_ma" gorm:"column:new_arr_subscription_ma;type:double"`
	Anew_acv                 JsonFloat64 `json:"new_acv" gorm:"column:new_acv;type:double"`
	Arenew_acv               JsonFloat64 `json:"renew_acv" gorm:"column:renew_acv;type:double"`
	AARR                     JsonFloat64 `json:"ARR" gorm:"column:ARR;type:double"`
	A盖章类型                    JsonString  `json:"盖章类型" gorm:"column:盖章类型"`
	A服务结束日期实时计算              JsonString  `json:"服务结束日期实时计算" gorm:"column:服务结束日期实时计算"`
	A服务结束日期_实时               JsonString  `json:"服务结束日期_实时" gorm:"column:服务结束日期_实时"`
	A是否按约准时开通服务              JsonString  `json:"是否按约准时开通服务" gorm:"column:是否按约准时开通服务"`
	A未准时开通原因                 JsonString  `json:"未准时开通原因" gorm:"column:未准时开通原因;type:text"`
	A实际服务开始日期                JsonString  `json:"实际服务开始日期" gorm:"column:实际服务开始日期"`
	A注册类型                    JsonString  `json:"注册类型" gorm:"column:注册类型"`
	A合作伙伴的合作模式               JsonString  `json:"合作伙伴的合作模式" gorm:"column:合作伙伴的合作模式"`
	AARR_财务                  JsonFloat64 `json:"ARR_财务" gorm:"column:ARR_财务;type:double"`
	AFY_服务开始_财年              JsonString  `json:"FY_服务开始_财年" gorm:"column:FY_服务开始_财年"`
	AMonth_服务开始_月            JsonString  `json:"Month_服务开始_月" gorm:"column:Month_服务开始_月;type:varchar(192)"`
	A距离服务结束期限                JsonString  `json:"距离服务结束期限" gorm:"column:距离服务结束期限;type:varchar(192)"`
	A发货状态                    JsonString  `json:"发货状态" gorm:"column:发货状态"`
	A状态_原                    JsonString  `json:"状态_原" gorm:"column:状态_原"`
	A锁定状态                    JsonString  `json:"锁定状态" gorm:"column:锁定状态"`
	A提交时间                    int64       `json:"提交时间" gorm:"column:提交时间"`
	A来源                      JsonString  `json:"来源" gorm:"column:来源"`
	A发货备注                    JsonString  `json:"发货备注" gorm:"column:发货备注"`
	A收货时间                    int64       `json:"收货时间" gorm:"column:收货时间"`
	A外部来源                    JsonString  `json:"外部来源" gorm:"column:外部来源"`
	A生命状态                    JsonString  `json:"生命状态" gorm:"column:生命状态"`
	A业务类型                    JsonString  `json:"业务类型" gorm:"column:业务类型"`
	A发货时间                    int64       `json:"发货时间" gorm:"column:发货时间"`
	A确认时间                    int64       `json:"确认时间" gorm:"column:确认时间"`
	A最后修改时间                  int64       `json:"最后修改时间" gorm:"column:最后修改时间"`
	A创建时间                    int64       `json:"创建时间" gorm:"column:创建时间"`
	A归属部门                    JsonString  `json:"归属部门" gorm:"column:归属部门"`
	A开票完成状态                  JsonString  `json:"开票完成状态" gorm:"column:开票完成状态"`
	A是否免责                    JsonString  `json:"是否免责" gorm:"column:是否免责"`
	A客户名称1                   JsonString  `json:"客户名称_新" gorm:"column:客户名称_新"`
	Aexpansion_acv           JsonFloat64 `json:"expansion_acv" gorm:"column:expansion_acv;type:double"`
	A负责人                     JsonString  `json:"负责人" gorm:"column:负责人"`
	A负责人主属部门                 JsonString  `json:"负责人主属部门" gorm:"column:负责人主属部门"`
	A经销商一级                   JsonString  `json:"经销商一级" gorm:"column:经销商一级"`
	A经销商二级                   JsonString  `json:"经销商二级" gorm:"column:经销商二级"`
	A是否标准Margin              JsonString  `json:"是否标准Margin" gorm:"column:是否标准Margin"`
	A是否业绩拆分                  JsonString  `json:"是否业绩拆分" gorm:"column:是否业绩拆分"`
	A业绩拆分归属人                 JsonString  `json:"业绩拆分归属人" gorm:"column:业绩拆分归属人"`
	A业绩拆分比例                  JsonString  `json:"业绩拆分比例" gorm:"column:业绩拆分比例"`
	Margin                   JsonString  `json:"Margin"`
}

func (PingcapCrmOrder) TableName() string {
	return "pingcap-crm-order"
}

type PingcapCrmPaymentPlan struct {
	A销售订单编号       JsonString  `json:"销售订单编号" gorm:"column:销售订单编号"`
	A实际回款金额元      JsonFloat64 `json:"实际回款金额元" gorm:"column:实际回款金额元"`
	A销售订单金额       JsonFloat64 `json:"销售订单金额" gorm:"column:销售订单金额"`
	A状态           JsonString  `json:"状态" gorm:"column:状态"`
	A计划回款方式       JsonString  `json:"计划回款方式" gorm:"column:计划回款方式"`
	A计划回款金额元      JsonFloat64 `json:"计划回款金额元" gorm:"column:计划回款金额元"`
	A客户名称         JsonString  `json:"客户名称" gorm:"column:客户名称"`
	A待回款金额        JsonString  `json:"待回款金额" gorm:"column:待回款金额"`
	A首次计划回款日期财年季度 JsonString  `json:"首次计划回款日期财年季度" gorm:"column:首次计划回款日期财年季度"`
	A最新计划回款日期财年季度 JsonString  `json:"最新计划回款日期财年季度" gorm:"column:最新计划回款日期财年季度"`
	A实际回款日期财年季度   JsonString  `json:"实际回款日期财年季度" gorm:"column:实际回款日期财年季度"`
	A最新计划回款日期     JsonDate    `json:"最新计划回款日期" gorm:"column:最新计划回款日期"`
	A首次计划回款日期     JsonDate    `json:"首次计划回款日期" gorm:"column:首次计划回款日期"`
	A实际回款日期       JsonDate    `json:"实际回款日期" gorm:"column:实际回款日期"`
	A签约日期         JsonDate    `json:"签约日期" gorm:"column:签约日期"`
	A计划回款占比       JsonString  `json:"计划回款占比" gorm:"column:计划回款占比"`
	A锁定状态         JsonString  `json:"锁定状态" gorm:"column:锁定状态"`
	A生命状态         JsonString  `json:"生命状态" gorm:"column:生命状态"`
	A负责人          JsonString  `json:"负责人" gorm:"column:负责人"`
	A负责人所在部门      JsonString  `json:"负责人所在部门" gorm:"column:负责人所在部门"`
	A业务类型         JsonString  `json:"业务类型" gorm:"column:业务类型"`
}

func (PingcapCrmPaymentPlan) TableName() string {
	return "pingcap-crm-paymentplan"
}

type PingcapCrmPayment struct {
	A回款核销编号  string     `json:"回款核销编号" gorm:"column:回款核销编号;primaryKey"`
	A核销日期    JsonString `json:"核销日期" gorm:"column:核销日期"`
	A财务确认时间  int64      `json:"财务确认时间" gorm:"column:财务确认时间"`
	A本次核销总金额 float64    `json:"本次核销总金额_元" gorm:"column:本次核销总金额_元"`
	A订单编号    JsonString `json:"订单编号" gorm:"column:订单编号"`
	A回款方式    JsonString `json:"回款方式" gorm:"column:回款方式"`
	A提醒日期    JsonString `json:"提醒日期" gorm:"column:提醒日期"`
	A客户名称    JsonString `json:"客户名称" gorm:"column:客户名称"`
	A关联开票    JsonString `json:"关联开票" gorm:"column:关联开票"`
	A币种      JsonString `json:"币种" gorm:"column:币种"`
	A回款编号    JsonString `json:"回款编号" gorm:"column:回款编号"`
	A回款币种    JsonString `json:"回款币种" gorm:"column:回款币种"`
	A回款金额    float64    `json:"回款金额" gorm:"column:回款金额"`
	A回款方式1   JsonString `json:"回款方式_财务" gorm:"column:回款方式_财务"`
	A回款日期    JsonString `json:"回款日期_财务" gorm:"column:回款日期_财务"`
	A关联开票1   JsonString `json:"关联开票_新" gorm:"column:关联开票_新"`
	A销售订单    JsonString `json:"销售订单" gorm:"column:销售订单"`
	A锁定状态    JsonString `json:"锁定状态" gorm:"column:锁定状态"`
	A状态      JsonString `json:"状态" gorm:"column:状态"`
	A回款提交时间  int64      `json:"回款提交时间" gorm:"column:回款提交时间"`
	A业务类型    JsonString `json:"业务类型" gorm:"column:业务类型;type:varchar(192)"`
	A创建时间    int64      `json:"创建时间" gorm:"column:创建时间"`
	A最后修改时间  int64      `json:"最后修改时间" gorm:"column:最后修改时间"`
	A客户名称1   JsonString `json:"客户名称_新" gorm:"column:客户名称_新"`
}

func (PingcapCrmPayment) TableName() string {
	return "pingcap-crm-payment"
}

type PingcapCrmOpportunity struct {
	Aid                      string      `json:"id" gorm:"column:id;primaryKey"`
	A客户名称                    JsonString  `json:"客户名称" gorm:"column:客户名称"`
	A产品合计                    float64     `json:"产品合计" gorm:"column:产品合计"`
	A主线索                     JsonString  `json:"主线索" gorm:"column:主线索"`
	A自评赢率                    float64     `json:"自评赢率" gorm:"column:自评赢率"`
	A整单折扣                    float64     `json:"整单折扣" gorm:"column:整单折扣"`
	A价目表                     JsonString  `json:"价目表" gorm:"column:价目表"`
	A销售流程                    JsonString  `json:"销售流程" gorm:"column:销售流程"`
	A阶段状态                    JsonString  `json:"阶段状态" gorm:"column:阶段状态"`
	A商机阶段                    JsonString  `json:"商机阶段" gorm:"column:商机阶段"`
	A预测金额                    float64     `json:"预测金额" gorm:"column:预测金额"`
	A输单原因                    JsonString  `json:"输单原因" gorm:"column:输单原因"`
	A主市场活动                   JsonString  `json:"主市场活动" gorm:"column:主市场活动"`
	A阶段变更时间                  int64       `json:"阶段变更时间" gorm:"column:阶段变更时间"`
	A商机金额                    float64     `json:"商机金额" gorm:"column:商机金额"`
	A需求背景                    JsonString  `json:"需求背景" gorm:"column:需求背景;type:text"`
	A测试计划                    JsonString  `json:"测试计划" gorm:"column:测试计划;type:text"`
	APK情况                    JsonString  `json:"PK情况" gorm:"column:PK情况;type:text"`
	A测试目标                    JsonString  `json:"测试目标" gorm:"column:测试目标;type:text"`
	A预算规划                    JsonString  `json:"预算规划" gorm:"column:预算规划;type:text"`
	A测试设备                    JsonString  `json:"测试设备" gorm:"column:测试设备;type:text"`
	A客户规划                    JsonString  `json:"客户规划" gorm:"column:客户规划;type:text"`
	A年度预算                    float64     `json:"年度预算" gorm:"column:年度预算"`
	A业务需求                    JsonString  `json:"业务需求" gorm:"column:业务需求;type:text"`
	A客户等级                    JsonString  `json:"客户等级" gorm:"column:客户等级"`
	A使用版本                    JsonString  `json:"使用版本" gorm:"column:使用版本"`
	A商机类型                    JsonString  `json:"商机类型" gorm:"column:商机类型"`
	A商机来源                    JsonString  `json:"商机来源" gorm:"column:商机来源"`
	A触发进入业务需求的关键条件和时间点       JsonString  `json:"触发进入业务需求的关键条件和时间点" gorm:"column:触发进入业务需求的关键条件和时间点;type:text"`
	A紧迫程度                    JsonString  `json:"紧迫程度" gorm:"column:紧迫程度;type:text"`
	A决策人物想法                  JsonString  `json:"决策人物想法" gorm:"column:决策人物想法;type:text"`
	A友商活动                    JsonString  `json:"友商活动" gorm:"column:友商活动;type:text"`
	A客户行业                    JsonString  `json:"客户行业" gorm:"column:客户行业"`
	A技术路线规划                  JsonString  `json:"技术路线规划" gorm:"column:技术路线规划;type:text"`
	A产品采购预算                  float64     `json:"产品采购预算" gorm:"column:产品采购预算"`
	A周边生态_开发商                JsonString  `json:"周边生态_开发商" gorm:"column:周边生态_开发商;type:text"`
	A时间规划                    JsonString  `json:"时间规划" gorm:"column:时间规划;type:text"`
	A客户关系                    JsonString  `json:"客户关系" gorm:"column:客户关系"`
	A是否参与测试方案设计              JsonString  `json:"是否参与测试方案设计" gorm:"column:是否参与测试方案设计"`
	A人员投入                    JsonString  `json:"人员投入" gorm:"column:人员投入;type:text"`
	A人员能力                    JsonString  `json:"人员能力" gorm:"column:人员能力"`
	APoC                     JsonString  `json:"PoC" gorm:"column:PoC"`
	A决策人态度                   JsonString  `json:"决策人态度" gorm:"column:决策人态度"`
	A汇报人态度                   JsonString  `json:"汇报人态度" gorm:"column:汇报人态度"`
	A决策链其他人态度                JsonString  `json:"决策链其他人态度" gorm:"column:决策链其他人态度;type:text"`
	A选择的起止时间点                JsonString  `json:"选择的起止时间点" gorm:"column:选择的起止时间点;type:text"`
	A采购的话语权                  JsonString  `json:"采购的话语权" gorm:"column:采购的话语权;type:text"`
	A采购的KPI目标                JsonString  `json:"采购的KPI目标" gorm:"column:采购的KPI目标;type:text"`
	A招标方式                    JsonString  `json:"招标方式" gorm:"column:招标方式"`
	A投标商的List清单              JsonString  `json:"投标商的List清单" gorm:"column:投标商的List清单;type:text"`
	A是否投标                    JsonString  `json:"是否投标" gorm:"column:是否投标"`
	A上传附件_采购                 JsonString  `json:"上传附件_采购" gorm:"column:上传附件_采购"`
	A现用数据库                   JsonString  `json:"现用数据库" gorm:"column:现用数据库"`
	A商机赢率                    JsonString  `json:"商机赢率" gorm:"column:商机赢率"`
	A硬件环境是否达标                JsonString  `json:"硬件环境是否达标" gorm:"column:硬件环境是否达标"`
	A是否同步关注竞品                JsonString  `json:"是否同步关注竞品" gorm:"column:是否同步关注竞品"`
	AChampion1               JsonString  `json:"Champion1" gorm:"column:Champion1"`
	ATechBuyer_TB1           JsonString  `json:"TechBuyer_TB1" gorm:"column:TechBuyer_TB1"`
	AEconomicsBuyer_EB1      JsonString  `json:"EconomicsBuyer_EB1" gorm:"column:EconomicsBuyer_EB1"`
	A产品价值是否匹配需求场景            JsonString  `json:"产品价值是否匹配需求场景" gorm:"column:产品价值是否匹配需求场景"`
	A竞争对手项目负责人               JsonString  `json:"竞争对手项目负责人" gorm:"column:竞争对手项目负责人"`
	A投产时间                    JsonString  `json:"投产时间" gorm:"column:投产时间"`
	A结单日期                    JsonString  `json:"结单日期" gorm:"column:结单日期"`
	AChampionQualified1      JsonString  `json:"ChampionQualified1" gorm:"column:ChampionQualified1;type:text"`
	ATB对产品价值认识_Confirmed     JsonString  `json:"TB对产品价值认识_Confirmed" gorm:"column:TB对产品价值认识_Confirmed;type:text"`
	A是否管理了客户的测试结果预期          JsonString  `json:"是否管理了客户的测试结果预期" gorm:"column:是否管理了客户的测试结果预期"`
	A采购方案可控                  JsonString  `json:"采购方案可控" gorm:"column:采购方案可控"`
	A我们的产品可否解决用户痛点           JsonString  `json:"我们的产品可否解决用户痛点" gorm:"column:我们的产品可否解决用户痛点"`
	AEB对合作价值认识_confirmed     JsonString  `json:"EB对合作价值认识_confirmed" gorm:"column:EB对合作价值认识_confirmed;type:text"`
	A应用开发商对产品价值的认识           JsonString  `json:"应用开发商对产品价值的认识" gorm:"column:应用开发商对产品价值的认识;type:text"`
	A备注_技术探索                 JsonString  `json:"备注_技术探索" gorm:"column:备注_技术探索;type:text"`
	A备注_需求立项                 JsonString  `json:"备注_需求立项" gorm:"column:备注_需求立项;type:text"`
	A备注_产品选择                 JsonString  `json:"备注_产品选择" gorm:"column:备注_产品选择;type:text"`
	A备注_谈判采购                 JsonString  `json:"备注_谈判采购" gorm:"column:备注_谈判采购;type:text"`
	AChampion二次Qualified     JsonString  `json:"Champion二次Qualified" gorm:"column:Champion二次Qualified"`
	ATB态度Qualified1          JsonString  `json:"TB态度Qualified1" gorm:"column:TB态度Qualified1;type:text"`
	AEB态度Qualified1          JsonString  `json:"EB态度Qualified1" gorm:"column:EB态度Qualified1;type:text"`
	A商业模式二次confirmed         JsonString  `json:"商业模式二次confirmed" gorm:"column:商业模式二次confirmed;type:text"`
	A友商项目负责人                 JsonString  `json:"友商项目负责人" gorm:"column:友商项目负责人"`
	A友商强弱点定位                 JsonString  `json:"友商强弱点定位" gorm:"column:友商强弱点定位"`
	AARR                     float64     `json:"ARR" gorm:"column:ARR"`
	A应用场景                    JsonString  `json:"应用场景" gorm:"column:应用场景"`
	A数据库痛点                   JsonString  `json:"数据库痛点" gorm:"column:数据库痛点"`
	A数据量                     JsonString  `json:"数据量" gorm:"column:数据量"`
	A年度IT投入                  JsonString  `json:"年度IT投入" gorm:"column:年度IT投入"`
	A同步关注竞品                  JsonString  `json:"同步关注竞品" gorm:"column:同步关注竞品"`
	A是否出海客户                  JsonString  `json:"是否出海客户" gorm:"column:是否出海客户"`
	A是否实体名单                  JsonString  `json:"是否实体名单" gorm:"column:是否实体名单"`
	A应用开发商                   JsonString  `json:"应用开发商" gorm:"column:应用开发商"`
	A商业模式confirmed           JsonString  `json:"商业模式confirmed" gorm:"column:商业模式confirmed"`
	AChampionqualified       JsonString  `json:"Championqualified" gorm:"column:Championqualified"`
	A测试场景是否可控                JsonString  `json:"测试场景是否可控" gorm:"column:测试场景是否可控"`
	A战略合作可能性                 JsonString  `json:"战略合作可能性" gorm:"column:战略合作可能性;type:text"`
	AChampiondoublequalified JsonString  `json:"Championdoublequalified" gorm:"column:Championdoublequalified"`
	ATB态度qualified           JsonString  `json:"TB态度qualified" gorm:"column:TB态度qualified"`
	AEB态度qualified           JsonString  `json:"EB态度qualified" gorm:"column:EB态度qualified"`
	A商业模式double_confirmed    JsonString  `json:"商业模式double_confirmed" gorm:"column:商业模式double_confirmed"`
	A采购方案是否可控                JsonString  `json:"采购方案是否可控" gorm:"column:采购方案是否可控"`
	A采购流程最坏结果预案可             JsonString  `json:"采购流程最坏结果预案可" gorm:"column:采购流程最坏结果预案可"`
	A合作伙伴的合作模式               JsonString  `json:"合作伙伴的合作模式" gorm:"column:合作伙伴的合作模式"`
	A商机编号                    JsonString  `json:"商机编号" gorm:"column:商机编号"`
	A目前业务问题                  JsonString  `json:"目前业务问题" gorm:"column:目前业务问题"`
	A已有上线TiDB的业务             JsonString  `json:"已有上线TiDB的业务" gorm:"column:已有上线TiDB的业务"`
	A计划上线的TiDB的业务            JsonString  `json:"计划上线的TiDB的业务" gorm:"column:计划上线的TiDB的业务"`
	A对NewSQL的认知和意愿           JsonString  `json:"对NewSQL的认知和意愿" gorm:"column:对NewSQL的认知和意愿"`
	A备注说明                    JsonString  `json:"备注说明" gorm:"column:备注说明;type:text"`
	A新增测试场景及数量               float64     `json:"新增测试场景及数量" gorm:"column:新增测试场景及数量"`
	A新增测试场景及数量备注             JsonString  `json:"新增测试场景及数量备注" gorm:"column:新增测试场景及数量备注;type:text"`
	ATiDB全新场景                JsonString  `json:"TiDB全新场景" gorm:"column:TiDB全新场景"`
	ATiDB全新场景的备注             JsonString  `json:"TiDB全新场景的备注" gorm:"column:TiDB全新场景的备注;type:text"`
	A产品技术风险等级                JsonString  `json:"产品技术风险等级" gorm:"column:产品技术风险等级"`
	A产品技术风险等级备注              JsonString  `json:"产品技术风险等级备注" gorm:"column:产品技术风险等级备注;type:text"`
	A用户人力投入等级                JsonString  `json:"用户人力投入等级" gorm:"column:用户人力投入等级"`
	A用户人力投入等级备注              JsonString  `json:"用户人力投入等级备注" gorm:"column:用户人力投入等级备注;type:text"`
	A用户方业务风险等级               JsonString  `json:"用户方业务风险等级" gorm:"column:用户方业务风险等级"`
	A用户方业务风险等级备注             JsonString  `json:"用户方业务风险等级备注" gorm:"column:用户方业务风险等级备注;type:text"`
	A贵司人力投入等级                JsonString  `json:"贵司人力投入等级" gorm:"column:贵司人力投入等级"`
	A贵司人力投入等级备注              JsonString  `json:"贵司人力投入等级备注" gorm:"column:贵司人力投入等级备注;type:text"`
	A上线场景及数量                 JsonString  `json:"上线场景及数量" gorm:"column:上线场景及数量"`
	A上线场景及数量备注               JsonString  `json:"上线场景及数量备注" gorm:"column:上线场景及数量备注;type:text"`
	ATiDB上线满意度               JsonString  `json:"TiDB上线满意度" gorm:"column:TiDB上线满意度"`
	ATiDB上线满意度备注             JsonString  `json:"TiDB上线满意度备注" gorm:"column:TiDB上线满意度备注;type:text"`
	A关系型数据库占比                float64     `json:"关系型数据库占比" gorm:"column:关系型数据库占比"`
	A关系型数据库占比备注              JsonString  `json:"关系型数据库占比备注" gorm:"column:关系型数据库占比备注;type:text"`
	APU参与度                   JsonString  `json:"PU参与度" gorm:"column:PU参与度"`
	APU参与度备注                 JsonString  `json:"PU参与度备注" gorm:"column:PU参与度备注;type:text"`
	A社区活动参与度                 JsonString  `json:"社区活动参与度" gorm:"column:社区活动参与度"`
	A社区活动参与度备注               JsonString  `json:"社区活动参与度备注" gorm:"column:社区活动参与度备注;type:text"`
	A开发贡献参与度                 JsonString  `json:"开发贡献参与度" gorm:"column:开发贡献参与度"`
	A开发贡献参与度备注               JsonString  `json:"开发贡献参与度备注" gorm:"column:开发贡献参与度备注;type:text"`
	A核心场景                    float64     `json:"核心场景" gorm:"column:核心场景"`
	A核心场景备注                  JsonString  `json:"核心场景备注" gorm:"column:核心场景备注;type:text"`
	A合作时长                    JsonString  `json:"合作时长" gorm:"column:合作时长"`
	A合作资源投入                  JsonString  `json:"合作资源投入" gorm:"column:合作资源投入"`
	A转商业商机原因                 JsonString  `json:"转商业商机原因" gorm:"column:转商业商机原因;type:text"`
	A预计付费内容                  JsonString  `json:"预计付费内容" gorm:"column:预计付费内容;type:text"`
	A预计付费时间                  JsonString  `json:"预计付费时间" gorm:"column:预计付费时间"`
	A预计付费金额                  float64     `json:"预计付费金额" gorm:"column:预计付费金额"`
	A优先级                     JsonString  `json:"优先级" gorm:"column:优先级"`
	A测试方案                    JsonString  `json:"测试方案" gorm:"column:测试方案;type:text"`
	A优势场景                    JsonString  `json:"优势场景" gorm:"column:优势场景;type:text"`
	A计划开始时间                  JsonString  `json:"计划开始时间" gorm:"column:计划开始时间"`
	A计划结束时间                  JsonString  `json:"计划结束时间" gorm:"column:计划结束时间"`
	A人力安排                    JsonString  `json:"人力安排" gorm:"column:人力安排;type:text"`
	A状态                      JsonString  `json:"状态" gorm:"column:状态"`
	A线下评审结果                  JsonString  `json:"线下评审结果" gorm:"column:线下评审结果"`
	A未通过原因                   JsonString  `json:"未通过原因" gorm:"column:未通过原因;type:text"`
	A形成选型内部讨论                JsonString  `json:"形成选型内部讨论" gorm:"column:形成选型内部讨论"`
	A立项批复                    JsonString  `json:"立项批复" gorm:"column:立项批复"`
	A中标结果                    JsonString  `json:"中标结果" gorm:"column:中标结果"`
	A转换阶段                    JsonString  `json:"转换阶段" gorm:"column:转换阶段"`
	A高层沟通                    JsonString  `json:"高层沟通" gorm:"column:高层沟通"`
	A核心场景推进                  JsonString  `json:"核心场景推进" gorm:"column:核心场景推进"`
	A推进计划备注                  JsonString  `json:"推进计划备注" gorm:"column:推进计划备注"`
	A核心场景推进备注                JsonString  `json:"核心场景推进备注" gorm:"column:核心场景推进备注;type:text"`
	A现有数据库及使用情况              JsonString  `json:"现有数据库及使用情况" gorm:"column:现有数据库及使用情况"`
	A商机编号标识                  JsonString  `json:"商机编号标识" gorm:"column:商机编号标识"`
	A活动名称                    JsonString  `json:"活动名称" gorm:"column:活动名称"`
	A商机产品                    JsonString  `json:"商机产品" gorm:"column:商机产品"`
	A注册类型                    JsonString  `json:"注册类型" gorm:"column:注册类型"`
	A取消原因                    JsonString  `json:"取消原因" gorm:"column:取消原因;type:text"`
	A是否是制胜应用场景               JsonString  `json:"是否是制胜应用场景" gorm:"column:是否是制胜应用场景"`
	A最后跟进时间                  int64       `json:"最后跟进时间" gorm:"column:最后跟进时间"`
	A锁定状态                    JsonString  `json:"锁定状态" gorm:"column:锁定状态"`
	A生命状态                    JsonString  `json:"生命状态" gorm:"column:生命状态"`
	A业务类型                    JsonString  `json:"业务类型" gorm:"column:业务类型"`
	A创建时间                    int64       `json:"创建时间" gorm:"column:创建时间"`
	A最后修改时间                  int64       `json:"最后修改时间" gorm:"column:最后修改时间"`
	A预计成交日期                  JsonString  `json:"预计成交日期" gorm:"column:预计成交日期"`
	A商机名称                    JsonString  `json:"商机名称" gorm:"column:商机名称"`
	A负责人                     JsonString  `json:"负责人" gorm:"column:负责人"`
	A负责人主属部门                 JsonString  `json:"负责人主属部门" gorm:"column:负责人主属部门"`
	A客户业务场景                  JsonString  `json:"客户业务场景" gorm:"column:客户业务场景"`
	A应用软件供应商                 JsonString  `json:"应用软件供应商" gorm:"column:应用软件供应商"`
	A总代理                     JsonString  `json:"总代理" gorm:"column:总代理"`
	A经销商                     JsonString  `json:"经销商" gorm:"column:经销商"`
	A售前负责人                   JsonString  `json:"售前负责人" gorm:"column:售前负责人"`
	A客户拟采购的产品服务年限            JsonString  `json:"客户拟采购的产品服务年限" gorm:"column:客户拟采购的产品服务年限"`
	A预测类型                    JsonString  `json:"预测类型" gorm:"column:预测类型"`
	AStatus                  JsonString  `json:"Status" gorm:"column:Status"`
	A风险等级评估                  JsonString  `json:"风险等级评估" gorm:"column:风险等级评估"`
	A预计成交季度                  JsonString  `json:"预计成交季度" gorm:"column:预计成交季度"`
	A预计成交季度周                 JsonString  `json:"预计成交季度周" gorm:"column:预计成交季度周"`
	A产品订阅金额                  JsonFloat64 `json:"产品订阅金额" gorm:"column:产品订阅金额"`
	A人天服务金额                  JsonFloat64 `json:"人天服务金额" gorm:"column:人天服务金额"`
	A报备商机编号                  JsonString  `json:"报备商机编号 " gorm:"column:报备商机编号"`
	A合作伙伴报备                  JsonString  `json:"合作伙伴报备" gorm:"column:合作伙伴报备"`
	A合作伙伴报备商机负责人             JsonString  `json:"合作伙伴报备商机负责人" gorm:"column:合作伙伴报备商机负责人"`
	ACashin季度                JsonString  `json:"Cashin季度" gorm:"column:Cashin季度"`
	ACashin金额                JsonFloat64 `json:"Cashin金额" gorm:"column:Cashin金额"`
	ALicense金额               JsonFloat64 `json:"License金额" gorm:"column:License金额"`
	AMA金额                    JsonFloat64 `json:"MA金额" gorm:"column:MA金额"`
	A预估ACV                   JsonFloat64 `json:"预估ACV" gorm:"column:预估ACV"`
	APM负责人                   JsonString  `json:"PM负责人" gorm:"column:PM负责人"`
	A商机类型新                   JsonString  `json:"商机类型新" gorm:"column:商机类型新"`
	A预估TCV                   JsonFloat64 `json:"预估TCV" gorm:"column:预估TCV"`
}

func (PingcapCrmOpportunity) TableName() string {
	return "pingcap-crm-business-opportunity"
}

type PingcapCrmRevrec struct {
	Id          string  `json:"编号" gorm:"primaryKey;column:编号"`
	OrderId     string  `json:"订单编号" gorm:"column:订单编号"`
	IncomeYear  int64   `json:"收入确认-年" gorm:"column:收入确认-年"`
	IncomeMonth int64   `json:"收入确认-月" gorm:"column:收入确认-月"`
	Amount      float64 `json:"收入确认金额(不含税)" gorm:"column:收入确认金额(不含税)"`
	LifeStatus  string  `json:"生命状态" gorm:"column:生命状态"`
	Confirm     string  `json:"是否已经确认，进行封账" gorm:"column:是否已经确认，进行封账"`
	Currency    string  `json:"收入币种" gorm:"column:收入币种"`
	AccountName string  `json:"客户名称" gorm:"column:客户名称"`
	AccountId   string  `json:"客户Id" gorm:"column:客户Id"`
}

type CRMAccount struct {
	CustomerId              string `gorm:"primaryKey" json:"客户编号"`
	Name                    string `json:"客户名称"`
	Alias                   string `json:"客户别名"`
	Level                   string `json:"客户等级"`
	Industry                string `json:"客户行业"`
	Type                    string `json:"客户分类"`
	Region                  string `json:"所属大区"`
	CreateTime              string `json:"创建时间"`
	UpdateTime              string `json:"最后修改时间"`
	AccountID               string `json:"客户ID"`
	Segmentation            string `json:"Segmentation"`
	TenantCreatedTime       string `json:"TenantCreatedTime"`
	TenantStatus            string `json:"TenantStatus"`
	TiDBCloudPortalID       string `json:"TiDBCloudPortalID"`
	FY22IB                  string `json:"FY22IB" gorm:"column:fy22ib"`
	CloudProductionCustomer string `json:"CloudProductionCustomer"`
	InternalUser            string `json:"InternalUser" gorm:"default:false"`
	ISDMU                   string `json:"是否为DMU"`
	DMU                     string `json:"DMU"`
	PM                      string `json:"PM负责人"`
}

type PingcapSalesforcePoc struct {
	PoCNumber                      string `json:"PoCNumber" gorm:"primaryKey"`
	ApprovalStatus                 string `json:"ApprovalStatus"`
	PoCStatus                      string `json:"PoCStatus"`
	Region                         string `json:"Region"`
	Account                        string `json:"Account"`
	Opportunity                    string `json:"Opportunity"`
	InternalUser                   string `json:"Internal User"`
	RecordType                     string `json:"Record Type"`
	CreateDate                     string `json:"CreateDate"`
	TiDBCloudAccountIDtorunThisPoC string `json:"TiDBCloudAccountIDtorunThisPoC" gorm:"column:tidb_cloud_accountid_to_runthispoc"`
}

type PingcapCrmCurrencyRate struct {
	Currency string `gorm:"primaryKey"`
	Rate     float64
}

type PingcapSalesforceOpportunityFieldHistory struct {
	Id            string       `gorm:"primaryKey" json:Id"`
	NewValue      interface{}  `json:"NewValue" gorm:"type:varchar(255)"`
	OldValue      interface{}  `json:"OldValue" gorm:"type:varchar(255)"`
	CreatedDate   JsonDateTime `gorm:"type:datetime" json:"CreatedDate"`
	OpportunityId string       `json:"OpportunityId"`
	CreatedById   string       `json:"CreatedById"`
	IsDeleted     bool         `json:"IsDeleted"`
	Field         string       `json:"Field"`
}

func (PingcapSalesforceOpportunityFieldHistory) TableName() string {
	return "pingcap-salesforce-oppofieldhistory"
}

type PingcapSalesforceCollection struct {
	Id          string  `json:"Collection Number" gorm:"primaryKey"`
	AccountId   string  `json:"Account ID"`
	Date        string  `json:"Collections Date"`
	Amount      float64 `json:"Collections Amount"`
	Currency    string  `json:"Currency"`
	OrderNumber string  `json:"Order Number"`
	Status      string  `json:"Collections Status"`
	AccountName string  `json:"AccountName"`
}

type PingcapSalesforceTask struct {
	Id          string `json:"Id" gorm:"primaryKey;column:Id"`
	Subject     string `json:"Subject" `
	Comments    string `json:"Comments"`
	CreatedDate string `json:"CreatedDate"`
	RelatedTo   string `json:"RelatedTo"`
	CreatedBy   string `json:"CreatedBy"`
}

type PingcapSalesforceRevrec struct {
	RevRecNumber string  `json:"RevRecNumber" gorm:"primaryKey"`
	OrderNumber  string  `json:"OrderNumber"`
	AmountUSD    float64 `json:"AmountUSD"`
	Date         string  `json:"Date"`
	FiscalPeriod string  `json:"FiscalPeriod"`
	Order        string  `json:"Order"`
	Product      string  `json:"Product"`
	Status       string  `json:"Status"`
	AccountName  string  `json:"AccountName"`
	AccountId    string  `json:"AccountId"`
}

type PingcapSalesforceLead struct {
	Id                         string       `gorm:"primaryKey;column:Id"`
	Country                    string       `gorm:"type:varchar(255);column:Country"`
	CreatedBy                  string       `gorm:"type:varchar(255);column:CreatedBy"`
	InternalUser               string       `gorm:"type:varchar(255);column:InternalUser"`
	LastModifiedBy             string       `gorm:"type:varchar(255);column:LastModifiedBy"`
	LastTransferDate           JsonDate     `gorm:"type:date;column:LastTransferDate"`
	LeadCurrency               string       `gorm:"type:varchar(255);column:LeadCurrency"`
	LeadLifecycleStage         string       `gorm:"type:varchar(255);column:LeadLifecycleStage"`
	LeadOwner                  string       `gorm:"type:varchar(255);column:LeadOwner"`
	LeadSource                 string       `gorm:"type:varchar(255);column:LeadSource"`
	LeadStatus                 string       `gorm:"type:varchar(255);column:LeadStatus"`
	Region                     string       `gorm:"type:varchar(255);column:Region"`
	RegistrationStatus         string       `gorm:"type:varchar(255);column:RegistrationStatus"`
	Segmentation               string       `gorm:"type:varchar(255);column:Segmentation"`
	TenantStatus               string       `gorm:"type:varchar(255);column:TenantStatus"`
	TimeZone                   string       `gorm:"type:varchar(255);column:TimeZone"`
	TiDBCloudPortalID          string       `gorm:"type:varchar(255);column:TiDBCloudPortalID"`
	TenantCreatedTime          JsonDateTime `gorm:"type:date;column:TenantCreatedTime"`
	CreatedDate                JsonDateTime `gorm:"type:date;column:CreatedDate"`
	PersonLifecycleStage       string       `gorm:"type:varchar(255);column:PersonLifecycleStage"`
	PersonStatus               string       `gorm:"type:varchar(255);column:PersonStatus"`
	SuspectStageDate           JsonDateTime `gorm:"type:date;column:SuspectStageDate"`
	LeadStageDate              JsonDateTime `gorm:"type:date;column:LeadStageDate"`
	MqlStageDate               JsonDateTime `gorm:"type:date;column:MQLStageDate"`
	SalStageDate               JsonDateTime `gorm:"type:date;column:SALStageDate"`
	SqlStageDate               JsonDateTime `gorm:"type:date;column:SQLStageDate"`
	CloudRegistrationSource    string       `gorm:"type:varchar(255);column:CloudRegistrationSource"`
	OriginalUtmSource          string       `gorm:"type:varchar(255);column:OriginalUtmSource"`
	OriginalUtmMedium          string       `gorm:"type:varchar(255);column:OriginalUtmMedium"`
	OriginalUtmCampaign        string       `gorm:"type:varchar(255);column:OriginalUtmCampaign"`
	OriginalPersonSource       string       `gorm:"type:varchar(255);column:OriginalPersonSource"`
	OriginalPersonSourceDetail string       `gorm:"type:varchar(255);column:OriginalPersonSourceDetail"`
	ConnectionType             string       `gorm:"type:varchar(255);column:ConnectionType"`
	UtmCampaign                string       `gorm:"type:varchar(255);column:UtmCampaign"`
	WebsiteReferrerUrl         string       `gorm:"type:varchar(255);column:WebsiteReferrerUrl"`
}

func (PingcapSalesforceLead) TableName() string {
	return "pingcap-salesforce-lead"
}

type PingcapSalesforceOrder struct {
	Id                     string       `gorm:"primaryKey;column:Id"`
	AccountCountryCode     string       `gorm:"type:varchar(255);column:AccountCountryCode"`
	AccountID              string       `gorm:"type:varchar(255);column:AccountID"`
	AccountNumber          string       `gorm:"type:varchar(255);column:AccountNumber"`
	ActivatedBy            string       `gorm:"type:varchar(255);column:ActivatedBy"`
	ActivatedDate          JsonDateTime `gorm:"type:datetime;column:ActivatedDate"`
	ACVAmount              float64      `gorm:"column:ACVAmount"`
	ApplicableLaw          string       `gorm:"type:varchar(255);column:ApplicableLaw"`
	Archived               string       `gorm:"type:varchar(255);column:Archived"`
	ArchivedOrderForm      string       `gorm:"type:varchar(255);column:ArchivedOrderForm"`
	CashCollected          float64      `gorm:"column:CashCollected"`
	CashUncollected        float64      `gorm:"column:CashUncollected"`
	ContractAutoNumber     string       `gorm:"type:varchar(255);column:ContractAutoNumber"`
	ContractExpirationDate JsonDate     `gorm:"type:date;column:ContractExpirationDate"`
	ContractNumber         string       `gorm:"type:varchar(255);column:ContractNumber"`
	CreatedBy              string       `gorm:"type:varchar(255);column:CreatedBy"`
	DeferredRevenue        float64      `gorm:"column:DeferredRevenue"`
	DMOwner                string       `gorm:"type:varchar(255);column:DMOwner"`
	GrossMargin            float64      `gorm:"column:GrossMargin"`
	LastModifiedBy         string       `gorm:"type:varchar(255);column:LastModifiedBy"`
	MonthlyCost            float64      `gorm:"column:MonthlyCost"`
	NetFees                float64      `gorm:"column:NetFees"`
	NonStandardOrderForm   string       `gorm:"type:varchar(255);column:Non_StandardOrderForm"`
	NonStd_OF_Typ          string       `gorm:"type:varchar(255);column:Non_Std_OF_Type"`
	NonStandardUploadUrl   string       `gorm:"type:varchar(255);column:NonStandardUploadUrl"`
	Opportunity            string       `gorm:"type:varchar(255);column:Opportunity"`
	OrderAmount            float64      `gorm:"column:OrderAmount"`
	OrderCurrency          string       `gorm:"type:varchar(255);column:OrderCurrency"`
	OrderEndDate           JsonDate     `gorm:"type:date;column:OrderEndDate"`
	OrderEndDate1          JsonDate     `gorm:"type:date;column:OrderEndDate1"`
	OrderNumberName        string       `gorm:"type:varchar(255);column:OrderNumberName"`
	OrderNumber            string       `gorm:"type:varchar(255);column:OrderNumber"`
	OrderNumberC           string       `gorm:"type:varchar(255);column:OrderNumberC"`
	OrderOwner             string       `gorm:"type:varchar(255);column:OrderOwner"`
	OrderRecordType        string       `gorm:"type:varchar(255);column:OrderRecordType"`
	OrderReferenceNumber   string       `gorm:"type:varchar(255);column:OrderReferenceNumber"`
	OrderStartDate         JsonDate     `gorm:"type:date;column:OrderStartDate"`
	OrderType              string       `gorm:"type:varchar(255);column:OrderType"`
	OriginalOrder          string       `gorm:"type:varchar(255);column:OriginalOrder"`
	PaymentFrequency       string       `gorm:"type:varchar(255);column:PaymentFrequency"`
	PaymentTerm            string       `gorm:"type:varchar(255);column:PaymentTerm"`
	PODate                 JsonDate     `gorm:"type:date;column:PODate"`
	PriceBook              string       `gorm:"type:varchar(255);column:PriceBook"`
	ProductFamily          string       `gorm:"type:varchar(255);column:ProductFamily"`
	Quote                  string       `gorm:"type:varchar(255);column:Quote"`
	RecognizedRevenue      float64      `gorm:"column:RecognizedRevenue"`
	ReductionOrder         string       `gorm:"type:varchar(255);column:ReductionOrder"`
	Status                 string       `gorm:"type:varchar(255);column:Status"`
	Tax                    float64      `gorm:"column:Tax"`
	TCVAmount              float64      `gorm:"column:TCVAmount"`
	TotalFees              float64      `gorm:"column:TotalFees"`
	Region                 string       `gorm:"type:varchar(255);column:Region"`
	AccountName            string       `gorm:"type:varchar(255);column:AccountName"`
}

func (PingcapSalesforceOrder) TableName() string {
	return "pingcap-salesforce-order"
}

type InterfaceData struct {
	NullInterface interface{}
}

func (n InterfaceData) Value() (driver.Value, error) {
	return n.NullInterface, nil
}

func (ct *InterfaceData) UnmarshalJSON(b []byte) (err error) {
	s := strings.Trim(string(b), "\"")
	if s == "null" {
		return
	}
	err = json.Unmarshal(util.StringToByteSlice(s), ct.NullInterface)
	log.Println(ct.NullInterface)
	return
}

type JsonDateTime struct {
	NullTime sql.NullTime
}

func (n JsonDateTime) Value() (driver.Value, error) {
	if !n.NullTime.Valid {
		return nil, nil
	}
	return n.NullTime.Time, nil
}

func (ct *JsonDateTime) UnmarshalJSON(b []byte) (err error) {
	s := strings.Trim(string(b), "\"")
	if s == "null" {
		return
	}

	tmpTime, err := time.Parse("2006-01-02T15:04:05.000-0700", s)
	ct.NullTime.Scan(tmpTime)
	return
}

type JsonFloat64 struct {
	NullFloat64 sql.NullFloat64
}

func (n JsonFloat64) Value() (driver.Value, error) {
	if !n.NullFloat64.Valid {
		return nil, nil
	}
	return n.NullFloat64.Float64, nil
}

func (ct *JsonFloat64) MarshalJSON() ([]byte, error) {
	if ct.NullFloat64.Valid {
		return json.Marshal(ct.NullFloat64.Float64)
	} else {
		return json.Marshal(nil)
	}
}

func (ct *JsonFloat64) UnmarshalJSON(b []byte) (err error) {
	s := strings.Trim(string(b), "\"")
	if s == "null" {
		return
	}

	ct.NullFloat64.Scan(s)
	return
}

type JsonString struct {
	NullString sql.NullString
}

func (n JsonString) Value() (driver.Value, error) {
	if !n.NullString.Valid {
		return nil, nil
	}
	return n.NullString.String, nil
}

func (ct *JsonString) MarshalJSON() ([]byte, error) {
	if ct.NullString.Valid {
		return json.Marshal(ct.NullString.String)
	} else {
		return json.Marshal(nil)
	}
}

func (ct *JsonString) UnmarshalJSON(b []byte) (err error) {
	//var s *string
	//if err := json.Unmarshal(b, &s); err != nil {
	//	return err
	//}
	//if s != nil {
	//	ct.NullString.Valid = true
	//	ct.NullString.String = *s
	//}
	//return nil

	s := strings.Trim(string(b), "\"")
	if s == "null" {
		return
	}

	ct.NullString.Scan(s)
	return
}

type JsonDate struct {
	NullTime sql.NullTime
}

func (n JsonDate) Value() (driver.Value, error) {
	if !n.NullTime.Valid {
		return nil, nil
	}
	return n.NullTime.Time, nil
}

func (ct *JsonDate) UnmarshalJSON(b []byte) (err error) {
	s := strings.Trim(string(b), "\"")
	if s == "null" {
		return
	}

	tmpTime, err := time.Parse("2006-01-02", s[:10])
	ct.NullTime.Scan(tmpTime)
	return
}

type PingcapSalesforceOpportunity struct {
	Id                       string       `gorm:"primaryKey;column:Id"`
	ACVAmount                float64      `gorm:"column:ACVAmount"`
	AllowClose               string       `gorm:"type:varchar(255);column:AllowClose"`
	CloseDate                JsonDate     `gorm:"type:date;column:CloseDate"`
	Contract                 string       `gorm:"type:varchar(255);column:Contract"`
	ContractArchivedDate     JsonDate     `gorm:"type:date;column:ContractArchivedDate"`
	CreatedBy                string       `gorm:"type:varchar(255);column:CreatedBy"`
	DiscoveryCompleted       string       `gorm:"type:varchar(255);column:DiscoveryCompleted"`
	ExchangeRate             float64      `gorm:"column:ExchangeRate"`
	ExpectedRevenue          float64      `gorm:"column:ExpectedRevenue"`
	FiscalPeriod             string       `gorm:"type:varchar(255);column:FiscalPeriod"`
	ForecastCategory         string       `gorm:"type:varchar(255);column:ForecastCategory"`
	LastModifiedBy           string       `gorm:"type:varchar(255);column:LastModifiedBy"`
	LeadSource               string       `gorm:"type:varchar(255);column:LeadSource"`
	LighthouseLogo           string       `gorm:"type:varchar(255);column:LighthouseLogo"`
	LossReason               string       `gorm:"type:varchar(255);column:LossReason"`
	NetFees                  float64      `gorm:"column:NetFees"`
	OpportunityCurrency      string       `gorm:"type:varchar(255);column:OpportunityCurrency"`
	OpportunityNumber        string       `gorm:"type:varchar(255);column:OpportunityNumber"`
	OpportunityOwner         string       `gorm:"type:varchar(255);column:OpportunityOwner"`
	OpportunityScore         string       `gorm:"type:varchar(255);column:OpportunityScore"`
	OrderArchivedDate        JsonDate     `gorm:"type:date;column:OrderArchivedDate"`
	OriginalOrder            string       `gorm:"type:varchar(255);column:OriginalOrder"`
	PriceBook                string       `gorm:"type:varchar(255);column:PriceBook"`
	PrimaryCampaignSource    string       `gorm:"type:varchar(255);column:PrimaryCampaignSource"`
	Private                  string       `gorm:"type:varchar(255);column:Private"`
	Probability              float64      `gorm:"column:Probability"`
	ProductFamily            string       `gorm:"type:varchar(255);column:ProductFamily"`
	Quantity                 float64      `gorm:"column:Quantity"`
	TotalOpportunityQuantity float64      `gorm:"column:TotalOpportunityQuantity"`
	Region                   string       `gorm:"type:varchar(255);column:Region"`
	ROIAnalysisCompleted     string       `gorm:"type:varchar(255);column:ROIAnalysisCompleted"`
	Stage                    string       `gorm:"type:varchar(255);column:Stage"`
	SyncedQuote              string       `gorm:"type:varchar(255);column:SyncedQuote"`
	TechnicalScenario        string       `gorm:"type:varchar(255);column:TechnicalScenario"`
	AccountId                string       `gorm:"type:varchar(255);column:AccountId"`
	AccountNumber            string       `gorm:"type:varchar(255);column:AccountNumber"`
	OpportunityName          string       `gorm:"type:varchar(255);column:OpportunityName"`
	OpportunityRecordType    string       `gorm:"type:varchar(255);column:OpportunityRecordType"`
	CreatedDate              JsonDateTime `gorm:"type:date;column:CreatedDate"`
	CloudOrderType           string       `gorm:"type:varchar(255);column:CloudOrderType"`
	AccountID                string       `json:"AccountID" gorm:"-"`
}

func (PingcapSalesforceOpportunity) TableName() string {
	return "pingcap-salesforce-opportunity"
}

type TenantWideTable struct {
	TiDBCloudPortalID string    `gorm:"primaryKey;column:tidb_cloud_portal_id" json:"TiDBCloudPortalID"`
	TenantCreatedTime time.Time `gorm:"type:datetime;"`
	TenantStatus      string
	Region            string
	AccountName       string
	AccountAlias      string
	LeadStatus        string `gorm:"default:Qualified"`

	TenantName                string
	TenantAlias               string
	Timezone                  int
	Status                    string
	Plan                      string
	Discount                  int
	DiscountDescription       string
	Country                   string
	HasDiscount               bool
	CreatedAt                 time.Time `gorm:"type:datetime;"`
	Kind                      string
	ThirdPartyAccountProvider string
	ThirdPartyAccountCode     string
}

func (awt *TenantWideTable) TableName() string {
	return "pingcap_crm_widetable_by_tenant"
}

type AccountWideTable struct {
	AccountId   string `gorm:"primaryKey"`
	DataSource  string `gorm:"type:varchar(255)"`
	AccountName string `gorm:"type:varchar(255)"`
	Region      string `gorm:"type:varchar(255)"`

	OpportunityId            string `gorm:"primaryKey;type:varchar(100);not null;default:''"`
	OpportunityName          string `gorm:"type:varchar(255)"`
	OpportunityNumber        string `gorm:"type:varchar(255)"`
	OpportunityProbability   string `gorm:"type:varchar(255)"`
	OpportunityACVAmount     float64
	OpportunityRecordType    string    `gorm:"type:varchar(255)"`
	OpportunityStage         string    `gorm:"type:varchar(255)"`
	OpportunityProductFamily string    `gorm:"type:varchar(255)"`
	OpportunityCloseDate     time.Time `gorm:"type:datetime;"`

	OrderId             string `gorm:"primaryKey;type:varchar(100);not null;default:''"`
	OrderProductFamily  string `gorm:"type:varchar(255)"`
	OrderContractStatus string `gorm:"type:varchar(255)"`
	OrderRenewStatus    string `gorm:"type:varchar(255)"`
	OrderRecordType     string `gorm:"type:varchar(255)"`
	OrderAcvAmount      float64
	OrderNewAcv         float64
	OrderRenewAcv       float64
	OrderExpansionAcv   float64
	OrderTcvAmount      float64
	OrderRenewDate      string    `gorm:"type:varchar(255)"`
	OrderStatus         string    `gorm:"type:varchar(255)"`
	OrderStartDate      time.Time `gorm:"type:datetime;"`
	OrderEndDate        time.Time `gorm:"type:datetime;"`
	OrderCloseDate      time.Time `gorm:"type:datetime;"`
	OrderMonthlyCost    string    `gorm:"type:varchar(255)"`
	OrderNetFees        string    `gorm:"type:varchar(255)"`
	OrderGrossMargin    string    `gorm:"type:varchar(255)"`

	RecrevId         string    `gorm:"primaryKey;type:varchar(100);not null;default:''"`
	RecrevDate       time.Time `gorm:"type:datetime;"`
	RecrevLifestatus string    `gorm:"type:varchar(255)"`
	RecrevStatus     string    `gorm:"type:varchar(255)"`
	RecrevAmount     float64   `gorm:"not null;default:0"`

	CollectionId     string    `gorm:"primaryKey;type:varchar(100);not null;default:''"`
	CollectionDate   time.Time `gorm:"type:datetime;"`
	CollectionStatus string    `gorm:"type:varchar(255)"`
	CollectionAmount float64   `gorm:"not null;default:0"`
}

func (awt *AccountWideTable) TableName() string {
	return "pingcap_crm_widetable_by_account"
}

type DatabaseCfg struct {
	Database string `yaml:"database"`
	URL      string `yaml:"url"`
}

type WidetableCfg struct {
	Name string `yaml:"name"`
	Path string `yaml:"path"`
}

type CloudTenant struct {
	ID                        string `json:"id" gorm:"primaryKey"`
	Name                      string `json:"name"`
	Alias                     string `json:"alias"`
	Timezone                  int    `json:"timezone"`
	Email                     string `json:"email"`
	Status                    string `json:"status"`
	Plan                      string `json:"plan"`
	Discount                  int    `json:"discount"`
	DiscountDescription       string `json:"discount_description"`
	Country                   string `json:"country"`
	HasDiscount               bool   `json:"has_discount"`
	CreatedAt                 int    `json:"created_at"`
	Kind                      string `json:"kind"`
	AccountManager            string `json:"account_manager"`
	ThirdPartyAccountProvider string `json:"third_party_account_provider"`
	ThirdPartyAccountCode     string `json:"third_party_account_code"`
}

type RespCloudTenant struct {
	Total int           `json:"total"`
	Items []CloudTenant `json:"items"`
}

type RespCloudTenantCluster struct {
	Total int                  `json:"total"`
	Items []CloudTenantCluster `json:"items"`
}

type CloudTenantCluster struct {
	TenantId    string                                  `json:"tenant_id" gorm:"primaryKey"`
	ID          string                                  `json:"id" gorm:"primaryKey"`
	Name        string                                  `json:"name"`
	Provider    string                                  `json:"provider"`
	Region      string                                  `json:"region"`
	Profile     string                                  `json:"profile"`
	Version     string                                  `json:"version"`
	CreateTime  int64                                   `json:"create_time"`
	Status      string                                  `json:"status"`
	ProjectID   string                                  `json:"project_id"`
	ProjectName string                                  `json:"project_name"`
	IsDevTier   bool                                    `json:"is_dev_tier"`
	Components  *map[string]CloudTenantClusterComponent `json:"tenant_components" gorm:"-:all"`
}

type CloudTenantNodeProfile struct {
	Compute struct {
		CPU      int `json:"cpu"`
		MemoryMi int `json:"memory_mi"`
	} `json:"compute"`
	StorageGi     int    `json:"storage_gi"`
	NodeProfileID string `json:"node_profile_id"`
	Name          string `json:"name"`
}

func (profile *CloudTenantNodeProfile) Json2String() (string, error) {
	bs, err := json.Marshal(profile)
	return util.ByteSliceToString(bs), err
}

type CloudTenantClusterComponent struct {
	ClusterId     string                 `json:"cluster_id" gorm:"primaryKey"`
	ComponentName string                 `json:"component_name" gorm:"primaryKey"`
	Replicas      int                    `json:"replicas"`
	NodeInfo      string                 `json:"-"`
	NodeProfile   CloudTenantNodeProfile `json:"node_profile" gorm:"-:all"`
	MachineType   string                 `json:"machineType"`
}
