From c2d8e537bb18c0892c0df6686ee5f5b5023f5bbb Mon Sep 17 00:00:00 2001
From: jiangshuai <291802688@qq.com>
Date: 星期一, 25 九月 2023 17:58:41 +0800
Subject: [PATCH] 1.修改业务类型列表接口,增加已就绪和已完成数量的统计

---
 models/operation_type.go      |   25 +++
 controllers/operation_type.go |   30 +++
 docs/swagger.yaml             |   85 ------------
 docs/docs.go                  |  139 -------------------
 docs/swagger.json             |  139 -------------------
 5 files changed, 54 insertions(+), 364 deletions(-)

diff --git a/controllers/operation_type.go b/controllers/operation_type.go
index 3d21412..8737781 100644
--- a/controllers/operation_type.go
+++ b/controllers/operation_type.go
@@ -6,6 +6,8 @@
 	"github.com/gin-gonic/gin"
 	"github.com/spf13/cast"
 	"gorm.io/gorm"
+	"strconv"
+	"wms/constvar"
 	"wms/extend/code"
 	"wms/extend/util"
 	"wms/models"
@@ -106,7 +108,7 @@
 // @Summary   鏌ヨ浣滀笟绫诲瀷鍒楄〃
 // @Produce   application/json
 // @Param     object  query    request.GetOperationTypeList true  "鏌ヨ鍙傛暟"
-// @Success   200   {object}  util.ResponseList{data=[]models.OperationType}  "鎴愬姛"
+// @Success   200   {object}  util.ResponseList  "鎴愬姛"
 // @Router    /api-wms/v1/operationType/operationType [get]
 func (slf OperationTypeController) List(c *gin.Context) {
 	var params request.GetOperationTypeList
@@ -116,11 +118,31 @@
 	}
 	list, total, err := models.NewOperationTypeSearch().SetPage(params.Page, params.PageSize).SetKeyword(params.Keyword).SetOrder("id desc").SetPreload(true).Find()
 	if err != nil {
-		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
+		util.ResponseFormat(c, code.RequestError, "鏌ユ壘澶辫触")
 		return
 	}
-
-	util.ResponseFormatList(c, code.Success, list, cast.ToInt(total))
+	var idList []int
+	for _, v := range list {
+		idList = append(idList, v.Id)
+	}
+	statistics, err := models.NewOperationTypeSearch().ListByStatusAndCount(idList)
+	if err != nil {
+		util.ResponseFormat(c, code.RequestError, err.Error())
+		return
+	}
+	mapStatistics := make(map[string]*models.OperationTypeByStatus, 0)
+	for _, v := range statistics {
+		mapStatistics[strconv.Itoa(v.Id)+string(v.Status)] = v
+	}
+	for k, v := range list {
+		if value, ok := mapStatistics[strconv.Itoa(v.Id)+string(constvar.OperationStatus_Ready)]; ok {
+			list[k].ReadyCount = value.Count
+		}
+		if value, ok := mapStatistics[strconv.Itoa(v.Id)+string(constvar.OperationStatus_Finish)]; ok {
+			list[k].FinishCount = value.Count
+		}
+	}
+	util.ResponseFormatListWithPage(c, code.Success, list, cast.ToInt(total), params.Page, params.PageSize)
 }
 
 // Delete
diff --git a/docs/docs.go b/docs/docs.go
index 20489c0..7e7b11a 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -675,22 +675,7 @@
                     "200": {
                         "description": "鎴愬姛",
                         "schema": {
-                            "allOf": [
-                                {
-                                    "$ref": "#/definitions/util.ResponseList"
-                                },
-                                {
-                                    "type": "object",
-                                    "properties": {
-                                        "data": {
-                                            "type": "array",
-                                            "items": {
-                                                "$ref": "#/definitions/models.OperationType"
-                                            }
-                                        }
-                                    }
-                                }
-                            ]
+                            "$ref": "#/definitions/util.ResponseList"
                         }
                     }
                 }
@@ -2145,128 +2130,6 @@
                 },
                 "updateTime": {
                     "type": "string"
-                }
-            }
-        },
-        "models.OperationType": {
-            "type": "object",
-            "properties": {
-                "ReservationDaysBeforePriority": {
-                    "description": "鍦ㄤ紭鍏堢骇鐨勫墠鍑犲ぉ",
-                    "type": "integer"
-                },
-                "baseOperationType": {
-                    "description": "鍩虹浣滀笟绫诲瀷",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/constvar.BaseOperationType"
-                        }
-                    ]
-                },
-                "company": {
-                    "description": "鍏徃",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.Company"
-                        }
-                    ]
-                },
-                "companyId": {
-                    "description": "鍏徃id",
-                    "type": "integer"
-                },
-                "createBackorder": {
-                    "description": "鍒涘缓娆犲崟",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/constvar.WhetherType"
-                        }
-                    ]
-                },
-                "createTime": {
-                    "type": "string"
-                },
-                "defaultLocationDest": {
-                    "description": "榛樿鐩爣浣嶇疆",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.Location"
-                        }
-                    ]
-                },
-                "defaultLocationDestId": {
-                    "description": "榛樿鐩爣浣嶇疆id",
-                    "type": "integer"
-                },
-                "defaultLocationSrc": {
-                    "description": "榛樿婧愪綅缃�",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.Location"
-                        }
-                    ]
-                },
-                "defaultLocationSrcId": {
-                    "description": "榛樿婧愪綅缃甶d",
-                    "type": "integer"
-                },
-                "earlyOperations": {
-                    "description": "棰勫~鍐欎綔涓氳鎯�",
-                    "type": "boolean"
-                },
-                "id": {
-                    "type": "integer"
-                },
-                "name": {
-                    "description": "浠撳簱鍚嶇О",
-                    "type": "string"
-                },
-                "prefix": {
-                    "description": "鍓嶇紑",
-                    "type": "string"
-                },
-                "printLabel": {
-                    "description": "鏄惁鎵撳嵃鏍囩",
-                    "type": "boolean"
-                },
-                "reservationDaysBefore": {
-                    "description": "鏀惰揣鍓嶅嚑澶�",
-                    "type": "integer"
-                },
-                "reservationMethod": {
-                    "description": "淇濈暀鏂瑰紡",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/constvar.ReservationMethod"
-                        }
-                    ]
-                },
-                "returnOperationType": {
-                    "description": "閫�璐х被鍨嬪悕绉�",
-                    "type": "string"
-                },
-                "returnOperationTypeID": {
-                    "description": "閫�璐х被鍨婭D",
-                    "type": "integer"
-                },
-                "showOperations": {
-                    "description": "鏄剧ず浣滀笟璇︽儏",
-                    "type": "boolean"
-                },
-                "updateTime": {
-                    "type": "string"
-                },
-                "warehouse": {
-                    "description": "浠撳簱",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.Warehouse"
-                        }
-                    ]
-                },
-                "warehouseId": {
-                    "description": "浠撳簱id",
-                    "type": "integer"
                 }
             }
         },
diff --git a/docs/swagger.json b/docs/swagger.json
index 9c6e3e4..1b041dd 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -663,22 +663,7 @@
                     "200": {
                         "description": "鎴愬姛",
                         "schema": {
-                            "allOf": [
-                                {
-                                    "$ref": "#/definitions/util.ResponseList"
-                                },
-                                {
-                                    "type": "object",
-                                    "properties": {
-                                        "data": {
-                                            "type": "array",
-                                            "items": {
-                                                "$ref": "#/definitions/models.OperationType"
-                                            }
-                                        }
-                                    }
-                                }
-                            ]
+                            "$ref": "#/definitions/util.ResponseList"
                         }
                     }
                 }
@@ -2133,128 +2118,6 @@
                 },
                 "updateTime": {
                     "type": "string"
-                }
-            }
-        },
-        "models.OperationType": {
-            "type": "object",
-            "properties": {
-                "ReservationDaysBeforePriority": {
-                    "description": "鍦ㄤ紭鍏堢骇鐨勫墠鍑犲ぉ",
-                    "type": "integer"
-                },
-                "baseOperationType": {
-                    "description": "鍩虹浣滀笟绫诲瀷",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/constvar.BaseOperationType"
-                        }
-                    ]
-                },
-                "company": {
-                    "description": "鍏徃",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.Company"
-                        }
-                    ]
-                },
-                "companyId": {
-                    "description": "鍏徃id",
-                    "type": "integer"
-                },
-                "createBackorder": {
-                    "description": "鍒涘缓娆犲崟",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/constvar.WhetherType"
-                        }
-                    ]
-                },
-                "createTime": {
-                    "type": "string"
-                },
-                "defaultLocationDest": {
-                    "description": "榛樿鐩爣浣嶇疆",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.Location"
-                        }
-                    ]
-                },
-                "defaultLocationDestId": {
-                    "description": "榛樿鐩爣浣嶇疆id",
-                    "type": "integer"
-                },
-                "defaultLocationSrc": {
-                    "description": "榛樿婧愪綅缃�",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.Location"
-                        }
-                    ]
-                },
-                "defaultLocationSrcId": {
-                    "description": "榛樿婧愪綅缃甶d",
-                    "type": "integer"
-                },
-                "earlyOperations": {
-                    "description": "棰勫~鍐欎綔涓氳鎯�",
-                    "type": "boolean"
-                },
-                "id": {
-                    "type": "integer"
-                },
-                "name": {
-                    "description": "浠撳簱鍚嶇О",
-                    "type": "string"
-                },
-                "prefix": {
-                    "description": "鍓嶇紑",
-                    "type": "string"
-                },
-                "printLabel": {
-                    "description": "鏄惁鎵撳嵃鏍囩",
-                    "type": "boolean"
-                },
-                "reservationDaysBefore": {
-                    "description": "鏀惰揣鍓嶅嚑澶�",
-                    "type": "integer"
-                },
-                "reservationMethod": {
-                    "description": "淇濈暀鏂瑰紡",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/constvar.ReservationMethod"
-                        }
-                    ]
-                },
-                "returnOperationType": {
-                    "description": "閫�璐х被鍨嬪悕绉�",
-                    "type": "string"
-                },
-                "returnOperationTypeID": {
-                    "description": "閫�璐х被鍨婭D",
-                    "type": "integer"
-                },
-                "showOperations": {
-                    "description": "鏄剧ず浣滀笟璇︽儏",
-                    "type": "boolean"
-                },
-                "updateTime": {
-                    "type": "string"
-                },
-                "warehouse": {
-                    "description": "浠撳簱",
-                    "allOf": [
-                        {
-                            "$ref": "#/definitions/models.Warehouse"
-                        }
-                    ]
-                },
-                "warehouseId": {
-                    "description": "浠撳簱id",
-                    "type": "integer"
                 }
             }
         },
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 0e09a58..e933993 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -498,82 +498,6 @@
       updateTime:
         type: string
     type: object
-  models.OperationType:
-    properties:
-      ReservationDaysBeforePriority:
-        description: 鍦ㄤ紭鍏堢骇鐨勫墠鍑犲ぉ
-        type: integer
-      baseOperationType:
-        allOf:
-        - $ref: '#/definitions/constvar.BaseOperationType'
-        description: 鍩虹浣滀笟绫诲瀷
-      company:
-        allOf:
-        - $ref: '#/definitions/models.Company'
-        description: 鍏徃
-      companyId:
-        description: 鍏徃id
-        type: integer
-      createBackorder:
-        allOf:
-        - $ref: '#/definitions/constvar.WhetherType'
-        description: 鍒涘缓娆犲崟
-      createTime:
-        type: string
-      defaultLocationDest:
-        allOf:
-        - $ref: '#/definitions/models.Location'
-        description: 榛樿鐩爣浣嶇疆
-      defaultLocationDestId:
-        description: 榛樿鐩爣浣嶇疆id
-        type: integer
-      defaultLocationSrc:
-        allOf:
-        - $ref: '#/definitions/models.Location'
-        description: 榛樿婧愪綅缃�
-      defaultLocationSrcId:
-        description: 榛樿婧愪綅缃甶d
-        type: integer
-      earlyOperations:
-        description: 棰勫~鍐欎綔涓氳鎯�
-        type: boolean
-      id:
-        type: integer
-      name:
-        description: 浠撳簱鍚嶇О
-        type: string
-      prefix:
-        description: 鍓嶇紑
-        type: string
-      printLabel:
-        description: 鏄惁鎵撳嵃鏍囩
-        type: boolean
-      reservationDaysBefore:
-        description: 鏀惰揣鍓嶅嚑澶�
-        type: integer
-      reservationMethod:
-        allOf:
-        - $ref: '#/definitions/constvar.ReservationMethod'
-        description: 淇濈暀鏂瑰紡
-      returnOperationType:
-        description: 閫�璐х被鍨嬪悕绉�
-        type: string
-      returnOperationTypeID:
-        description: 閫�璐х被鍨婭D
-        type: integer
-      showOperations:
-        description: 鏄剧ず浣滀笟璇︽儏
-        type: boolean
-      updateTime:
-        type: string
-      warehouse:
-        allOf:
-        - $ref: '#/definitions/models.Warehouse'
-        description: 浠撳簱
-      warehouseId:
-        description: 浠撳簱id
-        type: integer
-    type: object
   models.ProductCategory:
     properties:
       costingMethod:
@@ -1485,14 +1409,7 @@
         "200":
           description: 鎴愬姛
           schema:
-            allOf:
-            - $ref: '#/definitions/util.ResponseList'
-            - properties:
-                data:
-                  items:
-                    $ref: '#/definitions/models.OperationType'
-                  type: array
-              type: object
+            $ref: '#/definitions/util.ResponseList'
       summary: 鏌ヨ浣滀笟绫诲瀷鍒楄〃
       tags:
       - 涓氬姟绫诲瀷
diff --git a/models/operation_type.go b/models/operation_type.go
index b97e0b0..26842f7 100644
--- a/models/operation_type.go
+++ b/models/operation_type.go
@@ -34,6 +34,8 @@
 		CreateBackorder               constvar.WhetherType       `json:"createBackorder" gorm:"column:create_backorder"`                 //鍒涘缓娆犲崟
 		ReturnOperationTypeID         int                        `json:"returnOperationTypeID" gorm:"column:return_job_type_id"`         //閫�璐х被鍨婭D
 		ReturnOperationType           string                     `json:"returnOperationType" gorm:"-"`                                   //閫�璐х被鍨嬪悕绉�
+		ReadyCount                    int                        `json:"readyCount" gorm:"-"`                                            //灏辩华鏁伴噺
+		FinishCount                   int                        `json:"finishCount" gorm:"-"`                                           //瀹屾垚鏁伴噺
 	}
 
 	OperationTypeSearch struct {
@@ -44,6 +46,12 @@
 		Keyword  string
 		Orm      *gorm.DB
 		Preload  bool
+	}
+
+	OperationTypeByStatus struct {
+		Id     int                      `gorm:"column:id"`
+		Status constvar.OperationStatus `gorm:"column:status"`
+		Count  int                      `gorm:"column:count"`
 	}
 )
 
@@ -268,3 +276,20 @@
 
 	return records, nil
 }
+
+func (slf *OperationTypeSearch) ListByStatusAndCount(idList []int) ([]*OperationTypeByStatus, error) {
+	var (
+		records = make([]*OperationTypeByStatus, 0)
+		db      = slf.Orm
+	)
+	db = db.Table("wms_job_type").Select("wms_job_type.id,wms_operation.status,count(wms_operation.id) as count").InnerJoins("inner join wms_operation on wms_operation.operation_type_id=wms_job_type.id").Group("wms_job_type.id,wms_operation.status")
+	if len(idList) > 0 {
+		db = db.Where("wms_job_type.id IN ?", idList)
+	}
+
+	if err := db.Find(&records).Error; err != nil {
+		return records, fmt.Errorf("func ListByStatusAndCount err: %v, ", err)
+	}
+
+	return records, nil
+}

--
Gitblit v1.8.0