diff --git a/src/bean/entity/work_order.go b/src/bean/entity/work_order.go index 87aba387f7f8f206fbc269b6096a3bbe2feca95d..a99928366d47797f959e5550c0cfea06fbc83b79 100644 --- a/src/bean/entity/work_order.go +++ b/src/bean/entity/work_order.go @@ -17,3 +17,24 @@ type WorkOrder struct { UpdateUser string `json:"update_user" xorm:"update_user"` // 修改人 UpdateTime time.Time `json:"update_time" xorm:"update_time" ` // 修改时间 } + +type WorkOrderIssuance struct { + Id int `json:"id" xorm:"pk autoincr" ` // id + OrderId int `json:"order_id" xorm:"order_id"` // 工单id + PushObj string `json:"push_obj" xorm:"push_obj"` // 下发对象 + OrderState int `json:"order_state" xorm:"order_state"` // 工单状态(1待处置 2已完成 3已关闭) + ReasonClosure string `json:"reason_closure" xorm:"reason_closure"` // 关闭原因 + CreateUser string `json:"create_user" xorm:"create_user" ` // 创建人 + CreateTime time.Time `json:"create_time" xorm:"create_time" ` // 创建时间 + CompleteTime time.Time `json:"complete_time" xorm:"complete_time" ` // 完成时间 +} + +type WorkOrderMe struct { + Id int `json:"id" xorm:"pk autoincr" ` // id + OrderId int `json:"order_id" xorm:"order_id"` // 工单id + OrderIssuanceId int `json:"order_issuance_id" xorm:"order_issuance_id"` // 工单下发表id + SystemAccount string `json:"system_account" xorm:"system_account"` // 用户账号 + OrderState int `json:"order_state" xorm:"order_state"` // 工单状态(1待处置 2已完成 3已关闭) + CompleteTime time.Time `json:"complete_time" xorm:"complete_time" ` // 完成时间 + ResultFeedback string `json:"result_feedback" xorm:"result_feedback" ` // 结果反馈 +} diff --git a/src/bean/vo/request/work_order.go b/src/bean/vo/request/work_order.go new file mode 100644 index 0000000000000000000000000000000000000000..7eb26279517db0916e5f6166280c7540dfbaef67 --- /dev/null +++ b/src/bean/vo/request/work_order.go @@ -0,0 +1,91 @@ +package request + +type AddWorkOrderReq struct { + OrderName string `json:"order_name" binding:"required"` // 工单名称 + OrderLevel int `json:"order_level" binding:"oneof=1 2 3"` // 工单等级(1紧急任务 2重要任务 3一般任务) + OrderDesc string `json:"order_desc" binding:"required"` // 工单描述 + PushObj PushObj `json:"push_obj" binding:"required,dive"` // 推送对象 + TimingType int `json:"timing_type" binding:"oneof=1 2 3"` // 定时类型(1手动下发 2按周 3自定义时间) + TimingWeekly TimingWeekly `json:"timing_weekly"` // 按周规则 + TimingCustom []TimingCustom `json:"timing_custom"` // 自定义时间规则 +} + +// 推送对象 +type PushObj struct { + PushMethod int `json:"push_method" binding:"oneof=1 2 3"` // 推送方式(1钉钉 2短信 3all) + UserObj []UserObj `json:"user_obj" binding:"oneof=1 2 3,dive"` // 用户对象 +} +type UserObj struct { + SystemAccount string `json:"system_account" binding:"required"` // 账号 + UserName string `json:"user_name"` // 姓名 + Phone string `json:"phone"` // 联系方式 +} + +// 按周 +type TimingWeekly struct { + Week []int `json:"week"` // 周日期(1周一 2周二 3周三 4周四 5周五 6周六 7周日) + PointTime string `json:"point_time"` // 时间点 +} + +// 自定义 +type TimingCustom struct { + DateFrom string `json:"date_from"` // 日期从 + DateTo string `json:"date_to"` // 日期至 + PointTime string `json:"point_time"` // 时间点 +} + +type EditWorkOrderReq struct { + Id int `json:"id" binding:"required"` // 主键id + OrderLevel int `json:"order_level" binding:"oneof=1 2 3"` // 工单等级(1紧急任务 2重要任务 3一般任务) + OrderDesc string `json:"order_desc" binding:"required"` // 工单描述 + PushObj PushObj `json:"push_obj" binding:"required,dive"` // 推送对象 + TimingType int `json:"timing_type" binding:"oneof=1 2 3"` // 定时类型(1手动下发 2按周 3自定义时间) + TimingWeekly TimingWeekly `json:"timing_weekly"` // 按周规则 + TimingCustom []TimingCustom `json:"timing_custom"` // 自定义时间规则 +} + +type StateWorkOrderReq struct { + Id int `json:"id" binding:"required"` // 主键id + TimingState int `json:"timing_state" binding:"oneof=0 1"` // 定时状态(0禁用 1启用) +} + +type DelWorkOrderReq struct { + Id []int `json:"id" binding:"required"` // 主键ID +} + +type ListWorkOrderManageReq struct { + Search string `json:"search" form:"search"` //关键词 + OrderLevel int `json:"order_level" form:"order_level" binding:"oneof=0 1 2 3"` //工单等级(0全部 1紧急任务 2重要任务 3一般任务) + TimingType int `json:"timing_type" form:"timing_type" binding:"oneof=0 1 2 3"` //定时类型(0全部 1手动下发 2按周 3自定义时间) + CreateDateFrom string `json:"create_date_from" form:"create_date_from" ` // 创建时间从 + CreateDateTo string `json:"create_date_to" form:"create_date_to" ` // 创建时间至 + Pagination +} + +type PushWorkOrderReq struct { + Id int `json:"id" binding:"required"` // 主键id + PushObj PushObj `json:"push_obj" binding:"required,dive"` // 推送对象 +} + +type CloseWorkOrderReq struct { + Id int `json:"id" binding:"required"` // 主键id + ReasonClosure string `json:"reason_closure" binding:"required"` // 关闭原因 +} + +type ListWorkOrderReq struct { + Search string `json:"search" form:"search"` //关键词 + OrderLevel int `json:"order_level" form:"order_level" binding:"oneof=0 1 2 3"` //工单等级(0全部 1紧急任务 2重要任务 3一般任务) + OrderState int `json:"order_state" form:"order_state" binding:"oneof=0 1 2 3"` //工单状态(0全部 1待处置 2已完成 3已关闭) + CreateDateFrom string `json:"create_date_from" form:"create_date_from" ` // 创建时间从 + CreateDateTo string `json:"create_date_to" form:"create_date_to" ` // 创建时间至 + CompleteTimeFrom string `json:"complete_time_from" form:"complete_time_from" ` // 完成时间从 + CompleteTimeTo string `json:"complete_time_to" form:"complete_time_to" ` // 完成时间至 + Id int `json:"id" form:"id" ` // 工单管理主键id + Pagination +} + +type FeedbackWorkOrderReq struct { + Id int `json:"id" binding:"required"` // 主键id + OrderIssuanceId int `json:"order_issuance_id" binding:"required"` // 下发工单表id + ResultFeedback string `json:"result_feedback" binding:"required"` // 结果反馈 +} diff --git a/src/bean/vo/response/work_order.go b/src/bean/vo/response/work_order.go new file mode 100644 index 0000000000000000000000000000000000000000..abca7459051ef1820156b4bece4346e10ffd7829 --- /dev/null +++ b/src/bean/vo/response/work_order.go @@ -0,0 +1,97 @@ +package response + +import ( + "gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/vo/request" + "time" +) + +type WorkOrderRes struct { + Id int `json:"id"` // 主键id + OrderName string `json:"order_name"` // 工单名称 + OrderLevel int `json:"order_level"` // 工单等级(1紧急任务 2重要任务 3一般任务) + OrderDesc string `json:"order_desc"` // 工单描述 + PushObj request.PushObj `json:"push_obj" ` // 推送对象 + TimingState int `json:"timing_state"` // 定时状态(0禁用 1启用) + TimingType int `json:"timing_type"` // 定时类型(1手动下发 2按周 3自定义时间) + TimingRule interface{} `json:"timing_rule"` // 定时规则 + CreateUser string `json:"create_user"` // 创建人 + CreateTime time.Time `json:"create_time"` // 创建时间 + UpdateUser string `json:"update_user"` // 修改人 + UpdateTime time.Time `json:"update_time"` // 修改时间 +} + +type WorkOrderListRes struct { + Id int `json:"id"` // 主键id + OrderName string `json:"order_name"` // 工单名称 + OrderLevel int `json:"order_level"` // 工单等级(1紧急任务 2重要任务 3一般任务) + OrderCnt int `json:"order_cnt"` // 实例工单数 + PushObj string `json:"push_obj" ` // 推送对象 + TimingType int `json:"timing_type"` // 定时类型(1手动下发 2按周 3自定义时间) + TimingState int `json:"timing_state"` // 定时状态(0禁用 1启用) + CreateUser string `json:"create_user"` // 创建人 + CreateTime time.Time `json:"create_time"` // 创建时间 +} + +type WorkOrderIssuanceListRes struct { + Id int `json:"id"` // 主键id + OrderId int `json:"order_id"` // 工单id + OrderName string `json:"order_name"` // 工单名称 + OrderLevel int `json:"order_level"` // 工单等级(1紧急任务 2重要任务 3一般任务) + OrderState int `json:"order_state"` // 工单状态(1待处置 2已完成 3已关闭) + PushObj string `json:"push_obj" ` // 推送对象 + CreateUser string `json:"create_user"` // 创建人 + CreateTime string `json:"create_time"` // 创建时间 + CompleteTime string `json:"complete_time"` // 完成时间 + StateCnt int `json:"state_cnt"` // 完成数量 + AllCnt int `json:"all_cnt"` // 全部数量 +} + +type WorkOrderIssuanceRes struct { + Id int `json:"id"` // 主键id + OrderId int `json:"order_id"` // 工单id + OrderName string `json:"order_name"` // 工单名称 + OrderLevel int `json:"order_level"` // 工单等级(1紧急任务 2重要任务 3一般任务) + OrderDesc string `json:"order_desc"` // 工单描述 + OrderState int `json:"order_state"` // 工单状态(1待处置 2已完成 3已关闭) + PushObj request.PushObj `json:"push_obj" ` // 推送对象 + CreateUser string `json:"create_user"` // 创建人 + CreateTime string `json:"create_time"` // 创建时间 + CompleteTime string `json:"complete_time"` // 完成时间 + WorkOrderMe []WorkOrderMe `json:"work_order_me"` // 工单反馈 +} + +type WorkOrderIssuance struct { + Id int `json:"id"` // 主键id + OrderId int `json:"order_id"` // 工单id + OrderName string `json:"order_name"` // 工单名称 + OrderLevel int `json:"order_level"` // 工单等级(1紧急任务 2重要任务 3一般任务) + OrderDesc string `json:"order_desc"` // 工单描述 + OrderState int `json:"order_state"` // 工单状态(1待处置 2已完成 3已关闭) + PushObj string `json:"push_obj" ` // 推送对象 + CreateUser string `json:"create_user"` // 创建人 + CreateTime string `json:"create_time"` // 创建时间 + CompleteTime string `json:"complete_time"` // 完成时间 +} + +type WorkOrderMe struct { + Id int `json:"id"` // id + OrderId int `json:"order_id"` // 工单id + OrderIssuanceId int `json:"order_issuance_id"` // 工单下发表id + SystemAccount string `json:"system_account"` // 用户账号 + OrderState int `json:"order_state"` // 工单状态(1待处置 2已完成 3已关闭) + CompleteTime string `json:"complete_time"` // 完成时间 + ResultFeedback string `json:"result_feedback"` // 结果反馈 +} + +type WorkOrderMeListRes struct { + Id int `json:"id"` // 主键id + OrderId int `json:"order_id"` // 工单id + OrderIssuanceId int `json:"order_issuance_id"` // 工单下发表id + OrderName string `json:"order_name"` // 工单名称 + OrderLevel int `json:"order_level"` // 工单等级(1紧急任务 2重要任务 3一般任务) + OrderState int `json:"order_state"` // 工单状态(1待处置 2已完成 3已关闭) + PushObj string `json:"push_obj" ` // 推送对象 + CreateUser string `json:"create_user"` // 创建人 + CreateTime string `json:"create_time"` // 创建时间 + CompleteTime string `json:"complete_time"` // 完成时间 +} diff --git a/src/controller/work_order_manage.go b/src/controller/work_order_manage.go index a4afe15cc445dab2c9e99002d4548b87a0cc9181..9139253be708cf705690bbfbf1077083ecdbb3d1 100644 --- a/src/controller/work_order_manage.go +++ b/src/controller/work_order_manage.go @@ -1,114 +1,244 @@ package controller import ( + "errors" "github.com/gin-gonic/gin" + "github.com/spf13/cast" + "gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/vo/request" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/pkg/beagle/resp" + "gitlab.wodcloud.com/smart-operation/so-operation-api/src/service" + "gitlab.wodcloud.com/smart-operation/so-operation-api/src/util" ) // AddWorkOrderManage 新增业务工单管理 func AddWorkOrderManage(c *gin.Context) { - //var req request.AddTaskManageReq - //if err := c.ShouldBindJSON(&req); err != nil { - // SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) - // return - //} - ////参数校验 - //if err := util.ValidateSimple(req, "TaskName,HostGroupId"); err != nil { - // SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) - // return - //} - // - //taskManageSvc := service.TaskManageSvc{} - //err := taskManageSvc.AddTaskManage(req) - //if err != nil { - // SendJsonResponse(c, err, nil) - // return - //} + var req request.AddWorkOrderReq + if err := c.ShouldBindJSON(&req); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + + workOrderManageSvc := service.WorkOrderManageSvc{} + err := workOrderManageSvc.AddWorkOrderManage(req) + if err != nil { + SendJsonResponse(c, err, nil) + return + } + SendJsonResponse(c, resp.OK, nil) +} + +// EditWorkOrderManage 编辑业务工单管理 +func EditWorkOrderManage(c *gin.Context) { + var req request.EditWorkOrderReq + if err := c.ShouldBindJSON(&req); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + //参数校验 + if err := util.ValidateSimple(req, "Id,HostGroupId"); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + + workOrderManageSvc := service.WorkOrderManageSvc{} + err := workOrderManageSvc.EditWorkOrderManage(req) + if err != nil { + SendJsonResponse(c, err, nil) + return + } SendJsonResponse(c, resp.OK, nil) } -// -//// EditTaskManage 编辑任务 -//func EditTaskManage(c *gin.Context) { -// var req request.EditTaskManageReq -// if err := c.ShouldBindJSON(&req); err != nil { -// SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) -// return -// } -// //参数校验 -// if err := util.ValidateSimple(req, "Id,HostGroupId"); err != nil { -// SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) -// return -// } -// -// taskManageSvc := service.TaskManageSvc{} -// err := taskManageSvc.EditTaskManage(req) -// if err != nil { -// SendJsonResponse(c, err, nil) -// return -// } -// SendJsonResponse(c, resp.OK, nil) -//} -// -//// DelTaskManage 删除任务 -//func DelTaskManage(c *gin.Context) { -// var req request.DelTaskManageReq -// if err := c.ShouldBindJSON(&req); err != nil { -// SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) -// return -// } -// //参数校验 -// if err := util.ValidateSimple(req, "Id"); err != nil { -// SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) -// return -// } -// -// taskManageSvc := service.TaskManageSvc{} -// err := taskManageSvc.DelTaskManage(req) -// if err != nil { -// SendJsonResponse(c, err, nil) -// return -// } -// SendJsonResponse(c, resp.OK, nil) -//} -// -//// DetailsTaskManage 任务详情 -//func DetailsTaskManage(c *gin.Context) { -// var ( -// err error -// id string -// ) -// -// if id = c.Query("id"); id == "" { -// id = c.Param("id") -// } -// if id == "" { -// SendJsonResponse(c, resp.InvalidParam.WithError(errors.New("id为空")), nil) -// return -// } -// -// taskManageSvc := service.TaskManageSvc{} -// data, err := taskManageSvc.DetailsTaskManage(cast.ToInt(id)) -// if err != nil { -// SendJsonResponse(c, err, nil) -// return -// } -// SendJsonResponse(c, resp.OK, data) -//} -// -//// ListTaskManage 任务列表 -//func ListTaskManage(c *gin.Context) { -// var req request.ListTaskManageReq -// if err := c.ShouldBind(&req); err != nil { -// SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) -// return -// } -// -// taskManageSvc := service.TaskManageSvc{} -// total, list, err := taskManageSvc.ListTaskManage(req) -// if err != nil { -// SendJsonPageResponse(c, err, nil, 0) -// return -// } -// SendJsonPageResponse(c, resp.OK, list, total) -//} +// StateWorkOrderManage 定时是否启用 +func StateWorkOrderManage(c *gin.Context) { + var req request.StateWorkOrderReq + if err := c.ShouldBindJSON(&req); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + //参数校验 + if err := util.ValidateSimple(req, "Id,HostGroupId"); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + + workOrderManageSvc := service.WorkOrderManageSvc{} + err := workOrderManageSvc.StateWorkOrderManage(req) + if err != nil { + SendJsonResponse(c, err, nil) + return + } + SendJsonResponse(c, resp.OK, nil) +} + +// DelWorkOrderManage 删除 +func DelWorkOrderManage(c *gin.Context) { + var req request.DelWorkOrderReq + if err := c.ShouldBindJSON(&req); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + //参数校验 + if err := util.ValidateSimple(req, "Id"); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + + workOrderManageSvc := service.WorkOrderManageSvc{} + err := workOrderManageSvc.DelWorkOrderManage(req) + if err != nil { + SendJsonResponse(c, err, nil) + return + } + SendJsonResponse(c, resp.OK, nil) +} + +// DetailsWorkOrderManage 详情 +func DetailsWorkOrderManage(c *gin.Context) { + var ( + err error + id string + ) + + if id = c.Query("id"); id == "" { + id = c.Param("id") + } + if id == "" { + SendJsonResponse(c, resp.InvalidParam.WithError(errors.New("id为空")), nil) + return + } + + workOrderManageSvc := service.WorkOrderManageSvc{} + data, err := workOrderManageSvc.DetailsWorkOrderManage(cast.ToInt(id)) + if err != nil { + SendJsonResponse(c, err, nil) + return + } + SendJsonResponse(c, resp.OK, data) +} + +// ListWorkOrderManage 列表 +func ListWorkOrderManage(c *gin.Context) { + var req request.ListWorkOrderManageReq + if err := c.ShouldBind(&req); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + + workOrderManageSvc := service.WorkOrderManageSvc{} + total, list, err := workOrderManageSvc.ListWorkOrderManage(req) + if err != nil { + SendJsonPageResponse(c, err, nil, 0) + return + } + SendJsonPageResponse(c, resp.OK, list, total) +} + +// PushWorkOrderManage 手动下发 +func PushWorkOrderManage(c *gin.Context) { + var req request.PushWorkOrderReq + if err := c.ShouldBindJSON(&req); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + + workOrderManageSvc := service.WorkOrderManageSvc{} + err := workOrderManageSvc.PushWorkOrderManage(req) + if err != nil { + SendJsonResponse(c, err, nil) + return + } + SendJsonResponse(c, resp.OK, nil) +} + +// CloseWorkOrderIssuance 关闭工单 +func CloseWorkOrderIssuance(c *gin.Context) { + var req request.CloseWorkOrderReq + if err := c.ShouldBindJSON(&req); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + + workOrderManageSvc := service.WorkOrderManageSvc{} + err := workOrderManageSvc.CloseWorkOrderIssuance(req) + if err != nil { + SendJsonResponse(c, err, nil) + return + } + SendJsonResponse(c, resp.OK, nil) +} + +// ListWorkOrderIssuance 业务工单下发列表 +func ListWorkOrderIssuance(c *gin.Context) { + var req request.ListWorkOrderReq + if err := c.ShouldBind(&req); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + + workOrderManageSvc := service.WorkOrderManageSvc{} + total, list, err := workOrderManageSvc.ListWorkOrderIssuance(req) + if err != nil { + SendJsonPageResponse(c, err, nil, 0) + return + } + SendJsonPageResponse(c, resp.OK, list, total) +} + +// DetailsWorkOrderIssuance 业务工单下发详情 +func DetailsWorkOrderIssuance(c *gin.Context) { + var ( + err error + id string + ) + + if id = c.Query("id"); id == "" { + id = c.Param("id") + } + if id == "" { + SendJsonResponse(c, resp.InvalidParam.WithError(errors.New("id为空")), nil) + return + } + + workOrderManageSvc := service.WorkOrderManageSvc{} + data, err := workOrderManageSvc.DetailsWorkOrderIssuance(cast.ToInt(id)) + if err != nil { + SendJsonResponse(c, err, nil) + return + } + SendJsonResponse(c, resp.OK, data) +} + +// FeedbackWorkOrderMe 处置反馈 +func FeedbackWorkOrderMe(c *gin.Context) { + var req request.FeedbackWorkOrderReq + if err := c.ShouldBindJSON(&req); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + + workOrderManageSvc := service.WorkOrderManageSvc{} + err := workOrderManageSvc.FeedbackWorkOrderMe(req) + if err != nil { + SendJsonResponse(c, err, nil) + return + } + SendJsonResponse(c, resp.OK, nil) +} + +// ListWorkOrderMe 我的业务工单列表 +func ListWorkOrderMe(c *gin.Context) { + var req request.ListWorkOrderReq + if err := c.ShouldBind(&req); err != nil { + SendJsonResponse(c, resp.InvalidParam.WithError(err), nil) + return + } + + workOrderManageSvc := service.WorkOrderManageSvc{} + total, list, err := workOrderManageSvc.ListWorkOrderMe(req) + if err != nil { + SendJsonPageResponse(c, err, nil, 0) + return + } + SendJsonPageResponse(c, resp.OK, list, total) +} diff --git a/src/pkg/beagle/resp/code.go b/src/pkg/beagle/resp/code.go index 492dadfafa75937fcedc9db9f8579f9fa0e9179b..665c4b700ad26d819168796cfcb3f3eda8181896 100644 --- a/src/pkg/beagle/resp/code.go +++ b/src/pkg/beagle/resp/code.go @@ -26,16 +26,15 @@ var ( DbSessionStartError = Resp{Code: 5010007, Msg: "数据库事务开启失败"} DbDataCheckError = Resp{Code: 5010008, Msg: "数据去重验证失败"} EsConnectError = Resp{Code: 5010009, Msg: "es连接失败"} - AddSheetError = Resp{Code: 5010010, Msg: "新建sheet失败"} - UnableAccountLock = Resp{Code: 5010011, Msg: "暂无账号锁定"} - CmdExecError = Resp{Code: 5010012, Msg: "执行shell命令失败"} - FileExecError = Resp{Code: 5010013, Msg: "文件执行失败"} - YamlAnalysisError = Resp{Code: 5010014, Msg: "yaml解析错误"} - MarshalError = Resp{Code: 5010015, Msg: "文件解析错误"} - // 文件上传 - UploadFileError = Resp{Code: 6000001, Msg: "文件上传失败"} - GetFileStreamError = Resp{Code: 6000002, Msg: "获取文件流失败"} - ReadFileError = Resp{Code: 6000003, Msg: "读取文件失败"} - FailedToParseFile = Resp{Code: 6000004, Msg: "解析文件失败"} + AddSheetError = Resp{Code: 5000001, Msg: "新建sheet失败"} + UnableAccountLock = Resp{Code: 5000002, Msg: "暂无账号锁定"} + CmdExecError = Resp{Code: 5000003, Msg: "执行shell命令失败"} + FileExecError = Resp{Code: 5000004, Msg: "文件执行失败"} + YamlAnalysisError = Resp{Code: 5000005, Msg: "yaml解析错误"} + MarshalError = Resp{Code: 5000006, Msg: "文件解析错误"} + UploadFileError = Resp{Code: 5000007, Msg: "文件上传失败"} + GetFileStreamError = Resp{Code: 5000008, Msg: "获取文件流失败"} + ReadFileError = Resp{Code: 5000009, Msg: "读取文件失败"} + FailedToParseFile = Resp{Code: 5000010, Msg: "解析文件失败"} ) diff --git a/src/router/workorderrouter.go b/src/router/workorderrouter.go index 4bc2d3e12bede546d2ba77bc3dab0bc9a83e1907..876de208a02e88f2328e50307bbf8f16d0d03235 100644 --- a/src/router/workorderrouter.go +++ b/src/router/workorderrouter.go @@ -13,33 +13,27 @@ func InitWorkOrderRouter(e *gin.Engine) { //业务工单管理 manage := so.Group("/work_order_manage") { - manage.POST("/add", controller.AddWorkOrderManage) // 新增 - //manage.PUT("/edit", controller.EditTaskManage) // 编辑 - //manage.DELETE("/del", controller.DelTaskManage) // 删除 - //manage.GET("/details", controller.DetailsTaskManage) // 详情 - //manage.GET("/list", controller.ListTaskManage) // 列表 - //manage.POST("/exec/script", controller.ExecScript) // 立即执行 + manage.POST("/add", controller.AddWorkOrderManage) // 新增 + manage.PUT("/edit", controller.EditWorkOrderManage) // 编辑 + manage.PUT("/state", controller.StateWorkOrderManage) // 定时是否启用 + manage.DELETE("/del", controller.DelWorkOrderManage) // 删除 + manage.GET("/details", controller.DetailsWorkOrderManage) // 详情 + manage.GET("/list", controller.ListWorkOrderManage) // 列表 + manage.POST("/push", controller.PushWorkOrderManage) // 手动下发 } - ////任务历史 - //taskHistory := so.Group("/task_history") - //{ - // taskHistory.GET("/list", controller.TaskHistoryList) // 任务历史列表 - // taskHistory.GET("/task_info_list", controller.TaskInfoList) // 任务历史详情列表 - // taskHistory.GET("/task_exec_log", controller.TaskExecLog) // 任务执行日志 - //} - // - ////主机管理 - //host := so.Group("/host_manage") - //{ - // host.POST("/add", controller.AddHostManage) // 新增 - // host.PUT("/edit", controller.EditHostManage) // 编辑 - // host.DELETE("/del", controller.DelHostManage) // 删除 - // host.GET("/details", controller.DetailsHostManage) // 详情 - // host.GET("/page_list", controller.PageListHostManage) // 列表 - // host.POST("/state", controller.StateHostManage) // 状态检测 - // host.GET("/ip_exception_list", controller.HostIpExceptionList) // 主机ip异常列表 - // host.GET("/export", controller.ExportIp) // 导出ip列表 - // host.GET("/list", controller.ListHostManage) // 主机分组列表-不分页 - //} + //业务工单列表 + list := so.Group("/work_order_issuance") + { + list.PUT("/close", controller.CloseWorkOrderIssuance) // 关闭工单 + list.GET("/list", controller.ListWorkOrderIssuance) // 业务工单下发列表 + list.GET("/details", controller.DetailsWorkOrderIssuance) // 业务工单下发详情 + } + + //我的业务工单 + me := so.Group("/work_order_me") + { + me.PUT("/feedback", controller.FeedbackWorkOrderMe) // 处置反馈 + me.GET("/list", controller.ListWorkOrderMe) // 我的业务工单列表 + } } diff --git a/src/service/work_order.go b/src/service/work_order.go new file mode 100644 index 0000000000000000000000000000000000000000..6a9817fc8f237d44ba6c8d7980f1ff3561528003 --- /dev/null +++ b/src/service/work_order.go @@ -0,0 +1,567 @@ +package service + +import ( + "errors" + "fmt" + json "github.com/json-iterator/go" + "gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/entity" + "gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/vo/request" + "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/pkg/beagle/resp" + "time" +) + +type WorkOrderManageSvc struct { + User *entity.SystemUser +} + +// AddWorkOrderManage 新增业务工单 +func (w *WorkOrderManageSvc) AddWorkOrderManage(req request.AddWorkOrderReq) (err error) { + var timingWeekly, timingCustom, pushObj []byte + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + // 校验 工单名称 是否重复 + has, err := db.Table("work_order_manage").Where("order_name = ?", req.OrderName).Exist() + if has { + err = resp.DbDataCheckError.WithError(errors.New("工单名称重复")) + return + } + if err != nil { + err = resp.DbSelectError.WithError(err) + return + } + + pushObj, err = json.Marshal(req.PushObj) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + + workOrder := entity.WorkOrder{ + OrderName: req.OrderName, + OrderLevel: req.OrderLevel, + OrderDesc: req.OrderDesc, + PushObj: fmt.Sprintf("%s", pushObj), + TimingType: req.TimingType, + CreateUser: "", + CreateTime: time.Now(), + UpdateUser: "", + UpdateTime: time.Now(), + } + + if req.TimingType == 2 { + timingWeekly, err = json.Marshal(req.TimingWeekly) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + workOrder.TimingRule = fmt.Sprintf("%s", timingWeekly) + } else if req.TimingType == 3 { + timingCustom, err = json.Marshal(req.TimingCustom) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + workOrder.TimingRule = fmt.Sprintf("%s", timingCustom) + } + + _, err = db.Table("work_order_manage").Insert(&workOrder) + if err != nil { + err = resp.DbInsertError.WithError(err) + return + } + return +} + +// EditWorkOrderManage 编辑业务工单管理 +func (w *WorkOrderManageSvc) EditWorkOrderManage(req request.EditWorkOrderReq) (err error) { + var timingWeekly, timingCustom, pushObj []byte + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + pushObj, err = json.Marshal(req.PushObj) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + + workOrder := entity.WorkOrder{ + OrderLevel: req.OrderLevel, + OrderDesc: req.OrderDesc, + PushObj: fmt.Sprintf("%s", pushObj), + TimingType: req.TimingType, + UpdateUser: "", + UpdateTime: time.Now(), + } + if req.TimingType == 2 { + timingWeekly, err = json.Marshal(req.TimingWeekly) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + workOrder.TimingRule = fmt.Sprintf("%s", timingWeekly) + } else if req.TimingType == 3 { + timingCustom, err = json.Marshal(req.TimingCustom) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + workOrder.TimingRule = fmt.Sprintf("%s", timingCustom) + } + + _, err = db.Table("work_order_manage").Where("id = ?", req.Id). + Cols("order_level,order_desc,order_cnt,push_obj,timing_type,timing_rule").Update(&workOrder) + if err != nil { + err = resp.DbUpdateError.WithError(err) + return + } + return +} + +// StateWorkOrderManage 编辑业务工单管理 +func (w *WorkOrderManageSvc) StateWorkOrderManage(req request.StateWorkOrderReq) (err error) { + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + _, err = db.Table("work_order_manage").Where("id = ?", req.Id). + Cols("timing_state").Update(&entity.WorkOrder{TimingState: req.TimingState}) + if err != nil { + err = resp.DbUpdateError.WithError(err) + return + } + return +} + +// DelWorkOrderManage 删除 +func (w *WorkOrderManageSvc) DelWorkOrderManage(req request.DelWorkOrderReq) (err error) { + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + _, err = db.Table("work_order_manage").In("id", req.Id).Delete(&entity.WorkOrder{}) + if err != nil { + err = resp.DbDeleteError.WithError(err) + return + } + return +} + +// DetailsWorkOrderManage 详情 +func (w *WorkOrderManageSvc) DetailsWorkOrderManage(id int) (taskManageRes response.WorkOrderRes, err error) { + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + //查询任务详情 + var workOrder entity.WorkOrder + finder := db.Table("work_order_manage").Where("id = ?", id) + _, err = finder.Get(&workOrder) + if err != nil { + err = resp.DbSelectError.WithError(err) + return + } + + err = json.Unmarshal([]byte(workOrder.PushObj), &taskManageRes.PushObj) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + err = json.Unmarshal([]byte(workOrder.TimingRule), &taskManageRes.TimingRule) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + taskManageRes.Id = workOrder.Id + taskManageRes.OrderName = workOrder.OrderName + taskManageRes.OrderLevel = workOrder.OrderLevel + taskManageRes.OrderDesc = workOrder.OrderDesc + taskManageRes.TimingState = workOrder.TimingState + taskManageRes.TimingType = workOrder.TimingType + taskManageRes.CreateUser = workOrder.CreateUser + taskManageRes.CreateTime = workOrder.CreateTime + taskManageRes.UpdateUser = workOrder.UpdateUser + taskManageRes.UpdateUser = workOrder.UpdateUser + taskManageRes.UpdateTime = workOrder.UpdateTime + + return +} + +// ListWorkOrderManage 列表 +func (w *WorkOrderManageSvc) ListWorkOrderManage(req request.ListWorkOrderManageReq) (total int64, workOrderListRes []response.WorkOrderListRes, err error) { + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + finder := db.Table("work_order_manage") + if req.Search != "" { + finder.Where(fmt.Sprintf("order_name LIKE %s", "%"+req.Search+"%")) + } + if req.OrderLevel != 0 { + finder.Where("order_level = ?", req.OrderLevel) + } + if req.TimingType != 0 { + finder.Where("timing_type = ?", req.TimingType) + } + if req.CreateDateFrom != "" { + finder.Where("create_time >= ?", req.CreateDateFrom) + } + if req.CreateDateTo != "" { + finder.Where("create_time <= ?", req.CreateDateTo) + } + finder.OrderBy("create_time") + //查询任务 + total, err = finder.Select("id,order_name,order_level,order_cnt,push_obj,timing_type,timing_state,create_user,create_time"). + Limit(req.PageSize, (req.Page-1)*req.PageSize).FindAndCount(&workOrderListRes) + if err != nil { + err = resp.DbSelectError.WithError(err) + return + } + + for k, v := range workOrderListRes { + var pushObj request.PushObj + err = json.Unmarshal([]byte(v.PushObj), &pushObj) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + workOrderListRes[k].PushObj = pushObj.UserObj[0].UserName + for i := 1; i < len(pushObj.UserObj); i++ { + workOrderListRes[k].PushObj = workOrderListRes[k].PushObj + "、" + pushObj.UserObj[i].UserName + } + } + return +} + +// PushWorkOrderManage 手动下发 +func (w *WorkOrderManageSvc) PushWorkOrderManage(req request.PushWorkOrderReq) (err error) { + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + session := db.NewSession() + defer session.Close() + session.Begin() + + //pushObj := req.PushObj.UserObj[0].UserName + //for i := 1; i < len(req.PushObj.UserObj); i++ { + // pushObj = pushObj + "、" + req.PushObj.UserObj[i].UserName + //} + pushObj, err := json.Marshal(req.PushObj) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + + //新增 下发工单表 数据 + workOrderIssuance := entity.WorkOrderIssuance{ + OrderId: req.Id, + PushObj: fmt.Sprintf("%s", pushObj), + OrderState: 1, + CreateUser: "admin", + CreateTime: time.Now(), + } + _, err = session.Table("work_order_issuance").Insert(&workOrderIssuance) + if err != nil { + err = resp.DbInsertError.WithError(err) + session.Rollback() + return + } + for _, v := range req.PushObj.UserObj { + //新增 个人业务工单表 数据 + workOrderMe := entity.WorkOrderMe{ + OrderId: req.Id, + OrderIssuanceId: workOrderIssuance.Id, + SystemAccount: v.SystemAccount, + OrderState: 1, + } + _, err = session.Table("work_order_me").Insert(&workOrderMe) + if err != nil { + err = resp.DbInsertError.WithError(err) + session.Rollback() + return + } + } + + //发消息通知 czl.. + + //修改库表实例工单数 + _, err = session.Table("work_order_manage").Where("id = ?", req.Id).Incr("order_cnt").Update(&entity.WorkOrder{}) + if err != nil { + err = resp.DbUpdateError.WithError(err) + session.Rollback() + return + } + session.Commit() + return +} + +// CloseWorkOrderIssuance 关闭工单 +func (w *WorkOrderManageSvc) CloseWorkOrderIssuance(req request.CloseWorkOrderReq) (err error) { + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + session := db.NewSession() + defer session.Close() + session.Begin() + + //修改 下发工单表 数据 + _, err = session.Table("work_order_issuance").Where("id = ?", req.Id).Cols("order_state,reason_closure"). + Update(&entity.WorkOrderIssuance{ + OrderState: 3, + ReasonClosure: req.ReasonClosure, + }) + if err != nil { + err = resp.DbInsertError.WithError(err) + session.Rollback() + return + } + //修改 个人业务工单表 数据 + _, err = session.Table("work_order_me").Where("order_issuance_id = ?", req.Id).Cols("order_state"). + Update(&entity.WorkOrderMe{ + OrderState: 3, + }) + if err != nil { + err = resp.DbInsertError.WithError(err) + session.Rollback() + return + } + + session.Commit() + return +} + +// ListWorkOrderIssuance 业务工单下发列表 +func (w *WorkOrderManageSvc) ListWorkOrderIssuance(req request.ListWorkOrderReq) (total int64, workOrderIssuanceListRes []response.WorkOrderIssuanceListRes, err error) { + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + finder := db.Table("work_order_issuance").Alias("woi"). + Join("INNER", "work_order_manage wom", "woi.order_id = wom.id") + + if req.Search != "" { + finder.Where(fmt.Sprintf("wom.order_name LIKE %s", "%"+req.Search+"%")) + } + if req.OrderLevel != 0 { + finder.Where("wom.order_level = ?", req.OrderLevel) + } + if req.OrderState != 0 { + finder.Where("woi.order_state = ?", req.OrderState) + } + if req.CreateDateFrom != "" { + finder.Where("woi.create_time >= ?", req.CreateDateFrom) + } + if req.CreateDateTo != "" { + finder.Where("woi.create_time <= ?", req.CreateDateTo) + } + if req.CompleteTimeFrom != "" { + finder.Where("woi.complete_time <= ?", req.CompleteTimeFrom) + } + if req.CompleteTimeTo != "" { + finder.Where("woi.complete_time <= ?", req.CompleteTimeTo) + } + if req.Id != 0 { + finder.Where("wom.id = ?", req.Id) + } + finder.OrderBy("woi.create_time") + //查询任务 + total, err = finder.Select("woi.\"id\",woi.order_id,wom.order_name,wom.order_level,woi.order_state,woi.push_obj,woi.create_user,woi.create_time,woi.complete_time,"+ + "(select count(1) from work_order_me wome where wome.order_issuance_id = woi.id and wome.order_state = woi.order_state) as state_cnt,"+ + "(select count(1) from work_order_me wome where wome.order_issuance_id = woi.id) as all_cnt"). + Limit(req.PageSize, (req.Page-1)*req.PageSize).FindAndCount(&workOrderIssuanceListRes) + if err != nil { + err = resp.DbSelectError.WithError(err) + return + } + + for k, v := range workOrderIssuanceListRes { + var pushObj request.PushObj + err = json.Unmarshal([]byte(v.PushObj), &pushObj) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + workOrderIssuanceListRes[k].PushObj = pushObj.UserObj[0].UserName + for i := 1; i < len(pushObj.UserObj); i++ { + workOrderIssuanceListRes[k].PushObj = workOrderIssuanceListRes[k].PushObj + "、" + pushObj.UserObj[i].UserName + } + } + return +} + +// DetailsWorkOrderIssuance 业务工单下发详情 +func (w *WorkOrderManageSvc) DetailsWorkOrderIssuance(id int) (workOrderIssuanceRes response.WorkOrderIssuanceRes, err error) { + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + var workOrderIssuance response.WorkOrderIssuance + finder := db.Table("work_order_issuance").Alias("woi"). + Join("INNER", "work_order_manage wom", "woi.order_id = wom.ID").Where("woi.id = ?", id) + _, err = finder.Select("woi.\"id\",woi.order_id,wom.order_name,wom.order_level,wom.order_desc,woi.order_state,woi.push_obj,woi.create_user,woi.create_time,woi.complete_time"). + Get(&workOrderIssuance) + if err != nil { + err = resp.DbSelectError.WithError(err) + return + } + + //var workOrderMe entity.WorkOrderMe + finder1 := db.Table("work_order_me").Where("order_issuance_id = ?", id) + err = finder1.Find(&workOrderIssuanceRes.WorkOrderMe) + if err != nil { + err = resp.DbSelectError.WithError(err) + return + } + + err = json.Unmarshal([]byte(workOrderIssuance.PushObj), &workOrderIssuanceRes.PushObj) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + + workOrderIssuanceRes.Id = workOrderIssuance.Id + workOrderIssuanceRes.OrderId = workOrderIssuance.OrderId + workOrderIssuanceRes.OrderName = workOrderIssuance.OrderName + workOrderIssuanceRes.OrderLevel = workOrderIssuance.OrderLevel + workOrderIssuanceRes.OrderDesc = workOrderIssuance.OrderDesc + workOrderIssuanceRes.OrderState = workOrderIssuance.OrderState + workOrderIssuanceRes.CreateUser = workOrderIssuance.CreateUser + workOrderIssuanceRes.CreateTime = workOrderIssuance.CreateTime + workOrderIssuanceRes.CompleteTime = workOrderIssuance.CompleteTime + + return +} + +// FeedbackWorkOrderMe 处置反馈 +func (w *WorkOrderManageSvc) FeedbackWorkOrderMe(req request.FeedbackWorkOrderReq) (err error) { + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + session := db.NewSession() + defer session.Close() + session.Begin() + completeTime := time.Now() + //修改 个人业务工单表 数据 + _, err = session.Table("work_order_me").Where("id = ?", req.Id).Cols("order_state,result_feedback,complete_time"). + Update(&entity.WorkOrderMe{ + OrderState: 2, + ResultFeedback: req.ResultFeedback, + CompleteTime: completeTime, + }) + if err != nil { + err = resp.DbInsertError.WithError(err) + session.Rollback() + return + } + + //查询此工单是否已完成 + has, err := session.Table("work_order_me").Where("order_state = 1 AND order_issuance_id = ?", req.OrderIssuanceId).Exist() + if !has { + //修改 下发工单 数据 + _, err = session.Table("work_order_issuance").Where("id = ?", req.OrderIssuanceId).Cols("order_state,complete_time"). + Update(&entity.WorkOrderIssuance{ + OrderState: 2, + CompleteTime: completeTime, + }) + if err != nil { + err = resp.DbInsertError.WithError(err) + session.Rollback() + return + } + } + if err != nil { + err = resp.DbSelectError.WithError(err) + session.Rollback() + return + } + + session.Commit() + return +} + +// ListWorkOrderMe 我的业务工单列表 +func (w *WorkOrderManageSvc) ListWorkOrderMe(req request.ListWorkOrderReq) (total int64, workOrderMeListRes []response.WorkOrderMeListRes, err error) { + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + finder := db.Table("work_order_me").Alias("wome"). + Join("INNER", "work_order_issuance woi", "wome.order_issuance_id = woi.id"). + Join("INNER", "work_order_manage wom", "woi.order_id = wom.id") + + if req.Search != "" { + finder.Where(fmt.Sprintf("wom.order_name LIKE %s", "%"+req.Search+"%")) + } + if req.OrderLevel != 0 { + finder.Where("wom.order_level = ?", req.OrderLevel) + } + if req.OrderState != 0 { + finder.Where("wome.order_state = ?", req.OrderState) + } + if req.CreateDateFrom != "" { + finder.Where("woi.create_time >= ?", req.CreateDateFrom) + } + if req.CreateDateTo != "" { + finder.Where("woi.create_time <= ?", req.CreateDateTo) + } + if req.CompleteTimeFrom != "" { + finder.Where("wome.complete_time <= ?", req.CompleteTimeFrom) + } + if req.CompleteTimeTo != "" { + finder.Where("wome.complete_time <= ?", req.CompleteTimeTo) + } + finder.OrderBy("woi.create_time") + //查询任务 + total, err = finder.Select("wome.\"id\",wome.order_id,wome.order_issuance_id,wom.order_name,wom.order_level,"+ + "wome.order_state,woi.push_obj,woi.create_user,woi.create_time,wome.complete_time"). + Limit(req.PageSize, (req.Page-1)*req.PageSize).FindAndCount(&workOrderMeListRes) + if err != nil { + err = resp.DbSelectError.WithError(err) + return + } + + for k, v := range workOrderMeListRes { + var pushObj request.PushObj + err = json.Unmarshal([]byte(v.PushObj), &pushObj) + if err != nil { + err = resp.FAIL.WithError(err) + return + } + workOrderMeListRes[k].PushObj = pushObj.UserObj[0].UserName + for i := 1; i < len(pushObj.UserObj); i++ { + workOrderMeListRes[k].PushObj = workOrderMeListRes[k].PushObj + "、" + pushObj.UserObj[i].UserName + } + } + return +}