From 690dd891f8ee47b6036eb87c239275490ee02b7f Mon Sep 17 00:00:00 2001
From: wanjianli <1061428287@qq.com>
Date: 星期一, 18 九月 2023 19:52:58 +0800
Subject: [PATCH] 出入库一部分代码

---
 constvar/const.go           |    9 ++
 pkg/timex/timex.go          |   28 -------
 controllers/operation.go    |   86 +++++++++++++++++++++
 models/operation.go         |   34 +++++---
 request/operation.go        |   26 ++++++
 models/operation_details.go |    2 
 router/router.go            |   10 ++
 7 files changed, 152 insertions(+), 43 deletions(-)

diff --git a/constvar/const.go b/constvar/const.go
index dff496d..8e45297 100644
--- a/constvar/const.go
+++ b/constvar/const.go
@@ -127,3 +127,12 @@
 func (t InventoryValuation) Valid() bool {
 	return t >= InventoryValuationManual && t <= InventoryValuationAuto
 }
+
+type OperationStatus int
+
+const (
+	OperationStatus_Draft   OperationStatus = iota + 1 //鑽夌
+	OperationStatus_Waiting                            //姝e湪绛夊緟
+	OperationStatus_Ready                              //灏辩华
+	OperationStatus_Finish                             //瀹屾垚
+)
diff --git a/controllers/operation.go b/controllers/operation.go
new file mode 100644
index 0000000..18a26f7
--- /dev/null
+++ b/controllers/operation.go
@@ -0,0 +1,86 @@
+package controllers
+
+import (
+	"errors"
+	"github.com/gin-gonic/gin"
+	"wms/extend/code"
+	"wms/extend/util"
+	"wms/models"
+	"wms/pkg/logx"
+	"wms/pkg/structx"
+	"wms/request"
+)
+
+type OperationController struct {
+}
+
+// Add
+// @Tags      鍏ュ簱/鍑哄簱
+// @Summary   娣诲姞鍏ュ簱/鍑哄簱
+// @Produce   application/json
+// @Param     object  body  request.AddOperation true  "鍏ュ簱/鍑哄簱淇℃伅"
+// @Success   200 {object} util.Response "鎴愬姛"
+// @Router    /api-wms/v1/operation/operation [post]
+func (slf OperationController) Add(c *gin.Context) {
+	var reqParams request.AddOperation
+	var params models.Operation
+	if err := c.BindJSON(&reqParams); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
+	}
+	if err := structx.AssignTo(reqParams, params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鏁版嵁杞崲閿欒")
+	}
+	if err := slf.CheckParams(params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, err.Error())
+	}
+	if err := models.NewOperationSearch().Create(&params); err != nil {
+		logx.Errorf("Operation create err: %v", err)
+		util.ResponseFormat(c, code.SaveFail, "娣诲姞澶辫触锛�"+err.Error())
+	}
+	util.ResponseFormat(c, code.Success, "娣诲姞鎴愬姛")
+
+}
+
+func (slf OperationController) CheckParams(params models.Operation) error {
+	if params.SourceNumber == "" {
+		return errors.New("璇峰~鍏ユ簮鍗曞彿")
+	}
+
+	if params.OperationTypeId == 0 {
+		return errors.New("operationTypeId涓�0")
+	}
+
+	if params.FromLocationId == 0 {
+		return errors.New("璇烽�夋嫨婧愪綅缃�")
+	}
+
+	if params.ToLocationId == 0 {
+		return errors.New("璇烽�夋嫨鐩爣浣嶇疆")
+	}
+
+	if params.OperationDate.IsZero() {
+		return errors.New("璇烽�夋嫨瀹夋帓鏃ユ湡")
+	}
+
+	if len(params.Details) <= 0 {
+		return errors.New("璇锋坊鍔犳槑缁嗕俊鎭�")
+	}
+
+	//妫�鏌ユ槑缁嗛儴鍒�
+	for _, v := range params.Details {
+		if v.ProductId == 0 {
+			return errors.New("productID涓�0")
+		}
+		if v.ProductName == "" {
+			return errors.New("浜у搧鍚嶇О寮傚父")
+		}
+		if v.Quantity.IsNegative() {
+			return errors.New("浜у搧鏁伴噺鍑洪敊")
+		}
+		if v.FinishQuantity.IsNegative() {
+			return errors.New("浜у搧鏁伴噺鍑洪敊")
+		}
+	}
+
+	return nil
+}
diff --git a/models/operation.go b/models/operation.go
index b1b3355..450bd27 100644
--- a/models/operation.go
+++ b/models/operation.go
@@ -4,6 +4,7 @@
 	"fmt"
 	"gorm.io/gorm"
 	"wms/constvar"
+	"wms/extend/util"
 	"wms/pkg/mysqlx"
 )
 
@@ -11,19 +12,26 @@
 	// Operation 鎿嶄綔琛�
 	Operation struct {
 		WmsModel
-		Id           int    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
-		Number       string `json:"number" gorm:"column:number;type:varchar(255)"` //鍗曞彿
-		SourceNumber string `json:"sourceNumber" gorm:"type:varchar(255)"`         //婧愬崟鍙�
-
-		BaseOperationType constvar.BaseOperationType `json:"baseOperationType" gorm:"type:tinyint;not null;comment:鍩虹浣滀笟绫诲瀷"` //鍩虹浣滀笟绫诲瀷
-		OperationTypeId   int                        `json:"operationTypeId" gorm:"type:int;not null;comment:浣滀笟绫诲瀷id"`       //浣滀笟绫诲瀷id
-		Status            int                        `json:"status" gorm:"type:tinyint;not null;comment:鐘舵��"`                //鐘舵��
-
-		FromLocationId int      `json:"fromLocationId"   gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
-		FromLocation   Location `json:"fromLocation"     gorm:"foreignKey:FromLocationId"`       //婧愪綅缃�
-		ToLocationId   int      `json:"toLocationId"    gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
-		ToLocation     Location `json:"toLocation"      gorm:"foreignKey:ToLocationId"`          //鐩爣浣嶇疆
-
+		Id              int                      `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		Number          string                   `json:"number" gorm:"column:number;type:varchar(255)"`           //鍗曞彿
+		SourceNumber    string                   `json:"sourceNumber" gorm:"type:varchar(255)"`                   //婧愬崟鍙�
+		OperationTypeId int                      `json:"operationTypeId" gorm:"type:int;not null;comment:浣滀笟绫诲瀷id"` //浣滀笟绫诲瀷id
+		Status          constvar.OperationStatus `json:"status" gorm:"type:int(11);not null;comment:鐘舵��"`          //鐘舵��
+		FromLocationId  int                      `json:"fromLocationId"   gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+		FromLocation    Location                 `json:"fromLocation"     gorm:"foreignKey:FromLocationId"`       //婧愪綅缃�
+		ToLocationId    int                      `json:"toLocationId"    gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
+		ToLocation      Location                 `json:"toLocation"      gorm:"foreignKey:ToLocationId"`          //鐩爣浣嶇疆
+		OperationDate   util.JSONTime            `json:"operationDate" gorm:"comment:瀹夋帓鏃ユ湡"`
+		CarrierID       int                      `json:"carrierID" gorm:"type:int;comment:鎵胯繍鍟咺D"`
+		CarrierName     string                   `json:"carrierName" gorm:"type:varchar(63);comment:鎵胯繍鍟嗗悕绉�"`
+		Tracking        string                   `json:"tracking" gorm:"type:varchar(127);comment:杩借釜鍙傝��"`
+		ContacterID     int                      `json:"contacterID" gorm:"type:int;comment:鑱旂郴浜篒D"`
+		ContacterName   string                   `json:"contacterName" gorm:"type:varchar(63);comment:鑱旂郴浜哄鍚�"`
+		Weight          float64                  `json:"weight" gorm:"type:decimal;comment:閲嶉噺(kg)"`
+		TransferWeight  float64                  `json:"transferWeight" gorm:"type:decimal;comment:鐗╂祦閲嶉噺(kg)"`
+		CompanyID       int                      `json:"companyID" gorm:"type:int;comment:鍏徃ID"`
+		CompanyName     string                   `json:"companyName" gorm:"type:varchar(127);comment:鍏徃鍚嶇О(kg)"`
+		Details         []*OperationDetails      `json:"details"`
 	}
 
 	OperationSearch struct {
diff --git a/models/operation_details.go b/models/operation_details.go
index 742d651..8595052 100644
--- a/models/operation_details.go
+++ b/models/operation_details.go
@@ -2,7 +2,7 @@
 
 import (
 	"fmt"
-	"google.golang.org/genproto/googleapis/type/decimal"
+	"github.com/shopspring/decimal"
 	"gorm.io/gorm"
 	"wms/pkg/mysqlx"
 )
diff --git a/pkg/timex/timex.go b/pkg/timex/timex.go
index c443050..68f63c9 100644
--- a/pkg/timex/timex.go
+++ b/pkg/timex/timex.go
@@ -2,7 +2,6 @@
 
 import (
 	"time"
-	"wms/constvar"
 )
 
 func StringToTime(timeStr string) (time.Time, error) {
@@ -56,31 +55,4 @@
 
 func GetCurrentTime() string {
 	return time.Now().Format(timeLayout)
-}
-
-func NextDateTimestamp(base time.Time, unit constvar.InspectCycleUnit, cycle int) time.Time {
-	var t time.Time
-	switch unit {
-	case constvar.InspectCycleUnitWeek:
-		t = base.AddDate(0, 0, cycle*7)
-	case constvar.InspectCycleUnitMonth:
-		t = base.AddDate(0, cycle, 0)
-	case constvar.InspectCycleUnitDay:
-		t = base.AddDate(0, 0, cycle)
-	}
-	return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
-}
-
-// Cycle2Seconds 鍛ㄦ湡鎹㈢畻鎴愮鏁�
-func Cycle2Seconds(unit constvar.InspectCycleUnit, cycle int) int {
-	var s int
-	switch unit {
-	case constvar.InspectCycleUnitWeek:
-		s = cycle * 86400 * 7
-	case constvar.InspectCycleUnitMonth:
-		s = cycle * 86400 * 30
-	case constvar.InspectCycleUnitDay:
-		s = cycle * 86400
-	}
-	return s
 }
diff --git a/request/operation.go b/request/operation.go
new file mode 100644
index 0000000..63639fc
--- /dev/null
+++ b/request/operation.go
@@ -0,0 +1,26 @@
+package request
+
+import (
+	"google.golang.org/genproto/googleapis/type/decimal"
+	"wms/constvar"
+	"wms/extend/util"
+)
+
+type AddOperation struct {
+	Id              int                      `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+	Number          string                   `json:"number" gorm:"column:number;type:varchar(255)"`           //鍗曞彿
+	SourceNumber    string                   `json:"sourceNumber" gorm:"type:varchar(255)"`                   //婧愬崟鍙�
+	OperationTypeId int                      `json:"operationTypeId" gorm:"type:int;not null;comment:浣滀笟绫诲瀷id"` //浣滀笟绫诲瀷id
+	Status          constvar.OperationStatus `json:"status" gorm:"type:int(11);not null;comment:鐘舵��"`          //鐘舵��
+	FromLocationId  int                      `json:"fromLocationId"   gorm:"type:int;not null;comment:婧愪綅缃甶d"` //婧愪綅缃甶d
+	ToLocationId    int                      `json:"toLocationId"    gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
+	OperationDate   util.JSONTime            `json:"operationDate" gorm:"comment:瀹夋帓鏃ユ湡"`
+	Details         []*OperationDetails      `json:"details"`
+}
+
+type OperationDetails struct {
+	ProductId      int             `json:"productId" gorm:"type:int;not null;comment:浜у搧id"`              //浜у搧id
+	ProductName    string          `json:"productName" gorm:"type:varchar(255);not null;comment:浜у搧鍚嶇О"`   //浜у搧鍚嶇О
+	Quantity       decimal.Decimal `json:"quantity" gorm:"type:decimal(20,2);not null;comment:鏁伴噺"`       //鏁伴噺
+	FinishQuantity decimal.Decimal `json:"finishQuantity" gorm:"type:decimal(20,2);not null;comment:鏁伴噺"` //瀹屾垚鏁伴噺
+}
diff --git a/router/router.go b/router/router.go
index ac1f0c5..6da897f 100644
--- a/router/router.go
+++ b/router/router.go
@@ -53,7 +53,7 @@
 
 	// 浣滀笟绫诲瀷
 	operationTypeController := new(controllers.OperationTypeController)
-	operationTypeAPI := r.Group(urlPrefix + "/warehouse")
+	operationTypeAPI := r.Group(urlPrefix + "/operationType")
 	{
 		operationTypeAPI.GET("operationType", operationTypeController.List)          // 鑾峰彇浣滀笟绫诲瀷鍒楄〃
 		operationTypeAPI.POST("operationType", operationTypeController.Add)          // 鏂板浣滀笟绫诲瀷
@@ -61,5 +61,13 @@
 		operationTypeAPI.DELETE("operationType/:id", operationTypeController.Delete) // 鍒犻櫎浣滀笟绫诲瀷
 	}
 
+	// 鍏ュ簱/鍑哄簱
+	operationController := new(controllers.OperationController)
+	operationAPI := r.Group(urlPrefix + "/operation")
+	{
+		//operationAPI.GET()
+		operationAPI.POST("operation", operationController.Add)
+	}
+
 	return r
 }

--
Gitblit v1.8.0