1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
package model
 
import (
    "aps_crm/constvar"
    "aps_crm/pkg/mysqlx"
    "errors"
    "fmt"
    "gorm.io/gorm"
)
 
type (
    // 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
        Client          Client        `gorm:"foreignKey:ClientId"`
        ContractId      int           `gorm:"contract_id" json:"contractId"` // 合同id
        Contract        Contract      `gorm:"foreignKey:ContractId"`
        OrderId         int           `gorm:"order_id" json:"orderId"` // 销售订单id
        OrderManage     OrderManage   `gorm:"foreignKey:OrderId"`
        Subject         string        `gorm:"subject" json:"subject"`      // 主题
        ProductId       int           `gorm:"product_id" json:"productId"` // 产品id
        Product         Product       `gorm:"foreignKey:ProductId"`
        ServiceTypeId   int           `gorm:"service_type_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
        Contact         Contact       `gorm:"foreignKey:ContactId"`
        Address         string        `gorm:"address" json:"address"`                   // 上门地址
        PriorityLevelId int           `gorm:"priority_level_id" json:"priorityLevelId"` // 优先级别id
        PriorityLevel   PriorityLevel `gorm:"foreignKey:PriorityLevelId"`
        AppointmentTime string        `gorm:"appointment_time" json:"appointmentTime"` // 预约上门时间
        SaleChanceId    int           `gorm:"sale_leads" json:"saleChanceId"`          // 销售机会id
 
        SaleChance     SaleChance `gorm:"foreignKey:SaleChanceId"`
        FaultTypeId    int        `gorm:"severity_id" json:"faultTypeId"` // 故障类别id
        FaultType      FaultType  `gorm:"foreignKey:FaultTypeId"`
        SeverityId     int        `gorm:"severity_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"`  // 花费时间
        TimeSpent      TimeSpent  `gorm:"foreignKey:TimeSpentId"`
        FaqId          int        `gorm:"problem_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"`                  // 备注
    }
 
    // ServiceOrderSearch 服务单搜索条件
    ServiceOrderSearch struct {
        ServiceOrder
        Orm         *gorm.DB
        QueryClass  constvar.ServiceOrderQueryClass
        KeywordType constvar.ServiceOrderKeywordType
        Keyword     string
        PageNum     int
        PageSize    int
        Preload     bool
    }
)
 
func (ServiceOrder) TableName() string {
    return "service_order"
}
 
func NewServiceOrderSearch() *ServiceOrderSearch {
    return &ServiceOrderSearch{
        Orm: mysqlx.GetDB(),
    }
}
 
func (slf *ServiceOrderSearch) build() *gorm.DB {
    var db = slf.Orm.Model(&ServiceOrder{})
    if slf.Id != 0 {
        db = db.Where("id = ?", slf.Id)
    }
    if slf.Preload {
        db = db.
            Preload("Client").
            Preload("Contract").
            Preload("OrderManage").
            Preload("Product").
            Preload("ServiceType").
            Preload("Contact").
            Preload("SaleChance").
            Preload("PriorityLevel").
            Preload("Severity").
            Preload("Faq")
    }
 
    return db
}
 
func (slf *ServiceOrderSearch) Create(record *ServiceOrder) error {
    var db = slf.build()
    return db.Create(record).Error
}
 
func (slf *ServiceOrderSearch) Delete() error {
    var db = slf.build()
    return db.Delete(&ServiceOrder{}).Error
}
 
func (slf *ServiceOrderSearch) Update(record *ServiceOrder) error {
    var db = slf.build()
    return db.Updates(record).Error
}
 
func (slf *ServiceOrderSearch) FindAll() ([]*ServiceOrder, error) {
    var db = slf.build()
    var record = make([]*ServiceOrder, 0)
    err := db.Find(&record).Error
    return record, err
}
 
func (slf *ServiceOrderSearch) SetId(id int) *ServiceOrderSearch {
    slf.Id = id
    return slf
}
 
func (slf *ServiceOrderSearch) SetPreload(preload bool) *ServiceOrderSearch {
    slf.Preload = preload
    return slf
}
 
func (slf *ServiceOrderSearch) First() (*ServiceOrder, error) {
    var db = slf.build()
    var record = new(ServiceOrder)
    err := db.First(record).Error
    return record, err
}
 
func (slf *ServiceOrderSearch) Updates(values interface{}) error {
    var db = slf.build()
    return db.Updates(values).Error
}
 
func (slf *ServiceOrderSearch) Save(record *ServiceOrder) error {
    if record.Id == 0 {
        return errors.New("id为空")
    }
    var db = slf.build()
 
    if err := db.Save(record).Error; err != nil {
        return fmt.Errorf("save err: %v, record: %+v", err, record)
    }
 
    return nil
}
 
func (slf *ServiceOrderSearch) Find() ([]*ServiceOrder, int64, error) {
    var db = slf.build()
    var records = make([]*ServiceOrder, 0)
    var total int64
    if err := db.Count(&total).Error; err != nil {
        return records, total, err
    }
    if slf.PageNum > 0 && slf.PageSize > 0 {
        db = db.Limit(slf.PageSize).Offset((slf.PageNum - 1) * slf.PageSize)
    }
 
    err := db.Find(&records).Error
    return records, total, err
}