From a10d59528a36dc5a1fbe4d9caa6b4abf25ab828c Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 12 一月 2024 10:49:08 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/aps/WMS
---
proto/inventory_order/server.go | 8
controllers/product_controller.go | 110 ++--
controllers/operation.go | 522 ++++++++++----------------
controllers/report_forms_controller.go | 4
models/file_template_attachment.go | 27
models/operation.go | 51 +-
controllers/reorder_rule_controller.go | 15
controllers/warehouse.go | 29 +
docs/swagger.yaml | 86 +++
request/operation.go | 56 +-
docs/docs.go | 109 ++++
docs/swagger.json | 109 ++++
proto/product_inventory/server.go | 12
router/router.go | 1
middleware/utils.go | 9
main.go | 1
models/operation_details.go | 5
proto/purchase_wms/server.go | 5
controllers/location_product_amount.go | 16
19 files changed, 668 insertions(+), 507 deletions(-)
diff --git a/controllers/location_product_amount.go b/controllers/location_product_amount.go
index 36d7c28..195d636 100644
--- a/controllers/location_product_amount.go
+++ b/controllers/location_product_amount.go
@@ -68,7 +68,7 @@
}
var operation models.Operation
for k, v := range records {
- if res := mysqlx.GetDB().Table("wms_operation").InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").Where("wms_operation.base_operation_type=? and wms_operation.status=? and wms_operation.to_location_id=? and wms_operation_details.product_id=?", constvar.BaseOperationTypeAdjust, constvar.OperationStatus_Ready, v.LocationId, v.ProductId).First(&operation); res.Error != nil {
+ if res := mysqlx.GetDB().Table("wms_operation").InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").Where("wms_operation.base_operation_type=? and wms_operation.status=? and wms_operation_details.to_location_id=? and wms_operation_details.product_id=?", constvar.BaseOperationTypeAdjust, constvar.OperationStatus_Ready, v.LocationId, v.ProductId).First(&operation); res.Error != nil {
if errors.Is(res.Error, gorm.ErrRecordNotFound) {
records[k].Status = constvar.OperationStatus_Finish
records[k].BaseOperationType = constvar.BaseOperationTypeAdjust
@@ -120,7 +120,11 @@
}
var existCount int64
- if err := models.NewOperationSearch().Orm.Table("wms_operation").InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").Where("wms_operation.from_location_id=? and wms_operation_details.product_id=? and wms_operation.base_operation_type=? and wms_operation.status=?", reqParams.LocationId, reqParams.ProductId, constvar.BaseOperationTypeAdjust, constvar.OperationStatus_Ready).Count(&existCount).Error; err != nil {
+ if err := models.NewOperationSearch().Orm.
+ Table("wms_operation").
+ InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").
+ Where("wms_operation.location_id=? and wms_operation_details.product_id=? and wms_operation.base_operation_type=? and wms_operation.status=?", reqParams.LocationId, reqParams.ProductId, constvar.BaseOperationTypeAdjust, constvar.OperationStatus_Ready).
+ Count(&existCount).Error; err != nil {
return err
}
if existCount > 0 {
@@ -149,8 +153,10 @@
}
detail := &models.OperationDetails{
- ProductId: reqParams.ProductId,
- Amount: reqParams.AdjustAmount,
+ ProductId: reqParams.ProductId,
+ Amount: reqParams.AdjustAmount,
+ FromLocationID: location.Id,
+ ToLocationID: reqParams.LocationId,
}
operation := models.Operation{
Number: strconv.FormatInt(time.Now().Unix(), 10),
@@ -159,8 +165,6 @@
Comment: "搴撳瓨鐩樼偣",
BaseOperationType: constvar.BaseOperationTypeAdjust,
Details: []*models.OperationDetails{detail},
- FromLocationID: location.Id,
- ToLocationID: reqParams.LocationId,
}
if err := models.WithTransaction(func(tx *gorm.DB) error {
diff --git a/controllers/operation.go b/controllers/operation.go
index 1dda2db..ae51152 100644
--- a/controllers/operation.go
+++ b/controllers/operation.go
@@ -61,6 +61,7 @@
util.ResponseFormat(c, code.RequestParamError, err.Error())
return
}
+
if err := slf.FormatLocation(¶ms); err != nil {
util.ResponseFormat(c, code.RequestParamError, err.Error())
return
@@ -122,32 +123,41 @@
return err
}
if operationType.BaseOperationType == constvar.BaseOperationTypeIncoming {
- if location, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeVendor)).First(); err != nil {
+ location, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeVendor)).First()
+ if err != nil {
return err
- } else {
- params.FromLocationID = location.Id
}
- if params.ToLocationID == 0 {
- return errors.New("璇烽�夋嫨鐩爣浣嶇疆")
+ for k, v := range params.Details {
+ params.Details[k].FromLocationID = location.Id
+ if v.ToLocationID == 0 {
+ params.Details[k].ToLocationID = params.LocationID
+ }
}
+
}
if operationType.BaseOperationType == constvar.BaseOperationTypeOutgoing {
- if location, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeCustomer)).First(); err != nil {
+ location, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeCustomer)).First()
+ if err != nil {
return err
- } else {
- params.ToLocationID = location.Id
}
- if params.FromLocationID == 0 {
- return errors.New("璇烽�夋嫨婧愪綅缃�")
+ for k, v := range params.Details {
+ params.Details[k].ToLocationID = location.Id
+ if v.FromLocationID == 0 {
+ return errors.New("璇烽�夋嫨鍑哄簱浣嶇疆")
+ }
}
+
}
if operationType.BaseOperationType == constvar.BaseOperationTypeInternal {
- if params.ToLocationID == 0 {
- return errors.New("璇烽�夋嫨鐩爣浣嶇疆")
+ for _, v := range params.Details {
+ if v.ToLocationID == 0 {
+ return errors.New("璇烽�夋嫨鐩爣浣嶇疆")
+ }
+ if v.FromLocationID == 0 {
+ return errors.New("璇烽�夋嫨婧愪綅缃�")
+ }
}
- if params.FromLocationID == 0 {
- return errors.New("璇烽�夋嫨婧愪綅缃�")
- }
+
}
return nil
}
@@ -167,6 +177,10 @@
if params.OperationDate == "" {
return errors.New("璇烽�夋嫨瀹夋帓鏃ユ湡")
+ }
+
+ if params.LocationID == 0 {
+ return errors.New("璇烽�夋嫨婧愪綅缃�")
}
if len(params.Details) <= 0 {
@@ -380,8 +394,27 @@
util.ResponseFormat(c, code.RequestError, "璇ュ嚭鍏ュ簱淇℃伅鏃犳硶瀹屾垚")
return
}
- err = models.WithTransaction(func(tx *gorm.DB) error {
+ listDetails, err := models.NewOperationDetailsSearch().SetOperationId(operation.Id).SetPreload(true).FindAll()
+ if err != nil {
+ util.ResponseFormat(c, code.RequestError, err.Error())
+ return
+ }
+
+ var mapLocAmount map[string]*models.LocationProductAmount
+ locAmountList, err := models.NewLocationProductAmountSearch().Find()
+ if err != nil {
+ util.ResponseFormat(c, code.RequestError, err.Error())
+ return
+ }
+ if len(locAmountList) > 0 {
+ mapLocAmount = make(map[string]*models.LocationProductAmount)
+ for _, v := range locAmountList {
+ mapLocAmount[strconv.Itoa(v.LocationId)+v.ProductId] = v
+ }
+ }
+
+ err = models.WithTransaction(func(tx *gorm.DB) error {
if err := models.NewOperationSearch().SetOrm(tx).SetID(id).Update(&models.Operation{Status: constvar.OperationStatus_Finish, AuditDate: time.Now().Format("2006-01-02 15:04:05")}); err != nil {
return err
}
@@ -389,154 +422,119 @@
return err
}
- var listProdtId []string
- var listProdt []*models.Material
- mapProdt := make(map[string]decimal.Decimal)
- listDetails, err := models.NewOperationDetailsSearch().SetOperationId(operation.Id).FindAll()
- if err != nil {
- return err
- }
- for _, v := range listDetails {
- listProdtId = append(listProdtId, v.ProductId)
- mapProdt[v.ProductId] = v.Amount
- }
-
- if err := models.NewMaterialSearch().Orm.Where("id IN ?", listProdtId).Find(&listProdt).Error; err != nil {
- return err
- }
-
if operation.BaseOperationType == constvar.BaseOperationTypeIncoming {
- var operationInputs []*models.Operation
- for k, v := range listProdt {
- value, ok := mapProdt[v.ID]
- if !ok {
- return errors.New("浜у搧绉嶇被寮傚父")
+ locationRoleList, err := models.NewLocationProductSearch().Find()
+ if err != nil {
+ return errors.New("鑾峰彇涓婃灦瑙勫垯淇℃伅澶辫触")
+ }
+ var mapLocationRoleProduct, mapLocationRoleCategory map[string]*models.LocationProduct
+ if len(locationRoleList) > 0 {
+ mapLocationRoleProduct = make(map[string]*models.LocationProduct)
+ mapLocationRoleCategory = make(map[string]*models.LocationProduct)
+ for _, v := range locationRoleList {
+ if v.RuleType == constvar.RuleType_Product {
+ mapLocationRoleProduct[strconv.Itoa(v.AreaId)+v.ProductId] = v
+ }
+ if v.RuleType == constvar.RuleType_ProductCategory {
+ mapLocationRoleCategory[strconv.Itoa(v.AreaId)+strconv.Itoa(v.ProductCategoryID)] = v
+ }
}
+ }
- listProdt[k].Amount = listProdt[k].Amount.Add(value)
- if err := tx.Save(listProdt[k]).Error; err != nil {
+ var details []*models.OperationDetails
+ for k, v := range listDetails {
+ listDetails[k].Product.Amount = listDetails[k].Product.Amount.Add(v.Amount)
+ if err := tx.Save(&listDetails[k].Product).Error; err != nil {
return err
}
- locationRule, err := models.NewLocationProductSearch().SetProductId(v.ID).SetAreaId(operation.ToLocationID).First()
- if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
- return err
- }
-
- if err == nil {
- operationTransfer := &models.Operation{
- Number: operation.Number,
- SourceNumber: operation.SourceNumber,
- OperationTypeId: 0,
- OperationTypeName: operation.OperationTypeName,
- Status: constvar.OperationStatus_Finish,
- FromLocationID: locationRule.AreaId,
- ToLocationID: locationRule.LocationId,
- OperationDate: operation.OperationDate,
- ContacterID: operation.ContacterID,
- ContacterName: operation.ContacterName,
- CompanyID: operation.CompanyID,
- CompanyName: operation.CompanyName,
- Comment: operation.Comment,
- BaseOperationType: constvar.BaseOperationTypeInternal,
- Details: []*models.OperationDetails{
- {
- ProductId: v.ID,
- Amount: value,
- },
- },
+ if roleProduct, ok := mapLocationRoleProduct[strconv.Itoa(operation.LocationID)+v.ProductId]; ok {
+ detail := &models.OperationDetails{
+ ProductId: v.ProductId,
+ Amount: v.Amount,
+ FromLocationID: roleProduct.AreaId,
+ ToLocationID: roleProduct.LocationId,
}
- operationInputs = append(operationInputs, operationTransfer)
+ details = append(details, detail)
- //if err := tx.Create(&operationTransfer).Error; err != nil {
- // return err
- //}
-
- locAmount, err := models.NewLocationProductAmountSearch().
- SetProductId(v.ID).
- SetLocationId(locationRule.LocationId).
- First()
- if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
- return err
- }
- locAmount.LocationId = locationRule.LocationId
- locAmount.ProductId = v.ID
- locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
- locAmount.Amount = locAmount.Amount.Add(value)
- locAmount.ProductCategoryID = v.CategoryId
- if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
- return res.Error
- }
- } else {
- locationRule, err = models.NewLocationProductSearch().SetProductCategoryId(v.CategoryId).SetAreaId(operation.ToLocationID).First()
- if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
- return err
- }
- if err == nil {
- operationTransfer := &models.Operation{
- Number: operation.Number,
- SourceNumber: operation.SourceNumber,
- OperationTypeId: 0,
- OperationTypeName: operation.OperationTypeName,
- Status: constvar.OperationStatus_Finish,
- FromLocationID: locationRule.AreaId,
- ToLocationID: locationRule.LocationId,
- OperationDate: operation.OperationDate,
- ContacterID: operation.ContacterID,
- ContacterName: operation.ContacterName,
- CompanyID: operation.CompanyID,
- CompanyName: operation.CompanyName,
- Comment: operation.Comment,
- BaseOperationType: constvar.BaseOperationTypeInternal,
- Details: []*models.OperationDetails{
- {
- ProductId: v.ID,
- Amount: value,
- },
- },
- }
- operationInputs = append(operationInputs, operationTransfer)
-
- //if err := tx.Create(&operationTransfer).Error; err != nil {
- // return err
- //}
-
- locAmount, err := models.NewLocationProductAmountSearch().
- SetProductId(v.ID).
- SetLocationId(locationRule.LocationId).
- First()
- if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
- return err
- }
- locAmount.LocationId = locationRule.LocationId
- locAmount.ProductId = v.ID
- locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
- locAmount.Amount = locAmount.Amount.Add(value)
- locAmount.ProductCategoryID = v.CategoryId
+ if locAmount, aok := mapLocAmount[strconv.Itoa(roleProduct.LocationId)+v.ProductId]; aok {
+ locAmount.Amount = locAmount.Amount.Add(v.Amount)
if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
return res.Error
}
} else {
- locAmount, err := models.NewLocationProductAmountSearch().
- SetProductId(v.ID).
- SetLocationId(operation.ToLocationID).
- First()
- if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+ if err := models.NewLocationProductAmountSearch().Create(&models.LocationProductAmount{
+ LocationId: roleProduct.LocationId,
+ ProductCategoryID: v.Product.CategoryId,
+ ProductId: v.ProductId,
+ Amount: v.Amount,
+ CreateDate: time.Now().Format("2006-01-02 15:04:05"),
+ }); err != nil {
return err
}
- locAmount.LocationId = operation.ToLocationID
- locAmount.ProductId = v.ID
- locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
- locAmount.Amount = locAmount.Amount.Add(value)
- locAmount.ProductCategoryID = v.CategoryId
- if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
- return res.Error
+ }
+ } else {
+ if roleCategory, cok := mapLocationRoleCategory[strconv.Itoa(operation.LocationID)+strconv.Itoa(v.Product.CategoryId)]; cok {
+ detail := &models.OperationDetails{
+ ProductId: v.ProductId,
+ Amount: v.Amount,
+ FromLocationID: roleCategory.AreaId,
+ ToLocationID: roleCategory.LocationId,
+ }
+ details = append(details, detail)
+
+ if locAmount, aok := mapLocAmount[strconv.Itoa(roleCategory.LocationId)+v.ProductId]; aok {
+ locAmount.Amount = locAmount.Amount.Add(v.Amount)
+ if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
+ return res.Error
+ }
+ } else {
+ if err := models.NewLocationProductAmountSearch().Create(&models.LocationProductAmount{
+ LocationId: roleCategory.LocationId,
+ ProductCategoryID: v.Product.CategoryId,
+ ProductId: v.ProductId,
+ Amount: v.Amount,
+ CreateDate: time.Now().Format("2006-01-02 15:04:05"),
+ }); err != nil {
+ return err
+ }
+ }
+ } else {
+ if locAmount, aok := mapLocAmount[strconv.Itoa(operation.LocationID)+v.ProductId]; aok {
+ locAmount.Amount = locAmount.Amount.Add(v.Amount)
+ if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
+ return res.Error
+ }
+ } else {
+ if err := models.NewLocationProductAmountSearch().Create(&models.LocationProductAmount{
+ LocationId: operation.LocationID,
+ ProductCategoryID: v.Product.CategoryId,
+ ProductId: v.ProductId,
+ Amount: v.Amount,
+ CreateDate: time.Now().Format("2006-01-02 15:04:05"),
+ }); err != nil {
+ return err
+ }
}
}
}
}
- if len(operationInputs) > 0 {
- if err := tx.Create(&operationInputs).Error; err != nil {
+ if len(details) > 0 {
+ if err := tx.Create(&models.Operation{
+ Number: operation.Number,
+ SourceNumber: operation.SourceNumber,
+ OperationTypeId: 0,
+ OperationTypeName: operation.OperationTypeName,
+ Status: constvar.OperationStatus_Finish,
+ OperationDate: operation.OperationDate,
+ ContacterID: operation.ContacterID,
+ ContacterName: operation.ContacterName,
+ CompanyID: operation.CompanyID,
+ CompanyName: operation.CompanyName,
+ Comment: operation.Comment,
+ BaseOperationType: constvar.BaseOperationTypeInternal,
+ Details: details,
+ }).Error; err != nil {
return err
}
}
@@ -547,11 +545,7 @@
}
if operation.BaseOperationType == constvar.BaseOperationTypeOutgoing {
- for k, v := range listProdt {
- value, ok := mapProdt[v.ID]
- if !ok {
- return errors.New("浜у搧绉嶇被寮傚父")
- }
+ for k, v := range listDetails {
//todo 婕旂ず娴嬭瘯鏁版嵁
data, err := os.ReadFile("conf/input.json")
if err != nil {
@@ -563,30 +557,29 @@
return errors.New("鏍煎紡杞崲澶辫触")
}
if opa.OpaCheck(c, m, "operation") {
- if v.Amount.LessThan(value) {
- return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Name, v.Amount.String(), value.String()))
+ if v.Product.Amount.LessThan(v.Amount) {
+ return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Product.Name, v.Product.Amount.String(), v.Amount.String()))
}
}
- listProdt[k].Amount = listProdt[k].Amount.Sub(value)
- if err := tx.Save(listProdt[k]).Error; err != nil {
+ //todo ================end===============================
+ if v.Product.Amount.LessThan(v.Amount) {
+ return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Product.Name, v.Product.Amount.String(), v.Amount.String()))
+ }
+ listDetails[k].Product.Amount = listDetails[k].Product.Amount.Sub(v.Amount)
+ if err := tx.Save(&listDetails[k].Product).Error; err != nil {
return err
}
- locAmount, res := models.NewLocationProductAmountSearch().
- SetProductId(v.ID).
- SetLocationId(operation.FromLocationID).
- FirstRes()
- if res.Error != nil {
- if res.Error == gorm.ErrRecordNotFound {
- return errors.New("褰撳墠浠撳簱娌℃湁璇ヤ骇鍝�,璇峰厛鍏ュ簱")
+
+ if locAmount, aok := mapLocAmount[strconv.Itoa(v.FromLocationID)+v.ProductId]; aok {
+ if locAmount.Amount.LessThan(v.Amount) {
+ return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Product.Name, locAmount.Amount.String(), v.Amount.String()))
}
- return res.Error
- }
- if locAmount.Amount.LessThan(value) {
- return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Name, v.Amount.String(), value.String()))
- }
- locAmount.Amount = locAmount.Amount.Sub(value)
- if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(locAmount); err != nil {
- return err
+ locAmount.Amount = locAmount.Amount.Sub(v.Amount)
+ if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(locAmount); err != nil {
+ return err
+ }
+ } else {
+ return errors.New("褰撳墠浠撳簱娌℃湁璇ヤ骇鍝�,璇峰厛鍏ュ簱")
}
}
if operation.Source != "" {
@@ -595,150 +588,34 @@
}
if operation.BaseOperationType == constvar.BaseOperationTypeInternal {
- var operationInputs []*models.Operation
- for _, v := range listProdt {
- value, ok := mapProdt[v.ID]
- if !ok {
- return errors.New("浜у搧绉嶇被寮傚父")
- }
- //listProdt[k].Amount = listProdt[k].Amount.Add(value)
- //if err := tx.Save(listProdt[k]).Error; err != nil {
- // return err
- //}
- fromLocAmount, res := models.NewLocationProductAmountSearch().
- SetProductId(v.ID).
- SetLocationId(operation.FromLocationID).
- FirstRes()
- if res.Error != nil {
- return err
- }
- if fromLocAmount.Amount.LessThan(value) {
- return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,璋冩嫧锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愯皟鎷ㄦ搷浣�", v.Name, v.Amount.String(), value.String()))
- }
- fromLocAmount.Amount = fromLocAmount.Amount.Sub(value)
- if err := models.NewLocationProductAmountSearch().SetID(fromLocAmount.Id).Update(fromLocAmount); err != nil {
- return err
- }
-
- locationRule, err := models.NewLocationProductSearch().SetProductId(v.ID).SetAreaId(operation.ToLocationID).First()
- if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
- return err
- }
-
- if err == nil {
- operationTransfer := &models.Operation{
- Number: operation.Number,
- SourceNumber: operation.SourceNumber,
- OperationTypeId: 0,
- OperationTypeName: operation.OperationTypeName,
- Status: constvar.OperationStatus_Finish,
- FromLocationID: locationRule.AreaId,
- ToLocationID: locationRule.LocationId,
- OperationDate: operation.OperationDate,
- ContacterID: operation.ContacterID,
- ContacterName: operation.ContacterName,
- CompanyID: operation.CompanyID,
- CompanyName: operation.CompanyName,
- Comment: operation.Comment,
- BaseOperationType: constvar.BaseOperationTypeInternal,
- Details: []*models.OperationDetails{
- {
- ProductId: v.ID,
- Amount: value,
- },
- },
+ for _, v := range listDetails {
+ if fromLocAmount, aok := mapLocAmount[strconv.Itoa(v.FromLocationID)+v.ProductId]; aok {
+ if fromLocAmount.Amount.LessThan(v.Amount) {
+ return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Product.Name, fromLocAmount.Amount.String(), v.Amount.String()))
}
- operationInputs = append(operationInputs, operationTransfer)
-
- //if err := tx.Create(&operationTransfer).Error; err != nil {
- // return err
- //}
-
- locAmount, err := models.NewLocationProductAmountSearch().
- SetProductId(v.ID).
- SetLocationId(locationRule.LocationId).
- First()
- if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+ fromLocAmount.Amount = fromLocAmount.Amount.Sub(v.Amount)
+ if err := models.NewLocationProductAmountSearch().SetID(fromLocAmount.Id).Update(fromLocAmount); err != nil {
return err
- }
- locAmount.LocationId = locationRule.LocationId
- locAmount.ProductId = v.ID
- locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
- locAmount.Amount = locAmount.Amount.Add(value)
- locAmount.ProductCategoryID = v.CategoryId
- if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
- return res.Error
}
} else {
- locationRule, err = models.NewLocationProductSearch().SetProductCategoryId(v.CategoryId).SetAreaId(operation.ToLocationID).First()
- if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+ return errors.New("褰撳墠浠撳簱娌℃湁璇ヤ骇鍝�,璇峰厛鍏ュ簱")
+ }
+
+ if toLocAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok {
+ toLocAmount.Amount = toLocAmount.Amount.Add(v.Amount)
+ if err := models.NewLocationProductAmountSearch().SetID(toLocAmount.Id).Update(toLocAmount); err != nil {
return err
}
- if err == nil {
- operationTransfer := &models.Operation{
- Number: operation.Number,
- SourceNumber: operation.SourceNumber,
- OperationTypeId: 0,
- OperationTypeName: operation.OperationTypeName,
- Status: constvar.OperationStatus_Finish,
- FromLocationID: locationRule.AreaId,
- ToLocationID: locationRule.LocationId,
- OperationDate: operation.OperationDate,
- ContacterID: operation.ContacterID,
- ContacterName: operation.ContacterName,
- CompanyID: operation.CompanyID,
- CompanyName: operation.CompanyName,
- Comment: operation.Comment,
- BaseOperationType: constvar.BaseOperationTypeInternal,
- Details: []*models.OperationDetails{
- {
- ProductId: v.ID,
- Amount: value,
- },
- },
- }
- operationInputs = append(operationInputs, operationTransfer)
-
- //if err := tx.Create(&operationTransfer).Error; err != nil {
- // return err
- //}
-
- locAmount, err := models.NewLocationProductAmountSearch().
- SetProductId(v.ID).
- SetLocationId(locationRule.LocationId).
- First()
- if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
- return err
- }
- locAmount.LocationId = locationRule.LocationId
- locAmount.ProductId = v.ID
- locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
- locAmount.Amount = locAmount.Amount.Add(value)
- locAmount.ProductCategoryID = v.CategoryId
- if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
- return res.Error
- }
- } else {
- locAmount, err := models.NewLocationProductAmountSearch().
- SetProductId(v.ID).
- SetLocationId(operation.ToLocationID).
- First()
- if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
- return err
- }
- locAmount.LocationId = operation.ToLocationID
- locAmount.ProductId = v.ID
- locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
- locAmount.Amount = locAmount.Amount.Add(value)
- if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
- return res.Error
- }
+ } else {
+ if err := models.NewLocationProductAmountSearch().Create(&models.LocationProductAmount{
+ LocationId: v.ToLocationID,
+ ProductCategoryID: v.Product.CategoryId,
+ ProductId: v.ProductId,
+ Amount: v.Amount,
+ CreateDate: time.Now().Format("2006-01-02 15:04:05"),
+ }); err != nil {
+ return err
}
- }
- }
- if len(operationInputs) > 0 {
- if err := tx.Create(&operationInputs).Error; err != nil {
- return err
}
}
}
@@ -768,10 +645,10 @@
Amount: v.Amount,
Unit: v.Product.Unit,
Weight: operation.Weight,
- FromLocationId: operation.FromLocationID,
- FromLocation: operation.FromLocation.Name,
- ToLocationId: operation.ToLocationID,
- ToLocation: operation.ToLocation.Name,
+ FromLocationId: v.FromLocationID,
+ FromLocation: v.FromLocation.Name,
+ ToLocationId: v.ToLocationID,
+ ToLocation: v.ToLocation.Name,
}
histories = append(histories, history)
}
@@ -983,11 +860,11 @@
}
func ExportInputSelfmade(category constvar.FileTemplateCategory, operation *models.Operation) (string, error) {
- template, err := models.NewFileTemplateAttachmentSearch().SetPreload(true).SetCategory(category).First()
+ template, err := models.NewFileTemplateAttachmentSearch().SetCategory(category).First()
if err != nil {
return "", errors.New("鑾峰彇妯$増璁板綍澶辫触:" + err.Error())
}
- readerCloser, err := http.HttpGetWithReadCloser(template.Attachment.FileUrl)
+ readerCloser, err := http.HttpGetWithReadCloser(template.FileUrl)
if err != nil {
return "", errors.New("鑾峰彇妯$増澶辫触:" + err.Error())
}
@@ -1030,7 +907,7 @@
f.SetCellValue("Sheet1", "C"+strconv.Itoa(rowIndex), v.Product.Specs)
f.SetCellValue("Sheet1", "D"+strconv.Itoa(rowIndex), v.Product.Unit)
f.SetCellValue("Sheet1", "E"+strconv.Itoa(rowIndex), v.Amount.String())
- f.SetCellValue("Sheet1", "H"+strconv.Itoa(rowIndex), operation.ToLocation.Name)
+ f.SetCellValue("Sheet1", "H"+strconv.Itoa(rowIndex), v.ToLocation.Name)
f.SetCellValue("Sheet1", "I"+strconv.Itoa(rowIndex), operation.Comment)
rowIndex++
totalAmount = totalAmount.Add(v.Amount)
@@ -1063,12 +940,12 @@
}
func ExportOutputOperation(category constvar.FileTemplateCategory, operation *models.Operation) (string, error) {
- repositoryLevels := strings.Split(operation.FromLocation.JointName, "/")
- template, err := models.NewFileTemplateAttachmentSearch().SetPreload(true).SetCategory(category).First()
+ repositoryLevels := strings.Split(operation.Location.JointName, "/")
+ template, err := models.NewFileTemplateAttachmentSearch().SetCategory(category).First()
if err != nil {
return "", errors.New("鑾峰彇妯$増璁板綍澶辫触:" + err.Error())
}
- readerCloser, err := http.HttpGetWithReadCloser(template.Attachment.FileUrl)
+ readerCloser, err := http.HttpGetWithReadCloser(template.FileUrl)
if err != nil {
return "", errors.New("鑾峰彇妯$増澶辫触:" + err.Error())
}
@@ -1194,9 +1071,14 @@
return
}
- db := mysqlx.GetDB().Table("wms_operation").Select("wms_operation.id as operation_id,wms_operation.number,wms_operation.base_operation_type,material.id AS product_id,material.`name` AS product_name,wms_operation_details.amount,material.unit,wms_operation.from_location_id,from_location.`name` AS from_location,wms_operation.to_location_id,to_location.`name` AS to_location,wms_operation.operation_date as date,wms_operation.`status`").InnerJoins("inner join wms_operation_details ON wms_operation_details.operation_id = wms_operation.id").InnerJoins("INNER JOIN material ON material.id = wms_operation_details.product_id").InnerJoins("INNER JOIN wms_location AS from_location ON from_location.id = wms_operation.from_location_id").InnerJoins("INNER JOIN wms_location AS to_location ON to_location.id = wms_operation.to_location_id")
+ db := mysqlx.GetDB().Table("wms_operation").
+ Select("wms_operation.id as operation_id,wms_operation.number,wms_operation.base_operation_type,material.id AS product_id,material.`name` AS product_name,wms_operation_details.amount,material.unit,wms_operation_details.from_location_id,from_location.`name` AS from_location,wms_operation_details.to_location_id,to_location.`name` AS to_location,wms_operation.operation_date as date,wms_operation.`status`").
+ InnerJoins("inner join wms_operation_details ON wms_operation_details.operation_id = wms_operation.id").
+ InnerJoins("INNER JOIN material ON material.id = wms_operation_details.product_id").
+ InnerJoins("INNER JOIN wms_location AS from_location ON from_location.id = wms_operation_details.from_location_id").
+ InnerJoins("INNER JOIN wms_location AS to_location ON to_location.id = wms_operation_details.to_location_id")
if params.Condition != "" {
- db = db.Where("wms_operation.number like ? or wms_operation.source_number like ? or from_location.`name` like ? or to_location.`name` like ?", "%"+params.Condition+"%", "%"+params.Condition+"%", "%"+params.Condition+"%", "%"+params.Condition+"%")
+ db = db.Where("wms_operation.number like ? or wms_operation.source_number like ? or from_location.`name` like ? or to_location.`name` like ? or material.`name` like ? ", "%"+params.Condition+"%", "%"+params.Condition+"%", "%"+params.Condition+"%", "%"+params.Condition+"%", "%"+params.Condition+"%")
}
var (
records = make([]*response.InventoryHistory, 0)
@@ -1208,7 +1090,7 @@
return
}
- if err := db.Offset((params.Page - 1) * params.PageSize).Limit(params.PageSize).Find(&records).Error; err != nil {
+ if err := db.Offset((params.Page - 1) * params.PageSize).Limit(params.PageSize).Order("wms_operation.created_at desc").Find(&records).Error; err != nil {
util.ResponseFormat(c, code.RequestError, "鏌ユ壘澶辫触:"+err.Error())
return
}
diff --git a/controllers/product_controller.go b/controllers/product_controller.go
index 449e97b..84d970e 100644
--- a/controllers/product_controller.go
+++ b/controllers/product_controller.go
@@ -12,6 +12,7 @@
"wms/constvar"
"wms/extend/code"
"wms/extend/util"
+ "wms/middleware"
"wms/models"
"wms/pkg/logx"
"wms/pkg/mysqlx"
@@ -464,8 +465,10 @@
}
detail := &models.OperationDetails{
- ProductId: params.ProductId,
- Amount: params.Amount,
+ ProductId: params.ProductId,
+ Amount: params.Amount,
+ FromLocationID: params.FromLocationId,
+ ToLocationID: params.ToLocationId,
}
operation := models.Operation{
//Number: strconv.FormatInt(time.Now().Unix(), 10),
@@ -473,8 +476,6 @@
SourceNumber: params.SourceNumber,
OperationTypeId: 0,
Status: constvar.OperationStatus_Ready,
- FromLocationID: params.FromLocationId,
- ToLocationID: params.ToLocationId,
OperationDate: time.Now().Format("2006-01-02 15:04:05"),
Details: []*models.OperationDetails{detail},
BaseOperationType: constvar.BaseOperationTypeDisuse,
@@ -505,7 +506,12 @@
return
}
- db := models.NewOperationSearch().Orm.Table("wms_operation").Select("wms_operation.id,wms_operation.number,wms_operation.source_number,wms_operation.status,wms_operation.from_location_id,wms_operation.to_location_id,wms_operation.operation_date,wms_operation.contacter_id,wms_operation.contacter_name,wms_operation.company_id,wms_operation.company_name,wms_operation.comment,wms_operation_details.product_id,material.name as product_name,material.unit,wms_operation_details.amount,wms_operation.base_operation_type").InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").InnerJoins("inner join material on material.id=wms_operation_details.product_id").Where("wms_operation.base_operation_type=?", constvar.BaseOperationTypeDisuse)
+ db := models.NewOperationSearch().Orm.
+ Table("wms_operation").
+ Select("wms_operation.id,wms_operation.number,wms_operation.source_number,wms_operation.status,wms_operation_details.from_location_id,wms_operation_details.to_location_id,wms_operation.operation_date,wms_operation.contacter_id,wms_operation.contacter_name,wms_operation.company_id,wms_operation.company_name,wms_operation.comment,wms_operation_details.product_id,material.name as product_name,material.unit,wms_operation_details.amount,wms_operation.base_operation_type").
+ InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").
+ InnerJoins("inner join material on material.id=wms_operation_details.product_id").
+ Where("wms_operation.base_operation_type=?", constvar.BaseOperationTypeDisuse)
if params.Number != "" {
db = db.Where("wms_operation.number like ? or wms_operation.source_number like ? or material.name like ?", fmt.Sprintf("%%%v%%", params.Number), fmt.Sprintf("%%%v%%", params.Number), fmt.Sprintf("%%%v%%", params.Number))
@@ -564,62 +570,34 @@
if err := models.NewOperationSearch().SetOrm(tx).SetID(id).Update(&models.Operation{Status: constvar.OperationStatus_Finish, AuditDate: time.Now().Format("2006-01-02 15:04:05")}); err != nil {
return err
}
- var listProdtId []string
- var listProdt []*models.Material
- mapProdt := make(map[string]decimal.Decimal)
- listDetails, err := models.NewOperationDetailsSearch().SetOperationId(operation.Id).FindAll()
+
+ listDetails, err := models.NewOperationDetailsSearch().SetOperationId(operation.Id).SetPreload(true).FindAll()
if err != nil {
return err
}
- for _, v := range listDetails {
- listProdtId = append(listProdtId, v.ProductId)
- mapProdt[v.ProductId] = v.Amount
- }
- if err := models.NewMaterialSearch().Orm.Where("id IN ?", listProdtId).Find(&listProdt).Error; err != nil {
- return err
- }
- for k, v := range listProdt {
- if value, ok := mapProdt[v.ID]; !ok {
- return errors.New("浜у搧绉嶇被寮傚父")
- } else {
- if v.Amount.LessThan(value) {
- return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鎶ュ簾锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愭姤搴熸搷浣�", v.Name, v.Amount.String(), value.String()))
- }
- listProdt[k].Amount = listProdt[k].Amount.Sub(value)
- if err := tx.Save(listProdt[k]).Error; err != nil {
- return err
- }
- //var locAmount models.LocationProductAmount
- //if err := models.NewLocationProductAmountSearch().Orm.
- // Table("wms_location_product_amount").
- // Joins("inner join wms_location_product on wms_location_product.id=wms_location_product_amount.location_product_id").
- // Where("wms_location_product.product_id=? and wms_location_product.location_id=?", v.ID, operation.FromLocationID).
- // First(&locAmount).Error; err != nil {
- // return err
- //}
- //if locAmount.Amount.LessThan(value) {
- // return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Name, v.Amount.String(), value.String()))
- //}
- //locAmount.Amount = locAmount.Amount.Sub(value)
- //if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(&locAmount); err != nil {
- // return err
- //}
+ for k, v := range listDetails {
+ if v.Product.Amount.LessThan(v.Amount) {
+ return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鎶ュ簾锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愭姤搴熸搷浣�", v.Product.Name, v.Product.Amount.String(), v.Amount.String()))
+ }
+ listDetails[k].Product.Amount = listDetails[k].Product.Amount.Sub(v.Amount)
+ if err := tx.Save(&listDetails[k].Product).Error; err != nil {
+ return err
+ }
- locAmount, res := models.NewLocationProductAmountSearch().
- SetProductId(v.ID).
- SetLocationId(operation.FromLocationID).
- FirstRes()
- if res.Error != nil {
- return err
- }
- if locAmount.Amount.LessThan(value) {
- return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鎶ュ簾锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愭姤搴熸搷浣�", v.Name, v.Amount.String(), value.String()))
- }
- locAmount.Amount = locAmount.Amount.Sub(value)
- if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(locAmount); err != nil {
- return err
- }
+ locAmount, res := models.NewLocationProductAmountSearch().
+ SetProductId(v.ProductId).
+ SetLocationId(v.FromLocationID).
+ FirstRes()
+ if res.Error != nil {
+ return err
+ }
+ if locAmount.Amount.LessThan(v.Amount) {
+ return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鎶ュ簾锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愭姤搴熸搷浣�", v.Product.Name, locAmount.Amount.String(), v.Amount.String()))
+ }
+ locAmount.Amount = locAmount.Amount.Sub(v.Amount)
+ if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(locAmount); err != nil {
+ return err
}
}
return nil
@@ -672,6 +650,8 @@
//ProductName: params.ProductName,
Amount: params.Amount,
//Unit: params.Unit,
+ FromLocationID: params.FromLocationId,
+ ToLocationID: params.ToLocationId,
}
operation := models.Operation{
Id: params.Id,
@@ -679,8 +659,6 @@
SourceNumber: params.SourceNumber,
OperationTypeId: 0,
Status: params.Status,
- FromLocationID: params.FromLocationId,
- ToLocationID: params.ToLocationId,
OperationDate: params.OperationDate,
Details: []*models.OperationDetails{detail},
BaseOperationType: params.BaseOperationType,
@@ -723,7 +701,7 @@
}
search := models.NewOperationSearch().SetPage(params.Page, params.PageSize).SetPreload(true).SetOrder("created_at desc")
- search.SetOrm(search.Orm.InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").Where("wms_operation_details.product_id=? and (wms_operation.from_location_id=? or wms_operation.to_location_id=?)", params.ProductId, params.LocationId, params.LocationId))
+ search.SetOrm(search.Orm.InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").Where("wms_operation_details.product_id=? and (wms_operation_details.from_location_id=? or wms_operation_details.to_location_id=?)", params.ProductId, params.LocationId, params.LocationId))
list, total, err := search.SetBaseOperationType(constvar.BaseOperationTypeAdjust).Find()
if err != nil {
@@ -769,3 +747,17 @@
}
util.ResponseFormat(c, code.Success, "鎿嶄綔鎴愬姛")
}
+
+// GetUserInfo
+//
+// @Tags 浜у搧
+// @Summary 鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
+// @Produce application/json
+// @Success 200 {object} util.ResponseList{data=map[string]interface{}} "鎴愬姛"
+// @Router /api-wms/v1/product/getUserInfo [get]
+func (slf ProductController) GetUserInfo(c *gin.Context) {
+ userInfo := middleware.GetUserInfo(c)
+ m := make(map[string]interface{})
+ m["userName"] = userInfo.Username
+ util.ResponseFormat(c, code.Success, m)
+}
diff --git a/controllers/reorder_rule_controller.go b/controllers/reorder_rule_controller.go
index d1fce38..2a42385 100644
--- a/controllers/reorder_rule_controller.go
+++ b/controllers/reorder_rule_controller.go
@@ -150,17 +150,17 @@
var pa []request.ProductAmount
search := models.NewOperationDetailsSearch()
search.Orm = search.Orm.Model(&models.OperationDetails{}).
- Select("wms_operation_details.product_id, wms_operation_details.amount, wms_operation.to_location_id as to_location_id, " +
- "wms_operation.from_location_id as from_location_id, wms_operation.base_operation_type").
+ Select("wms_operation_details.product_id, wms_operation_details.amount, wms_operation_details.to_location_id as to_location_id, " +
+ "wms_operation_details.from_location_id as from_location_id, wms_operation.base_operation_type").
Joins("left join wms_operation on wms_operation_details.operation_id = wms_operation.id")
if len(productIds) > 0 {
search.Orm.Where("wms_operation_details.product_id in (?)", productIds)
}
if len(toLocationIds) > 0 {
- search.Orm.Where("wms_operation.to_location_id in (?)", toLocationIds)
+ search.Orm.Where("wms_operation_details.to_location_id in (?)", toLocationIds)
}
if len(fromLocationIds) > 0 {
- search.Orm.Where("wms_operation.from_location_id in (?)", fromLocationIds)
+ search.Orm.Where("wms_operation_details.from_location_id in (?)", fromLocationIds)
}
if len(status) > 0 {
search.Orm.Where("wms_operation.status in (?)", status)
@@ -332,16 +332,17 @@
var details models.OperationDetails
details.ProductId = params.ProductId
details.Amount = params.OrderNumber
+ details.FromLocationID = 1
+ details.ToLocationID = params.LocationId
operation.Details = append(operation.Details, &details)
operation.BaseOperationType = constvar.BaseOperationTypeIncoming
operation.Status = constvar.OperationStatus_Ready
operation.OperationTypeId = operationType.Id
operation.OperationTypeName = operationType.Name
operation.OperationDate = timex.TimeToString2(time.Now())
- //todo 渚涘簲鍟嗕綅缃�
- operation.FromLocationID = 1
+ operation.LocationID = params.LocationId
operation.Number = strconv.FormatInt(time.Now().Unix(), 10)
- operation.ToLocationID = params.LocationId
+
operation.SourceNumber = SourceNumber
err = models.WithTransaction(func(db *gorm.DB) error {
diff --git a/controllers/report_forms_controller.go b/controllers/report_forms_controller.go
index a495b07..ced1c45 100644
--- a/controllers/report_forms_controller.go
+++ b/controllers/report_forms_controller.go
@@ -97,8 +97,8 @@
Where("wms_operation.base_operation_type in (?)", []constvar.BaseOperationType{constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeInternal, constvar.BaseOperationTypeDisuse}).
Where("wms_operation.status in (?)", []constvar.OperationStatus{constvar.OperationStatus_Ready, constvar.OperationStatus_Finish})
if len(locationIds) > 0 {
- dbIn.Where("wms_operation.to_location_id in (?)", locationIds)
- dbOut.Where("wms_operation.from_location_id in (?)", locationIds)
+ dbIn.Where("wms_operation_details.to_location_id in (?)", locationIds)
+ dbOut.Where("wms_operation_details.from_location_id in (?)", locationIds)
}
if len(productIds) > 0 {
dbIn.Where("wms_operation_details.product_id in (?)", productIds)
diff --git a/controllers/warehouse.go b/controllers/warehouse.go
index bc2aa7f..f9b54c9 100644
--- a/controllers/warehouse.go
+++ b/controllers/warehouse.go
@@ -122,7 +122,34 @@
util.ResponseFormat(c, code.RequestParamError, err.Error())
return
}
- err := models.NewWarehouseSearch().SetID(params.Id).Update(¶ms)
+ warehouse, err := models.NewWarehouseSearch().SetID(params.Id).First()
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "浠撳簱涓嶅瓨鍦�")
+ return
+ }
+ err = models.WithTransaction(func(db *gorm.DB) error {
+ //鏇存柊浣滀笟绫诲瀷鍚嶇О
+ if params.Name != warehouse.Name {
+ m := make(map[string]interface{})
+ m["name"] = params.Name + "-鍏ュ簱"
+ err := models.NewOperationTypeSearch().SetOrm(db).SetBaseOperationType(constvar.BaseOperationTypeIncoming).SetWarehouseId(params.Id).UpdateByMap(m)
+ if err != nil {
+ return err
+ }
+ m["name"] = params.Name + "-鍑哄簱"
+ err = models.NewOperationTypeSearch().SetOrm(db).SetBaseOperationType(constvar.BaseOperationTypeOutgoing).SetWarehouseId(params.Id).UpdateByMap(m)
+ if err != nil {
+ return err
+ }
+ m["name"] = params.Name + "-鍐呴儴璋冩嫧"
+ err = models.NewOperationTypeSearch().SetOrm(db).SetBaseOperationType(constvar.BaseOperationTypeInternal).SetWarehouseId(params.Id).UpdateByMap(m)
+ if err != nil {
+ return err
+ }
+ }
+ err = models.NewWarehouseSearch().SetID(params.Id).Update(¶ms)
+ return err
+ })
if err != nil {
util.ResponseFormat(c, code.RequestParamError, "淇敼澶辫触")
diff --git a/docs/docs.go b/docs/docs.go
index 9db38a4..5a2c468 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -1930,6 +1930,38 @@
}
}
},
+ "/api-wms/v1/product/getUserInfo": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "浜у搧"
+ ],
+ "summary": "鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅",
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/util.ResponseList"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "object",
+ "additionalProperties": true
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
"/api-wms/v1/product/listDisuse": {
"post": {
"produces": [
@@ -2748,12 +2780,26 @@
"enum": [
"鍘熸潗鏂�",
"鍗婃垚鍝�",
- "鎴愬搧"
+ "鎴愬搧",
+ "杈呮枡",
+ "鑰楁潗",
+ "鍏朵粬",
+ "铏氭嫙浠�"
],
+ "x-enum-comments": {
+ "MaterialModeAuxiliary": "杈呮枡",
+ "MaterialModeConsumables": "鑰楁潗",
+ "MaterialModeOther": "鍏朵粬",
+ "MaterialModeVirtual": "铏氭嫙浠�, 涓嶈兘閿�鍞紝涓嶈兘鍑哄叆搴擄紝涓嶈兘閲囪喘"
+ },
"x-enum-varnames": [
"MaterialModeRaw",
"MaterialModeSemi",
- "MaterialModeFinished"
+ "MaterialModeFinished",
+ "MaterialModeAuxiliary",
+ "MaterialModeConsumables",
+ "MaterialModeOther",
+ "MaterialModeVirtual"
]
},
"constvar.OperationStatus": {
@@ -3352,7 +3398,10 @@
"$ref": "#/definitions/models.OperationDetails"
}
},
- "fromLocation": {
+ "id": {
+ "type": "integer"
+ },
+ "location": {
"description": "婧愪綅缃�",
"allOf": [
{
@@ -3360,11 +3409,8 @@
}
]
},
- "fromLocationId": {
+ "locationID": {
"description": "婧愪綅缃甶d",
- "type": "integer"
- },
- "id": {
"type": "integer"
},
"logisticCompany": {
@@ -3382,6 +3428,7 @@
"type": "string"
},
"operationDate": {
+ "description": "FromLocationID int ` + "`" + `json:\"fromLocationId\" gorm:\"type:int;not null;comment:婧愪綅缃甶d\"` + "`" + ` //婧愪綅缃甶d\nFromLocation Location ` + "`" + `json:\"fromLocation\" gorm:\"foreignKey:FromLocationID;references:Id\"` + "`" + ` //婧愪綅缃甛nToLocationID int ` + "`" + `json:\"toLocationId\" gorm:\"type:int;not null;comment:鐩爣浣嶇疆id\"` + "`" + ` //鐩爣浣嶇疆id\nToLocation Location ` + "`" + `json:\"toLocation\" gorm:\"foreignKey:ToLocationID;references:Id\"` + "`" + ` //鐩爣浣嶇疆",
"type": "string"
},
"operationTypeId": {
@@ -3451,6 +3498,18 @@
"createTime": {
"type": "string"
},
+ "fromLocation": {
+ "description": "婧愪綅缃�",
+ "allOf": [
+ {
+ "$ref": "#/definitions/models.Location"
+ }
+ ]
+ },
+ "fromLocationId": {
+ "description": "婧愪綅缃甶d",
+ "type": "integer"
+ },
"id": {
"type": "integer"
},
@@ -3469,6 +3528,18 @@
"productId": {
"description": "浜у搧id",
"type": "string"
+ },
+ "toLocation": {
+ "description": "鐩爣浣嶇疆",
+ "allOf": [
+ {
+ "$ref": "#/definitions/models.Location"
+ }
+ ]
+ },
+ "toLocationId": {
+ "description": "鐩爣浣嶇疆id",
+ "type": "integer"
},
"updateTime": {
"type": "string"
@@ -3781,11 +3852,11 @@
"$ref": "#/definitions/request.OperationDetails"
}
},
- "fromLocationId": {
- "description": "婧愪綅缃甶d",
+ "id": {
"type": "integer"
},
- "id": {
+ "locationId": {
+ "description": "婧愪綅缃甶d",
"type": "integer"
},
"logisticCompanyId": {
@@ -3800,7 +3871,7 @@
"type": "string"
},
"operationDate": {
- "description": "瀹夋帓鏃ユ湡",
+ "description": "FromLocationId int ` + "`" + `json:\"fromLocationId\" gorm:\"type:int;not null;comment:婧愪綅缃甶d\"` + "`" + ` //婧愪綅缃甶d\nToLocationId int ` + "`" + `json:\"toLocationId\" gorm:\"type:int;not null;comment:鐩爣浣嶇疆id\"` + "`" + ` //鐩爣浣嶇疆id",
"type": "string"
},
"operationTypeId": {
@@ -4224,9 +4295,17 @@
"description": "ProductName string ` + "`" + `json:\"productName\" gorm:\"type:varchar(255);not null;comment:浜у搧鍚嶇О\"` + "`" + ` //浜у搧鍚嶇О",
"type": "number"
},
+ "fromLocationId": {
+ "description": "Unit string ` + "`" + `json:\"unit\" gorm:\"type:varchar(31);comment:鍗曚綅\"` + "`" + ` //鍗曚綅\nProduct models.Material ` + "`" + `json:\"product\" gorm:\"foreignKey:ProductId;references:ID\"` + "`" + `",
+ "type": "integer"
+ },
"productId": {
"description": "浜у搧id",
"type": "string"
+ },
+ "toLocationId": {
+ "description": "鐩爣浣嶇疆id",
+ "type": "integer"
}
}
},
@@ -4489,11 +4568,11 @@
"$ref": "#/definitions/request.OperationDetails"
}
},
- "fromLocationId": {
- "description": "婧愪綅缃甶d",
+ "id": {
"type": "integer"
},
- "id": {
+ "locationId": {
+ "description": "婧愪綅缃甶d",
"type": "integer"
},
"logisticCompanyId": {
@@ -4508,7 +4587,7 @@
"type": "string"
},
"operationDate": {
- "description": "瀹夋帓鏃ユ湡",
+ "description": "FromLocationId int ` + "`" + `json:\"fromLocationId\" gorm:\"type:int;not null;comment:婧愪綅缃甶d\"` + "`" + ` //婧愪綅缃甶d\nToLocationId int ` + "`" + `json:\"toLocationId\" gorm:\"type:int;not null;comment:鐩爣浣嶇疆id\"` + "`" + ` //鐩爣浣嶇疆id",
"type": "string"
},
"operationTypeId": {
diff --git a/docs/swagger.json b/docs/swagger.json
index c1acd3f..fce1458 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -1918,6 +1918,38 @@
}
}
},
+ "/api-wms/v1/product/getUserInfo": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "浜у搧"
+ ],
+ "summary": "鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅",
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/util.ResponseList"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "object",
+ "additionalProperties": true
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
"/api-wms/v1/product/listDisuse": {
"post": {
"produces": [
@@ -2736,12 +2768,26 @@
"enum": [
"鍘熸潗鏂�",
"鍗婃垚鍝�",
- "鎴愬搧"
+ "鎴愬搧",
+ "杈呮枡",
+ "鑰楁潗",
+ "鍏朵粬",
+ "铏氭嫙浠�"
],
+ "x-enum-comments": {
+ "MaterialModeAuxiliary": "杈呮枡",
+ "MaterialModeConsumables": "鑰楁潗",
+ "MaterialModeOther": "鍏朵粬",
+ "MaterialModeVirtual": "铏氭嫙浠�, 涓嶈兘閿�鍞紝涓嶈兘鍑哄叆搴擄紝涓嶈兘閲囪喘"
+ },
"x-enum-varnames": [
"MaterialModeRaw",
"MaterialModeSemi",
- "MaterialModeFinished"
+ "MaterialModeFinished",
+ "MaterialModeAuxiliary",
+ "MaterialModeConsumables",
+ "MaterialModeOther",
+ "MaterialModeVirtual"
]
},
"constvar.OperationStatus": {
@@ -3340,7 +3386,10 @@
"$ref": "#/definitions/models.OperationDetails"
}
},
- "fromLocation": {
+ "id": {
+ "type": "integer"
+ },
+ "location": {
"description": "婧愪綅缃�",
"allOf": [
{
@@ -3348,11 +3397,8 @@
}
]
},
- "fromLocationId": {
+ "locationID": {
"description": "婧愪綅缃甶d",
- "type": "integer"
- },
- "id": {
"type": "integer"
},
"logisticCompany": {
@@ -3370,6 +3416,7 @@
"type": "string"
},
"operationDate": {
+ "description": "FromLocationID int `json:\"fromLocationId\" gorm:\"type:int;not null;comment:婧愪綅缃甶d\"` //婧愪綅缃甶d\nFromLocation Location `json:\"fromLocation\" gorm:\"foreignKey:FromLocationID;references:Id\"` //婧愪綅缃甛nToLocationID int `json:\"toLocationId\" gorm:\"type:int;not null;comment:鐩爣浣嶇疆id\"` //鐩爣浣嶇疆id\nToLocation Location `json:\"toLocation\" gorm:\"foreignKey:ToLocationID;references:Id\"` //鐩爣浣嶇疆",
"type": "string"
},
"operationTypeId": {
@@ -3439,6 +3486,18 @@
"createTime": {
"type": "string"
},
+ "fromLocation": {
+ "description": "婧愪綅缃�",
+ "allOf": [
+ {
+ "$ref": "#/definitions/models.Location"
+ }
+ ]
+ },
+ "fromLocationId": {
+ "description": "婧愪綅缃甶d",
+ "type": "integer"
+ },
"id": {
"type": "integer"
},
@@ -3457,6 +3516,18 @@
"productId": {
"description": "浜у搧id",
"type": "string"
+ },
+ "toLocation": {
+ "description": "鐩爣浣嶇疆",
+ "allOf": [
+ {
+ "$ref": "#/definitions/models.Location"
+ }
+ ]
+ },
+ "toLocationId": {
+ "description": "鐩爣浣嶇疆id",
+ "type": "integer"
},
"updateTime": {
"type": "string"
@@ -3769,11 +3840,11 @@
"$ref": "#/definitions/request.OperationDetails"
}
},
- "fromLocationId": {
- "description": "婧愪綅缃甶d",
+ "id": {
"type": "integer"
},
- "id": {
+ "locationId": {
+ "description": "婧愪綅缃甶d",
"type": "integer"
},
"logisticCompanyId": {
@@ -3788,7 +3859,7 @@
"type": "string"
},
"operationDate": {
- "description": "瀹夋帓鏃ユ湡",
+ "description": "FromLocationId int `json:\"fromLocationId\" gorm:\"type:int;not null;comment:婧愪綅缃甶d\"` //婧愪綅缃甶d\nToLocationId int `json:\"toLocationId\" gorm:\"type:int;not null;comment:鐩爣浣嶇疆id\"` //鐩爣浣嶇疆id",
"type": "string"
},
"operationTypeId": {
@@ -4212,9 +4283,17 @@
"description": "ProductName string `json:\"productName\" gorm:\"type:varchar(255);not null;comment:浜у搧鍚嶇О\"` //浜у搧鍚嶇О",
"type": "number"
},
+ "fromLocationId": {
+ "description": "Unit string `json:\"unit\" gorm:\"type:varchar(31);comment:鍗曚綅\"` //鍗曚綅\nProduct models.Material `json:\"product\" gorm:\"foreignKey:ProductId;references:ID\"`",
+ "type": "integer"
+ },
"productId": {
"description": "浜у搧id",
"type": "string"
+ },
+ "toLocationId": {
+ "description": "鐩爣浣嶇疆id",
+ "type": "integer"
}
}
},
@@ -4477,11 +4556,11 @@
"$ref": "#/definitions/request.OperationDetails"
}
},
- "fromLocationId": {
- "description": "婧愪綅缃甶d",
+ "id": {
"type": "integer"
},
- "id": {
+ "locationId": {
+ "description": "婧愪綅缃甶d",
"type": "integer"
},
"logisticCompanyId": {
@@ -4496,7 +4575,7 @@
"type": "string"
},
"operationDate": {
- "description": "瀹夋帓鏃ユ湡",
+ "description": "FromLocationId int `json:\"fromLocationId\" gorm:\"type:int;not null;comment:婧愪綅缃甶d\"` //婧愪綅缃甶d\nToLocationId int `json:\"toLocationId\" gorm:\"type:int;not null;comment:鐩爣浣嶇疆id\"` //鐩爣浣嶇疆id",
"type": "string"
},
"operationTypeId": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index a4cbae1..039abfe 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -166,11 +166,24 @@
- 鍘熸潗鏂�
- 鍗婃垚鍝�
- 鎴愬搧
+ - 杈呮枡
+ - 鑰楁潗
+ - 鍏朵粬
+ - 铏氭嫙浠�
type: string
+ x-enum-comments:
+ MaterialModeAuxiliary: 杈呮枡
+ MaterialModeConsumables: 鑰楁潗
+ MaterialModeOther: 鍏朵粬
+ MaterialModeVirtual: 铏氭嫙浠�, 涓嶈兘閿�鍞紝涓嶈兘鍑哄叆搴擄紝涓嶈兘閲囪喘
x-enum-varnames:
- MaterialModeRaw
- MaterialModeSemi
- MaterialModeFinished
+ - MaterialModeAuxiliary
+ - MaterialModeConsumables
+ - MaterialModeOther
+ - MaterialModeVirtual
constvar.OperationStatus:
enum:
- 1
@@ -603,14 +616,14 @@
items:
$ref: '#/definitions/models.OperationDetails'
type: array
- fromLocation:
+ id:
+ type: integer
+ location:
allOf:
- $ref: '#/definitions/models.Location'
description: 婧愪綅缃�
- fromLocationId:
+ locationID:
description: 婧愪綅缃甶d
- type: integer
- id:
type: integer
logisticCompany:
$ref: '#/definitions/models.LogisticCompany'
@@ -623,6 +636,11 @@
description: 鍗曞彿
type: string
operationDate:
+ description: |-
+ FromLocationID int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+ FromLocation Location `json:"fromLocation" gorm:"foreignKey:FromLocationID;references:Id"` //婧愪綅缃�
+ ToLocationID int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
+ ToLocation Location `json:"toLocation" gorm:"foreignKey:ToLocationID;references:Id"` //鐩爣浣嶇疆
type: string
operationTypeId:
description: 浣滀笟绫诲瀷id
@@ -669,6 +687,13 @@
type: number
createTime:
type: string
+ fromLocation:
+ allOf:
+ - $ref: '#/definitions/models.Location'
+ description: 婧愪綅缃�
+ fromLocationId:
+ description: 婧愪綅缃甶d
+ type: integer
id:
type: integer
operationId:
@@ -681,6 +706,13 @@
productId:
description: 浜у搧id
type: string
+ toLocation:
+ allOf:
+ - $ref: '#/definitions/models.Location'
+ description: 鐩爣浣嶇疆
+ toLocationId:
+ description: 鐩爣浣嶇疆id
+ type: integer
updateTime:
type: string
type: object
@@ -895,10 +927,10 @@
items:
$ref: '#/definitions/request.OperationDetails'
type: array
- fromLocationId:
- description: 婧愪綅缃甶d
- type: integer
id:
+ type: integer
+ locationId:
+ description: 婧愪綅缃甶d
type: integer
logisticCompanyId:
type: string
@@ -909,7 +941,9 @@
description: 鍗曞彿
type: string
operationDate:
- description: 瀹夋帓鏃ユ湡
+ description: |-
+ FromLocationId int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+ ToLocationId int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
type: string
operationTypeId:
description: 浣滀笟绫诲瀷id
@@ -1202,9 +1236,17 @@
description: ProductName string `json:"productName" gorm:"type:varchar(255);not
null;comment:浜у搧鍚嶇О"` //浜у搧鍚嶇О
type: number
+ fromLocationId:
+ description: |-
+ Unit string `json:"unit" gorm:"type:varchar(31);comment:鍗曚綅"` //鍗曚綅
+ Product models.Material `json:"product" gorm:"foreignKey:ProductId;references:ID"`
+ type: integer
productId:
description: 浜у搧id
type: string
+ toLocationId:
+ description: 鐩爣浣嶇疆id
+ type: integer
type: object
request.OperationList:
properties:
@@ -1384,10 +1426,10 @@
items:
$ref: '#/definitions/request.OperationDetails'
type: array
- fromLocationId:
- description: 婧愪綅缃甶d
- type: integer
id:
+ type: integer
+ locationId:
+ description: 婧愪綅缃甶d
type: integer
logisticCompanyId:
type: string
@@ -1398,7 +1440,9 @@
description: 鍗曞彿
type: string
operationDate:
- description: 瀹夋帓鏃ユ湡
+ description: |-
+ FromLocationId int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+ ToLocationId int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
type: string
operationTypeId:
description: 浣滀笟绫诲瀷id
@@ -2803,6 +2847,24 @@
summary: 鑾峰彇浜у搧鍒楄〃
tags:
- 浜у搧
+ /api-wms/v1/product/getUserInfo:
+ get:
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: 鎴愬姛
+ schema:
+ allOf:
+ - $ref: '#/definitions/util.ResponseList'
+ - properties:
+ data:
+ additionalProperties: true
+ type: object
+ type: object
+ summary: 鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
+ tags:
+ - 浜у搧
/api-wms/v1/product/listDisuse:
post:
parameters:
diff --git a/main.go b/main.go
index 1801bbf..2a44bc8 100644
--- a/main.go
+++ b/main.go
@@ -60,7 +60,6 @@
logx.Errorf("grpc server init error: %v", err.Error())
panic(fmt.Sprintf("grpc server init error: %v", err.Error()))
}
- fmt.Println("-----------鐩戝惉绔彛: ", conf.WebConf.GrpcPort)
s := grpc.NewServer()
//todo 娣诲姞鍏蜂綋鏈嶅姟
product_inventory.RegisterProductInventoryServiceServer(s, &product_inventory.Server{})
diff --git a/middleware/utils.go b/middleware/utils.go
index 58defa0..cf98138 100644
--- a/middleware/utils.go
+++ b/middleware/utils.go
@@ -2,6 +2,7 @@
import (
"errors"
+ "github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt/v4"
"wms/request"
)
@@ -58,3 +59,11 @@
return nil, TokenInvalid
}
}
+
+func GetUserInfo(c *gin.Context) *request.CustomClaims {
+ if claims, exists := c.Get("claims"); exists {
+ waitUse := claims.(*request.CustomClaims)
+ return waitUse
+ }
+ return nil
+}
diff --git a/models/file_template_attachment.go b/models/file_template_attachment.go
index 575213e..a55c0db 100644
--- a/models/file_template_attachment.go
+++ b/models/file_template_attachment.go
@@ -10,12 +10,13 @@
type (
FileTemplateAttachment struct {
WmsModel
- Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
- Category constvar.FileTemplateCategory `json:"category" gorm:"type:int(11);comment:妯$増绉嶇被"`
- Name string `json:"name" gorm:"type:varchar(63);comment:妯$増鍚嶇О"`
- AttachmentId uint `json:"attachmentId" gorm:"comment:闄勪欢琛ㄥ閿�"`
- Attachment Attachment `json:"attachment" gorm:"foreignKey:AttachmentId;references:Id"`
- TableInfo string `json:"tableInfo" gorm:"type:varchar(31);comment:琛ㄥ悕"`
+ Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+ Category constvar.FileTemplateCategory `json:"category" gorm:"type:int(11);comment:妯$増绉嶇被"`
+ Name string `json:"name" gorm:"type:varchar(63);comment:妯$増鍚嶇О"`
+ //AttachmentId uint `json:"attachmentId" gorm:"comment:闄勪欢琛ㄥ閿�"`
+ //Attachment Attachment `json:"attachment" gorm:"foreignKey:AttachmentId;references:Id"`
+ TableInfo string `json:"tableInfo" gorm:"type:varchar(31);comment:琛ㄥ悕"`
+ FileUrl string `json:"fileUrl" gorm:"type:varchar(255);comment:鏂囦欢鍦板潃"`
}
FileTemplateAttachmentSearch struct {
FileTemplateAttachment
@@ -61,10 +62,10 @@
return slf
}
-func (slf *FileTemplateAttachmentSearch) SetPreload(preload bool) *FileTemplateAttachmentSearch {
- slf.Preload = preload
- return slf
-}
+//func (slf *FileTemplateAttachmentSearch) SetPreload(preload bool) *FileTemplateAttachmentSearch {
+// slf.Preload = preload
+// return slf
+//}
func (slf *FileTemplateAttachmentSearch) SetCategory(category constvar.FileTemplateCategory) *FileTemplateAttachmentSearch {
slf.Category = category
@@ -81,9 +82,9 @@
db = db.Order(slf.Order)
}
- if slf.Preload {
- db = db.Model(&FileTemplateAttachment{}).Preload("Attachment")
- }
+ //if slf.Preload {
+ // db = db.Model(&FileTemplateAttachment{}).Preload("Attachment")
+ //}
if int(slf.Category) != 0 {
db = db.Where("category=?", slf.Category)
diff --git a/models/operation.go b/models/operation.go
index 2009733..a81b5ae 100644
--- a/models/operation.go
+++ b/models/operation.go
@@ -13,27 +13,27 @@
Operation struct {
WmsModel
Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
- Number string `json:"number" gorm:"type:varchar(255)"` //鍗曞彿
- SourceNumber string `json:"sourceNumber" gorm:"type:varchar(255)"` //婧愬崟鍙�
- OperationTypeId int `json:"operationTypeId" gorm:"type:int;not null;comment:浣滀笟绫诲瀷id"` //浣滀笟绫诲瀷id
- OperationTypeName string `json:"operationTypeName" gorm:"type:varchar(127);comment:浣滀笟绫诲瀷鍚嶇О"` //浣滀笟绫诲瀷鍚嶇О
- Status constvar.OperationStatus `json:"status" gorm:"type:int(11);not null;comment:鐘舵��"` //鐘舵��
- FromLocationID int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
- FromLocation Location `json:"fromLocation" gorm:"foreignKey:FromLocationID;references:Id"` //婧愪綅缃�
- ToLocationID int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
- ToLocation Location `json:"toLocation" gorm:"foreignKey:ToLocationID;references:Id"` //鐩爣浣嶇疆
- OperationDate string `json:"operationDate" gorm:"type:varchar(31);comment:瀹夋帓鏃ユ湡"`
- ContacterID int `json:"contacterID" gorm:"type:int;comment:鑱旂郴浜篒D"`
- ContacterName string `json:"contacterName" gorm:"type:varchar(63);comment:鑱旂郴浜哄鍚�"`
- CompanyID int `json:"companyID" gorm:"type:int;comment:鍏徃ID-瀹㈡埛"`
- CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:鍏徃鍚嶇О-瀹㈡埛"`
- Comment string `json:"comment" gorm:"type:text;comment:澶囨敞"`
- LogisticCompanyId string `json:"logisticCompanyId" gorm:"type:varchar(191);comment:鐗╂祦鍏徃id"`
- LogisticCompany LogisticCompany `json:"logisticCompany" gorm:"foreignKey:LogisticCompanyId"`
- WaybillNumber string `json:"waybillNumber" gorm:"type:varchar(255);comment:杩愬崟鍙�"` //杩愬崟鍙�
- Weight decimal.Decimal `gorm:"type:decimal(20,2);comment:閲嶉噺" json:"weight"` //閲嶉噺
- LogisticWeight decimal.Decimal `gorm:"type:decimal(20,2);comment:鐗╂祦閲嶉噺" json:"logisticWeight"` //鐗╂祦閲嶉噺
- Source string `json:"source" gorm:"type:varchar(255);comment:鏉ユ簮绯荤粺,鐢ㄤ簬杩斿洖淇敼鐘舵��"`
+ Number string `json:"number" gorm:"type:varchar(255)"` //鍗曞彿
+ SourceNumber string `json:"sourceNumber" gorm:"type:varchar(255)"` //婧愬崟鍙�
+ OperationTypeId int `json:"operationTypeId" gorm:"type:int;not null;comment:浣滀笟绫诲瀷id"` //浣滀笟绫诲瀷id
+ OperationTypeName string `json:"operationTypeName" gorm:"type:varchar(127);comment:浣滀笟绫诲瀷鍚嶇О"` //浣滀笟绫诲瀷鍚嶇О
+ Status constvar.OperationStatus `json:"status" gorm:"type:int(11);not null;comment:鐘舵��"` //鐘舵��
+ //FromLocationID int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+ //FromLocation Location `json:"fromLocation" gorm:"foreignKey:FromLocationID;references:Id"` //婧愪綅缃�
+ //ToLocationID int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
+ //ToLocation Location `json:"toLocation" gorm:"foreignKey:ToLocationID;references:Id"` //鐩爣浣嶇疆
+ OperationDate string `json:"operationDate" gorm:"type:varchar(31);comment:瀹夋帓鏃ユ湡"`
+ ContacterID int `json:"contacterID" gorm:"type:int;comment:鑱旂郴浜篒D"`
+ ContacterName string `json:"contacterName" gorm:"type:varchar(63);comment:鑱旂郴浜哄鍚�"`
+ CompanyID int `json:"companyID" gorm:"type:int;comment:鍏徃ID-瀹㈡埛"`
+ CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:鍏徃鍚嶇О-瀹㈡埛"`
+ Comment string `json:"comment" gorm:"type:text;comment:澶囨敞"`
+ LogisticCompanyId string `json:"logisticCompanyId" gorm:"type:varchar(191);comment:鐗╂祦鍏徃id"`
+ LogisticCompany LogisticCompany `json:"logisticCompany" gorm:"foreignKey:LogisticCompanyId"`
+ WaybillNumber string `json:"waybillNumber" gorm:"type:varchar(255);comment:杩愬崟鍙�"` //杩愬崟鍙�
+ Weight decimal.Decimal `gorm:"type:decimal(20,2);comment:閲嶉噺" json:"weight"` //閲嶉噺
+ LogisticWeight decimal.Decimal `gorm:"type:decimal(20,2);comment:鐗╂祦閲嶉噺" json:"logisticWeight"` //鐗╂祦閲嶉噺
+ Source string `json:"source" gorm:"type:varchar(255);comment:鏉ユ簮绯荤粺,鐢ㄤ簬杩斿洖淇敼鐘舵��"`
Details []*OperationDetails `json:"details" gorm:"foreignKey:OperationID;references:Id"`
BaseOperationType constvar.BaseOperationType `json:"baseOperationType" gorm:"type:tinyint;not null;comment:鍩虹浣滀笟绫诲瀷"` //鍩虹浣滀笟绫诲瀷
@@ -42,6 +42,11 @@
ReceiverName string `json:"receiverName" gorm:"type:varchar(31);comment:鏀惰揣浜哄鍚�"`
ReceiverPhone string `json:"receiverPhone" gorm:"type:varchar(31);comment:鑱旂郴鐢佃瘽"`
ReceiverAddr string `json:"receiverAddr" gorm:"type:varchar(255);comment:鏀惰揣鍦板潃"`
+
+ LocationID int `json:"locationID" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+ Location Location `json:"location" gorm:"foreignkey:LocationID;references:Id"` //婧愪綅缃�
+ ToLocationID int `json:"toLocationId" gorm:"type:int;not null;comment:浠撳簱浣嶇疆id"` //鐩爣浣嶇疆id
+ ToLocation Location `json:"toLocation" gorm:"foreignKey:ToLocationID;references:Id"` //鐩爣浣嶇疆
}
OperationSearch struct {
@@ -158,7 +163,7 @@
}
if slf.Preload {
- db = db.Model(&Operation{}).Preload("Details").Preload("Details.Product").Preload("LogisticCompany").Preload("FromLocation").Preload("ToLocation")
+ db = db.Model(&Operation{}).Preload("Details").Preload("Details.Product").Preload("LogisticCompany").Preload("Location").Preload("ToLocation").Preload("Details.FromLocation").Preload("Details.ToLocation")
}
if slf.Disuse {
@@ -277,7 +282,7 @@
if slf.PageNum*slf.PageSize > 0 {
db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
}
- if err := db.Preload("FromLocation").Preload("ToLocation").Order("created_at desc").Find(&records).Error; err != nil {
+ if err := db.Order("created_at desc").Find(&records).Error; err != nil {
return records, total, fmt.Errorf("find records err: %v", err)
}
diff --git a/models/operation_details.go b/models/operation_details.go
index 067ba63..0434ac9 100644
--- a/models/operation_details.go
+++ b/models/operation_details.go
@@ -18,6 +18,11 @@
Amount decimal.Decimal `json:"amount" gorm:"type:decimal(20,2);not null;comment:鏁伴噺"` //鏁伴噺
//Unit string `json:"unit" gorm:"type:varchar(31);comment:鍗曚綅"` //鍗曚綅
Product Material `json:"product" gorm:"foreignKey:ProductId;references:ID"`
+
+ FromLocationID int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+ FromLocation Location `json:"fromLocation" gorm:"foreignKey:FromLocationID;references:Id"` //婧愪綅缃�
+ ToLocationID int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
+ ToLocation Location `json:"toLocation" gorm:"foreignKey:ToLocationID;references:Id"` //鐩爣浣嶇疆
}
OperationDetailsSearch struct {
diff --git a/proto/inventory_order/server.go b/proto/inventory_order/server.go
index faa9a98..c38a32e 100644
--- a/proto/inventory_order/server.go
+++ b/proto/inventory_order/server.go
@@ -55,10 +55,12 @@
operation.Status = constvar.OperationStatus_Ready
operation.OperationTypeName = operationType.Name
operation.OperationTypeId = operationType.Id
- operation.FromLocationID = fromLocation.Id
- operation.ToLocationID = toLocation.Id
operation.BaseOperationType = constvar.BaseOperationTypeOutgoing
operation.Source = req.Source
+ operation.LocationID = fromLocation.Id
+ if req.OperationType == 1 {
+ operation.LocationID = toLocation.Id
+ }
or.WorkOrderId = operation.SourceNumber
or.Number = operation.Number
operationResp = append(operationResp, &or)
@@ -69,6 +71,8 @@
var detail models.OperationDetails
detail.ProductId = product.ProductNumber
detail.Amount = decimal.NewFromInt(product.Amount)
+ detail.FromLocationID = fromLocation.Id
+ detail.ToLocationID = toLocation.Id
details = append(details, &detail)
}
operation.Details = details
diff --git a/proto/product_inventory/server.go b/proto/product_inventory/server.go
index b564f8d..14bf8cd 100644
--- a/proto/product_inventory/server.go
+++ b/proto/product_inventory/server.go
@@ -34,7 +34,7 @@
var productIds []string
resp := new(GetInventoryProductInfoResponse)
err := models.NewOperationDetailsSearch().Orm.Model(&models.OperationDetails{}).
- Select("wms_operation_details.product_id,wms_operation_details.amount,wms_operation.from_location_id as location_id,"+
+ Select("wms_operation_details.product_id,wms_operation_details.amount,wms_operation_details.from_location_id as location_id,"+
"wms_operation.number,wms_operation.waybill_number, logistic_company.name").
Joins("left join wms_operation on wms_operation.id = wms_operation_details.operation_id").
Joins("left join logistic_company on logistic_company.id = wms_operation.logistic_company_id").
@@ -92,7 +92,7 @@
Select("wms_operation_details.product_id, wms_operation_details.amount").
Joins("left join wms_operation on wms_operation_details.operation_id = wms_operation.id").
Where("wms_operation_details.product_id in (?)", productIds).
- Where("wms_operation.from_location_id in (?)", locationIds).Where("wms_operation.status = ?", constvar.OperationStatus_Ready).
+ Where("wms_operation_details.from_location_id in (?)", locationIds).Where("wms_operation.status = ?", constvar.OperationStatus_Ready).
Where("wms_operation.base_operation_type in (?)", []constvar.BaseOperationType{constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeInternal, constvar.BaseOperationTypeDisuse}).
Find(&canUse).Error
if err != nil {
@@ -160,12 +160,12 @@
if err != nil {
return nil, err
}
- operation.FromLocationID = location.Id
+
first, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeCustomer)).First()
if err != nil {
return nil, err
}
- operation.ToLocationID = first.Id
+ operation.LocationID = location.Id
operation.BaseOperationType = constvar.BaseOperationTypeOutgoing
operation.ReceiverName = req.Addressee
operation.ReceiverPhone = req.Phone
@@ -179,6 +179,8 @@
detail.ProductId = product.Id
amount, _ := decimal.NewFromString(product.Amount)
detail.Amount = amount
+ detail.FromLocationID = location.Id
+ detail.ToLocationID = first.Id
details = append(details, &detail)
}
operation.Details = details
@@ -190,6 +192,8 @@
detail.ProductId = product.Id
amount, _ := decimal.NewFromString(product.Amount)
detail.Amount = amount
+ detail.FromLocationID = location.Id
+ detail.ToLocationID = first.Id
newOperation.Details = append(newOperation.Details, &detail)
operations = append(operations, &newOperation)
}
diff --git a/proto/purchase_wms/server.go b/proto/purchase_wms/server.go
index 9cf3096..4416273 100644
--- a/proto/purchase_wms/server.go
+++ b/proto/purchase_wms/server.go
@@ -38,17 +38,18 @@
if err != nil {
return nil, err
}
- operation.ToLocationID = location.Id
first, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeVendor)).First()
if err != nil {
return nil, err
}
- operation.FromLocationID = first.Id
+ operation.LocationID = location.Id
operation.BaseOperationType = constvar.BaseOperationTypeIncoming
for _, product := range req.Product {
var detail models.OperationDetails
detail.ProductId = product.Id
detail.Amount = decimal.NewFromInt(product.Amount)
+ detail.FromLocationID = first.Id
+ detail.ToLocationID = location.Id
details = append(details, &detail)
}
err = models.WithTransaction(func(db *gorm.DB) error {
diff --git a/request/operation.go b/request/operation.go
index 138d2d9..dc95942 100644
--- a/request/operation.go
+++ b/request/operation.go
@@ -12,22 +12,24 @@
OperationTypeId int `json:"operationTypeId" gorm:"type:int;not null;comment:浣滀笟绫诲瀷id"` //浣滀笟绫诲瀷id
OperationTypeName string `json:"operationTypeName" gorm:"type:varchar(127);comment:浣滀笟绫诲瀷鍚嶇О"` //浣滀笟绫诲瀷鍚嶇О
Status constvar.OperationStatus `json:"status" gorm:"type:int(11);not null;comment:鐘舵��"` //鐘舵��
- FromLocationId int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
- ToLocationId int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
- OperationDate string `json:"operationDate" gorm:"type:varchar(31);comment:瀹夋帓鏃ユ湡"` //瀹夋帓鏃ユ湡
- Details []*OperationDetails `json:"details"`
- ContacterID int `json:"contacterID" gorm:"type:int;comment:鑱旂郴浜篒D"` //鑱旂郴浜篒D-闈炲繀濉�
- ContacterName string `json:"contacterName" gorm:"type:varchar(63);comment:鑱旂郴浜哄鍚�"` //鑱旂郴浜哄鍚�-闈炲繀濉�
- CompanyID int `json:"companyID" gorm:"type:int;comment:鍏徃ID"` //鍏徃ID-瀹㈡埛
- CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:鍏徃鍚嶇О"` //鍏徃鍚嶇О-瀹㈡埛鍚嶇О
- Comment string `json:"comment" gorm:"type:text;comment:澶囨敞"` //澶囨敞
- LogisticCompanyId string `json:"logisticCompanyId" gorm:"type:varchar(191);comment:鐗╂祦鍏徃id"`
- WaybillNumber string `json:"waybillNumber" gorm:"type:varchar(255);comment:杩愬崟鍙�"` //杩愬崟鍙�
- Weight decimal.Decimal `gorm:"type:decimal(20,2);comment:閲嶉噺" json:"weight"` //閲嶉噺
- LogisticWeight decimal.Decimal `gorm:"type:decimal(20,2);comment:鐗╂祦閲嶉噺" json:"logisticWeight"` //鐗╂祦閲嶉噺
- ReceiverName string `json:"receiverName" gorm:"type:varchar(31);comment:鏀惰揣浜哄鍚�"`
- ReceiverPhone string `json:"receiverPhone" gorm:"type:varchar(31);comment:鑱旂郴鐢佃瘽"`
- ReceiverAddr string `json:"receiverAddr" gorm:"type:varchar(255);comment:鏀惰揣鍦板潃"`
+ //FromLocationId int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+ //ToLocationId int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
+ OperationDate string `json:"operationDate" gorm:"type:varchar(31);comment:瀹夋帓鏃ユ湡"` //瀹夋帓鏃ユ湡
+ Details []*OperationDetails `json:"details"`
+ ContacterID int `json:"contacterID" gorm:"type:int;comment:鑱旂郴浜篒D"` //鑱旂郴浜篒D-闈炲繀濉�
+ ContacterName string `json:"contacterName" gorm:"type:varchar(63);comment:鑱旂郴浜哄鍚�"` //鑱旂郴浜哄鍚�-闈炲繀濉�
+ CompanyID int `json:"companyID" gorm:"type:int;comment:鍏徃ID"` //鍏徃ID-瀹㈡埛
+ CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:鍏徃鍚嶇О"` //鍏徃鍚嶇О-瀹㈡埛鍚嶇О
+ Comment string `json:"comment" gorm:"type:text;comment:澶囨敞"` //澶囨敞
+ LogisticCompanyId string `json:"logisticCompanyId" gorm:"type:varchar(191);comment:鐗╂祦鍏徃id"`
+ WaybillNumber string `json:"waybillNumber" gorm:"type:varchar(255);comment:杩愬崟鍙�"` //杩愬崟鍙�
+ Weight decimal.Decimal `gorm:"type:decimal(20,2);comment:閲嶉噺" json:"weight"` //閲嶉噺
+ LogisticWeight decimal.Decimal `gorm:"type:decimal(20,2);comment:鐗╂祦閲嶉噺" json:"logisticWeight"` //鐗╂祦閲嶉噺
+ ReceiverName string `json:"receiverName" gorm:"type:varchar(31);comment:鏀惰揣浜哄鍚�"`
+ ReceiverPhone string `json:"receiverPhone" gorm:"type:varchar(31);comment:鑱旂郴鐢佃瘽"`
+ ReceiverAddr string `json:"receiverAddr" gorm:"type:varchar(255);comment:鏀惰揣鍦板潃"`
+ LocationId int `json:"locationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+ ToLocationId int `json:"toLocationId" gorm:"type:int;not null;comment:浠撳簱浣嶇疆id"` //鐩爣浣嶇疆id
}
type OperationDetails struct {
@@ -37,6 +39,8 @@
Amount decimal.Decimal `json:"amount" gorm:"type:decimal(20,2);not null;comment:鏁伴噺"` //鏁伴噺
//Unit string `json:"unit" gorm:"type:varchar(31);comment:鍗曚綅"` //鍗曚綅
//Product models.Material `json:"product" gorm:"foreignKey:ProductId;references:ID"`
+ FromLocationId int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+ ToLocationId int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
}
type OperationList struct {
@@ -47,15 +51,15 @@
}
type UpdateOperation struct {
- ID int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
- Number string `json:"number" gorm:"column:number;type:varchar(255)"` //鍗曞彿
- SourceNumber string `json:"sourceNumber" gorm:"type:varchar(255)"` //婧愬崟鍙�
- OperationTypeId int `json:"operationTypeId" gorm:"type:int;not null;comment:浣滀笟绫诲瀷id"` //浣滀笟绫诲瀷id
- OperationTypeName string `json:"operationTypeName" gorm:"type:varchar(127);comment:浣滀笟绫诲瀷鍚嶇О"` //浣滀笟绫诲瀷鍚嶇О
- Status constvar.OperationStatus `json:"status" gorm:"type:int(11);not null;comment:鐘舵��"` //鐘舵��
- FromLocationId int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
- ToLocationId int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
- OperationDate string `json:"operationDate" gorm:"type:varchar(31);comment:瀹夋帓鏃ユ湡"` //瀹夋帓鏃ユ湡
+ ID int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+ Number string `json:"number" gorm:"column:number;type:varchar(255)"` //鍗曞彿
+ SourceNumber string `json:"sourceNumber" gorm:"type:varchar(255)"` //婧愬崟鍙�
+ OperationTypeId int `json:"operationTypeId" gorm:"type:int;not null;comment:浣滀笟绫诲瀷id"` //浣滀笟绫诲瀷id
+ OperationTypeName string `json:"operationTypeName" gorm:"type:varchar(127);comment:浣滀笟绫诲瀷鍚嶇О"` //浣滀笟绫诲瀷鍚嶇О
+ Status constvar.OperationStatus `json:"status" gorm:"type:int(11);not null;comment:鐘舵��"` //鐘舵��
+ //FromLocationId int `json:"fromLocationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+ //ToLocationId int `json:"toLocationId" gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
+ OperationDate string `json:"operationDate" gorm:"type:varchar(31);comment:瀹夋帓鏃ユ湡"` //瀹夋帓鏃ユ湡
Details []*OperationDetails `json:"details"`
ContacterID int `json:"contacterID" gorm:"type:int;comment:鑱旂郴浜篒D"` //鑱旂郴浜篒D-闈炲繀濉�
ContacterName string `json:"contacterName" gorm:"type:varchar(63);comment:鑱旂郴浜哄鍚�"` //鑱旂郴浜哄鍚�-闈炲繀濉�
@@ -70,6 +74,8 @@
ReceiverName string `json:"receiverName" gorm:"type:varchar(31);comment:鏀惰揣浜哄鍚�"`
ReceiverPhone string `json:"receiverPhone" gorm:"type:varchar(31);comment:鑱旂郴鐢佃瘽"`
ReceiverAddr string `json:"receiverAddr" gorm:"type:varchar(255);comment:鏀惰揣鍦板潃"`
+ LocationId int `json:"locationId" gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+ ToLocationId int `json:"toLocationId" gorm:"type:int;not null;comment:浠撳簱浣嶇疆id"` //鐩爣浣嶇疆id
}
type OperationAllList struct {
diff --git a/router/router.go b/router/router.go
index e7565eb..3e6ce21 100644
--- a/router/router.go
+++ b/router/router.go
@@ -119,6 +119,7 @@
productAPI.POST("updateDisuse", productController.UpdateDisuse) //淇敼鎶ュ簾淇℃伅
productAPI.POST("listHistory", productController.ListHistory) //浜у搧浣嶇疆鍘嗗彶璁板綍
productAPI.PUT("cancelDisuse/:id", productController.CancelDisuse) //鍙栨秷鎶ュ簾
+ productAPI.GET("getUserInfo", productController.GetUserInfo) //鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
}
--
Gitblit v1.8.0