Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
so-operation-api
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
smart-operation
so-operation-api
Commits
add99f25
You need to sign in or sign up before continuing.
Commit
add99f25
authored
Jul 25, 2023
by
陈子龙
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev-czl' into dev
parents
42ba9e54
bff45d10
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
205 additions
and
8 deletions
+205
-8
src/common/conf/options.go
src/common/conf/options.go
+1
-0
src/main.go
src/main.go
+2
-1
src/service/cron/common.go
src/service/cron/common.go
+3
-1
src/service/work_order.go
src/service/work_order.go
+199
-6
No files found.
src/common/conf/options.go
View file @
add99f25
...
@@ -64,4 +64,5 @@ const (
...
@@ -64,4 +64,5 @@ const (
FinalHeartBeatUnixKey
=
"FinalHeartBeatUnix"
FinalHeartBeatUnixKey
=
"FinalHeartBeatUnix"
AutoExecHistory
=
"AutoExecHistory"
AutoExecHistory
=
"AutoExecHistory"
TaskExecLog
=
"TaskExecLog"
TaskExecLog
=
"TaskExecLog"
WorkOrderPush
=
"WorkOrderPush"
)
)
src/main.go
View file @
add99f25
...
@@ -2,6 +2,7 @@ package main
...
@@ -2,6 +2,7 @@ package main
import
(
import
(
"fmt"
"fmt"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/service"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/service/cron"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/service/cron"
"net/http"
"net/http"
"os"
"os"
...
@@ -46,7 +47,7 @@ func main() {
...
@@ -46,7 +47,7 @@ func main() {
//启动定时任务
//启动定时任务
cron
.
StartCron
()
cron
.
StartCron
()
service
.
PushWorkOrderMessage
()
// server start...
// server start...
conf
.
Logger
.
Error
(
"server start err"
,
zap
.
Error
(
newServer
()
.
ListenAndServe
()))
conf
.
Logger
.
Error
(
"server start err"
,
zap
.
Error
(
newServer
()
.
ListenAndServe
()))
}
}
...
...
src/service/cron/common.go
View file @
add99f25
...
@@ -9,5 +9,7 @@ func StartCron() {
...
@@ -9,5 +9,7 @@ func StartCron() {
c
:=
cron
.
New
()
c
:=
cron
.
New
()
defer
c
.
Start
()
defer
c
.
Start
()
c
.
AddFunc
(
"0 0 0 * * *"
,
service
.
CronStatusDetection
)
// 每天凌晨12状态检测
c
.
AddFunc
(
"0 0 0 * * *"
,
service
.
CronStatusDetection
)
// 每天凌晨0点状态检测
c
.
AddFunc
(
"0 0 0 * * *"
,
service
.
CronWorkOrderIssuance
)
// 每天凌晨0点扫描当天需下发工单
}
}
src/service/work_order.go
View file @
add99f25
...
@@ -11,6 +11,7 @@ import (
...
@@ -11,6 +11,7 @@ import (
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/vo/response"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/vo/response"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/client"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/client"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/conf"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/conf"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/pkg/beagle/jsontime"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/pkg/beagle/resp"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/pkg/beagle/resp"
"go.uber.org/zap"
"go.uber.org/zap"
"strings"
"strings"
...
@@ -359,27 +360,27 @@ func (w *WorkOrderManageSvc) PushWorkOrderManage(req request.PushWorkOrderReq) (
...
@@ -359,27 +360,27 @@ func (w *WorkOrderManageSvc) PushWorkOrderManage(req request.PushWorkOrderReq) (
switch
req
.
PushObj
.
PushMethod
{
switch
req
.
PushObj
.
PushMethod
{
case
1
:
case
1
:
//发送钉钉消息
//发送钉钉消息
err
=
w
.
WorkOrderPushDingTalkMsg
(
workOrder
.
OrderName
,
workOrder
.
OrderLevel
,
phones
)
err
=
WorkOrderPushDingTalkMsg
(
workOrder
.
OrderName
,
workOrder
.
OrderLevel
,
phones
)
if
err
!=
nil
{
if
err
!=
nil
{
session
.
Rollback
()
session
.
Rollback
()
return
return
}
}
case
2
:
case
2
:
//发送短信
//发送短信
err
=
w
.
WorkOrderPushNoteMsg
(
workOrder
.
OrderName
,
phones
,
workOrder
.
OrderLevel
)
err
=
WorkOrderPushNoteMsg
(
workOrder
.
OrderName
,
phones
,
workOrder
.
OrderLevel
)
if
err
!=
nil
{
if
err
!=
nil
{
session
.
Rollback
()
session
.
Rollback
()
return
return
}
}
case
3
:
case
3
:
//发送钉钉消息
//发送钉钉消息
err
=
w
.
WorkOrderPushDingTalkMsg
(
workOrder
.
OrderName
,
workOrder
.
OrderLevel
,
phones
)
err
=
WorkOrderPushDingTalkMsg
(
workOrder
.
OrderName
,
workOrder
.
OrderLevel
,
phones
)
if
err
!=
nil
{
if
err
!=
nil
{
session
.
Rollback
()
session
.
Rollback
()
return
return
}
}
//发送短信
//发送短信
err
=
w
.
WorkOrderPushNoteMsg
(
workOrder
.
OrderName
,
phones
,
workOrder
.
OrderLevel
)
err
=
WorkOrderPushNoteMsg
(
workOrder
.
OrderName
,
phones
,
workOrder
.
OrderLevel
)
if
err
!=
nil
{
if
err
!=
nil
{
session
.
Rollback
()
session
.
Rollback
()
return
return
...
@@ -648,7 +649,7 @@ func (w *WorkOrderManageSvc) ListWorkOrderMe(req request.ListWorkOrderReq) (tota
...
@@ -648,7 +649,7 @@ func (w *WorkOrderManageSvc) ListWorkOrderMe(req request.ListWorkOrderReq) (tota
}
}
// WorkOrderPushDingTalkMsg 推送钉钉消息
// WorkOrderPushDingTalkMsg 推送钉钉消息
func
(
w
*
WorkOrderManageSvc
)
WorkOrderPushDingTalkMsg
(
orderName
string
,
orderLevel
int
,
phones
[]
string
)
(
err
error
)
{
func
WorkOrderPushDingTalkMsg
(
orderName
string
,
orderLevel
int
,
phones
[]
string
)
(
err
error
)
{
d
:=
ding
.
Webhook
{
d
:=
ding
.
Webhook
{
AccessToken
:
conf
.
Options
.
OrderDingTalkAccessToken
,
//"203fe1644b446bba0a34e6e622c523d39ee9916fdad94b9c64224449f659e20b",
AccessToken
:
conf
.
Options
.
OrderDingTalkAccessToken
,
//"203fe1644b446bba0a34e6e622c523d39ee9916fdad94b9c64224449f659e20b",
Secret
:
conf
.
Options
.
OrderDingTalkSecret
,
//"SECa73d8372e336451c9daf29a99f750ee1bdd170c1dab910eab9cd06d729a831b7",
Secret
:
conf
.
Options
.
OrderDingTalkSecret
,
//"SECa73d8372e336451c9daf29a99f750ee1bdd170c1dab910eab9cd06d729a831b7",
...
@@ -674,7 +675,7 @@ func (w *WorkOrderManageSvc) WorkOrderPushDingTalkMsg(orderName string, orderLev
...
@@ -674,7 +675,7 @@ func (w *WorkOrderManageSvc) WorkOrderPushDingTalkMsg(orderName string, orderLev
}
}
// WorkOrderPushNoteMsg 推送工单短信消息
// WorkOrderPushNoteMsg 推送工单短信消息
func
(
w
*
WorkOrderManageSvc
)
WorkOrderPushNoteMsg
(
orderName
string
,
phone
[]
string
,
orderLevel
int
)
(
err
error
)
{
func
WorkOrderPushNoteMsg
(
orderName
string
,
phone
[]
string
,
orderLevel
int
)
(
err
error
)
{
smsClient
,
err
:=
dysmsapi
.
NewClientWithAccessKey
(
"cn-hangzhou"
,
conf
.
Options
.
SmsAccessKeyId
,
conf
.
Options
.
SmsAccessSecret
)
smsClient
,
err
:=
dysmsapi
.
NewClientWithAccessKey
(
"cn-hangzhou"
,
conf
.
Options
.
SmsAccessKeyId
,
conf
.
Options
.
SmsAccessSecret
)
if
err
!=
nil
{
if
err
!=
nil
{
conf
.
Logger
.
Error
(
"dysmsapi client error"
,
zap
.
Error
(
err
))
conf
.
Logger
.
Error
(
"dysmsapi client error"
,
zap
.
Error
(
err
))
...
@@ -713,3 +714,195 @@ func (w *WorkOrderManageSvc) WorkOrderPushNoteMsg(orderName string, phone []stri
...
@@ -713,3 +714,195 @@ func (w *WorkOrderManageSvc) WorkOrderPushNoteMsg(orderName string, phone []stri
fmt
.
Printf
(
"response is %#v
\n
"
,
req
)
fmt
.
Printf
(
"response is %#v
\n
"
,
req
)
return
return
}
}
// CronWorkOrderIssuance 定时任务-每天凌晨0点检测当天需下发工单
func
CronWorkOrderIssuance
()
{
db
,
err
:=
client
.
GetDbClient
()
if
err
!=
nil
{
fmt
.
Println
(
"CronStatusDetection err:"
,
err
.
Error
())
return
}
//查询推送工单
workOrderList
:=
make
([]
entity
.
WorkOrder
,
0
)
finder
:=
db
.
Table
(
"work_order_manage"
)
.
Where
(
"timing_state = 1 AND (timing_type = 2 OR timing_type = 3)"
)
err
=
finder
.
Find
(
&
workOrderList
)
if
err
!=
nil
{
fmt
.
Println
(
"CronStatusDetection err:"
,
err
.
Error
())
return
}
week
:=
map
[
time
.
Weekday
]
int
{
time
.
Monday
:
1
,
time
.
Tuesday
:
2
,
time
.
Wednesday
:
3
,
time
.
Thursday
:
4
,
time
.
Friday
:
5
,
time
.
Saturday
:
6
,
time
.
Sunday
:
7
,
}
for
_
,
v
:=
range
workOrderList
{
if
v
.
TimingType
==
2
{
//按周
var
timingWeekly
request
.
TimingWeekly
err
=
json
.
Unmarshal
([]
byte
(
v
.
TimingRule
),
&
timingWeekly
)
if
err
!=
nil
{
fmt
.
Println
(
"CronStatusDetection err:"
,
err
.
Error
())
continue
}
days
:=
week
[
time
.
Now
()
.
Weekday
()]
for
_
,
i
:=
range
timingWeekly
.
Week
{
if
i
==
days
{
//写redis
err
=
PushRedisWorkOrder
(
timingWeekly
.
PointTime
,
v
.
PushObj
,
v
.
OrderName
,
v
.
OrderLevel
)
if
err
!=
nil
{
fmt
.
Println
(
"CronStatusDetection redis set err:"
,
err
.
Error
())
continue
}
break
}
}
}
else
if
v
.
TimingType
==
3
{
//自定义时间
var
timingCustom
[]
request
.
TimingCustom
err
=
json
.
Unmarshal
([]
byte
(
v
.
TimingRule
),
&
timingCustom
)
if
err
!=
nil
{
fmt
.
Println
(
"CronStatusDetection json Unmarshal err:"
,
err
.
Error
())
continue
}
for
_
,
v1
:=
range
timingCustom
{
t
:=
time
.
Now
()
dateFrom
,
err1
:=
time
.
Parse
(
jsontime
.
LocalDateFormat
,
v1
.
DateFrom
)
if
err1
!=
nil
{
fmt
.
Println
(
"CronStatusDetection dateFrom parse err:"
,
err1
.
Error
())
continue
}
dateTo
,
err1
:=
time
.
Parse
(
jsontime
.
LocalDateFormat
,
v1
.
DateTo
)
if
err1
!=
nil
{
fmt
.
Println
(
"CronStatusDetection dateTo parse err:"
,
err1
.
Error
())
continue
}
if
t
.
After
(
dateFrom
)
&&
t
.
Before
(
dateTo
)
{
//写redis
err
=
PushRedisWorkOrder
(
v1
.
PointTime
,
v
.
PushObj
,
v
.
OrderName
,
v
.
OrderLevel
)
if
err
!=
nil
{
fmt
.
Println
(
"CronStatusDetection redis set err:"
,
err
.
Error
())
continue
}
break
}
}
}
}
fmt
.
Println
(
"CronPersonalCardDate success!"
)
}
type
CronRedisWorkOrder
struct
{
PointTime
int64
`json:"point_Time"`
// 时间点
PushObj
string
`json:"push_obj"`
//推送对象
OrderName
string
`json:"order_name"`
// 工单名称
OrderLevel
int
`json:"order_level"`
// 工单等级(1紧急任务 2重要任务 3一般任务)
}
func
PushRedisWorkOrder
(
pointTime
,
pushObj
,
orderName
string
,
orderLevel
int
)
(
err
error
)
{
redis
,
err
:=
client
.
GetRedisClient
()
if
err
!=
nil
{
return
}
timeUnix
,
err
:=
time
.
Parse
(
jsontime
.
LocalTimeFormat
,
pointTime
)
if
err
!=
nil
{
return
}
cronRedisWorkOrder
:=
CronRedisWorkOrder
{
PointTime
:
timeUnix
.
Unix
(),
PushObj
:
pushObj
,
OrderName
:
orderName
,
OrderLevel
:
orderLevel
,
}
workOrderObj
,
err
:=
json
.
Marshal
(
cronRedisWorkOrder
)
if
err
!=
nil
{
return
}
//写redis
err
=
redis
.
LPush
(
conf
.
WorkOrderPush
,
fmt
.
Sprintf
(
"%s"
,
workOrderObj
))
if
err
!=
nil
{
return
}
return
}
// PushWorkOrderMessage 工单定时下发消息
func
PushWorkOrderMessage
()
{
go
func
()
{
for
{
redis
,
err
:=
client
.
GetRedisClient
()
if
err
!=
nil
{
zap
.
L
()
.
Error
(
err
.
Error
())
continue
}
workOrderList
,
err
:=
redis
.
LRange
(
conf
.
WorkOrderPush
)
if
err
!=
nil
{
zap
.
L
()
.
Error
(
err
.
Error
())
continue
}
for
_
,
v
:=
range
workOrderList
{
var
cronRedisWorkOrder
CronRedisWorkOrder
err
=
json
.
Unmarshal
([]
byte
(
v
),
&
cronRedisWorkOrder
)
if
err
!=
nil
{
zap
.
L
()
.
Error
(
err
.
Error
())
continue
}
times
,
err1
:=
time
.
Parse
(
jsontime
.
LocalTimeFormat
,
time
.
Now
()
.
Format
(
jsontime
.
LocalTimeFormat
))
if
err1
!=
nil
{
zap
.
L
()
.
Error
(
err1
.
Error
())
return
}
if
cronRedisWorkOrder
.
PointTime
==
times
.
Unix
()
{
var
pushObj
request
.
PushObj
err
=
json
.
Unmarshal
([]
byte
(
cronRedisWorkOrder
.
PushObj
),
&
pushObj
)
if
err
!=
nil
{
zap
.
L
()
.
Error
(
err
.
Error
())
continue
}
var
phones
[]
string
for
_
,
v1
:=
range
pushObj
.
UserObj
{
phones
=
append
(
phones
,
v1
.
Phone
)
}
switch
pushObj
.
PushMethod
{
case
1
:
//发送钉钉消息
err
=
WorkOrderPushDingTalkMsg
(
cronRedisWorkOrder
.
OrderName
,
cronRedisWorkOrder
.
OrderLevel
,
phones
)
if
err
!=
nil
{
zap
.
L
()
.
Error
(
err
.
Error
())
}
case
2
:
//发送短信
err
=
WorkOrderPushNoteMsg
(
cronRedisWorkOrder
.
OrderName
,
phones
,
cronRedisWorkOrder
.
OrderLevel
)
if
err
!=
nil
{
zap
.
L
()
.
Error
(
err
.
Error
())
}
case
3
:
//发送钉钉消息
err
=
WorkOrderPushDingTalkMsg
(
cronRedisWorkOrder
.
OrderName
,
cronRedisWorkOrder
.
OrderLevel
,
phones
)
if
err
!=
nil
{
zap
.
L
()
.
Error
(
err
.
Error
())
}
//发送短信
err
=
WorkOrderPushNoteMsg
(
cronRedisWorkOrder
.
OrderName
,
phones
,
cronRedisWorkOrder
.
OrderLevel
)
if
err
!=
nil
{
zap
.
L
()
.
Error
(
err
.
Error
())
}
}
//删除redis
err
=
redis
.
LRem
(
conf
.
WorkOrderPush
,
v
)
if
err
!=
nil
{
zap
.
L
()
.
Error
(
err
.
Error
())
}
}
}
}
}()
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment