From db425e3e5022111c8b776fa18f453ed04623deb2 Mon Sep 17 00:00:00 2001
From: jiangshuai <291802688@qq.com>
Date: 星期六, 23 九月 2023 15:19:27 +0800
Subject: [PATCH] 1.报废新增、修改、列表、验证

---
 constvar/const.go                 |    1 
 controllers/product_controller.go |  245 ++++++++++++++++
 controllers/operation.go          |    9 
 models/material.go                |   21 +
 models/operation.go               |   10 
 request/product_request.go        |   35 ++
 docs/swagger.yaml                 |  132 ++++++++
 docs/docs.go                      |  207 +++++++++++++
 docs/swagger.json                 |  207 +++++++++++++
 router/router.go                  |    7 
 10 files changed, 864 insertions(+), 10 deletions(-)

diff --git a/constvar/const.go b/constvar/const.go
index 85b175d..42221db 100644
--- a/constvar/const.go
+++ b/constvar/const.go
@@ -124,6 +124,7 @@
 	LocationTypeInventoryLoss                         // 搴撳瓨鎹熷け
 	LocationTypeProduction                            // 鐢熶骇
 	LocationTypeTransit                               // 涓浆浣嶇疆
+	LocationTypeDisuse
 )
 
 func (t LocationType) Valid() bool {
diff --git a/controllers/operation.go b/controllers/operation.go
index 8eca517..9d6fa9b 100644
--- a/controllers/operation.go
+++ b/controllers/operation.go
@@ -7,6 +7,7 @@
 	"github.com/shopspring/decimal"
 	"gorm.io/gorm"
 	"strconv"
+	"time"
 	"wms/constvar"
 	"wms/extend/code"
 	"wms/extend/util"
@@ -47,6 +48,7 @@
 	}
 
 	params.Status = constvar.OperationStatus_Ready
+	params.Number = strconv.FormatInt(time.Now().Unix(), 10)
 	if err := models.NewOperationSearch().Create(&params); err != nil {
 		logx.Errorf("Operation create err: %v", err)
 		util.ResponseFormat(c, code.SaveFail, "娣诲姞澶辫触锛�"+err.Error())
@@ -156,7 +158,6 @@
 	}
 
 	util.ResponseFormatListWithPage(c, code.Success, list, int(total), params.Page, params.PageSize)
-
 }
 
 func (slf OperationController) CheckListParams(params *request.OperationList) error {
@@ -318,7 +319,7 @@
 					if value, ok := mapProdt[v.ID]; !ok {
 						return errors.New("浜у搧绉嶇被寮傚父")
 					} else {
-						listProdt[k].Amount.Add(value)
+						listProdt[k].Amount = listProdt[k].Amount.Add(value)
 						if err := tx.Save(listProdt[k]).Error; err != nil {
 							return err
 						}
@@ -333,7 +334,7 @@
 						if v.Amount.LessThan(value) {
 							return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Name, v.Amount.String(), value.String()))
 						}
-						listProdt[k].Amount.Sub(value)
+						listProdt[k].Amount = listProdt[k].Amount.Sub(value)
 						if err := tx.Save(listProdt[k]).Error; err != nil {
 							return err
 						}
@@ -381,7 +382,5 @@
 		util.ResponseFormat(c, code.RequestError, "鏌ユ壘澶辫触:"+err.Error())
 		return
 	}
-
 	util.ResponseFormatListWithPage(c, code.Success, list, int(total), params.Page, params.PageSize)
-
 }
diff --git a/controllers/product_controller.go b/controllers/product_controller.go
index ab40488..ca6f24e 100644
--- a/controllers/product_controller.go
+++ b/controllers/product_controller.go
@@ -1,11 +1,19 @@
 package controllers
 
 import (
+	"errors"
+	"fmt"
 	"github.com/gin-gonic/gin"
+	"github.com/shopspring/decimal"
 	"github.com/spf13/cast"
+	"gorm.io/gorm"
+	"strconv"
+	"time"
+	"wms/constvar"
 	"wms/extend/code"
 	"wms/extend/util"
 	"wms/models"
+	"wms/pkg/logx"
 	"wms/request"
 	"wms/utils"
 )
@@ -304,3 +312,240 @@
 
 	util.ResponseFormatListWithPage(c, code.Success, list, int(total), params.Page, params.PageSize)
 }
+
+// AddDisuse
+// @Tags      浜у搧
+// @Summary   娣诲姞鎶ュ簾淇℃伅
+// @Produce   application/json
+// @Param     object  body  request.AddDisuse true  "鍏ュ簱/鍑哄簱淇℃伅"
+// @Success   200 {object} util.Response "鎴愬姛"
+// @Router    /api-wms/v1/product/addDisuse [post]
+func (slf ProductController) AddDisuse(c *gin.Context) {
+	var params request.AddDisuse
+	if err := c.BindJSON(&params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�:"+err.Error())
+		return
+	}
+	if params.Amount.LessThanOrEqual(decimal.NewFromInt(0)) {
+		util.ResponseFormat(c, code.RequestParamError, "鏁伴噺寮傚父")
+		return
+	}
+	if params.FromLocationId == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨婧愪綅缃�")
+		return
+	}
+	if params.ToLocationId == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨鎶ュ簾浣嶇疆")
+		return
+	}
+	if params.SourceNumber == "" {
+		util.ResponseFormat(c, code.RequestParamError, "璇疯緭鍏ユ簮鍗曟嵁")
+		return
+	}
+	detail := &models.OperationDetails{
+		ProductId:   params.ProductId,
+		ProductName: params.ProductName,
+		Amount:      params.Amount,
+		Unit:        params.Unit,
+	}
+	operation := models.Operation{
+		Number:          strconv.FormatInt(time.Now().Unix(), 10),
+		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},
+	}
+	if err := models.NewOperationSearch().Create(&operation); err != nil {
+		logx.Errorf("Operation create err: %v", err)
+		util.ResponseFormat(c, code.SaveFail, "娣诲姞澶辫触锛�"+err.Error())
+		return
+	}
+	util.ResponseFormat(c, code.Success, "娣诲姞鎴愬姛")
+}
+
+// ListDisuse
+// @Tags      浜у搧
+// @Summary   鎶ュ簾鍒楄〃
+// @Produce   application/json
+// @Param		 object  body  request.QueryDisuseList true  "鏌ヨ鍙傛暟"
+// @Success   200 {object} util.Response	"鎴愬姛"
+// @Router    /api-wms/v1/product/listDisuse [post]
+func (slf ProductController) ListDisuse(c *gin.Context) {
+	var params request.QueryDisuseList
+	if err := c.BindJSON(&params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�:"+err.Error())
+		return
+	}
+	if !params.PageInfo.Check() {
+		util.ResponseFormat(c, code.RequestParamError, "鏁版嵁鍒嗛〉淇℃伅閿欒")
+		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,wms_operation_details.product_name,wms_operation_details.unit,wms_operation_details.amount").InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id")
+
+	if params.SourceNumber != "" {
+		db = db.Where("wms_operation.source_number like ?", fmt.Sprintf("%%%v%%", params.SourceNumber))
+	}
+	if params.Number != "" {
+		db = db.Where("wms_operation.number like ?", fmt.Sprintf("%%%v%%", params.Number))
+	}
+	db = db.Where("wms_operation.operation_type_id=?", 0)
+	var (
+		records = make([]*models.ResponseDisuseList, 0)
+		total   int64
+	)
+
+	//list, total, err := search.SetDisuse(true).SetPreload(true).SetOrder("created_at desc").Find()
+
+	if err := db.Count(&total).Error; err != nil {
+		util.ResponseFormat(c, code.RequestError, fmt.Errorf("find count err: %v", err))
+		return
+	}
+	db = db.Preload("ToLocation").Preload("FromLocation")
+	if params.Page*params.PageSize > 0 {
+		db = db.Offset((params.Page - 1) * params.PageSize).Limit(params.PageSize)
+	}
+	if err := db.Find(&records).Error; err != nil {
+		util.ResponseFormat(c, code.RequestError, fmt.Errorf("find count err: %v", err))
+		return
+	}
+	util.ResponseFormatListWithPage(c, code.Success, records, int(total), params.Page, params.PageSize)
+}
+
+// FinishDisuse
+//
+//	@Tags		浜у搧
+//	@Summary	楠岃瘉鎶ュ簾
+//	@Produce	application/json
+//	@Param		id	path		int			true	"id"
+//	@Success	200	{object}	util.Response	"鎴愬姛"
+//	@Router		/api-wms/v1/product/finishDisuse/{id} [put]
+func (slf ProductController) FinishDisuse(c *gin.Context) {
+	id, err := strconv.Atoi(c.Param("id"))
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "閿欒鐨刬d鍊�")
+		return
+	}
+	if id == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "id涓�0")
+		return
+	}
+	operation, err := models.NewOperationSearch().SetID(id).First()
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鏈壘鍒扮浉鍏充俊鎭�:"+err.Error())
+		return
+	}
+	if operation.Status != constvar.OperationStatus_Ready {
+		util.ResponseFormat(c, code.RequestError, "璇ラ獙璇佹棤娉曞畬鎴�")
+		return
+	}
+	if err := models.WithTransaction(func(tx *gorm.DB) error {
+		if err := models.NewOperationSearch().SetOrm(tx).SetID(id).Update(&models.Operation{Status: constvar.OperationStatus_Finish}); 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()
+		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
+				}
+			}
+		}
+		return nil
+	}); err != nil {
+		util.ResponseFormat(c, code.RequestError, err.Error())
+		return
+	}
+	util.ResponseFormat(c, code.Success, "鎿嶄綔鎴愬姛")
+}
+
+// UpdateDisuse
+// @Tags      浜у搧
+// @Summary   淇敼鎶ュ簾淇℃伅
+// @Produce   application/json
+// @Param     object  body  request.UpdateDisuse true  "鍏ュ簱/鍑哄簱淇℃伅"
+// @Success   200 {object} util.Response "鎴愬姛"
+// @Router    /api-wms/v1/product/updateDisuse [post]
+func (slf ProductController) UpdateDisuse(c *gin.Context) {
+	var params request.UpdateDisuse
+	if err := c.BindJSON(&params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�:"+err.Error())
+		return
+	}
+	if params.Amount.LessThanOrEqual(decimal.NewFromInt(0)) {
+		util.ResponseFormat(c, code.RequestParamError, "鏁伴噺寮傚父")
+		return
+	}
+	if params.FromLocationId == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨婧愪綅缃�")
+		return
+	}
+	if params.ToLocationId == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨鎶ュ簾浣嶇疆")
+		return
+	}
+	if params.SourceNumber == "" {
+		util.ResponseFormat(c, code.RequestParamError, "璇疯緭鍏ユ簮鍗曟嵁")
+		return
+	}
+	if params.Status != constvar.OperationStatus_Ready {
+		util.ResponseFormat(c, code.RequestParamError, "璇ヤ俊鎭棤娉曚慨鏀�")
+		return
+	}
+	detail := &models.OperationDetails{
+		ProductId:   params.ProductId,
+		ProductName: params.ProductName,
+		Amount:      params.Amount,
+		Unit:        params.Unit,
+	}
+	operation := models.Operation{
+		Id:              params.Id,
+		Number:          params.Number,
+		SourceNumber:    params.SourceNumber,
+		OperationTypeId: 0,
+		Status:          params.Status,
+		FromLocationID:  params.FromLocationId,
+		ToLocationID:    params.ToLocationId,
+		OperationDate:   params.OperationDate,
+		Details:         []*models.OperationDetails{detail},
+	}
+	if err := models.WithTransaction(func(tx *gorm.DB) error {
+		if err := models.NewOperationDetailsSearch().SetOrm(tx).SetOperationId(params.Id).Delete(); err != nil {
+			return err
+		}
+		operationSearch := models.NewOperationSearch().SetOrm(tx)
+		if err := operationSearch.Orm.Model(&operation).Association("Details").Replace(operation.Details); err != nil {
+			return err
+		}
+		if err := models.NewOperationSearch().SetOrm(tx).SetID(params.Id).Save(&operation); err != nil {
+			return err
+		}
+		return nil
+	}); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "淇敼澶辫触锛�"+err.Error())
+		return
+	}
+	util.ResponseFormat(c, code.Success, "娣诲姞鎴愬姛")
+}
diff --git a/docs/docs.go b/docs/docs.go
index 3a58589..3d921fd 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -787,6 +787,36 @@
                 }
             }
         },
+        "/api-wms/v1/product/addDisuse": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浜у搧"
+                ],
+                "summary": "娣诲姞鎶ュ簾淇℃伅",
+                "parameters": [
+                    {
+                        "description": "鍏ュ簱/鍑哄簱淇℃伅",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddDisuse"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api-wms/v1/product/addProduct": {
             "post": {
                 "produces": [
@@ -887,6 +917,34 @@
                 "parameters": [
                     {
                         "type": "string",
+                        "description": "id",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api-wms/v1/product/finishDisuse/{id}": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浜у搧"
+                ],
+                "summary": "楠岃瘉鎶ュ簾",
+                "parameters": [
+                    {
+                        "type": "integer",
                         "description": "id",
                         "name": "id",
                         "in": "path",
@@ -1073,6 +1131,36 @@
                 }
             }
         },
+        "/api-wms/v1/product/listDisuse": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浜у搧"
+                ],
+                "summary": "鎶ュ簾鍒楄〃",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.QueryDisuseList"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api-wms/v1/product/listOperaton": {
             "post": {
                 "produces": [
@@ -1113,6 +1201,36 @@
                                     }
                                 }
                             ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api-wms/v1/product/updateDisuse": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浜у搧"
+                ],
+                "summary": "淇敼鎶ュ簾淇℃伅",
+                "parameters": [
+                    {
+                        "description": "鍏ュ簱/鍑哄簱淇℃伅",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateDisuse"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
                         }
                     }
                 }
@@ -1456,7 +1574,8 @@
                 4,
                 5,
                 6,
-                7
+                7,
+                8
             ],
             "x-enum-comments": {
                 "LocationTypeCustomer": "瀹㈡埛浣嶇疆",
@@ -1474,7 +1593,8 @@
                 "LocationTypeCustomer",
                 "LocationTypeInventoryLoss",
                 "LocationTypeProduction",
-                "LocationTypeTransit"
+                "LocationTypeTransit",
+                "LocationTypeDisuse"
             ]
         },
         "constvar.MaterialMode": {
@@ -2306,6 +2426,32 @@
                 }
             }
         },
+        "request.AddDisuse": {
+            "type": "object",
+            "properties": {
+                "amount": {
+                    "type": "number"
+                },
+                "fromLocationId": {
+                    "type": "integer"
+                },
+                "productId": {
+                    "type": "string"
+                },
+                "productName": {
+                    "type": "string"
+                },
+                "sourceNumber": {
+                    "type": "string"
+                },
+                "toLocationId": {
+                    "type": "integer"
+                },
+                "unit": {
+                    "type": "string"
+                }
+            }
+        },
         "request.AddOperation": {
             "type": "object",
             "properties": {
@@ -2582,6 +2728,25 @@
                 }
             }
         },
+        "request.QueryDisuseList": {
+            "type": "object",
+            "properties": {
+                "number": {
+                    "type": "string"
+                },
+                "page": {
+                    "description": "椤电爜",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "description": "姣忛〉澶у皬",
+                    "type": "integer"
+                },
+                "sourceNumber": {
+                    "type": "string"
+                }
+            }
+        },
         "request.QueryOperationList": {
             "type": "object",
             "properties": {
@@ -2634,6 +2799,44 @@
                 }
             }
         },
+        "request.UpdateDisuse": {
+            "type": "object",
+            "properties": {
+                "amount": {
+                    "type": "number"
+                },
+                "fromLocationId": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "operationDate": {
+                    "type": "string"
+                },
+                "productId": {
+                    "type": "string"
+                },
+                "productName": {
+                    "type": "string"
+                },
+                "sourceNumber": {
+                    "type": "string"
+                },
+                "status": {
+                    "$ref": "#/definitions/constvar.OperationStatus"
+                },
+                "toLocationId": {
+                    "type": "integer"
+                },
+                "unit": {
+                    "type": "string"
+                }
+            }
+        },
         "request.UpdateOperation": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index 0e384b5..a8ff32a 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -775,6 +775,36 @@
                 }
             }
         },
+        "/api-wms/v1/product/addDisuse": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浜у搧"
+                ],
+                "summary": "娣诲姞鎶ュ簾淇℃伅",
+                "parameters": [
+                    {
+                        "description": "鍏ュ簱/鍑哄簱淇℃伅",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddDisuse"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api-wms/v1/product/addProduct": {
             "post": {
                 "produces": [
@@ -875,6 +905,34 @@
                 "parameters": [
                     {
                         "type": "string",
+                        "description": "id",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api-wms/v1/product/finishDisuse/{id}": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浜у搧"
+                ],
+                "summary": "楠岃瘉鎶ュ簾",
+                "parameters": [
+                    {
+                        "type": "integer",
                         "description": "id",
                         "name": "id",
                         "in": "path",
@@ -1061,6 +1119,36 @@
                 }
             }
         },
+        "/api-wms/v1/product/listDisuse": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浜у搧"
+                ],
+                "summary": "鎶ュ簾鍒楄〃",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.QueryDisuseList"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api-wms/v1/product/listOperaton": {
             "post": {
                 "produces": [
@@ -1101,6 +1189,36 @@
                                     }
                                 }
                             ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api-wms/v1/product/updateDisuse": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浜у搧"
+                ],
+                "summary": "淇敼鎶ュ簾淇℃伅",
+                "parameters": [
+                    {
+                        "description": "鍏ュ簱/鍑哄簱淇℃伅",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateDisuse"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
                         }
                     }
                 }
@@ -1444,7 +1562,8 @@
                 4,
                 5,
                 6,
-                7
+                7,
+                8
             ],
             "x-enum-comments": {
                 "LocationTypeCustomer": "瀹㈡埛浣嶇疆",
@@ -1462,7 +1581,8 @@
                 "LocationTypeCustomer",
                 "LocationTypeInventoryLoss",
                 "LocationTypeProduction",
-                "LocationTypeTransit"
+                "LocationTypeTransit",
+                "LocationTypeDisuse"
             ]
         },
         "constvar.MaterialMode": {
@@ -2294,6 +2414,32 @@
                 }
             }
         },
+        "request.AddDisuse": {
+            "type": "object",
+            "properties": {
+                "amount": {
+                    "type": "number"
+                },
+                "fromLocationId": {
+                    "type": "integer"
+                },
+                "productId": {
+                    "type": "string"
+                },
+                "productName": {
+                    "type": "string"
+                },
+                "sourceNumber": {
+                    "type": "string"
+                },
+                "toLocationId": {
+                    "type": "integer"
+                },
+                "unit": {
+                    "type": "string"
+                }
+            }
+        },
         "request.AddOperation": {
             "type": "object",
             "properties": {
@@ -2570,6 +2716,25 @@
                 }
             }
         },
+        "request.QueryDisuseList": {
+            "type": "object",
+            "properties": {
+                "number": {
+                    "type": "string"
+                },
+                "page": {
+                    "description": "椤电爜",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "description": "姣忛〉澶у皬",
+                    "type": "integer"
+                },
+                "sourceNumber": {
+                    "type": "string"
+                }
+            }
+        },
         "request.QueryOperationList": {
             "type": "object",
             "properties": {
@@ -2622,6 +2787,44 @@
                 }
             }
         },
+        "request.UpdateDisuse": {
+            "type": "object",
+            "properties": {
+                "amount": {
+                    "type": "number"
+                },
+                "fromLocationId": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "operationDate": {
+                    "type": "string"
+                },
+                "productId": {
+                    "type": "string"
+                },
+                "productName": {
+                    "type": "string"
+                },
+                "sourceNumber": {
+                    "type": "string"
+                },
+                "status": {
+                    "$ref": "#/definitions/constvar.OperationStatus"
+                },
+                "toLocationId": {
+                    "type": "integer"
+                },
+                "unit": {
+                    "type": "string"
+                }
+            }
+        },
         "request.UpdateOperation": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index ff5c7d4..f0f0d6e 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -77,6 +77,7 @@
     - 5
     - 6
     - 7
+    - 8
     type: integer
     x-enum-comments:
       LocationTypeCustomer: 瀹㈡埛浣嶇疆
@@ -94,6 +95,7 @@
     - LocationTypeInventoryLoss
     - LocationTypeProduction
     - LocationTypeTransit
+    - LocationTypeDisuse
   constvar.MaterialMode:
     enum:
     - 鍘熸潗鏂�
@@ -679,6 +681,23 @@
         description: 澶囨敞
         type: string
     type: object
+  request.AddDisuse:
+    properties:
+      amount:
+        type: number
+      fromLocationId:
+        type: integer
+      productId:
+        type: string
+      productName:
+        type: string
+      sourceNumber:
+        type: string
+      toLocationId:
+        type: integer
+      unit:
+        type: string
+    type: object
   request.AddOperation:
     properties:
       comment:
@@ -870,6 +889,19 @@
       sourceNumber:
         type: string
     type: object
+  request.QueryDisuseList:
+    properties:
+      number:
+        type: string
+      page:
+        description: 椤电爜
+        type: integer
+      pageSize:
+        description: 姣忛〉澶у皬
+        type: integer
+      sourceNumber:
+        type: string
+    type: object
   request.QueryOperationList:
     properties:
       page:
@@ -904,6 +936,31 @@
         type: integer
       remark:
         description: 澶囨敞
+        type: string
+    type: object
+  request.UpdateDisuse:
+    properties:
+      amount:
+        type: number
+      fromLocationId:
+        type: integer
+      id:
+        type: integer
+      number:
+        type: string
+      operationDate:
+        type: string
+      productId:
+        type: string
+      productName:
+        type: string
+      sourceNumber:
+        type: string
+      status:
+        $ref: '#/definitions/constvar.OperationStatus'
+      toLocationId:
+        type: integer
+      unit:
         type: string
     type: object
   request.UpdateOperation:
@@ -1507,6 +1564,25 @@
       summary: 缂栬緫浣滀笟绫诲瀷
       tags:
       - 涓氬姟绫诲瀷
+  /api-wms/v1/product/addDisuse:
+    post:
+      parameters:
+      - description: 鍏ュ簱/鍑哄簱淇℃伅
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddDisuse'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: 鎴愬姛
+          schema:
+            $ref: '#/definitions/util.Response'
+      summary: 娣诲姞鎶ュ簾淇℃伅
+      tags:
+      - 浜у搧
   /api-wms/v1/product/addProduct:
     post:
       parameters:
@@ -1581,6 +1657,24 @@
       summary: 鍒犻櫎浜у搧绫诲瀷
       tags:
       - 浜у搧绫诲瀷
+  /api-wms/v1/product/finishDisuse/{id}:
+    put:
+      parameters:
+      - description: id
+        in: path
+        name: id
+        required: true
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: 鎴愬姛
+          schema:
+            $ref: '#/definitions/util.Response'
+      summary: 楠岃瘉鎶ュ簾
+      tags:
+      - 浜у搧
   /api-wms/v1/product/getProductCategoryDetails/{id}:
     get:
       parameters:
@@ -1679,6 +1773,25 @@
       summary: 鑾峰彇浜у搧鍒楄〃
       tags:
       - 浜у搧
+  /api-wms/v1/product/listDisuse:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.QueryDisuseList'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: 鎴愬姛
+          schema:
+            $ref: '#/definitions/util.Response'
+      summary: 鎶ュ簾鍒楄〃
+      tags:
+      - 浜у搧
   /api-wms/v1/product/listOperaton:
     post:
       parameters:
@@ -1705,6 +1818,25 @@
       summary: 浜у搧鍘嗗彶鍑哄叆搴撲俊鎭�
       tags:
       - 浜у搧
+  /api-wms/v1/product/updateDisuse:
+    post:
+      parameters:
+      - description: 鍏ュ簱/鍑哄簱淇℃伅
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateDisuse'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: 鎴愬姛
+          schema:
+            $ref: '#/definitions/util.Response'
+      summary: 淇敼鎶ュ簾淇℃伅
+      tags:
+      - 浜у搧
   /api-wms/v1/product/updateProduct:
     post:
       parameters:
diff --git a/models/material.go b/models/material.go
index d8098fd..dd74cb1 100644
--- a/models/material.go
+++ b/models/material.go
@@ -475,3 +475,24 @@
 	}
 	return result.Max, nil
 }
+
+type ResponseDisuseList struct {
+	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)"`                           //婧愬崟鍙�
+	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"` //婧愪綅缃�
+	ToLocation     Location                 `json:"toLocation"      gorm:"foreignKey:ToLocationID;references:Id"`    //鐩爣浣嶇疆
+	ToLocationID   int                      `json:"toLocationId"    gorm:"type:int;not null;comment:鐩爣浣嶇疆id"`         //鐩爣浣嶇疆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:澶囨敞"`
+	ProductId      string                   `json:"productId" gorm:"type:varchar(191);not null;comment:浜у搧id"`   //浜у搧id
+	ProductName    string                   `json:"productName" gorm:"type:varchar(255);not null;comment:浜у搧鍚嶇О"` //浜у搧鍚嶇О
+	Amount         decimal.Decimal          `json:"amount" gorm:"type:decimal(20,2);not null;comment:鏁伴噺"`       //鏁伴噺
+	Unit           string                   `json:"unit" gorm:"type:varchar(31);comment:鍗曚綅"`
+}
diff --git a/models/operation.go b/models/operation.go
index 3142f3b..b0d64d4 100644
--- a/models/operation.go
+++ b/models/operation.go
@@ -45,6 +45,7 @@
 		Keyword  string
 		Orm      *gorm.DB
 		Preload  bool
+		Disuse   bool
 	}
 )
 
@@ -101,6 +102,11 @@
 	return slf
 }
 
+func (slf *OperationSearch) SetDisuse(disuse bool) *OperationSearch {
+	slf.Disuse = disuse
+	return slf
+}
+
 func (slf *OperationSearch) build() *gorm.DB {
 	var db = slf.Orm.Model(&Operation{})
 
@@ -131,6 +137,10 @@
 		db = db.Model(&Operation{}).Preload("Details").Preload("FromLocation").Preload("ToLocation")
 	}
 
+	if slf.Disuse {
+		db = db.Where("operation_type_id = ?", 0)
+	}
+
 	return db
 }
 
diff --git a/request/product_request.go b/request/product_request.go
index c4b8cae..0f16f7b 100644
--- a/request/product_request.go
+++ b/request/product_request.go
@@ -1,5 +1,10 @@
 package request
 
+import (
+	"github.com/shopspring/decimal"
+	"wms/constvar"
+)
+
 type GetProductList struct {
 	PageInfo
 	KeyWord string `json:"keyWord"`
@@ -9,3 +14,33 @@
 	PageInfo
 	ProductId string `json:"productId"`
 }
+
+type AddDisuse struct {
+	ProductId      string          `json:"productId"`
+	ProductName    string          `json:"productName"`
+	Amount         decimal.Decimal `json:"amount"`
+	FromLocationId int             `json:"fromLocationId"`
+	ToLocationId   int             `json:"toLocationId"`
+	SourceNumber   string          `json:"sourceNumber"`
+	Unit           string          `json:"unit"`
+}
+
+type QueryDisuseList struct {
+	PageInfo
+	Number       string `json:"number"`
+	SourceNumber string `json:"sourceNumber"`
+}
+
+type UpdateDisuse struct {
+	Id             int                      `json:"id"`
+	ProductId      string                   `json:"productId"`
+	ProductName    string                   `json:"productName"`
+	Amount         decimal.Decimal          `json:"amount"`
+	FromLocationId int                      `json:"fromLocationId"`
+	ToLocationId   int                      `json:"toLocationId"`
+	SourceNumber   string                   `json:"sourceNumber"`
+	Unit           string                   `json:"unit"`
+	Number         string                   `json:"number"`
+	Status         constvar.OperationStatus `json:"status"`
+	OperationDate  string                   `json:"operationDate"`
+}
diff --git a/router/router.go b/router/router.go
index b03a86d..e912304 100644
--- a/router/router.go
+++ b/router/router.go
@@ -102,7 +102,12 @@
 		productAPI.POST("updateProductCategory", productController.UpdateProductCategory)            //淇敼浜у搧绫诲瀷
 		productAPI.DELETE("deleteProductCategory/:id", productController.DeleteProductCategory)      //鍒犻櫎浜у搧绫诲瀷
 
-		productAPI.POST("listOperaton", productController.ListOperation) //鏌ョ湅浜у搧鐨勫巻鍙插嚭鍏ュ簱淇℃伅
+		productAPI.POST("listOperaton", productController.ListOperation)   //鏌ョ湅浜у搧鐨勫巻鍙插嚭鍏ュ簱淇℃伅
+		productAPI.POST("addDisuse", productController.AddDisuse)          //娣诲姞鎶ュ簾淇℃伅
+		productAPI.POST("listDisuse", productController.ListDisuse)        //鏌ョ湅浜у搧鐨勫巻鍙插嚭鍏ュ簱淇℃伅
+		productAPI.PUT("finishDisuse/:id", productController.FinishDisuse) //鎶ュ簾楠岃瘉
+		productAPI.POST("updateDisuse", productController.UpdateDisuse)    //淇敼鎶ュ簾淇℃伅
+
 	}
 
 	return r

--
Gitblit v1.8.0