/
transport.go
241 lines (231 loc) · 8.23 KB
/
transport.go
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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
package ServiceOrder
import (
"errors"
"fmt"
CoreSQL "github.com/fotomxq/weeekj_core/v5/core/sql"
Router2SystemConfig "github.com/fotomxq/weeekj_core/v5/router2/system_config"
"time"
)
// ArgsUpdateTransportID 修改配送ID参数
type ArgsUpdateTransportID struct {
//ID
ID int64 `db:"id" json:"id" check:"id"`
//组织ID
// 可选,作为验证
OrgID int64 `db:"org_id" json:"orgID" check:"id" emtpy:"true"`
//日志
//操作组织人员ID
// 如果留空则说明为系统自动调整或创建人产生
OrgBindID int64 `db:"org_bind_id" json:"orgBindID" check:"id" empty:"true"`
//调整说明描述
Des string `db:"des" json:"des" check:"des" min:"1" max:"600" empty:"true"`
//配送服务系统
// 0 self 自运营服务; 1 transport 自提; 2 running 跑腿服务; 3 housekeeping 家政服务
TransportSystem string `db:"transport_system" json:"transportSystem"`
//配送ID
TransportID int64 `db:"transport_id" json:"transportID" check:"id"`
}
// UpdateTransportID 修改配送ID
func UpdateTransportID(args *ArgsUpdateTransportID) (err error) {
var newLog string
newLog, err = getLogData(0, args.OrgBindID, args.TransportSystem, args.Des)
if err != nil {
return
}
_, err = CoreSQL.UpdateOneSoft(Router2SystemConfig.MainDB.DB, "UPDATE service_order SET update_at = NOW(), transport_system = :transport_system, transport_id = :transport_id, transport_ids = array_append(transport_ids, :transport_id), logs = logs || :log WHERE id = :id AND (:org_id < 1 OR org_id = :org_id)", map[string]interface{}{
"id": args.ID,
"org_id": args.OrgID,
"log": newLog,
"transport_system": args.TransportSystem,
"transport_id": args.TransportID,
})
if err != nil {
err = errors.New(fmt.Sprint("update order failed, id: ", args.ID, ", org id: ", args.OrgID, ", transport id: ", args.TransportID, ", err: ", err))
return
}
//清理缓冲
deleteOrderCache(args.ID)
//获取订单数据
var orderData FieldsOrder
orderData = getByID(args.ID)
if orderData.ID < 1 {
err = errors.New("no data")
}
//检查订单是否完成支付?通知配送单
if orderData.PayStatus == 1 {
//推送完成支付
pushNatsOrderPay(orderData.ID, orderData.PayID, orderData.Status >= 2)
}
//反馈
return
}
// ArgsUpdateTransportAuto 修改配送安排时间和自动配送设置参数
type ArgsUpdateTransportAuto struct {
//ID
ID int64 `db:"id" json:"id" check:"id"`
//组织ID
// 可选,作为验证
OrgID int64 `db:"org_id" json:"orgID" check:"id" empty:"true"`
//日志
//操作组织人员ID
// 如果留空则说明为系统自动调整或创建人产生
OrgBindID int64 `db:"org_bind_id" json:"orgBindID" check:"id" empty:"true"`
//调整说明描述
Des string `db:"des" json:"des" check:"des" min:"1" max:"600" empty:"true"`
//允许自动配送
TransportAllowAuto bool `db:"transport_allow_auto" json:"transportAllowAuto" check:"bool"`
//期望送货时间
TransportTaskAt time.Time `db:"transport_task_at" json:"transportTaskAt" check:"isoTime"`
}
// UpdateTransportAuto 修改配送安排时间和自动配送设置
func UpdateTransportAuto(args *ArgsUpdateTransportAuto) (err error) {
var newLog string
newLog, err = getLogData(0, args.OrgBindID, "transport_auto", args.Des)
if err != nil {
return
}
_, err = CoreSQL.UpdateOneSoft(Router2SystemConfig.MainDB.DB, "UPDATE service_order SET update_at = NOW(), transport_allow_auto = :transport_allow_auto, transport_task_at = :transport_task_at, logs = logs || :log WHERE id = :id AND (:org_id < 1 OR org_id = :org_id)", map[string]interface{}{
"id": args.ID,
"org_id": args.OrgID,
"user_id": 0,
"log": newLog,
"transport_allow_auto": args.TransportAllowAuto,
"transport_task_at": args.TransportTaskAt,
})
if err != nil {
return
}
//清理缓冲
deleteOrderCache(args.ID)
//反馈
return
}
// ArgsUpdateTransportInfo 修改第三方物流配送信息
type ArgsUpdateTransportInfo struct {
//ID
ID int64 `db:"id" json:"id" check:"id"`
//组织ID
// 可选,作为验证
OrgID int64 `db:"org_id" json:"orgID" check:"id" empty:"true"`
//日志
//操作组织人员ID
// 如果留空则说明为系统自动调整或创建人产生
OrgBindID int64 `db:"org_bind_id" json:"orgBindID" check:"id" empty:"true"`
//配送服务系统
// 0 self 其他配送; 1 transport 自运营配送; 2 running 跑腿服务; 3 housekeeping 家政服务
TransportSystem string `db:"transport_system" json:"transportSystem" check:"mark"`
//配送单号
TransportSN string `db:"transport_sn" json:"transportSN"`
//配送服务的状态信息
TransportInfo string `db:"transport_info" json:"transportInfo"`
//配送状态
// 0 等待分配人员; 1 取货中; 2 送货中; 3 完成配送
TransportStatus int `db:"transport_status" json:"transportStatus" check:"intThan0" empty:"true"`
}
func UpdateTransportInfo(args *ArgsUpdateTransportInfo) (err error) {
var newLog string
newLog, err = getLogData(0, args.OrgBindID, "transport_info", "修改订单的配送服务信息")
if err != nil {
return
}
_, err = CoreSQL.UpdateOneSoft(Router2SystemConfig.MainDB.DB, "UPDATE service_order SET update_at = NOW(), transport_system = :transport_system, transport_sn = :transport_sn, transport_info = :transport_info, transport_status = :transport_status, logs = logs || :log WHERE id = :id AND (:org_id < 1 OR org_id = :org_id)", map[string]interface{}{
"id": args.ID,
"org_id": args.OrgID,
"user_id": 0,
"log": newLog,
"transport_system": args.TransportSystem,
"transport_sn": args.TransportSN,
"transport_info": args.TransportInfo,
"transport_status": args.TransportStatus,
})
if err != nil {
return
}
//清理缓冲
deleteOrderCache(args.ID)
//如果为完成配送,则检查订单状态并完成订单
if args.TransportStatus == 3 {
orderData := getByID(args.ID)
if orderData.PricePay == true {
//订单标记完成
err = UpdateFinish(&ArgsUpdateFinish{
ID: args.ID,
OrgID: -1,
UserID: -1,
OrgBindID: args.OrgBindID,
Des: "第三方配送完成自动完成订单",
})
if err != nil {
err = errors.New(fmt.Sprint("update order tms self, and auto update order finish failed, ", err, ", order id: ", args.ID))
return
}
} else {
//完成配送标记
var newLog2 string
newLog2, err = getLogData(0, args.OrgBindID, "transport_info", "订单配送完成,等待完成订单")
if err != nil {
return
}
_, err = CoreSQL.UpdateOneSoft(Router2SystemConfig.MainDB.DB, "UPDATE service_order SET update_at = NOW(), status = 3, logs = logs || :log WHERE id = :id", map[string]interface{}{
"id": args.ID,
"log": newLog2,
})
if err != nil {
return
}
}
//清理缓冲
deleteOrderCache(args.ID)
}
//反馈
return
}
// argsUpdateTransportFailed 配送失败,等待人工干预参数
type argsUpdateTransportFailed struct {
//ID
ID int64 `db:"id" json:"id" check:"id"`
//组织ID
// 可选,作为验证
OrgID int64 `db:"org_id" json:"orgID" check:"id" empty:"true"`
//日志
//操作组织人员ID
// 如果留空则说明为系统自动调整或创建人产生
OrgBindID int64 `db:"org_bind_id" json:"orgBindID" check:"id" empty:"true"`
//调整说明描述
Des string `db:"des" json:"des" check:"des" min:"1" max:"600" empty:"true"`
}
// updateTransportFailed 配送失败,等待人工干预
func updateTransportFailed(args *argsUpdateTransportFailed) (err error) {
var newLog string
newLog, err = getLogData(0, args.OrgBindID, "transport_auto", args.Des)
if err != nil {
return
}
_, err = CoreSQL.UpdateOneSoft(Router2SystemConfig.MainDB.DB, "UPDATE service_order SET update_at = NOW(), transport_allow_auto = false, transport_id = 0, logs = logs || :log WHERE id = :id AND (:org_id < 1 OR org_id = :org_id)", map[string]interface{}{
"id": args.ID,
"org_id": args.OrgID,
"user_id": 0,
"log": newLog,
})
if err != nil {
return
}
//清理缓冲
deleteOrderCache(args.ID)
//反馈
return
}
// 检查是否存在服务单
func checkOrderHaveHousekeeping(orderID int64) (b bool) {
data := getByID(orderID)
if data.ID < 1 {
return
}
if data.TransportSystem == "housekeeping" {
if data.TransportID > 0 {
b = true
return
}
}
return
}