feat:完善项目

This commit is contained in:
henry
2021-11-18 18:28:34 +08:00
parent bcceef741b
commit ba423a2d19
20 changed files with 217 additions and 68 deletions

View File

@ -49,6 +49,7 @@ type (
Remark string // 备注信息
Supplier *InstanceLaunchParamsForSupplier
Material []*InstanceLaunchParamsForMaterial
Purchase []*InstanceLaunchParamsForPurchase
Distribution *InstanceLaunchParamsForDistribution
}
// InstanceLaunchParamsForSupplier 供应商信息
@ -61,10 +62,22 @@ type (
SupplierID uint64 // 供应商ID
Number float64 // 需要数量
}
// InstanceLaunchParamsForPurchase 采购信息
InstanceLaunchParamsForPurchase struct {
ID uint64 // 器材ID
SupplierID uint64 // 供应商ID
Price float64 // 采购单价
Number float64 // 采购数量
}
// InstanceLaunchParamsForDistribution 配送信息
InstanceLaunchParamsForDistribution struct {
Name, Mobile, Address string
}
// InstanceExamineParams 审核参数信息
InstanceExamineParams struct {
Material []*InstanceLaunchParamsForMaterial
Purchase []*InstanceLaunchParamsForPurchase
}
)
func (c *Instance) publish(kind int, reviewer []string) {
@ -83,6 +96,70 @@ func (c *Instance) publish(kind int, reviewer []string) {
})
}
func (c *Instance) material(tx *gorm.DB, material []*InstanceLaunchParamsForMaterial, workID uint64) error {
// 工单器材信息
workMaterials := make([]*model2.WorkMaterial, 0)
for _, v := range material {
if v.ID <= 0 || v.SupplierID <= 0 || v.Number <= 0 {
return errors.New("操作错误,器材参数不完全")
}
workMaterials = append(workMaterials, &model2.WorkMaterial{
MaterialID: v.ID, MaterialSupplierID: v.SupplierID, MaterialNumber: v.Number,
})
}
// 处理库存信息
if len(workMaterials) > 0 {
mManageMaterialSupplier := model.NewManageMaterialSupplier()
now := time.Now()
for _, v := range workMaterials {
v.WorkID = workID
if err := model2.UpdatesWhere(mManageMaterialSupplier.ManageMaterialSupplier, map[string]interface{}{
"frozen_stock": gorm.Expr("frozen_stock + ?", v.MaterialNumber), "updated_at": now,
}, []*model2.ModelWhere{
model2.NewWhere("material_id", v.MaterialID),
model2.NewWhere("supplier_id", v.MaterialSupplierID),
}, tx); err != nil {
return err
}
}
mWorkMaterial := model.NewWorkMaterial()
if err := model2.Creates(mWorkMaterial.WorkMaterial, &workMaterials, tx); err != nil {
return err
}
}
return nil
}
/// purchase 采购操作
func (c *Instance) purchase(tx *gorm.DB, purchase []*InstanceLaunchParamsForPurchase) error {
mManageMaterialPurchase := model.NewManageMaterialPurchase()
_purchase := make([]*model2.ManageMaterialPurchase, 0)
for _, v := range purchase {
_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
}
// List 列表信息
func (c *Instance) List(materialID uint64, kind, page, pageSize int) (*basic.PageDataResponse, error) {
mWorkInstance := model.NewWorkInstance()
@ -259,24 +336,12 @@ func (c *Instance) Launch(params *InstanceLaunchParams) error {
// 工单流程信息
mWorkProgress := model.NewWorkProgress()
// 工单器材信息
workMaterials := make([]*model2.WorkMaterial, 0)
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("操作错误,器材参数不完全")
}
workMaterials = append(workMaterials, &model2.WorkMaterial{
MaterialID: v.ID, MaterialSupplierID: v.SupplierID, MaterialNumber: v.Number,
})
}
}
// 查询工单进度流程
// TODO工单流程
@ -302,8 +367,6 @@ func (c *Instance) Launch(params *InstanceLaunchParams) error {
mWorkInstance.Status = model2.WorkInstanceStatusForOngoing
mWorkInstance.Schedule = nextWorkSchedule.ID
}
now := time.Now()
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
if err = model2.Create(mWorkInstance.WorkInstance, tx); err != nil {
return err
@ -318,25 +381,14 @@ func (c *Instance) Launch(params *InstanceLaunchParams) error {
return err
}
// 处理库存信息
if len(workMaterials) > 0 {
mManageMaterialSupplier := model.NewManageMaterialSupplier()
for _, v := range workMaterials {
v.WorkID = mWorkInstance.ID
if err = model2.UpdatesWhere(mManageMaterialSupplier.ManageMaterialSupplier, map[string]interface{}{
"frozen_stock": gorm.Expr("frozen_stock + ?", v.MaterialNumber), "updated_at": now,
}, []*model2.ModelWhere{
model2.NewWhere("material_id", v.MaterialID),
model2.NewWhere("supplier_id", v.MaterialSupplierID),
}, tx); err != nil {
return err
}
// 内修模块信息
if mWorkInstance.Kind == model2.WorkInstanceKindForWithin && params.IsAssist <= 0 {
// 物料信息
if err = c.material(tx, params.Material, mWorkInstance.ID); err != nil {
return err
}
mWorkMaterial := model.NewWorkMaterial()
if err = model2.Creates(mWorkMaterial.WorkMaterial, &workMaterials, tx); err != nil {
// 采购信息
if err = c.purchase(tx, params.Purchase); err != nil {
return err
}
}
@ -349,7 +401,7 @@ func (c *Instance) Launch(params *InstanceLaunchParams) error {
}
// Examine 审核操作
func (c *Instance) Examine(id uint64, status int, remark string, isAssist int) error {
func (c *Instance) Examine(id uint64, status int, remark string, isAssist int, params *InstanceExamineParams) error {
_status := model2.WorkProgressStatus(status)
if _status != model2.WorkProgressStatusForAgree && _status != model2.WorkProgressStatusForRefuse {
@ -384,8 +436,7 @@ func (c *Instance) Examine(id uint64, status int, remark string, isAssist int) e
} else if !isAuth {
return errors.New("操作错误,无权限审批")
}
if err = orm.GetDB().Transaction(func(tx *gorm.DB) error {
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
// 工单流程记录
mWorkProgress := model.NewWorkProgress()
mWorkProgress.UID = c.UID
@ -438,15 +489,23 @@ func (c *Instance) Examine(id uint64, status int, remark string, isAssist int) e
return err
}
}
// 处理器材信息
if mWorkInstance.Kind == model2.WorkInstanceKindForWithin && isAssist <= 0 {
// 物料信息
if err = c.material(tx, params.Material, id); err != nil {
return err
}
// 采购信息
if err = c.purchase(tx, params.Purchase); err != nil {
return err
}
}
// 推送通知
if nextScheduleInfo != nil {
go c.publish(int(mWorkInstance.Kind), nextScheduleInfo.Reviewer)
}
return nil
}); err != nil {
return err
}
return nil
})
}
// Delete 删除操作