This commit is contained in:
邹宗楠
2025-06-24 13:50:48 +08:00
parent 7fd163485c
commit b2d23c1587
15 changed files with 3268 additions and 72 deletions

View File

@@ -0,0 +1,286 @@
package dao
import (
"git.rosy.net.cn/jx-callback/business/model"
"time"
)
// GetStoreInfoByMerchantID 门店进件/分账商户
func GetStoreInfoByMerchantID(db *DaoDB, merchantNo string, storeId int, applyId, OrderID string) (*model.LakalaIncoming, error) {
merchantObj := &model.LakalaIncoming{}
param := []interface{}{}
sql := ` SELECT * FROM lakala_incoming WHERE 1=1 `
if merchantNo != "" {
sql += ` AND merchant_no = ?`
param = append(param, merchantNo)
}
if storeId != model.NO {
sql += ` AND store_id = ?`
param = append(param, storeId)
}
if applyId != "" {
sql += ` AND apply_id = ?`
param = append(param, applyId)
}
if OrderID != "" {
sql += ` AND order_id = ?`
param = append(param, OrderID)
}
if err := GetRow(db, merchantObj, sql, param...); err != nil {
return nil, err
}
return merchantObj, nil
}
// GetRecipientByMerchantID 获取门店接受账户详细
func GetRecipientByMerchantID(db *DaoDB, receiverNo string) (*model.LakalaRecipient, error) {
receiverObj := &model.LakalaRecipient{}
sql := ` SELECT * FROM lakala_recipient WHERE receiver_no = ?`
if err := GetRow(db, receiverObj, sql, []interface{}{receiverNo}...); err != nil {
return nil, err
}
return receiverObj, nil
}
// GetSeparateRecords 分账记录
func GetSeparateRecords(db *DaoDB, merchantNo, separateNo, cmsType string) (*model.LakalaSeparateAmt, error) {
records := &model.LakalaSeparateAmt{}
sql := ` SELECT * FROM lakala_separate_amt WHERE 1=1 `
param := []interface{}{}
if merchantNo != "" {
sql += ` AND merchant_no = ?`
param = append(param, merchantNo)
}
switch cmsType {
case model.CmdTypeSeparate:
sql += ` AND separate_no1 = ?`
case model.CmdTypeCancel:
sql += ` AND separate_no2 = ?`
case model.CmdTypeFallBack:
sql += ` AND separate_no3 = ?`
default:
sql += ` AND separate_no1 = ?`
}
param = append(param, separateNo)
if err := GetRow(db, records, sql, param...); err != nil {
return nil, err
}
return records, nil
}
// GetEwalletWithDraw 提现记录
func GetEwalletWithDraw(db *DaoDB, mercId, drawJnl string) (*model.LakalaWithdrawal, error) {
receiverObj := &model.LakalaWithdrawal{}
parama := []interface{}{}
sql := ` SELECT * FROM lakala_withdrawal WHERE 1=1 `
if mercId != "" {
sql += ` AND merc_id = ?`
parama = append(parama, mercId)
}
if drawJnl != "" {
sql += ` AND draw_jnl = ? `
parama = append(parama, drawJnl)
}
if err := GetRow(db, receiverObj, sql, parama...); err != nil {
return nil, err
}
return receiverObj, nil
}
// GetIncoming 京西管理系统查询进件列表
func GetIncoming(storeID int, merchantNo string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
db := GetDB()
txDB, _ := Begin(db)
defer func() {
if r := recover(); r != nil {
Rollback(db, txDB)
panic(r)
}
}()
var incoming []*model.LakalaIncoming
var param = []interface{}{}
sql := ` SELECT SQL_CALC_FOUND_ROWS s.name,l.* FROM lakala_incoming l
JOIN store s ON l.store_id = s.id
WHERE 1=1 `
if storeID != 0 {
sql += ` AND s.store_id = ? `
param = append(param, storeID)
}
if merchantNo != "" {
sql += ` AND s.merchant_no = ?`
param = append(param, merchantNo)
}
sql += `
ORDER BY l.total_amt desc
LIMIT ? OFFSET ?
`
param = append(param, pageSize, offset)
if err = GetRowsTx(txDB, &incoming, sql, param...); err == nil {
pagedInfo = &model.PagedInfo{
TotalCount: GetLastTotalRowCount2(db, txDB),
Data: incoming,
}
}
return pagedInfo, nil
}
// GetRecipientList 京西管理系统查询分账账户列表
func GetRecipientList(orgCode, receiverNo, receiverName string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
db := GetDB()
txDB, _ := Begin(db)
defer func() {
if r := recover(); r != nil {
Rollback(db, txDB)
panic(r)
}
}()
var recipient []*model.LakalaRecipient
var param = []interface{}{}
sql := ` SELECT SQL_CALC_FOUND_ROWS r.* FROM lakala_recipient r WHERE 1=1 `
if orgCode != "" {
sql += ` AND r.org_code = ? `
param = append(param, orgCode)
}
if receiverNo != "" {
sql += ` AND r.receiver_no = ?`
param = append(param, receiverNo)
}
if receiverName != "" {
sql += ` AND r.receiver_name like ?`
param = append(param, "%"+receiverNo+"%")
}
sql += `
ORDER BY r.id desc
LIMIT ? OFFSET ?
`
param = append(param, pageSize, offset)
if err = GetRowsTx(txDB, &recipient, sql, param...); err == nil {
pagedInfo = &model.PagedInfo{
TotalCount: GetLastTotalRowCount2(db, txDB),
Data: recipient,
}
}
return pagedInfo, nil
}
// GetSeparateAmt 交易流水查询
func GetSeparateAmt(merchantNo, cmdType, status, separateNo string, separateTimeStart, separateTimeEnd time.Time, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
db := GetDB()
txDB, _ := Begin(db)
defer func() {
if r := recover(); r != nil {
Rollback(db, txDB)
panic(r)
}
}()
var recipient []*model.LakalaSeparateAmt
var param = []interface{}{}
sql := ` SELECT SQL_CALC_FOUND_ROWS r.* FROM Lakala_separate_amt r WHERE 1=1 `
if merchantNo != "" {
sql += ` AND r.merchant_no = ? `
param = append(param, merchantNo)
}
if cmdType != "" {
sql += ` AND r.cmd_type = ?`
param = append(param, cmdType)
}
if status != "" {
sql += ` AND r.status = ?`
param = append(param, status)
}
if separateNo != "" {
sql += ` AND r.separate_no = ?`
param = append(param, separateNo)
}
if !separateTimeStart.IsZero() {
sql += ` AND r.log_date >= ?`
param = append(param, separateTimeStart)
}
if !separateTimeEnd.IsZero() {
sql += ` AND r.log_date <= ?`
param = append(param, separateTimeEnd)
}
sql += `
ORDER BY r.id desc
LIMIT ? OFFSET ?
`
param = append(param, pageSize, offset)
if err = GetRowsTx(txDB, &recipient, sql, param...); err == nil {
pagedInfo = &model.PagedInfo{
TotalCount: GetLastTotalRowCount2(db, txDB),
Data: recipient,
}
}
return pagedInfo, nil
}
// WithdrawalList 提现记录
func WithdrawalList(merchantNo, drawJnl, acctName string, startTime, endTime time.Time, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
db := GetDB()
txDB, _ := Begin(db)
defer func() {
if r := recover(); r != nil {
Rollback(db, txDB)
panic(r)
}
}()
var recipient []*model.LakalaWithdrawal
var param = []interface{}{}
sql := ` SELECT SQL_CALC_FOUND_ROWS r.* FROM lakala_withdrawal r WHERE 1=1 `
if merchantNo != "" {
sql += ` AND r.merchant_no = ? `
param = append(param, merchantNo)
}
if drawJnl != "" {
sql += ` AND r.draw_jnl = ?`
param = append(param, drawJnl)
}
if acctName != "" {
sql += ` AND r.acct_name like ?`
param = append(param, "%"+acctName+"%")
}
if !startTime.IsZero() {
sql += ` AND r.created_time >= ?`
param = append(param, startTime)
}
if !endTime.IsZero() {
sql += ` AND r.created_time <= ?`
param = append(param, endTime)
}
sql += `
ORDER BY r.id desc
LIMIT ? OFFSET ?
`
param = append(param, pageSize, offset)
if err = GetRowsTx(txDB, &recipient, sql, param...); err == nil {
pagedInfo = &model.PagedInfo{
TotalCount: GetLastTotalRowCount2(db, txDB),
Data: recipient,
}
}
return pagedInfo, nil
}

169
business/model/lakala.go Normal file
View File

@@ -0,0 +1,169 @@
package model
import "time"
const (
ThingTypeSeparate = 1 // 商户分账
ThingTypeReceive = 2 // 分账接收方
OperateTypeCreate = "create" // 创建
OperateTypeUpdate = "update" // 修改
OperateTypeBind = "bind" // 绑定
OperateTypeUnBind = "unbind" // 解绑
OperateStatusReview = "review" // 审核中
OperateStatusSuccess = "success" // 审核通过
OperateStatusFail = "fail" // 审核失败
ReceiverStatusValid = "VALID" // 有效
ReceiverStatusInValid = "INVALID" // 无效
)
// 分账状态说明
const (
SeparateAmtAccepted = "ACCEPTED" // 已受理
SeparateAmtProcessing = "PROCESSING" // 处理中
SeparateAmtFail = "FAIL" // 失败
SeparateAmtSuccess = "SUCCESS" // 成功
SeparateAmtCanceling = "CANCELING" // 撤销中
SeparateAmtCanceled = "CANCELED" // 撤销成功
SeparateAmtCancelFail = "CANCEL_FAIL" // 撤销失败
SeparateAmtFallBacking = "FALLBACKING" // 回退中
SeparateAmtFallBackEnd = "FALLBACK_END" // 回退失败
)
// 分账指令类型
const (
CmdTypeSeparate = "SEPARATE" // 分账
CmdTypeCancel = "CANCEL" // 分账撤销
CmdTypeFallBack = "FALLBACK" // 分账退回
)
// LakalaIncoming 进件账户状态,分账状态
type LakalaIncoming struct {
ModelIDCUL
StoreId int `orm:"column(store_id);size(16)" json:"storeId"` // 京西门店ID
MerchantNo string `orm:"column(merchant_no);size(20)" json:"merchantNo"` // 拉卡拉进件商户号
TermNo string `orm:"column(term_no);size(256)" json:"termNo"` // 终端号 M String(32) 拉卡拉分配的业务终端号
MerchantStatus string `orm:"column(merchant_status);size(80)" json:"merchantStatus"` // 拉卡拉进件状态
FeeId string `orm:"column(fee_id);size(80)" json:"feeId"` // 拉卡拉费率变更ID
FeeStatus string `orm:"column(fee_status);size(80)" json:"feelStatus"` // 拉卡拉费率变更状态
SettleId string `orm:"column(settle_id);size(80)" json:"settleId"` // 结算变更id
SettleStatus string `orm:"column(settle_status);size(80)" json:"settleStatus"` // 结算变更状态
BasicId string `orm:"column(basic_id);size(80)" json:"basicId"` // 基本信息变更ID
BasicStatus string `orm:"column(basic_status);size(80)" json:"basicStatus"` // 基本信息变更状态
LicenseId string `orm:"column(license_id);size(80)" json:"licenseId"` // 营业执照变更ID
LicenseStatus string `orm:"column(license_status);size(80)" json:"licenseStatus"` // 营业执照变更状态
// 分账
OrderID string `orm:"column(order_id);size(32)" json:"orderId"` // 当前事件ID
ApplyID string `orm:"column(apply_id);size(32)" json:"applyId"` // 申请id
ThingType int `orm:"column(thong_type);size(2)" json:"thingType"` // 事件类型[1-分账门店/2-分账接收方]
Operate string `orm:"column(operate);size(2)" json:"operate"` // 操作类型[创建/修改/绑定/解绑]
OperateStatus string `orm:"column(operate_status);size(2)" json:"operateStatus"` // 操作所处状态
TotalAmt string `orm:"column(total_amt);size(10)" json:"totalAmt"` // 总分账金额
CanAmt string `orm:"column(can_amt);size(10)" json:"canAmt"` // 可分账金额
BindAccount string `orm:"column(bind_account);type(text)" json:"bindAccount"` // 绑定的分账账户map["receiverNo"]"1"
Remark string `orm:"column(remark);size(512)" json:"remark"` // 备注说明
}
type BindAccountObj struct {
ApplyId string `json:"applyId"` // 申请编号
Status string `json:"status"` // 审核状态
Remark string `json:"remark"` // 备注说明
}
func (o *LakalaIncoming) TableUnique() [][]string {
return [][]string{
[]string{"StoreID"},
[]string{"MerchantNo"},
}
}
func (o *LakalaIncoming) TableIndex() [][]string {
return [][]string{
[]string{"ApplyID"},
}
}
// LakalaRecipient 拉卡拉接收分账账户
type LakalaRecipient struct {
ModelIDCUL
OrgCode string `orm:"column(org_code);size(20)" json:"orgCode"` // 申请机构代码(回传)
OrgID string `orm:"column(org_id);size(20)" json:"orgId"` // 接收方所属机构
ReceiverNo string `orm:"column(receiver_no);size(20)" json:"receiverNo"` // 接收方编号
ReceiverName string `orm:"column(receiver_name);size(20)" json:"receiverName"` // 接收方名称
Status string `orm:"column(status);size(16)" json:"status"` // 分账账户状态 有效VALID 无效INVALID
Remark string `orm:"column(remark);size(512)" json:"remark"` // 备注说明
}
func (o *LakalaRecipient) TableUnique() [][]string {
return [][]string{
[]string{"ReceiverNo"},
}
}
func (o *LakalaRecipient) TableIndex() [][]string {
return [][]string{
[]string{"CreatedAt"},
}
}
// LakalaSeparateAmt 分账记录
type LakalaSeparateAmt struct {
ModelIDCUL
MerchantNo string `orm:"column(merchant_no);size(20)" json:"merchantNo"` // 分账发起商户
CmdType string `orm:"column(cmd_type);size(32)" json:"cmdType"` // SEPARATE分账 CANCEL分账撤销FALLBACK分账回退
SeparateNo string `orm:"column(separate_no);size(32)" json:"separateNo"` // 分账系统生成唯一流水
Status string `orm:"column(status);size(32)" json:"status1"` // 分账状态
//SeparateNo2 string `orm:"column(separate_no2);size(32)" json:"separateNo2"` // 分账撤销系统生成唯一流水
//Status2 string `orm:"column(status2);size(32)" json:"status2"` // 分账撤销状态
//SeparateNo3 string `orm:"column(separate_no3);size(32)" json:"separateNo3"` // 分账回退系统生成唯一流水
//Status3 string `orm:"column(status3);size(32)" json:"status3"` // 分账回退状态
OutSeparateNo string `orm:"column(out_separate_no);size(32)" json:"outSeparateNo"` // 商户分账指令流水号
LogDate time.Time `orm:"column(log_date);type(datetime)" json:"logDate"` // 交易日期
CalType string `orm:"column(cal_type);size(2)" json:"calType"` // 分账计算类型
FinishDate string `orm:"column(finish_date);size(20)" json:"finishDate"` // 完成日期 yyyyMMdd
TotalAmt string `orm:"column(total_amt);size(15)" json:"totalAmt"` // 发生总金额
ActualSeparateAmt string `orm:"column(actual_separate_amt);size(15)" json:"actualSeparateAmt"` // 实分金额
TotalFeeAmt string `orm:"column(total_fee_amt);size(15)" json:"totalFeeAmt"` // 手续费金额
FinalStatus string `orm:"column(final_status);size(32)" json:"finalStatus"` // 处理状态
DetailData string `orm:"column(detail_data);type(text)" json:"detailData"` // 细节数据
Remark string `orm:"column(remark);size(256)" json:"remark"` // 备注说明记录订单流程变化
}
func (o *LakalaSeparateAmt) TableUnique() [][]string {
return [][]string{
[]string{"MerchantNo"},
}
}
func (o *LakalaSeparateAmt) TableIndex() [][]string {
return [][]string{
[]string{"CreatedAt"},
}
}
// LakalaWithdrawal 拉卡拉提现记录
type LakalaWithdrawal struct {
ModelIDCUL
CreatedTime time.Time `orm:"column(created_time);type(datetime)" json:"createdTime"` // 创建时间
CompleteTime time.Time `orm:"column(complete_time);type(datetime)" json:"completeTime"` // 完成时间
MercId string `orm:"column(merc_id);size(32)" json:"mercId"` // 商户号
DrawJnl string `orm:"column(draw_jnl);size(32)" json:"drawJnl"` // 提款流水号
ReqDate string `orm:"column(req_date);size(32)" json:"reqDate"` // 请求日期
AcctName string `orm:"column(acct_name);size(32)" json:"acctName"` // 结算账户名
AcctNo string `orm:"column(acct_no);size(32)" json:"acctNo"` // 结算账户号
DrawAmt string `orm:"column(draw_amt);size(32)" json:"drawAmt"` // 提款金额(元):含手续费
DrawFee string `orm:"column(draw_fee);size(32)" json:"drawFee"` // 手续费(元)
BatchAutoSettle string `orm:"column(batch_auto_settle);size(2)" json:"batchAutoSettle"` // 结算模式01主动提款 02余额自动结算 03 交易自动结算)
DrawState string `orm:"column(draw_state);size(16)" json:"drawState"` // 提款状态 DRAW.ACCEPTED 提款已受理 DRAW.FREEZE 提款冻结DRAW.PROCESSING 提款处理中DRAW.SUCCESS 提款成功DRAW.FAILED 提款失败
DrawMode string `orm:"column(draw_mode);size(4)" json:"drawMode"` // 提款模式(D0/D1)
Memo string `orm:"column(memo);size(256)" json:"memo"` // 结果信息
}
func (o *LakalaWithdrawal) TableUnique() [][]string {
return [][]string{
[]string{"MercId"},
[]string{"DrawJnl"},
}
}
func (o *LakalaWithdrawal) TableIndex() [][]string {
return [][]string{
[]string{"CreatedTime"},
}
}

View File

@@ -18,10 +18,11 @@ const (
PayTypeTL = 2 // 通联宝支付
PayTypeTicTok = 3 // 抖音支付
PayTypeKuaiShou = 4 // 快手支付
PayTypeLaKaLa = 5 // 拉卡拉
PayTypeTL_DiscountCard = 3 // 通联宝支付(会员折扣卡)
PayTypeTL_StoreAcctPay = 4 // 通联宝支付(门店账户充值)
PayTypeTL_BrandBillCharge = 5 //品牌账户充值pc扫码支付
PayTypeTL_BrandBillCharge = 5 // 品牌账户充值pc扫码支付
PayStatusNo = 0
PayStatusYes = 1
@@ -138,7 +139,7 @@ type GoodsOrder struct {
ExpectedDeliveredTime time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间
CancelApplyReason string `orm:"size(255)" json:"-"` // ""表示没有申请不为null表示用户正在取消申请
DeliveryType string `orm:"size(32)" json:"deliveryType"` // 订单配送方式,缺省是平台配送
CreateDeliveryType int `orm:"default(0)" json:"createDeliveryType"` //默认0系统发单1为门店发单
CreateDeliveryType int `orm:"default(0)" json:"createDeliveryType"` // 默认0系统发单1为门店发单
VendorWaybillID string `orm:"column(vendor_waybill_id);size(48)" json:"vendorWaybillID"` // 运单id
WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"` // 表示当前承运商,-1表示还没有安排
AdjustCount int8 `json:"adjustCount"` // 调整单(次数)