From 79eca4ef507f418b88a0817f43a9ea25750a818a Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期六, 23 九月 2023 16:57:57 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/aps/WMS

---
 constvar/const.go                 |    1 
 controllers/product_controller.go |  275 ++++++++
 controllers/operation.go          |   92 ++
 models/material.go                |   21 
 models/operation.go               |   34 
 request/product_request.go        |   40 +
 docs/swagger.yaml                 |  341 +++++++++
 request/operation.go              |   10 
 docs/docs.go                      |  576 +++++++++++++++-
 docs/swagger.json                 |  574 +++++++++++++++-
 router/router.go                  |   11 
 11 files changed, 1,802 insertions(+), 173 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 32d16bb..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())
@@ -128,13 +130,12 @@
 // @Tags      鍏ュ簱/鍑哄簱
 // @Summary   鍏ュ簱/鍑哄簱鍒楄〃
 // @Produce   application/json
-// @Accept	  json
-// @Param     object  query  request.OperationList true  "鍙傛暟"
-// @Success   200 {object} util.Response "鎴愬姛"
-// @Router    /api-wms/v1/operation/operation [get]
+// @Param		 object  body  request.OperationList true  "鏌ヨ鍙傛暟"
+// @Success   200 {object} util.Response	"鎴愬姛"
+// @Router    /api-wms/v1/operation/list [post]
 func (slf OperationController) List(c *gin.Context) {
 	var params request.OperationList
-	if err := c.ShouldBindQuery(&params); err != nil {
+	if err := c.BindJSON(&params); err != nil {
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�:"+err.Error())
 		return
 	}
@@ -144,14 +145,19 @@
 	}
 	search := models.NewOperationSearch()
 	search.SetPage(params.Page, params.PageSize)
+	if params.Number != "" {
+		search.SetNumber(params.Number)
+	}
+	if params.SourceNumber != "" {
+		search.SetSourceNumber(params.SourceNumber)
+	}
 	list, total, err := search.SetOperationTypeId(params.OperationTypeId).SetPreload(true).SetOrder("created_at desc").Find()
 	if err != nil {
 		util.ResponseFormat(c, code.RequestError, "鏌ユ壘澶辫触:"+err.Error())
 		return
 	}
 
-	util.ResponseFormatList(c, code.Success, list, int(total))
-
+	util.ResponseFormatListWithPage(c, code.Success, list, int(total), params.Page, params.PageSize)
 }
 
 func (slf OperationController) CheckListParams(params *request.OperationList) error {
@@ -293,11 +299,7 @@
 		if err := models.NewOperationSearch().SetOrm(tx).SetID(id).Update(&models.Operation{Status: constvar.OperationStatus_Finish}); err != nil {
 			return err
 		}
-		if operationType.BaseOperationType == constvar.BaseOperationTypeIncoming {
-			if err := models.NewMaterialSearch().Orm.Exec("update material INNER JOIN wms_operation_details on wms_operation_details.product_id=material.id INNER JOIN wms_operation on wms_operation.id=wms_operation_details.operation_id set material.amount=material.amount + wms_operation_details.quantity where wms_operation.id=?", id).Error; err != nil {
-				return err
-			}
-		} else if operationType.BaseOperationType == constvar.BaseOperationTypeOutgoing {
+		if operationType.BaseOperationType != constvar.BaseOperationTypeInternal {
 			var listProdtId []string
 			var listProdt []*models.Material
 			mapProdt := make(map[string]decimal.Decimal)
@@ -312,18 +314,34 @@
 			if err := models.NewMaterialSearch().Orm.Where("id IN ?", listProdtId).Find(&listProdt).Error; err != nil {
 				return err
 			}
-			for _, 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()))
+			if operationType.BaseOperationType == constvar.BaseOperationTypeIncoming {
+				for k, v := range listProdt {
+					if value, ok := mapProdt[v.ID]; !ok {
+						return errors.New("浜у搧绉嶇被寮傚父")
+					} else {
+						listProdt[k].Amount = listProdt[k].Amount.Add(value)
+						if err := tx.Save(listProdt[k]).Error; err != nil {
+							return err
+						}
 					}
 				}
 			}
-			if err := models.NewMaterialSearch().Orm.Exec("update material INNER JOIN wms_operation_details on wms_operation_details.product_id=material.id INNER JOIN wms_operation on wms_operation.id=wms_operation_details.operation_id set material.amount=material.amount - wms_operation_details.quantity where wms_operation.id=?", id).Error; err != nil {
-				return err
+			if operationType.BaseOperationType == constvar.BaseOperationTypeOutgoing {
+				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 {
@@ -332,3 +350,37 @@
 	}
 	util.ResponseFormat(c, code.Success, "鎿嶄綔鎴愬姛")
 }
+
+// ListAll
+// @Tags      鍏ュ簱/鍑哄簱
+// @Summary   璋冩嫧
+// @Produce   application/json
+// @Param     object  body  request.OperationAllList true  "鍙傛暟"
+// @Success   200 {object} util.Response "鎴愬姛"
+// @Router    /api-wms/v1/operation/listAll [post]
+func (slf OperationController) ListAll(c *gin.Context) {
+	var params request.OperationAllList
+	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
+	}
+	search := models.NewOperationSearch()
+	search.SetPage(params.Page, params.PageSize)
+	search.SetPage(params.Page, params.PageSize)
+	if params.Number != "" {
+		search.SetNumber(params.Number)
+	}
+	if params.SourceNumber != "" {
+		search.SetSourceNumber(params.SourceNumber)
+	}
+	list, total, err := search.SetPreload(true).SetOrder("created_at desc").Find()
+	if err != nil {
+		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 a47c9a1..15878dc 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"
 )
@@ -290,3 +298,270 @@
 	}
 	util.ResponseFormat(c, code.Success, "鍒犻櫎鎴愬姛")
 }
+
+// ListOperation
+// @Tags      浜у搧
+// @Summary   浜у搧鍘嗗彶鍑哄叆搴撲俊鎭�
+// @Produce   application/json
+// @Param		 object  body  request.QueryOperationList true  "鏌ヨ鍙傛暟"
+// @Success   200 {object} util.ResponseList{data=[]models.Operation}	"鎴愬姛"
+// @Router    /api-wms/v1/product/listOperaton [post]
+func (slf ProductController) ListOperation(c *gin.Context) {
+	var params request.QueryOperationList
+	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
+	}
+
+	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=?", params.ProductId))
+
+	list, total, err := search.Find()
+	if err != nil {
+		util.ResponseFormat(c, code.RequestError, "鏌ユ壘澶辫触:"+err.Error())
+		return
+	}
+
+	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 bce2dc6..3d921fd 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -495,11 +495,8 @@
                 }
             }
         },
-        "/api-wms/v1/operation/operation": {
-            "get": {
-                "consumes": [
-                    "application/json"
-                ],
+        "/api-wms/v1/operation/list": {
+            "post": {
                 "produces": [
                     "application/json"
                 ],
@@ -509,21 +506,13 @@
                 "summary": "鍏ュ簱/鍑哄簱鍒楄〃",
                 "parameters": [
                     {
-                        "type": "integer",
-                        "name": "operationTypeId",
-                        "in": "query"
-                    },
-                    {
-                        "type": "integer",
-                        "description": "椤电爜",
-                        "name": "page",
-                        "in": "query"
-                    },
-                    {
-                        "type": "integer",
-                        "description": "姣忛〉澶у皬",
-                        "name": "pageSize",
-                        "in": "query"
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.OperationList"
+                        }
                     }
                 ],
                 "responses": {
@@ -534,7 +523,39 @@
                         }
                     }
                 }
-            },
+            }
+        },
+        "/api-wms/v1/operation/listAll": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鍏ュ簱/鍑哄簱"
+                ],
+                "summary": "璋冩嫧",
+                "parameters": [
+                    {
+                        "description": "鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.OperationAllList"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api-wms/v1/operation/operation": {
             "post": {
                 "produces": [
                     "application/json"
@@ -565,7 +586,35 @@
             }
         },
         "/api-wms/v1/operation/operation/{id}": {
-            "put": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鍏ュ簱/鍑哄簱"
+                ],
+                "summary": "鍒犻櫎鍏ュ簱/鍑哄簱淇℃伅",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "id",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api-wms/v1/operation/update": {
+            "post": {
                 "produces": [
                     "application/json"
                 ],
@@ -582,39 +631,6 @@
                         "schema": {
                             "$ref": "#/definitions/request.UpdateOperation"
                         }
-                    },
-                    {
-                        "type": "integer",
-                        "description": "鍏ュ簱淇℃伅id",
-                        "name": "id",
-                        "in": "path",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "鎴愬姛",
-                        "schema": {
-                            "$ref": "#/definitions/util.Response"
-                        }
-                    }
-                }
-            },
-            "delete": {
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "鍏ュ簱/鍑哄簱"
-                ],
-                "summary": "鍒犻櫎鍏ュ簱/鍑哄簱淇℃伅",
-                "parameters": [
-                    {
-                        "type": "integer",
-                        "description": "id",
-                        "name": "id",
-                        "in": "path",
-                        "required": true
                     }
                 ],
                 "responses": {
@@ -771,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": [
@@ -871,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",
@@ -1052,6 +1126,111 @@
                                     }
                                 }
                             ]
+                        }
+                    }
+                }
+            }
+        },
+        "/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": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浜у搧"
+                ],
+                "summary": "浜у搧鍘嗗彶鍑哄叆搴撲俊鎭�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.QueryOperationList"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/util.ResponseList"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/models.Operation"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/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"
                         }
                     }
                 }
@@ -1395,7 +1574,8 @@
                 4,
                 5,
                 6,
-                7
+                7,
+                8
             ],
             "x-enum-comments": {
                 "LocationTypeCustomer": "瀹㈡埛浣嶇疆",
@@ -1413,7 +1593,8 @@
                 "LocationTypeCustomer",
                 "LocationTypeInventoryLoss",
                 "LocationTypeProduction",
-                "LocationTypeTransit"
+                "LocationTypeTransit",
+                "LocationTypeDisuse"
             ]
         },
         "constvar.MaterialMode": {
@@ -1613,6 +1794,10 @@
                 "isScrapLocation": {
                     "description": "鏄惁鎶ュ簾浣嶇疆",
                     "type": "boolean"
+                },
+                "jointName": {
+                    "description": "鎷兼帴鍚嶇О",
+                    "type": "string"
                 },
                 "name": {
                     "description": "浣嶇疆鍚嶇О",
@@ -1840,6 +2025,125 @@
                 "weight": {
                     "description": "閲嶉噺",
                     "type": "number"
+                }
+            }
+        },
+        "models.Operation": {
+            "type": "object",
+            "properties": {
+                "comment": {
+                    "type": "string"
+                },
+                "companyID": {
+                    "type": "integer"
+                },
+                "companyName": {
+                    "type": "string"
+                },
+                "contacterID": {
+                    "type": "integer"
+                },
+                "contacterName": {
+                    "type": "string"
+                },
+                "createTime": {
+                    "type": "string"
+                },
+                "details": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/models.OperationDetails"
+                    }
+                },
+                "fromLocation": {
+                    "description": "婧愪綅缃�",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/models.Location"
+                        }
+                    ]
+                },
+                "fromLocationId": {
+                    "description": "婧愪綅缃甶d",
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "number": {
+                    "description": "鍗曞彿",
+                    "type": "string"
+                },
+                "operationDate": {
+                    "type": "string"
+                },
+                "operationTypeId": {
+                    "description": "浣滀笟绫诲瀷id",
+                    "type": "integer"
+                },
+                "operationTypeName": {
+                    "description": "浣滀笟绫诲瀷鍚嶇О",
+                    "type": "string"
+                },
+                "sourceNumber": {
+                    "description": "婧愬崟鍙�",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "鐘舵��",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/constvar.OperationStatus"
+                        }
+                    ]
+                },
+                "toLocation": {
+                    "description": "鐩爣浣嶇疆",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/models.Location"
+                        }
+                    ]
+                },
+                "toLocationId": {
+                    "description": "鐩爣浣嶇疆id",
+                    "type": "integer"
+                },
+                "updateTime": {
+                    "type": "string"
+                }
+            }
+        },
+        "models.OperationDetails": {
+            "type": "object",
+            "properties": {
+                "amount": {
+                    "description": "鏁伴噺",
+                    "type": "number"
+                },
+                "createTime": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "operationId": {
+                    "description": "鎿嶄綔id",
+                    "type": "integer"
+                },
+                "productId": {
+                    "description": "浜у搧id",
+                    "type": "string"
+                },
+                "productName": {
+                    "description": "浜у搧鍚嶇О",
+                    "type": "string"
+                },
+                "unit": {
+                    "type": "string"
+                },
+                "updateTime": {
+                    "type": "string"
                 }
             }
         },
@@ -2122,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": {
@@ -2169,6 +2499,10 @@
                 "operationTypeId": {
                     "description": "浣滀笟绫诲瀷id",
                     "type": "integer"
+                },
+                "operationTypeName": {
+                    "description": "浣滀笟绫诲瀷鍚嶇О",
+                    "type": "string"
                 },
                 "sourceNumber": {
                     "description": "婧愬崟鍙�",
@@ -2329,12 +2663,35 @@
                 }
             }
         },
+        "request.OperationAllList": {
+            "type": "object",
+            "properties": {
+                "number": {
+                    "type": "string"
+                },
+                "page": {
+                    "description": "椤电爜",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "description": "姣忛〉澶у皬",
+                    "type": "integer"
+                },
+                "sourceNumber": {
+                    "type": "string"
+                }
+            }
+        },
         "request.OperationDetails": {
             "type": "object",
             "properties": {
                 "OperationId": {
                     "description": "鎿嶄綔id",
                     "type": "integer"
+                },
+                "amount": {
+                    "description": "鏁伴噺",
+                    "type": "number"
                 },
                 "productId": {
                     "description": "浜у搧id",
@@ -2344,11 +2701,64 @@
                     "description": "浜у搧鍚嶇О",
                     "type": "string"
                 },
-                "quantity": {
-                    "description": "鏁伴噺",
-                    "type": "number"
-                },
                 "unit": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.OperationList": {
+            "type": "object",
+            "properties": {
+                "number": {
+                    "type": "string"
+                },
+                "operationTypeId": {
+                    "type": "integer"
+                },
+                "page": {
+                    "description": "椤电爜",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "description": "姣忛〉澶у皬",
+                    "type": "integer"
+                },
+                "sourceNumber": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.QueryDisuseList": {
+            "type": "object",
+            "properties": {
+                "number": {
+                    "type": "string"
+                },
+                "page": {
+                    "description": "椤电爜",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "description": "姣忛〉澶у皬",
+                    "type": "integer"
+                },
+                "sourceNumber": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.QueryOperationList": {
+            "type": "object",
+            "properties": {
+                "page": {
+                    "description": "椤电爜",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "description": "姣忛〉澶у皬",
+                    "type": "integer"
+                },
+                "productId": {
                     "type": "string"
                 }
             }
@@ -2385,6 +2795,44 @@
                 },
                 "remark": {
                     "description": "澶囨敞",
+                    "type": "string"
+                }
+            }
+        },
+        "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"
                 }
             }
@@ -2436,6 +2884,10 @@
                 "operationTypeId": {
                     "description": "浣滀笟绫诲瀷id",
                     "type": "integer"
+                },
+                "operationTypeName": {
+                    "description": "浣滀笟绫诲瀷鍚嶇О",
+                    "type": "string"
                 },
                 "sourceNumber": {
                     "description": "婧愬崟鍙�",
@@ -2573,8 +3025,6 @@
 	Description:      "",
 	InfoInstanceName: "swagger",
 	SwaggerTemplate:  docTemplate,
-	LeftDelim:        "{{",
-	RightDelim:       "}}",
 }
 
 func init() {
diff --git a/docs/swagger.json b/docs/swagger.json
index cfa2f3c..a8ff32a 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -483,11 +483,8 @@
                 }
             }
         },
-        "/api-wms/v1/operation/operation": {
-            "get": {
-                "consumes": [
-                    "application/json"
-                ],
+        "/api-wms/v1/operation/list": {
+            "post": {
                 "produces": [
                     "application/json"
                 ],
@@ -497,21 +494,13 @@
                 "summary": "鍏ュ簱/鍑哄簱鍒楄〃",
                 "parameters": [
                     {
-                        "type": "integer",
-                        "name": "operationTypeId",
-                        "in": "query"
-                    },
-                    {
-                        "type": "integer",
-                        "description": "椤电爜",
-                        "name": "page",
-                        "in": "query"
-                    },
-                    {
-                        "type": "integer",
-                        "description": "姣忛〉澶у皬",
-                        "name": "pageSize",
-                        "in": "query"
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.OperationList"
+                        }
                     }
                 ],
                 "responses": {
@@ -522,7 +511,39 @@
                         }
                     }
                 }
-            },
+            }
+        },
+        "/api-wms/v1/operation/listAll": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鍏ュ簱/鍑哄簱"
+                ],
+                "summary": "璋冩嫧",
+                "parameters": [
+                    {
+                        "description": "鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.OperationAllList"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api-wms/v1/operation/operation": {
             "post": {
                 "produces": [
                     "application/json"
@@ -553,7 +574,35 @@
             }
         },
         "/api-wms/v1/operation/operation/{id}": {
-            "put": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鍏ュ簱/鍑哄簱"
+                ],
+                "summary": "鍒犻櫎鍏ュ簱/鍑哄簱淇℃伅",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "id",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api-wms/v1/operation/update": {
+            "post": {
                 "produces": [
                     "application/json"
                 ],
@@ -570,39 +619,6 @@
                         "schema": {
                             "$ref": "#/definitions/request.UpdateOperation"
                         }
-                    },
-                    {
-                        "type": "integer",
-                        "description": "鍏ュ簱淇℃伅id",
-                        "name": "id",
-                        "in": "path",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "鎴愬姛",
-                        "schema": {
-                            "$ref": "#/definitions/util.Response"
-                        }
-                    }
-                }
-            },
-            "delete": {
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "鍏ュ簱/鍑哄簱"
-                ],
-                "summary": "鍒犻櫎鍏ュ簱/鍑哄簱淇℃伅",
-                "parameters": [
-                    {
-                        "type": "integer",
-                        "description": "id",
-                        "name": "id",
-                        "in": "path",
-                        "required": true
                     }
                 ],
                 "responses": {
@@ -759,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": [
@@ -859,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",
@@ -1040,6 +1114,111 @@
                                     }
                                 }
                             ]
+                        }
+                    }
+                }
+            }
+        },
+        "/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": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浜у搧"
+                ],
+                "summary": "浜у搧鍘嗗彶鍑哄叆搴撲俊鎭�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.QueryOperationList"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/util.ResponseList"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/models.Operation"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/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"
                         }
                     }
                 }
@@ -1383,7 +1562,8 @@
                 4,
                 5,
                 6,
-                7
+                7,
+                8
             ],
             "x-enum-comments": {
                 "LocationTypeCustomer": "瀹㈡埛浣嶇疆",
@@ -1401,7 +1581,8 @@
                 "LocationTypeCustomer",
                 "LocationTypeInventoryLoss",
                 "LocationTypeProduction",
-                "LocationTypeTransit"
+                "LocationTypeTransit",
+                "LocationTypeDisuse"
             ]
         },
         "constvar.MaterialMode": {
@@ -1601,6 +1782,10 @@
                 "isScrapLocation": {
                     "description": "鏄惁鎶ュ簾浣嶇疆",
                     "type": "boolean"
+                },
+                "jointName": {
+                    "description": "鎷兼帴鍚嶇О",
+                    "type": "string"
                 },
                 "name": {
                     "description": "浣嶇疆鍚嶇О",
@@ -1828,6 +2013,125 @@
                 "weight": {
                     "description": "閲嶉噺",
                     "type": "number"
+                }
+            }
+        },
+        "models.Operation": {
+            "type": "object",
+            "properties": {
+                "comment": {
+                    "type": "string"
+                },
+                "companyID": {
+                    "type": "integer"
+                },
+                "companyName": {
+                    "type": "string"
+                },
+                "contacterID": {
+                    "type": "integer"
+                },
+                "contacterName": {
+                    "type": "string"
+                },
+                "createTime": {
+                    "type": "string"
+                },
+                "details": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/models.OperationDetails"
+                    }
+                },
+                "fromLocation": {
+                    "description": "婧愪綅缃�",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/models.Location"
+                        }
+                    ]
+                },
+                "fromLocationId": {
+                    "description": "婧愪綅缃甶d",
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "number": {
+                    "description": "鍗曞彿",
+                    "type": "string"
+                },
+                "operationDate": {
+                    "type": "string"
+                },
+                "operationTypeId": {
+                    "description": "浣滀笟绫诲瀷id",
+                    "type": "integer"
+                },
+                "operationTypeName": {
+                    "description": "浣滀笟绫诲瀷鍚嶇О",
+                    "type": "string"
+                },
+                "sourceNumber": {
+                    "description": "婧愬崟鍙�",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "鐘舵��",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/constvar.OperationStatus"
+                        }
+                    ]
+                },
+                "toLocation": {
+                    "description": "鐩爣浣嶇疆",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/models.Location"
+                        }
+                    ]
+                },
+                "toLocationId": {
+                    "description": "鐩爣浣嶇疆id",
+                    "type": "integer"
+                },
+                "updateTime": {
+                    "type": "string"
+                }
+            }
+        },
+        "models.OperationDetails": {
+            "type": "object",
+            "properties": {
+                "amount": {
+                    "description": "鏁伴噺",
+                    "type": "number"
+                },
+                "createTime": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "operationId": {
+                    "description": "鎿嶄綔id",
+                    "type": "integer"
+                },
+                "productId": {
+                    "description": "浜у搧id",
+                    "type": "string"
+                },
+                "productName": {
+                    "description": "浜у搧鍚嶇О",
+                    "type": "string"
+                },
+                "unit": {
+                    "type": "string"
+                },
+                "updateTime": {
+                    "type": "string"
                 }
             }
         },
@@ -2110,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": {
@@ -2157,6 +2487,10 @@
                 "operationTypeId": {
                     "description": "浣滀笟绫诲瀷id",
                     "type": "integer"
+                },
+                "operationTypeName": {
+                    "description": "浣滀笟绫诲瀷鍚嶇О",
+                    "type": "string"
                 },
                 "sourceNumber": {
                     "description": "婧愬崟鍙�",
@@ -2317,12 +2651,35 @@
                 }
             }
         },
+        "request.OperationAllList": {
+            "type": "object",
+            "properties": {
+                "number": {
+                    "type": "string"
+                },
+                "page": {
+                    "description": "椤电爜",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "description": "姣忛〉澶у皬",
+                    "type": "integer"
+                },
+                "sourceNumber": {
+                    "type": "string"
+                }
+            }
+        },
         "request.OperationDetails": {
             "type": "object",
             "properties": {
                 "OperationId": {
                     "description": "鎿嶄綔id",
                     "type": "integer"
+                },
+                "amount": {
+                    "description": "鏁伴噺",
+                    "type": "number"
                 },
                 "productId": {
                     "description": "浜у搧id",
@@ -2332,11 +2689,64 @@
                     "description": "浜у搧鍚嶇О",
                     "type": "string"
                 },
-                "quantity": {
-                    "description": "鏁伴噺",
-                    "type": "number"
-                },
                 "unit": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.OperationList": {
+            "type": "object",
+            "properties": {
+                "number": {
+                    "type": "string"
+                },
+                "operationTypeId": {
+                    "type": "integer"
+                },
+                "page": {
+                    "description": "椤电爜",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "description": "姣忛〉澶у皬",
+                    "type": "integer"
+                },
+                "sourceNumber": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.QueryDisuseList": {
+            "type": "object",
+            "properties": {
+                "number": {
+                    "type": "string"
+                },
+                "page": {
+                    "description": "椤电爜",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "description": "姣忛〉澶у皬",
+                    "type": "integer"
+                },
+                "sourceNumber": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.QueryOperationList": {
+            "type": "object",
+            "properties": {
+                "page": {
+                    "description": "椤电爜",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "description": "姣忛〉澶у皬",
+                    "type": "integer"
+                },
+                "productId": {
                     "type": "string"
                 }
             }
@@ -2373,6 +2783,44 @@
                 },
                 "remark": {
                     "description": "澶囨敞",
+                    "type": "string"
+                }
+            }
+        },
+        "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"
                 }
             }
@@ -2425,6 +2873,10 @@
                     "description": "浣滀笟绫诲瀷id",
                     "type": "integer"
                 },
+                "operationTypeName": {
+                    "description": "浣滀笟绫诲瀷鍚嶇О",
+                    "type": "string"
+                },
                 "sourceNumber": {
                     "description": "婧愬崟鍙�",
                     "type": "string"
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 0ffdc96..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:
     - 鍘熸潗鏂�
@@ -241,6 +243,9 @@
       isScrapLocation:
         description: 鏄惁鎶ュ簾浣嶇疆
         type: boolean
+      jointName:
+        description: 鎷兼帴鍚嶇О
+        type: string
       name:
         description: 浣嶇疆鍚嶇О
         type: string
@@ -414,6 +419,84 @@
       weight:
         description: 閲嶉噺
         type: number
+    type: object
+  models.Operation:
+    properties:
+      comment:
+        type: string
+      companyID:
+        type: integer
+      companyName:
+        type: string
+      contacterID:
+        type: integer
+      contacterName:
+        type: string
+      createTime:
+        type: string
+      details:
+        items:
+          $ref: '#/definitions/models.OperationDetails'
+        type: array
+      fromLocation:
+        allOf:
+        - $ref: '#/definitions/models.Location'
+        description: 婧愪綅缃�
+      fromLocationId:
+        description: 婧愪綅缃甶d
+        type: integer
+      id:
+        type: integer
+      number:
+        description: 鍗曞彿
+        type: string
+      operationDate:
+        type: string
+      operationTypeId:
+        description: 浣滀笟绫诲瀷id
+        type: integer
+      operationTypeName:
+        description: 浣滀笟绫诲瀷鍚嶇О
+        type: string
+      sourceNumber:
+        description: 婧愬崟鍙�
+        type: string
+      status:
+        allOf:
+        - $ref: '#/definitions/constvar.OperationStatus'
+        description: 鐘舵��
+      toLocation:
+        allOf:
+        - $ref: '#/definitions/models.Location'
+        description: 鐩爣浣嶇疆
+      toLocationId:
+        description: 鐩爣浣嶇疆id
+        type: integer
+      updateTime:
+        type: string
+    type: object
+  models.OperationDetails:
+    properties:
+      amount:
+        description: 鏁伴噺
+        type: number
+      createTime:
+        type: string
+      id:
+        type: integer
+      operationId:
+        description: 鎿嶄綔id
+        type: integer
+      productId:
+        description: 浜у搧id
+        type: string
+      productName:
+        description: 浜у搧鍚嶇О
+        type: string
+      unit:
+        type: string
+      updateTime:
+        type: string
     type: object
   models.OperationType:
     properties:
@@ -598,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:
@@ -633,6 +733,9 @@
       operationTypeId:
         description: 浣滀笟绫诲瀷id
         type: integer
+      operationTypeName:
+        description: 浣滀笟绫诲瀷鍚嶇О
+        type: string
       sourceNumber:
         description: 婧愬崟鍙�
         type: string
@@ -741,21 +844,73 @@
         description: 姣忛〉澶у皬
         type: integer
     type: object
+  request.OperationAllList:
+    properties:
+      number:
+        type: string
+      page:
+        description: 椤电爜
+        type: integer
+      pageSize:
+        description: 姣忛〉澶у皬
+        type: integer
+      sourceNumber:
+        type: string
+    type: object
   request.OperationDetails:
     properties:
       OperationId:
         description: 鎿嶄綔id
         type: integer
+      amount:
+        description: 鏁伴噺
+        type: number
       productId:
         description: 浜у搧id
         type: string
       productName:
         description: 浜у搧鍚嶇О
         type: string
-      quantity:
-        description: 鏁伴噺
-        type: number
       unit:
+        type: string
+    type: object
+  request.OperationList:
+    properties:
+      number:
+        type: string
+      operationTypeId:
+        type: integer
+      page:
+        description: 椤电爜
+        type: integer
+      pageSize:
+        description: 姣忛〉澶у皬
+        type: integer
+      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:
+        description: 椤电爜
+        type: integer
+      pageSize:
+        description: 姣忛〉澶у皬
+        type: integer
+      productId:
         type: string
     type: object
   request.UpdateCompany:
@@ -781,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:
@@ -818,6 +998,9 @@
       operationTypeId:
         description: 浣滀笟绫诲瀷id
         type: integer
+      operationTypeName:
+        description: 浣滀笟绫诲瀷鍚嶇О
+        type: string
       sourceNumber:
         description: 婧愬崟鍙�
         type: string
@@ -1197,22 +1380,15 @@
       summary: 鏇存敼璁板綍鐘舵��
       tags:
       - 鍏ュ簱/鍑哄簱
-  /api-wms/v1/operation/operation:
-    get:
-      consumes:
-      - application/json
+  /api-wms/v1/operation/list:
+    post:
       parameters:
-      - in: query
-        name: operationTypeId
-        type: integer
-      - description: 椤电爜
-        in: query
-        name: page
-        type: integer
-      - description: 姣忛〉澶у皬
-        in: query
-        name: pageSize
-        type: integer
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.OperationList'
       produces:
       - application/json
       responses:
@@ -1223,6 +1399,26 @@
       summary: 鍏ュ簱/鍑哄簱鍒楄〃
       tags:
       - 鍏ュ簱/鍑哄簱
+  /api-wms/v1/operation/listAll:
+    post:
+      parameters:
+      - description: 鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.OperationAllList'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: 鎴愬姛
+          schema:
+            $ref: '#/definitions/util.Response'
+      summary: 璋冩嫧
+      tags:
+      - 鍏ュ簱/鍑哄簱
+  /api-wms/v1/operation/operation:
     post:
       parameters:
       - description: 鍏ュ簱/鍑哄簱淇℃伅
@@ -1259,7 +1455,8 @@
       summary: 鍒犻櫎鍏ュ簱/鍑哄簱淇℃伅
       tags:
       - 鍏ュ簱/鍑哄簱
-    put:
+  /api-wms/v1/operation/update:
+    post:
       parameters:
       - description: 鍏ュ簱淇℃伅
         in: body
@@ -1267,11 +1464,6 @@
         required: true
         schema:
           $ref: '#/definitions/request.UpdateOperation'
-      - description: 鍏ュ簱淇℃伅id
-        in: path
-        name: id
-        required: true
-        type: integer
       produces:
       - application/json
       responses:
@@ -1372,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:
@@ -1446,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:
@@ -1544,6 +1773,70 @@
       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:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.QueryOperationList'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: 鎴愬姛
+          schema:
+            allOf:
+            - $ref: '#/definitions/util.ResponseList'
+            - properties:
+                data:
+                  items:
+                    $ref: '#/definitions/models.Operation'
+                  type: array
+              type: object
+      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 d1c7545..b0d64d4 100644
--- a/models/operation.go
+++ b/models/operation.go
@@ -45,6 +45,7 @@
 		Keyword  string
 		Orm      *gorm.DB
 		Preload  bool
+		Disuse   bool
 	}
 )
 
@@ -91,6 +92,21 @@
 	return slf
 }
 
+func (slf *OperationSearch) SetNumber(number string) *OperationSearch {
+	slf.Number = number
+	return slf
+}
+
+func (slf *OperationSearch) SetSourceNumber(sourceNumber string) *OperationSearch {
+	slf.SourceNumber = sourceNumber
+	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{})
 
@@ -101,9 +117,17 @@
 		db = db.Order(slf.Order)
 	}
 
-	//if slf.Keyword != "" {
-	//	db = db.Where("product_name like ?", fmt.Sprintf("%%%v%%", slf.Keyword))
-	//}
+	if slf.Keyword != "" {
+		db = db.Where("product_name like ?", fmt.Sprintf("%%%v%%", slf.Keyword))
+	}
+
+	if slf.SourceNumber != "" {
+		db = db.Where("source_number like ?", fmt.Sprintf("%%%v%%", slf.SourceNumber))
+	}
+
+	if slf.Number != "" {
+		db = db.Where("number like ?", fmt.Sprintf("%%%v%%", slf.Number))
+	}
 
 	if slf.OperationTypeId != 0 {
 		db.Where("operation_type_id = ?", slf.OperationTypeId)
@@ -113,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/operation.go b/request/operation.go
index b3b0bc2..9e730f2 100644
--- a/request/operation.go
+++ b/request/operation.go
@@ -39,7 +39,9 @@
 
 type OperationList struct {
 	PageInfo
-	OperationTypeId int `json:"operationTypeId" form:"operationTypeId"`
+	OperationTypeId int    `json:"operationTypeId" form:"operationTypeId"`
+	Number          string `json:"number"`
+	SourceNumber    string `json:"sourceNumber"`
 }
 
 type UpdateOperation struct {
@@ -65,3 +67,9 @@
 	//Weight         decimal.Decimal `json:"weight" gorm:"type:decimal(20,2);comment:閲嶉噺(kg)"`           //閲嶉噺(kg)-闈炲繀濉�
 	//TransferWeight decimal.Decimal `json:"transferWeight" gorm:"type:decimal(20,2);comment:鐗╂祦閲嶉噺(kg)"` //鐗╂祦閲嶉噺(kg)-闈炲繀濉�
 }
+
+type OperationAllList struct {
+	PageInfo
+	Number       string `json:"number"`
+	SourceNumber string `json:"sourceNumber"`
+}
diff --git a/request/product_request.go b/request/product_request.go
index 8af1cd0..0f16f7b 100644
--- a/request/product_request.go
+++ b/request/product_request.go
@@ -1,6 +1,46 @@
 package request
 
+import (
+	"github.com/shopspring/decimal"
+	"wms/constvar"
+)
+
 type GetProductList struct {
 	PageInfo
 	KeyWord string `json:"keyWord"`
 }
+
+type QueryOperationList struct {
+	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 ac257be..e912304 100644
--- a/router/router.go
+++ b/router/router.go
@@ -77,11 +77,13 @@
 	operationController := new(controllers.OperationController)
 	operationAPI := r.Group(urlPrefix + "/operation")
 	{
-		operationAPI.GET("operation", operationController.List)
+		operationAPI.POST("list", operationController.List)
 		operationAPI.POST("operation", operationController.Add)
 		operationAPI.POST("update", operationController.Update)
 		operationAPI.DELETE("operation/:id", operationController.Delete)
 		operationAPI.PUT("finish/:id", operationController.Finish)
+		operationAPI.POST("listAll", operationController.ListAll)
+
 	}
 
 	//浜у搧
@@ -99,6 +101,13 @@
 		productAPI.GET("getProductCategoryDetails/:id", productController.GetProductCategoryDetails) //鑾峰彇浜у搧绫诲瀷璇︽儏
 		productAPI.POST("updateProductCategory", productController.UpdateProductCategory)            //淇敼浜у搧绫诲瀷
 		productAPI.DELETE("deleteProductCategory/:id", productController.DeleteProductCategory)      //鍒犻櫎浜у搧绫诲瀷
+
+		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