From 1691d8ee8fe10799d98b296625fd30183407ef25 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 28 六月 2024 12:17:22 +0800
Subject: [PATCH] 新增操作类型增加基础操作类型和仓库id来支持库存盘点
---
service/month_forms.go | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 101 insertions(+), 1 deletions(-)
diff --git a/service/month_forms.go b/service/month_forms.go
index 2073e9d..aca3f1a 100644
--- a/service/month_forms.go
+++ b/service/month_forms.go
@@ -1,13 +1,17 @@
package service
import (
+ "encoding/json"
"fmt"
+ "github.com/shopspring/decimal"
"github.com/xuri/excelize/v2"
"strconv"
"time"
+ "wms/constvar"
"wms/models"
"wms/pkg/logx"
"wms/request"
+ "wms/utils"
)
type MonthFormsService struct{}
@@ -111,7 +115,6 @@
}
titleStyle, err := f.NewStyle(style)
if err != nil {
- fmt.Println(err)
return
}
f.SetCellStyle("Sheet1", "A1", "R2", titleStyle)
@@ -179,3 +182,100 @@
return fileName, nil
}
+
+func GetCurrentStats(date string, productIds []string) (statRecords []*models.MonthStats, err error) {
+ //鏈湀鏈熷垵鏁伴噺/涓婃湀缁撲綑鏁伴噺
+ groupSumList, err := models.NewLocationProductAmountSearch().SetProductIds(productIds).GroupSum("product_id", "amount")
+ productIds = make([]string, 0, len(groupSumList))
+ for _, groupSum := range groupSumList {
+ productIds = append(productIds, groupSum.Class)
+ }
+ products, err := models.NewMaterialSearch().SetFields("id, name, unit, weight, more_unit, more_unit_value").SetIDs(productIds).FindNotTotal()
+ if err != nil {
+ logx.Errorf("MonthStats GetCurrentStats get products err:%v", err)
+ return
+ }
+ productMap := models.MaterialMap(products)
+
+ beginTime, endTime := utils.GetLastMonthPeriod()
+ inputMap, err := GetStatsByOperationType(beginTime, endTime, constvar.BaseOperationTypeIncoming)
+ if err != nil {
+ logx.Errorf("MonthStats GetStatsByOperationType input err:%v", err)
+ return
+ }
+
+ outputMap, err := GetStatsByOperationType(beginTime, endTime, constvar.BaseOperationTypeOutgoing)
+ if err != nil {
+ logx.Errorf("MonthStats GetStatsByOperationType output err:%v", err)
+ return
+ }
+
+ for _, groupSum := range groupSumList {
+ productId := groupSum.Class
+ if productMap[productId] == nil {
+ continue
+ }
+ product := productMap[productId]
+ amount := groupSum.Sum
+ record := models.MonthStats{
+ ProductId: productId,
+ ProductName: product.Name,
+ Unit: product.Unit,
+ Weight: product.Weight.Mul(amount),
+ Date: date,
+ }
+
+ var (
+ moreUnits string
+ inputMoreUnits string
+ outputMoreUnits string
+ )
+ if *product.MoreUnit {
+ moreValueArr := make([]models.UnitItems, 0, len(product.MoreUnitList))
+ inputMoreValueArr := make([]models.UnitItems, 0, len(product.MoreUnitList))
+ outputMoreValueArr := make([]models.UnitItems, 0, len(product.MoreUnitList))
+ if !amount.IsZero() {
+ moreValueArr = CreateMoreUnit(amount, product.MoreUnitList)
+ }
+ if !inputMap[productId].IsZero() {
+ inputMoreValueArr = CreateMoreUnit(inputMap[productId], product.MoreUnitList)
+ }
+
+ if !outputMap[productId].IsZero() {
+ outputMoreValueArr = CreateMoreUnit(outputMap[productId], product.MoreUnitList)
+ }
+ bys, _ := json.Marshal(moreValueArr)
+ moreUnits = string(bys)
+ bys, _ = json.Marshal(inputMoreValueArr)
+ inputMoreUnits = string(bys)
+ bys, _ = json.Marshal(outputMoreValueArr)
+ outputMoreUnits = string(bys)
+ }
+
+ record.InputAmount = inputMap[productId]
+ record.InputMoreUnits = inputMoreUnits
+ record.OutputAmount = outputMap[productId]
+ record.OutputMoreUnits = outputMoreUnits
+ record.EndAmount = amount
+ record.EndMoreUnits = moreUnits
+ statRecords = append(statRecords, &record)
+ }
+
+ return
+}
+
+func GetStatsByOperationType(beginTime, endTime time.Time, operationType constvar.BaseOperationType) (m map[string]decimal.Decimal, err error) {
+ operationIds, err := models.NewOperationSearch().SetBaseOperationType(operationType).SetFields("id").SetTimeBetween(beginTime, endTime).FindIds()
+ if err != nil {
+ return
+ }
+ groupSumList, err := models.NewOperationDetailsSearch().SetOperationIds(operationIds).SetFields("product_id, amount").GroupSum("product_id", "amount")
+ if err != nil {
+ return
+ }
+ m = make(map[string]decimal.Decimal, len(groupSumList))
+ for _, v := range groupSumList {
+ m[v.Class] = v.Sum
+ }
+ return
+}
--
Gitblit v1.8.0