zhangqian
2023-08-03 a89c3af49d0be3e635ef13b3bd3dd9410e4d6d46
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
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:"service_number"` // 服务单编号
        ClientId        int           `gorm:"client_id" json:"client_id"`           // 客户id
        Client          Client        `gorm:"foreignKey:ClientId"`
        ContractId      int           `gorm:"contract_id" json:"contract_id"` // 合同id
        Contract        Contract      `gorm:"foreignKey:ContractId"`
        OrderId         int           `gorm:"order_id" json:"order_id"` // 销售订单id
        Order           OrderManage   `gorm:"foreignKey:OrderId"`
        Subject         string        `gorm:"subject" json:"subject"`       // 主题
        ProductId       int           `gorm:"product_id" json:"product_id"` // 产品id
        Product         Product       `gorm:"foreignKey:ProductId"`
        ServiceTypeId   int           `gorm:"service_type_id" json:"service_type_id"` // 服务方式
        ServiceType     ServiceType   `gorm:"foreignKey:ServiceTypeId"`
        ServiceManId    int           `gorm:"service_man_id" json:"service_man_id"`       // 服务人员
        LinkmanId       int           `gorm:"linkman_id" json:"linkman_id"`               // 联系人id
        Address         string        `gorm:"address" json:"address"`                     // 上门地址
        PriorityLevelId int           `gorm:"priority_level_id" json:"priority_level_id"` // 优先级别
        PriorityLevel   PriorityLevel `gorm:"foreignKey:PriorityLevelId"`
        AppointmentTime string        `gorm:"appointment_time" json:"appointment_time"` // 预约上门时间
        SaleLeads       int           `gorm:"sale_leads" json:"sale_leads"`             // 销售机会id
        SeverityId      int           `gorm:"severity_id" json:"severity"`              // 严重程度
        Severity        Severity      `gorm:"foreignKey:SeverityId"`
        Status          int           `gorm:"status" json:"status"`               // 处理状态
        ExpectTime      string        `gorm:"expect_time" json:"expect_time"`     // 希望处理时间
        RealTime        string        `gorm:"real_time" json:"real_time"`         // 实际处理时间
        CarFare         float64       `gorm:"car_fare" json:"car_fare"`           // 交通费
        ChargeAmount    float64       `gorm:"charge_amount" json:"charge_amount"` // 收费金额
        TimeSpentId     int           `gorm:"time_spent_id" json:"time_spent_id"` // 花费时间
        FaqId           int           `gorm:"problem_id" json:"problem_id"`       // 常见问题id
        Faq             Faq           `gorm:"foreignKey:FaqId"`
        ProblemDesc     string        `gorm:"problem_desc" json:"problem_desc"`       // 问题描述
        Solution        string        `gorm:"solution" json:"solution"`               // 解决方法
        SolutionRemark  string        `gorm:"solution_remark" json:"solution_remark"` // 内部备注
        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.Model(&ServiceOrder{}).
            Preload("Client").
            Preload("Contract").
            Preload("OrderManage").
            Preload("Product").
            Preload("ServiceType").
            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
}