You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
4.5 KiB

package jyy
import (
"fmt"
"recook/internal/v2/logic/manage/after"
"recook/internal/v2/logic/manage/order"
"recook/internal/v2/model/gys/user"
"recook/internal/v2/model/jyy"
after2 "recook/internal/v2/model/recook/after"
manage2 "recook/internal/v2/model/recook/manage"
manage "recook/internal/v2/model/recook/order"
"time"
"git.oa00.com/go/mysql"
"github.com/golangkit/formatime"
"github.com/shopspring/decimal"
"gorm.io/gorm"
)
type OrderEntry struct {
OrderID uint `json:"order_id" validate:"required"`
}
func (o logic) OrderCancel(args OrderEntry, u manage2.RecookManageUserInfoModel) (err error) {
// 发起未发货售后,并退款
var od manage.RecookOrderInfoModel
mysql.Db.Preload("OrderSku").Preload("After").First(&od, "id = ?", args.OrderID)
if od.OrderType != 2 {
err = fmt.Errorf("不是批发订单无法取消")
return
}
if len(od.After) != 0 {
err = fmt.Errorf("已发起售后仅退款,请转到售后")
return
}
if od.PayTime.IsZero() {
if err = mysql.Db.Model(&od).Updates(manage.RecookOrderInfoModel{Status: 2}).Error; err != nil {
return err
}
return
}
ids := make([]uint, 0)
if err = mysql.Db.Transaction(func(tx *gorm.DB) error {
for _, v := range od.OrderSku {
afs := after2.RecookAfterSalesGoodsModel{
AncestorId: v.AncestorId,
ParentId: v.ParentId,
SharerId: v.SharerId,
UserId: v.UserId,
UserRole: 0,
OrderId: v.OrderId,
OrderGoodsId: v.Id,
VendorId: v.VendorId,
VendorName: v.VendorName,
BrandName: v.BrandName,
CategoryName: v.CategoryName,
GoodsId: v.GoodsId,
GoodsName: v.GoodsName,
SkuName: v.SkuName,
SkuCode: v.SkuCode,
MainPhotoUrl: v.MainPhotoURL,
Quantity: v.Quantity,
OrderTime: v.OrderTime,
OrderTotalAmount: od.ActualTotalAmount,
RefundAmount: v.ActualAmount,
RefundCoin: decimal.Zero,
TradeNo: od.TradeNo,
PayMethod: od.PayMethod,
IsShip: v.ExpressStatus,
AssType: 1,
ReturnStatus: 1,
ApplyTime: formatime.NewSecondNow(),
RefundNo: fmt.Sprintf("%d_%vA%d", time.Now().Unix(), od.TradeNo, v.Id),
}
if e := tx.Create(&afs).Error; e != nil {
return e
}
ids = append(ids, afs.Id)
lo := after2.RecookAfterSalesLogsModel{
AsID: afs.Id,
Title: "系统申请仅退款",
Content: "退款原因:系统自动发起" + "|退款金额:" + (afs.RefundAmount).String(),
CTime: formatime.Second{},
User: u.Name,
UserId: u.Id,
}
if e := tx.Create(&lo).Error; e != nil {
return e
}
}
return nil
}); err != nil {
return
}
for _, v := range ids {
req := after.UpdateOrderCheckStatusReq{
AsID: v,
Opinion: 1,
}
if err = after.Logic.Review(&req, u); err != nil {
return err
}
}
return
}
type OrderConfirmReq struct {
OrderGoodsID uint `json:"order_goods_id" validate:"required"`
Amount decimal.Decimal `json:"amount"`
Photo string `json:"photo"`
Reason string `json:"reason"`
}
func (o OrderConfirmReq) TableName() string {
return "jyy_order_make_up"
}
func (o logic) OrderConfirm(args OrderConfirmReq) (err error) {
// 发货, 只修改状态, 没有物流信息
var ods manage.RecookOrderGoodsDetailModel
mysql.Db.First(&ods, "id = ?", args.OrderGoodsID)
var od manage.RecookOrderInfoModel
mysql.Db.First(&od, "id = ?", ods.OrderId)
if od.OrderType != 2 {
err = fmt.Errorf("不是批发订单无法确认发货")
return
}
var u user.GysUsersModel
mysql.Db.First(&u, "id = ?", ods.VendorId)
if err = order.Expresslogic.Update(u, args.OrderGoodsID, nil); err != nil {
return
}
return
}
func (o logic) OrderMakeUp(args OrderConfirmReq) (err error) {
// 补偿订单
err = mysql.Db.Transaction(func(tx *gorm.DB) error {
if e := mysql.Db.Create(&args).Error; err != nil {
return e
}
if e := mysql.Db.Table((&manage.RecookOrderGoodsDetailModel{}).TableName()).Where("id = ?", args.OrderGoodsID).
Update("make_up_status", 1).
Error; e != nil {
return e
}
return nil
})
return
}
func (o logic) OrderMakeUpGet(args OrderConfirmReq) (res OrderConfirmReq) {
mysql.Db.First(&res, "order_goods_id", args.OrderGoodsID)
return
}
func (o logic) GetContact() (res jyy.Contact) {
mysql.Db.First(&res)
return
}
func (o logic) UpdateContact(args jyy.Contact) error {
return mysql.Db.Table(args.TableName()).Where("id = ?", args.ID).Updates(args).Error
}