mh_goadmin_server/app/admin/apis/recyclecardmanage/recycle_card.go
chenlin 9207440c53 1.修复缺陷,优化代码:
(1)库存调拨、库存变动中商品都拆分为单条数据;
(2)编辑商品资料时同步更新库存表和库存商品表的商品编号;
(3)租卡相关接口添加权限校验,只能查询对应门店权限的数据;
2024-05-31 17:51:41 +08:00

326 lines
9.5 KiB
Go

package recyclecardmanage
import (
"errors"
"fmt"
"github.com/codinl/go-logger"
"github.com/gin-gonic/gin"
"go-admin/app/admin/apis/pay"
"go-admin/app/admin/models"
orm "go-admin/common/global"
"go-admin/pkg/jwtauth"
"go-admin/tools/app"
"net/http"
"time"
)
// RecycleCardOrderList 查询小程序回收订单
// @Summary 查询小程序回收订单
// @Tags 租卡系统-订单管理
// @Produce json
// @Accept json
// @Param request body models.RecycleCardOrderListReq true "查询小程序回收订单"
// @Success 200 {object} models.RecycleCardOrderListRsp
// @Router /api/v1/recycle_card/order/list [post]
func RecycleCardOrderList(c *gin.Context) {
req := models.RecycleCardOrderListReq{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("ShouldBindJSON err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
sysUser, err := models.GetSysUserByCtx(c)
//data, _ := c.Get(jwtauth.JwtPayloadKey)
//fmt.Println("data:", data)
//sysUid, ok := data.(jwtauth.MapClaims)["identity"]
//if !ok {
// logger.Error("sys uid err")
// app.Error(c, http.StatusInternalServerError, errors.New("sys uid err"), "查询失败")
// return
//}
//sysUser, err := models.GetSysUser(sysUid)
//if err != nil {
// logger.Error("sys user err:", err)
// app.Error(c, http.StatusInternalServerError, err, "查询失败")
// return
//}
req.CooperativeBusinessId = sysUser.CooperativeBusinessId
//uc = &auth.UserClaims{Uid: 8588420}
rsp, err := req.List(c)
if err != nil {
logger.Error("game cassette err", err)
app.Error(c, http.StatusInternalServerError, err, "查询失败"+err.Error())
return
}
//ret := map[string]interface{}{
// "list": orders,
// "cur_page": req.PageIdx,
// "count": count,
//}
app.OK(c, rsp, "")
return
}
func RecycleCardOrderDetail(c *gin.Context) {
req := struct {
OrderId uint32 `json:"order_id" binding:"required"`
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("ShouldBindJSON err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
//uc = &auth.UserClaims{Uid: 8588420}
var order models.RecycleCardOrder
err := orm.Eloquent.Table("recycle_card_order").Where("id=?", req.OrderId).Find(&order).Error
//err := model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).One(&order)
if err != nil {
logger.Error("game cassette err", err)
app.Error(c, http.StatusInternalServerError, err, "查询失败")
return
}
user, err := models.GetUserInfoByUid(order.Uid)
if err != nil {
logger.Error("user err", err)
app.Error(c, http.StatusInternalServerError, err, "查询失败")
return
}
order.UserInfo = &user
store, err := models.GetStore(order.StoreId)
if err != nil {
logger.Error("order store err:", err)
app.Error(c, http.StatusInternalServerError, err, "查询失败")
return
}
order.Store = store
app.OK(c, order, "")
return
}
func RecycleCardOrderCheck(c *gin.Context) {
req := struct {
OrderId uint32 `json:"order_id" binding:"required"`
CheckType uint32 `json:"check_type"`
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("ShouldBindJSON err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
//uc = &auth.UserClaims{Uid: 8588420}
var order models.RecycleCardOrder
err := orm.Eloquent.Table("recycle_card_order").Where("id=?", req.OrderId).Find(&order).Error
if err != nil {
logger.Error("recycle card order err:", err)
return
}
if order.State != 1 {
logger.Error("order state err")
app.Error(c, http.StatusInternalServerError, err, "操作失败")
return
}
if req.CheckType == 1 {
err := orm.Eloquent.Table("recycle_card_order").Where("id=?", req.OrderId).Updates(map[string]interface{}{
"state": 3,
"check_time": time.Now(),
}).Error
//err := model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).GetUpdater().SetState(3).Update()
if err != nil {
logger.Error("recycle card order err:", err)
app.Error(c, http.StatusInternalServerError, err, "操作失败")
return
}
}
app.OK(c, nil, "操作成功")
return
}
func RecycleCardOrderImageUpdate(c *gin.Context) {
req := struct {
OrderId uint32 `json:"order_id" binding:"required"`
Images string `json:"images" binding:"required"`
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("ShouldBindJSON err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
data, _ := c.Get(jwtauth.JwtPayloadKey)
mapClaims := data.(jwtauth.MapClaims)
sysUid := float64(0)
if v, ok := mapClaims["identity"]; ok {
sysUid = v.(float64)
}
fmt.Println("sysUid:", sysUid)
//req.SysUid = fmt.Sprintf("%.0f", sysUid)
var sysUser models.SysUser
err := orm.Eloquent.Table("sys_user").Where("user_id=?", uint32(sysUid)).Find(&sysUser).Error
if err != nil {
logger.Error("sys user err:", err)
app.Error(c, http.StatusInternalServerError, err, "操作失败")
return
}
var order models.RecycleCardOrder
err = orm.Eloquent.Table("recycle_card_order").Where("id=?", req.OrderId).Find(&order).Error
//err := models.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).One(&order)
if err != nil {
logger.Error("order err:%#v", err)
app.Error(c, http.StatusInternalServerError, err, "操作失败")
return
}
if order.State != 1 {
logger.Error("order state err")
app.Error(c, http.StatusInternalServerError, err, "状态错误")
return
}
userInfo, err := models.GetUserInfoByUid(order.Uid)
if err != nil {
logger.Error("user info err:", err)
app.Error(c, http.StatusInternalServerError, err, "操作失败")
return
}
//order.Price = 40 // TODO
transfer, err := pay.Transfer(order.Price, userInfo.WxOpenID, "回收卡带")
if err != nil {
logger.Error("transfer err:", err)
app.Error(c, http.StatusInternalServerError, err, "操作失败")
return
}
err = orm.Eloquent.Table("recycle_card_order").Where("id=?", req.OrderId).Updates(map[string]interface{}{
"images": req.Images,
"state": 2,
"check_time": time.Now(),
"retrieve_state": 1,
}).Error
//err = model.NewRecycleCardOrderQuerySet(model.DB).IDEq(req.OrderId).GetUpdater().
// SetImages(req.Images).Update()
if err != nil {
logger.Error("game cassette err", err)
app.Error(c, http.StatusInternalServerError, err, "操作失败")
return
}
fundRecord := &models.FundRecord{
Uid: order.Uid,
FundType: models.FundTypeRecycleCard,
Amount: int64(order.Price) * (-1),
OutTradeNo: transfer.PartnerTradeNo,
PaymentNo: transfer.PaymentNo,
Status: 2,
Remark: "回收卡带",
//TransactionId: ,
}
err = orm.Eloquent.Create(fundRecord).Error
if err != nil {
logger.Error("create fund record err:", err)
}
operationLog := &models.OperationLog{
//Uid: assistant.Uid,
SysUid: uint32(sysUser.UserId),
Description: "回收卡带转款",
OperationType: models.OperationTypeRecycleCardOrderImageUpdate,
CorrelationId: order.ID,
CorrelationName: models.LogCorrelationRecycleCardOrderId,
StoreId: uint32(sysUser.StoreId),
StoreName: sysUser.StoreName,
CooperativeName: sysUser.CooperativeName,
CooperativeBusinessId: sysUser.CooperativeBusinessId,
}
operationLog.AddLog()
app.OK(c, nil, "操作成功")
return
}
func RecycleCardConfigUpdate(c *gin.Context) {
req := models.RecycleCardConfig{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("ShouldBindJSON err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
if req.RebateRate < 0 || req.RebateRate > 10000 {
logger.Error("rebate rate err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
config, err := models.RecycleCardConfigUpdate(req)
if err != nil {
logger.Error("update config err:%#v", err)
app.Error(c, http.StatusInternalServerError, err, "操作失败")
}
app.OK(c, config, "操作成功")
return
}
func RecycleCardConfigInfo(c *gin.Context) {
//req := struct {
// OrderId uint32 `json:"order_id" binding:"required"`
// Images string `json:"images" binding:"required"`
//}{}
//if c.ShouldBindJSON(&req) != nil {
// logger.Error("ShouldBindJSON err")
// app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
// return
//}
config, err := models.RecycleCardConfigInfo()
if err != nil {
logger.Error("update config err:%#v", err)
app.Error(c, http.StatusInternalServerError, err, "操作失败")
}
app.OK(c, config, "操作成功")
return
}
func RecycleCardOrderRetrieve(c *gin.Context) {
req := struct {
OrderId uint32 `json:"order_id" binding:"required"`
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("ShouldBindJSON err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
var order models.RecycleCardOrder
err := orm.Eloquent.Table("recycle_card_order").Where("id=?", req.OrderId).Find(&order).Error
if err != nil {
logger.Error("order err:%#v", err)
app.Error(c, http.StatusInternalServerError, err, "操作失败")
return
}
if order.State != 2 {
logger.Error("order state err")
app.Error(c, http.StatusInternalServerError, err, "状态错误")
return
}
err = orm.Eloquent.Table("recycle_card_order").Where("id=?", req.OrderId).Updates(map[string]interface{}{
"retrieve_state": 2,
"retrieve_time": time.Now(),
}).Error
if err != nil {
logger.Error("recycle card order err:", err)
app.Error(c, http.StatusInternalServerError, err, "操作失败")
return
}
app.OK(c, nil, "操作成功")
return
}