From 69748b530bc580bf2ba719bdd1e207749dad9cd8 Mon Sep 17 00:00:00 2001 From: chenlin Date: Wed, 7 May 2025 12:07:06 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E7=94=A8=E6=88=B7=E7=95=99=E5=AD=98?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E4=BC=98=E5=8C=96=EF=BC=8C=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?sql=E6=96=B0=E5=A2=9E=E4=BA=A7=E5=93=81=E5=92=8C=E6=B8=A0?= =?UTF-8?q?=E9=81=93ID=EF=BC=9B=202=E3=80=81=E7=94=A8=E6=88=B7=E7=95=99?= =?UTF-8?q?=E5=AD=98=E8=AE=B0=E5=BD=95=EF=BC=88=E6=8C=89=E5=A4=A9=EF=BC=89?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=8C=E6=9F=A5=E8=AF=A2=E8=AF=A5=E5=A4=A9?= =?UTF-8?q?=E7=9A=84=E7=95=99=E5=AD=98=E7=94=A8=E6=88=B7=E6=95=B0=E6=97=B6?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=A7=E5=93=81=E5=92=8C=E6=B8=A0=E9=81=93?= =?UTF-8?q?ID=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/migumanage/migu_admin.go | 26 ++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/app/admin/apis/migumanage/migu_admin.go b/app/admin/apis/migumanage/migu_admin.go index 32a4914..0e5b9d0 100644 --- a/app/admin/apis/migumanage/migu_admin.go +++ b/app/admin/apis/migumanage/migu_admin.go @@ -1399,7 +1399,7 @@ func (e MiGuDeployService) UserRetentionList(c *gin.Context) { // 查询对应月份的最近2个月1号留存数据 // 现在遍历 retentionList,查询每个月份对应的最近1个月和最近2个月的留存数据 - for i := range retentionList { + for i, item := range retentionList { // 获取当前记录的 RetentionMonth year, month, _ := models.ParseYearMonth(retentionList[i].RetentionMonth) @@ -1420,8 +1420,12 @@ func (e MiGuDeployService) UserRetentionList(c *gin.Context) { lastMonthRetentionCount = 0 } else { err = e.Orm.Model(&models.MgOrder{}). - Where("state = 1 AND created_at between ? and ?", currentMonthFirstDay, currentMonthNextFirstDay). - Or("state = 2 AND unsubscribe_time > ? AND created_at between ? and ?", lastMonthSecondDay, currentMonthFirstDay, currentMonthNextFirstDay). + Where( + e.Orm. + Where("state = 1 AND created_at BETWEEN ? AND ?", currentMonthFirstDay, currentMonthNextFirstDay). + Or("state = 2 AND unsubscribe_time > ? AND created_at BETWEEN ? AND ?", lastMonthSecondDay, currentMonthFirstDay, currentMonthNextFirstDay), + ). + Where("product_id = ? AND channel_code = ?", item.ProductID, item.ChannelCode). Count(&lastMonthRetentionCount).Error } @@ -1433,8 +1437,12 @@ func (e MiGuDeployService) UserRetentionList(c *gin.Context) { lastTwoMonthRetentionCount = 0 } else { err = e.Orm.Model(&models.MgOrder{}). - Where("state = 1 AND created_at between ? and ?", currentMonthFirstDay, currentMonthNextFirstDay). - Or("state = 2 AND unsubscribe_time > ? AND created_at between ? and ?", lastTwoMonthSecondDay, currentMonthFirstDay, currentMonthNextFirstDay). + Where( + e.Orm. + Where("state = 1 AND created_at BETWEEN ? AND ?", currentMonthFirstDay, currentMonthNextFirstDay). + Or("state = 2 AND unsubscribe_time > ? AND created_at BETWEEN ? AND ?", lastTwoMonthSecondDay, currentMonthFirstDay, currentMonthNextFirstDay), + ). + Where("product_id = ? AND channel_code = ?", item.ProductID, item.ChannelCode). Count(&lastTwoMonthRetentionCount).Error } @@ -1619,7 +1627,9 @@ func (e MiGuDeployService) UserDayRetentionList(c *gin.Context) { Where("state = 1 AND created_at between ? and ?", currentMonthFirstDay, currentMonthNextFirstDay). Where("product_id = ?", req.SkuCode). // 添加SkuCode条件 Where("channel_code = ?", req.Channel). // 添加Channel条件 - Or("state = 2 AND unsubscribe_time > ? AND created_at between ? and ?", date+" 23:59:59", currentMonthFirstDay, currentMonthNextFirstDay). + Or("state = 2 AND unsubscribe_time > ? AND created_at between ? and ? AND product_id = ? "+ + "and channel_code = ?", date+" 23:59:59", + currentMonthFirstDay, currentMonthNextFirstDay, req.SkuCode, req.Channel). Count(&retainedUserCount).Error // 查询该天的退订用户数 @@ -1683,7 +1693,9 @@ func (e MiGuDeployService) UserDayRetentionList(c *gin.Context) { Where("state = 1 AND created_at between ? and ?", currentMonthFirstDay, currentMonthNextFirstDay). Where("product_id = ?", req.SkuCode). // 添加SkuCode条件 Where("channel_code = ?", req.Channel). // 添加Channel条件 - Or("state = 2 AND unsubscribe_time > ? AND created_at between ? and ?", date+" 23:59:59", currentMonthFirstDay, currentMonthNextFirstDay). + Or("state = 2 AND unsubscribe_time > ? AND created_at between ? and ? AND product_id = ? "+ + "and channel_code = ?", date+" 23:59:59", + currentMonthFirstDay, currentMonthNextFirstDay, req.SkuCode, req.Channel). Count(&retainedUserCount).Error //retainedUserCount, localErr = getRetentionForDay(date, e.Orm, currentMonthFirstDay, currentMonthNextFirstDay)