516 lines
16 KiB
Go
516 lines
16 KiB
Go
package controller
|
|
|
|
import (
|
|
"database/sql"
|
|
"encoding/json"
|
|
"errors"
|
|
"net/http"
|
|
planBType "planA/planB/type"
|
|
"planA/service"
|
|
serviceMysql "planA/service/mysql"
|
|
"planA/tool"
|
|
toolPdd "planA/tool/pdd"
|
|
_type "planA/type"
|
|
mysqlType "planA/type/mysql"
|
|
"planA/validator"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// GetDelTaskByPage 分页查询 删除任务
|
|
func GetDelTaskByPage(httpMsg http.ResponseWriter, data *http.Request) {
|
|
// 验证表单
|
|
dataVal, createTaskValidatorErr := validator.GetDelTaskValidator(data)
|
|
if createTaskValidatorErr != nil {
|
|
tool.Error(httpMsg, createTaskValidatorErr.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
page, size := tool.SetPage(dataVal.Page, dataVal.Size)
|
|
delTaskArr, total, getDelTaskByPageErr := serviceMysql.GetDelTaskByPage(page, size, "")
|
|
if getDelTaskByPageErr != nil {
|
|
return
|
|
}
|
|
|
|
dataRet := map[string]interface{}{
|
|
"page": page,
|
|
"size": size,
|
|
"total": total,
|
|
"list": delTaskArr,
|
|
}
|
|
tool.Success(httpMsg, dataRet)
|
|
return
|
|
}
|
|
|
|
// GetDelTaskByPageByUserId 分页查询 删除任务-用户
|
|
func GetDelTaskByPageByUserId(httpMsg http.ResponseWriter, data *http.Request) {
|
|
// 验证表单
|
|
dataVal, createTaskValidatorErr := validator.GetDelTaskByUserIdValidator(data)
|
|
if createTaskValidatorErr != nil {
|
|
tool.Error(httpMsg, createTaskValidatorErr.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
page, size := tool.SetPage(dataVal.Page, dataVal.Size)
|
|
delTaskArr, total, getDelTaskByPageErr := serviceMysql.GetDelTaskByPage(page, size, dataVal.UserId)
|
|
if getDelTaskByPageErr != nil {
|
|
return
|
|
}
|
|
|
|
dataRet := map[string]interface{}{
|
|
"page": page,
|
|
"size": size,
|
|
"total": total,
|
|
"list": delTaskArr,
|
|
}
|
|
tool.Success(httpMsg, dataRet)
|
|
return
|
|
}
|
|
|
|
// GetDelTaskDetail 获取删除任务详情列表
|
|
func GetDelTaskDetail(httpMsg http.ResponseWriter, data *http.Request) {
|
|
// 验证表单
|
|
dataVal, createTaskValidatorErr := validator.GetDelTaskDetailValidator(data)
|
|
if createTaskValidatorErr != nil {
|
|
tool.Error(httpMsg, createTaskValidatorErr.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
page, size := tool.SetPage(dataVal.Page, dataVal.Size)
|
|
delTaskArr, total, getDelTaskByPageErr := serviceMysql.GetDelTaskDetailByPage(page, size, dataVal.TaskId, 3)
|
|
if getDelTaskByPageErr != nil {
|
|
return
|
|
}
|
|
|
|
dataRet := map[string]interface{}{
|
|
"page": page,
|
|
"size": size,
|
|
"total": total,
|
|
"list": delTaskArr,
|
|
}
|
|
tool.Success(httpMsg, dataRet)
|
|
|
|
}
|
|
|
|
// CreateTbDelTask 创建淘宝删除任务
|
|
func CreateTbDelTask(httpMsg http.ResponseWriter, data *http.Request) {
|
|
// 验证表单
|
|
dataVal, createTaskValidatorErr := validator.CreateTbDelTaskValidator(data)
|
|
if createTaskValidatorErr != nil {
|
|
tool.Error(httpMsg, createTaskValidatorErr.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
delNum := data.FormValue("del_num")
|
|
taskCount := 0
|
|
if dataVal.TaskType == "1" || dataVal.TaskType == "2" {
|
|
if delNum == "" || delNum == "0" {
|
|
errMsg := "删除数量不能为空与0"
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 将 dataVal.TaskCount 转为 int
|
|
var err error
|
|
taskCount, err = strconv.Atoi(delNum)
|
|
if err != nil {
|
|
errMsg := "任务数量转换失败: " + err.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
}
|
|
delTime := data.FormValue("del_time")
|
|
delTimes := time.Time{}
|
|
if dataVal.TaskType == "3" {
|
|
if delTime == "" || delTime == "0" {
|
|
errMsg := "删除时间不能为空"
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 将 dataVal.DelTime 转为 time.Time
|
|
layout := "2006-01-02 15:04:05" // 常见格式
|
|
var err error
|
|
delTimes, err = time.Parse(layout, delTime)
|
|
if err != nil {
|
|
errMsg := "时间转换失败: " + err.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
}
|
|
|
|
// 将 dataVal.TaskType 转为 int
|
|
taskType, err := strconv.Atoi(dataVal.TaskType)
|
|
if err != nil {
|
|
errMsg := "任务类型转换失败: " + err.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 查询店铺数据
|
|
shopDataStr, err := service.GetTaskShop(dataVal.ShopID)
|
|
if err != nil {
|
|
errMsg := "获取店铺数据失败: shopId " + dataVal.ShopID + " " + err.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
// 解析 json数据
|
|
shopData, err := toolPdd.ParseShopData(shopDataStr)
|
|
if err != nil {
|
|
errMsg := "解析店铺数据失败:" + err.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
if shopData.Shop == nil {
|
|
errMsg := "店铺数据为空"
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
//请求创建任务接口并获取任务 id
|
|
taskId, err := CreateTaskRequest(dataVal.ShopID, dataVal.TaskType)
|
|
if err != nil {
|
|
errMsg := "店铺ID " + dataVal.ShopID + " 淘宝删除任务 请求创建任务接口失败: " + err.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
taskTypes := 0
|
|
if taskType == 1 {
|
|
taskTypes = 5
|
|
} else if taskType == 2 {
|
|
taskTypes = 10
|
|
} else if taskType == 3 {
|
|
taskTypes = 11
|
|
}
|
|
|
|
var priceRange []_type.PriceRange
|
|
priceTemplateRangeStr := shopData.PriceTemplate.RangePrice
|
|
err = json.Unmarshal([]byte(priceTemplateRangeStr), &priceRange)
|
|
if err != nil {
|
|
errMsg := "解析价格模板失败:" + err.Error() + " 原始数据:" + shopData.PriceTemplate.RangePrice
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
createAt := time.Now().Unix()
|
|
taskData, createTaskDataErr := CreateTaskData(taskId, int64(taskTypes), createAt, shopData.Shop, priceRange, shopData.Spec, shopData.ShopDetail, shopData.ShopContext, strconv.Itoa(taskCount), 1, 1, "1")
|
|
if createTaskDataErr != nil {
|
|
errMsg := "创建任务数据失败: " + createTaskDataErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 将 taskData 转为json
|
|
taskDataJson, err := json.Marshal(taskData)
|
|
if err != nil {
|
|
errMsg := "任务数据转换失败: " + err.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
header := string(taskDataJson)
|
|
|
|
createAts := time.Unix(createAt, 0)
|
|
status := 0
|
|
taskCountOver := 0
|
|
// 创建任务
|
|
task := mysqlType.DelTask{
|
|
UserID: &shopData.Shop.CreateBy,
|
|
ShopID: &dataVal.ShopID,
|
|
TaskID: &taskId,
|
|
ShopType: &dataVal.TaskType,
|
|
TaskType: &taskType,
|
|
ShopName: &shopData.Shop.ShopName,
|
|
TaskCount: &taskCount,
|
|
Header: &header,
|
|
CreateAt: &createAts,
|
|
StopAt: &delTimes,
|
|
Status: &status,
|
|
TaskCountOver: &taskCountOver,
|
|
}
|
|
createDelTaskErr := serviceMysql.CreateDelTask(task)
|
|
if createDelTaskErr != nil {
|
|
errMsg := "创建任务失败: " + createDelTaskErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 创建详情表
|
|
createTableIfNotExistsErr := serviceMysql.CreateTableIfNotExists(taskId)
|
|
if createTableIfNotExistsErr != nil {
|
|
errMsg := "创建详情表失败: " + createTableIfNotExistsErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
tool.Success(httpMsg, taskId)
|
|
}
|
|
|
|
// CreateTbDelTaskDetails 插入淘宝删除任务数据
|
|
func CreateTbDelTaskDetails(httpMsg http.ResponseWriter, data *http.Request) {
|
|
|
|
// 验证表单
|
|
dataVal, createTaskValidatorErr := validator.CreateTbDelTaskDetailsValidator(data)
|
|
if createTaskValidatorErr != nil {
|
|
tool.Error(httpMsg, createTaskValidatorErr.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
if dataVal.Status == "" {
|
|
dataVal.Status = "0"
|
|
}
|
|
|
|
//判断任务是否存在
|
|
_, getTaskErr := serviceMysql.GetDelTaskByTaskId(dataVal.TaskID)
|
|
if getTaskErr != nil {
|
|
if errors.Is(getTaskErr, sql.ErrNoRows) || getTaskErr.Error() == "record not found" {
|
|
errMsg := "任务不存在: " + getTaskErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
errMsg := "获取任务失败: " + getTaskErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
// 创建详情表
|
|
createTableIfNotExistsErr := serviceMysql.CreateTableIfNotExists(dataVal.TaskID)
|
|
if createTableIfNotExistsErr != nil {
|
|
errMsg := "创建详情表失败: " + createTableIfNotExistsErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 将 string 类型的 Status 转换为 int64
|
|
var statusInt64 int64
|
|
if dataVal.Status != "" {
|
|
statusInt64, _ = strconv.ParseInt(dataVal.Status, 10, 64)
|
|
}
|
|
|
|
// 转换 GoodsId
|
|
var goodsIdInt64 int64
|
|
if dataVal.GoodsId != "" {
|
|
if val, err := strconv.ParseInt(dataVal.GoodsId, 10, 64); err == nil {
|
|
goodsIdInt64 = val
|
|
}
|
|
}
|
|
|
|
// 转换 TaskID
|
|
var taskIDInt64 int64
|
|
if dataVal.TaskID != "" {
|
|
if val, err := strconv.ParseInt(dataVal.TaskID, 10, 64); err == nil {
|
|
taskIDInt64 = val
|
|
}
|
|
}
|
|
|
|
// 获取当前时间
|
|
createAtTime := time.Unix(time.Now().Unix(), 0)
|
|
createAtStr := time.Now().Format("2006-01-02")
|
|
|
|
// 插入任务详情
|
|
taskDetails := planBType.DelTaskDetail{
|
|
TaskID: &dataVal.TaskID,
|
|
Isbn: &dataVal.Isbn,
|
|
BookName: &dataVal.BookName,
|
|
GoodsID: &goodsIdInt64,
|
|
Status: &statusInt64,
|
|
Err: &dataVal.Err,
|
|
DeleteAt: &createAtTime,
|
|
DeleteDate: &createAtStr,
|
|
CreateAt: &createAtTime,
|
|
}
|
|
insertTbDelTaskDetailsErr := serviceMysql.InsertDelTaskDetail(taskIDInt64, taskDetails)
|
|
if insertTbDelTaskDetailsErr != nil {
|
|
errMsg := "插入任务详情失败: " + insertTbDelTaskDetailsErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
tool.Success(httpMsg, "")
|
|
}
|
|
|
|
// UpdateTbDelTaskDetailsStatus 修改指定淘宝删除任务详情状态
|
|
func UpdateTbDelTaskDetailsStatus(httpMsg http.ResponseWriter, data *http.Request) {
|
|
|
|
// 验证表单
|
|
dataVal, createTaskValidatorErr := validator.UpdateTbDelTaskDetailsStatusValidator(data)
|
|
if createTaskValidatorErr != nil {
|
|
tool.Error(httpMsg, createTaskValidatorErr.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 判断任务是否存在
|
|
_, getTaskErr := serviceMysql.GetDelTaskByTaskId(dataVal.TaskID)
|
|
if getTaskErr != nil {
|
|
if errors.Is(getTaskErr, sql.ErrNoRows) || getTaskErr.Error() == "record not found" {
|
|
errMsg := "任务不存在: " + getTaskErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
errMsg := "获取任务失败: " + getTaskErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 将 dataVal.Status 转为int
|
|
statusInt, err := strconv.Atoi(dataVal.Status)
|
|
if err != nil {
|
|
errMsg := "状态值格式错误"
|
|
tool.Error(httpMsg, errMsg, http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
updateTbDelTaskDetailsStatusErr := serviceMysql.UpdateDelTaskDetailStatus(dataVal.TaskID, dataVal.GoodsId, statusInt, dataVal.Err)
|
|
if updateTbDelTaskDetailsStatusErr != nil {
|
|
errMsg := "修改任务详情状态失败: " + updateTbDelTaskDetailsStatusErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
tool.Success(httpMsg, "")
|
|
}
|
|
|
|
// UpdateTbDelTaskProgress 修改淘宝任务进度
|
|
func UpdateTbDelTaskProgress(httpMsg http.ResponseWriter, data *http.Request) {
|
|
|
|
// 验证表单
|
|
dataVal, createTaskValidatorErr := validator.UpdateTbDelTaskProgressValidator(data)
|
|
if createTaskValidatorErr != nil {
|
|
tool.Error(httpMsg, createTaskValidatorErr.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 判断任务是否存在
|
|
_, getTaskErr := serviceMysql.GetDelTaskByTaskId(dataVal.TaskID)
|
|
if getTaskErr != nil {
|
|
if errors.Is(getTaskErr, sql.ErrNoRows) || getTaskErr.Error() == "record not found" {
|
|
errMsg := "任务不存在: " + getTaskErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
errMsg := "获取任务失败: " + getTaskErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 将 dataVal.Num 转为 int
|
|
numInt, err := strconv.Atoi(dataVal.Num)
|
|
if err != nil {
|
|
errMsg := "进度值格式错误"
|
|
tool.Error(httpMsg, errMsg, http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
updateTbDelTaskProgressErr := serviceMysql.UpdateDelTaskProgress(dataVal.TaskID, numInt)
|
|
if updateTbDelTaskProgressErr != nil {
|
|
errMsg := "修改任务进度失败: " + updateTbDelTaskProgressErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
tool.Success(httpMsg, "")
|
|
}
|
|
|
|
// UpdateTbDelTaskStatus 修改淘宝任务状态
|
|
func UpdateTbDelTaskStatus(httpMsg http.ResponseWriter, data *http.Request) {
|
|
|
|
// 验证表单
|
|
dataVal, createTaskValidatorErr := validator.UpdateTbDelTaskStatusValidator(data)
|
|
if createTaskValidatorErr != nil {
|
|
tool.Error(httpMsg, createTaskValidatorErr.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 判断任务是否存在
|
|
_, getTaskErr := serviceMysql.GetDelTaskByTaskId(dataVal.TaskID)
|
|
if getTaskErr != nil {
|
|
if errors.Is(getTaskErr, sql.ErrNoRows) || getTaskErr.Error() == "record not found" {
|
|
errMsg := "任务不存在: " + getTaskErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
errMsg := "获取任务失败: " + getTaskErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 将 dataVal.Status 转为 int
|
|
statusInt, err := strconv.Atoi(dataVal.Status)
|
|
if err != nil {
|
|
errMsg := "状态值格式错误"
|
|
tool.Error(httpMsg, errMsg, http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
updateTbDelTaskStatusErr := serviceMysql.UpdateDelTaskStatusByTaskId(dataVal.TaskID, statusInt)
|
|
if updateTbDelTaskStatusErr != nil {
|
|
errMsg := "修改任务状态失败: " + updateTbDelTaskStatusErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
tool.Success(httpMsg, "")
|
|
|
|
}
|
|
|
|
// GetTbDelTaskDetailsWait 获取指定任务待执行的任务详情
|
|
func GetTbDelTaskDetailsWait(httpMsg http.ResponseWriter, data *http.Request) {
|
|
// 验证表单
|
|
dataVal, createTaskValidatorErr := validator.GetDelTaskDetailValidator(data)
|
|
if createTaskValidatorErr != nil {
|
|
tool.Error(httpMsg, createTaskValidatorErr.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
page, size := tool.SetPage(dataVal.Page, dataVal.Size)
|
|
delTaskArr, total, getDelTaskByPageErr := serviceMysql.GetDelTaskDetailByPage(page, size, dataVal.TaskId, 0)
|
|
if getDelTaskByPageErr != nil {
|
|
return
|
|
}
|
|
|
|
dataArr := []map[string]interface{}{}
|
|
for _, v := range delTaskArr {
|
|
datas := map[string]interface{}{
|
|
"task_id": v.TaskID,
|
|
"isbn": v.Isbn,
|
|
"book_name": v.BookName,
|
|
"goods_id": v.GoodsID,
|
|
"status": v.Status,
|
|
"create_at": v.CreateAt,
|
|
}
|
|
dataArr = append(dataArr, datas)
|
|
}
|
|
|
|
dataRet := map[string]interface{}{
|
|
"page": page,
|
|
"size": size,
|
|
"total": total,
|
|
"list": dataArr,
|
|
}
|
|
tool.Success(httpMsg, dataRet)
|
|
}
|
|
|
|
// GetTbDelTaskByTaskId 根据任务id 查询任务
|
|
func GetTbDelTaskByTaskId(httpMsg http.ResponseWriter, data *http.Request) {
|
|
// 验证表单
|
|
dataVal, createTaskValidatorErr := validator.TaskIdValidator(data)
|
|
if createTaskValidatorErr != nil {
|
|
tool.Error(httpMsg, createTaskValidatorErr.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// 判断任务是否存在
|
|
task, getTaskErr := serviceMysql.GetDelTaskByTaskId(dataVal.TaskID)
|
|
if getTaskErr != nil {
|
|
if errors.Is(getTaskErr, sql.ErrNoRows) || getTaskErr.Error() == "record not found" {
|
|
errMsg := "任务不存在: " + getTaskErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
errMsg := "获取任务失败: " + getTaskErr.Error()
|
|
tool.Error(httpMsg, errMsg, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
datas := map[string]interface{}{
|
|
"task_id": task.TaskID,
|
|
"shop_id": task.ShopID,
|
|
"task_type": task.TaskType,
|
|
"status": task.Status,
|
|
"task_count": task.TaskCount,
|
|
"task_count_over": task.TaskCountOver,
|
|
"stop_at": task.StopAt,
|
|
"create_at": task.CreateAt,
|
|
}
|
|
|
|
tool.Success(httpMsg, datas)
|
|
}
|