From c965651da313fa6b41d0f07d7910824c57582cae Mon Sep 17 00:00:00 2001
From: lishihai <dslsh@dscom>
Date: 星期三, 26 六月 2024 11:55:18 +0800
Subject: [PATCH] 库存盘点应用按钮记录创建人,创建时间,应用时间、应用人员等信息;根据条形码查询产品详情;新增编辑产品增加条形码字段->添加条形码被使用验证
---
controllers/reorder_rule_controller.go | 194 +++++++++++++++++++++++++++++++++++++-----------
1 files changed, 149 insertions(+), 45 deletions(-)
diff --git a/controllers/reorder_rule_controller.go b/controllers/reorder_rule_controller.go
index 4add8d6..2a42385 100644
--- a/controllers/reorder_rule_controller.go
+++ b/controllers/reorder_rule_controller.go
@@ -12,6 +12,9 @@
"wms/extend/util"
"wms/models"
"wms/pkg/timex"
+ "wms/proto/init_client"
+ "wms/proto/inventory_order"
+ "wms/proto/purchase_wms"
"wms/request"
)
@@ -65,7 +68,7 @@
if params.PageInfo.Check() {
search.SetPage(params.Page, params.PageSize)
}
- rules, total, err := search.SetPreload(true).SetKeyword(params.KeyWord).Find()
+ rules, total, err := search.SetPreload(true).SetKeyword(params.KeyWord).SetLocationId(params.LocationId).SetProductId(params.ProductId).Find()
if err != nil {
util.ResponseFormat(c, code.RequestParamError, "鏌ヨ閲嶈璐ц鍒欏垪琛ㄥけ璐�")
return
@@ -76,30 +79,45 @@
productIds = append(productIds, rule.ProductId)
locationIds = append(locationIds, rule.LocationId)
}
+ if params.LocationId != 0 {
+ locationIds = []int{params.LocationId}
+ }
+ if params.ProductId != "" {
+ productIds = []string{params.ProductId}
+ }
//鍦ㄥ簱
- var status = []constvar.OperationStatus{constvar.OperationStatus_Finish, constvar.OperationStatus_Ready}
+ amounts, err := models.NewLocationProductAmountSearch().SetProductIds(productIds).SetLocationIds(locationIds).Find()
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "鏌ヨ鍦ㄥ簱鏁伴噺澶辫触")
+ return
+ }
+ for _, rule := range rules {
+ for _, amount := range amounts {
+ if rule.ProductId == amount.ProductId && rule.LocationId == amount.LocationId {
+ rule.Amount = rule.Amount.Add(amount.Amount)
+ }
+ }
+ }
+
+ //棰勬祴
+ //鍏ュ簱灏辩华
+ var status = []constvar.OperationStatus{constvar.OperationStatus_Ready}
var operationType = []constvar.BaseOperationType{constvar.BaseOperationTypeIncoming, constvar.BaseOperationTypeInternal}
amount, err := GetProductAmount(productIds, locationIds, nil, status, operationType)
if err != nil {
util.ResponseFormat(c, code.RequestParamError, "鏌ヨ閲嶈璐ц鍒欏垪琛ㄥけ璐�")
return
}
- mp := make(map[int]decimal.Decimal)
for _, rule := range rules {
for _, productAmount := range amount {
- if rule.ProductId == productAmount.ProductId && rule.LocationId == productAmount.ToLocationId &&
- productAmount.Status == constvar.OperationStatus_Finish {
- rule.Amount = rule.Amount.Add(productAmount.Amount)
- }
- if rule.ProductId == productAmount.ProductId && rule.LocationId == productAmount.ToLocationId &&
- productAmount.Status == constvar.OperationStatus_Ready {
- mp[rule.Id] = mp[rule.Id].Add(productAmount.Amount)
+ if rule.ProductId == productAmount.ProductId && rule.LocationId == productAmount.ToLocationId {
+ rule.Prediction = rule.Prediction.Add(productAmount.Amount)
}
}
+ rule.Prediction = rule.Amount.Add(rule.Prediction)
}
- //棰勬祴
- status = []constvar.OperationStatus{constvar.OperationStatus_Finish, constvar.OperationStatus_Ready}
- operationType = []constvar.BaseOperationType{constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeInternal}
+ //鍑哄簱灏辩华
+ operationType = []constvar.BaseOperationType{constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeInternal, constvar.BaseOperationTypeDisuse}
amount, err = GetProductAmount(productIds, nil, locationIds, status, operationType)
if err != nil {
util.ResponseFormat(c, code.RequestParamError, "鏌ヨ閲嶈璐ц鍒欏垪琛ㄥけ璐�")
@@ -108,13 +126,22 @@
for _, rule := range rules {
for _, productAmount := range amount {
if rule.ProductId == productAmount.ProductId && rule.LocationId == productAmount.FromLocationId {
- rule.Prediction = rule.Prediction.Add(productAmount.Amount)
+ rule.Prediction = rule.Prediction.Sub(productAmount.Amount)
}
}
- rule.Prediction = rule.Amount.Add(mp[rule.Id]).Sub(rule.Prediction)
+ }
+ var result []*models.ReorderRule
+ if params.Type == "" {
+ result = rules
+ } else {
+ for _, rule := range rules {
+ if rule.MinInventory.GreaterThan(rule.Prediction) {
+ result = append(result, rule)
+ }
+ }
}
- util.ResponseFormatList(c, code.Success, rules, int(total))
+ util.ResponseFormatList(c, code.Success, result, int(total))
}
// 璁$畻鍦ㄥ簱涓庨娴嬫暟閲�
@@ -123,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.status").
+ 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)
@@ -163,30 +190,24 @@
productIds = append(productIds, params.ProductId)
locationIds = append(locationIds, params.LocationId)
amount := decimal.NewFromInt(0)
- p := decimal.NewFromInt(0)
prediction := decimal.NewFromInt(0)
//鍦ㄥ簱
- var status = []constvar.OperationStatus{constvar.OperationStatus_Finish, constvar.OperationStatus_Ready}
- var operationType = []constvar.BaseOperationType{constvar.BaseOperationTypeIncoming, constvar.BaseOperationTypeInternal}
- list, err := GetProductAmount(productIds, locationIds, nil, status, operationType)
+ find, err := models.NewLocationProductAmountSearch().SetProductIds(productIds).SetLocationIds(locationIds).Find()
if err != nil {
- util.ResponseFormat(c, code.RequestParamError, "鏌ヨ閲嶈璐ц鍒欏垪琛ㄥけ璐�")
+ util.ResponseFormat(c, code.RequestParamError, "鏌ヨ鍦ㄥ簱鏁伴噺澶辫触")
return
}
- for _, productAmount := range list {
- if params.ProductId == productAmount.ProductId && params.LocationId == productAmount.ToLocationId &&
- productAmount.Status == constvar.OperationStatus_Finish {
+ for _, productAmount := range find {
+ if params.ProductId == productAmount.ProductId && params.LocationId == productAmount.LocationId {
amount = amount.Add(productAmount.Amount)
}
- if params.ProductId == productAmount.ProductId && params.LocationId == productAmount.ToLocationId &&
- productAmount.Status == constvar.OperationStatus_Ready {
- p = p.Add(productAmount.Amount)
- }
}
+
//棰勬祴
- status = []constvar.OperationStatus{constvar.OperationStatus_Finish, constvar.OperationStatus_Ready}
- operationType = []constvar.BaseOperationType{constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeInternal}
- list, err = GetProductAmount(productIds, nil, locationIds, status, operationType)
+ //鍏ュ簱灏辩华
+ var status = []constvar.OperationStatus{constvar.OperationStatus_Ready}
+ var operationType = []constvar.BaseOperationType{constvar.BaseOperationTypeIncoming, constvar.BaseOperationTypeInternal}
+ list, err := GetProductAmount(productIds, locationIds, nil, status, operationType)
if err != nil {
util.ResponseFormat(c, code.RequestParamError, "鏌ヨ閲嶈璐ц鍒欏垪琛ㄥけ璐�")
return
@@ -196,7 +217,19 @@
prediction = prediction.Add(productAmount.Amount)
}
}
- prediction = amount.Add(p).Sub(prediction)
+ prediction = amount.Add(prediction)
+ //鍑哄簱灏辩华
+ operationType = []constvar.BaseOperationType{constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeInternal, constvar.BaseOperationTypeDisuse}
+ list, err = GetProductAmount(productIds, nil, locationIds, status, operationType)
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "鏌ヨ閲嶈璐ц鍒欏垪琛ㄥけ璐�")
+ return
+ }
+ for _, productAmount := range list {
+ if params.ProductId == productAmount.ProductId && params.LocationId == productAmount.FromLocationId {
+ prediction = prediction.Sub(productAmount.Amount)
+ }
+ }
m := make(map[string]int64)
m["amount"] = amount.IntPart()
m["prediction"] = prediction.IntPart()
@@ -224,6 +257,23 @@
util.ResponseFormat(c, code.Success, "鏇存柊鎴愬姛")
}
+//var InventoryOrderServiceConn *grpc.ClientConn
+//
+//func InitInventoryOrderServiceConn() {
+// var err error
+// InventoryOrderServiceConn, err = grpc.Dial(conf.GrpcServerConf.ApsAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
+// if err != nil {
+// logx.Errorf("grpc dial product service error: %v", err.Error())
+// return
+// }
+//}
+//
+//func CloseInventoryOrderServiceConn() {
+// if InventoryOrderServiceConn != nil {
+// InventoryOrderServiceConn.Close()
+// }
+//}
+
// OrderAgain
// @Tags 閲嶈璐ц鍒�
// @Summary 鍐嶈涓�娆�
@@ -237,45 +287,99 @@
util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
return
}
+ if params.Route == "閲囪喘" {
+ client := purchase_wms.NewPurchaseServiceClient(init_client.SrmConn)
+ resp, err := client.GetSupplierListByProductId(c, &purchase_wms.GetSupplierListByProductIdRequest{ProductId: params.ProductId})
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "grpc璋冪敤澶辫触")
+ return
+ }
+ util.ResponseFormat(c, code.Success, resp.List)
+ return
+ }
+ client := inventory_order.NewInventoryOrderServiceClient(init_client.ApsConn)
+ order, err := client.CreateNewOrder(c, &inventory_order.CreateNewOrderRequest{
+ OrderNumber: params.OrderNumber.IntPart(),
+ Unit: params.Unit,
+ ProductId: params.ProductId,
+ Customer: "WMS鎺ㄩ��",
+ })
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "grpc璋冪敤澶辫触")
+ return
+ }
+ err = orderAgain(params, order.OrderId)
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "閲嶈澶辫触")
+ return
+ }
+ util.ResponseFormat(c, code.Success, "閲嶈鎴愬姛")
+}
+
+func orderAgain(params models.ReorderRule, SourceNumber string) error {
location, err := models.NewLocationSearch().SetID(params.LocationId).First()
if err != nil {
- util.ResponseFormat(c, code.RequestParamError, "鏌ヨ浣嶇疆淇℃伅澶辫触")
- return
+ return err
}
houseCode := strings.Split(location.JointName, "/")[0]
var operationType models.OperationType
err = models.NewOperationTypeSearch().Orm.Model(&models.OperationType{}).Joins("left join wms_warehouse on wms_job_type.warehouse_id = wms_warehouse.id").
Where("wms_job_type.base_operation_type = 1 and wms_warehouse.code = ?", houseCode).First(&operationType).Error
if err != nil {
- util.ResponseFormat(c, code.RequestParamError, "鏌ヨ浣嶇疆淇℃伅澶辫触")
- return
+ return err
}
var operation models.Operation
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 {
if err = models.NewOperationSearch().SetOrm(db).Create(&operation); err != nil {
return err
}
params.OrderNumber = decimal.NewFromInt(0)
- err = models.NewReorderRuleSearch().SetID(params.Id).Update(¶ms)
+ err = models.NewReorderRuleSearch().SetOrm(db).SetID(params.Id).Update(¶ms)
return err
})
+
+ return err
+}
+
+// SubmitOrder
+// @Tags 閲嶈璐ц鍒�
+// @Summary 鍐嶈涓�娆�
+// @Produce application/json
+// @Param object body models.ReorderRule true "鍙傛暟"
+// @Success 200 {object} util.Response "鎴愬姛"
+// @Router /api-wms/v1/reorderRule/submitOrder [post]
+func (slf ReorderRuleController) SubmitOrder(c *gin.Context) {
+ var params models.ReorderRule
+ client := purchase_wms.NewPurchaseServiceClient(init_client.SrmConn)
+ resp, err := client.CreatePurchaseByWms(c, &purchase_wms.CreatePurchaseByWmsRequest{
+ SupplierId: params.SupplierId,
+ ProductId: params.ProductId,
+ Amount: params.OrderNumber.IntPart(),
+ Source: "APS",
+ })
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "grpc璋冪敤澶辫触")
+ return
+ }
+ err = orderAgain(params, resp.PurchaseNumber)
if err != nil {
util.ResponseFormat(c, code.RequestParamError, "閲嶈澶辫触")
return
}
- util.ResponseFormat(c, code.Success, "閲嶈鎴愬姛")
}
--
Gitblit v1.8.0