| | |
| | | "model.ServiceFollowup": { |
| | | "type": "object", |
| | | "properties": { |
| | | "Member": { |
| | | "$ref": "#/definitions/model.User" |
| | | }, |
| | | "client": { |
| | | "$ref": "#/definitions/model.Client" |
| | | }, |
| | |
| | | "id": { |
| | | "type": "integer" |
| | | }, |
| | | "isVisit": { |
| | | "$ref": "#/definitions/model.IsVisit" |
| | | }, |
| | | "isVisitId": { |
| | | "type": "integer" |
| | | }, |
| | |
| | | }, |
| | | "number": { |
| | | "type": "string" |
| | | }, |
| | | "oldMember": { |
| | | "$ref": "#/definitions/model.User" |
| | | }, |
| | | "oldMemberId": { |
| | | "type": "integer" |
| | |
| | | "remark": { |
| | | "type": "string" |
| | | }, |
| | | "satisfaction": { |
| | | "$ref": "#/definitions/model.Satisfaction" |
| | | }, |
| | | "satisfactionId": { |
| | | "type": "integer" |
| | | }, |
| | |
| | | "serviceOrder": { |
| | | "$ref": "#/definitions/model.ServiceOrder" |
| | | }, |
| | | "solveRate": { |
| | | "$ref": "#/definitions/model.SolveRate" |
| | | }, |
| | | "solveRateId": { |
| | | "type": "integer" |
| | | }, |
| | | "timelyRate": { |
| | | "$ref": "#/definitions/model.TimelyRate" |
| | | }, |
| | | "timelyRateId": { |
| | | "type": "integer" |
| | | } |
| | |
| | | "model.ServiceFollowup": { |
| | | "type": "object", |
| | | "properties": { |
| | | "Member": { |
| | | "$ref": "#/definitions/model.User" |
| | | }, |
| | | "client": { |
| | | "$ref": "#/definitions/model.Client" |
| | | }, |
| | |
| | | "id": { |
| | | "type": "integer" |
| | | }, |
| | | "isVisit": { |
| | | "$ref": "#/definitions/model.IsVisit" |
| | | }, |
| | | "isVisitId": { |
| | | "type": "integer" |
| | | }, |
| | |
| | | }, |
| | | "number": { |
| | | "type": "string" |
| | | }, |
| | | "oldMember": { |
| | | "$ref": "#/definitions/model.User" |
| | | }, |
| | | "oldMemberId": { |
| | | "type": "integer" |
| | |
| | | "remark": { |
| | | "type": "string" |
| | | }, |
| | | "satisfaction": { |
| | | "$ref": "#/definitions/model.Satisfaction" |
| | | }, |
| | | "satisfactionId": { |
| | | "type": "integer" |
| | | }, |
| | |
| | | "serviceOrder": { |
| | | "$ref": "#/definitions/model.ServiceOrder" |
| | | }, |
| | | "solveRate": { |
| | | "$ref": "#/definitions/model.SolveRate" |
| | | }, |
| | | "solveRateId": { |
| | | "type": "integer" |
| | | }, |
| | | "timelyRate": { |
| | | "$ref": "#/definitions/model.TimelyRate" |
| | | }, |
| | | "timelyRateId": { |
| | | "type": "integer" |
| | | } |
| | |
| | | type: object |
| | | model.ServiceFollowup: |
| | | properties: |
| | | Member: |
| | | $ref: '#/definitions/model.User' |
| | | client: |
| | | $ref: '#/definitions/model.Client' |
| | | clientId: |
| | |
| | | type: string |
| | | id: |
| | | type: integer |
| | | isVisit: |
| | | $ref: '#/definitions/model.IsVisit' |
| | | isVisitId: |
| | | type: integer |
| | | memberId: |
| | | type: integer |
| | | number: |
| | | type: string |
| | | oldMember: |
| | | $ref: '#/definitions/model.User' |
| | | oldMemberId: |
| | | type: integer |
| | | planId: |
| | | type: integer |
| | | remark: |
| | | type: string |
| | | satisfaction: |
| | | $ref: '#/definitions/model.Satisfaction' |
| | | satisfactionId: |
| | | type: integer |
| | | serviceId: |
| | | type: integer |
| | | serviceOrder: |
| | | $ref: '#/definitions/model.ServiceOrder' |
| | | solveRate: |
| | | $ref: '#/definitions/model.SolveRate' |
| | | solveRateId: |
| | | type: integer |
| | | timelyRate: |
| | | $ref: '#/definitions/model.TimelyRate' |
| | | timelyRateId: |
| | | type: integer |
| | | type: object |
| | |
| | | package model
|
| | |
|
| | | import (
|
| | | "aps_crm/conf"
|
| | | "aps_crm/pkg/logx"
|
| | | "aps_crm/pkg/mysqlx"
|
| | | "aps_crm/pkg/safe"
|
| | | "gorm.io/gorm/schema"
|
| | | )
|
| | |
|
| | | func Init() error {
|
| | | if err := mysqlx.Init(&conf.Conf.Mysql, logx.GetLogger()); err != nil {
|
| | | return err
|
| | | }
|
| | |
|
| | | if err := RegisterTables(); err != nil {
|
| | | return err
|
| | | }
|
| | | safe.Go(func() {
|
| | | InsertDefaultData()
|
| | | })
|
| | | return nil
|
| | | }
|
| | |
|
| | | func RegisterTables() error {
|
| | | db := mysqlx.GetDB()
|
| | | err := db.AutoMigrate(
|
| | | User{},
|
| | | Menu{},
|
| | | JwtBlacklist{},
|
| | | Country{},
|
| | | Province{},
|
| | | City{},
|
| | | Client{},
|
| | | ClientLevel{},
|
| | | ClientOrigin{},
|
| | | ClientStatus{},
|
| | | ClientType{},
|
| | | Contact{},
|
| | | EnterpriseNature{},
|
| | | EnterpriseScale{},
|
| | | FollowRecord{},
|
| | | Industry{},
|
| | | RegisteredCapital{},
|
| | | SaleChance{},
|
| | | SalesLeads{},
|
| | | SalesSources{},
|
| | | SaleStage{},
|
| | | SaleType{},
|
| | | RegularCustomers{},
|
| | | Possibility{},
|
| | | Status{},
|
| | | Quotation{},
|
| | | MasterOrder{},
|
| | | SubOrder{},
|
| | | Product{},
|
| | | SalesDetails{},
|
| | | SalesReturn{},
|
| | | SalesRefund{},
|
| | | Contract{},
|
| | | Plan{},
|
| | | ServiceContract{},
|
| | | OrderManage{},
|
| | | ServiceFollowup{},
|
| | | CustomerServiceSheet{},
|
| | | ServiceFeeManage{},
|
| | | Authority{},
|
| | | Api{},
|
| | | Department{},
|
| | | Satisfaction{},
|
| | | TimelyRate{},
|
| | | SolveRate{},
|
| | | IsVisit{},
|
| | | IsVisit{},
|
| | | ReportSource{},
|
| | | OrderType{},
|
| | | ServiceContractStatus{},
|
| | | ServiceContractType{},
|
| | | RefundMethod{},
|
| | | IsInvoice{},
|
| | | AccountId{},
|
| | | SalesReturnStatus{},
|
| | | Repository{},
|
| | | QuotationStatus{},
|
| | | Currency{},
|
| | | )
|
| | | return err
|
| | | }
|
| | |
|
| | | type InitDefaultData interface {
|
| | | InitDefaultData() error
|
| | | }
|
| | |
|
| | | func InsertDefaultData() {
|
| | | models := []interface{}{
|
| | | NewServiceTypeSearch(),
|
| | | NewPriorityLevelSearch(),
|
| | | NewSeveritySearch(),
|
| | | NewTimeSpentSearch(),
|
| | | }
|
| | | for _, model := range models {
|
| | | if id, ok := model.(InitDefaultData); ok {
|
| | | if err := id.InitDefaultData(); err != nil {
|
| | | logx.Errorf("InitDefaultData for table: %v, err :%v", model.(schema.Tabler).TableName(), err.Error())
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | package model |
| | | |
| | | import ( |
| | | "aps_crm/conf" |
| | | "aps_crm/pkg/logx" |
| | | "aps_crm/pkg/mysqlx" |
| | | "aps_crm/pkg/safe" |
| | | "gorm.io/gorm/schema" |
| | | ) |
| | | |
| | | func Init() error { |
| | | if err := mysqlx.Init(&conf.Conf.Mysql, logx.GetLogger()); err != nil { |
| | | return err |
| | | } |
| | | |
| | | if err := RegisterTables(); err != nil { |
| | | return err |
| | | } |
| | | safe.Go(func() { |
| | | InsertDefaultData() |
| | | }) |
| | | return nil |
| | | } |
| | | |
| | | func RegisterTables() error { |
| | | db := mysqlx.GetDB() |
| | | err := db.AutoMigrate( |
| | | User{}, |
| | | Menu{}, |
| | | JwtBlacklist{}, |
| | | Country{}, |
| | | Province{}, |
| | | City{}, |
| | | Client{}, |
| | | ClientLevel{}, |
| | | ClientOrigin{}, |
| | | ClientStatus{}, |
| | | ClientType{}, |
| | | Contact{}, |
| | | EnterpriseNature{}, |
| | | EnterpriseScale{}, |
| | | FollowRecord{}, |
| | | Industry{}, |
| | | RegisteredCapital{}, |
| | | SaleChance{}, |
| | | SalesLeads{}, |
| | | SalesSources{}, |
| | | SaleStage{}, |
| | | SaleType{}, |
| | | RegularCustomers{}, |
| | | Possibility{}, |
| | | Status{}, |
| | | Quotation{}, |
| | | MasterOrder{}, |
| | | SubOrder{}, |
| | | Product{}, |
| | | SalesDetails{}, |
| | | SalesReturn{}, |
| | | SalesRefund{}, |
| | | Contract{}, |
| | | Plan{}, |
| | | ServiceContract{}, |
| | | OrderManage{}, |
| | | ServiceFollowup{}, |
| | | CustomerServiceSheet{}, |
| | | ServiceFeeManage{}, |
| | | Authority{}, |
| | | Api{}, |
| | | Department{}, |
| | | Satisfaction{}, |
| | | TimelyRate{}, |
| | | SolveRate{}, |
| | | IsVisit{}, |
| | | IsVisit{}, |
| | | ReportSource{}, |
| | | OrderType{}, |
| | | ServiceContractStatus{}, |
| | | ServiceContractType{}, |
| | | RefundMethod{}, |
| | | IsInvoice{}, |
| | | AccountId{}, |
| | | SalesReturnStatus{}, |
| | | Repository{}, |
| | | QuotationStatus{}, |
| | | Currency{}, |
| | | ) |
| | | return err |
| | | } |
| | | |
| | | type InitDefaultData interface { |
| | | InitDefaultData() error |
| | | } |
| | | |
| | | func InsertDefaultData() { |
| | | models := []interface{}{ |
| | | NewServiceTypeSearch(), |
| | | NewPriorityLevelSearch(), |
| | | NewSeveritySearch(), |
| | | NewTimeSpentSearch(), |
| | | } |
| | | for _, model := range models { |
| | | if id, ok := model.(InitDefaultData); ok { |
| | | if err := id.InitDefaultData(); err != nil { |
| | | logx.Errorf("InitDefaultData for table: %v, err :%v", model.(schema.Tabler).TableName(), err.Error()) |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | Quotation Quotation `json:"quotation" gorm:"foreignKey:QuotationId"` |
| | | ServiceContractTypeId int `json:"serviceContractTypeId" gorm:"column:service_contract_type_id;type:int;comment:合同类型id"` |
| | | ServiceContractType ServiceContractType `json:"serviceContractType" gorm:"foreignKey:ServiceContractTypeId"` |
| | | SignTime string `json:"signTime" gorm:"column:sign_time;type:datetime;comment:签约时间"` |
| | | StartTime string `json:"startTime" gorm:"column:start_time;type:datetime;comment:开始时间"` |
| | | EndTime string `json:"endTime" gorm:"column:end_time;type:datetime;comment:结束时间"` |
| | | SignTime string `json:"signTime" gorm:"column:sign_time;type:varchar(255);comment:签约时间"` |
| | | StartTime string `json:"startTime" gorm:"column:start_time;type:varchar(255);comment:开始时间"` |
| | | EndTime string `json:"endTime" gorm:"column:end_time;type:varchar(255);comment:结束时间"` |
| | | ServiceContractStatusId int `json:"serviceContractStatusId" gorm:"column:service_contract_status_id;type:int;comment:合同状态id"` |
| | | ServiceContractStatus ServiceContractStatus `json:"serviceContractStatus" gorm:"foreignKey:ServiceContractStatusId"` |
| | | ServiceTimes int `json:"serviceTimes" gorm:"column:service_times;type:int;comment:服务次数"` |
| | |
| | | ServiceOrder ServiceOrder `gorm:"foreignKey:ServiceId"` |
| | | CustomerServiceSheet CustomerServiceSheet `json:"customerServiceSheet" gorm:"foreignKey:ServiceId"` |
| | | MemberId int `json:"memberId" gorm:"column:member_id;type:int;comment:服务人员id"` |
| | | Member User `json:"Member" gorm:"foreignKey:MemberId"` |
| | | PlanId int `json:"planId" gorm:"column:plan_id;type:int;comment:服务计划id"` |
| | | SatisfactionId int `json:"satisfactionId" gorm:"column:satisfaction_id;type:int;comment:满意度id"` |
| | | Satisfaction Satisfaction `json:"satisfaction" gorm:"foreignKey:SatisfactionId"` |
| | | TimelyRateId int `json:"timelyRateId" gorm:"column:timely_rate_id;type:int;comment:及时率id"` |
| | | TimelyRate TimelyRate `json:"timelyRate" gorm:"foreignKey:TimelyRateId"` |
| | | SolveRateId int `json:"solveRateId" gorm:"column:solve_rate_id;type:int;comment:解决率id"` |
| | | SolveRate SolveRate `json:"solveRate" gorm:"foreignKey:SolveRateId"` |
| | | IsVisitId int `json:"isVisitId" gorm:"column:is_visit_id;type:int;comment:服务人员是否来过id"` |
| | | IsVisit IsVisit `json:"isVisit" gorm:"foreignKey:IsVisitId"` |
| | | OldMemberId int `json:"oldMemberId" gorm:"column:old_member_id;type:int;comment:原服务人员"` |
| | | OldMember User `json:"oldMember" gorm:"foreignKey:OldMemberId"` |
| | | Remark string `json:"remark" gorm:"column:remark;type:text;comment:备注"` |
| | | File string `json:"file" gorm:"column:file;type:varchar(255);comment:附件"` |
| | | |
| | |
| | | db = db.Preload("CustomerServiceSheet"). |
| | | Preload("ServiceOrder"). |
| | | Preload("Client"). |
| | | Preload("Contact") |
| | | Preload("Contact"). |
| | | Preload("Satisfaction"). |
| | | Preload("TimelyRate"). |
| | | Preload("SolveRate"). |
| | | Preload("IsVisit"). |
| | | Preload("OldMember"). |
| | | Preload("Member") |
| | | } |
| | | |
| | | return db |
| | |
| | | // ServiceOrder 服务单 |
| | | ServiceOrder struct { |
| | | Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` |
| | | ServiceNumber string `gorm:"service_number" json:"serviceNumber"` // 服务单编号 |
| | | ClientId int `gorm:"client_id" json:"clientId"` // 客户id |
| | | ServiceNumber string `gorm:"column:service_number;type:varchar(255);not null;default:'';comment:'服务单编号'" json:"serviceNumber"` // 服务单编号 |
| | | ClientId int `gorm:"column:client_id;type:int;not null;default:0;comment:'客户id'" json:"clientId"` // 客户id |
| | | Client Client `gorm:"foreignKey:ClientId"` |
| | | ContractId int `gorm:"contract_id" json:"contractId"` // 合同id |
| | | ContractId int `gorm:"column:contract_id;type:int;not null;default:0;comment:'合同id'" json:"contractId"` // 合同id |
| | | Contract Contract `gorm:"foreignKey:ContractId"` |
| | | OrderId int `gorm:"order_id" json:"orderId"` // 销售订单id |
| | | OrderId int `gorm:"column:order_id;type:int;not null;default:0;comment:'销售订单id'" json:"orderId"` // 销售订单id |
| | | OrderManage OrderManage `gorm:"foreignKey:OrderId"` |
| | | Subject string `gorm:"subject" json:"subject"` // 主题 |
| | | ProductId int `gorm:"product_id" json:"productId"` // 产品id |
| | | Subject string `gorm:"column:subject;type:varchar(255);not null;default:'';comment:'主题'" json:"subject"` // 主题 |
| | | ProductId int `gorm:"column:product_id;type:int;not null;default:0;comment:'产品id'" json:"productId"` // 产品id |
| | | Product Product `gorm:"foreignKey:ProductId"` |
| | | ServiceTypeId int `gorm:"service_type_id" json:"serviceTypeId"` // 服务方式id |
| | | ServiceTypeId int `gorm:"column:service_type_id;type:int;not null;default:0;comment:'服务方式id'" json:"serviceTypeId"` // 服务方式id |
| | | ServiceType ServiceType `gorm:"foreignKey:ServiceTypeId"` |
| | | ServiceManId int `gorm:"service_man_id" json:"serviceManId"` // 服务人员 |
| | | ContactId int `gorm:"linkman_id" json:"contactId"` // 联系人id |
| | | ServiceManId int `gorm:"column:service_man_id;type:int;not null;default:0;comment:'服务人员'" json:"serviceManId"` // 服务人员 |
| | | ContactId int `gorm:"linkman_id" json:"contactId"` // 联系人id |
| | | Contact Contact `gorm:"foreignKey:ContactId"` |
| | | Address string `gorm:"address" json:"address"` // 上门地址 |
| | | PriorityLevelId int `gorm:"priority_level_id" json:"priorityLevelId"` // 优先级别id |
| | | Address string `gorm:"column:address;type:varchar(255);not null;default:'';comment:'上门地址'" json:"address"` // 上门地址 |
| | | PriorityLevelId int `gorm:"column:priority_level_id;type:int;not null;default:0;comment:'优先级别id'" json:"priorityLevelId"` // 优先级别id |
| | | PriorityLevel PriorityLevel `gorm:"foreignKey:PriorityLevelId"` |
| | | AppointmentTime string `gorm:"appointment_time" json:"appointmentTime"` // 预约上门时间 |
| | | SaleChanceId int `gorm:"sale_leads" json:"saleChanceId"` // 销售机会id |
| | | AppointmentTime string `gorm:"appointment_time" json:"appointmentTime"` // 预约上门时间 |
| | | SaleChanceId int `gorm:"column:sale_chance_id;type:int;not null;default:0;comment:'销售机会id'" json:"saleChanceId"` // 销售机会id |
| | | SaleChance SaleChance `gorm:"foreignKey:SaleChanceId"` |
| | | FaultTypeId int `gorm:"severity_id" json:"faultTypeId"` // 故障类别id |
| | | FaultTypeId int `gorm:"column:severity_id;type:int;not null;default:0;comment:'故障类别id'" json:"faultTypeId"` // 故障类别id |
| | | FaultType FaultType `gorm:"foreignKey:FaultTypeId"` |
| | | SeverityId int `gorm:"severity_id" json:"severity"` // 严重程度id |
| | | SeverityId int `gorm:"column:severity_id;type:int;not null;default:0;comment:'严重程度id'" json:"severity"` // 严重程度id |
| | | Severity Severity `gorm:"foreignKey:SeverityId"` |
| | | Status int `gorm:"status" json:"status"` // 处理状态 |
| | | ExpectTime string `gorm:"expect_time" json:"expectTime"` // 希望处理时间 |
| | | RealTime string `gorm:"real_time" json:"realTime"` // 实际处理时间 |
| | | CarFare float64 `gorm:"car_fare" json:"carFare"` // 交通费 |
| | | ChargeAmount float64 `gorm:"charge_amount" json:"chargeAmount"` // 收费金额 |
| | | TimeSpentId int `gorm:"time_spent_id" json:"timeSpentId"` // 花费时间 |
| | | Status int `gorm:"status" json:"status"` // 处理状态 |
| | | ExpectTime string `gorm:"column:expect_time;type:varchar(255);not null;default:'';comment:'希望处理时间'" json:"expectTime"` // 希望处理时间 |
| | | RealTime string `gorm:"column:real_time;type:varchar(255);not null;default:'';comment:'实际处理时间'" json:"realTime"` // 实际处理时间 |
| | | CarFare float64 `gorm:"car_fare" json:"carFare"` // 交通费 |
| | | ChargeAmount float64 `gorm:"charge_amount" json:"chargeAmount"` // 收费金额 |
| | | TimeSpentId int `gorm:"column:time_spent_id;type:int;not null;default:0;comment:'花费时间'" json:"timeSpentId"` // 花费时间 |
| | | TimeSpent TimeSpent `gorm:"foreignKey:TimeSpentId"` |
| | | FaqId int `gorm:"problem_id" json:"faqId"` // 常见问题id |
| | | FaqId int `gorm:"column:problem_id;type:int;not null;default:0;comment:'常见问题id'" json:"faqId"` // 常见问题id |
| | | Faq Faq `gorm:"foreignKey:FaqId"` |
| | | ProblemDesc string `gorm:"problem_desc" json:"problemDesc"` // 问题描述 |
| | | Solution string `gorm:"solution" json:"solution"` // 解决方法 |
| | | SolutionRemark string `gorm:"solution_remark" json:"solutionRemark"` // 内部备注 |
| | | Remark string `gorm:"remark" json:"remark"` // 备注 |
| | | ProblemDesc string `gorm:"column:subject;type:varchar(255);not null;default:'';comment:'主题'problem_desc" json:"problemDesc"` // 问题描述 |
| | | Solution string `gorm:"column:solution;type:varchar(255);not null;default:'';comment:'解决方法'" json:"solution"` // 解决方法 |
| | | SolutionRemark string `gorm:"column:solution_remark;type:varchar(255);not null;default:'';comment:'内部备注'" json:"solutionRemark"` // 内部备注 |
| | | Remark string `gorm:"column:remark;type:varchar(255);not null;default:'';comment:'备注'" json:"remark"` // 备注 |
| | | } |
| | | |
| | | // ServiceOrderSearch 服务单搜索条件 |
| | |
| | | // TimeSpent 花费时间 |
| | | TimeSpent struct { |
| | | Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` |
| | | Name string `json:"name" gorm:"column:name"` |
| | | Name string `json:"name" gorm:"column:name;type:varchar(255);not null;default:'';comment:名称"` |
| | | } |
| | | |
| | | // TimeSpentSearch 花费时间搜索条件 |
| | | TimeSpentSearch struct { |
| | | TimeSpent |
| | | Orm *gorm.DB |
| | | QueryClass constvar.TimeSpentQueryClass |
| | | KeywordType constvar.TimeSpentKeywordType |
| | | Keyword string |
| | | PageNum int |
| | | PageSize int |
| | | Orm *gorm.DB |
| | | QueryClass constvar.TimeSpentQueryClass |
| | | KeywordType constvar.TimeSpentKeywordType |
| | | Keyword string |
| | | PageNum int |
| | | PageSize int |
| | | } |
| | | ) |
| | | |