|
|
package order
|
|
|
|
|
|
import (
|
|
|
"errors"
|
|
|
"log"
|
|
|
"recook/internal/api/manage/excel"
|
|
|
"recook/internal/cache"
|
|
|
"recook/internal/service"
|
|
|
"recook/internal/v2/model/gys/user"
|
|
|
manage2 "recook/internal/v2/model/recook/express"
|
|
|
manage "recook/internal/v2/model/recook/order"
|
|
|
"strings"
|
|
|
|
|
|
"github.com/360EntSecGroup-Skylar/excelize/v2"
|
|
|
"github.com/golangkit/formatime"
|
|
|
"github.com/jinzhu/gorm"
|
|
|
)
|
|
|
|
|
|
const (
|
|
|
ExpressItemStatusFalse = 0 // 发货失败
|
|
|
ExpressItemStatusTrue = 1 // 发货成功
|
|
|
)
|
|
|
|
|
|
var Expresslogic = &expressLogic{}
|
|
|
|
|
|
type expressLogic struct {
|
|
|
}
|
|
|
|
|
|
// @Style 查询快递信息
|
|
|
func (e *expressLogic) Query(orderGoodsId uint) (result []service.Packet, err error) {
|
|
|
result = []service.Packet{}
|
|
|
recookOrderGoodsDetailModel := &manage.RecookOrderGoodsDetailModel{}
|
|
|
orderGoodsDetail := recookOrderGoodsDetailModel.FindById(orderGoodsId)
|
|
|
|
|
|
recookOrderAddrModel := &manage.RecookOrderAddrModel{}
|
|
|
orderAddr := recookOrderAddrModel.FindByOrderId(orderGoodsDetail.OrderId)
|
|
|
|
|
|
recookOrderGoodsExpressModel := &manage.RecookOrderGoodsExpressModel{}
|
|
|
orderGoodsExpress := recookOrderGoodsExpressModel.FindByOrderGoodsId(orderGoodsDetail.Id)
|
|
|
|
|
|
for _, express := range orderGoodsExpress {
|
|
|
pac, err := service.QueryPackage(orderAddr.Mobile, express.ExpressCompCode, express.ExpressNo)
|
|
|
if err != nil {
|
|
|
return result, err
|
|
|
}
|
|
|
|
|
|
pac.Name = express.ExpressCompName
|
|
|
pac.No = express.ExpressNo
|
|
|
pac.PicUrls = []string{}
|
|
|
|
|
|
result = append(result, pac)
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
type ExpressInfo struct {
|
|
|
ExpressCompName string `json:"expressCompName" form:"expressCompName"`
|
|
|
ExpressNo string `json:"expressNo" form:"expressNo"`
|
|
|
}
|
|
|
|
|
|
// @Style 修改快递信息
|
|
|
func (e *expressLogic) Update(user user.GysUsersModel, orderGoodsId uint, express []ExpressInfo) error {
|
|
|
userId := user.Id
|
|
|
if user.MainId != 0 {
|
|
|
userId = user.MainId
|
|
|
}
|
|
|
recookOrderGoodsDetailModel := &manage.RecookOrderGoodsDetailModel{}
|
|
|
orderGoodsDetail := recookOrderGoodsDetailModel.FindById(orderGoodsId)
|
|
|
return e.Express(userId, user.Username, orderGoodsDetail, express)
|
|
|
}
|
|
|
|
|
|
// @Style 统一处理订单发货信息
|
|
|
func (e *expressLogic) Express(userId uint, userName string, orderGoodsDetail manage.RecookOrderGoodsDetailModel, express []ExpressInfo) error {
|
|
|
if orderGoodsDetail.Id == 0 {
|
|
|
return errors.New("记录不存在")
|
|
|
}
|
|
|
|
|
|
if orderGoodsDetail.VendorId != userId {
|
|
|
return errors.New("记录不匹配")
|
|
|
}
|
|
|
if orderGoodsDetail.ExpressStatus == manage.RecookOrderInfoExpressStatusComp {
|
|
|
return errors.New("已收货")
|
|
|
}
|
|
|
if orderGoodsDetail.IsClosed == manage.RecookOrderInfoIsClosedTrue {
|
|
|
return errors.New("已关闭")
|
|
|
}
|
|
|
recookOrderGoodsDetailModel := &manage.RecookOrderGoodsDetailModel{}
|
|
|
if err := recookOrderGoodsDetailModel.Transaction(func(tx *gorm.DB) error {
|
|
|
recookOrderInfoModel := &manage.RecookOrderInfoModel{}
|
|
|
recookOrderInfoModel.SetDb(tx)
|
|
|
//载入快递数据
|
|
|
if err := recookOrderInfoModel.UpdateById(orderGoodsDetail.OrderId, &manage.RecookOrderInfoModel{
|
|
|
////更改快递已发货状态 订单表更新状态
|
|
|
ExpressStatus: manage.RecookOrderInfoExpressStatusIng,
|
|
|
}); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
recookOrderGoodsExpressModel := &manage.RecookOrderGoodsExpressModel{}
|
|
|
recookOrderGoodsExpressModel.SetDb(tx)
|
|
|
|
|
|
if err := recookOrderGoodsExpressModel.DeleteByOrderGoodsId(orderGoodsDetail.Id); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
flag := true
|
|
|
for _, info := range express {
|
|
|
log.Println(info.ExpressCompName, info.ExpressNo)
|
|
|
if info.ExpressCompName == "" || info.ExpressNo == "" {
|
|
|
continue
|
|
|
}
|
|
|
//expressCompCode := cache.GetExpressCompCode(info.ExpressCompName)
|
|
|
//log.Println(expressCompCode)
|
|
|
//if expressCompCode == "" {
|
|
|
// continue
|
|
|
//}
|
|
|
|
|
|
expressInfo := manage.RecookOrderGoodsExpressModel{
|
|
|
OrderId: orderGoodsDetail.OrderId,
|
|
|
ExpressTime: formatime.NewSecondNow(),
|
|
|
ExpressCompName: info.ExpressCompName,
|
|
|
ExpressCompCode: cache.GetExpressCompCode(info.ExpressCompName),
|
|
|
ExpressNo: info.ExpressNo,
|
|
|
OrderGoodsId: orderGoodsDetail.Id,
|
|
|
}
|
|
|
recookOrderGoodsExpressModel.Create(&expressInfo)
|
|
|
if expressInfo.Id == 0 {
|
|
|
flag = false
|
|
|
return errors.New("网络异常")
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if !flag {
|
|
|
return errors.New("快递信息错误")
|
|
|
}
|
|
|
recookOrderGoodsDetailModel.SetDb(tx)
|
|
|
if err := recookOrderGoodsDetailModel.UpdateById(orderGoodsDetail.Id, userId, &manage.RecookOrderGoodsDetailModel{
|
|
|
ExpressStatus: manage.RecookOrderGoodsDetailExpressStatusTrue,
|
|
|
}); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
// 发货记录
|
|
|
if orderGoodsDetail.ExpressStatus == manage.RecookOrderGoodsDetailExpressStatusNone {
|
|
|
if err := OrderLogic.Logs(orderGoodsDetail.Id, manage.RecookOrderGoodsDetailLogsTypeOrderExpress, "操作员:"+userName, "-"); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// // 订单商品发货钩子
|
|
|
// if orderGoodsDetail.ExpressStatus == manage.RecookOrderGoodsDetailExpressStatusNone {
|
|
|
// if err := hook.OrderHook.Express(&orderGoodsDetail); err != nil {
|
|
|
// return err
|
|
|
// }
|
|
|
// }
|
|
|
return nil
|
|
|
}); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
// @Style 获取快递公司筛选
|
|
|
func (e *expressLogic) Select() []manage2.RecookExpressCompanyModel {
|
|
|
recookExpressCompanyModel := &manage2.RecookExpressCompanyModel{}
|
|
|
return recookExpressCompanyModel.All()
|
|
|
}
|
|
|
|
|
|
type ExpressItem struct {
|
|
|
Id uint `json:"id"`
|
|
|
OrderId uint `json:"orderId"`
|
|
|
GoodsName string `json:"goodsName"`
|
|
|
SkuName string `json:"skuName"`
|
|
|
ExpressCompanyName string `json:"expressCompanyName"`
|
|
|
ExpressNo string `json:"expressNo"`
|
|
|
Status *int
|
|
|
ErrMsg *string
|
|
|
}
|
|
|
|
|
|
type ExpressResult struct {
|
|
|
ExpressCompany map[string]int `json:"expressCompany"`
|
|
|
ExpressItem []*ExpressItem `json:"expressItem"`
|
|
|
OrderGoodsID []uint `json:"-"`
|
|
|
}
|
|
|
|
|
|
// @Style 批量发货
|
|
|
func (e *expressLogic) MulUpdate(user user.GysUsersModel, exl *excelize.File) (result ExpressResult) {
|
|
|
result = ExpressResult{
|
|
|
ExpressCompany: map[string]int{},
|
|
|
ExpressItem: []*ExpressItem{},
|
|
|
}
|
|
|
|
|
|
userId := user.Id
|
|
|
|
|
|
if user.MainId != 0 {
|
|
|
userId = user.MainId
|
|
|
}
|
|
|
allRows, _ := exl.GetRows(excel.SheetName) // 获取所有的行
|
|
|
recookOrderGoodsDetailModel := &manage.RecookOrderGoodsDetailModel{}
|
|
|
for _, row := range allRows[3:] {
|
|
|
if len(row) == 0 {
|
|
|
break
|
|
|
}
|
|
|
expressRow := excel.NewRow(row)
|
|
|
//fmt.Println(expressRow.ExpressNo)
|
|
|
//逗号分隔 获取到物流单号数组
|
|
|
//split函数有逗号则变成切片数组,没有则返回本身
|
|
|
split := strings.Split(expressRow.ExpressNo, ";")
|
|
|
//
|
|
|
//遍历物流单号切片数组
|
|
|
errMsg := ""
|
|
|
tempStatus := ExpressItemStatusFalse
|
|
|
for _, s := range split {
|
|
|
if s == "" {
|
|
|
continue
|
|
|
}
|
|
|
//追加回显内容
|
|
|
result.ExpressItem = append(result.ExpressItem, &ExpressItem{
|
|
|
Id: expressRow.ID,
|
|
|
OrderId: expressRow.OrderID,
|
|
|
GoodsName: expressRow.GoodsName,
|
|
|
SkuName: expressRow.SkuName,
|
|
|
ExpressCompanyName: expressRow.ExpressCompanyName,
|
|
|
ExpressNo: s,
|
|
|
Status: &tempStatus,
|
|
|
ErrMsg: &errMsg,
|
|
|
})
|
|
|
|
|
|
}
|
|
|
if len(row) < 17 {
|
|
|
// 请填写快递信息
|
|
|
errMsg = "未填写快递信息"
|
|
|
continue
|
|
|
}
|
|
|
if expressRow.ID == 0 || expressRow.OrderID == 0 {
|
|
|
// 订单不存在
|
|
|
errMsg = "订单不存在"
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
if cache.GetExpressCompCode(expressRow.ExpressCompanyName) == "" {
|
|
|
// 物流公司填写不正确
|
|
|
errMsg = "物流公司填写不正确"
|
|
|
continue
|
|
|
}
|
|
|
orderGoodsDetail := recookOrderGoodsDetailModel.FindById(expressRow.ID)
|
|
|
if orderGoodsDetail.Id == 0 {
|
|
|
// 订单商品错误
|
|
|
errMsg = "订单商品错误"
|
|
|
continue
|
|
|
}
|
|
|
if orderGoodsDetail.ExpressStatus != manage.RecookOrderGoodsDetailExpressStatusNone {
|
|
|
// 订单商品错误
|
|
|
errMsg = "订单商品已发货"
|
|
|
continue
|
|
|
}
|
|
|
express1 := []ExpressInfo{{
|
|
|
//ExpressCompName: expressRow.ExpressCompanyName,
|
|
|
//ExpressNo: "",
|
|
|
}}
|
|
|
for _, v := range split {
|
|
|
|
|
|
express2 := ExpressInfo{
|
|
|
ExpressCompName: expressRow.ExpressCompanyName,
|
|
|
ExpressNo: v,
|
|
|
}
|
|
|
|
|
|
express1 = append(express1, express2)
|
|
|
}
|
|
|
//发货处理
|
|
|
if err := e.Express(userId, user.Username, orderGoodsDetail, express1); err != nil {
|
|
|
errMsg = err.Error()
|
|
|
continue
|
|
|
}
|
|
|
result.ExpressCompany[expressRow.ExpressCompanyName]++
|
|
|
|
|
|
tempStatus = ExpressItemStatusTrue
|
|
|
result.OrderGoodsID = append(result.OrderGoodsID, orderGoodsDetail.Id)
|
|
|
|
|
|
//expItem := &ExpressItem{
|
|
|
// Id: expressRow.ID,
|
|
|
// OrderId: expressRow.OrderID,
|
|
|
// GoodsName: expressRow.GoodsName,
|
|
|
// SkuName: expressRow.SkuName,
|
|
|
// ExpressCompanyName: expressRow.ExpressCompanyName,
|
|
|
// ExpressNo: expressRow.ExpressNo,
|
|
|
// Status: ExpressItemStatusFalse,
|
|
|
// ErrMsg: "",
|
|
|
//}
|
|
|
//result.ExpressItem = append(result.ExpressItem, expItem)
|
|
|
//if len(row) < 17 {
|
|
|
// // 请填写快递信息
|
|
|
// expItem.ErrMsg = "未填写快递信息"
|
|
|
// continue
|
|
|
//}
|
|
|
//if expressRow.ID == 0 || expressRow.OrderID == 0 {
|
|
|
// // 订单不存在
|
|
|
// expItem.ErrMsg = "订单不存在"
|
|
|
// continue
|
|
|
//}
|
|
|
//
|
|
|
//if cache.GetExpressCompCode(expressRow.ExpressCompanyName) == "" {
|
|
|
// // 物流公司填写不正确
|
|
|
// expItem.ErrMsg = "物流公司填写不正确"
|
|
|
// continue
|
|
|
//}
|
|
|
//orderGoodsDetail := recookOrderGoodsDetailModel.FindById(expressRow.ID)
|
|
|
//if orderGoodsDetail.Id == 0 {
|
|
|
// // 订单商品错误
|
|
|
// expItem.ErrMsg = "订单商品错误"
|
|
|
// continue
|
|
|
//}
|
|
|
//if orderGoodsDetail.ExpressStatus != manage.RecookOrderGoodsDetailExpressStatusNone {
|
|
|
// // 订单商品错误
|
|
|
// expItem.ErrMsg = "订单商品已发货"
|
|
|
// continue
|
|
|
//}
|
|
|
//遍历物流单号数组
|
|
|
//express1 := []ExpressInfo{{
|
|
|
// ExpressCompName: expressRow.ExpressCompanyName,
|
|
|
// ExpressNo: expressRow.ExpressNo,
|
|
|
//}}
|
|
|
//for _, v := range split {
|
|
|
// express2 := ExpressInfo{
|
|
|
// ExpressCompName: expressRow.ExpressCompanyName,
|
|
|
// ExpressNo: v,
|
|
|
// }
|
|
|
// express1 = append(express1, express2)
|
|
|
//}
|
|
|
////发货处理
|
|
|
//if err := e.Express(userId, user.Username, orderGoodsDetail, express1); err != nil {
|
|
|
// expItem.ErrMsg = err.Error()
|
|
|
// continue
|
|
|
//}
|
|
|
//result.ExpressCompany[expressRow.ExpressCompanyName]++
|
|
|
//
|
|
|
//expItem.Status = ExpressItemStatusTrue
|
|
|
//result.OrderGoodsID = append(result.OrderGoodsID, orderGoodsDetail.Id)
|
|
|
}
|
|
|
return
|
|
|
}
|