cancel jd deli

This commit is contained in:
苏尹岚
2020-10-23 16:27:55 +08:00
parent d16d67dfc6
commit 4bb5e12d2d
2 changed files with 113 additions and 8 deletions

View File

@@ -519,29 +519,119 @@ func RechargeMtMembers(ctx *jxcontext.Context, phone int) (err error) {
return err
}
func SendJdDelivery(ctx *jxcontext.Context, dOrder *model.DeliveryOrder) (err error) {
func SendJdDelivery(ctx *jxcontext.Context, dOrder *model.DeliveryOrder) (errCode string, err error) {
var (
db = dao.GetDB()
)
sendDeliveryList, _, err := dao.QueryUserDeliveryAddress(db, int64(dOrder.DeliverySendID), nil, 0, 0)
receiveDeliveryList, _, err := dao.QueryUserDeliveryAddress(db, int64(dOrder.DeliveryReceiveID), nil, 0, 0)
userBill, err := dao.GetUserBill(db, ctx.GetUserID(), "")
if err != nil {
return err
return errCode, err
}
if userBill.AccountBalance < dOrder.PayPrice {
return model.ErrCodeAccountBalanceNotEnough, err
}
if len(sendDeliveryList) == 0 {
return fmt.Errorf("未找到寄件人地址!")
return errCode, fmt.Errorf("未找到寄件人地址!")
}
if len(receiveDeliveryList) == 0 {
return fmt.Errorf("未找到取件人地址!")
return errCode, fmt.Errorf("未找到取件人地址!")
}
dao.WrapAddIDCULEntity(dOrder, ctx.GetUserName())
if vendorWaybillID, err := api.JdEclpAPI.WaybillReceive(&jdeclpapi.WaybillReceiveParam{}); err == nil {
if vendorWaybillID, err := api.JdEclpAPI.WaybillReceive(&jdeclpapi.WaybillReceiveParam{
SalePlat: jdeclpapi.SalePlatSourceDelivery,
CustomerCode: jdeclpapi.CustomerCode,
OrderID: utils.Int64ToStr(jxutils.GenOrderNo()),
SenderName: sendDeliveryList[0].ConsigneeName,
SenderAddress: sendDeliveryList[0].Address + sendDeliveryList[0].DetailAddress,
SenderTel: sendDeliveryList[0].ConsigneeMobile,
ReceiveName: receiveDeliveryList[0].ConsigneeName,
ReceiveAddress: receiveDeliveryList[0].Address + receiveDeliveryList[0].DetailAddress,
ReceiveTel: receiveDeliveryList[0].ConsigneeMobile,
Weight: dOrder.Weight,
Vloumn: dOrder.Vloumn,
PackageCount: dOrder.PackageCount,
Description: dOrder.Description,
Aging: 5,
PromiseTimeType: 1, //特惠送
}); err == nil {
dOrder.VendorWaybillID = vendorWaybillID
} else {
return err
return errCode, err
}
dOrder.Status = model.OrderStatusNew
dOrder.UserID = ctx.GetUserID()
dao.CreateEntity(db, dOrder)
dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db)
panic(r)
}
}()
if err = dao.CreateEntity(db, dOrder); err != nil {
dao.Rollback(db)
}
//账户支出明细
//1、账户支出增加一条记录
if err = financial.AddBillExpend(db, userBill.BillID, model.BillTypeSpJob, dOrder.PayPrice); err != nil {
dao.Rollback(db)
}
//2、账户表余额减少相应值
userBill.AccountBalance -= dOrder.PayPrice
if _, err = dao.UpdateEntity(db, userBill, "AccountBalance"); err != nil {
dao.Rollback(db)
}
dao.Commit(db)
return errCode, err
}
func CancelJdDelivery(ctx *jxcontext.Context, vendorWaybillID, reason string) (err error) {
var (
db = dao.GetDB()
dOrder = &model.DeliveryOrder{
VendorWaybillID: vendorWaybillID,
}
)
err = dao.GetEntity(db, &dOrder, "VendorWaybillID")
userBill, err := dao.GetUserBill(db, ctx.GetUserID(), "")
if err != nil {
return err
}
if dOrder.ID == 0 {
return fmt.Errorf("未找到该运单!")
}
if err = api.JdEclpAPI.CancelWayBill(&jdeclpapi.CancelWayBillParam{
WaybillCode: vendorWaybillID,
CustomerCode: jdeclpapi.CustomerCode,
Source: "JOS",
CancelReason: reason,
OperatorName: ctx.GetUserName(),
}); err != nil {
return err
}
dOrder.Status = model.OrderStatusCanceled
dOrder.OrderFinishedAt = time.Now()
dOrder.Comment = reason
dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db)
panic(r)
}
}()
if _, err = dao.UpdateEntity(db, dOrder, "Status", "OrderFinishedAt", "Comment"); err != nil {
dao.Rollback(db)
}
//1、根据任务剩余数量退钱到任务保证金余额中
userBill.AccountBalance += dOrder.PayPrice
if _, err = dao.UpdateEntity(db, userBill, "AccountBalance"); err != nil {
dao.Rollback(db)
}
//2、账户收入增加一条记录
if err = financial.AddBillIncome(db, userBill.BillID, model.BillTypeSpJob, dOrder.PayPrice); err != nil {
dao.Rollback(db)
}
dao.Commit(db)
return err
}

View File

@@ -229,8 +229,23 @@ func (c *JobController) SendJdDelivery() {
c.callSendJdDelivery(func(params *tJobSendJdDeliveryParams) (retVal interface{}, errCode string, err error) {
var dOrder *model.DeliveryOrder
if err = jxutils.Strings2Objs(params.Payload, &dOrder); err == nil {
err = cms.SendJdDelivery(params.Ctx, dOrder)
errCode, err = cms.SendJdDelivery(params.Ctx, dOrder)
}
return retVal, errCode, err
})
}
// @Title 取消京东快递
// @Description 取消京东快递
// @Param token header string true "认证token"
// @Param vendorWaybillID formData string true "运单号"
// @Param reason formData string true "取消原因"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /CancelJdDelivery [post]
func (c *JobController) CancelJdDelivery() {
c.callCancelJdDelivery(func(params *tJobCancelJdDeliveryParams) (retVal interface{}, errCode string, err error) {
err = cms.CancelJdDelivery(params.Ctx, params.VendorWaybillID, params.Reason)
return retVal, "", err
})
}