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
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
Show 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 (
FinalHeartBeatUnixKey
=
"FinalHeartBeatUnix"
AutoExecHistory
=
"AutoExecHistory"
TaskExecLog
=
"TaskExecLog"
WorkOrderPush
=
"WorkOrderPush"
)
src/main.go
View file @
add99f25
...
...
@@ -2,6 +2,7 @@ package main
import
(
"fmt"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/service"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/service/cron"
"net/http"
"os"
...
...
@@ -46,7 +47,7 @@ func main() {
//启动定时任务
cron
.
StartCron
()
service
.
PushWorkOrderMessage
()
// server start...
conf
.
Logger
.
Error
(
"server start err"
,
zap
.
Error
(
newServer
()
.
ListenAndServe
()))
}
...
...
src/service/cron/common.go
View file @
add99f25
...
...
@@ -9,5 +9,7 @@ func StartCron() {
c
:=
cron
.
New
()
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 (
"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/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"
"go.uber.org/zap"
"strings"
...
...
@@ -359,27 +360,27 @@ func (w *WorkOrderManageSvc) PushWorkOrderManage(req request.PushWorkOrderReq) (
switch
req
.
PushObj
.
PushMethod
{
case
1
:
//发送钉钉消息
err
=
w
.
WorkOrderPushDingTalkMsg
(
workOrder
.
OrderName
,
workOrder
.
OrderLevel
,
phones
)
err
=
WorkOrderPushDingTalkMsg
(
workOrder
.
OrderName
,
workOrder
.
OrderLevel
,
phones
)
if
err
!=
nil
{
session
.
Rollback
()
return
}
case
2
:
//发送短信
err
=
w
.
WorkOrderPushNoteMsg
(
workOrder
.
OrderName
,
phones
,
workOrder
.
OrderLevel
)
err
=
WorkOrderPushNoteMsg
(
workOrder
.
OrderName
,
phones
,
workOrder
.
OrderLevel
)
if
err
!=
nil
{
session
.
Rollback
()
return
}
case
3
:
//发送钉钉消息
err
=
w
.
WorkOrderPushDingTalkMsg
(
workOrder
.
OrderName
,
workOrder
.
OrderLevel
,
phones
)
err
=
WorkOrderPushDingTalkMsg
(
workOrder
.
OrderName
,
workOrder
.
OrderLevel
,
phones
)
if
err
!=
nil
{
session
.
Rollback
()
return
}
//发送短信
err
=
w
.
WorkOrderPushNoteMsg
(
workOrder
.
OrderName
,
phones
,
workOrder
.
OrderLevel
)
err
=
WorkOrderPushNoteMsg
(
workOrder
.
OrderName
,
phones
,
workOrder
.
OrderLevel
)
if
err
!=
nil
{
session
.
Rollback
()
return
...
...
@@ -648,7 +649,7 @@ func (w *WorkOrderManageSvc) ListWorkOrderMe(req request.ListWorkOrderReq) (tota
}
// 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
{
AccessToken
:
conf
.
Options
.
OrderDingTalkAccessToken
,
//"203fe1644b446bba0a34e6e622c523d39ee9916fdad94b9c64224449f659e20b",
Secret
:
conf
.
Options
.
OrderDingTalkSecret
,
//"SECa73d8372e336451c9daf29a99f750ee1bdd170c1dab910eab9cd06d729a831b7",
...
...
@@ -674,7 +675,7 @@ func (w *WorkOrderManageSvc) WorkOrderPushDingTalkMsg(orderName string, orderLev
}
// 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
)
if
err
!=
nil
{
conf
.
Logger
.
Error
(
"dysmsapi client error"
,
zap
.
Error
(
err
))
...
...
@@ -713,3 +714,195 @@ func (w *WorkOrderManageSvc) WorkOrderPushNoteMsg(orderName string, phone []stri
fmt
.
Printf
(
"response is %#v
\n
"
,
req
)
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