diff --git a/business/jxstore/cms/job.go b/business/jxstore/cms/job.go index 22d8feaf6..5fe4891cb 100644 --- a/business/jxstore/cms/job.go +++ b/business/jxstore/cms/job.go @@ -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 } diff --git a/controllers/job_controller.go b/controllers/job_controller.go index d4c0437f2..f12a55cd2 100644 --- a/controllers/job_controller.go +++ b/controllers/job_controller.go @@ -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 }) }