223 lines
6.5 KiB
Go
223 lines
6.5 KiB
Go
package lakala
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"git.rosy.net.cn/baseapi/platformapi/lakala"
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
"git.rosy.net.cn/jx-callback/business/model"
|
||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||
"git.rosy.net.cn/jx-callback/business/partner"
|
||
"time"
|
||
)
|
||
|
||
// ApplyContract 电子合同申请回调
|
||
func ApplyContract(callback *lakala.ApplyContractCallBack) error {
|
||
var (
|
||
db = dao.GetDB()
|
||
)
|
||
|
||
merchantInfo, err := dao.GetStoreContract(db, 0, callback.OrderNo, utils.Int64ToStr(callback.EcApplyId))
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
merchantInfo.ContractStatus = callback.AuditStatus
|
||
merchantInfo.Desc = callback.AuditDesc
|
||
_, err = dao.UpdateEntity(db, merchantInfo, "ContractStatus")
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
// ApplyContractByPeople 电子合同申请人工审核回调
|
||
func ApplyContractByPeople(callback *lakala.ApplyContractByPeopleCallBack) error {
|
||
var (
|
||
db = dao.GetDB()
|
||
)
|
||
if callback.Code == "000000" {
|
||
merchantInfo, err := dao.GetStoreContract(db, 0, callback.RespData.OrderNo, "")
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
merchantInfo.ContractStatus = callback.RespData.AuditStatus
|
||
merchantInfo.Desc = callback.RespData.AuditDesc
|
||
_, err = dao.UpdateEntity(db, merchantInfo, "ContractStatus")
|
||
if err != nil {
|
||
return err
|
||
}
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
// CreateSeparateShop 商户分账业务回调(创建/修改)
|
||
func CreateSeparateShop(callback *lakala.SeparateCallback) error {
|
||
var (
|
||
db = dao.GetDB()
|
||
)
|
||
merchantInfo, err := dao.GetStoreInfoByMerchantID(db, callback.MerCupNo, 0, utils.Int64ToStr(callback.ApplyId), "")
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
if callback.AuditStatus == utils.Int2Str(model.YES) {
|
||
merchantInfo.OperateStatus = model.OperateStatusSuccess
|
||
} else {
|
||
merchantInfo.OperateStatus = model.OperateStatusFail
|
||
}
|
||
|
||
_, err = dao.UpdateEntity(db, merchantInfo, "OperateStatus")
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
// BindSeparateBand 绑定/解绑业务
|
||
func BindSeparateBand(callback *lakala.SeparateBindCallback) error {
|
||
var (
|
||
db = dao.GetDB()
|
||
)
|
||
bindInfo, err := dao.GetStoreInfoByMerchantID(db, callback.MerCupNo, 0, callback.ApplyId, "")
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
unBind := make(map[string]*model.BindAccountObj, 0)
|
||
if err = json.Unmarshal([]byte(bindInfo.BindAccount), &unBind); err != nil {
|
||
return err
|
||
}
|
||
if unBind[callback.ReceiverNo].ApplyId == callback.ApplyId {
|
||
unBind[callback.ReceiverNo] = &model.BindAccountObj{
|
||
ApplyId: callback.ApplyId,
|
||
Status: callback.AuditStatus,
|
||
Remark: fmt.Sprintf(callback.AuditStatusText + ":" + callback.Remark),
|
||
}
|
||
}
|
||
|
||
byteBind, err := json.Marshal(unBind)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
bindInfo.BindAccount = string(byteBind)
|
||
|
||
if _, err = dao.UpdateEntity(db, bindInfo, "BindAccount"); err != nil {
|
||
return err
|
||
}
|
||
return nil
|
||
}
|
||
|
||
// GetSeparateRecordsCallback 分账结果回调
|
||
func GetSeparateRecordsCallback(callback *lakala.SeparateResult) error {
|
||
var (
|
||
db = dao.GetDB()
|
||
)
|
||
separateRecord, err := dao.GetSeparateRecords(db, "", callback.SeparateNo, callback.CmdType)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
separateRecord.CmdType = callback.CmdType
|
||
separateRecord.FinishDate = callback.FinishDate
|
||
separateRecord.Status = callback.Status
|
||
separateRecord.FinalStatus = callback.FinalStatus
|
||
separateRecord.UpdatedAt = time.Now()
|
||
_, err = dao.UpdateEntity(db, separateRecord, "CmdType", "FinishDate", "Status", "FinalStatus", "UpdatedAt")
|
||
return err
|
||
}
|
||
|
||
// EwalletWithdrawD1Callback 结算信息回调
|
||
func EwalletWithdrawD1Callback(param *lakala.EwalletWithdrawD1CallBack) error {
|
||
var (
|
||
db = dao.GetDB()
|
||
)
|
||
withDraw, err := dao.GetEwalletWithDraw(db, param.MercId, param.DrawJnl)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
withDraw.ReqDate = param.ReqDate
|
||
withDraw.DrawAmt = param.DrawAmt
|
||
withDraw.DrawFee = param.DrawFee
|
||
withDraw.BatchAutoSettle = param.BatchAutoSettle
|
||
withDraw.AcctNo = param.AcctNo
|
||
withDraw.AcctName = param.AcctName
|
||
withDraw.DrawState = param.DrawState
|
||
withDraw.Memo = param.Memo
|
||
withDraw.CreatedTime = utils.Str2Time(param.CreatedTime)
|
||
withDraw.CompleteTime = utils.Str2Time(param.CompleteTime)
|
||
|
||
_, err = dao.UpdateEntity(db, withDraw)
|
||
return err
|
||
}
|
||
|
||
// OrderStatusCallback 订单状态回调 todo param.OrderStatus=6 时暂时无法区分全部退款还是部分退款
|
||
func OrderStatusCallback(param *lakala.QueryOrderCallBackResp) error {
|
||
var (
|
||
db = dao.GetDB()
|
||
)
|
||
|
||
order, err := partner.CurOrderManager.LoadOrder(param.OutOrderNo, model.VendorIDJX)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
// 0:待支付 1:支付中 2:支付成功 3:支付失败 4:已过期 5:已取消 6:部分退款或者全部退款
|
||
switch param.OrderStatus {
|
||
case "0", "1":
|
||
order.Status = model.OrderStatusWait4Pay
|
||
case "2":
|
||
if order.DeliveryType == model.OrderDeliveryTypeSelfTake {
|
||
order.Status = model.OrderStatusFinished
|
||
order.OrderFinishedAt = time.Now()
|
||
} else {
|
||
order.Status = model.OrderStatusAccepted
|
||
}
|
||
case "3":
|
||
order.Status = model.OrderStatusWait4Pay
|
||
case "4", "5":
|
||
order.Status = model.OrderStatusCanceled
|
||
order.OrderFinishedAt = time.Now()
|
||
case "6":
|
||
|
||
}
|
||
order.VendorOrderID2 = param.OrderTradeInfo.LogNo
|
||
order.VendorStatus = param.OrderStatus
|
||
_, err = dao.UpdateEntity(db, order, "Status", "VendorOrderID2", "VendorStatus", "OrderFinishedAt")
|
||
|
||
orderPay := &model.OrderPay{
|
||
PayOrderID: param.PayOrderNo,
|
||
}
|
||
orderPay.DeletedAt = utils.DefaultTimeValue
|
||
if err := dao.GetEntity(db, orderPay, "PayOrderID", "DeletedAt"); err == nil {
|
||
if orderPay.Status != 0 {
|
||
return err
|
||
}
|
||
loc, _ := time.LoadLocation("Local")
|
||
t1, _ := time.ParseInLocation("20060102150405", param.OrderTradeInfo.TradeTime, loc)
|
||
orderPay.PayFinishedAt = utils.Time2Pointer(t1)
|
||
orderPay.OriginalData = utils.Format4Output(param, true)
|
||
//TradeType string `json:"trade_type"` // M String 16 交易类型 PAY-消费 REFUND-退款 CANCEL-撤销
|
||
//TradeStatus string `json:"trade_status"` // M String 2 支付状态 返回状态 S:成功 F:失败 C:被冲正 U:预记状态 X:发送失败 T: 发送超时 P: 处理中
|
||
orderPay.TransactionID = param.OrderTradeInfo.LogNo
|
||
switch param.OrderTradeInfo.TradeStatus {
|
||
case "S":
|
||
orderPay.Status = model.PayStatusYes
|
||
default:
|
||
orderPay.Status = model.PayStatusFailed
|
||
}
|
||
|
||
dao.UpdateEntity(db, orderPay)
|
||
}
|
||
|
||
separate, _ := dao.GetSeparateAmtByOrderID(order.VendorOrderID, lakala.SeparateType_SEPATRATE, "")
|
||
if separate != nil {
|
||
separate.LogNo = param.OrderTradeInfo.LogNo
|
||
separate.Remark += "->收银台订单未分账"
|
||
dao.UpdateEntity(db, separate, "LogNo", "Remark")
|
||
}
|
||
return err
|
||
}
|