From bcceef741bc018b53ac05efa67cf79e9d5f63f78 Mon Sep 17 00:00:00 2001 From: henry Date: Thu, 18 Nov 2021 09:51:39 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=AE=8C=E5=96=84=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/base.go | 2 +- app/api/config.go | 5 ++ app/api/websocket.go | 2 +- app/api/work.go | 78 ++++++++++++++------- app/common/model/work_instance.go | 1 + app/common/model/work_progress.go | 2 +- app/controller/config/breakdown.go | 20 ++++++ app/controller/manage/equipment_material.go | 7 +- app/controller/work/instance.go | 76 +++++++++++++++----- app/handle/notice.go | 6 +- app/model/sys_user.go | 2 +- app/model/work_instance.go | 18 +++-- app/model/work_progress.go | 31 +++++++- app/model/work_schedule.go | 2 +- router/router.go | 2 + 15 files changed, 196 insertions(+), 58 deletions(-) diff --git a/app/api/base.go b/app/api/base.go index 79e07e0..06d4fc4 100644 --- a/app/api/base.go +++ b/app/api/base.go @@ -43,7 +43,7 @@ func bind(req interface{}) ApiHandle { } if err != nil { logger.ErrorF("Request URL【%s】Params Bind Error:%v", c.Request.URL, err) - return errors.New("参数异常/缺失") + return errors.New("参数异常/缺失:" + err.Error()) } c.Set("params", utils.AnyToJSON(req)) return nil diff --git a/app/api/config.go b/app/api/config.go index d9f0c19..97ac9aa 100644 --- a/app/api/config.go +++ b/app/api/config.go @@ -125,6 +125,11 @@ func (*Config) Breakdown(c *gin.Context) { APIResponse(err, data)(c) } +func (*Config) BreakdownSelect(c *gin.Context) { + data, err := config.NewBreakdown()(getSession()(c).(*service.Session)).Select() + APIResponse(err, data)(c) +} + /** * @api {post} /api/v1/config/breakdown/add 故障信息添加 * @apiVersion 1.0.0 diff --git a/app/api/websocket.go b/app/api/websocket.go index d2bb826..5bd4f8d 100644 --- a/app/api/websocket.go +++ b/app/api/websocket.go @@ -52,7 +52,7 @@ func (*Websocket) Publish(c *gin.Context) { key := c.Query("key") service.HubMessage.EmitHandle(&service.HubEmit{ ID: key, - Msg: handle.NewWorkNotice("你有一条待办事项"), + Msg: handle.NewWorkNotice("你有一条待办事项", nil), }) APISuccess()(c) } diff --git a/app/api/work.go b/app/api/work.go index 8354aa5..3272bdb 100644 --- a/app/api/work.go +++ b/app/api/work.go @@ -24,6 +24,10 @@ type ( IsAssist int `json:"is_assist" form:"is_assist"` // 是否需要上级审批 Remark string `json:"remark" form:"remark"` // 备注信息 } + // workLaunchSupplierForm 供应商信息 + workLaunchSupplierForm struct { + SupplierID string `json:"supplier_id" form:"supplier_id"` + } // workLaunchMaterialForm 工单发起配件信息 workLaunchMaterialForm struct { ID string `json:"id" form:"id"` @@ -47,6 +51,34 @@ type ( } ) +func (this *workLaunchForm) EquipmentInfo() uint64 { + return (&IDStringForm{ID: this.EquipmentID}).Convert() +} + +func (this *workLaunchForm) BreakdownInfo() []uint64 { + out := make([]uint64, 0) + + obj := new(IDStringForm) + + for _, v := range this.Breakdowns { + obj.ID = v + out = append(out, obj.Convert()) + } + return out +} + +func (this *workLaunchSupplierForm) SupplierInfo() uint64 { + return (&IDStringForm{ID: this.SupplierID}).Convert() +} + +func (this *workLaunchMaterialForm) IDInfo() uint64 { + return (&IDStringForm{ID: this.ID}).Convert() +} + +func (this *workLaunchMaterialForm) SupplierInfo() uint64 { + return (&IDStringForm{ID: this.SupplierID}).Convert() +} + /** * @api {post} /api/v1/work/list 工单信息 * @apiVersion 1.0.0 @@ -324,10 +356,13 @@ func (*Work) Detail(c *gin.Context) { * @apiHeader {string} x-token token * @apiHeader {string} Content-Type=application/json 传输方式 * -* @apiParam {Object[]} material 配件信息,内修才需要上传 -* @apiParam {String} material.id 配件ID -* @apiParam {String} material.supplier_id 供应商ID -* @apiParam {String} material.number 配件数量 +* @apiParam {Object} within 内修参数信息 +* @apiParam {Object[]} within.material 配件信息,内修才需要上传 +* @apiParam {String} within.material.id 配件ID +* @apiParam {String} within.material.supplier_id 供应商ID +* @apiParam {Number} within.material.number 配件数量 +* @apiParam {Object} outside 外修参数信息 +* @apiParam {String} outside.supplier_id 配件ID * @apiParam {Number} kind 工单类型 * @apiParam {String} [title="''"] 工单名称 * @apiParam {Number} equipment_id 装备名称 @@ -356,7 +391,12 @@ func (*Work) Detail(c *gin.Context) { func (*Work) Launch(c *gin.Context) { form := &struct { workLaunchForm - Material []*workLaunchMaterialForm `json:"material" form:"material"` + Outside struct { + workLaunchSupplierForm + } `json:"outside" form:"outside"` + Within struct { + Material []*workLaunchMaterialForm `json:"material" form:"material"` + } `json:"within" form:"within"` Distribution workLaunchDistributionForm `json:"distribution" form:"distribution"` }{} if err := bind(form)(c); err != nil { @@ -365,35 +405,21 @@ func (*Work) Launch(c *gin.Context) { } materials := make([]*work.InstanceLaunchParamsForMaterial, 0) - obj := new(IDStringForm) - obj.ID = form.EquipmentID - equipmentID := obj.Convert() - - breakdowns := make([]uint64, 0) - for _, v := range form.Breakdowns { - obj.ID = v - breakdowns = append(breakdowns, obj.Convert()) - } - for _, v := range form.Material { - // 器材ID - obj.ID = v.ID - id := obj.Convert() - // 供应商ID - obj.ID = v.SupplierID - supplierID := obj.Convert() + for _, v := range form.Within.Material { materials = append(materials, &work.InstanceLaunchParamsForMaterial{ - ID: id, SupplierID: supplierID, Number: v.Number, + ID: v.IDInfo(), SupplierID: v.SupplierInfo(), Number: v.Number, }) } err := work.NewInstance()(getSession()(c).(*service.Session)).Launch(&work.InstanceLaunchParams{ - Kind: form.Kind, Title: form.Title, EquipmentID: equipmentID, Breakdowns: breakdowns, + Kind: form.Kind, Title: form.Title, EquipmentID: form.EquipmentInfo(), Breakdowns: form.BreakdownInfo(), PlateNumber: form.PlateNumber, Priority: form.Priority, IsAssist: form.IsAssist, Remark: form.Remark, + Supplier: &work.InstanceLaunchParamsForSupplier{SupplierID: form.Outside.SupplierInfo()}, Material: materials, Distribution: &work.InstanceLaunchParamsForDistribution{ Name: form.Distribution.Name, Mobile: form.Distribution.Mobile, Address: form.Distribution.Address, }, }) - APIResponse(err) + APIResponse(err)(c) } /** @@ -434,11 +460,11 @@ func (*Work) Examine(c *gin.Context) { return } err := work.NewInstance()(getSession()(c).(*service.Session)).Examine(form.Convert(), form.Status, form.Remark, form.IsAssist) - APIResponse(err) + APIResponse(err)(c) } /** -* @api {post} /api/v1/work/delete 工单流程信息删除 +* @api {post} /api/v1/work/delete 工单信息删除 * @apiVersion 1.0.0 * @apiName WorkDelete * @apiGroup Work diff --git a/app/common/model/work_instance.go b/app/common/model/work_instance.go index 05728e9..9a7c28a 100644 --- a/app/common/model/work_instance.go +++ b/app/common/model/work_instance.go @@ -19,6 +19,7 @@ type WorkInstance struct { Priority WorkInstancePriority `gorm:"column:priority;type:tinyint(1);default:1;comment:工单优先级" json:"priority"` Schedule uint64 `gorm:"column:schedule;type:int(11);default:1;comment:工单进度" json:"schedule"` IsAssist WorkInstanceAssist `gorm:"column:is_assist;type:tinyint(1);default:0;comment:协助状态" json:"is_assist"` // 当前阶段协助状态,确认是否需要下一阶段协助 + SupplierID uint64 `gorm:"column:supplier_id;type:int(11);default:0;comment:供应商ID(外修:维修单位ID)" json:"supplier_id"` Remark string `gorm:"column:remark;type:varchar(255);default:null;comment:备注信息" json:"remark"` Distribution string `gorm:"column:distribution;type:varchar(255);default:null;comment:配送信息" json:"-"` Status WorkInstanceStatus `gorm:"column:status;type:tinyint(1);default:0;comment:工单状态" json:"status"` diff --git a/app/common/model/work_progress.go b/app/common/model/work_progress.go index 008910e..95c900b 100644 --- a/app/common/model/work_progress.go +++ b/app/common/model/work_progress.go @@ -19,7 +19,7 @@ const ( // WorkProgressStatusForRefuse 拒绝 WorkProgressStatusForRefuse WorkProgressStatus = iota - 1 // WorkProgressStatusForAgree 同意 - WorkProgressStatusForAgree + WorkProgressStatusForAgree WorkProgressStatus = iota ) func (m *WorkProgress) TableName() string { diff --git a/app/controller/config/breakdown.go b/app/controller/config/breakdown.go index 8558eaa..9205c0f 100644 --- a/app/controller/config/breakdown.go +++ b/app/controller/config/breakdown.go @@ -44,6 +44,26 @@ func (c *Breakdown) List(title string, page, pageSize int) (*basic.PageDataRespo return &basic.PageDataResponse{Data: list, Count: count}, nil } +// Select 查询信息 +func (c *Breakdown) Select() ([]*BreakdownInfo, error) { + mSysBreakdown := model.NewSysBreakdown() + + out := make([]*model2.SysBreakdown, 0) + + if err := model2.ScanFields(mSysBreakdown.SysBreakdown, &out, []string{"id", "title"}); err != nil { + return nil, err + } + list := make([]*BreakdownInfo, 0) + + for _, v := range out { + list = append(list, &BreakdownInfo{ + CommonIDString: basic.CommonIDString{ID: v.GetEncodeID()}, + SysBreakdown: v, + }) + } + return list, nil +} + // Form 数据处理 func (c *Breakdown) Form(id uint64, title, remark string) error { mSysBreakdown := model.NewSysBreakdown() diff --git a/app/controller/manage/equipment_material.go b/app/controller/manage/equipment_material.go index a2e0ca6..8b901fe 100644 --- a/app/controller/manage/equipment_material.go +++ b/app/controller/manage/equipment_material.go @@ -6,6 +6,7 @@ import ( "ArmedPolice/app/model" "ArmedPolice/app/service" "ArmedPolice/serve/orm" + "ArmedPolice/utils" "gorm.io/gorm" ) @@ -58,12 +59,14 @@ func (c *EquipmentMaterial) Bind(params *EquipmentMaterialBindParams) error { if err != nil { return err } + materialIDs := utils.ArrayUnique(params.MaterialIDs) + list := make([]*model2.ManageEquipmentMaterial, 0) - for _, v := range params.MaterialIDs { + for _, v := range materialIDs { list = append(list, &model2.ManageEquipmentMaterial{ EquipmentID: params.EquipmentID, - MaterialID: v, + MaterialID: v.(uint64), }) } if len(list) > 0 { diff --git a/app/controller/work/instance.go b/app/controller/work/instance.go index 604b1f7..03e4165 100644 --- a/app/controller/work/instance.go +++ b/app/controller/work/instance.go @@ -28,8 +28,14 @@ type ( InstanceDetailInfo struct { basic.CommonIDString *model.WorkInstanceInfo + Outside struct { + SupplierName string `json:"supplier_name"` + } `json:"outside" form:"outside"` + Within struct { + Material []*model.WorkMaterialInfo `json:"material"` + } `json:"within"` Distribution *model2.WorkInstanceDistribution `json:"distribution"` - Materials []*model.WorkMaterialInfo `json:"materials"` + History []*model.WorkProgressInfo `json:"history"` } // InstanceLaunchParams 发起参数信息 InstanceLaunchParams struct { @@ -41,9 +47,14 @@ type ( PlateNumber string // 车牌号 Priority, IsAssist int // 优先级,是否需要上级审批 Remark string // 备注信息 + Supplier *InstanceLaunchParamsForSupplier Material []*InstanceLaunchParamsForMaterial Distribution *InstanceLaunchParamsForDistribution } + // InstanceLaunchParamsForSupplier 供应商信息 + InstanceLaunchParamsForSupplier struct { + SupplierID uint64 `json:"supplier_id"` + } // InstanceLaunchParamsForMaterial 配件信息 InstanceLaunchParamsForMaterial struct { ID uint64 // 器材ID @@ -56,14 +67,18 @@ type ( } ) -func (c *Instance) publish(reviewer []string) { +func (c *Instance) publish(kind int, reviewer []string) { + msg := &service.HubEmit{ + Msg: handle.NewWorkNotice("你有一条待办事项", &struct { + Kind int `json:"kind"` + }{ + Kind: kind, + }), + } utils.TryCatch(func() { for _, v := range reviewer { - // Socket通知 - service.HubMessage.EmitHandle(&service.HubEmit{ - ID: v, - Msg: handle.NewWorkNotice("你有一条待办事项"), - }) + msg.ID = v + service.HubMessage.EmitHandle(msg) } }) } @@ -183,14 +198,31 @@ func (c *Instance) Detail(id uint64) (*InstanceDetailInfo, error) { if out.WorkInstanceInfo, err = mWorkInstance.Detail(id); err != nil { return nil, err } + mWorkInstance.SetID(out.WorkInstanceInfo.ID) + out.CommonIDString = basic.CommonIDString{ + ID: mWorkInstance.GetEncodeTenantID(), + } // 位置信息 mWorkInstance.Distribution = out.WorkInstanceInfo.Distribution + out.Distribution = mWorkInstance.GetDistributionAttribute() // 内修才有数据 if out.WorkInstanceInfo.Kind == model2.WorkInstanceKindForWithin { - if out.Materials, err = model.NewWorkMaterial().Materials(id); err != nil { + materials := make([]*model.WorkMaterialInfo, 0) + + if materials, err = model.NewWorkMaterial().Materials(id); err != nil { return nil, err } + out.Within = struct { + Material []*model.WorkMaterialInfo `json:"material"` + }{Material: materials} + } else if out.WorkInstanceInfo.Kind == model2.WorkInstanceKindForOutside { + out.Outside = struct { + SupplierName string `json:"supplier_name"` + }{SupplierName: out.WorkInstanceInfo.SupplierName} + } + if out.History, err = model.NewWorkProgress().Progress(id); err != nil { + return nil, err } return out, nil } @@ -212,6 +244,7 @@ func (c *Instance) Launch(params *InstanceLaunchParams) error { // 工单信息 mWorkInstance := model.NewWorkInstance() mWorkInstance.UID = c.UID + mWorkInstance.OrderNo = lib.OrderNo() mWorkInstance.Kind = model2.WorkInstanceKind(params.Kind) mWorkInstance.Title = params.Title mWorkInstance.EquipmentID = params.EquipmentID @@ -229,8 +262,13 @@ func (c *Instance) Launch(params *InstanceLaunchParams) error { // 工单器材信息 workMaterials := make([]*model2.WorkMaterial, 0) - // 内修模块,同步器材库存信息 - if mWorkInstance.Kind == model2.WorkInstanceKindForWithin { + if mWorkInstance.Kind == model2.WorkInstanceKindForOutside { + if params.Supplier.SupplierID <= 0 { + return errors.New("操作错误,承修单位不存在") + } + mWorkInstance.SupplierID = params.Supplier.SupplierID + // 内修模块,同步器材库存信息 + } else if mWorkInstance.Kind == model2.WorkInstanceKindForWithin && params.IsAssist <= 0 { for _, v := range params.Material { if v.ID <= 0 || v.SupplierID <= 0 || v.Number <= 0 { return errors.New("操作错误,器材参数不完全") @@ -279,8 +317,9 @@ func (c *Instance) Launch(params *InstanceLaunchParams) error { if err = model2.Create(mWorkProgress.WorkProgress, tx); err != nil { return err } - // 内修模块,同步器材库存信息 - if mWorkInstance.Kind == model2.WorkInstanceKindForWithin && len(workMaterials) > 0 { + + // 处理库存信息 + if len(workMaterials) > 0 { mManageMaterialSupplier := model.NewManageMaterialSupplier() for _, v := range workMaterials { @@ -288,7 +327,10 @@ func (c *Instance) Launch(params *InstanceLaunchParams) error { if err = model2.UpdatesWhere(mManageMaterialSupplier.ManageMaterialSupplier, map[string]interface{}{ "frozen_stock": gorm.Expr("frozen_stock + ?", v.MaterialNumber), "updated_at": now, - }, nil, tx); err != nil { + }, []*model2.ModelWhere{ + model2.NewWhere("material_id", v.MaterialID), + model2.NewWhere("supplier_id", v.MaterialSupplierID), + }, tx); err != nil { return err } } @@ -300,7 +342,7 @@ func (c *Instance) Launch(params *InstanceLaunchParams) error { } if nextWorkSchedule != nil { // 推送通知 - go c.publish(nextWorkSchedule.Reviewer) + go c.publish(params.Kind, nextWorkSchedule.Reviewer) } return nil }) @@ -316,7 +358,7 @@ func (c *Instance) Examine(id uint64, status int, remark string, isAssist int) e mWorkInstance := model.NewWorkInstance() mWorkInstance.ID = id - isExist, err := model2.FirstField(mWorkInstance.WorkInstance, []string{"id", "schedule", "status"}) + isExist, err := model2.FirstField(mWorkInstance.WorkInstance, []string{"id", "kind", "schedule", "status"}) if err != nil { return err @@ -397,7 +439,9 @@ func (c *Instance) Examine(id uint64, status int, remark string, isAssist int) e } } // 推送通知 - go c.publish(nextScheduleInfo.Reviewer) + if nextScheduleInfo != nil { + go c.publish(int(mWorkInstance.Kind), nextScheduleInfo.Reviewer) + } return nil }); err != nil { return err diff --git a/app/handle/notice.go b/app/handle/notice.go index a81ddb3..a7eb22a 100644 --- a/app/handle/notice.go +++ b/app/handle/notice.go @@ -4,7 +4,8 @@ import "encoding/json" type WorkNotice struct { Prefix string `json:"prefix"` - Message interface{} `json:"message"` + Data interface{} `json:"data"` + Message string `json:"message"` } func (this *WorkNotice) ToBytes() []byte { @@ -12,9 +13,10 @@ func (this *WorkNotice) ToBytes() []byte { return out } -func NewWorkNotice(msg interface{}) *WorkNotice { +func NewWorkNotice(msg string, data interface{}) *WorkNotice { return &WorkNotice{ Prefix: "work", Message: msg, + Data: data, } } diff --git a/app/model/sys_user.go b/app/model/sys_user.go index 59e4c4a..d9d4b41 100644 --- a/app/model/sys_user.go +++ b/app/model/sys_user.go @@ -49,7 +49,7 @@ func (m *SysUser) Users(page, pageSize int, count *int64, where ...*model.ModelW mSysTenant := model.NewSysTenant() db := orm.GetDB().Table(m.TableName()+" As u").Select("u.id", "u.uuid", "account", "u.name", "u.avatar", - "u.mobile", "u.email", "u.gender", "u.status", "t.name AS tenant_name", "u.created_at"). + "u.mobile", "u.email", "u.gender", "u.status", "t.name AS tenant_name", "u.remark", "u.created_at"). Joins(fmt.Sprintf("LEFT JOIN %s AS t ON u.tenant_id = t.id", mSysTenant.TableName())). Where("u.is_deleted = ?", model.DeleteStatusForNot) diff --git a/app/model/work_instance.go b/app/model/work_instance.go index f6f043d..f7e2d45 100644 --- a/app/model/work_instance.go +++ b/app/model/work_instance.go @@ -17,11 +17,13 @@ type ( WorkInstanceInfo struct { ID uint64 `json:"-"` Title string `json:"title"` + OrderNo string `json:"order_no"` Kind model.WorkInstanceKind `json:"kind"` EquipmentCode string `json:"equipment_code"` EquipmentTitle string `json:"equipment_title"` BreakdownTitle string `json:"breakdown_title"` ScheduleTitle string `json:"schedule_title"` + SupplierName string `json:"-"` Priority int `json:"priority"` Distribution string `json:"distribution"` Status int `json:"status"` @@ -54,9 +56,10 @@ func (m *WorkInstance) Detail(id uint64) (*WorkInstanceInfo, error) { db := orm.GetDB().Table(m.TableName()+" AS w"). Select("w.id", "w.kind", "w.title", "e.code AS equipment_code", "e.title AS equipment_title", "w.priority", "(SELECT GROUP_CONCAT(s_b.title) FROM ( SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title", - "s.title AS schedule_title", "w.distribution", "w.status", "w.created_at"). + "s.title AS schedule_title", "supplier.name AS supplier_name", "w.distribution", "w.status", "w.created_at"). Joins(fmt.Sprintf("LEFT JOIN %s AS e ON w.equipment_id = e.id", model.NewManageEquipment().TableName())). Joins(fmt.Sprintf("LEFT JOIN %s AS s ON w.schedule = s.id", model.NewWorkSchedule().TableName())). + Joins(fmt.Sprintf("LEFT JOIN %s AS supplier ON w.supplier_id = supplier.id", model.NewManageSupplier().TableName())). Where("w.id = ?", id) out := new(WorkInstanceInfo) @@ -70,7 +73,7 @@ func (m *WorkInstance) Detail(id uint64) (*WorkInstanceInfo, error) { // Instances 基本信息 func (m *WorkInstance) Instances(page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*WorkInstanceInfo, error) { db := orm.GetDB().Table(m.TableName()+" AS w"). - Select("w.id", "w.title", "e.code AS equipment_code", "e.title AS equipment_title", "w.priority", + Select("w.id", "w.order_no", "w.title", "e.code AS equipment_code", "e.title AS equipment_title", "w.priority", "(SELECT GROUP_CONCAT(s_b.title) FROM ( SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title", "s.title AS schedule_title", "w.status", "u.name AS username", "w.created_at"). Joins(fmt.Sprintf("LEFT JOIN %s AS e ON w.equipment_id = e.id", model.NewManageEquipment().TableName())). @@ -98,7 +101,7 @@ func (m *WorkInstance) Instances(page, pageSize int, count *int64, where ...*mod // Persons 个人信息 func (m *WorkInstance) Persons(uid uint64, page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*WorkInstanceInfo, error) { db := orm.GetDB().Table(m.TableName()+" AS w"). - Select("w.id", "w.title", "e.code AS equipment_code", "e.title AS equipment_title", "w.priority", + Select("w.id", "w.order_no", "w.title", "e.code AS equipment_code", "e.title AS equipment_title", "w.priority", "(SELECT GROUP_CONCAT(s_b.title) FROM ( SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title", "s.title AS schedule_title", "w.status", "w.created_at"). Joins(fmt.Sprintf("LEFT JOIN %s AS e ON w.equipment_id = e.id", model.NewManageEquipment().TableName())). @@ -137,13 +140,14 @@ ELSE "" END`, "s.target", mWorkSchedule.TableName(), model.WorkScheduleTargetForRole, condition.roleInfo()) db := orm.GetDB().Table(m.TableName()+" AS w"). - Select("w.id", "w.title", "e.code AS equipment_code", "e.title AS equipment_title", "w.priority", + Select("w.id", "w.order_no", "w.title", "e.code AS equipment_code", "e.title AS equipment_title", "w.priority", "(SELECT GROUP_CONCAT(s_b.title) FROM (SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title", "s.title AS schedule_title", "w.status", "u.name AS username", "w.created_at"). Joins(fmt.Sprintf("LEFT JOIN %s AS e ON w.equipment_id = e.id", model.NewManageEquipment().TableName())). Joins(fmt.Sprintf("LEFT JOIN %s AS s ON w.schedule = s.id", mWorkSchedule.TableName())). Joins(fmt.Sprintf("LEFT JOIN %s AS u ON w.uid = u.uuid", model.NewSysUser().TableName())). Where("w.is_deleted = ?", model.DeleteStatusForNot). + Where("w.status = ?", model.WorkInstanceStatusForOngoing). Where(fmt.Sprintf("FIND_IN_SET(w.schedule, %s)", _condition)) if len(where) > 0 { @@ -175,12 +179,14 @@ ELSE "" END`, "s.target", mWorkSchedule.TableName(), model.WorkScheduleTargetForRole, condition.roleInfo()) db := orm.GetDB().Table(m.TableName()+" AS w"). - Select("w.id", "w.title", "e.code AS equipment_code", "e.title AS equipment_title", "w.priority", + Select("w.id", "w.order_no", "w.title", "e.code AS equipment_code", "e.title AS equipment_title", "w.priority", "(SELECT GROUP_CONCAT(s_b.title) FROM (SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title", - "s.title AS schedule_title", "w.status", "w.created_at"). + "s.title AS schedule_title", "w.status", "u.name AS username", "w.created_at"). Joins(fmt.Sprintf("LEFT JOIN %s AS e ON w.equipment_id = e.id", model.NewManageEquipment().TableName())). Joins(fmt.Sprintf("LEFT JOIN %s AS s ON w.schedule = s.id", mWorkSchedule.TableName())). + Joins(fmt.Sprintf("LEFT JOIN %s AS u ON w.uid = u.uuid", model.NewSysUser().TableName())). Where("w.is_deleted = ?", model.DeleteStatusForNot). + Where("w.status = ?", model.WorkInstanceStatusForOngoing). Where(fmt.Sprintf("FIND_IN_SET(w.schedule, %s)", _condition)) if len(where) > 0 { diff --git a/app/model/work_progress.go b/app/model/work_progress.go index 97ff53e..1b53447 100644 --- a/app/model/work_progress.go +++ b/app/model/work_progress.go @@ -1,11 +1,40 @@ package model -import "ArmedPolice/app/common/model" +import ( + "ArmedPolice/app/common/model" + "ArmedPolice/serve/orm" + "fmt" + "time" +) type WorkProgress struct { *model.WorkProgress } +type WorkProgressInfo struct { + ID uint64 `json:"id"` + ScheduleTitle string `json:"schedule_title"` + Username string `json:"username"` + Status int `json:"status"` + Remark string `json:"remark"` + CreatedAt time.Time `json:"created_at"` +} + +func (m *WorkProgress) Progress(workID uint64) ([]*WorkProgressInfo, error) { + db := orm.GetDB().Table(m.TableName()+" AS p"). + Select("p.id", "s.title AS schedule_title", "u.name AS username", "p.status", "p.remark", "p.created_at"). + Joins(fmt.Sprintf("LEFT JOIN %s AS s ON p.schedule_id = s.id", model.NewWorkSchedule().TableName())). + Joins(fmt.Sprintf("LEFT JOIN %s AS u ON p.uid = u.uuid", model.NewSysUser().TableName())). + Where("p.work_id = ?", workID). + Where("p.is_deleted = ?", model.DeleteStatusForNot) + + out := make([]*WorkProgressInfo, 0) + + err := db.Order("p.id " + model.OrderModeToDesc).Scan(&out).Error + + return out, err +} + func NewWorkProgress() *WorkProgress { return &WorkProgress{model.NewWorkProgress()} } diff --git a/app/model/work_schedule.go b/app/model/work_schedule.go index 46b5789..f9a27f8 100644 --- a/app/model/work_schedule.go +++ b/app/model/work_schedule.go @@ -56,7 +56,7 @@ func (m *WorkSchedule) ValidateAuth(uid uint64) (bool, error) { // FirstSchedule 第一个流程 func (m *WorkSchedule) FirstSchedule(kind model.WorkScheduleKind) (bool, error) { - db := orm.GetDB().Table(m.TableName()).Select("id", "title", "stage", "step"). + db := orm.GetDB().Table(m.TableName()).Select("id", "kind", "title", "stage", "step"). Where("kind = ?", kind). Where("is_deleted = ?", model.DeleteStatusForNot). Order("stage " + model.OrderModeToAsc).Order("step " + model.OrderModeToAsc) diff --git a/router/router.go b/router/router.go index d4ae6da..0619d95 100644 --- a/router/router.go +++ b/router/router.go @@ -85,8 +85,10 @@ func (this *Router) registerAPI() { configV1.POST("/edit", _api.Edit) configV1.GET("/area", _api.Area) configV1.POST("/breakdown", _api.Breakdown) + configV1.GET("/breakdown/select", _api.BreakdownSelect) configV1.POST("/breakdown/add", _api.BreakdownAdd) configV1.POST("/breakdown/edit", _api.BreakdownEdit) + configV1.POST("/breakdown/delete", _api.BreakdownDelete) } // Tenant 租户单位管理 tenantV1 := v1.Group("/tenant")