209 lines
5.4 KiB
Go
209 lines
5.4 KiB
Go
package controllers
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"psi/constant"
|
|
"psi/database"
|
|
"psi/service"
|
|
"psi/utils"
|
|
"strconv"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type WangdianApi struct{}
|
|
|
|
func (i *WangdianApi) CreatePurchaseOrder(c *gin.Context) {
|
|
raw := c.PostForm("purchase_order_id")
|
|
if raw == "" {
|
|
raw = c.Query("purchase_order_id")
|
|
}
|
|
purchaseOrderID, err := strconv.ParseInt(raw, 10, 64)
|
|
if err != nil || purchaseOrderID <= 0 {
|
|
utils.FailWithRequestLog(constant.LoggerChannelRequest, "参数错误: purchase_order_id 必须为正整数", nil, c, nil)
|
|
return
|
|
}
|
|
|
|
resp, err := service.PushPurchaseOrder(purchaseOrderID, database.GetDB(c))
|
|
if err != nil {
|
|
utils.FailWithRequestLog(constant.LoggerChannelWork, "推送采购单到旺店通失败: "+err.Error(), err, c, nil)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": resp.Code,
|
|
"message": resp.Message,
|
|
})
|
|
}
|
|
|
|
func (i *WangdianApi) QueryProvider(c *gin.Context) {
|
|
db := database.GetDB(c)
|
|
|
|
taskID, err := service.WrapSyncTask(service.TaskTypeSyncProvider, db, func(taskID int64, db *gorm.DB) {
|
|
if err := service.SyncProvider(db, taskID); err != nil {
|
|
service.FailSyncTask(db, taskID, err.Error())
|
|
log.Printf("[旺店通供应商同步] 异步同步失败: %v", err)
|
|
}
|
|
})
|
|
if err != nil {
|
|
utils.FailWithRequestLog(constant.LoggerChannelWork, err.Error(), err, c, nil)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": 0,
|
|
"message": "供应商同步任务已启动",
|
|
"task_id": taskID,
|
|
})
|
|
}
|
|
|
|
func (i *WangdianApi) QueryWarehouse(c *gin.Context) {
|
|
db := database.GetDB(c)
|
|
|
|
taskID, err := service.WrapSyncTask(service.TaskTypeSyncWarehouse, db, func(taskID int64, db *gorm.DB) {
|
|
if err := service.SyncWarehouse(db, taskID); err != nil {
|
|
service.FailSyncTask(db, taskID, err.Error())
|
|
log.Printf("[旺店通仓库同步] 异步同步失败: %v", err)
|
|
}
|
|
})
|
|
if err != nil {
|
|
utils.FailWithRequestLog(constant.LoggerChannelWork, err.Error(), err, c, nil)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": 0,
|
|
"message": "仓库同步任务已启动",
|
|
"task_id": taskID,
|
|
})
|
|
}
|
|
|
|
func (i *WangdianApi) QueryGoods(c *gin.Context) {
|
|
db := database.GetDB(c)
|
|
startTime := c.Query("start_time")
|
|
endTime := c.Query("end_time")
|
|
aboutID := c.GetInt64("about_id")
|
|
|
|
taskID, err := service.WrapSyncTask(service.TaskTypeSyncGoods, db, func(taskID int64, db *gorm.DB) {
|
|
if err := service.SyncGoods(db, taskID, startTime, endTime, aboutID); err != nil {
|
|
service.FailSyncTask(db, taskID, err.Error())
|
|
log.Printf("[旺店通商品同步] 异步同步失败: %v", err)
|
|
}
|
|
})
|
|
if err != nil {
|
|
utils.FailWithRequestLog(constant.LoggerChannelWork, err.Error(), err, c, nil)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": 0,
|
|
"message": "商品同步任务已启动",
|
|
"task_id": taskID,
|
|
})
|
|
}
|
|
|
|
func (i *WangdianApi) GoodsPush(c *gin.Context) {
|
|
goodsListJSON := c.PostForm("goods_list")
|
|
if goodsListJSON == "" {
|
|
goodsListJSON = c.Query("goods_list")
|
|
}
|
|
if goodsListJSON == "" {
|
|
utils.FailWithRequestLog(constant.LoggerChannelRequest, "参数错误: goods_list 不能为空", fmt.Errorf("goods_list为空"), c, nil)
|
|
return
|
|
}
|
|
|
|
resp, err := service.PushGoods(goodsListJSON)
|
|
if err != nil {
|
|
utils.FailWithRequestLog(constant.LoggerChannelWork, "推送货品到旺店通失败: "+err.Error(), err, c, nil)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": resp.Code,
|
|
"message": resp.Message,
|
|
})
|
|
}
|
|
|
|
func (i *WangdianApi) GetSyncTaskStatus(c *gin.Context) {
|
|
db := database.GetDB(c)
|
|
taskType := c.Query("task_type")
|
|
if taskType == "" {
|
|
taskType = c.Param("task_type")
|
|
}
|
|
if taskType == "" {
|
|
utils.FailWithRequestLog(constant.LoggerChannelRequest, "参数错误: task_type 不能为空", nil, c, nil)
|
|
return
|
|
}
|
|
|
|
task, err := service.GetSyncTaskStatus(db, taskType)
|
|
if err != nil {
|
|
utils.FailWithRequestLog(constant.LoggerChannelWork, "查询任务状态失败: "+err.Error(), err, c, nil)
|
|
return
|
|
}
|
|
|
|
if task == nil {
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": 0,
|
|
"message": "暂无任务记录",
|
|
"data": nil,
|
|
})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": 0,
|
|
"message": "ok",
|
|
"data": task,
|
|
})
|
|
}
|
|
|
|
func (i *WangdianApi) CancelSyncTask(c *gin.Context) {
|
|
db := database.GetDB(c)
|
|
taskIDStr := c.PostForm("task_id")
|
|
if taskIDStr == "" {
|
|
taskIDStr = c.Query("task_id")
|
|
}
|
|
taskID, err := strconv.ParseInt(taskIDStr, 10, 64)
|
|
if err != nil || taskID <= 0 {
|
|
utils.FailWithRequestLog(constant.LoggerChannelRequest, "参数错误: task_id 必须为正整数", nil, c, nil)
|
|
return
|
|
}
|
|
|
|
if err := service.CancelSyncTask(db, taskID); err != nil {
|
|
utils.FailWithRequestLog(constant.LoggerChannelWork, "取消任务失败: "+err.Error(), err, c, nil)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": 0,
|
|
"message": "任务已取消",
|
|
})
|
|
}
|
|
|
|
func (i *WangdianApi) ListSyncTask(c *gin.Context) {
|
|
db := database.GetDB(c)
|
|
taskType := c.Query("task_type")
|
|
pageNo, _ := strconv.Atoi(c.DefaultQuery("page_no", "1"))
|
|
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20"))
|
|
|
|
tasks, total, err := service.ListSyncTask(db, taskType, pageNo, pageSize)
|
|
if err != nil {
|
|
utils.FailWithRequestLog(constant.LoggerChannelWork, "查询同步任务列表失败: "+err.Error(), err, c, nil)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": 0,
|
|
"message": "ok",
|
|
"data": gin.H{
|
|
"list": tasks,
|
|
"total": total,
|
|
"page_no": pageNo,
|
|
"page_size": pageSize,
|
|
},
|
|
})
|
|
}
|