1.为了同步10/19号之前的数据,新增了excel导入相关接口;

2.删除回调通知,和第三方渠道方接口;
This commit is contained in:
chenlin 2024-10-30 15:27:07 +08:00
parent f7ccec1f92
commit c262bbd549

View File

@ -1,12 +1,15 @@
package migumanage
import (
"encoding/csv"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"github.com/go-admin-team/go-admin-core/logger"
"github.com/go-admin-team/go-admin-core/sdk/pkg/response"
"go-admin/app/admin/models"
"go-admin/tools"
"io"
"net/http"
"strings"
"time"
@ -1286,3 +1289,204 @@ func (e MiGuDeployService) AddProduct(c *gin.Context) {
//
// e.OK("", "删除成功")
//}
// ImportExcelToMgOrderHandler 处理Excel文件导入请求
// @Summary 导入订单Excel文件
// @Tags 2024-咪咕-管理后台
// @Accept multipart/form-data
// @Produce json
// @Param file formData file true "Excel文件"
// @Success 200 {object} map[string]string{"message": "导入成功"}
// @Router /api/v1/admin/order/import [post]
func (e MiGuDeployService) ImportExcelToMgOrderHandler(c *gin.Context) {
err := e.MakeContext(c).MakeOrm().Errors
if err != nil {
e.Logger.Error(err)
response.Error(c, http.StatusInternalServerError, err, "创建上下文失败")
return
}
// 从请求中获取文件
file, err := c.FormFile("file")
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "无法读取文件"})
return
}
// 打开上传的文件
fileStream, err := file.Open()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "无法打开文件"})
return
}
defer fileStream.Close()
// 创建 CSV 阅读器
reader := csv.NewReader(fileStream)
reader.LazyQuotes = true
// 跳过 CSV 文件的标题行
if _, err := reader.Read(); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "无法读取CSV标题行"})
return
}
//nRow := 0
// 逐行读取 CSV 并插入数据库
for {
//nRow++
row, err := reader.Read()
if err == io.EOF {
break
}
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "读取CSV文件失败"})
return
}
// 检查数据是否齐全
if len(row) < 4 {
continue // 跳过数据不全的行
}
// 解析订阅时间
subscribeTime, err := time.Parse("2006-01-02 15:04:05", row[3])
if err != nil {
fmt.Printf("解析时间错误: %v\n", err)
continue
}
const cutoffTimeStr = "2024-10-18 18:58:00"
cutoffTime, _ := time.Parse("2006-01-02 15:04:05", cutoffTimeStr)
// 判断是否超过截止时间
if subscribeTime.After(cutoffTime) {
fmt.Printf("跳过超过截止时间的记录: %v\n", subscribeTime)
continue
}
// 将时间转换为 UTC+08:00
// 将时间往前推8小时
localTime := subscribeTime.Add(-8 * time.Hour)
// 创建MgOrder对象
order := models.MgOrderCopy{
ProductID: 1,
ChannelCode: "6015150807",
OrderSerial: models.GetExcelOrderSerial(e.Orm, subscribeTime),
SubscribeTime: &localTime,
PhoneNumber: row[0],
ChannelTradeNo: row[1],
ExternalOrderID: row[2],
State: 1,
}
order.CreatedAt = localTime
order.UpdatedAt = localTime
order.SM4PhoneNumber, _ = tools.SM4Encrypt(models.SM4KEy, order.PhoneNumber)
// 插入到数据库
if err := e.Orm.Create(&order).Error; err != nil {
fmt.Printf("插入订单数据失败: %v\n", err)
continue
}
fmt.Println("order is:", order)
//if nRow > 4 {
// break
//}
}
// 返回成功消息
c.JSON(http.StatusOK, gin.H{"message": "导入成功"})
}
// ImportExcelToMgOrderHandlerUpdate 处理Excel文件导入请求
// @Summary 导入订单Excel退订文件
// @Tags 2024-咪咕-管理后台
// @Accept multipart/form-data
// @Produce json
// @Param file formData file true "Excel文件"
// @Success 200 {object} map[string]string{"message": "导入成功"}
// @Router /api/v1/admin/order/import_update [post]
func (e MiGuDeployService) ImportExcelToMgOrderHandlerUpdate(c *gin.Context) {
err := e.MakeContext(c).MakeOrm().Errors
if err != nil {
e.Logger.Error(err)
response.Error(c, http.StatusInternalServerError, err, "创建上下文失败")
return
}
// 从请求中获取文件
file, err := c.FormFile("file")
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "无法读取文件"})
return
}
// 打开上传的文件
fileStream, err := file.Open()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "无法打开文件"})
return
}
defer fileStream.Close()
// 创建 CSV 阅读器
reader := csv.NewReader(fileStream)
reader.LazyQuotes = true
// 跳过 CSV 文件的标题行
if _, err := reader.Read(); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "无法读取CSV标题行"})
return
}
//nRow := 0
// 逐行读取 CSV 并插入数据库
for {
//nRow++
row, err := reader.Read()
if err == io.EOF {
break
}
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "读取CSV文件失败"})
return
}
// 检查数据是否齐全
if len(row) < 3 {
continue // 跳过数据不全的行
}
// 将时间往前推8小时
//localTime := subscribeTime.Add(-8 * time.Hour)
if !(row[0] != "" && len(row[0]) == 11) {
continue
}
if row[0] == "15812800163" {
fmt.Println("found phone number: 15812800163")
break
}
unsubscribeTime, _ := models.ConvertStringToTime(row[2])
err = e.Orm.Table("mg_order_copy").Where("phone_number = ?", row[0]).Updates(map[string]interface{}{
"state": models.UnsubscribeOK,
"unsubscribe_time": unsubscribeTime,
"updated_at": unsubscribeTime,
}).Error
if err != nil {
fmt.Println("CheckOrderState update mg_order err:", err.Error())
continue
}
//if nRow > 4 {
// break
//}
}
// 返回成功消息
c.JSON(http.StatusOK, gin.H{"message": "导入成功"})
}