feat:完善项目

This commit is contained in:
henry
2021-11-19 09:24:15 +08:00
parent ba423a2d19
commit 5ff6164295
12 changed files with 149 additions and 65 deletions

View File

@ -93,7 +93,8 @@ func (this *workLaunchMaterialForm) SupplierInfo() uint64 {
* @apiHeader {string} x-token token * @apiHeader {string} x-token token
* @apiHeader {string} Content-Type=application/json 传输方式 * @apiHeader {string} Content-Type=application/json 传输方式
* *
* @apiParam {String} [material_id=0] 装备ID * @apiParam {String} [equipment_code="''"] 装备编码
* @apiParam {String} [equipment_title="''"] 装备名称
* @apiParam {String} [kind=0] 工单类型 * @apiParam {String} [kind=0] 工单类型
* @apiParam {Number} current 当前页 * @apiParam {Number} current 当前页
* @apiParam {Number} page_size 页展示数 * @apiParam {Number} page_size 页展示数
@ -135,15 +136,16 @@ func (this *workLaunchMaterialForm) SupplierInfo() uint64 {
*/ */
func (*Work) Instance(c *gin.Context) { func (*Work) Instance(c *gin.Context) {
form := &struct { form := &struct {
MaterialID uint64 `json:"material_id" form:"material_id"` EquipmentCode string `json:"equipment_code" form:"equipment_code"`
Kind int `json:"kind" form:"kind"` EquipmentTitle string `json:"equipment_title" form:"equipment_title"`
Kind int `json:"kind" form:"kind"`
PageForm PageForm
}{} }{}
if err := bind(form)(c); err != nil { if err := bind(form)(c); err != nil {
APIFailure(err.(error))(c) APIFailure(err.(error))(c)
return return
} }
data, err := work.NewInstance()(getSession()(c).(*service.Session)).List(form.MaterialID, form.Kind, form.Page, form.PageSize) data, err := work.NewInstance()(getSession()(c).(*service.Session)).List(form.EquipmentCode, form.EquipmentTitle, form.Kind, form.Page, form.PageSize)
APIResponse(err, data)(c) APIResponse(err, data)(c)
} }

View File

@ -55,7 +55,7 @@ func initModel() {
&synchronized{iModel: model.NewManageMaterial()}, &synchronized{iModel: model.NewManageMaterialSupplier()}, &synchronized{iModel: model.NewManageMaterial()}, &synchronized{iModel: model.NewManageMaterialSupplier()},
&synchronized{iModel: model.NewManageMaterialPurchase()}, &synchronized{iModel: model.NewManageMaterialWarehouse()}, &synchronized{iModel: model.NewManageMaterialPurchase()}, &synchronized{iModel: model.NewManageMaterialWarehouse()},
&synchronized{iModel: model.NewWorkInstance()}, &synchronized{iModel: model.NewWorkMaterial()}, &synchronized{iModel: model.NewWorkProgress()}, &synchronized{iModel: model.NewWorkInstance()}, &synchronized{iModel: model.NewWorkMaterial()}, &synchronized{iModel: model.NewWorkProgress()},
&synchronized{iModel: model.NewWorkSchedule()}, &synchronized{iModel: model.NewWorkSchedule()}, &synchronized{iModel: model.NewWorkPurchase()},
&synchronized{iModel: model.NewWorkRepair()}, &synchronized{iModel: model.NewWorkRepairDetail()}, &synchronized{iModel: model.NewWorkRepair()}, &synchronized{iModel: model.NewWorkRepairDetail()},
) )
} }

View File

@ -1,19 +0,0 @@
package model
// ManageMaterialWork 维修器材工单明细
type ManageMaterialWork struct {
Model
WorkID uint64 `gorm:"column:work_id;type:int(11);default:0;comment:工单ID" json:"work_id"`
MaterialPurchaseID uint64 `gorm:"column:material_purchase_id;type:int(11);default:0;comment:器材采购ID" json:"material_purchase_id"`
Number int `json:"number"`
ModelDeleted
ModelAt
}
func (m *ManageMaterialWork) TableName() string {
return "manage_material_work"
}
func NewManageMaterialWork() *ManageMaterialWork {
return &ManageMaterialWork{}
}

View File

@ -16,7 +16,8 @@ type (
MaterialSupplerBasic struct { MaterialSupplerBasic struct {
basic.CommonIDString basic.CommonIDString
*model.ManageMaterialSupplierBasic *model.ManageMaterialSupplierBasic
Stock float64 `json:"stock"` SupplierID string `json:"supplier_id"`
Stock float64 `json:"stock"`
} }
) )
@ -45,6 +46,7 @@ func (c *MaterialSuppler) Select(materialID uint64) ([]*MaterialSupplerBasic, er
list = append(list, &MaterialSupplerBasic{ list = append(list, &MaterialSupplerBasic{
CommonIDString: basic.CommonIDString{ID: mManageMaterSupplier.GetEncodeID()}, CommonIDString: basic.CommonIDString{ID: mManageMaterSupplier.GetEncodeID()},
ManageMaterialSupplierBasic: v, ManageMaterialSupplierBasic: v,
SupplierID: (&model2.Model{ID: v.SupplierID}).GetEncodeID(),
Stock: stock, Stock: stock,
}) })
} }

View File

@ -33,6 +33,7 @@ type (
} `json:"outside" form:"outside"` } `json:"outside" form:"outside"`
Within struct { Within struct {
Material []*model.WorkMaterialInfo `json:"material"` Material []*model.WorkMaterialInfo `json:"material"`
Purchase []*model.WorkPurchaseInfo `json:"purchase"`
} `json:"within"` } `json:"within"`
Distribution *model2.WorkInstanceDistribution `json:"distribution"` Distribution *model2.WorkInstanceDistribution `json:"distribution"`
History []*model.WorkProgressInfo `json:"history"` History []*model.WorkProgressInfo `json:"history"`
@ -136,38 +137,63 @@ func (c *Instance) material(tx *gorm.DB, material []*InstanceLaunchParamsForMate
} }
/// purchase 采购操作 /// purchase 采购操作
func (c *Instance) purchase(tx *gorm.DB, purchase []*InstanceLaunchParamsForPurchase) error { func (c *Instance) purchase(tx *gorm.DB, purchase []*InstanceLaunchParamsForPurchase, workID uint64) error {
mManageMaterialPurchase := model.NewManageMaterialPurchase() //mManageMaterialPurchase := model.NewManageMaterialPurchase()
_purchase := make([]*model2.ManageMaterialPurchase, 0) //_purchase := make([]*model2.ManageMaterialPurchase, 0)
for _, v := range purchase { for _, v := range purchase {
_purchase = append(_purchase, &model2.ManageMaterialPurchase{ mManageMaterialPurchase := model.NewManageMaterialPurchase()
UID: c.UID,
OrderNo: lib.OrderNo(), mManageMaterialPurchase.UID = c.UID
MaterialID: v.ID, mManageMaterialPurchase.OrderNo = lib.OrderNo()
SupplierID: v.SupplierID, mManageMaterialPurchase.MaterialID = v.ID
Price: v.Price, mManageMaterialPurchase.SupplierID = v.SupplierID
Number: v.Number, mManageMaterialPurchase.Price = v.Price
Remark: "工单采购", mManageMaterialPurchase.Number = v.Number
}) mManageMaterialPurchase.Remark = "工单采购"
}
if len(_purchase) > 0 { err := model2.Create(mManageMaterialPurchase.ManageMaterialPurchase, tx)
if err := model2.Creates(mManageMaterialPurchase.ManageMaterialPurchase, _purchase, tx); err != nil {
if err != nil {
return err return err
} }
mWorkPurchase := model.NewWorkPurchase()
mWorkPurchase.WorkID = workID
mWorkPurchase.MaterialPurchaseID = mManageMaterialPurchase.ID
if err = model2.Create(mWorkPurchase.WorkPurchase, tx); err != nil {
return err
}
//_purchase = append(_purchase, &model2.ManageMaterialPurchase{
// UID: c.UID,
// OrderNo: lib.OrderNo(),
// MaterialID: v.ID,
// SupplierID: v.SupplierID,
// Price: v.Price,
// Number: v.Number,
// Remark: "工单采购",
//})
} }
//if len(_purchase) > 0 {
// if err := model2.Creates(mManageMaterialPurchase.ManageMaterialPurchase, _purchase, tx); err != nil {
// return err
// }
//}
return nil return nil
} }
// List 列表信息 // List 列表信息
func (c *Instance) List(materialID uint64, kind, page, pageSize int) (*basic.PageDataResponse, error) { func (c *Instance) List(equipmentCode, equipmentTitle string, kind, page, pageSize int) (*basic.PageDataResponse, error) {
mWorkInstance := model.NewWorkInstance() mWorkInstance := model.NewWorkInstance()
where := make([]*model2.ModelWhere, 0) where := make([]*model2.ModelWhere, 0)
if materialID > 0 { if equipmentCode != "" {
where = append(where, model2.NewWhere("w.material_id", materialID)) where = append(where, model2.NewWhereLike("e.code", equipmentCode))
}
if equipmentTitle != "" {
where = append(where, model2.NewWhereLike("e.title", equipmentTitle))
} }
if kind > 0 { if kind > 0 {
where = append(where, model2.NewWhere("w.kind", kind)) where = append(where, model2.NewWhere("w.kind", kind))
@ -285,14 +311,22 @@ func (c *Instance) Detail(id uint64) (*InstanceDetailInfo, error) {
out.Distribution = mWorkInstance.GetDistributionAttribute() out.Distribution = mWorkInstance.GetDistributionAttribute()
// 内修才有数据 // 内修才有数据
if out.WorkInstanceInfo.Kind == model2.WorkInstanceKindForWithin { if out.WorkInstanceInfo.Kind == model2.WorkInstanceKindForWithin {
// 器材信息
materials := make([]*model.WorkMaterialInfo, 0) materials := make([]*model.WorkMaterialInfo, 0)
if materials, err = model.NewWorkMaterial().Materials(id); err != nil { if materials, err = model.NewWorkMaterial().Materials(id); err != nil {
return nil, err return nil, err
} }
// 采购信息
purchases := make([]*model.WorkPurchaseInfo, 0)
if purchases, err = model.NewWorkPurchase().Purchases(id); err != nil {
return nil, err
}
out.Within = struct { out.Within = struct {
Material []*model.WorkMaterialInfo `json:"material"` Material []*model.WorkMaterialInfo `json:"material"`
}{Material: materials} Purchase []*model.WorkPurchaseInfo `json:"purchase"`
}{Material: materials, Purchase: purchases}
} else if out.WorkInstanceInfo.Kind == model2.WorkInstanceKindForOutside { } else if out.WorkInstanceInfo.Kind == model2.WorkInstanceKindForOutside {
out.Outside = struct { out.Outside = struct {
SupplierName string `json:"supplier_name"` SupplierName string `json:"supplier_name"`
@ -388,7 +422,7 @@ func (c *Instance) Launch(params *InstanceLaunchParams) error {
return err return err
} }
// 采购信息 // 采购信息
if err = c.purchase(tx, params.Purchase); err != nil { if err = c.purchase(tx, params.Purchase, mWorkInstance.ID); err != nil {
return err return err
} }
} }
@ -496,7 +530,7 @@ func (c *Instance) Examine(id uint64, status int, remark string, isAssist int, p
return err return err
} }
// 采购信息 // 采购信息
if err = c.purchase(tx, params.Purchase); err != nil { if err = c.purchase(tx, params.Purchase, id); err != nil {
return err return err
} }
} }

View File

@ -15,13 +15,14 @@ type ManageMaterialSupplierBasic struct {
ID uint64 `json:"-"` ID uint64 `json:"-"`
Stock float64 `json:"-"` Stock float64 `json:"-"`
FrozenStock float64 `json:"-"` FrozenStock float64 `json:"-"`
SupplierID uint64 `json:"-"`
SupplierName string `json:"supplier_name"` SupplierName string `json:"supplier_name"`
} }
// Basic 基本信息 // Basic 基本信息
func (m *ManageMaterialSupplier) Basic(where ...*model.ModelWhere) ([]*ManageMaterialSupplierBasic, error) { func (m *ManageMaterialSupplier) Basic(where ...*model.ModelWhere) ([]*ManageMaterialSupplierBasic, error) {
db := orm.GetDB().Table(m.TableName()+" m_s"). db := orm.GetDB().Table(m.TableName()+" m_s").
Select("m_s.id", "m_s.stock", "m_s.frozen_stock", "s.name AS supplier_name"). Select("m_s.id", "m_s.stock", "m_s.frozen_stock", "s.id AS supplier_id", "s.name AS supplier_name").
Joins(fmt.Sprintf("LEFT JOIN %s AS s ON m_s.supplier_id = s.id", model.NewManageSupplier().TableName())). Joins(fmt.Sprintf("LEFT JOIN %s AS s ON m_s.supplier_id = s.id", model.NewManageSupplier().TableName())).
Where("m_s.is_deleted = ?", model.DeleteStatusForNot) Where("m_s.is_deleted = ?", model.DeleteStatusForNot)

View File

@ -0,0 +1,46 @@
package model
import (
"ArmedPolice/app/common/model"
"ArmedPolice/serve/orm"
"fmt"
)
type WorkPurchase struct {
*model.WorkPurchase
}
type WorkPurchaseInfo struct {
*model.WorkPurchase
Price float64 `json:"price"`
Number float64 `json:"number"`
MaterialCode string `json:"material_code"`
MaterialTitle string `json:"material_title"`
ManufacturerName string `json:"manufacturer_name"`
SupplierName string `json:"supplier_name"`
}
// Purchases 采购信息
func (m *WorkPurchase) Purchases(workID uint64) ([]*WorkPurchaseInfo, error) {
mManageSupplier := model.NewManageSupplier()
db := orm.GetDB().Table(m.TableName()+" AS p").
Select("p.id", "m_p.price", "m_p.number", "m.code AS material_code", "m.title AS material_title",
"m_s.name AS manufacturer_name", "s.name AS supplier_id").
Joins(fmt.Sprintf("LEFT JOIN %s AS m_p ON p.material_purchase_id = m_p.id", model.NewManageMaterialPurchase().TableName())).
Joins(fmt.Sprintf("LEFT JOIN %s AS m ON m_p.material_id = m.id", model.NewManageMaterial().TableName())).
Joins(fmt.Sprintf("LEFT JOIN %s AS s ON m_p.supplier_id = s.id", mManageSupplier.TableName())).
Joins(fmt.Sprintf("LEFT JOIN %s AS m_s ON m.manufacturer_id = m_s.id", mManageSupplier.TableName())).
Where("p.work_id = ?", workID).
Where("p.is_deleted = ? AND m_p.is_deleted = ?", model.DeleteStatusForNot, model.DeleteStatusForNot)
out := make([]*WorkPurchaseInfo, 0)
err := db.Scan(&out).Error
return out, err
}
func NewWorkPurchase() *WorkPurchase {
return &WorkPurchase{model.NewWorkPurchase()}
}

View File

@ -1,9 +1,7 @@
package task package task
func Init() { func Init() {
NewTaskListen().Listen() //NewTaskListen().Listen()
//NewTask()("order", 60, NewOrder()).Push() //NewTask()("order", 10, NewOrder()).Push()
NewTaskQueue().Queue()
} }

View File

@ -7,11 +7,13 @@ import (
"ArmedPolice/utils" "ArmedPolice/utils"
"fmt" "fmt"
"sync" "sync"
"time"
) )
type TaskListen struct { type TaskListen struct {
Produce chan *Task Produce chan *Task
Consume chan *Task Consume chan *Task
ticker *time.Ticker
lock *sync.Mutex lock *sync.Mutex
} }
@ -35,12 +37,29 @@ func (this *TaskListen) Listen() {
if err != nil { if err != nil {
fmt.Printf("Task Produce Redis Sadd Error【%s】", err) fmt.Printf("Task Produce Redis Sadd Error【%s】", err)
} else { } else {
err = cache.Cache.HSet(config.RedisKeyForTaskQueueBody, p.ID, p) _ = cache.Cache.HSet(config.RedisKeyForTaskQueueBody, p.ID, p)
fmt.Printf("err%v\n", err)
} }
case c := <-this.Consume: case c := <-this.Consume:
if err := c.Handle(); err != nil { // 监听到数据,执行后续操作
fmt.Printf("err%v\n", err) _ = c.Handle()
case <-this.ticker.C:
now := time.Now()
_cache, _ := cache.Cache.ZRangebyscore(config.RedisKeyForTaskQueue, &logic.ScoreRangeBy{Min: "0",
Max: fmt.Sprintf("%d", now.Unix())})
if len(_cache) > 0 {
for _, v := range _cache {
body, _ := cache.Cache.HGet(config.RedisKeyForTaskQueueBody, v)
// TODO有Bug读取接口数据为空
task := new(Task)
task.Body = new(Order)
_ = task.UnmarshalBinary([]byte(body))
task.Consume()
}
// 销毁信息
_ = cache.Cache.ZRem(config.RedisKeyForTaskQueue, _cache)
_ = cache.Cache.HDel(config.RedisKeyForTaskQueueBody, _cache...)
} }
} }
} }
@ -48,12 +67,11 @@ func (this *TaskListen) Listen() {
} }
func NewTaskListen() *TaskListen { func NewTaskListen() *TaskListen {
if TaskListenEvent == nil { TaskListenEvent = &TaskListen{
TaskListenEvent = &TaskListen{ Produce: make(chan *Task, 1),
Produce: make(chan *Task, 1), Consume: make(chan *Task, 1),
Consume: make(chan *Task, 1), ticker: time.NewTicker(time.Second * 1),
lock: new(sync.Mutex), lock: new(sync.Mutex),
}
} }
return TaskListenEvent return TaskListenEvent
} }

View File

@ -3,6 +3,7 @@ package task
import ( import (
"ArmedPolice/utils" "ArmedPolice/utils"
"encoding/json" "encoding/json"
"fmt"
) )
type Order struct { type Order struct {
@ -19,6 +20,8 @@ func (this *Order) UnmarshalBinary(data []byte) error {
} }
func (this *Order) Handle() error { func (this *Order) Handle() error {
fmt.Println(this.ID)
fmt.Println(this.Name)
return nil return nil
} }

View File

@ -49,8 +49,7 @@ func (this *Task) Consume() {
func (this *Task) Handle() error { func (this *Task) Handle() error {
// 处理各种方法 // 处理各种方法
this.Body.(*Order).Handle() return this.Body.Handle()
return nil
} }
func NewTask() TaskHandle { func NewTask() TaskHandle {

View File

@ -4,6 +4,6 @@ import "testing"
func TestSha256String(t *testing.T) { func TestSha256String(t *testing.T) {
//t.Log(Md5String("9f735e0df9a1ddc702bf0a1a7b83033f9f7153a00c29de82cedadc9957289b05")) //t.Log(Md5String("9f735e0df9a1ddc702bf0a1a7b83033f9f7153a00c29de82cedadc9957289b05"))
t.Log(HASHIDEncode(12)) t.Log(HASHIDEncode(35))
t.Log(HASHIDDecode("d3rJnGwE9o")) t.Log(HASHIDDecode("EgmJ4Ga7LQ"))
} }