From 2f856eaa7e46c884f1cb7ad721919a086d7f34a3 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 13 六月 2024 15:57:45 +0800
Subject: [PATCH] 出入库明细列表和报表增加多单位
---
response/report_forms_response.go | 1
models/move_history.go | 5 +
service/history_forms.go | 58 ++++++++++++++++---
service/more_units.go | 52 +++++++++++++++++
docs/swagger.yaml | 11 +++
docs/docs.go | 16 +++++
docs/swagger.json | 16 +++++
7 files changed, 149 insertions(+), 10 deletions(-)
diff --git a/docs/docs.go b/docs/docs.go
index 7837c42..3556fb5 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -4149,6 +4149,12 @@
}
]
},
+ "checkedAt": {
+ "type": "string"
+ },
+ "checkedBy": {
+ "type": "string"
+ },
"comment": {
"type": "string"
},
@@ -4162,6 +4168,9 @@
"type": "integer"
},
"contacterName": {
+ "type": "string"
+ },
+ "createBy": {
"type": "string"
},
"createTime": {
@@ -5748,6 +5757,13 @@
"description": "鏁伴噺",
"type": "number"
},
+ "amountMoreUnits": {
+ "description": "鍦ㄥ簱鏁伴噺澶氬崟浣�",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/models.UnitItems"
+ }
+ },
"locationId": {
"description": "浣嶇疆id",
"type": "integer"
diff --git a/docs/swagger.json b/docs/swagger.json
index 36ca1e2..3b27c5b 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -4137,6 +4137,12 @@
}
]
},
+ "checkedAt": {
+ "type": "string"
+ },
+ "checkedBy": {
+ "type": "string"
+ },
"comment": {
"type": "string"
},
@@ -4150,6 +4156,9 @@
"type": "integer"
},
"contacterName": {
+ "type": "string"
+ },
+ "createBy": {
"type": "string"
},
"createTime": {
@@ -5736,6 +5745,13 @@
"description": "鏁伴噺",
"type": "number"
},
+ "amountMoreUnits": {
+ "description": "鍦ㄥ簱鏁伴噺澶氬崟浣�",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/models.UnitItems"
+ }
+ },
"locationId": {
"description": "浣嶇疆id",
"type": "integer"
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index ebfef94..c470564 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -809,6 +809,10 @@
allOf:
- $ref: '#/definitions/constvar.BaseOperationType'
description: 鍩虹浣滀笟绫诲瀷
+ checkedAt:
+ type: string
+ checkedBy:
+ type: string
comment:
type: string
companyID:
@@ -818,6 +822,8 @@
contacterID:
type: integer
contacterName:
+ type: string
+ createBy:
type: string
createTime:
type: string
@@ -1912,6 +1918,11 @@
amount:
description: 鏁伴噺
type: number
+ amountMoreUnits:
+ description: 鍦ㄥ簱鏁伴噺澶氬崟浣�
+ items:
+ $ref: '#/definitions/models.UnitItems'
+ type: array
locationId:
description: 浣嶇疆id
type: integer
diff --git a/models/move_history.go b/models/move_history.go
index a83a53a..4d7b10d 100644
--- a/models/move_history.go
+++ b/models/move_history.go
@@ -19,6 +19,7 @@
OperationTypeName string `json:"operationTypeName" gorm:"type:varchar(127);not null;comment:浣滀笟绫诲瀷鍚嶇О"` //浣滀笟绫诲瀷鍚嶇О
OperationId int `json:"operationId" gorm:"type:int;not null;comment:鎿嶄綔id"` //鎿嶄綔id
ProductId string `json:"productId" gorm:"type:varchar(255);not null;comment:浜у搧id"` //浜у搧id
+ Product Material `json:"-" gorm:"foreignKey:ProductId"` //浜у搧
ProductName string `json:"productName" gorm:"type:varchar(255);not null;comment:浜у搧鍚嶇О"` //浜у搧鍚嶇О
Amount decimal.Decimal `json:"amount" gorm:"type:decimal(20,2);not null;comment:鏁伴噺"` //鏁伴噺
Unit string `json:"unit" gorm:"type:char(10);not null;comment:鍗曚綅"` //鍗曚綅
@@ -94,6 +95,10 @@
db = db.Where("product_name like ?", fmt.Sprintf("%%%v%%", slf.Keyword))
}
+ if slf.Preload {
+ db = db.Model(&MoveHistory{}).Preload("Product")
+ }
+
return db
}
diff --git a/response/report_forms_response.go b/response/report_forms_response.go
index 5d12343..a302424 100644
--- a/response/report_forms_response.go
+++ b/response/report_forms_response.go
@@ -31,6 +31,7 @@
FromLocation string `json:"fromLocation"` //婧愪綅缃�
ToLocation string `json:"toLocation"` //鐩爣浣嶇疆
Amount decimal.Decimal `json:"amount"` //鏁伴噺
+ AmountMoreUnits []models.UnitItems `json:"amountMoreUnits"` //鏁伴噺澶氬崟浣�
Unit string `json:"unit"` //鍗曚綅
ContactedName string `json:"contactedName"` //瀹屾垚鑰�
Status string `json:"status"` //鐘舵��
diff --git a/service/history_forms.go b/service/history_forms.go
index 14e212e..02b27bf 100644
--- a/service/history_forms.go
+++ b/service/history_forms.go
@@ -19,6 +19,7 @@
func (slf *HistoryFormsService) Query(params request.GetInventoryHistory) (result []*response.InventoryHistory, err error) {
search, err := slf.BuildSearch(params)
+ search = search.SetPreload(true)
if err != nil {
return nil, err
}
@@ -27,7 +28,33 @@
search = search.SetPage(params.Page, params.PageSize)
}
result = make([]*response.InventoryHistory, 0, params.PageSize)
- err = search.FindAs(&result)
+ list, err := search.FindNotTotal()
+
+ for _, v := range list {
+ data := &response.InventoryHistory{
+ Number: v.Number,
+ Date: v.UpdatedAt,
+ ProductName: v.ProductName,
+ FromLocation: v.FromLocation,
+ ToLocation: v.ToLocation,
+ Amount: v.Amount,
+ AmountMoreUnits: nil,
+ Unit: v.Unit,
+ ContactedName: v.Operator,
+ BaseOperationType: v.BaseOperationType,
+ Weight: v.Weight,
+ ProductId: v.ProductId,
+ FromLocationId: v.FromLocationId,
+ ToLocationId: v.ToLocationId,
+ OperationId: v.OperationId,
+ OperationTypeName: v.OperationTypeName,
+ }
+ moreUnit := v.Product.MoreUnit
+ if moreUnit != nil && *moreUnit {
+ data.AmountMoreUnits = CreateMoreUnit(v.Amount, v.Product.MoreUnitList)
+ }
+ result = append(result, data)
+ }
return result, nil
}
@@ -48,8 +75,8 @@
}
search.Orm = search.Orm.Model(&models.MoveHistory{}).
- Select("number, updated_at as date, product_name as product_name, from_location_id, operation_id,to_location_id, amount, " +
- "unit, operator as contacted_name, base_operation_type, weight, product_id, from_location, to_location, operation_type_name, weight").Order("id desc")
+ Select("number, updated_at, product_name, from_location_id, operation_id,to_location_id, amount, " +
+ "unit, operator, base_operation_type, weight, product_id, from_location, to_location, operation_type_name, weight").Order("id desc")
if len(ids) > 0 {
search.Orm = search.Orm.Where("id in ?", ids)
}
@@ -96,16 +123,26 @@
f := excelize.NewFile()
// 鑷畾涔夎〃澶�
- headers := []string{"鏃ユ湡", "鍗曞彿", "浜у搧", "浜у搧缂栫爜", "涓氬姟绫诲瀷", "浠�", "鑷�", "鏁伴噺", "鍗曚綅", "閲嶉噺"}
+ headers := []interface{}{"鏃ユ湡", "鍗曞彿", "浜у搧", "浜у搧缂栫爜", "涓氬姟绫诲瀷", "浠�", "鑷�", map[string][]string{"鏁伴噺": {"浠�", "鍖�", "绫�", "閲嶉噺"}}, "鍗曚綅", "閲嶉噺"}
// 璁剧疆琛ㄥご
- for i, header := range headers {
- cell := getColumnAlphabet(i) + "1"
- f.SetCellValue("Sheet1", cell, header)
+ if err := SetExcelHeader(headers, f); err != nil {
+ return "", err
}
+ style, err := SetHeaderStyle(f)
+ if err != nil {
+ return "", err
+ }
+
+ lastColumn := getColumnAlphabet(13)
+ f.SetCellStyle("Sheet1", "A1", lastColumn+"2", style)
+ // 璁剧疆鍒楀
+ f.SetColWidth("Sheet1", "A", "G", 30)
+ f.SetColWidth("Sheet1", "H", "K", 15)
+
for i, v := range dataList {
- column := strconv.Itoa(i + 2)
+ column := strconv.Itoa(i + 3)
f.SetCellValue("Sheet1", "A"+column, v.Date.Format("2006-01-02"))
f.SetCellValue("Sheet1", "B"+column, v.Number)
f.SetCellValue("Sheet1", "C"+column, v.ProductName)
@@ -114,8 +151,9 @@
f.SetCellValue("Sheet1", "F"+column, v.FromLocation)
f.SetCellValue("Sheet1", "G"+column, v.ToLocation)
f.SetCellValue("Sheet1", "H"+column, v.Amount)
- f.SetCellValue("Sheet1", "I"+column, v.Unit)
- f.SetCellValue("Sheet1", "J"+column, v.Weight)
+ FillMoreUnitToExcel(v.Amount, v.AmountMoreUnits, 7, i+3, f)
+ f.SetCellValue("Sheet1", "L"+column, v.Unit)
+ f.SetCellValue("Sheet1", "M"+column, v.Weight)
}
if params.BaseOperationType == constvar.BaseOperationTypeIncoming {
diff --git a/service/more_units.go b/service/more_units.go
index 8671ce3..3a4cf49 100644
--- a/service/more_units.go
+++ b/service/more_units.go
@@ -1,6 +1,7 @@
package service
import (
+ "errors"
"github.com/shopspring/decimal"
"github.com/xuri/excelize/v2"
"strconv"
@@ -33,3 +34,54 @@
}
return
}
+
+func SetExcelHeader(headers []interface{}, f *excelize.File) (err error) {
+ // 璁剧疆琛ㄥご
+ var i int
+ for _, h := range headers {
+ if v, ok := h.(string); ok {
+ err = f.SetCellValue("Sheet1", getColumnAlphabet(i)+"1", v)
+ if err != nil {
+ return
+ }
+ i++
+ } else if childHeaders, ok := h.(map[string][]string); ok {
+ for title, list := range childHeaders {
+ err = f.SetCellValue("Sheet1", getColumnAlphabet(i)+"1", title)
+ if err != nil {
+ return err
+ }
+ err = f.MergeCell("Sheet1", getColumnAlphabet(i)+"1", getColumnAlphabet(i-1+len(list))+"1") // 鍚堝苟鍗曞厓鏍�
+ for _, t := range list {
+ err = f.SetCellValue("Sheet1", getColumnAlphabet(i)+"2", t)
+ if err != nil {
+ return err
+ }
+ i++
+ }
+ }
+ } else {
+ return errors.New("unsupported header value")
+ }
+ }
+ return nil
+}
+
+func SetHeaderStyle(f *excelize.File) (styleInt int, err error) {
+ // 璁剧疆琛ㄥご鏍峰紡
+ style := &excelize.Style{
+ Border: nil,
+ Fill: excelize.Fill{
+ Type: "pattern",
+ Pattern: 1,
+ Shading: 0,
+ },
+ Font: &excelize.Font{
+ Bold: true,
+ },
+ Alignment: &excelize.Alignment{
+ Horizontal: "center",
+ },
+ }
+ return f.NewStyle(style)
+}
--
Gitblit v1.8.0