From 33cb0eb308c1b62e25211600383371c31907025e Mon Sep 17 00:00:00 2001
From: yinbentan <yinbentan@live.com>
Date: 星期二, 16 七月 2024 20:25:34 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jialian' into jialian

---
 controllers/other.go |  188 +++++++
 docs/swagger.yaml    |  321 ++-----------
 docs/docs.go         |  439 ++---------------
 docs/swagger.json    |  439 ++---------------
 router/router.go     |    7 
 5 files changed, 384 insertions(+), 1,010 deletions(-)

diff --git a/controllers/other.go b/controllers/other.go
new file mode 100644
index 0000000..49d715f
--- /dev/null
+++ b/controllers/other.go
@@ -0,0 +1,188 @@
+package controllers
+
+import (
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"github.com/xuri/excelize/v2"
+	"gorm.io/gorm"
+	"strings"
+	"wms/constvar"
+	"wms/extend/code"
+	"wms/extend/util"
+	"wms/models"
+	"wms/pkg/logx"
+	"wms/utils/upload"
+)
+
+type OtherController struct{}
+
+type saveProductImagesFromExcelRequest struct {
+	ExcelFilePath        string `json:"excelFilePath"`        //excel璺緞 鐢╠ocker cp浼犲埌瀹瑰櫒閲�
+	SheetIndex           int    `json:"sheetIndex"`           //绗嚑涓猻heet
+	ProductIdColumnIndex int    `json:"productIdColumnIndex"` //浜у搧ID鏄鍑犲垪(浠�0寮�濮�)
+	ImageColumn          string `json:"imageColumn"`          //鍥剧墖鎵�鍦ㄥ垪鍚�
+}
+
+// SaveProductImagesFromExcel
+// @Tags      鍏朵粬
+// @Summary   浠巈xcel涓幏鍙栦骇鍝佸浘鐗囧苟淇濆瓨
+// @Produce   application/json
+// @Param     object  body  saveProductImagesFromExcelRequest true  "灞炴�т俊鎭�"
+// @Param     Authorization	header string true "token"
+// @Success   200 {object} util.Response "鎴愬姛"
+// @Router    /api-wms/v1/other/saveProductImagesFromExcel [post]
+func (slf OtherController) SaveProductImagesFromExcel(c *gin.Context) {
+	var params saveProductImagesFromExcelRequest
+	if err := c.BindJSON(&params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�:"+err.Error())
+		return
+	}
+	if params.ExcelFilePath == "" || params.ImageColumn == "" {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟缂哄け")
+		return
+	}
+
+	productImageMap, err := UploadProductImagesFromExcel(params.ExcelFilePath, params.SheetIndex, params.ProductIdColumnIndex, params.ImageColumn)
+	if err != nil {
+		logx.Errorf("SaveProductImagesFromExcel err:%v", err)
+		util.ResponseFormat(c, code.SaveFail, "鎿嶄綔澶辫触")
+		return
+	}
+
+	for productId, urls := range productImageMap {
+		if len(urls) == 0 {
+			continue
+		}
+		attachmentList := make([]*models.Attachment, 0)
+		materialAttachmentList := make([]*models.MaterialAttachment, 0)
+		for _, url := range urls {
+			attachmentList = append(attachmentList, &models.Attachment{
+				FileUrl:  url,
+				FileType: constvar.FileType_Picture,
+			})
+		}
+
+		err = models.WithTransaction(func(db *gorm.DB) error {
+			//淇濆瓨闄勪欢
+			if attachmentList, err = models.NewAttachmentSearch().CreateBatchWithResp(attachmentList); err != nil {
+				logx.Errorf("attachment create err: %v", err)
+				return err
+			}
+
+			//淇濆瓨鐗╂枡鍜岄檮浠舵槧灏�
+			for _, v := range attachmentList {
+				ma := &models.MaterialAttachment{MaterialID: productId, AttachmentID: v.Id}
+				materialAttachmentList = append(materialAttachmentList, ma)
+			}
+			if err := models.NewMaterialAttachmentSearch().SetOrm(db).CreateBatch(materialAttachmentList); err != nil {
+				return err
+			}
+			return nil
+		})
+		if err != nil {
+			logx.Errorf("SaveProductImagesFromExcel save db  err:%v, productId:%v, urls:%v", err, productId, urls)
+		}
+	}
+
+	util.ResponseFormat(c, code.Success, "淇濆瓨鎴愬姛")
+}
+
+// UploadProductImagesFromExcel 浠嶦xcel鏂囦欢涓笂浼犱骇鍝佸浘鐗�
+func UploadProductImagesFromExcel(filePath string, sheetIndex int, productIdColumn int, imageColumn string) (productImageMap map[string][]string, err error) {
+	productImageMap = make(map[string][]string)
+	// 鍔犺浇Excel鏂囦欢
+	f, err := excelize.OpenFile(filePath)
+	if err != nil {
+		logx.Errorf("Failed to open Excel file: %v", err)
+		return
+	}
+	defer f.Close()
+
+	// 鑾峰彇宸ヤ綔琛ㄥ悕绉�
+	sheetName := f.GetSheetName(sheetIndex)
+	// 璇诲彇宸ヤ綔琛ㄤ腑鐨勬墍鏈夎
+	rows, err := f.GetRows(sheetName)
+	if err != nil {
+		logx.Errorf("Failed to get rows from sheet:%v", err)
+		return
+	}
+
+	// 鑾峰彇鎸囧畾鍒楃殑鍚堝苟鍗曞厓鏍间俊鎭�
+	mergedCells, err := getColumnMergeCells(f, sheetName, imageColumn)
+	if err != nil {
+		logx.Errorf("Failed to get merged cells:%v", err)
+		return
+	}
+
+	mergeCellMap := make(map[string]excelize.MergeCell)
+	for _, cell := range mergedCells {
+		mergeCellMap[cell.GetStartAxis()] = cell
+	}
+
+	var imagePaths []string
+	// 閬嶅巻Excel琛岋紝璇诲彇鏁版嵁
+	for rowIndex, row := range rows[1:] { // 鍋囪绗竴琛屾槸鏍囬琛岋紝璺宠繃
+		if len(row) < 1 {
+			continue
+		}
+		productId := row[productIdColumn]
+		currentCell := fmt.Sprintf("%s%d", imageColumn, rowIndex+2)
+
+		// 妫�鏌ュ綋鍓嶅崟鍏冩牸鏄惁鍦ㄥ悎骞跺崟鍏冩牸涓�
+		if mergeCell, ok := mergeCellMap[currentCell]; ok {
+			imagePaths = make([]string, 0)
+			imageCell := mergeCell.GetStartAxis()
+
+			// 鑾峰彇鍥剧墖
+			pictures, err := f.GetPictures(sheetName, imageCell)
+			if err != nil {
+				logx.Errorf("Failed to get picture for cell %s: %v", imageCell, err)
+				continue
+			}
+
+			if len(pictures) == 0 {
+				logx.Errorf("No picture found for cell %s", imageCell)
+				continue
+			}
+
+			for k, picture := range pictures {
+				fileBytes := picture.File
+				fileName := fmt.Sprintf("image_%s_%d.png", imageCell, k+1)
+
+				// 淇濆瓨鍥剧墖鍒版湰鍦板苟鑾峰彇璺緞
+				imagePath, err := upload.UploadFileToSeaWeed(string(constvar.FileType_Picture), fileName, fileBytes)
+				if err != nil {
+					logx.Errorf("Failed to save image for product %s: %v\n", productId, err)
+					continue
+				}
+				imagePaths = append(imagePaths, imagePath)
+			}
+		}
+
+		if productId == "" {
+			continue
+		}
+
+		// imagePaths
+		productImageMap[productId] = imagePaths
+		logx.Infof("UploadProductImagesFromExcel Product ID: %s, Image Urls: %s\n", productId, imagePaths)
+	}
+	return productImageMap, nil
+}
+
+// getColumnMergeCells 鑾峰彇鎸囧畾鍒楃殑鍚堝苟鍗曞厓鏍�
+func getColumnMergeCells(f *excelize.File, sheetName string, targetColumn string) ([]excelize.MergeCell, error) {
+	// 鑾峰彇鎵�鏈夊悎骞跺崟鍏冩牸
+	mergeCells, err := f.GetMergeCells(sheetName)
+	if err != nil {
+		return nil, err
+	}
+
+	var columnMergeCells []excelize.MergeCell
+	for _, mergeCell := range mergeCells {
+		if strings.HasPrefix(mergeCell.GetStartAxis(), targetColumn) {
+			columnMergeCells = append(columnMergeCells, mergeCell)
+		}
+	}
+	return columnMergeCells, nil
+}
diff --git a/docs/docs.go b/docs/docs.go
index 1e95ad9..f46a305 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -691,122 +691,6 @@
                 }
             }
         },
-        "/api-wms/v1/dict/getSilkDictList/{type}": {
-            "get": {
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "鏁版嵁瀛楀吀"
-                ],
-                "summary": "鑾峰彇搴勫彛鍒楄〃",
-                "parameters": [
-                    {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
-                    {
-                        "type": "string",
-                        "description": "瀛楀吀绫诲瀷",
-                        "name": "type",
-                        "in": "path",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "鎴愬姛",
-                        "schema": {
-                            "allOf": [
-                                {
-                                    "$ref": "#/definitions/util.ResponseList"
-                                },
-                                {
-                                    "type": "object",
-                                    "properties": {
-                                        "data": {
-                                            "type": "array",
-                                            "items": {
-                                                "$ref": "#/definitions/models.SilkDict"
-                                            }
-                                        }
-                                    }
-                                }
-                            ]
-                        }
-                    }
-                }
-            }
-        },
-        "/api-wms/v1/dict/getUserList": {
-            "get": {
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "鏁版嵁瀛楀吀"
-                ],
-                "summary": "鑾峰彇鐢ㄦ埛鍒楄〃",
-                "parameters": [
-                    {
-                        "type": "string",
-                        "name": "id",
-                        "in": "query"
-                    },
-                    {
-                        "type": "string",
-                        "name": "nickName",
-                        "in": "query"
-                    },
-                    {
-                        "type": "string",
-                        "name": "parentId",
-                        "in": "query"
-                    },
-                    {
-                        "type": "string",
-                        "name": "pos",
-                        "in": "query"
-                    },
-                    {
-                        "type": "string",
-                        "name": "userName",
-                        "in": "query"
-                    },
-                    {
-                        "type": "integer",
-                        "name": "userType",
-                        "in": "query"
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "鎴愬姛",
-                        "schema": {
-                            "allOf": [
-                                {
-                                    "$ref": "#/definitions/util.ResponseList"
-                                },
-                                {
-                                    "type": "object",
-                                    "properties": {
-                                        "data": {
-                                            "type": "array",
-                                            "items": {
-                                                "$ref": "#/definitions/user.GetUserRequest"
-                                            }
-                                        }
-                                    }
-                                }
-                            ]
-                        }
-                    }
-                }
-            }
-        },
         "/api-wms/v1/dict/save": {
             "post": {
                 "produces": [
@@ -1797,13 +1681,6 @@
                 "summary": "娣诲姞搴撳瓨鐩樼偣淇℃伅",
                 "parameters": [
                     {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
-                    {
                         "description": "鍏ュ簱/鍑哄簱淇℃伅",
                         "name": "object",
                         "in": "body",
@@ -1833,13 +1710,6 @@
                 ],
                 "summary": "搴旂敤銆侀獙璇�",
                 "parameters": [
-                    {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
                     {
                         "description": "鍏ュ弬",
                         "name": "object",
@@ -2025,13 +1895,6 @@
                 "summary": "淇敼搴撳瓨鐩樼偣淇℃伅",
                 "parameters": [
                     {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
-                    {
                         "description": "鍏ュ簱/鍑哄簱淇℃伅",
                         "name": "object",
                         "in": "body",
@@ -2089,13 +1952,6 @@
                 ],
                 "summary": "鏇存敼璁板綍鐘舵��",
                 "parameters": [
-                    {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
                     {
                         "type": "integer",
                         "description": "id",
@@ -2263,13 +2119,6 @@
                 "summary": "鍏ュ簱/鍑哄簱鍒楄〃",
                 "parameters": [
                     {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
-                    {
                         "description": "鏌ヨ鍙傛暟",
                         "name": "object",
                         "in": "body",
@@ -2375,13 +2224,6 @@
                 "summary": "娣诲姞鍏ュ簱/鍑哄簱",
                 "parameters": [
                     {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
-                    {
                         "description": "鍏ュ簱/鍑哄簱淇℃伅",
                         "name": "object",
                         "in": "body",
@@ -2411,13 +2253,6 @@
                 ],
                 "summary": "鍒犻櫎鍏ュ簱/鍑哄簱淇℃伅",
                 "parameters": [
-                    {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
                     {
                         "type": "integer",
                         "description": "id",
@@ -2778,6 +2613,43 @@
                         "schema": {
                             "$ref": "#/definitions/request.UpdateDepartment"
                         }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api-wms/v1/other/saveProductImagesFromExcel": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鍏朵粬"
+                ],
+                "summary": "浠巈xcel涓幏鍙栦骇鍝佸浘鐗囧苟淇濆瓨",
+                "parameters": [
+                    {
+                        "description": "灞炴�т俊鎭�",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/controllers.saveProductImagesFromExcelRequest"
+                        }
+                    },
+                    {
+                        "type": "string",
+                        "description": "token",
+                        "name": "Authorization",
+                        "in": "header",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -4561,6 +4433,27 @@
                 "ReservationNever"
             ]
         },
+        "controllers.saveProductImagesFromExcelRequest": {
+            "type": "object",
+            "properties": {
+                "excelFilePath": {
+                    "description": "excel璺緞 鐢╠ocker cp浼犲埌瀹瑰櫒閲�",
+                    "type": "string"
+                },
+                "imageColumn": {
+                    "description": "鍥剧墖鎵�鍦ㄥ垪鍚�",
+                    "type": "string"
+                },
+                "productIdColumnIndex": {
+                    "description": "浜у搧ID鏄鍑犲垪(浠�0寮�濮�)",
+                    "type": "integer"
+                },
+                "sheetIndex": {
+                    "description": "绗嚑涓猻heet",
+                    "type": "integer"
+                }
+            }
+        },
         "gorm.DeletedAt": {
             "type": "object",
             "properties": {
@@ -4823,7 +4716,6 @@
                     "type": "string"
                 },
                 "warehouseId": {
-                    "description": "浠撳簱id",
                     "type": "integer"
                 }
             }
@@ -5352,15 +5244,12 @@
             "type": "object",
             "properties": {
                 "accountant": {
-                    "description": "浼氳鍚嶇О",
                     "type": "string"
                 },
                 "accountantId": {
-                    "description": "浼氳id",
                     "type": "string"
                 },
                 "auditDate": {
-                    "description": "瀹℃壒鏃堕棿",
                     "type": "string"
                 },
                 "baseOperationType": {
@@ -5372,50 +5261,39 @@
                     ]
                 },
                 "checkedBy": {
-                    "description": "楠岃瘉鑰匲serId",
                     "type": "string"
                 },
                 "comment": {
-                    "description": "澶囨敞",
                     "type": "string"
                 },
                 "companyID": {
-                    "description": "鍏徃ID-瀹㈡埛",
                     "type": "string"
                 },
                 "companyName": {
-                    "description": "鍏徃鍚嶇О-瀹㈡埛",
                     "type": "string"
                 },
                 "contacterID": {
-                    "description": "鑱旂郴浜篒D",
                     "type": "integer"
                 },
                 "contacterName": {
-                    "description": "鑱旂郴浜哄鍚�",
                     "type": "string"
                 },
                 "createBy": {
-                    "description": "鍒涘缓鑰匲serId",
                     "type": "string"
                 },
                 "createTime": {
                     "type": "string"
                 },
                 "custodian": {
-                    "description": "淇濈鍛樺悕绉�",
                     "type": "string"
                 },
                 "custodianId": {
-                    "description": "淇濈鍛榠d",
                     "type": "string"
                 },
                 "dealerType": {
-                    "description": "璋冩嫧鍑哄叆搴撶被鍨�",
                     "type": "string"
                 },
                 "details": {
-                    "description": "鎿嶄綔鏄庣粏",
                     "type": "array",
                     "items": {
                         "$ref": "#/definitions/models.OperationDetails"
@@ -5441,15 +5319,9 @@
                     "type": "integer"
                 },
                 "logisticCompany": {
-                    "description": "鐗╂祦鍏徃淇℃伅",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.LogisticCompany"
-                        }
-                    ]
+                    "$ref": "#/definitions/models.LogisticCompany"
                 },
                 "logisticCompanyId": {
-                    "description": "鐗╂祦鍏徃id",
                     "type": "string"
                 },
                 "logisticWeight": {
@@ -5457,11 +5329,9 @@
                     "type": "number"
                 },
                 "manager": {
-                    "description": "涓荤鍚嶇О",
                     "type": "string"
                 },
                 "managerId": {
-                    "description": "涓荤id",
                     "type": "string"
                 },
                 "number": {
@@ -5469,7 +5339,6 @@
                     "type": "string"
                 },
                 "operationDate": {
-                    "description": "瀹夋帓鏃ユ湡",
                     "type": "string"
                 },
                 "operationSource": {
@@ -5489,31 +5358,21 @@
                     "type": "string"
                 },
                 "receiverAddr": {
-                    "description": "鏀惰揣鍦板潃",
                     "type": "string"
                 },
                 "receiverName": {
-                    "description": "鏀惰揣浜哄鍚�",
                     "type": "string"
                 },
                 "receiverPhone": {
-                    "description": "鑱旂郴鐢佃瘽",
                     "type": "string"
                 },
                 "remark": {
-                    "description": "澶囨敞",
                     "type": "string"
                 },
                 "salesDetailsNumber": {
-                    "description": "閿�鍞槑缁嗙紪鐮�",
-                    "type": "string"
-                },
-                "silkMarket": {
-                    "description": "鍢夎仈浠撳偍娣诲姞 SilkMarket",
                     "type": "string"
                 },
                 "source": {
-                    "description": "鏉ユ簮绯荤粺",
                     "type": "string"
                 },
                 "sourceNumber": {
@@ -5544,15 +5403,9 @@
                     "type": "string"
                 },
                 "warehouse": {
-                    "description": "浠撳簱淇℃伅",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.Warehouse"
-                        }
-                    ]
+                    "$ref": "#/definitions/models.Warehouse"
                 },
                 "warehouseId": {
-                    "description": "浠撳簱id",
                     "type": "integer"
                 },
                 "waybillNumber": {
@@ -5573,11 +5426,9 @@
                     "type": "number"
                 },
                 "auxiliaryAmount": {
-                    "description": "杈呭姪鏁伴噺",
                     "type": "number"
                 },
                 "auxiliaryUnit": {
-                    "description": "杈呭姪鍗曚綅",
                     "type": "string"
                 },
                 "baseOperationType": {
@@ -5619,7 +5470,7 @@
                     "type": "boolean"
                 },
                 "operationId": {
-                    "description": "鎿嶄綔璁板綍id",
+                    "description": "鎿嶄綔id",
                     "type": "integer"
                 },
                 "product": {
@@ -5635,20 +5486,11 @@
                     "type": "string"
                 },
                 "remark": {
-                    "description": "澶囨敞",
                     "type": "string"
                 },
                 "salePrice": {
                     "description": "閿�鍞崟浠�",
                     "type": "number"
-                },
-                "silkMarket": {
-                    "description": "鍢夎仈浠撳偍娣诲姞 SilkMarket銆丼ilkMarketClose",
-                    "type": "string"
-                },
-                "silkMarketClose": {
-                    "description": "搴勫彛鍏抽棴",
-                    "type": "string"
                 },
                 "stockAmount": {
                     "description": "搴撳瓨鏁伴噺锛岀洏鐐规椂鐢�",
@@ -5667,11 +5509,9 @@
                     "type": "integer"
                 },
                 "totalGrossWeight": {
-                    "description": "鎬绘瘺閲�",
                     "type": "number"
                 },
                 "totalNetWeight": {
-                    "description": "鎬诲噣閲�",
                     "type": "number"
                 },
                 "updateTime": {
@@ -5792,64 +5632,6 @@
                     "type": "string"
                 }
             }
-        },
-        "models.SilkDict": {
-            "type": "object",
-            "properties": {
-                "createdAt": {
-                    "type": "string"
-                },
-                "deletedAt": {
-                    "$ref": "#/definitions/gorm.DeletedAt"
-                },
-                "dictType": {
-                    "description": "瀛楀吀绫诲瀷",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.SilkDictType"
-                        }
-                    ]
-                },
-                "id": {
-                    "type": "integer"
-                },
-                "name": {
-                    "description": "鍚嶇О",
-                    "type": "string"
-                },
-                "number": {
-                    "description": "缂栧彿",
-                    "type": "string"
-                },
-                "remark": {
-                    "description": "澶囨敞",
-                    "type": "string"
-                },
-                "updatedAt": {
-                    "type": "string"
-                }
-            }
-        },
-        "models.SilkDictType": {
-            "type": "integer",
-            "enum": [
-                1,
-                2,
-                3,
-                4
-            ],
-            "x-enum-comments": {
-                "DictTypeColor": "棰滆壊",
-                "DictTypeMarket": "搴勫彛",
-                "DictTypeSpec": "瑙勬牸",
-                "DictTypeWorkshop": "杞﹂棿"
-            },
-            "x-enum-varnames": [
-                "DictTypeMarket",
-                "DictTypeWorkshop",
-                "DictTypeColor",
-                "DictTypeSpec"
-            ]
         },
         "models.SystemConfig": {
             "type": "object",
@@ -6239,15 +6021,13 @@
             "type": "object",
             "properties": {
                 "accountant": {
-                    "description": "浼氳鍚嶇О",
                     "type": "string"
                 },
                 "accountantId": {
-                    "description": "浼氳id",
                     "type": "string"
                 },
                 "baseOperationType": {
-                    "description": "鍩虹浣滀笟绫诲瀷 1 鍏ュ簱 2 鍑哄簱 3 鍐呴儴璋冩嫧 4 鎶ュ簾 5 搴撳瓨鐩樼偣",
+                    "description": "鍩虹浣滀笟绫诲瀷 5搴撳瓨鐩樼偣",
                     "allOf": [
                         {
                             "$ref": "#/definitions/constvar.BaseOperationType"
@@ -6275,19 +6055,15 @@
                     "type": "string"
                 },
                 "custodian": {
-                    "description": "淇濈鍛樺悕绉�",
                     "type": "string"
                 },
                 "custodianId": {
-                    "description": "淇濈鍛榠d",
                     "type": "string"
                 },
                 "dealerType": {
-                    "description": "璋冩嫧鍑哄叆搴撶被鍨�",
                     "type": "string"
                 },
                 "details": {
-                    "description": "璇︽儏",
                     "type": "array",
                     "items": {
                         "$ref": "#/definitions/request.OperationDetails"
@@ -6301,7 +6077,6 @@
                     "type": "integer"
                 },
                 "logisticCompanyId": {
-                    "description": "鐗╂祦鍏徃id",
                     "type": "string"
                 },
                 "logisticWeight": {
@@ -6309,11 +6084,9 @@
                     "type": "number"
                 },
                 "manager": {
-                    "description": "涓荤鍚嶇О",
                     "type": "string"
                 },
                 "managerId": {
-                    "description": "涓荤id",
                     "type": "string"
                 },
                 "number": {
@@ -6321,7 +6094,7 @@
                     "type": "string"
                 },
                 "operationDate": {
-                    "description": "FromLocationId    int                      ` + "`" + `json:\"fromLocationId\" ` + "`" + `   //婧愪綅缃甶d\nToLocationId      int                      ` + "`" + `json:\"toLocationId\" ` + "`" + `   //鐩爣浣嶇疆id",
+                    "description": "FromLocationId    int                      ` + "`" + `json:\"fromLocationId\"   gorm:\"type:int;not null;comment:婧愪綅缃甶d\"` + "`" + `   //婧愪綅缃甶d\nToLocationId      int                      ` + "`" + `json:\"toLocationId\"    gorm:\"type:int;not null;comment:鐩爣浣嶇疆id\"` + "`" + `   //鐩爣浣嶇疆id",
                     "type": "string"
                 },
                 "operationTypeId": {
@@ -6333,19 +6106,12 @@
                     "type": "string"
                 },
                 "receiverAddr": {
-                    "description": "鏀惰揣鍦板潃",
                     "type": "string"
                 },
                 "receiverName": {
-                    "description": "鏀惰揣浜哄鍚�",
                     "type": "string"
                 },
                 "receiverPhone": {
-                    "description": "鑱旂郴鐢佃瘽",
-                    "type": "string"
-                },
-                "silkMarket": {
-                    "description": "搴勫彛",
                     "type": "string"
                 },
                 "sourceNumber": {
@@ -6668,10 +6434,6 @@
                 },
                 "warehouseCode": {
                     "type": "string"
-                },
-                "warehouseId": {
-                    "description": "浠撳簱ID",
-                    "type": "string"
                 }
             }
         },
@@ -6892,7 +6654,6 @@
             "type": "object",
             "properties": {
                 "number": {
-                    "description": "鍗曞彿",
                     "type": "string"
                 },
                 "page": {
@@ -6904,7 +6665,6 @@
                     "type": "integer"
                 },
                 "sourceNumber": {
-                    "description": "婧愬崟鍙�",
                     "type": "string"
                 }
             }
@@ -6913,7 +6673,6 @@
             "type": "object",
             "properties": {
                 "condition": {
-                    "description": "妯$硦鏌ヨ鏉′欢",
                     "type": "string"
                 },
                 "keyword": {
@@ -6946,7 +6705,7 @@
                     "type": "integer"
                 },
                 "amount": {
-                    "description": "ProductName string          ` + "`" + `json:\"productName\" ` + "`" + ` //浜у搧鍚嶇О",
+                    "description": "ProductName string          ` + "`" + `json:\"productName\" gorm:\"type:varchar(255);not null;comment:浜у搧鍚嶇О\"` + "`" + ` //浜у搧鍚嶇О",
                     "type": "number"
                 },
                 "auxiliaryAmount": {
@@ -6962,7 +6721,7 @@
                     "type": "number"
                 },
                 "fromLocationId": {
-                    "description": "Unit        string          ` + "`" + `json:\"unit\"` + "`" + `                    //鍗曚綅\nProduct models.Material ` + "`" + `json:\"product\" ` + "`" + ` // 浜у搧",
+                    "description": "Unit        string          ` + "`" + `json:\"unit\" gorm:\"type:varchar(31);comment:鍗曚綅\"` + "`" + `                    //鍗曚綅\nProduct models.Material ` + "`" + `json:\"product\" gorm:\"foreignKey:ProductId;references:ID\"` + "`" + `",
                     "type": "integer"
                 },
                 "productId": {
@@ -6970,20 +6729,11 @@
                     "type": "string"
                 },
                 "remark": {
-                    "description": "澶囨敞",
                     "type": "string"
                 },
                 "salePrice": {
                     "description": "閿�鍞崟浠�",
                     "type": "number"
-                },
-                "silkMarket": {
-                    "description": "搴勫彛",
-                    "type": "string"
-                },
-                "silkMarketClose": {
-                    "description": "搴勫彛鍏抽棴",
-                    "type": "string"
                 },
                 "stockAmount": {
                     "description": "搴撳瓨鏁伴噺锛岀洏鐐规椂鐢�",
@@ -7007,7 +6757,7 @@
             "type": "object",
             "properties": {
                 "baseOperationType": {
-                    "description": "鍩虹浣滀笟绫诲瀷 1 鍏ュ簱 2 鍑哄簱 3 鍐呴儴璋冩嫧 4 鎶ュ簾 5 搴撳瓨鐩樼偣",
+                    "description": "1 鍏ュ簱 2 鍑哄簱 3 鍐呴儴璋冩嫧 4 鎶ュ簾 5 搴撳瓨鐩樼偣",
                     "allOf": [
                         {
                             "$ref": "#/definitions/constvar.BaseOperationType"
@@ -7015,11 +6765,9 @@
                     ]
                 },
                 "number": {
-                    "description": "鍗曞彿",
                     "type": "string"
                 },
                 "operationTypeId": {
-                    "description": "浣滀笟绫诲瀷id",
                     "type": "integer"
                 },
                 "page": {
@@ -7031,12 +6779,7 @@
                     "type": "integer"
                 },
                 "status": {
-                    "description": "鐘舵��",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/constvar.OperationStatus"
-                        }
-                    ]
+                    "$ref": "#/definitions/constvar.OperationStatus"
                 }
             }
         },
@@ -7352,11 +7095,9 @@
             "type": "object",
             "properties": {
                 "accountant": {
-                    "description": "浼氳鍚嶇О",
                     "type": "string"
                 },
                 "accountantId": {
-                    "description": "浼氳id",
                     "type": "string"
                 },
                 "baseOperationType": {
@@ -7388,15 +7129,12 @@
                     "type": "string"
                 },
                 "custodian": {
-                    "description": "淇濈鍛樺悕绉�",
                     "type": "string"
                 },
                 "custodianId": {
-                    "description": "淇濈鍛榠d",
                     "type": "string"
                 },
                 "details": {
-                    "description": "璇︽儏",
                     "type": "array",
                     "items": {
                         "$ref": "#/definitions/request.OperationDetails"
@@ -7406,7 +7144,6 @@
                     "type": "integer"
                 },
                 "inventoryDealerType": {
-                    "description": "璋冩嫧鍑哄叆搴撳垎绫�(瀵瑰簲dict瀛楀吀琛ㄧ殑ID)",
                     "type": "integer"
                 },
                 "locationId": {
@@ -7421,11 +7158,9 @@
                     "type": "number"
                 },
                 "manager": {
-                    "description": "涓荤鍚嶇О",
                     "type": "string"
                 },
                 "managerId": {
-                    "description": "涓荤id",
                     "type": "string"
                 },
                 "number": {
@@ -7433,7 +7168,7 @@
                     "type": "string"
                 },
                 "operationDate": {
-                    "description": "FromLocationId    int                        ` + "`" + `json:\"fromLocationId\"  ` + "`" + `   //婧愪綅缃甶d\nToLocationId      int                        ` + "`" + `json:\"toLocationId\" ` + "`" + `   //鐩爣浣嶇疆id",
+                    "description": "FromLocationId    int                        ` + "`" + `json:\"fromLocationId\"   gorm:\"type:int;not null;comment:婧愪綅缃甶d\"` + "`" + `   //婧愪綅缃甶d\nToLocationId      int                        ` + "`" + `json:\"toLocationId\"    gorm:\"type:int;not null;comment:鐩爣浣嶇疆id\"` + "`" + `   //鐩爣浣嶇疆id",
                     "type": "string"
                 },
                 "operationTypeId": {
@@ -7445,19 +7180,12 @@
                     "type": "string"
                 },
                 "receiverAddr": {
-                    "description": "鏀惰揣鍦板潃",
                     "type": "string"
                 },
                 "receiverName": {
-                    "description": "鏀惰揣浜哄鍚�",
                     "type": "string"
                 },
                 "receiverPhone": {
-                    "description": "鑱旂郴鐢佃瘽",
-                    "type": "string"
-                },
-                "silkMarket": {
-                    "description": "搴勫彛",
                     "type": "string"
                 },
                 "sourceNumber": {
@@ -7621,16 +7349,8 @@
                     "description": "浜у搧id",
                     "type": "string"
                 },
-                "productCategory": {
-                    "description": "浜у搧绫诲埆",
-                    "type": "string"
-                },
                 "productName": {
                     "description": "浜у搧鍚嶇О",
-                    "type": "string"
-                },
-                "productSpecs": {
-                    "description": "浜у搧瑙勬牸",
                     "type": "string"
                 },
                 "productType": {
@@ -7707,29 +7427,6 @@
                     "items": {
                         "$ref": "#/definitions/models.Material"
                     }
-                }
-            }
-        },
-        "user.GetUserRequest": {
-            "type": "object",
-            "properties": {
-                "id": {
-                    "type": "string"
-                },
-                "nickName": {
-                    "type": "string"
-                },
-                "parentId": {
-                    "type": "string"
-                },
-                "pos": {
-                    "type": "string"
-                },
-                "userName": {
-                    "type": "string"
-                },
-                "userType": {
-                    "type": "integer"
                 }
             }
         },
diff --git a/docs/swagger.json b/docs/swagger.json
index 6b791a6..e32dcf8 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -680,122 +680,6 @@
                 }
             }
         },
-        "/api-wms/v1/dict/getSilkDictList/{type}": {
-            "get": {
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "鏁版嵁瀛楀吀"
-                ],
-                "summary": "鑾峰彇搴勫彛鍒楄〃",
-                "parameters": [
-                    {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
-                    {
-                        "type": "string",
-                        "description": "瀛楀吀绫诲瀷",
-                        "name": "type",
-                        "in": "path",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "鎴愬姛",
-                        "schema": {
-                            "allOf": [
-                                {
-                                    "$ref": "#/definitions/util.ResponseList"
-                                },
-                                {
-                                    "type": "object",
-                                    "properties": {
-                                        "data": {
-                                            "type": "array",
-                                            "items": {
-                                                "$ref": "#/definitions/models.SilkDict"
-                                            }
-                                        }
-                                    }
-                                }
-                            ]
-                        }
-                    }
-                }
-            }
-        },
-        "/api-wms/v1/dict/getUserList": {
-            "get": {
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "鏁版嵁瀛楀吀"
-                ],
-                "summary": "鑾峰彇鐢ㄦ埛鍒楄〃",
-                "parameters": [
-                    {
-                        "type": "string",
-                        "name": "id",
-                        "in": "query"
-                    },
-                    {
-                        "type": "string",
-                        "name": "nickName",
-                        "in": "query"
-                    },
-                    {
-                        "type": "string",
-                        "name": "parentId",
-                        "in": "query"
-                    },
-                    {
-                        "type": "string",
-                        "name": "pos",
-                        "in": "query"
-                    },
-                    {
-                        "type": "string",
-                        "name": "userName",
-                        "in": "query"
-                    },
-                    {
-                        "type": "integer",
-                        "name": "userType",
-                        "in": "query"
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "鎴愬姛",
-                        "schema": {
-                            "allOf": [
-                                {
-                                    "$ref": "#/definitions/util.ResponseList"
-                                },
-                                {
-                                    "type": "object",
-                                    "properties": {
-                                        "data": {
-                                            "type": "array",
-                                            "items": {
-                                                "$ref": "#/definitions/user.GetUserRequest"
-                                            }
-                                        }
-                                    }
-                                }
-                            ]
-                        }
-                    }
-                }
-            }
-        },
         "/api-wms/v1/dict/save": {
             "post": {
                 "produces": [
@@ -1786,13 +1670,6 @@
                 "summary": "娣诲姞搴撳瓨鐩樼偣淇℃伅",
                 "parameters": [
                     {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
-                    {
                         "description": "鍏ュ簱/鍑哄簱淇℃伅",
                         "name": "object",
                         "in": "body",
@@ -1822,13 +1699,6 @@
                 ],
                 "summary": "搴旂敤銆侀獙璇�",
                 "parameters": [
-                    {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
                     {
                         "description": "鍏ュ弬",
                         "name": "object",
@@ -2014,13 +1884,6 @@
                 "summary": "淇敼搴撳瓨鐩樼偣淇℃伅",
                 "parameters": [
                     {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
-                    {
                         "description": "鍏ュ簱/鍑哄簱淇℃伅",
                         "name": "object",
                         "in": "body",
@@ -2078,13 +1941,6 @@
                 ],
                 "summary": "鏇存敼璁板綍鐘舵��",
                 "parameters": [
-                    {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
                     {
                         "type": "integer",
                         "description": "id",
@@ -2252,13 +2108,6 @@
                 "summary": "鍏ュ簱/鍑哄簱鍒楄〃",
                 "parameters": [
                     {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
-                    {
                         "description": "鏌ヨ鍙傛暟",
                         "name": "object",
                         "in": "body",
@@ -2364,13 +2213,6 @@
                 "summary": "娣诲姞鍏ュ簱/鍑哄簱",
                 "parameters": [
                     {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
-                    {
                         "description": "鍏ュ簱/鍑哄簱淇℃伅",
                         "name": "object",
                         "in": "body",
@@ -2400,13 +2242,6 @@
                 ],
                 "summary": "鍒犻櫎鍏ュ簱/鍑哄簱淇℃伅",
                 "parameters": [
-                    {
-                        "type": "string",
-                        "description": "token",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    },
                     {
                         "type": "integer",
                         "description": "id",
@@ -2767,6 +2602,43 @@
                         "schema": {
                             "$ref": "#/definitions/request.UpdateDepartment"
                         }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api-wms/v1/other/saveProductImagesFromExcel": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鍏朵粬"
+                ],
+                "summary": "浠巈xcel涓幏鍙栦骇鍝佸浘鐗囧苟淇濆瓨",
+                "parameters": [
+                    {
+                        "description": "灞炴�т俊鎭�",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/controllers.saveProductImagesFromExcelRequest"
+                        }
+                    },
+                    {
+                        "type": "string",
+                        "description": "token",
+                        "name": "Authorization",
+                        "in": "header",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -4550,6 +4422,27 @@
                 "ReservationNever"
             ]
         },
+        "controllers.saveProductImagesFromExcelRequest": {
+            "type": "object",
+            "properties": {
+                "excelFilePath": {
+                    "description": "excel璺緞 鐢╠ocker cp浼犲埌瀹瑰櫒閲�",
+                    "type": "string"
+                },
+                "imageColumn": {
+                    "description": "鍥剧墖鎵�鍦ㄥ垪鍚�",
+                    "type": "string"
+                },
+                "productIdColumnIndex": {
+                    "description": "浜у搧ID鏄鍑犲垪(浠�0寮�濮�)",
+                    "type": "integer"
+                },
+                "sheetIndex": {
+                    "description": "绗嚑涓猻heet",
+                    "type": "integer"
+                }
+            }
+        },
         "gorm.DeletedAt": {
             "type": "object",
             "properties": {
@@ -4812,7 +4705,6 @@
                     "type": "string"
                 },
                 "warehouseId": {
-                    "description": "浠撳簱id",
                     "type": "integer"
                 }
             }
@@ -5341,15 +5233,12 @@
             "type": "object",
             "properties": {
                 "accountant": {
-                    "description": "浼氳鍚嶇О",
                     "type": "string"
                 },
                 "accountantId": {
-                    "description": "浼氳id",
                     "type": "string"
                 },
                 "auditDate": {
-                    "description": "瀹℃壒鏃堕棿",
                     "type": "string"
                 },
                 "baseOperationType": {
@@ -5361,50 +5250,39 @@
                     ]
                 },
                 "checkedBy": {
-                    "description": "楠岃瘉鑰匲serId",
                     "type": "string"
                 },
                 "comment": {
-                    "description": "澶囨敞",
                     "type": "string"
                 },
                 "companyID": {
-                    "description": "鍏徃ID-瀹㈡埛",
                     "type": "string"
                 },
                 "companyName": {
-                    "description": "鍏徃鍚嶇О-瀹㈡埛",
                     "type": "string"
                 },
                 "contacterID": {
-                    "description": "鑱旂郴浜篒D",
                     "type": "integer"
                 },
                 "contacterName": {
-                    "description": "鑱旂郴浜哄鍚�",
                     "type": "string"
                 },
                 "createBy": {
-                    "description": "鍒涘缓鑰匲serId",
                     "type": "string"
                 },
                 "createTime": {
                     "type": "string"
                 },
                 "custodian": {
-                    "description": "淇濈鍛樺悕绉�",
                     "type": "string"
                 },
                 "custodianId": {
-                    "description": "淇濈鍛榠d",
                     "type": "string"
                 },
                 "dealerType": {
-                    "description": "璋冩嫧鍑哄叆搴撶被鍨�",
                     "type": "string"
                 },
                 "details": {
-                    "description": "鎿嶄綔鏄庣粏",
                     "type": "array",
                     "items": {
                         "$ref": "#/definitions/models.OperationDetails"
@@ -5430,15 +5308,9 @@
                     "type": "integer"
                 },
                 "logisticCompany": {
-                    "description": "鐗╂祦鍏徃淇℃伅",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.LogisticCompany"
-                        }
-                    ]
+                    "$ref": "#/definitions/models.LogisticCompany"
                 },
                 "logisticCompanyId": {
-                    "description": "鐗╂祦鍏徃id",
                     "type": "string"
                 },
                 "logisticWeight": {
@@ -5446,11 +5318,9 @@
                     "type": "number"
                 },
                 "manager": {
-                    "description": "涓荤鍚嶇О",
                     "type": "string"
                 },
                 "managerId": {
-                    "description": "涓荤id",
                     "type": "string"
                 },
                 "number": {
@@ -5458,7 +5328,6 @@
                     "type": "string"
                 },
                 "operationDate": {
-                    "description": "瀹夋帓鏃ユ湡",
                     "type": "string"
                 },
                 "operationSource": {
@@ -5478,31 +5347,21 @@
                     "type": "string"
                 },
                 "receiverAddr": {
-                    "description": "鏀惰揣鍦板潃",
                     "type": "string"
                 },
                 "receiverName": {
-                    "description": "鏀惰揣浜哄鍚�",
                     "type": "string"
                 },
                 "receiverPhone": {
-                    "description": "鑱旂郴鐢佃瘽",
                     "type": "string"
                 },
                 "remark": {
-                    "description": "澶囨敞",
                     "type": "string"
                 },
                 "salesDetailsNumber": {
-                    "description": "閿�鍞槑缁嗙紪鐮�",
-                    "type": "string"
-                },
-                "silkMarket": {
-                    "description": "鍢夎仈浠撳偍娣诲姞 SilkMarket",
                     "type": "string"
                 },
                 "source": {
-                    "description": "鏉ユ簮绯荤粺",
                     "type": "string"
                 },
                 "sourceNumber": {
@@ -5533,15 +5392,9 @@
                     "type": "string"
                 },
                 "warehouse": {
-                    "description": "浠撳簱淇℃伅",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.Warehouse"
-                        }
-                    ]
+                    "$ref": "#/definitions/models.Warehouse"
                 },
                 "warehouseId": {
-                    "description": "浠撳簱id",
                     "type": "integer"
                 },
                 "waybillNumber": {
@@ -5562,11 +5415,9 @@
                     "type": "number"
                 },
                 "auxiliaryAmount": {
-                    "description": "杈呭姪鏁伴噺",
                     "type": "number"
                 },
                 "auxiliaryUnit": {
-                    "description": "杈呭姪鍗曚綅",
                     "type": "string"
                 },
                 "baseOperationType": {
@@ -5608,7 +5459,7 @@
                     "type": "boolean"
                 },
                 "operationId": {
-                    "description": "鎿嶄綔璁板綍id",
+                    "description": "鎿嶄綔id",
                     "type": "integer"
                 },
                 "product": {
@@ -5624,20 +5475,11 @@
                     "type": "string"
                 },
                 "remark": {
-                    "description": "澶囨敞",
                     "type": "string"
                 },
                 "salePrice": {
                     "description": "閿�鍞崟浠�",
                     "type": "number"
-                },
-                "silkMarket": {
-                    "description": "鍢夎仈浠撳偍娣诲姞 SilkMarket銆丼ilkMarketClose",
-                    "type": "string"
-                },
-                "silkMarketClose": {
-                    "description": "搴勫彛鍏抽棴",
-                    "type": "string"
                 },
                 "stockAmount": {
                     "description": "搴撳瓨鏁伴噺锛岀洏鐐规椂鐢�",
@@ -5656,11 +5498,9 @@
                     "type": "integer"
                 },
                 "totalGrossWeight": {
-                    "description": "鎬绘瘺閲�",
                     "type": "number"
                 },
                 "totalNetWeight": {
-                    "description": "鎬诲噣閲�",
                     "type": "number"
                 },
                 "updateTime": {
@@ -5781,64 +5621,6 @@
                     "type": "string"
                 }
             }
-        },
-        "models.SilkDict": {
-            "type": "object",
-            "properties": {
-                "createdAt": {
-                    "type": "string"
-                },
-                "deletedAt": {
-                    "$ref": "#/definitions/gorm.DeletedAt"
-                },
-                "dictType": {
-                    "description": "瀛楀吀绫诲瀷",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.SilkDictType"
-                        }
-                    ]
-                },
-                "id": {
-                    "type": "integer"
-                },
-                "name": {
-                    "description": "鍚嶇О",
-                    "type": "string"
-                },
-                "number": {
-                    "description": "缂栧彿",
-                    "type": "string"
-                },
-                "remark": {
-                    "description": "澶囨敞",
-                    "type": "string"
-                },
-                "updatedAt": {
-                    "type": "string"
-                }
-            }
-        },
-        "models.SilkDictType": {
-            "type": "integer",
-            "enum": [
-                1,
-                2,
-                3,
-                4
-            ],
-            "x-enum-comments": {
-                "DictTypeColor": "棰滆壊",
-                "DictTypeMarket": "搴勫彛",
-                "DictTypeSpec": "瑙勬牸",
-                "DictTypeWorkshop": "杞﹂棿"
-            },
-            "x-enum-varnames": [
-                "DictTypeMarket",
-                "DictTypeWorkshop",
-                "DictTypeColor",
-                "DictTypeSpec"
-            ]
         },
         "models.SystemConfig": {
             "type": "object",
@@ -6228,15 +6010,13 @@
             "type": "object",
             "properties": {
                 "accountant": {
-                    "description": "浼氳鍚嶇О",
                     "type": "string"
                 },
                 "accountantId": {
-                    "description": "浼氳id",
                     "type": "string"
                 },
                 "baseOperationType": {
-                    "description": "鍩虹浣滀笟绫诲瀷 1 鍏ュ簱 2 鍑哄簱 3 鍐呴儴璋冩嫧 4 鎶ュ簾 5 搴撳瓨鐩樼偣",
+                    "description": "鍩虹浣滀笟绫诲瀷 5搴撳瓨鐩樼偣",
                     "allOf": [
                         {
                             "$ref": "#/definitions/constvar.BaseOperationType"
@@ -6264,19 +6044,15 @@
                     "type": "string"
                 },
                 "custodian": {
-                    "description": "淇濈鍛樺悕绉�",
                     "type": "string"
                 },
                 "custodianId": {
-                    "description": "淇濈鍛榠d",
                     "type": "string"
                 },
                 "dealerType": {
-                    "description": "璋冩嫧鍑哄叆搴撶被鍨�",
                     "type": "string"
                 },
                 "details": {
-                    "description": "璇︽儏",
                     "type": "array",
                     "items": {
                         "$ref": "#/definitions/request.OperationDetails"
@@ -6290,7 +6066,6 @@
                     "type": "integer"
                 },
                 "logisticCompanyId": {
-                    "description": "鐗╂祦鍏徃id",
                     "type": "string"
                 },
                 "logisticWeight": {
@@ -6298,11 +6073,9 @@
                     "type": "number"
                 },
                 "manager": {
-                    "description": "涓荤鍚嶇О",
                     "type": "string"
                 },
                 "managerId": {
-                    "description": "涓荤id",
                     "type": "string"
                 },
                 "number": {
@@ -6310,7 +6083,7 @@
                     "type": "string"
                 },
                 "operationDate": {
-                    "description": "FromLocationId    int                      `json:\"fromLocationId\" `   //婧愪綅缃甶d\nToLocationId      int                      `json:\"toLocationId\" `   //鐩爣浣嶇疆id",
+                    "description": "FromLocationId    int                      `json:\"fromLocationId\"   gorm:\"type:int;not null;comment:婧愪綅缃甶d\"`   //婧愪綅缃甶d\nToLocationId      int                      `json:\"toLocationId\"    gorm:\"type:int;not null;comment:鐩爣浣嶇疆id\"`   //鐩爣浣嶇疆id",
                     "type": "string"
                 },
                 "operationTypeId": {
@@ -6322,19 +6095,12 @@
                     "type": "string"
                 },
                 "receiverAddr": {
-                    "description": "鏀惰揣鍦板潃",
                     "type": "string"
                 },
                 "receiverName": {
-                    "description": "鏀惰揣浜哄鍚�",
                     "type": "string"
                 },
                 "receiverPhone": {
-                    "description": "鑱旂郴鐢佃瘽",
-                    "type": "string"
-                },
-                "silkMarket": {
-                    "description": "搴勫彛",
                     "type": "string"
                 },
                 "sourceNumber": {
@@ -6657,10 +6423,6 @@
                 },
                 "warehouseCode": {
                     "type": "string"
-                },
-                "warehouseId": {
-                    "description": "浠撳簱ID",
-                    "type": "string"
                 }
             }
         },
@@ -6881,7 +6643,6 @@
             "type": "object",
             "properties": {
                 "number": {
-                    "description": "鍗曞彿",
                     "type": "string"
                 },
                 "page": {
@@ -6893,7 +6654,6 @@
                     "type": "integer"
                 },
                 "sourceNumber": {
-                    "description": "婧愬崟鍙�",
                     "type": "string"
                 }
             }
@@ -6902,7 +6662,6 @@
             "type": "object",
             "properties": {
                 "condition": {
-                    "description": "妯$硦鏌ヨ鏉′欢",
                     "type": "string"
                 },
                 "keyword": {
@@ -6935,7 +6694,7 @@
                     "type": "integer"
                 },
                 "amount": {
-                    "description": "ProductName string          `json:\"productName\" ` //浜у搧鍚嶇О",
+                    "description": "ProductName string          `json:\"productName\" gorm:\"type:varchar(255);not null;comment:浜у搧鍚嶇О\"` //浜у搧鍚嶇О",
                     "type": "number"
                 },
                 "auxiliaryAmount": {
@@ -6951,7 +6710,7 @@
                     "type": "number"
                 },
                 "fromLocationId": {
-                    "description": "Unit        string          `json:\"unit\"`                    //鍗曚綅\nProduct models.Material `json:\"product\" ` // 浜у搧",
+                    "description": "Unit        string          `json:\"unit\" gorm:\"type:varchar(31);comment:鍗曚綅\"`                    //鍗曚綅\nProduct models.Material `json:\"product\" gorm:\"foreignKey:ProductId;references:ID\"`",
                     "type": "integer"
                 },
                 "productId": {
@@ -6959,20 +6718,11 @@
                     "type": "string"
                 },
                 "remark": {
-                    "description": "澶囨敞",
                     "type": "string"
                 },
                 "salePrice": {
                     "description": "閿�鍞崟浠�",
                     "type": "number"
-                },
-                "silkMarket": {
-                    "description": "搴勫彛",
-                    "type": "string"
-                },
-                "silkMarketClose": {
-                    "description": "搴勫彛鍏抽棴",
-                    "type": "string"
                 },
                 "stockAmount": {
                     "description": "搴撳瓨鏁伴噺锛岀洏鐐规椂鐢�",
@@ -6996,7 +6746,7 @@
             "type": "object",
             "properties": {
                 "baseOperationType": {
-                    "description": "鍩虹浣滀笟绫诲瀷 1 鍏ュ簱 2 鍑哄簱 3 鍐呴儴璋冩嫧 4 鎶ュ簾 5 搴撳瓨鐩樼偣",
+                    "description": "1 鍏ュ簱 2 鍑哄簱 3 鍐呴儴璋冩嫧 4 鎶ュ簾 5 搴撳瓨鐩樼偣",
                     "allOf": [
                         {
                             "$ref": "#/definitions/constvar.BaseOperationType"
@@ -7004,11 +6754,9 @@
                     ]
                 },
                 "number": {
-                    "description": "鍗曞彿",
                     "type": "string"
                 },
                 "operationTypeId": {
-                    "description": "浣滀笟绫诲瀷id",
                     "type": "integer"
                 },
                 "page": {
@@ -7020,12 +6768,7 @@
                     "type": "integer"
                 },
                 "status": {
-                    "description": "鐘舵��",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/constvar.OperationStatus"
-                        }
-                    ]
+                    "$ref": "#/definitions/constvar.OperationStatus"
                 }
             }
         },
@@ -7341,11 +7084,9 @@
             "type": "object",
             "properties": {
                 "accountant": {
-                    "description": "浼氳鍚嶇О",
                     "type": "string"
                 },
                 "accountantId": {
-                    "description": "浼氳id",
                     "type": "string"
                 },
                 "baseOperationType": {
@@ -7377,15 +7118,12 @@
                     "type": "string"
                 },
                 "custodian": {
-                    "description": "淇濈鍛樺悕绉�",
                     "type": "string"
                 },
                 "custodianId": {
-                    "description": "淇濈鍛榠d",
                     "type": "string"
                 },
                 "details": {
-                    "description": "璇︽儏",
                     "type": "array",
                     "items": {
                         "$ref": "#/definitions/request.OperationDetails"
@@ -7395,7 +7133,6 @@
                     "type": "integer"
                 },
                 "inventoryDealerType": {
-                    "description": "璋冩嫧鍑哄叆搴撳垎绫�(瀵瑰簲dict瀛楀吀琛ㄧ殑ID)",
                     "type": "integer"
                 },
                 "locationId": {
@@ -7410,11 +7147,9 @@
                     "type": "number"
                 },
                 "manager": {
-                    "description": "涓荤鍚嶇О",
                     "type": "string"
                 },
                 "managerId": {
-                    "description": "涓荤id",
                     "type": "string"
                 },
                 "number": {
@@ -7422,7 +7157,7 @@
                     "type": "string"
                 },
                 "operationDate": {
-                    "description": "FromLocationId    int                        `json:\"fromLocationId\"  `   //婧愪綅缃甶d\nToLocationId      int                        `json:\"toLocationId\" `   //鐩爣浣嶇疆id",
+                    "description": "FromLocationId    int                        `json:\"fromLocationId\"   gorm:\"type:int;not null;comment:婧愪綅缃甶d\"`   //婧愪綅缃甶d\nToLocationId      int                        `json:\"toLocationId\"    gorm:\"type:int;not null;comment:鐩爣浣嶇疆id\"`   //鐩爣浣嶇疆id",
                     "type": "string"
                 },
                 "operationTypeId": {
@@ -7434,19 +7169,12 @@
                     "type": "string"
                 },
                 "receiverAddr": {
-                    "description": "鏀惰揣鍦板潃",
                     "type": "string"
                 },
                 "receiverName": {
-                    "description": "鏀惰揣浜哄鍚�",
                     "type": "string"
                 },
                 "receiverPhone": {
-                    "description": "鑱旂郴鐢佃瘽",
-                    "type": "string"
-                },
-                "silkMarket": {
-                    "description": "搴勫彛",
                     "type": "string"
                 },
                 "sourceNumber": {
@@ -7610,16 +7338,8 @@
                     "description": "浜у搧id",
                     "type": "string"
                 },
-                "productCategory": {
-                    "description": "浜у搧绫诲埆",
-                    "type": "string"
-                },
                 "productName": {
                     "description": "浜у搧鍚嶇О",
-                    "type": "string"
-                },
-                "productSpecs": {
-                    "description": "浜у搧瑙勬牸",
                     "type": "string"
                 },
                 "productType": {
@@ -7696,29 +7416,6 @@
                     "items": {
                         "$ref": "#/definitions/models.Material"
                     }
-                }
-            }
-        },
-        "user.GetUserRequest": {
-            "type": "object",
-            "properties": {
-                "id": {
-                    "type": "string"
-                },
-                "nickName": {
-                    "type": "string"
-                },
-                "parentId": {
-                    "type": "string"
-                },
-                "pos": {
-                    "type": "string"
-                },
-                "userName": {
-                    "type": "string"
-                },
-                "userType": {
-                    "type": "integer"
                 }
             }
         },
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 394069f..3504c9f 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -361,6 +361,21 @@
     - WhetherTypeAsk
     - WhetherTypeAlways
     - ReservationNever
+  controllers.saveProductImagesFromExcelRequest:
+    properties:
+      excelFilePath:
+        description: excel璺緞 鐢╠ocker cp浼犲埌瀹瑰櫒閲�
+        type: string
+      imageColumn:
+        description: 鍥剧墖鎵�鍦ㄥ垪鍚�
+        type: string
+      productIdColumnIndex:
+        description: 浜у搧ID鏄鍑犲垪(浠�0寮�濮�)
+        type: integer
+      sheetIndex:
+        description: 绗嚑涓猻heet
+        type: integer
+    type: object
   gorm.DeletedAt:
     properties:
       time:
@@ -541,7 +556,6 @@
       updateTime:
         type: string
       warehouseId:
-        description: 浠撳簱id
         type: integer
     type: object
   models.LogisticCompany:
@@ -920,52 +934,38 @@
   models.Operation:
     properties:
       accountant:
-        description: 浼氳鍚嶇О
         type: string
       accountantId:
-        description: 浼氳id
         type: string
       auditDate:
-        description: 瀹℃壒鏃堕棿
         type: string
       baseOperationType:
         allOf:
         - $ref: '#/definitions/constvar.BaseOperationType'
         description: 鍩虹浣滀笟绫诲瀷
       checkedBy:
-        description: 楠岃瘉鑰匲serId
         type: string
       comment:
-        description: 澶囨敞
         type: string
       companyID:
-        description: 鍏徃ID-瀹㈡埛
         type: string
       companyName:
-        description: 鍏徃鍚嶇О-瀹㈡埛
         type: string
       contacterID:
-        description: 鑱旂郴浜篒D
         type: integer
       contacterName:
-        description: 鑱旂郴浜哄鍚�
         type: string
       createBy:
-        description: 鍒涘缓鑰匲serId
         type: string
       createTime:
         type: string
       custodian:
-        description: 淇濈鍛樺悕绉�
         type: string
       custodianId:
-        description: 淇濈鍛榠d
         type: string
       dealerType:
-        description: 璋冩嫧鍑哄叆搴撶被鍨�
         type: string
       details:
-        description: 鎿嶄綔鏄庣粏
         items:
           $ref: '#/definitions/models.OperationDetails'
         type: array
@@ -982,26 +982,20 @@
         description: 婧愪綅缃甶d
         type: integer
       logisticCompany:
-        allOf:
-        - $ref: '#/definitions/models.LogisticCompany'
-        description: 鐗╂祦鍏徃淇℃伅
+        $ref: '#/definitions/models.LogisticCompany'
       logisticCompanyId:
-        description: 鐗╂祦鍏徃id
         type: string
       logisticWeight:
         description: 鐗╂祦閲嶉噺
         type: number
       manager:
-        description: 涓荤鍚嶇О
         type: string
       managerId:
-        description: 涓荤id
         type: string
       number:
         description: 鍗曞彿
         type: string
       operationDate:
-        description: 瀹夋帓鏃ユ湡
         type: string
       operationSource:
         allOf:
@@ -1014,25 +1008,16 @@
         description: 浣滀笟绫诲瀷鍚嶇О
         type: string
       receiverAddr:
-        description: 鏀惰揣鍦板潃
         type: string
       receiverName:
-        description: 鏀惰揣浜哄鍚�
         type: string
       receiverPhone:
-        description: 鑱旂郴鐢佃瘽
         type: string
       remark:
-        description: 澶囨敞
         type: string
       salesDetailsNumber:
-        description: 閿�鍞槑缁嗙紪鐮�
-        type: string
-      silkMarket:
-        description: 鍢夎仈浠撳偍娣诲姞 SilkMarket
         type: string
       source:
-        description: 鏉ユ簮绯荤粺
         type: string
       sourceNumber:
         description: 婧愬崟鍙�
@@ -1051,11 +1036,8 @@
       updateTime:
         type: string
       warehouse:
-        allOf:
-        - $ref: '#/definitions/models.Warehouse'
-        description: 浠撳簱淇℃伅
+        $ref: '#/definitions/models.Warehouse'
       warehouseId:
-        description: 浠撳簱id
         type: integer
       waybillNumber:
         description: 杩愬崟鍙�
@@ -1071,10 +1053,8 @@
           null;comment:浜у搧鍚嶇О"` //浜у搧鍚嶇О
         type: number
       auxiliaryAmount:
-        description: 杈呭姪鏁伴噺
         type: number
       auxiliaryUnit:
-        description: 杈呭姪鍗曚綅
         type: string
       baseOperationType:
         allOf:
@@ -1101,7 +1081,7 @@
         description: 鏄惁璋冩嫧浜х敓鐨勫嚭搴�
         type: boolean
       operationId:
-        description: 鎿嶄綔璁板綍id
+        description: 鎿嶄綔id
         type: integer
       product:
         allOf:
@@ -1111,17 +1091,10 @@
         description: 浜у搧id
         type: string
       remark:
-        description: 澶囨敞
         type: string
       salePrice:
         description: 閿�鍞崟浠�
         type: number
-      silkMarket:
-        description: 鍢夎仈浠撳偍娣诲姞 SilkMarket銆丼ilkMarketClose
-        type: string
-      silkMarketClose:
-        description: 搴勫彛鍏抽棴
-        type: string
       stockAmount:
         description: 搴撳瓨鏁伴噺锛岀洏鐐规椂鐢�
         type: number
@@ -1133,10 +1106,8 @@
         description: 鐩爣浣嶇疆id
         type: integer
       totalGrossWeight:
-        description: 鎬绘瘺閲�
         type: number
       totalNetWeight:
-        description: 鎬诲噣閲�
         type: number
       updateTime:
         type: string
@@ -1217,47 +1188,6 @@
       updateTime:
         type: string
     type: object
-  models.SilkDict:
-    properties:
-      createdAt:
-        type: string
-      deletedAt:
-        $ref: '#/definitions/gorm.DeletedAt'
-      dictType:
-        allOf:
-        - $ref: '#/definitions/models.SilkDictType'
-        description: 瀛楀吀绫诲瀷
-      id:
-        type: integer
-      name:
-        description: 鍚嶇О
-        type: string
-      number:
-        description: 缂栧彿
-        type: string
-      remark:
-        description: 澶囨敞
-        type: string
-      updatedAt:
-        type: string
-    type: object
-  models.SilkDictType:
-    enum:
-    - 1
-    - 2
-    - 3
-    - 4
-    type: integer
-    x-enum-comments:
-      DictTypeColor: 棰滆壊
-      DictTypeMarket: 搴勫彛
-      DictTypeSpec: 瑙勬牸
-      DictTypeWorkshop: 杞﹂棿
-    x-enum-varnames:
-    - DictTypeMarket
-    - DictTypeWorkshop
-    - DictTypeColor
-    - DictTypeSpec
   models.SystemConfig:
     properties:
       configType:
@@ -1523,15 +1453,13 @@
   request.AddOperation:
     properties:
       accountant:
-        description: 浼氳鍚嶇О
         type: string
       accountantId:
-        description: 浼氳id
         type: string
       baseOperationType:
         allOf:
         - $ref: '#/definitions/constvar.BaseOperationType'
-        description: 鍩虹浣滀笟绫诲瀷 1 鍏ュ簱 2 鍑哄簱 3 鍐呴儴璋冩嫧 4 鎶ュ簾 5 搴撳瓨鐩樼偣
+        description: 鍩虹浣滀笟绫诲瀷 5搴撳瓨鐩樼偣
       comment:
         description: 澶囨敞
         type: string
@@ -1548,16 +1476,12 @@
         description: 鑱旂郴浜哄鍚�-闈炲繀濉�
         type: string
       custodian:
-        description: 淇濈鍛樺悕绉�
         type: string
       custodianId:
-        description: 淇濈鍛榠d
         type: string
       dealerType:
-        description: 璋冩嫧鍑哄叆搴撶被鍨�
         type: string
       details:
-        description: 璇︽儏
         items:
           $ref: '#/definitions/request.OperationDetails'
         type: array
@@ -1567,24 +1491,21 @@
         description: 婧愪綅缃甶d
         type: integer
       logisticCompanyId:
-        description: 鐗╂祦鍏徃id
         type: string
       logisticWeight:
         description: 鐗╂祦閲嶉噺
         type: number
       manager:
-        description: 涓荤鍚嶇О
         type: string
       managerId:
-        description: 涓荤id
         type: string
       number:
         description: 鍗曞彿
         type: string
       operationDate:
         description: |-
-          FromLocationId    int                      `json:"fromLocationId" `   //婧愪綅缃甶d
-          ToLocationId      int                      `json:"toLocationId" `   //鐩爣浣嶇疆id
+          FromLocationId    int                      `json:"fromLocationId"   gorm:"type:int;not null;comment:婧愪綅缃甶d"`   //婧愪綅缃甶d
+          ToLocationId      int                      `json:"toLocationId"    gorm:"type:int;not null;comment:鐩爣浣嶇疆id"`   //鐩爣浣嶇疆id
         type: string
       operationTypeId:
         description: 浣滀笟绫诲瀷id
@@ -1593,16 +1514,10 @@
         description: 浣滀笟绫诲瀷鍚嶇О
         type: string
       receiverAddr:
-        description: 鏀惰揣鍦板潃
         type: string
       receiverName:
-        description: 鏀惰揣浜哄鍚�
         type: string
       receiverPhone:
-        description: 鑱旂郴鐢佃瘽
-        type: string
-      silkMarket:
-        description: 搴勫彛
         type: string
       sourceNumber:
         description: 婧愬崟鍙�
@@ -1823,9 +1738,6 @@
         type: string
       warehouseCode:
         type: string
-      warehouseId:
-        description: 浠撳簱ID
-        type: string
     type: object
   request.GetList:
     properties:
@@ -1975,7 +1887,6 @@
   request.OperationAllList:
     properties:
       number:
-        description: 鍗曞彿
         type: string
       page:
         description: 椤电爜
@@ -1984,13 +1895,11 @@
         description: 姣忛〉澶у皬
         type: integer
       sourceNumber:
-        description: 婧愬崟鍙�
         type: string
     type: object
   request.OperationCondition:
     properties:
       condition:
-        description: 妯$硦鏌ヨ鏉′欢
         type: string
       keyword:
         description: 鍏抽敭瀛楁悳绱�
@@ -2014,7 +1923,8 @@
         description: 鎿嶄綔id
         type: integer
       amount:
-        description: ProductName string          `json:"productName" ` //浜у搧鍚嶇О
+        description: ProductName string          `json:"productName" gorm:"type:varchar(255);not
+          null;comment:浜у搧鍚嶇О"` //浜у搧鍚嶇О
         type: number
       auxiliaryAmount:
         description: 杈呭姪鏁伴噺
@@ -2027,24 +1937,17 @@
         type: number
       fromLocationId:
         description: |-
-          Unit        string          `json:"unit"`                    //鍗曚綅
-          Product models.Material `json:"product" ` // 浜у搧
+          Unit        string          `json:"unit" gorm:"type:varchar(31);comment:鍗曚綅"`                    //鍗曚綅
+          Product models.Material `json:"product" gorm:"foreignKey:ProductId;references:ID"`
         type: integer
       productId:
         description: 浜у搧id
         type: string
       remark:
-        description: 澶囨敞
         type: string
       salePrice:
         description: 閿�鍞崟浠�
         type: number
-      silkMarket:
-        description: 搴勫彛
-        type: string
-      silkMarketClose:
-        description: 搴勫彛鍏抽棴
-        type: string
       stockAmount:
         description: 搴撳瓨鏁伴噺锛岀洏鐐规椂鐢�
         type: number
@@ -2063,12 +1966,10 @@
       baseOperationType:
         allOf:
         - $ref: '#/definitions/constvar.BaseOperationType'
-        description: 鍩虹浣滀笟绫诲瀷 1 鍏ュ簱 2 鍑哄簱 3 鍐呴儴璋冩嫧 4 鎶ュ簾 5 搴撳瓨鐩樼偣
+        description: 1 鍏ュ簱 2 鍑哄簱 3 鍐呴儴璋冩嫧 4 鎶ュ簾 5 搴撳瓨鐩樼偣
       number:
-        description: 鍗曞彿
         type: string
       operationTypeId:
-        description: 浣滀笟绫诲瀷id
         type: integer
       page:
         description: 椤电爜
@@ -2077,9 +1978,7 @@
         description: 姣忛〉澶у皬
         type: integer
       status:
-        allOf:
-        - $ref: '#/definitions/constvar.OperationStatus'
-        description: 鐘舵��
+        $ref: '#/definitions/constvar.OperationStatus'
     type: object
   request.PageInfo:
     properties:
@@ -2291,10 +2190,8 @@
   request.UpdateOperation:
     properties:
       accountant:
-        description: 浼氳鍚嶇О
         type: string
       accountantId:
-        description: 浼氳id
         type: string
       baseOperationType:
         allOf:
@@ -2316,20 +2213,16 @@
         description: 鑱旂郴浜哄鍚�-闈炲繀濉�
         type: string
       custodian:
-        description: 淇濈鍛樺悕绉�
         type: string
       custodianId:
-        description: 淇濈鍛榠d
         type: string
       details:
-        description: 璇︽儏
         items:
           $ref: '#/definitions/request.OperationDetails'
         type: array
       id:
         type: integer
       inventoryDealerType:
-        description: 璋冩嫧鍑哄叆搴撳垎绫�(瀵瑰簲dict瀛楀吀琛ㄧ殑ID)
         type: integer
       locationId:
         description: 婧愪綅缃甶d
@@ -2340,18 +2233,16 @@
         description: 鐗╂祦閲嶉噺
         type: number
       manager:
-        description: 涓荤鍚嶇О
         type: string
       managerId:
-        description: 涓荤id
         type: string
       number:
         description: 鍗曞彿
         type: string
       operationDate:
         description: |-
-          FromLocationId    int                        `json:"fromLocationId"  `   //婧愪綅缃甶d
-          ToLocationId      int                        `json:"toLocationId" `   //鐩爣浣嶇疆id
+          FromLocationId    int                        `json:"fromLocationId"   gorm:"type:int;not null;comment:婧愪綅缃甶d"`   //婧愪綅缃甶d
+          ToLocationId      int                        `json:"toLocationId"    gorm:"type:int;not null;comment:鐩爣浣嶇疆id"`   //鐩爣浣嶇疆id
         type: string
       operationTypeId:
         description: 浣滀笟绫诲瀷id
@@ -2360,16 +2251,10 @@
         description: 浣滀笟绫诲瀷鍚嶇О
         type: string
       receiverAddr:
-        description: 鏀惰揣鍦板潃
         type: string
       receiverName:
-        description: 鏀惰揣浜哄鍚�
         type: string
       receiverPhone:
-        description: 鑱旂郴鐢佃瘽
-        type: string
-      silkMarket:
-        description: 搴勫彛
         type: string
       sourceNumber:
         description: 婧愬崟鍙�
@@ -2481,14 +2366,8 @@
       produceId:
         description: 浜у搧id
         type: string
-      productCategory:
-        description: 浜у搧绫诲埆
-        type: string
       productName:
         description: 浜у搧鍚嶇О
-        type: string
-      productSpecs:
-        description: 浜у搧瑙勬牸
         type: string
       productType:
         description: 浜у搧绫诲瀷
@@ -2544,21 +2423,6 @@
         items:
           $ref: '#/definitions/models.Material'
         type: array
-    type: object
-  user.GetUserRequest:
-    properties:
-      id:
-        type: string
-      nickName:
-        type: string
-      parentId:
-        type: string
-      pos:
-        type: string
-      userName:
-        type: string
-      userType:
-        type: integer
     type: object
   util.Response:
     properties:
@@ -3005,74 +2869,6 @@
                   type: array
               type: object
       summary: 鑾峰彇瀛楀吀淇℃伅鍒楄〃
-      tags:
-      - 鏁版嵁瀛楀吀
-  /api-wms/v1/dict/getSilkDictList/{type}:
-    get:
-      parameters:
-      - description: token
-        in: header
-        name: Authorization
-        required: true
-        type: string
-      - description: 瀛楀吀绫诲瀷
-        in: path
-        name: type
-        required: true
-        type: string
-      produces:
-      - application/json
-      responses:
-        "200":
-          description: 鎴愬姛
-          schema:
-            allOf:
-            - $ref: '#/definitions/util.ResponseList'
-            - properties:
-                data:
-                  items:
-                    $ref: '#/definitions/models.SilkDict'
-                  type: array
-              type: object
-      summary: 鑾峰彇搴勫彛鍒楄〃
-      tags:
-      - 鏁版嵁瀛楀吀
-  /api-wms/v1/dict/getUserList:
-    get:
-      parameters:
-      - in: query
-        name: id
-        type: string
-      - in: query
-        name: nickName
-        type: string
-      - in: query
-        name: parentId
-        type: string
-      - in: query
-        name: pos
-        type: string
-      - in: query
-        name: userName
-        type: string
-      - in: query
-        name: userType
-        type: integer
-      produces:
-      - application/json
-      responses:
-        "200":
-          description: 鎴愬姛
-          schema:
-            allOf:
-            - $ref: '#/definitions/util.ResponseList'
-            - properties:
-                data:
-                  items:
-                    $ref: '#/definitions/user.GetUserRequest'
-                  type: array
-              type: object
-      summary: 鑾峰彇鐢ㄦ埛鍒楄〃
       tags:
       - 鏁版嵁瀛楀吀
   /api-wms/v1/dict/save:
@@ -3668,11 +3464,6 @@
   /api-wms/v1/locationProductAmount/add:
     post:
       parameters:
-      - description: token
-        in: header
-        name: Authorization
-        required: true
-        type: string
       - description: 鍏ュ簱/鍑哄簱淇℃伅
         in: body
         name: object
@@ -3692,11 +3483,6 @@
   /api-wms/v1/locationProductAmount/finish:
     post:
       parameters:
-      - description: token
-        in: header
-        name: Authorization
-        required: true
-        type: string
       - description: 鍏ュ弬
         in: body
         name: object
@@ -3809,11 +3595,6 @@
   /api-wms/v1/locationProductAmount/update:
     post:
       parameters:
-      - description: token
-        in: header
-        name: Authorization
-        required: true
-        type: string
       - description: 鍏ュ簱/鍑哄簱淇℃伅
         in: body
         name: object
@@ -3851,11 +3632,6 @@
   /api-wms/v1/operation/finish/{id}:
     put:
       parameters:
-      - description: token
-        in: header
-        name: Authorization
-        required: true
-        type: string
       - description: id
         in: path
         name: id
@@ -3957,11 +3733,6 @@
   /api-wms/v1/operation/list:
     post:
       parameters:
-      - description: token
-        in: header
-        name: Authorization
-        required: true
-        type: string
       - description: 鏌ヨ鍙傛暟
         in: body
         name: object
@@ -4026,11 +3797,6 @@
   /api-wms/v1/operation/operation:
     post:
       parameters:
-      - description: token
-        in: header
-        name: Authorization
-        required: true
-        type: string
       - description: 鍏ュ簱/鍑哄簱淇℃伅
         in: body
         name: object
@@ -4050,11 +3816,6 @@
   /api-wms/v1/operation/operation/{id}:
     delete:
       parameters:
-      - description: token
-        in: header
-        name: Authorization
-        required: true
-        type: string
       - description: id
         in: path
         name: id
@@ -4294,6 +4055,30 @@
       summary: 缂栬緫閮ㄩ棬淇℃伅
       tags:
       - 閮ㄩ棬淇℃伅
+  /api-wms/v1/other/saveProductImagesFromExcel:
+    post:
+      parameters:
+      - description: 灞炴�т俊鎭�
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/controllers.saveProductImagesFromExcelRequest'
+      - description: token
+        in: header
+        name: Authorization
+        required: true
+        type: string
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: 鎴愬姛
+          schema:
+            $ref: '#/definitions/util.Response'
+      summary: 浠巈xcel涓幏鍙栦骇鍝佸浘鐗囧苟淇濆瓨
+      tags:
+      - 鍏朵粬
   /api-wms/v1/product/addDisuse:
     post:
       parameters:
diff --git a/router/router.go b/router/router.go
index a6234bd..c5137d8 100644
--- a/router/router.go
+++ b/router/router.go
@@ -241,5 +241,12 @@
 		sysCfgApi.GET("get", sysCfgCtl.GetSystemConfig) //鑾峰彇绯荤粺閰嶇疆
 	}
 
+	//鍏朵粬
+	otherCtl := new(controllers.OtherController)
+	otherApi := r.Group(urlPrefix + "/other")
+	{
+		otherApi.POST("saveProductImagesFromExcel", otherCtl.SaveProductImagesFromExcel) //浠庢寚瀹氳矾寰勭殑excel鑾峰彇浜у搧缂栧彿鍜屽浘鐗囷紝涓婁紶骞朵繚瀛�
+	}
+
 	return r
 }

--
Gitblit v1.8.0