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
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
|
|
}
|