1
This commit is contained in:
146
business/lakala/lakala_callback.go
Normal file
146
business/lakala/lakala_callback.go
Normal file
@@ -0,0 +1,146 @@
|
||||
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"
|
||||
)
|
||||
|
||||
// CreateSeparateShop 商户分账业务回调(创建/修改)
|
||||
func CreateSeparateShop(callback *lakala.SeparateCallback) error {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
)
|
||||
merchantInfo, err := dao.GetStoreInfoByMerchantID(db, callback.MerCupNo, 0, 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.TotalAmt = callback.TotalAmt
|
||||
separateRecord.Status = callback.Status
|
||||
separateRecord.FinalStatus = callback.FinalStatus
|
||||
separateRecord.UpdatedAt = time.Now()
|
||||
_, err = dao.UpdateEntity(db, separateRecord, "CmdType", "FinishDate", "TotalAmt", "Status1", "Status2", "Status3", "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.OrderCreateTime, 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.VendorStatus = param.OrderStatus
|
||||
_, err = dao.UpdateEntity(db, order, "Status", "VendorStatus", "OrderFinishedAt")
|
||||
return err
|
||||
}
|
||||
821
business/lakala/lakala_incoming.go
Normal file
821
business/lakala/lakala_incoming.go
Normal file
@@ -0,0 +1,821 @@
|
||||
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/jxutils/jxcontext"
|
||||
"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"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
//#region 进件相关API
|
||||
|
||||
// LaKaLaInComing 商户进件
|
||||
func LaKaLaInComing(ctx *jxcontext.Context, incoming *lakala.MerchantIncomingReq, storeId int) (string, error) {
|
||||
merchantNo, status, err := api.LaKaLaApi.MerchantIncoming(incoming)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
incomingObj := &model.LakalaIncoming{
|
||||
StoreId: storeId,
|
||||
MerchantNo: merchantNo,
|
||||
MerchantStatus: status,
|
||||
}
|
||||
dao.WrapAddIDCULDEntity(incomingObj, ctx.GetUserName())
|
||||
|
||||
if err = dao.CreateEntity(dao.GetDB(), incoming); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return status, nil
|
||||
}
|
||||
|
||||
// GetMerchantInfo 获取门店商户详情
|
||||
func GetMerchantInfo(merchantNo string) (*lakala.MerchantObj, error) {
|
||||
result, err := api.LaKaLaApi.GetMerchantInfo(merchantNo)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
db := dao.GetDB()
|
||||
merchantInfo, err := dao.GetStoreInfoByMerchantID(db, merchantNo, 0, "", "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if merchantInfo.TermNo == "" {
|
||||
termNo := make([]string, 0, 0)
|
||||
for _, v := range result.TerminalInfo {
|
||||
termNo = append(termNo, v.TermNoList...)
|
||||
}
|
||||
if len(termNo) != model.NO {
|
||||
merchantInfo.TermNo = strings.Join(termNo, ",")
|
||||
dao.UpdateEntity(db, merchantInfo, "TermNo")
|
||||
}
|
||||
}
|
||||
|
||||
return result, err
|
||||
}
|
||||
|
||||
// QueryCityCode 获取拉卡拉code列表
|
||||
func QueryCityCode(parentCode string) ([]*lakala.OrganizationList, error) {
|
||||
return api.LaKaLaApi.GetOrganizationCode(parentCode)
|
||||
}
|
||||
|
||||
// QueryBankList 获取地方银行列表
|
||||
func QueryBankList(areaCode, bankName string) ([]*lakala.BankListResult, error) {
|
||||
if areaCode == "" {
|
||||
return nil, fmt.Errorf("地区编码不能为空")
|
||||
}
|
||||
return api.LaKaLaApi.GetBankList(areaCode, bankName)
|
||||
}
|
||||
|
||||
// GetCustomerCategory 获取门店类别
|
||||
func GetCustomerCategory(businessScene, parentCode string) ([]*lakala.BusinessResult, error) {
|
||||
return api.LaKaLaApi.GetMerchantMcc(businessScene, parentCode)
|
||||
}
|
||||
|
||||
// MerchantFeeQuery 商户费率查询
|
||||
func MerchantFeeQuery(customerNo, productCode string) (*lakala.MerchantFeeResp, error) {
|
||||
return api.LaKaLaApi.MerchantFeeQuery(customerNo, productCode)
|
||||
}
|
||||
|
||||
// MerchantFeeChange 商户费率信息变更
|
||||
func MerchantFeeChange(param *lakala.FeeChangeReq, customerNo string) (int, string, error) {
|
||||
changeId, status, err := api.LaKaLaApi.MerchantFeeChange(param, customerNo)
|
||||
if err != nil {
|
||||
return 0, "", err
|
||||
}
|
||||
|
||||
if changeId != model.NO {
|
||||
db := dao.GetDB()
|
||||
merchant, err := dao.GetStoreInfoByMerchantID(db, customerNo, 0, "", "")
|
||||
if err != nil {
|
||||
return 0, "", err
|
||||
}
|
||||
merchant.FeeId = utils.Int2Str(changeId)
|
||||
merchant.FeeStatus = status
|
||||
dao.UpdateEntity(db, merchant, "FeeId", "FeeStatus")
|
||||
}
|
||||
|
||||
return changeId, status, err
|
||||
}
|
||||
|
||||
// UpdateSettleInfo 查询/修改结算信息
|
||||
func UpdateSettleInfo(customerNo string, param *lakala.UpdateSettleInfoReq) (*lakala.UpdateSettleInfoReq, string, error) {
|
||||
updateResult, queryResult, err := api.LaKaLaApi.UpdateSettleInfo(customerNo, param)
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
|
||||
if param == nil {
|
||||
return queryResult, "", err
|
||||
}
|
||||
|
||||
if updateResult.StatusCodeValue != 200 {
|
||||
return nil, "", fmt.Errorf(updateResult.StatusCode)
|
||||
} else {
|
||||
db := dao.GetDB()
|
||||
merchant, err := dao.GetStoreInfoByMerchantID(db, customerNo, 0, "", "")
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
merchant.SettleId = utils.Int2Str(updateResult.Body.ReviewRelatedId)
|
||||
merchant.SettleStatus = updateResult.Body.Message
|
||||
dao.UpdateEntity(db, merchant, "SettleID", "SettleStatus")
|
||||
return nil, updateResult.Body.Message, nil
|
||||
}
|
||||
}
|
||||
|
||||
// MerchantUpdateBaseInfo 基本信息变更
|
||||
func MerchantUpdateBaseInfo(customerNo string, param *lakala.UpdateBaseInfoReq) (string, error) {
|
||||
basic, err := api.LaKaLaApi.UpdateBaseInfo(customerNo, param)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if basic.StatusCodeValue != 200 {
|
||||
return "", fmt.Errorf(basic.StatusCode)
|
||||
}
|
||||
if basic.Body.ReviewRelatedId != model.NO {
|
||||
db := dao.GetDB()
|
||||
merchant, err := dao.GetStoreInfoByMerchantID(db, customerNo, 0, "", "")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
merchant.BasicId = utils.Int2Str(basic.Body.ReviewRelatedId)
|
||||
merchant.BasicStatus = basic.Body.Message
|
||||
dao.UpdateEntity(db, merchant, "BasicId", "BasicStatus")
|
||||
return merchant.BasicId, nil
|
||||
}
|
||||
|
||||
return "", fmt.Errorf("UpdateBaseInfo 修改异常,联系管理员")
|
||||
}
|
||||
|
||||
// QueryExamine 查询门店变更审核状态
|
||||
func QueryExamine(merchantId, reviewRelatedId string) (map[string]string, error) {
|
||||
reviewPass, reviewResult, err := api.LaKaLaApi.QueryMerchantReviewStatus(reviewRelatedId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
db := dao.GetDB()
|
||||
merchant, err := dao.GetStoreInfoByMerchantID(db, merchantId, 0, "", "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
updateField := make([]string, 0, 0)
|
||||
switch reviewRelatedId {
|
||||
case merchant.FeeId:
|
||||
merchant.FeeStatus = reviewPass
|
||||
updateField = append(updateField, "FeeStatus")
|
||||
case merchant.SettleId:
|
||||
merchant.SettleStatus = reviewPass
|
||||
updateField = append(updateField, "SettleStatus")
|
||||
case merchant.BasicId:
|
||||
merchant.BasicStatus = reviewPass
|
||||
updateField = append(updateField, "BasicStatus")
|
||||
case merchant.LicenseId:
|
||||
merchant.LicenseStatus = reviewPass
|
||||
updateField = append(updateField, "LicenseStatus")
|
||||
}
|
||||
if len(updateField) != 0 {
|
||||
dao.UpdateEntity(db, merchant, updateField...)
|
||||
}
|
||||
|
||||
return map[string]string{"status": reviewPass, "desc": reviewResult}, err
|
||||
}
|
||||
|
||||
// CheckIsUploadPhoto 查看门店是否需要补充照片
|
||||
func CheckIsUploadPhoto(customerNo string) (*lakala.OpenCustomerExtImgVo, error) {
|
||||
return api.LaKaLaApi.CheckImgIsSupplement(customerNo)
|
||||
}
|
||||
|
||||
// ImgSupplement 补充照片
|
||||
func ImgSupplement(param *lakala.ImgSupplementReq) error {
|
||||
if param.ExtCustomerNo == "" {
|
||||
return fmt.Errorf("商户号不能为空")
|
||||
}
|
||||
return api.LaKaLaApi.ImgSupplement(param)
|
||||
}
|
||||
|
||||
// GetMerchantReportStatus 查看银联报备状态
|
||||
func GetMerchantReportStatus(orgCode, agentNo, customerNo string) (*lakala.OpenUnionpayMerchantVo, error) {
|
||||
return api.LaKaLaApi.GetMerchantReportStatus(orgCode, agentNo, customerNo)
|
||||
}
|
||||
|
||||
// GetMerchantTerminal 获取终端报备信息
|
||||
func GetMerchantTerminal(orgCode, agentNo, externalCustomerNo, posSn string) (*lakala.OpenUnionpayTermVo, error) {
|
||||
return api.LaKaLaApi.GetMerchantTerminal(orgCode, agentNo, externalCustomerNo, posSn)
|
||||
}
|
||||
|
||||
// SupplementBusinessLicense 变更营业执照
|
||||
func SupplementBusinessLicense(param *lakala.BusinessLicenseReq) (string, error) {
|
||||
licenseId, status, err := api.LaKaLaApi.SupplementBusinessLicense(param)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
db := dao.GetDB()
|
||||
merchant, err := dao.GetStoreInfoByMerchantID(db, param.ExternalCustomerNo, 0, "", "")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
merchant.LicenseId = licenseId
|
||||
merchant.LicenseStatus = status
|
||||
if _, err = dao.UpdateEntity(db, merchant, "LicenseId", "LicenseStatus"); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return status, nil
|
||||
}
|
||||
|
||||
// UnionPayMerInfo 联防机制查询(失信人名单)
|
||||
func UnionPayMerInfo(larName, larIdCard string) (*lakala.DishonestPerson, error) {
|
||||
return api.LaKaLaApi.UnionPayMerInfo(larName, larIdCard)
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region 分账相关
|
||||
|
||||
// CreateSeparate 创建分账门店
|
||||
func CreateSeparate(req *lakala.CreateSeparateReq) (string, error) {
|
||||
req.OrderNo = lakala.GetOrderNumber(8)
|
||||
req.RetUrl = lakala.CallbackLaKaLaShopUrl
|
||||
applyID, err := api.LaKaLaApi.CreateSeparate(req)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
db := dao.GetDB()
|
||||
merchant, err := dao.GetStoreInfoByMerchantID(db, req.MerInnerNo, 0, "", "")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
merchant.OrderID = req.OrderNo
|
||||
merchant.ApplyID = applyID
|
||||
merchant.ThingType = model.ThingTypeSeparate
|
||||
merchant.Operate = model.OperateTypeCreate
|
||||
merchant.OperateStatus = model.OperateStatusReview
|
||||
merchant.Remark = fmt.Sprintf("创建分账:%s", req.OrderNo)
|
||||
if _, err = dao.UpdateEntity(db, merchant, "OrderID", "ApplyID", "ThingType", "Operate", "OperateStatus", "Remark"); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return applyID, nil
|
||||
}
|
||||
|
||||
// SeparateModify 变更分账门店
|
||||
func SeparateModify(param *lakala.SeparateModifyReq) (string, error) {
|
||||
db := dao.GetDB()
|
||||
merchant, err := dao.GetStoreInfoByMerchantID(db, param.MerInnerNo, 0, "", "")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if merchant.OperateStatus == model.OperateStatusReview {
|
||||
return "", fmt.Errorf("有待审核项目,请审核完成后再变更")
|
||||
}
|
||||
|
||||
param.OrderNo = lakala.GetOrderNumber(8)
|
||||
param.RetUrl = lakala.CallbackLaKaLaShopUrl
|
||||
applyID, err := api.LaKaLaApi.SeparateModify(param)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
merchant.OrderID = param.OrderNo
|
||||
merchant.ApplyID = applyID
|
||||
merchant.ThingType = model.ThingTypeSeparate
|
||||
merchant.Operate = model.OperateTypeUpdate
|
||||
merchant.OperateStatus = model.OperateStatusReview
|
||||
merchant.Remark = fmt.Sprintf("修改分账:%s", param.OrderNo)
|
||||
if _, err = dao.UpdateEntity(db, merchant, "OrderID", "ApplyID", "ThingType", "Operate", "OperateStatus"); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return applyID, nil
|
||||
}
|
||||
|
||||
// SeparateQuery 分账信息查询
|
||||
func SeparateQuery(merInnerNo, orgCode string) (*lakala.SeparateQueryResp, error) {
|
||||
param := &lakala.SeparateQueryReq{
|
||||
Version: lakala.Version2,
|
||||
OrderNo: lakala.GetOrderNumber(8),
|
||||
OrgCode: orgCode,
|
||||
MerInnerNo: merInnerNo,
|
||||
MerCupNo: "",
|
||||
}
|
||||
return api.LaKaLaApi.SeparateQuery(param)
|
||||
}
|
||||
|
||||
// CreateSeparateRecipient 创建分账接收方
|
||||
func CreateSeparateRecipient(ctx *jxcontext.Context, param *lakala.CreateSeparateRecipientReq) (string, error) {
|
||||
param.OrderNo = lakala.GetOrderNumber(8)
|
||||
receiverNo, err := api.LaKaLaApi.CreateSeparateRecipient(param)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
receiver := &model.LakalaRecipient{}
|
||||
dao.WrapAddIDCULDEntity(receiver, ctx.GetUserName())
|
||||
receiver.ReceiverNo = receiverNo
|
||||
receiver.ReceiverName = param.ReceiverName
|
||||
receiver.OrgCode = param.OrgCode
|
||||
receiver.Status = model.ReceiverStatusValid
|
||||
receiver.Remark = fmt.Sprintf("创建分账接收方:%s", param.OrderNo)
|
||||
|
||||
if err = dao.CreateEntity(dao.GetDB(), receiver); err != nil {
|
||||
return "", err
|
||||
}
|
||||
return receiverNo, err
|
||||
}
|
||||
|
||||
// UpdateSeparateRecipient 修改分账接收方
|
||||
func UpdateSeparateRecipient(param *lakala.UpdateSeparateRecipientReq) (string, error) {
|
||||
param.OrderNo = lakala.GetOrderNumber(8)
|
||||
orderNo, err := api.LaKaLaApi.UpdateSeparateRecipient(param)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
db := dao.GetDB()
|
||||
recipient, err := dao.GetRecipientByMerchantID(db, param.ReceiverNo)
|
||||
recipient.ReceiverName = param.ReceiverName
|
||||
recipient.Status = param.Status
|
||||
recipient.Remark = fmt.Sprintf("修改分账接收方:%s", param.OrderNo)
|
||||
|
||||
_, err = dao.UpdateEntity(db, recipient, "ReceiverName", "Status", "Remark")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return orderNo, nil
|
||||
}
|
||||
|
||||
// QuerySeparateRecipient 分账方详细信息查询
|
||||
func QuerySeparateRecipient(orderNo, receiverNo string) (*lakala.QuerySeparateRecipientResp, error) {
|
||||
return api.LaKaLaApi.QuerySeparateRecipient(orderNo, receiverNo)
|
||||
}
|
||||
|
||||
// ApplyBind 申请绑定分账关系
|
||||
func ApplyBind(param *lakala.SeparateApplyBindReq) (*lakala.SeparateApplyBindResp, error) {
|
||||
param.OrderNo = lakala.GetOrderNumber(8)
|
||||
param.RetUrl = lakala.CallbackLaKaLaSeparateBindUrl
|
||||
applyInfo, err := api.LaKaLaApi.ApplyBind(param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
db := dao.GetDB()
|
||||
merchant, err := dao.GetStoreInfoByMerchantID(db, param.MerInnerNo, 0, "", "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
bind := map[string]*model.BindAccountObj{param.ReceiverNo: &model.BindAccountObj{
|
||||
ApplyId: utils.Int64ToStr(applyInfo.RespData.ApplyId),
|
||||
Status: "0",
|
||||
Remark: "新增绑定",
|
||||
}}
|
||||
bodyBind, _ := json.Marshal(bind)
|
||||
merchant.BindAccount = string(bodyBind)
|
||||
_, err = dao.UpdateEntity(db, merchant, "BindAccount")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return applyInfo, nil
|
||||
}
|
||||
|
||||
// SeparateUnBind 申请解除绑定
|
||||
func SeparateUnBind(param *lakala.SeparateUnBindReq) error {
|
||||
param.OrderNo = lakala.GetOrderNumber(8)
|
||||
param.RetUrl = lakala.CallbackLaKaLaSeparateBindUrl
|
||||
applyId, err := api.LaKaLaApi.SeparateUnBind(param)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
db := dao.GetDB()
|
||||
merchant, err := dao.GetStoreInfoByMerchantID(db, param.MerInnerNo, 0, "", "")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
unBind := make(map[string]*model.BindAccountObj, 0)
|
||||
if err = json.Unmarshal([]byte(merchant.BindAccount), &unBind); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
unBind[param.ReceiverNo] = &model.BindAccountObj{
|
||||
ApplyId: applyId,
|
||||
Status: "0",
|
||||
Remark: "解除绑定",
|
||||
}
|
||||
|
||||
bodyBind, _ := json.Marshal(unBind)
|
||||
merchant.BindAccount = string(bodyBind)
|
||||
if _, err = dao.UpdateEntity(db, merchant, "BindAccount"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// SeparateQueryAmt 可分账金额查询
|
||||
func SeparateQueryAmt(merchantNo, logNo, logDate string) (*lakala.SeparateQueryAmtResp, error) {
|
||||
logNo = lakala.GetOrderNumber(8)
|
||||
logDate = utils.Time2TimeStrByFormat(time.Now(), "20060102")
|
||||
result, err := api.LaKaLaApi.SeparateQueryAmt(merchantNo, logNo, logDate)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
db := dao.GetDB()
|
||||
merchant, err := dao.GetStoreInfoByMerchantID(db, merchantNo, 0, "", "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
merchant.TotalAmt = result.TotalSeparateAmt
|
||||
merchant.CanAmt = result.CanSeparateAmt
|
||||
if _, err = dao.UpdateEntity(db, merchant, "TotalAmt", "CanAmt"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return result, err
|
||||
}
|
||||
|
||||
// Separate 分账
|
||||
func Separate(ctx *jxcontext.Context, param *lakala.OrderSeparateReq) (string, string, error) {
|
||||
param.LogNo = lakala.GetOrderNumber(8)
|
||||
param.LogDate = utils.Time2TimeStrByFormat(time.Now(), "20060102")
|
||||
param.OutSeparateNo = lakala.GetOrderNumber(10)
|
||||
param.NotifyUrl = lakala.CallbackLaKaLaSeparateUrl
|
||||
|
||||
status, separateNo, err := api.LaKaLaApi.Separate(param)
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
recv, _ := json.Marshal(param.RecvDatas)
|
||||
separateData := &model.LakalaSeparateAmt{
|
||||
MerchantNo: param.MerchantNo,
|
||||
OutSeparateNo: param.OutSeparateNo, // 商户分账指令流水号
|
||||
SeparateNo: separateNo,
|
||||
CalType: param.CalType,
|
||||
FinishDate: "",
|
||||
TotalAmt: param.TotalAmt,
|
||||
Status: status,
|
||||
DetailData: string(recv),
|
||||
Remark: "分账",
|
||||
}
|
||||
t, err := time.Parse("20060102", param.LogDate)
|
||||
if err != nil {
|
||||
t = time.Now()
|
||||
}
|
||||
separateData.LogDate = t
|
||||
dao.WrapAddIDCULDEntity(separateData, ctx.GetUserName())
|
||||
|
||||
if err = dao.CreateEntity(dao.GetDB(), separateData); err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
return status, separateNo, nil
|
||||
}
|
||||
|
||||
// SeparateResultQuery 分账结果查询
|
||||
func SeparateResultQuery(merchantNo, separateNo string) (*lakala.SeparateResultQueryResp, error) {
|
||||
result, err := api.LaKaLaApi.SeparateResultQuery(merchantNo, separateNo)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
db := dao.GetDB()
|
||||
recordsObj, err := dao.GetSeparateRecords(db, merchantNo, separateNo, result.CmdType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
recordsObj.UpdatedAt = time.Now()
|
||||
recordsObj.TotalAmt = result.TotalAmt
|
||||
recordsObj.ActualSeparateAmt = result.ActualSeparateAmt
|
||||
recordsObj.TotalFeeAmt = result.TotalFeeAmt
|
||||
recordsObj.Status = result.Status
|
||||
if len(result.DetailDatas) != 0 {
|
||||
detail, _ := json.Marshal(result.DetailDatas)
|
||||
recordsObj.DetailData = string(detail)
|
||||
}
|
||||
|
||||
if _, err = dao.UpdateEntity(db, recordsObj); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// SeparateCancel 订单分账撤销
|
||||
func SeparateCancel(merchantNo, separateNo string) (*lakala.SeparateCancelResp, error) {
|
||||
db := dao.GetDB()
|
||||
separateAmt, err := dao.GetSeparateRecords(db, merchantNo, separateNo, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result, err := api.LaKaLaApi.SeparateCancel(&lakala.SeparateCancelReq{
|
||||
MerchantNo: merchantNo,
|
||||
OriginSeparateNo: separateNo,
|
||||
OriginOutSeparateNo: "",
|
||||
OutSeparateNo: lakala.GetOrderNumber(8),
|
||||
TotalAmt: separateAmt.TotalAmt,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
separateAmt.Status = result.RespData.Status
|
||||
separateAmt.SeparateNo = result.RespData.SeparateNo
|
||||
separateAmt.Remark += ",分账撤销"
|
||||
|
||||
if _, err = dao.UpdateEntity(db, separateAmt, "SeparateNo2", "Status2", "Remark"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return result, err
|
||||
}
|
||||
|
||||
// SeparateFallBack 分账退回
|
||||
func SeparateFallBack(merchantNo, separateNo, reason string) (*lakala.SeparateFallResp, error) {
|
||||
db := dao.GetDB()
|
||||
separateAmt, err := dao.GetSeparateRecords(db, merchantNo, separateNo, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
recv := make([]*lakala.RecvDatasParam, 0, 0)
|
||||
if err = json.Unmarshal([]byte(separateAmt.DetailData), &recv); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(recv) == 0 {
|
||||
return nil, fmt.Errorf("数据异常[%s],未获取到分账详细", separateNo)
|
||||
}
|
||||
|
||||
param := &lakala.SeparateFallReq{
|
||||
MerchantNo: merchantNo,
|
||||
OriginSeparateNo: separateNo,
|
||||
OutSeparateNo: lakala.GetOrderNumber(8),
|
||||
FallbackReason: reason,
|
||||
TotalAmt: separateAmt.TotalAmt,
|
||||
OriginRecvDatas: nil,
|
||||
}
|
||||
originRecvDatas := make([]*lakala.OriginRecvDatas, 0, len(recv))
|
||||
for _, v := range recv {
|
||||
originRecvDatas = append(originRecvDatas, &lakala.OriginRecvDatas{
|
||||
RecvNo: v.RecvNo,
|
||||
Amt: v.SeparateValue,
|
||||
})
|
||||
}
|
||||
param.OriginRecvDatas = originRecvDatas
|
||||
|
||||
result, err := api.LaKaLaApi.SeparateFallBack(param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
separateAmt.Status = result.RespData.Status
|
||||
separateAmt.SeparateNo = result.RespData.SeparateNo
|
||||
separateAmt.Remark += ",分账退回"
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region 订单相关
|
||||
|
||||
// CreateOrder 创建拉卡拉交易订单
|
||||
func CreateOrder(vendorOrderID, merchantNo string, vendorId int) (*lakala.CreateOrderResp, error) {
|
||||
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
param := &lakala.CreateOrderReq{
|
||||
OutOrderNo: order.VendorOrderID,
|
||||
MerchantNo: merchantNo,
|
||||
TotalAmount: order.ActualPayPrice,
|
||||
OrderEfficientTime: time.Now().Add(1 * time.Hour).Format("20060102150405"),
|
||||
OrderInfo: fmt.Sprintf("门店扫码订单:%d", order.OrderSeq),
|
||||
NotifyUrl: lakala.OrderStatusCallback,
|
||||
}
|
||||
|
||||
result, err := api.LaKaLaApi.CreateOrder(param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// CloseOrder 关闭待支付订单
|
||||
func CloseOrder(merchantId, vendorOrderId string, vendorId int) (string, error) {
|
||||
param := &lakala.CloseOrderReq{
|
||||
MerchantNo: merchantId,
|
||||
OutOrderNo: vendorOrderId,
|
||||
PayOrderNo: "",
|
||||
ChannelId: "",
|
||||
}
|
||||
result, err := api.LaKaLaApi.CloseOrder(param)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
order, err := partner.CurOrderManager.LoadOrder(vendorOrderId, vendorId)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
switch result {
|
||||
case lakala.OrderCloseStatusPayFail, lakala.OrderCloseStatusExpire, lakala.OrderCloseStatusCancel, lakala.OrderCloseStatusRefund, lakala.OrderCloseStatusClose:
|
||||
order.Status = model.OrderStatusCanceled
|
||||
order.VendorStatus = result
|
||||
dao.UpdateEntity(dao.GetDB(), order, "Status", "VendorStatus")
|
||||
}
|
||||
|
||||
return result, err
|
||||
}
|
||||
|
||||
// QueryOrder 收银台订单查询
|
||||
func QueryOrder(vendorOrderId, merchantId string, vendorId int) (*lakala.QueryOrderResp, error) {
|
||||
result, err := api.LaKaLaApi.QueryOrder(vendorOrderId, merchantId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
order, err := partner.CurOrderManager.LoadOrder(vendorOrderId, vendorId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
switch result.OrderStatus {
|
||||
case lakala.OrderCloseStatusPayFail, lakala.OrderCloseStatusExpire, lakala.OrderCloseStatusCancel, lakala.OrderCloseStatusRefund, lakala.OrderCloseStatusClose:
|
||||
order.Status = model.OrderStatusCanceled
|
||||
order.VendorStatus = result.OrderStatus
|
||||
case lakala.OrderCloseStatusPaySuccess:
|
||||
order.Status = model.OrderStatusFinished
|
||||
order.VendorStatus = result.OrderStatus
|
||||
order.OrderFinishedAt = time.Now()
|
||||
}
|
||||
dao.UpdateEntity(dao.GetDB(), order, "Status", "VendorStatus", "OrderFinishedAt")
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region 账户相关
|
||||
|
||||
// QueryBillBalance 查询账户余额
|
||||
func QueryBillBalance(orgNo, merchantNo, payType string) (*lakala.QueryBillBalanceResp, error) {
|
||||
result, err := api.LaKaLaApi.QueryBillBalance(&lakala.QueryBillBalanceReq{
|
||||
OrgNo: orgNo,
|
||||
MerchantNo: merchantNo,
|
||||
PayType: payType,
|
||||
})
|
||||
|
||||
return result, err
|
||||
}
|
||||
|
||||
// EwalletWithdrawD1 申请提现
|
||||
func EwalletWithdrawD1(ctx *jxcontext.Context, orgNo, merchantNo, payType, drawAmt string) error {
|
||||
param := &lakala.EwalletWithdrawD1Req{
|
||||
OrgNo: orgNo,
|
||||
MerchantNo: merchantNo,
|
||||
DrawAmt: drawAmt,
|
||||
NotifyUrl: lakala.BillProdCallbackUrl,
|
||||
MerOrderNo: lakala.GetOrderNumber(8),
|
||||
PayNo: "",
|
||||
PayType: payType,
|
||||
Remark: "",
|
||||
Summary: "",
|
||||
BankId: "",
|
||||
}
|
||||
drawJnl, _, err := api.LaKaLaApi.EwalletWithdrawD1(param)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
withdrawal := &model.LakalaWithdrawal{
|
||||
CreatedTime: time.Now(),
|
||||
MercId: merchantNo,
|
||||
DrawJnl: drawJnl,
|
||||
ReqDate: "",
|
||||
DrawAmt: drawAmt,
|
||||
DrawFee: "",
|
||||
BatchAutoSettle: "01",
|
||||
DrawState: "DRAW.ACCEPTED",
|
||||
DrawMode: "",
|
||||
Memo: "",
|
||||
}
|
||||
dao.WrapAddIDCULDEntity(withdrawal, ctx.GetUserName())
|
||||
|
||||
if err = dao.CreateEntity(dao.GetDB(), withdrawal); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// EwalletWithdrawQuery 提现结果查询
|
||||
func EwalletWithdrawQuery(ctx *jxcontext.Context, orgNo, merchantNo, drawJnl string) (*lakala.EwalletWithdrawQueryResp, error) {
|
||||
resp, err := api.LaKaLaApi.EwalletWithdrawQuery(&lakala.EwalletWithdrawQueryReq{
|
||||
OrgNo: orgNo,
|
||||
MerchantNo: merchantNo,
|
||||
DrawJnl: drawJnl,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
db := dao.GetDB()
|
||||
withDraw, err := dao.GetEwalletWithDraw(db, merchantNo, drawJnl)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
withDraw.UpdatedAt = time.Now()
|
||||
withDraw.LastOperator = ctx.GetUserName()
|
||||
withDraw.CreatedTime = utils.Str2Time(resp.CreatedTime)
|
||||
withDraw.CompleteTime = utils.Str2Time(resp.CompleteTime)
|
||||
withDraw.ReqDate = resp.ReqDate
|
||||
withDraw.DrawFee = resp.DrawFee
|
||||
withDraw.DrawAmt = resp.DrawAmt
|
||||
withDraw.BatchAutoSettle = resp.BatchAutoSettle
|
||||
withDraw.DrawState = resp.DrawState
|
||||
withDraw.DrawMode = resp.DrawMode
|
||||
withDraw.Memo = resp.Memo
|
||||
|
||||
if _, err = dao.UpdateEntity(db, withDraw); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// SettleDrawPattern 提款模式设置
|
||||
func SettleDrawPattern(param *lakala.SettleDrawPatternReq) error {
|
||||
param.NotifyUrl = lakala.BillProdCallbackUrl
|
||||
return api.LaKaLaApi.SettleDrawPattern(param)
|
||||
}
|
||||
|
||||
// EwalletSettleQuery 提款模式查询
|
||||
func EwalletSettleQuery(orgCode, merchantId string) (*lakala.EwalletSettleQueryResp, error) {
|
||||
return api.LaKaLaApi.EwalletSettleQuery(orgCode, merchantId)
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region 图片上传
|
||||
|
||||
func UploadImg(filePath, imgType, sourcechnl, isOcr string) (*lakala.UploadImgResp, error) {
|
||||
return api.LaKaLaApi.FileUpload(filePath, imgType, sourcechnl, isOcr)
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region 京西数据查询
|
||||
|
||||
// GetIncomingList 进件查询
|
||||
func GetIncomingList(merchantNo string, storeId, pageSize, offset int) (*model.PagedInfo, error) {
|
||||
return dao.GetIncoming(storeId, merchantNo, offset, pageSize)
|
||||
}
|
||||
|
||||
// GetRecipientList 获取分账商户
|
||||
func GetRecipientList(orgCode, receiverNo, receiverName string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
|
||||
return dao.GetRecipientList(orgCode, receiverNo, receiverName, offset, pageSize)
|
||||
}
|
||||
|
||||
// GetSeparateAmt 分账流水查询
|
||||
func GetSeparateAmt(merchantNo, cmdType, status, separateNo, separateTimeStart, separateTimeEnd string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
|
||||
var (
|
||||
start time.Time
|
||||
end time.Time
|
||||
)
|
||||
if separateTimeStart != "" {
|
||||
start = utils.Str2Time(separateTimeStart)
|
||||
}
|
||||
if separateTimeEnd != "" {
|
||||
end = utils.Str2Time(separateTimeEnd)
|
||||
}
|
||||
return dao.GetSeparateAmt(merchantNo, cmdType, status, separateNo, start, end, offset, pageSize)
|
||||
}
|
||||
|
||||
// WithdrawalList 提现流水查询
|
||||
func WithdrawalList(merchantNo, drawJnl, acctName, startTime, endTime string, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
|
||||
var (
|
||||
start time.Time
|
||||
end time.Time
|
||||
)
|
||||
if startTime != "" {
|
||||
start = utils.Str2Time(startTime)
|
||||
}
|
||||
if endTime != "" {
|
||||
end = utils.Str2Time(endTime)
|
||||
}
|
||||
return dao.WithdrawalList(merchantNo, drawJnl, acctName, start, end, pageSize, offset)
|
||||
}
|
||||
|
||||
//#enregion
|
||||
Reference in New Issue
Block a user