From 743614db00f9b8cd9a97997a743f9c161e493aea Mon Sep 17 00:00:00 2001
From: yinbentan <yinbentan@live.com>
Date: 星期三, 10 七月 2024 20:55:28 +0800
Subject: [PATCH] 车间分组配置

---
 constvar/const.go                         |    9 +
 controllers/request/workshop_manage.go    |   25 +++
 controllers/response/workshop_manage.go   |    8 +
 controllers/request/system_set.go         |   14 --
 models/fineness.go                        |   26 ++-
 models/workshop_manage.go                 |   85 ++++++++++-
 main.go                                   |    2 
 service/workshop.go                       |    2 
 controllers/workshop_manage_controller.go |  212 +++++++++++++++++++++++++-----
 models/fineness_item.go                   |   10 
 10 files changed, 315 insertions(+), 78 deletions(-)

diff --git a/constvar/const.go b/constvar/const.go
index 16118ac..53a4073 100644
--- a/constvar/const.go
+++ b/constvar/const.go
@@ -22,7 +22,14 @@
 const (
 	LeftHalfCar  CarFlag = iota + 1 //宸﹀崐杞�
 	RightHalfCar                    //鍙冲崐杞�
-	AllCar                          //鍏ㄨ溅缁撴潫
+	//AllCar                          //鍏ㄨ溅缁撴潫
+)
+
+type WorkshopType int
+
+const (
+	Workshop WorkshopType = iota + 1 // 杞﹂棿淇℃伅
+	Group                            // 鍒嗙粍淇℃伅
 )
 
 type CheckItem int
diff --git a/controllers/request/system_set.go b/controllers/request/system_set.go
index cfe2744..f7db82b 100644
--- a/controllers/request/system_set.go
+++ b/controllers/request/system_set.go
@@ -49,17 +49,3 @@
 	RankName  string          `json:"rankName"`  //绛夌骇鍚嶇О
 	RankValue decimal.Decimal `json:"rankValue"` //绛夌骇鍊�
 }
-
-// ---------------------------------------杞﹂棿---------------------------------
-type GetWorkshopManage struct {
-	PageInfo
-	KeyWord      string `json:"keyWord"`
-	WorkshopName string `json:"workshopName"` //杞﹂棿鍚嶇О
-	GroupNumber  int    `json:"groupNumber"`  //缁勫埆
-}
-
-type GetWorkshopManageCar struct {
-	WorkshopName string `json:"workshopName"` //杞﹂棿鍚嶇О
-	GroupNumber  int    `json:"groupNumber"`  //缁勫埆
-	MarketName   string `json:"marketName"`   //搴勫彛鍚�
-}
diff --git a/controllers/request/workshop_manage.go b/controllers/request/workshop_manage.go
new file mode 100644
index 0000000..774a5d1
--- /dev/null
+++ b/controllers/request/workshop_manage.go
@@ -0,0 +1,25 @@
+package request
+
+import (
+	"silkserver/models"
+)
+
+type AddWorkshopManage struct {
+	models.WorkshopManage
+	Details []models.WorkshopManage `json:"details"` // 杞﹂棿淇℃伅
+}
+
+type GetWorkshopManage struct {
+	PageInfo
+	KeyWord        string `json:"keyWord"`
+	WorkshopNumber string `json:"workshopNumber"` // 杞﹂棿缂栧彿
+	WorkshopName   string `json:"workshopName"`   //杞﹂棿鍚嶇О
+	GroupNumber    int    `json:"groupNumber"`    //缁勫埆
+}
+
+type GetWorkshopManageCar struct {
+	WorkshopNumber string `json:"workshopNumber"` // 杞﹂棿缂栧彿
+	WorkshopName   string `json:"workshopName"`   //杞﹂棿鍚嶇О
+	GroupNumber    int    `json:"groupNumber"`    //缁勫埆
+	MarketName     string `json:"marketName"`     //搴勫彛鍚�
+}
diff --git a/controllers/response/workshop_manage.go b/controllers/response/workshop_manage.go
new file mode 100644
index 0000000..c5b42aa
--- /dev/null
+++ b/controllers/response/workshop_manage.go
@@ -0,0 +1,8 @@
+package response
+
+import "silkserver/models"
+
+type WorkshopManage struct {
+	models.WorkshopManage
+	Details []models.WorkshopManage `json:"details"` // 杞﹂棿淇℃伅
+}
diff --git a/controllers/workshop_manage_controller.go b/controllers/workshop_manage_controller.go
index 07df3f0..50109a7 100644
--- a/controllers/workshop_manage_controller.go
+++ b/controllers/workshop_manage_controller.go
@@ -3,6 +3,7 @@
 import (
 	"github.com/gin-gonic/gin"
 	"gorm.io/gorm"
+	"silkserver/constvar"
 	"silkserver/controllers/request"
 	"silkserver/controllers/response"
 	"silkserver/extend/code"
@@ -16,41 +17,117 @@
 
 // SaveWorkshopManage
 //
-//		@Tags		绯荤粺璁剧疆/杞﹂棿绠$悊
-//		@Summary	淇濆瓨杞﹂棿绠$悊
-//		@Produce	application/json
-//		@Param		object	body		models.WorkshopManage	true	"鍙傛暟"
-//	 @Param     Authorization	header string true "token"
-//		@Success	200		{object}	util.Response		"鎴愬姛"
-//		@Router		/api-jl/v1/system/saveWorkshopManage [post]
+//	@Tags		绯荤粺璁剧疆/杞﹂棿绠$悊
+//	@Summary	淇濆瓨杞﹂棿绠$悊
+//	@Produce	application/json
+//	@Param     Authorization	header string true "token"
+//	@Param		object	body	request.AddWorkshopManage	true	"鍙傛暟"
+//	@Success	200		{object}	util.Response		"鎴愬姛"
+//	@Router		/api-jl/v1/system/saveWorkshopManage [post]
 func (slf WorkshopManageController) SaveWorkshopManage(c *gin.Context) {
-	var workshop models.WorkshopManage
-	err := c.BindJSON(&workshop)
+	var param *request.AddWorkshopManage
+	err := c.BindJSON(&param)
 	if err != nil {
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
 		return
 	}
-	if workshop.ID > 0 {
-		err = models.NewWorkshopManageSearch().Save(&workshop)
-	} else {
-		err = models.NewWorkshopManageSearch().Create(&workshop)
+	if param.StartCarNumber > param.EndCarNumber {
+		util.ResponseFormat(c, code.RequestParamError, "缁撴潫杞﹀彿涓嶈兘灏忎簬寮�濮嬭溅鍙�")
+		return
 	}
+
+	editIds := make([]uint, len(param.Details))
+	for _, detail := range param.Details {
+		if detail.StartCarNumber > detail.EndCarNumber {
+			util.ResponseFormat(c, code.RequestParamError, "鍒嗙粍缁撴潫杞﹀彿涓嶈兘灏忎簬鍒嗙粍寮�濮嬭溅鍙�")
+			return
+		}
+		if detail.EndCarNumber > param.EndCarNumber {
+			util.ResponseFormat(c, code.RequestParamError, "鍒嗙粍缁撴潫杞﹀彿涓嶈兘澶т簬缁撴潫杞﹀彿")
+			return
+		}
+		if detail.ID > 0 {
+			editIds = append(editIds, detail.ID)
+		}
+	}
+
+	info := models.WorkshopManage{
+		WorkshopNumber: param.WorkshopNumber,
+		WorkshopName:   param.WorkshopName,
+		Type:           constvar.Workshop,
+		GroupNumber:    param.GroupNumber,
+		StartCarNumber: param.StartCarNumber,
+		EndCarNumber:   param.EndCarNumber,
+		CarFlag:        param.CarFlag,
+		Notes:          param.Notes,
+	}
+
+	err = models.WithTransaction(func(tx *gorm.DB) error {
+		if param.ID > 0 {
+			info.ID = param.ID
+			err = models.NewWorkshopManageSearch().Save(&info)
+			if err != nil {
+				return err
+			}
+			oldDetailsList, err := models.NewWorkshopManageSearch().SetType(constvar.Group).SetWorkshopNumber(param.WorkshopNumber).SetGroupNumber(param.GroupNumber).FindNotTotal()
+			if err != nil {
+				return err
+			}
+
+			for _, oldDetails := range oldDetailsList {
+				delFlag := true
+				for _, editId := range editIds {
+					if oldDetails.ID == editId {
+						delFlag = false
+						break
+					}
+				}
+				if delFlag {
+					err = models.NewWorkshopManageSearch().SetId(int(oldDetails.ID)).Delete()
+					if err != nil {
+						return err
+					}
+				}
+			}
+		} else {
+			err = models.NewWorkshopManageSearch().Create(&info)
+		}
+		if err != nil {
+			return err
+		}
+
+		for _, detail := range param.Details {
+			detail.Type = constvar.Group
+			detail.WorkshopNumber = param.WorkshopNumber
+			detail.WorkshopName = param.WorkshopName
+			detail.ParentID = param.WorkshopNumber
+			//detail.GroupNumber = param.Workshop.GroupNumber
+
+			if detail.ID > 0 {
+				err = models.NewWorkshopManageSearch().Save(&detail)
+			} else {
+				err = models.NewWorkshopManageSearch().Create(&detail)
+			}
+		}
+		return nil
+	})
 	if err != nil {
 		util.ResponseFormat(c, code.SaveFail, "淇濆瓨澶辫触")
 		return
 	}
+
 	util.ResponseFormat(c, code.Success, "淇濆瓨鎴愬姛")
 }
 
 // GetWorkshopManageList
 //
-//		@Tags		绯荤粺璁剧疆/杞﹂棿绠$悊
-//		@Summary	鑾峰彇杞﹂棿绠$悊鍒楄〃
-//		@Produce	application/json
-//	 @Param     Authorization	header string true "token"
-//		@Param		object	query		request.GetPriceStandard	true	"鍙傛暟"
-//		@Success	200		{object}	util.ResponseList{data=[]models.WorkshopManage}		"鎴愬姛"
-//		@Router		/api-jl/v1/system/getWorkshopManageList [post]
+//	@Tags		绯荤粺璁剧疆/杞﹂棿绠$悊
+//	@Summary	鑾峰彇杞﹂棿绠$悊鍒楄〃
+//	@Produce	application/json
+//	@Param     Authorization	header string true "token"
+//	@Param		object	query		request.GetPriceStandard	true	"鍙傛暟"
+//	@Success	200		{object}	util.ResponseList{data=[]response.WorkshopManage}		"鎴愬姛"
+//	@Router		/api-jl/v1/system/getWorkshopManageList [post]
 func (slf WorkshopManageController) GetWorkshopManageList(c *gin.Context) {
 	var param request.GetWorkshopManage
 	err := c.BindJSON(&param)
@@ -58,12 +135,49 @@
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
 		return
 	}
-	list, total, err := models.NewWorkshopManageSearch().SetWorkshopName(param.WorkshopName).SetGroupNumber(param.GroupNumber).SetPage(param.Page, param.PageSize).Find()
+	workshopManageSearch := models.NewWorkshopManageSearch()
+	if param.Page > 0 && param.PageSize > 0 {
+		workshopManageSearch.SetPage(param.Page, param.PageSize)
+	}
+	workshopManageSearch.SetType(constvar.Workshop).SetWorkshopName(param.WorkshopName).SetGroupNumber(param.GroupNumber)
+	list, total, err := workshopManageSearch.SetOrder("workshop_number,group_number,start_car_number").Find()
 	if err != nil {
 		util.ResponseFormat(c, code.SelectError, "鏌ヨ澶辫触")
 		return
 	}
-	util.ResponseFormatList(c, code.Success, list, total)
+	workshopNumberArr := make([]string, len(list))
+	for _, workshopManage := range list {
+		workshopNumberArr = append(workshopNumberArr, workshopManage.WorkshopNumber)
+	}
+
+	details, _ := models.NewWorkshopManageSearch().SetType(constvar.Group).SetWorkshopNumberArr(workshopNumberArr).
+		SetOrder("workshop_number,group_number,start_car_number").FindNotTotal()
+
+	var result []*response.WorkshopManage
+	for _, info := range list {
+		var infoTemp response.WorkshopManage
+		infoTemp.ID = info.ID
+		infoTemp.CreatedAt = info.CreatedAt
+		infoTemp.UpdatedAt = info.UpdatedAt
+		infoTemp.WorkshopNumber = info.WorkshopNumber
+		infoTemp.WorkshopName = info.WorkshopName
+		infoTemp.Type = info.Type
+		infoTemp.ParentID = info.ParentID
+		infoTemp.GroupNumber = info.GroupNumber
+		infoTemp.StartCarNumber = info.StartCarNumber
+		infoTemp.EndCarNumber = info.EndCarNumber
+		infoTemp.CarFlag = info.CarFlag
+		infoTemp.Notes = info.Notes
+		var detailList []models.WorkshopManage
+		for _, detail := range details {
+			if info.WorkshopNumber == detail.WorkshopNumber && info.GroupNumber == detail.GroupNumber {
+				detailList = append(detailList, *detail)
+			}
+		}
+		infoTemp.Details = detailList
+		result = append(result, &infoTemp)
+	}
+	util.ResponseFormatList(c, code.Success, result, total)
 }
 
 // DeleteWorkshopManage
@@ -85,7 +199,28 @@
 		util.ResponseFormat(c, code.RequestParamError, "鏁版嵁杞崲澶辫触")
 		return
 	}
-	err = models.NewWorkshopManageSearch().SetId(atoi).Delete()
+
+	err = models.WithTransaction(func(tx *gorm.DB) error {
+		first, err := models.NewWorkshopManageSearch().SetId(atoi).First()
+		if err != nil {
+			return err
+		}
+		if first.Type == constvar.Group {
+			err = models.NewWorkshopManageSearch().SetId(atoi).Delete()
+		} else if first.Type == constvar.Workshop {
+			workshopManages, err := models.NewWorkshopManageSearch().SetWorkshopNumber(first.WorkshopNumber).SetGroupNumber(first.GroupNumber).FindNotTotal()
+			if err != nil {
+				return err
+			}
+			for _, detail := range workshopManages {
+				err = models.NewWorkshopManageSearch().SetId(int(detail.ID)).Delete()
+				if err != nil {
+					return err
+				}
+			}
+		}
+		return nil
+	})
 	if err != nil {
 		util.ResponseFormat(c, code.RequestParamError, "鍒犻櫎澶辫触")
 		return
@@ -109,7 +244,9 @@
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
 		return
 	}
-	all, err := models.NewWorkshopManageSearch().SetWorkshopName(params.WorkshopName).SetGroupNumber(params.GroupNumber).FindAll()
+	all, err := models.NewWorkshopManageSearch().
+		SetType(constvar.Group).SetWorkshopName(params.WorkshopName).SetGroupNumber(params.GroupNumber).
+		SetOrder("workshop_number,group_number,start_car_number").FindNotTotal()
 	if err != nil {
 		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
 		return
@@ -139,7 +276,7 @@
 		util.ResponseFormat(c, code.RequestParamError, "鏃犳晥鐨勭紪鐮�")
 		return
 	}
-	all, err := models.NewWorkshopManageSearch().SetWorkshopNumber(number).FindAll()
+	all, err := models.NewWorkshopManageSearch().SetType(constvar.Group).SetWorkshopNumber(number).FindNotTotal()
 	if err != nil {
 		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
 		return
@@ -167,34 +304,37 @@
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
 		return
 	}
-	all, err := models.NewWorkshopManageSearch().SetWorkshopName(params.WorkshopName).SetGroupNumber(params.GroupNumber).FindAll()
+	workshopManageList, err := models.NewWorkshopManageSearch().
+		SetType(constvar.Group).SetWorkshopNumber(params.WorkshopNumber).SetWorkshopName(params.WorkshopName).SetGroupNumber(params.GroupNumber).
+		FindNotTotal()
 	if err != nil {
-		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
+		util.ResponseFormat(c, code.RequestParamError, "杞﹂棿鍒嗙粍鏌ヨ澶辫触")
 		return
 	}
-	fineness, err := models.NewFinenessRegisterSearch().SetWorkshopName(params.WorkshopName).SetWorkshopGroup(params.GroupNumber).
-		SetMarket(params.MarketName).First()
+	finenessRegisterList, err := models.NewFinenessRegisterSearch().
+		SetWorkshopNumber(params.WorkshopNumber).SetWorkshopName(params.WorkshopName).SetWorkshopGroup(params.GroupNumber).SetMarket(params.MarketName).
+		First()
 	if err != nil {
 		if err == gorm.ErrRecordNotFound {
-			util.ResponseFormat(c, code.RequestParamError, "褰撳墠搴勫彛,杞﹂棿,缁勫埆涓�,娌℃湁绾ゅ害鐧昏淇℃伅")
+			util.ResponseFormat(c, code.RequestParamError, "褰撳墠搴勫彛銆佽溅闂淬�佺粍鍒笅,娌℃湁绾ゅ害鐧昏淇℃伅")
 			return
 		}
-		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
+		util.ResponseFormat(c, code.RequestParamError, "绾ゅ害鐧昏鏌ヨ澶辫触")
 		return
 	}
-	first, err := models.NewFinenessCheckSearch().SetID(fineness.FinenessCheckID).First()
+	first, err := models.NewFinenessCheckSearch().SetID(finenessRegisterList.FinenessCheckID).First()
 	if err != nil {
-		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
+		util.ResponseFormat(c, code.RequestParamError, "绾ゅ害妫�楠屾煡璇㈠け璐�")
 		return
 	}
 	var data response.CarAndLevel
 	data.Level = first.FinenessGrade
 
 	carNum := make([][]int, 0)
-	for _, manage := range all {
+	for _, workshop := range workshopManageList {
 		car := make([]int, 0)
-		i := manage.StartCarNumber
-		for ; i <= manage.EndCarNumber; i++ {
+		i := workshop.StartCarNumber
+		for ; i <= workshop.EndCarNumber; i++ {
 			car = append(car, i)
 		}
 		if len(car) > 0 {
diff --git a/main.go b/main.go
index 9ff533d..bbe44dc 100644
--- a/main.go
+++ b/main.go
@@ -37,6 +37,8 @@
 		ReadTimeout:  5 * time.Second,
 		WriteTimeout: 5 * time.Second,
 	}
+	logx.Infof("server start success! \n\n\t- Local: \thttp://localhost:%v/\n\t- Network: \thttp://%v:%v/\n",
+		conf.WebConf.Port, conf.WebConf.Host, conf.WebConf.Port)
 
 	//瀹氭椂浠诲姟鍒濆鍖�
 	task.Init()
diff --git a/models/fineness.go b/models/fineness.go
index 18e6461..3d6ea97 100644
--- a/models/fineness.go
+++ b/models/fineness.go
@@ -11,13 +11,14 @@
 	// FinenessRegister 绾ゅ害鐧昏
 	FinenessRegister struct {
 		gorm.Model
-		Number          string          `gorm:"type:varchar(255);not null;comment:缂栧彿" json:"number"`       //缂栧彿
-		FinenessCheckID uint            `gorm:"not null;comment:绾ゅ害妫�楠岃〃ID" json:"finenessCheckID"`           //绾ゅ害妫�楠岃〃ID
-		FinishDate      string          `gorm:"type:varchar(255);not null;comment:钀戒笣鏃堕棿" json:"finishDate"` //钀戒笣鏃堕棿
-		WorkshopNumber  string          `json:"workshopNumber" gorm:"type:varchar(255);comment:杞﹂棿缂栧彿"`
-		WorkshopName    string          `json:"workshopName" gorm:"type:varchar(255);comment:杞﹂棿鍚嶇О"`
+		Number          string          `gorm:"type:varchar(255);not null;comment:缂栧彿" json:"number"`             //缂栧彿
+		FinenessCheckID uint            `gorm:"not null;comment:绾ゅ害妫�楠岃〃ID" json:"finenessCheckID"`                 //绾ゅ害妫�楠岃〃ID
+		FinishDate      string          `gorm:"type:varchar(255);not null;comment:钀戒笣鏃堕棿" json:"finishDate"`       //钀戒笣鏃堕棿
+		WorkshopNumber  string          `gorm:"type:varchar(255);comment:杞﹂棿缂栧彿" json:"workshopNumber" `           // 杞﹂棿缂栧彿
+		WorkshopName    string          `gorm:"type:varchar(255);comment:杞﹂棿鍚嶇О" json:"workshopName" `             // 杞﹂棿鍚嶇О
 		WorkshopGroup   int             `gorm:"type:int(11);not null;default:0;comment:杞︾粍" json:"workshopGroup"` //杞︾粍
-		Market          string          `gorm:"type:varchar(255);not null;comment:搴勫彛" json:"market"`             //搴勫彛
+		MarketNumber    string          `gorm:"size:255;comment:搴勫彛" json:"marketNumber"`                         //搴勫彛缂栧彿
+		Market          string          `gorm:"type:varchar(255);not null;comment:搴勫彛" json:"market"`             //搴勫彛鍚嶇О
 		Spec            string          `gorm:"type:varchar(255);not null;comment:瑙勬牸" json:"spec"`               //瑙勬牸
 		Circle          uint8           `gorm:"not null;default:0;comment:鍥炴暟" json:"circle"`                     //鍥炴暟
 		TotalCircle     uint8           `gorm:"not null;default:0;comment:鎬诲洖鏁�" json:"totalCircle"`               //鎬诲洖鏁�
@@ -80,8 +81,13 @@
 	return slf
 }
 
-func (slf *FinenessRegisterSearch) SetWorkshopName(workshop string) *FinenessRegisterSearch {
-	slf.WorkshopName = workshop
+func (slf *FinenessRegisterSearch) SetWorkshopNumber(workshopNumber string) *FinenessRegisterSearch {
+	slf.WorkshopNumber = workshopNumber
+	return slf
+}
+
+func (slf *FinenessRegisterSearch) SetWorkshopName(workshopName string) *FinenessRegisterSearch {
+	slf.WorkshopName = workshopName
 	return slf
 }
 
@@ -118,6 +124,10 @@
 		db = db.Where("number like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
 	}
 
+	if slf.WorkshopNumber != "" {
+		db = db.Where("workshop_number = ?", slf.WorkshopNumber)
+	}
+
 	if slf.WorkshopName != "" {
 		db = db.Where("workshop_name = ?", slf.WorkshopName)
 	}
diff --git a/models/fineness_item.go b/models/fineness_item.go
index b69cdeb..33a9065 100644
--- a/models/fineness_item.go
+++ b/models/fineness_item.go
@@ -11,11 +11,11 @@
 	// FinenessItem 绾ゅ害鐧昏
 	FinenessItem struct {
 		gorm.Model
-		FinenessRegisterID uint            `gorm:"index" json:"finenessRegisterID"`
-		Position           int             `json:"position"` //杞﹀彿
-		Fineness           float32         `json:"fineness"` //绾ゅ害
-		Quantity           int             `json:"quantity"` //鏁伴噺
-		Sum                decimal.Decimal `json:"sum"`      //绾ゅ害鍚堣
+		FinenessRegisterID uint            `gorm:"size:11;index" json:"finenessRegisterID"`
+		Position           int             `gorm:"size:11;comment:杞﹀彿" json:"position"`         // 杞﹀彿
+		Fineness           float32         `gorm:"comment:绾ゅ害" json:"fineness"`                 // 绾ゅ害
+		Quantity           int             `gorm:"size:11;comment:鏁伴噺" json:"quantity"`         // 鏁伴噺
+		Sum                decimal.Decimal `gorm:"type:decimal(12,4);comment:绾ゅ害鍚堣" json:"sum"` //绾ゅ害鍚堣
 	}
 
 	FinenessItemSearch struct {
diff --git a/models/workshop_manage.go b/models/workshop_manage.go
index ca05716..88c555f 100644
--- a/models/workshop_manage.go
+++ b/models/workshop_manage.go
@@ -11,20 +11,25 @@
 type (
 	WorkshopManage struct {
 		gorm.Model
-		WorkshopNumber string           `json:"workshopNumber" gorm:"type:varchar(255);comment:杞﹂棿缂栧彿"`
-		WorkshopName   string           `json:"workshopName" gorm:"type:varchar(255);comment:杞﹂棿鍚嶇О"`
-		GroupNumber    int              `json:"groupNumber" gorm:"type:int(11);comment:缁勫埆"`
-		StartCarNumber int              `json:"startCarNumber"  gorm:"type:int(11);comment:寮�濮嬭溅鍙�"`
-		EndCarNumber   int              `json:"endCarNumber"  gorm:"type:int(11);comment:缁撴潫杞﹀彿"`
-		CarFlag        constvar.CarFlag `json:"carFlag" gorm:"type:int(1);comment:鍗婅溅鏍囧織"`
-		Notes          string           `json:"notes" gorm:"type:varchar(255);comment:澶囨敞"`
+		WorkshopNumber string                `json:"workshopNumber" gorm:"type:varchar(255);comment:杞﹂棿缂栧彿"`
+		WorkshopName   string                `json:"workshopName" gorm:"type:varchar(255);comment:杞﹂棿鍚嶇О"`
+		Type           constvar.WorkshopType `json:"type" gorm:"size:1;comment:绫诲瀷(1杞﹂棿銆�2鍒嗙粍)"` // 绫诲瀷(1杞﹂棿銆�2鍒嗙粍)
+		ParentID       string                `json:"parentID" gorm:"size:11;comment:杞﹂棿缂栧彿"`
+		GroupNumber    int                   `json:"groupNumber" gorm:"type:int(11);comment:缁勫埆"`
+		StartCarNumber int                   `json:"startCarNumber"  gorm:"type:int(11);comment:寮�濮嬭溅鍙�"`
+		StartCarHalf   constvar.CarFlag      `json:"startCarHalf" gorm:"type:int(1);comment:寮�濮嬪崐杞︽爣璇�(1宸﹀崐杞︺��2鍙冲崐杞�)"`
+		EndCarNumber   int                   `json:"endCarNumber"  gorm:"type:int(11);comment:缁撴潫杞﹀彿"`
+		EndCarHalf     constvar.CarFlag      `json:"endCarHalf" gorm:"type:int(1);comment:缁撴潫鍗婅溅鏍囪瘑(1宸﹀崐杞︺��2鍙冲崐杞�)"`
+		CarFlag        int                   `json:"carFlag" gorm:"type:int(1);comment:鍗婅溅鏍囧織(0鍏ㄨ溅銆�1鍗婅溅)"`
+		Notes          string                `json:"notes" gorm:"type:varchar(255);comment:澶囨敞"`
 	}
 	WorkshopManageSearch struct {
 		WorkshopManage
-		PageNum  int
-		PageSize int
-		Order    string
-		Orm      *gorm.DB
+		WorkshopNumberArr []string
+		PageNum           int
+		PageSize          int
+		Order             string
+		Orm               *gorm.DB
 	}
 )
 
@@ -51,6 +56,16 @@
 	return slf
 }
 
+func (slf *WorkshopManageSearch) SetType(types constvar.WorkshopType) *WorkshopManageSearch {
+	slf.Type = types
+	return slf
+}
+
+func (slf *WorkshopManageSearch) SetParentID(parentID string) *WorkshopManageSearch {
+	slf.ParentID = parentID
+	return slf
+}
+
 func (slf *WorkshopManageSearch) SetWorkshopNumber(workshopNumber string) *WorkshopManageSearch {
 	slf.WorkshopNumber = workshopNumber
 	return slf
@@ -58,6 +73,11 @@
 
 func (slf *WorkshopManageSearch) SetWorkshopName(workshopName string) *WorkshopManageSearch {
 	slf.WorkshopName = workshopName
+	return slf
+}
+
+func (slf *WorkshopManageSearch) SetWorkshopNumberArr(workshopNumberArr []string) *WorkshopManageSearch {
+	slf.WorkshopNumberArr = workshopNumberArr
 	return slf
 }
 
@@ -78,8 +98,20 @@
 		db = db.Where("id = ?", slf.ID)
 	}
 
+	if slf.Type > 0 {
+		db = db.Where("`type` = ?", slf.Type)
+	}
+
+	if slf.ParentID != "" {
+		db = db.Where("parent_id = ?", slf.ParentID)
+	}
+
 	if slf.WorkshopNumber != "" {
 		db = db.Where("workshop_number = ?", slf.WorkshopNumber)
+	}
+
+	if len(slf.WorkshopNumberArr) > 0 {
+		db = db.Where("workshop_number in (?)", slf.WorkshopNumberArr)
 	}
 
 	if slf.WorkshopName != "" {
@@ -103,6 +135,19 @@
 	return nil
 }
 
+func (slf *WorkshopManageSearch) First() (*WorkshopManage, error) {
+	var (
+		record = new(WorkshopManage)
+		db     = slf.build()
+	)
+
+	if err := db.First(record).Error; err != nil {
+		return record, err
+	}
+
+	return record, nil
+}
+
 func (slf *WorkshopManageSearch) Find() ([]*WorkshopManage, int64, error) {
 	var (
 		records = make([]*WorkshopManage, 0)
@@ -116,19 +161,33 @@
 	if slf.PageNum*slf.PageSize > 0 {
 		db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
 	}
-	if err := db.Order("updated_at desc").Find(&records).Error; err != nil {
+	if slf.Order != "" {
+		db = db.Order(slf.Order)
+	} else {
+		db = db.Order("updated_at desc")
+	}
+	if err := db.Find(&records).Error; err != nil {
 		return records, total, fmt.Errorf("find records err: %v", err)
 	}
 
 	return records, total, nil
 }
 
-func (slf *WorkshopManageSearch) FindAll() ([]*WorkshopManage, error) {
+func (slf *WorkshopManageSearch) FindNotTotal() ([]*WorkshopManage, error) {
 	var (
 		records = make([]*WorkshopManage, 0)
 		db      = slf.build()
 	)
 
+	if slf.PageNum*slf.PageSize > 0 {
+		db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+	}
+	if slf.Order != "" {
+		db = db.Order(slf.Order)
+	} else {
+		db = db.Order("updated_at desc")
+	}
+
 	if err := db.Find(&records).Error; err != nil {
 		return records, fmt.Errorf("find records err: %v", err)
 	}
diff --git a/service/workshop.go b/service/workshop.go
index 2624131..8300c3e 100644
--- a/service/workshop.go
+++ b/service/workshop.go
@@ -3,7 +3,7 @@
 import "silkserver/models"
 
 func GetWorkshopEndCarMap(workshopNumber string, groupNumber int) (endCarMap map[int]bool, err error) {
-	records, err := models.NewWorkshopManageSearch().SetWorkshopNumber(workshopNumber).SetGroupNumber(groupNumber).FindAll()
+	records, err := models.NewWorkshopManageSearch().SetWorkshopNumber(workshopNumber).SetGroupNumber(groupNumber).FindNotTotal()
 	if err != nil {
 		return
 	}

--
Gitblit v1.8.0