Files
lone-services/services/express/internal/logic/expressDeliveringLogic.go
T

420 lines
14 KiB
Go

package logic
import (
"context"
"lone-services/pkg/modelbase"
"lone-services/pkg/utils"
"lone-services/rpc/express/pb"
"lone-services/services/express/internal/dao"
"lone-services/services/express/internal/model"
"lone-services/services/express/internal/svc"
"strconv"
"github.com/zeromicro/go-zero/core/logx"
)
type ExpressDeliveringLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
BaseLogic
}
func NewExpressDeliveringLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ExpressDeliveringLogic {
return &ExpressDeliveringLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// ExpressDelivering 发货
func (l *ExpressDeliveringLogic) ExpressDelivering(in *express.DeliveringRequest) (*express.Response, error) {
var itemsEdit []dao.DeliveryOrderPrintEdit
w := modelbase.Params{
Eq: map[string]string{"id": strconv.FormatInt(in.Id, utils.NumberTen)}}
modelObj := model.DeliveryOrderModel{}.Init()
err := modelObj.Items(w, &itemsEdit)
if err != nil {
l.Logger.Error(err)
return l.fail(utils.Fail)
}
if len(itemsEdit) < utils.NumberOne {
return l.fail(utils.ErrorNotFund)
}
if itemsEdit[utils.NumberZero].Status == dao.SendStatusOk ||
itemsEdit[utils.NumberZero].Status == dao.SendStatusOver {
return l.fail(utils.ErrorOrderOver)
}
//if transitId < dao.NumberOne {
// transitId = utils.GetConfigInt("transit.send_id")
//}
//tw := models.Params{Eq: map[string]string{"id": strconv.Itoa(transitId)}}
//var transitInfo dao.TransitSend
//err = models.TransitModel{}.Init().GetOne(tw, &transitInfo)
//if err != nil {
// utils.Logger.Error("发货地址信息没有找到", transitId, err)
// return dao.DeliverGoodsPrint{}, utils.Define(utils.ErrorNotFund, "没有查询到发货信息")
//}
//if transitInfo.Id < dao.NumberOne {
// return dao.DeliverGoodsPrint{}, utils.Define(utils.ErrorNotFund, "没有查询到发货信息")
//}
//
//var items []dao.DeliverGoodsPrint
//items = append(items, dao.DeliverGoodsPrint{
// DeliverGoodsPrintEdit: itemsEdit[dao.NumberZero],
//})
//s.getOrderInfo(&items)
//info := itemsEdit[dao.NumberZero]
////更新使用的快递类型
//info.TransitType = transitInfo.TransitId
//
//info.OrderSn = s.getOrderSn(info.TransitType, u.Id)
//items[dao.NumberZero].OrderSn = info.OrderSn
//status := info.Status
//client, res, cErr := s.createTransit(items[dao.NumberZero], transitInfo)
//if cErr != nil {
// return dao.DeliverGoodsPrint{}, cErr
//}
//info.TransitInfo = res.PostInfo
//info.TransitContent = res.RequestInfo
//info.TransitSn = strings.Join(res.WaybillNo, utils.DecollatorComma)
//
//items[dao.NumberZero].AdminName = u.Name
//res2, gErr := s.getDown(client, res.WaybillNo, items[dao.NumberZero])
//if gErr != nil {
// s.cancel(client, w, info, status)
// utils.Logger.Error(res2, gErr)
// return dao.DeliverGoodsPrint{}, utils.Define(utils.ErrorNotFund, "下载发货单出错")
//}
//
//info.Express = utils.StructToJson(res2.Files)
//info.PrintStatus = dao.StatusOk
//info.AdminId = u.Id
//info.AdminName = u.Name
//info.TransitId = transitId
//info.TransitName = transitInfo.Name
//info.Status = models.SendStatusOk
//info.SendTime = utils.Now()
//
//items[dao.NumberZero].PrintStatus = info.PrintStatus
//items[dao.NumberZero].AdminId = info.AdminId
//items[dao.NumberZero].AdminName = info.AdminName
//items[dao.NumberZero].TransitId = info.TransitId
//items[dao.NumberZero].TransitInfo = info.TransitInfo
//items[dao.NumberZero].TransitContent = info.TransitContent
//items[dao.NumberZero].TransitSn = info.TransitSn
//items[dao.NumberZero].TransitName = info.TransitName
//items[dao.NumberZero].Status = info.Status
//items[dao.NumberZero].Express = info.Express
//
//var history dao.DeliverGoodsHistoryCreate
//history.DeliverId = info.Id
//history.TransitName = models.DeliverSendType[info.TransitType]
//history.TransitInfo = info.TransitInfo
//history.TransitContent = info.TransitContent
//history.TransitType = info.TransitType
//history.OrderSn = info.OrderSn
//
//var exps []dao.DeliverGoodsExpCreate
//for i := 0; i < len(res.WaybillNo); i++ {
// exps = append(exps, dao.DeliverGoodsExpCreate{
// DeliverGoodsId: info.Id,
// TransitType: info.TransitType,
// ExpSn: res.WaybillNo[i],
// OrderSn: info.OrderSn,
// })
//}
//
//sErr := s.saveDelever(w, &info, &history, &exps)
//if sErr != nil {
// s.cancel(client, w, info, status)
// utils.Logger.Error(res2, sErr)
// return dao.DeliverGoodsPrint{}, sErr
//}
//
//return items[dao.NumberZero], nil
return &express.Response{}, nil
}
//func (l *ExpressDeliveringLogic) createTransit(info dao.DeliverGoodsPrint, transitInfo dao.TransitSend) (transit.Transit, transit.TransitResult, utils.Error) {
// var client transit.Transit
// switch transitInfo.TransitId {
// case models.TransitCompanySf:
// client = transit.NewSfClient(transitInfo)
// case models.TransitCompanyJd:
// client = transit.NewJdClient(transitInfo)
// default:
// return client, transit.TransitResult{}, utils.Define(utils.Fail, "不支持的快递公司")
// }
// res, err := client.Create(info)
// if err != nil || res.ErrorCode != dao.StatusOkString {
// utils.Logger.Error("create transit err", err, res)
// return client, res, utils.Define(utils.Fail, res.ApiErrorMsg)
// }
//
// return client, res, nil
//}
//
//func (l *ExpressDeliveringLogic) saveDelever(w models.Params, info *dao.DeliverGoodsPrintEdit, history *dao.DeliverGoodsHistoryCreate, exps *[]dao.DeliverGoodsExpCreate) utils.Error {
// model := models.DeliverGoodsModel{}.Init()
// model.Begin()
// edit, err := model.Edit(w, info)
// if err != nil || edit < utils.NumberOne {
// model.Rollback()
// utils.Logger.Error("save deliver goods err ", err)
// return utils.Define(utils.Fail, "生成快递单失败")
// }
//
// err = models.DeliverGoodsExpModel{}.Init().CreateMulti(exps)
// if err != nil {
// model.Rollback()
// utils.Logger.Error("save exp err ", err)
// return utils.Define(utils.Fail, "生成EXP失败")
// }
//
// err = models.DeliverGoodsHistoryModel{}.Init().Create(history)
// if err != nil {
// model.Rollback()
// utils.Logger.Error("save history err ", err)
// return utils.Define(utils.Fail, "生成订单历史失败")
// }
//
// if info.Type == models.DeliverTypeOrder {
// w = models.Params{Eq: map[string]string{"id": info.ObjId}}
// orderStatus := dao.OrderDeliverGoodsStatus{
// DeliverStatus: info.Status,
// }
// _, err = models.OrderModel{}.Init().Edit(w, &orderStatus)
// if err != nil {
// model.Rollback()
// utils.Logger.Error("save update order err ", err)
// return utils.Define(utils.Fail, "更新订单状态失败")
// }
// }
//
// model.Commit()
// return nil
//}
//func (l *ExpressDeliveringLogic) getOrderInfo(items *[]dao.DeliverGoodsPrint) {
// products := s.getProducts()
// for value, item := range *items {
// obj := &(*items)[value]
// mobile, aErr := utils.Crypto{}.AESDecryptECB(item.Mobile)
// if aErr == nil {
// obj.Mobile = mobile
// }
// obj.Url = utils.GetConfigString("transit.url")
// obj.Number, obj.Weight, obj.ProductItems = s.getProductInfo(item.ObjSn, item.ProductInfo, &products)
// }
//}
//func (l *ExpressDeliveringLogic) getOrderSn(orderType uint8, adminId int) string {
// first := models.DeliverSendType[orderType]
//
// sn := first + time.Now().Format("20060102150405")
// sn += fmt.Sprintf("%d%d", orderType, adminId)
// randomNum := rand.Intn(90000000) + 10000000
// sn += fmt.Sprintf("%d", randomNum)
//
// return sn
//}
//
//func (l *ExpressDeliveringLogic) createTransit(info dao.DeliverGoodsPrint, transitInfo dao.TransitSend) (transit.Transit, transit.TransitResult, utils.Error) {
// var client transit.Transit
// switch transitInfo.TransitId {
// case models.TransitCompanySf:
// client = transit.NewSfClient(transitInfo)
// case models.TransitCompanyJd:
// client = transit.NewJdClient(transitInfo)
// default:
// return client, transit.TransitResult{}, utils.Define(utils.Fail, "不支持的快递公司")
// }
// res, err := client.Create(info)
// if err != nil || res.ErrorCode != dao.StatusOkString {
// utils.Logger.Error("create transit err", err, res)
// return client, res, utils.Define(utils.Fail, res.ApiErrorMsg)
// }
//
// return client, res, nil
//}
//func (s PrintService) getDown(client transit.Transit, orders []string, info dao.DeliverGoodsPrint) (transit.TransitResult, error) {
// ret, err := client.DownSheet(orders, info)
// if err != nil || len(ret.Files) < dao.NumberOne {
// utils.Logger.Error("get down err ", orders, err, ret)
// if len(ret.Files) < dao.NumberOne {
// err = errors.New("files is empty")
// }
// return ret, err
// }
// path := utils.GetConfigString("transit.path") + "/"
// var tmpFiles []transit.TransitFiles
// for i := 0; i < len(ret.Files); i++ {
// tName := ret.Files[i].WaybillNo + ".pdf"
// err := s.downloadSfPDF(ret.Files[i], path+tName)
// if err != nil {
// utils.Logger.Error("get down err ", orders, err, ret)
// return ret, err
// }
//
// tmpFiles = append(tmpFiles, transit.TransitFiles{
// File: tName,
// WaybillNo: ret.Files[i].WaybillNo,
// })
// }
//
// ret.Files = tmpFiles
//
// return ret, nil
//}
//
//func (s PrintService) downloadSfPDF(file transit.TransitFiles, path string) error {
// req, err := http.NewRequest("GET", file.Url, nil)
// if err != nil {
// return err
// }
//
// // 2. 必须加这个请求头(顺丰强制)
// req.Header.Add("X-Auth-token", file.Token)
// // 3. 发送请求
// client := &http.Client{}
// resp, err := client.Do(req)
// if err != nil {
// return err
// }
// defer func(Body io.ReadCloser) {
// err := Body.Close()
// if err != nil {
// utils.Logger.Error(err)
// }
// }(resp.Body)
// // 4. 创建目录
// if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
// return err
// }
// // 5. 创建文件并保存
// outFile, err := os.Create(path)
// if err != nil {
// return err
// }
// defer func(outFile *os.File) {
// err = outFile.Close()
// if err != nil {
// utils.Logger.Error(err)
// }
// }(outFile)
// // 6. 拷贝数据
// _, err = io.Copy(outFile, resp.Body)
// return err
//}
//
//func (s PrintService) cancel(client transit.Transit, w models.Params, info dao.DeliverGoodsPrintEdit, status uint8) {
// sn := info.OrderSn
// if info.TransitType == models.TransitCompanyJd {
// sn = info.TransitSn
// }
//
// ret, canErr := client.Cancel(sn)
// if canErr != nil || ret.ErrorCode != dao.StatusOkString {
// utils.Logger.Error("cancel order err ", sn, canErr, ret)
// return
// }
// var history dao.DeliverGoodsHistoryCreate
// history.DeliverId = info.Id
// history.TransitName = models.DeliverSendType[info.TransitType]
// history.TransitInfo = ret.PostInfo
// history.TransitContent = ret.RequestInfo
// history.TransitType = info.TransitType
// history.OrderSn = info.OrderSn
//
// info.OrderSn = dao.StringEmpty
// info.Status = status
// info.Express = dao.StringEmpty
// _, err := models.DeliverGoodsModel{}.Init().Edit(w, &info)
// models.DeliverGoodsHistoryModel{}.Init().Create(&history)
// ww := models.Params{Eq: map[string]string{"deliver_goods_id": strconv.Itoa(info.Id)}}
// editExp := dao.DeliverGoodsExpStatus{
// Status: dao.StatusFail,
// }
// models.DeliverGoodsExpModel{}.Init().Edit(ww, &editExp)
// if err != nil {
// utils.Logger.Error("cancel up order err ", info.Id, err)
// }
// if info.Type == models.DeliverTypeOrder {
// w = models.Params{Eq: map[string]string{"id": info.ObjId}}
// up := dao.OrderDeliverGoodsStatus{
// DeliverStatus: status,
// }
// _, err = models.OrderModel{}.Init().Edit(w, &up)
// if err != nil {
// utils.Logger.Error("cancel up order err ", info.ObjSn, err)
// }
// }
//}
//
//func (s PrintService) createTransit(info dao.DeliverGoodsPrint, transitInfo dao.TransitSend) (transit.Transit, transit.TransitResult, utils.Error) {
// var client transit.Transit
// switch transitInfo.TransitId {
// case models.TransitCompanySf:
// client = transit.NewSfClient(transitInfo)
// case models.TransitCompanyJd:
// client = transit.NewJdClient(transitInfo)
// default:
// return client, transit.TransitResult{}, utils.Define(utils.Fail, "不支持的快递公司")
// }
// res, err := client.Create(info)
// if err != nil || res.ErrorCode != dao.StatusOkString {
// utils.Logger.Error("create transit err", err, res)
// return client, res, utils.Define(utils.Fail, res.ApiErrorMsg)
// }
//
// return client, res, nil
//}
//
//func (s PrintService) saveDelever(w models.Params, info *dao.DeliverGoodsPrintEdit, history *dao.DeliverGoodsHistoryCreate, exps *[]dao.DeliverGoodsExpCreate) utils.Error {
// model := models.DeliverGoodsModel{}.Init()
// model.Begin()
// edit, err := model.Edit(w, info)
// if err != nil || edit < utils.NumberOne {
// model.Rollback()
// utils.Logger.Error("save deliver goods err ", err)
// return utils.Define(utils.Fail, "生成快递单失败")
// }
//
// err = models.DeliverGoodsExpModel{}.Init().CreateMulti(exps)
// if err != nil {
// model.Rollback()
// utils.Logger.Error("save exp err ", err)
// return utils.Define(utils.Fail, "生成EXP失败")
// }
//
// err = models.DeliverGoodsHistoryModel{}.Init().Create(history)
// if err != nil {
// model.Rollback()
// utils.Logger.Error("save history err ", err)
// return utils.Define(utils.Fail, "生成订单历史失败")
// }
//
// if info.Type == models.DeliverTypeOrder {
// w = models.Params{Eq: map[string]string{"id": info.ObjId}}
// orderStatus := dao.OrderDeliverGoodsStatus{
// DeliverStatus: info.Status,
// }
// _, err = models.OrderModel{}.Init().Edit(w, &orderStatus)
// if err != nil {
// model.Rollback()
// utils.Logger.Error("save update order err ", err)
// return utils.Define(utils.Fail, "更新订单状态失败")
// }
// }
//
// model.Commit()
// return nil
//}