1.优化进销存报表查询时间改成created_at字段;
2.零售订单审核和更新增加updated_at字段; 3.修复会员过期提醒sql报错问题; 4.修复短信使用量统计错误的缺陷;
This commit is contained in:
parent
16c6f1671c
commit
e9ac976f48
|
@ -234,6 +234,7 @@ func ErpOrderAudit(c *gin.Context) {
|
|||
"audit_time": time.Now(),
|
||||
"auditor_name": sysUser.NickName,
|
||||
"auditor_id": sysUser.UserId,
|
||||
"updated_at": time.Now(),
|
||||
}).Error
|
||||
if err != nil {
|
||||
begin.Rollback()
|
||||
|
|
|
@ -332,6 +332,9 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR
|
|||
}
|
||||
|
||||
// 查询期初库存、期初金额
|
||||
// 没有时间:默认为系统入库数量
|
||||
// 某一天:默认系统入库数量 - 某一天前的所有出库数量 + 某一天前的所有入库数量
|
||||
// 某个时间段:默认系统入库数量 - 开始时间前的所有出库数量 + 开始时间前的所有入库数量
|
||||
func getSystemStartCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) {
|
||||
var reportData DecisionReportData
|
||||
|
||||
|
@ -344,7 +347,7 @@ func getSystemStartCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRep
|
|||
logger.Errorf("getSystemStartCount err:", err)
|
||||
return DecisionReportData{}, err
|
||||
}
|
||||
qs = qs.Where("first_stock_time > ?", parse)
|
||||
qs = qs.Where("created_at > ?", parse)
|
||||
}
|
||||
|
||||
if req.EndTime != "" { // 出入库结束时间
|
||||
|
@ -353,7 +356,7 @@ func getSystemStartCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRep
|
|||
logger.Errorf("getSystemStartCount err:", err)
|
||||
return DecisionReportData{}, err
|
||||
}
|
||||
qs = qs.Where("first_stock_time <= ?", parse)
|
||||
qs = qs.Where("created_at <= ?", parse)
|
||||
}
|
||||
|
||||
var err error
|
||||
|
@ -446,7 +449,7 @@ func getPurchaseReturnCount(req *ErpDecisionReportReq, stock ErpStock) (Decision
|
|||
logger.Errorf("getSystemStartCount err:", err)
|
||||
return DecisionReportData{}, err
|
||||
}
|
||||
qs = qs.Where("first_stock_time > ?", parse)
|
||||
qs = qs.Where("created_at > ?", parse)
|
||||
}
|
||||
|
||||
if req.EndTime != "" { // 出入库结束时间
|
||||
|
@ -455,7 +458,7 @@ func getPurchaseReturnCount(req *ErpDecisionReportReq, stock ErpStock) (Decision
|
|||
logger.Errorf("getSystemStartCount err:", err)
|
||||
return DecisionReportData{}, err
|
||||
}
|
||||
qs = qs.Where("first_stock_time <= ?", parse)
|
||||
qs = qs.Where("created_at <= ?", parse)
|
||||
}
|
||||
|
||||
var err error
|
||||
|
@ -593,7 +596,7 @@ func getProductCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportD
|
|||
logger.Errorf("getSystemStartCount err:", err)
|
||||
return DecisionReportData{}, err
|
||||
}
|
||||
qs = qs.Where("first_stock_time > ?", parse)
|
||||
qs = qs.Where("created_at > ?", parse)
|
||||
}
|
||||
|
||||
if req.EndTime != "" { // 出入库结束时间
|
||||
|
@ -602,7 +605,7 @@ func getProductCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportD
|
|||
logger.Errorf("getSystemStartCount err:", err)
|
||||
return DecisionReportData{}, err
|
||||
}
|
||||
qs = qs.Where("first_stock_time <= ?", parse)
|
||||
qs = qs.Where("created_at <= ?", parse)
|
||||
}
|
||||
|
||||
var err error
|
||||
|
@ -758,7 +761,7 @@ func getSystemOutCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRepor
|
|||
logger.Errorf("getSystemStartCount err:", err)
|
||||
return DecisionReportData{}, err
|
||||
}
|
||||
qs = qs.Where("first_stock_time > ?", parse)
|
||||
qs = qs.Where("created_at > ?", parse)
|
||||
}
|
||||
|
||||
if req.EndTime != "" { // 出入库结束时间
|
||||
|
@ -767,7 +770,7 @@ func getSystemOutCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRepor
|
|||
logger.Errorf("getSystemStartCount err:", err)
|
||||
return DecisionReportData{}, err
|
||||
}
|
||||
qs = qs.Where("first_stock_time <= ?", parse)
|
||||
qs = qs.Where("created_at <= ?", parse)
|
||||
}
|
||||
|
||||
var err error
|
||||
|
@ -1028,7 +1031,7 @@ func getSystemEndCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRepor
|
|||
logger.Errorf("getSystemStartCount err:", err)
|
||||
return DecisionReportData{}, err
|
||||
}
|
||||
qs = qs.Where("first_stock_time > ?", parse)
|
||||
qs = qs.Where("created_at > ?", parse)
|
||||
}
|
||||
|
||||
if req.EndTime != "" { // 出入库结束时间
|
||||
|
@ -1037,7 +1040,7 @@ func getSystemEndCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionRepor
|
|||
logger.Errorf("getSystemStartCount err:", err)
|
||||
return DecisionReportData{}, err
|
||||
}
|
||||
qs = qs.Where("first_stock_time <= ?", parse)
|
||||
qs = qs.Where("created_at <= ?", parse)
|
||||
}
|
||||
|
||||
var err error
|
||||
|
@ -1074,7 +1077,7 @@ func getSumStockData(req *ErpDecisionReportReq) (DecisionReportData, error) {
|
|||
logger.Errorf("getStockData err:", err)
|
||||
return DecisionReportData{}, err
|
||||
}
|
||||
qs = qs.Where("first_stock_time > ?", parse)
|
||||
qs = qs.Where("created_at > ?", parse)
|
||||
}
|
||||
|
||||
if req.EndTime != "" {
|
||||
|
@ -1083,7 +1086,7 @@ func getSumStockData(req *ErpDecisionReportReq) (DecisionReportData, error) {
|
|||
logger.Errorf("getStockData err:", err)
|
||||
return DecisionReportData{}, err
|
||||
}
|
||||
qs = qs.Where("first_stock_time <= ?", parse)
|
||||
qs = qs.Where("created_at <= ?", parse)
|
||||
}
|
||||
|
||||
if len(req.StoreId) > 0 {
|
||||
|
|
|
@ -898,7 +898,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
}
|
||||
|
||||
err = gdb.Table("erp_stock_commodity").Where("imei = ?", commodities[i].IMEI).
|
||||
Updates(map[string]interface{}{"state": state}).Error // 状态更新为已销售;反审核则更新为在库
|
||||
Updates(map[string]interface{}{
|
||||
"state": state,
|
||||
"updated_at": time.Now(),
|
||||
}).Error // 状态更新为已销售;反审核则更新为在库
|
||||
if err != nil {
|
||||
logger.Error("commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -907,7 +910,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
if state == SoldOut { // 已售的订单才更新库存数量
|
||||
err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?",
|
||||
erpOrder.StoreId, commodities[i].ErpCommodityId).
|
||||
Updates(map[string]interface{}{"count": gorm.Expr("count - ?", 1)}).Error // 库存数量-1
|
||||
Updates(map[string]interface{}{
|
||||
"count": gorm.Expr("count - ?", 1),
|
||||
"updated_at": time.Now(),
|
||||
}).Error // 库存数量-1
|
||||
if err != nil {
|
||||
logger.Error("commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -915,7 +921,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
} else { // 反审核时则库存数量+1
|
||||
err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?",
|
||||
erpOrder.StoreId, commodities[i].ErpCommodityId).
|
||||
Updates(map[string]interface{}{"count": gorm.Expr("count + ?", 1)}).Error // 库存数量+1
|
||||
Updates(map[string]interface{}{
|
||||
"count": gorm.Expr("count + ?", 1),
|
||||
"updated_at": time.Now(),
|
||||
}).Error // 库存数量+1
|
||||
if err != nil {
|
||||
logger.Error("commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -924,7 +933,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
} else { // 非串码商品
|
||||
if state == InStock { // 零售订单反审核
|
||||
err = gdb.Table("erp_stock_commodity").Where("id = ?", commodities[i].ErpStockCommodityID).
|
||||
Updates(map[string]interface{}{"state": state}).Error // 状态更新为在库
|
||||
Updates(map[string]interface{}{
|
||||
"state": state,
|
||||
"updated_at": time.Now(),
|
||||
}).Error // 状态更新为在库
|
||||
if err != nil {
|
||||
logger.Error("RetailTypeRejected commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -932,7 +944,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
|
||||
err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?",
|
||||
erpOrder.StoreId, commodities[i].ErpCommodityId).
|
||||
Updates(map[string]interface{}{"count": gorm.Expr("count + ?", 1)}).Error // 库存数量+1
|
||||
Updates(map[string]interface{}{
|
||||
"count": gorm.Expr("count + ?", 1),
|
||||
"updated_at": time.Now(),
|
||||
}).Error // 库存数量+1
|
||||
if err != nil {
|
||||
logger.Error("RetailTypeRejected commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -949,7 +964,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
} else { // 正常销售
|
||||
if commodities[i].ErpStockCommodityID != "" { // 零售退货单反审核,默认当作销售单
|
||||
err = gdb.Table("erp_stock_commodity").Where("id = ?", commodities[i].ErpStockCommodityID).
|
||||
Updates(map[string]interface{}{"state": SoldOut}).Error // 状态更新为在库
|
||||
Updates(map[string]interface{}{
|
||||
"state": SoldOut,
|
||||
"updated_at": time.Now(),
|
||||
}).Error // 状态更新为在库
|
||||
if err != nil {
|
||||
logger.Error("RetailTypeRejected commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -957,7 +975,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
|
||||
err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?",
|
||||
erpOrder.StoreId, commodities[i].ErpCommodityId).
|
||||
Updates(map[string]interface{}{"count": gorm.Expr("count - ?", 1)}).Error // 库存数量-1
|
||||
Updates(map[string]interface{}{
|
||||
"count": gorm.Expr("count - ?", 1),
|
||||
"updated_at": time.Now(),
|
||||
}).Error // 库存数量-1
|
||||
if err != nil {
|
||||
logger.Error("RetailTypeRejected commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -993,7 +1014,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
|
||||
// 优先出库库存时间最长的数据
|
||||
err = gdb.Table("erp_stock_commodity").Where("id = ?", rightId).
|
||||
Updates(map[string]interface{}{"state": state}).Error // 状态更新为销售锁定中;反审核则更新为在库
|
||||
Updates(map[string]interface{}{
|
||||
"state": state,
|
||||
"updated_at": time.Now(),
|
||||
}).Error // 状态更新为销售锁定中;反审核则更新为在库
|
||||
if err != nil {
|
||||
logger.Error("commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -1002,7 +1026,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
if state == SoldOut { // 已售的订单才更新库存数量
|
||||
err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?",
|
||||
erpOrder.StoreId, commodities[i].ErpCommodityId).
|
||||
Updates(map[string]interface{}{"count": gorm.Expr("count - ?", 1)}).Error // 库存数量-1
|
||||
Updates(map[string]interface{}{
|
||||
"count": gorm.Expr("count - ?", 1),
|
||||
"updated_at": time.Now(),
|
||||
}).Error // 库存数量-1
|
||||
if err != nil {
|
||||
logger.Error("commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -1027,7 +1054,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
}
|
||||
|
||||
err = gdb.Table("erp_stock_commodity").Where("imei = ?", commodities[i].IMEI).
|
||||
Updates(map[string]interface{}{"state": InStock}).Error // 状态更新为在库
|
||||
Updates(map[string]interface{}{
|
||||
"state": InStock,
|
||||
"updated_at": Now(),
|
||||
}).Error // 状态更新为在库
|
||||
if err != nil {
|
||||
logger.Error("RetailTypeRejected commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -1035,7 +1065,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
|
||||
err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?",
|
||||
erpOrder.StoreId, commodities[i].ErpCommodityId).
|
||||
Updates(map[string]interface{}{"count": gorm.Expr("count + ?", 1)}).Error // 库存数量+1
|
||||
Updates(map[string]interface{}{
|
||||
"count": gorm.Expr("count + ?", 1),
|
||||
"updated_at": time.Now(),
|
||||
}).Error // 库存数量+1
|
||||
if err != nil {
|
||||
logger.Error("RetailTypeRejected commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -1047,7 +1080,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
stockCommodityID, _ := tools.StringToInt(commodities[i].ErpStockCommodityID)
|
||||
if stockCommodityID > 0 {
|
||||
err = gdb.Table("erp_stock_commodity").Where("id = ?", commodities[i].ErpStockCommodityID).
|
||||
Updates(map[string]interface{}{"state": InStock}).Error // 状态更新为在库
|
||||
Updates(map[string]interface{}{
|
||||
"state": InStock,
|
||||
"updated_at": Now(),
|
||||
}).Error // 状态更新为在库
|
||||
if err != nil {
|
||||
logger.Error("RetailTypeRejected commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -1055,7 +1091,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
|
||||
err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?",
|
||||
erpOrder.StoreId, commodities[i].ErpCommodityId).
|
||||
Updates(map[string]interface{}{"count": gorm.Expr("count + ?", 1)}).Error // 库存数量+1
|
||||
Updates(map[string]interface{}{
|
||||
"count": gorm.Expr("count + ?", 1),
|
||||
"updated_at": time.Now(),
|
||||
}).Error // 库存数量+1
|
||||
if err != nil {
|
||||
logger.Error("RetailTypeRejected commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -1083,7 +1122,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
}
|
||||
|
||||
err = gdb.Table("erp_stock_commodity").Where("id = ?", rightId).
|
||||
Updates(map[string]interface{}{"state": InStock}).Error // 状态更新为在库
|
||||
Updates(map[string]interface{}{
|
||||
"state": InStock,
|
||||
"updated_at": Now(),
|
||||
}).Error // 状态更新为在库
|
||||
if err != nil {
|
||||
logger.Error("RetailTypeRejected commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
@ -1091,7 +1133,10 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
|
||||
err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?",
|
||||
erpOrder.StoreId, commodities[i].ErpCommodityId).
|
||||
Updates(map[string]interface{}{"count": gorm.Expr("count + ?", 1)}).Error // 库存数量+1
|
||||
Updates(map[string]interface{}{
|
||||
"count": gorm.Expr("count + ?", 1),
|
||||
"updated_at": time.Now(),
|
||||
}).Error // 库存数量+1
|
||||
if err != nil {
|
||||
logger.Error("RetailTypeRejected commodities err:", logger.Field("err", err))
|
||||
return err
|
||||
|
|
|
@ -1557,7 +1557,7 @@ func ExpireMemberSMSSendDay(day uint32, nowTime time.Time) {
|
|||
//err := orm.Eloquent.Table("user").Where("member_expire > ?", start).Where("member_expire < ?", end).
|
||||
// Where("member_level in (?)", []uint32{2, 3, 4, 5}).Find(&users).Error
|
||||
err := orm.Eloquent.Table("user").Where("member_expire > ?", start).Where("member_expire < ?", end).
|
||||
Where("member_level = ?", MemberLevelUser).Find(&users).Error
|
||||
Where("member_level = ?", MemberLevelUser).Find(&users).Error
|
||||
if err != nil {
|
||||
logger.Error(err.Error())
|
||||
return
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package models
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
orm "go-admin/common/global"
|
||||
"gorm.io/gorm"
|
||||
"time"
|
||||
|
@ -23,13 +23,16 @@ func GetSmsNumberRemaining() int {
|
|||
now := time.Now()
|
||||
year, month, _ := now.Date()
|
||||
|
||||
var totalUsed sql.NullInt64
|
||||
nTotalUsed := struct {
|
||||
TotalUsed int `json:"total_used"`
|
||||
}{}
|
||||
|
||||
// 查询当前年份和月份的短信发送总数
|
||||
if err := orm.Eloquent.Debug().Model(&SmsSummary{}).
|
||||
Where("year = ? AND month = ?", year, int(month)).
|
||||
Select("SUM(used)").
|
||||
Scan(&totalUsed).Error; err != nil {
|
||||
Select("SUM(used) as total_used").
|
||||
Scan(&nTotalUsed).Error; err != nil {
|
||||
fmt.Println("SQL Error:", err) // 打印 SQL 错误信息
|
||||
return 0
|
||||
}
|
||||
|
||||
|
@ -39,7 +42,7 @@ func GetSmsNumberRemaining() int {
|
|||
nMonthlyLimit = monthlyLimit
|
||||
}
|
||||
|
||||
remaining := nMonthlyLimit - int(totalUsed.Int64)
|
||||
remaining := nMonthlyLimit - nTotalUsed.TotalUsed
|
||||
|
||||
return remaining
|
||||
}
|
||||
|
|
|
@ -535,8 +535,10 @@ func TestMemberExpirationReminder(t *testing.T) {
|
|||
func TestExpireMemberSMSSendDay(t *testing.T) {
|
||||
InitIODBTest()
|
||||
orm.Eloquent = IODBTest
|
||||
nowTime := time.Now()
|
||||
models.ExpireMemberSMSSendDay(1, nowTime)
|
||||
models.ExpireMemberSMSSend()
|
||||
|
||||
//nowTime := time.Now()
|
||||
//models.ExpireMemberSMSSendDay(1, nowTime)
|
||||
}
|
||||
|
||||
func TestCreateInviteMemberReport(t *testing.T) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user