feat:完善项目
This commit is contained in:
@ -3,8 +3,14 @@ package work
|
||||
import (
|
||||
model2 "ArmedPolice/app/common/model"
|
||||
"ArmedPolice/app/controller/basic"
|
||||
"ArmedPolice/app/handle"
|
||||
"ArmedPolice/app/model"
|
||||
"ArmedPolice/app/service"
|
||||
"ArmedPolice/serve/orm"
|
||||
"ArmedPolice/utils"
|
||||
"errors"
|
||||
"gorm.io/gorm"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Instance struct{ *service.Session }
|
||||
@ -17,8 +23,40 @@ type (
|
||||
basic.CommonIDString
|
||||
*model.WorkInstanceInfo
|
||||
}
|
||||
// InstanceLaunchParams 发起参数信息
|
||||
InstanceLaunchParams struct {
|
||||
ID uint64
|
||||
Kind int // 类型
|
||||
Title string
|
||||
EquipmentID uint64 // 装备ID
|
||||
Breakdowns []uint64 // 故障类型
|
||||
PlateNumber string // 车牌号
|
||||
Priority, IsAssist int // 优先级,是否需要上级审批
|
||||
Remark string // 备注信息
|
||||
Material []*InstanceLaunchParamsForMaterial
|
||||
Distribution *InstanceLaunchParamsForDistribution
|
||||
}
|
||||
// InstanceLaunchParamsForMaterial 配件信息
|
||||
InstanceLaunchParamsForMaterial struct {
|
||||
}
|
||||
// InstanceLaunchParamsForDistribution 配送信息
|
||||
InstanceLaunchParamsForDistribution struct {
|
||||
Name, Mobile, Address string
|
||||
}
|
||||
)
|
||||
|
||||
func (c *Instance) publish(reviewer []string) {
|
||||
utils.TryCatch(func() {
|
||||
for _, v := range reviewer {
|
||||
// Socket通知
|
||||
service.HubMessage.EmitHandle(&service.HubEmit{
|
||||
ID: v,
|
||||
Msg: handle.NewWorkNotice("你有一条待办事项"),
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// List 列表信息
|
||||
func (c *Instance) List(materialID uint64, kind, page, pageSize int) (*basic.PageDataResponse, error) {
|
||||
mWorkInstance := model.NewWorkInstance()
|
||||
@ -55,7 +93,164 @@ func (c *Instance) ToDo() {
|
||||
}
|
||||
|
||||
// Launch 发起工单申请
|
||||
func (c *Instance) Launch() error {
|
||||
func (c *Instance) Launch(params *InstanceLaunchParams) error {
|
||||
// 查询产品信息是否存在
|
||||
mManageEquipment := model.NewManageEquipment()
|
||||
|
||||
var count int64
|
||||
|
||||
err := model2.Count(mManageEquipment.ManageEquipment, &count, model2.NewWhere("id", params.EquipmentID))
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
} else if count <= 0 {
|
||||
return errors.New("操作错误,该装备信息不存在或已被删除")
|
||||
}
|
||||
// 工单信息
|
||||
mWorkInstance := model.NewWorkInstance()
|
||||
mWorkInstance.Kind = model2.WorkInstanceKind(params.Kind)
|
||||
mWorkInstance.Title = params.Title
|
||||
mWorkInstance.EquipmentID = params.EquipmentID
|
||||
mWorkInstance.PlateNumber = params.PlateNumber
|
||||
mWorkInstance.Priority = model2.WorkInstancePriority(params.Priority)
|
||||
mWorkInstance.IsAssist = model2.WorkInstanceAssist(params.IsAssist)
|
||||
mWorkInstance.SetBreakdownAttribute(params.Breakdowns)
|
||||
mWorkInstance.SetDistributionAttribute(&model2.WorkInstanceDistribution{
|
||||
Name: params.Distribution.Name, Mobile: params.Distribution.Mobile, Address: params.Distribution.Address,
|
||||
})
|
||||
mWorkInstance.Remark = params.Remark
|
||||
// 工单流程信息
|
||||
mWorkProgress := model.NewWorkProgress()
|
||||
|
||||
// 查询工单进度流程
|
||||
// TODO:工单流程
|
||||
// 第一阶段:创建工单,默认创建时,直接完成
|
||||
mWorkSchedule := model.NewWorkSchedule()
|
||||
|
||||
isExist := false
|
||||
|
||||
if isExist, err = mWorkSchedule.FirstSchedule(); err != nil {
|
||||
return err
|
||||
} else if !isExist {
|
||||
return errors.New("操作错误,无工单流程信息,请先核实数据")
|
||||
}
|
||||
mWorkInstance.Schedule = mWorkSchedule.ID
|
||||
// 下一流程
|
||||
nextWorkSchedule := new(model.WorkScheduleInfo)
|
||||
|
||||
if nextWorkSchedule, err = mWorkSchedule.NextSchedule(mWorkInstance.IsAssist == model2.WorkInstanceAssistForYes); err != nil {
|
||||
return err
|
||||
}
|
||||
if nextWorkSchedule == nil {
|
||||
mWorkInstance.Status = model2.WorkInstanceStatusForComplete
|
||||
}
|
||||
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
|
||||
if err = model2.Create(mWorkInstance.WorkInstance, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
mWorkProgress.UID = c.UID
|
||||
mWorkProgress.WorkID = mWorkInstance.ID
|
||||
mWorkProgress.ScheduleID = mWorkInstance.Schedule
|
||||
mWorkProgress.Status = model2.WorkProgressStatusForAgree
|
||||
mWorkProgress.Remark = "发起工单"
|
||||
|
||||
if err = model2.Create(mWorkProgress.WorkProgress, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
// 创建维修工单
|
||||
mWorkRepair := model.NewWorkRepair()
|
||||
mWorkRepair.WorkID = mWorkInstance.ID
|
||||
|
||||
if err = model2.Create(mWorkRepair.WorkRepair, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
// Examine 审核操作
|
||||
func (c *Instance) Examine(id uint64, status int, remark string, isAssist int) error {
|
||||
_status := model2.WorkProgressStatus(status)
|
||||
|
||||
if _status != model2.WorkProgressStatusForAgree && _status != model2.WorkProgressStatusForRefuse {
|
||||
return errors.New("操作错误,审核状态异常")
|
||||
}
|
||||
mWorkInstance := model.NewWorkInstance()
|
||||
mWorkInstance.ID = id
|
||||
|
||||
isExist, err := model2.FirstField(mWorkInstance.WorkInstance, []string{"id", "schedule", "status"})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
} else if !isExist {
|
||||
return errors.New("操作错误,工单信息不存在")
|
||||
} else if mWorkInstance.Status == model2.WorkInstanceStatusForComplete {
|
||||
return errors.New("操作错误,当前工单信息已结束")
|
||||
}
|
||||
// 查询当前工单所在流程的信息
|
||||
mWorkSchedule := model.NewWorkSchedule()
|
||||
mWorkSchedule.ID = mWorkInstance.Schedule
|
||||
|
||||
if isExist, err = model2.First(mWorkSchedule); err != nil {
|
||||
return err
|
||||
} else if !isExist {
|
||||
return errors.New("操作错误,未知的工单流程")
|
||||
}
|
||||
// 验证审核权限
|
||||
isAuth := false
|
||||
|
||||
if isAuth, err = mWorkSchedule.ValidateAuth(c.UID); err != nil {
|
||||
return err
|
||||
} else if !isAuth {
|
||||
return errors.New("操作错误,无权限审批")
|
||||
}
|
||||
if err = orm.GetDB().Transaction(func(tx *gorm.DB) error {
|
||||
// 工单流程记录
|
||||
mWorkProgress := model.NewWorkProgress()
|
||||
mWorkProgress.UID = c.UID
|
||||
mWorkProgress.WorkID = id
|
||||
mWorkProgress.ScheduleID = mWorkSchedule.ID
|
||||
mWorkProgress.Status = _status
|
||||
mWorkProgress.Remark = remark
|
||||
|
||||
if err = model2.Create(mWorkProgress.WorkProgress, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
workUpdates := map[string]interface{}{
|
||||
"status": model2.WorkInstanceStatusForComplete, "updated_at": time.Now(),
|
||||
}
|
||||
// 下一流程
|
||||
newNextScheduleInfo := new(model.WorkScheduleInfo)
|
||||
|
||||
// 拒绝审批,工单直接结束
|
||||
if _status == model2.WorkProgressStatusForRefuse {
|
||||
goto FINISH
|
||||
}
|
||||
// 下一流程信息
|
||||
if newNextScheduleInfo, err = mWorkSchedule.NextSchedule(model2.WorkInstanceAssist(isAssist) == model2.WorkInstanceAssistForYes); err != nil {
|
||||
return err
|
||||
}
|
||||
// 无下一流程,工单直接完成
|
||||
if newNextScheduleInfo == nil || newNextScheduleInfo.ID <= 0 {
|
||||
goto FINISH
|
||||
}
|
||||
workUpdates["status"] = model2.WorkInstanceStatusForOngoing
|
||||
workUpdates["schedule"] = newNextScheduleInfo.ID
|
||||
|
||||
if newNextScheduleInfo.IsNext {
|
||||
workUpdates["is_assist"] = isAssist
|
||||
}
|
||||
// 推送通知
|
||||
go c.publish(newNextScheduleInfo.Reviewer)
|
||||
|
||||
FINISH:
|
||||
if err = model2.Updates(mWorkInstance.WorkInstance, workUpdates, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -1,16 +1,8 @@
|
||||
package work
|
||||
|
||||
import (
|
||||
model2 "ArmedPolice/app/common/model"
|
||||
"ArmedPolice/app/controller/basic"
|
||||
"ArmedPolice/app/handle"
|
||||
"ArmedPolice/app/model"
|
||||
"ArmedPolice/app/service"
|
||||
"ArmedPolice/serve/orm"
|
||||
"ArmedPolice/utils"
|
||||
"errors"
|
||||
"gorm.io/gorm"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Person struct{ *service.Session }
|
||||
@ -21,99 +13,6 @@ func (c *Person) List() (*basic.PageDataResponse, error) {
|
||||
return &basic.PageDataResponse{Data: nil, Count: 0}, nil
|
||||
}
|
||||
|
||||
// Examine 审核操作
|
||||
func (c *Person) Examine(id uint64, status int, remark string, isAssist int) error {
|
||||
_status := model2.WorkProgressStatus(status)
|
||||
|
||||
if _status != model2.WorkProgressStatusForAgree && _status != model2.WorkProgressStatusForRefuse {
|
||||
return errors.New("操作错误,审核状态异常")
|
||||
}
|
||||
mWorkInstance := model.NewWorkInstance()
|
||||
mWorkInstance.ID = id
|
||||
|
||||
isExist, err := model2.FirstField(mWorkInstance.WorkInstance, []string{"id", "schedule", "status"})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
} else if !isExist {
|
||||
return errors.New("操作错误,工单信息不存在")
|
||||
} else if mWorkInstance.Status == model2.WorkInstanceStatusForComplete {
|
||||
return errors.New("操作错误,当前工单信息已结束")
|
||||
}
|
||||
// 查询当前工单所在流程的信息
|
||||
mWorkSchedule := model.NewWorkSchedule()
|
||||
mWorkSchedule.ID = mWorkInstance.Schedule
|
||||
|
||||
if isExist, err = model2.First(mWorkSchedule); err != nil {
|
||||
return err
|
||||
} else if !isExist {
|
||||
return errors.New("操作错误,未知的工单流程")
|
||||
}
|
||||
// 验证审核权限
|
||||
isAuth := false
|
||||
|
||||
if isAuth, err = mWorkSchedule.ValidateAuth(c.UID); err != nil {
|
||||
return err
|
||||
} else if !isAuth {
|
||||
return errors.New("操作错误,无权限审批")
|
||||
}
|
||||
if err = orm.GetDB().Transaction(func(tx *gorm.DB) error {
|
||||
// 工单流程记录
|
||||
mWorkProgress := model.NewWorkProgress()
|
||||
mWorkProgress.UID = c.UID
|
||||
mWorkProgress.WorkID = id
|
||||
mWorkProgress.ScheduleID = mWorkSchedule.ID
|
||||
mWorkProgress.Status = _status
|
||||
mWorkProgress.Remark = remark
|
||||
|
||||
if err = model2.Create(mWorkProgress.WorkProgress, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
workUpdates := map[string]interface{}{
|
||||
"status": model2.WorkInstanceStatusForComplete, "updated_at": time.Now(),
|
||||
}
|
||||
// 下一流程
|
||||
newNextScheduleInfo := new(model.WorkScheduleInfo)
|
||||
|
||||
// 拒绝审批,工单直接结束
|
||||
if _status == model2.WorkProgressStatusForRefuse {
|
||||
goto FINISH
|
||||
}
|
||||
// 下一流程信息
|
||||
if newNextScheduleInfo, err = mWorkSchedule.NextSchedule(model2.WorkInstanceAssist(isAssist) == model2.WorkInstanceAssistForYes); err != nil {
|
||||
return err
|
||||
}
|
||||
// 无下一流程,工单直接完成
|
||||
if newNextScheduleInfo == nil || newNextScheduleInfo.ID <= 0 {
|
||||
goto FINISH
|
||||
}
|
||||
workUpdates["status"] = model2.WorkInstanceStatusForOngoing
|
||||
workUpdates["schedule"] = newNextScheduleInfo.ID
|
||||
|
||||
if newNextScheduleInfo.IsNext {
|
||||
workUpdates["is_assist"] = isAssist
|
||||
}
|
||||
// 推送通知
|
||||
go utils.TryCatch(func() {
|
||||
for _, v := range newNextScheduleInfo.Reviewer {
|
||||
// Socket通知
|
||||
service.HubMessage.EmitHandle(&service.HubEmit{
|
||||
ID: v,
|
||||
Msg: handle.NewWorkNotice("你有一条待办事项"),
|
||||
})
|
||||
}
|
||||
})
|
||||
FINISH:
|
||||
if err = model2.Updates(mWorkInstance.WorkInstance, workUpdates, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewPerson() PersonHandle {
|
||||
return func(session *service.Session) *Person {
|
||||
return &Person{session}
|
||||
|
Reference in New Issue
Block a user