This commit is contained in:
邹宗楠
2022-11-24 13:48:52 +08:00
parent 3200ebd799
commit 57d94f82ed
13 changed files with 493 additions and 57 deletions

View File

@@ -1,10 +1,13 @@
package cms
import (
"errors"
"fmt"
"git.rosy.net.cn/baseapi/platformapi/recharge_phone_bill"
"git.rosy.net.cn/jx-callback/business/jxstore/event"
"git.rosy.net.cn/jx-callback/business/q_bida"
"github.com/astaxie/beego/client/orm"
"regexp"
"strings"
"time"
@@ -24,7 +27,7 @@ import (
"git.rosy.net.cn/jx-callback/business/model"
)
func CreateOrder(ctx *jxcontext.Context, type1, orderType int, way string, price int, lng, lat float64) (orderID, errCode string, err error) {
func CreateOrder(ctx *jxcontext.Context, type1, orderType int, way string, price int, lng, lat float64, mobile, flowCode string) (orderID, errCode string, err error) {
var (
db = dao.GetDB()
order *model.Order
@@ -72,8 +75,23 @@ func CreateOrder(ctx *jxcontext.Context, type1, orderType int, way string, price
Address: address,
DistrictCode: dCode,
CityCode: cCode,
PayMethod: 4,
}
// 话费充值
if order.OrderType == 7 {
// 校验充值编号
have, err := CheckMobileAndFlowCode(mobile, flowCode)
if err != nil {
return "", "", err
}
if !have {
return "", "", errors.New("充值模板错误")
}
order.Mobile = mobile
order.FlowCode = flowCode
order.RechargeStatus = 3 // 当前系统待充值
}
dao.WrapAddIDCULEntity(order, ctx.GetUserName())
if err = dao.CreateEntityTx(txDB, order); err != nil {
dao.Rollback(db, txDB)
@@ -82,6 +100,48 @@ func CreateOrder(ctx *jxcontext.Context, type1, orderType int, way string, price
return order.OrderID, errCode, err
}
func CheckMobileAndFlowCode(mobile, flowCode string) (bool, error) {
// 校验业务电话和充值号码是否正确
if mobile == "" || flowCode == "" {
return false, errors.New("充值电话费用号码/业务代码不能为空")
}
regRuler := "^1[3456789]{1}\\d{9}$"
if !regexp.MustCompile(regRuler).MatchString(mobile) {
return false, errors.New("电话号码格式校验错误")
}
switch mobile[0:4] {
case "1703", "1705", "1706": // 中国移动
if flowCode == recharge_phone_bill.FlowCodeY10Y100 || flowCode == recharge_phone_bill.FlowCodeY10Y200 {
return true, nil
}
case "1704", "1707", "1708", "1709": // 中国联通
if flowCode == recharge_phone_bill.FlowCodeL10Y50 || flowCode == recharge_phone_bill.FlowCodeL10Y100 || flowCode == recharge_phone_bill.FlowCodeL10Y200 {
return true, nil
}
case "1700", "1701", "1702 ": // 中国电信
if flowCode == recharge_phone_bill.FlowCodeD10Y50 || flowCode == recharge_phone_bill.FlowCodeD10Y100 || flowCode == recharge_phone_bill.FlowCodeD10Y200 {
return true, nil
}
}
switch mobile[0:3] {
case "139", "138", "137", "136", "135", "134", "150", "151", "152", "157", "158", "159 182", "183", "184", "187", "188", "147", "198", "178 ", "165": // 中国移动
if flowCode == recharge_phone_bill.FlowCodeY10Y100 || flowCode == recharge_phone_bill.FlowCodeY10Y200 {
return true, nil
}
case "130", "131", "132", "155", "156", "185", "186", "175", "176", "166", "171", "167": // 中国联通
if flowCode == recharge_phone_bill.FlowCodeL10Y50 || flowCode == recharge_phone_bill.FlowCodeL10Y100 || flowCode == recharge_phone_bill.FlowCodeL10Y200 {
return true, nil
}
case "133", "153", "173", "177", "180", "181", "189", "191", "199": // 中国电信
if flowCode == recharge_phone_bill.FlowCodeD10Y50 || flowCode == recharge_phone_bill.FlowCodeD10Y100 || flowCode == recharge_phone_bill.FlowCodeD10Y200 {
return true, nil
}
}
return false, errors.New("运营商查询错误/充值编码错误")
}
func Pay(ctx *jxcontext.Context, orderID string, payType int, vendorPayType, appId string, payPrice int) (result *financial.WxPayParam, err error) {
var (
temp_PayPrice int
@@ -117,7 +177,6 @@ func Pay(ctx *jxcontext.Context, orderID string, payType int, vendorPayType, app
if _, err := dao.SetOrderStatus(txDB, temp_PayPrice, temp_PayMethod, orderInfo.Status, orderID); err != nil {
return nil, err
}
globals.SugarLogger.Debugf("pay begin……")
err = dao.GetEntity(db, order, "OrderID")
if order.OrderID == "" {
return result, fmt.Errorf("未找到此订单!")
@@ -125,14 +184,11 @@ func Pay(ctx *jxcontext.Context, orderID string, payType int, vendorPayType, app
payHandler.Order = order
//如果用户没有对应账单信息就给他生成一条
// 给用户创建一个银行卡账户
globals.SugarLogger.Debug("create bill begin……")
userBill, err := dao.GetUserBill(db, order.UserID, "")
if userBill == nil {
err = financial.AddUserBill(txDB, jxutils.GenBillID(), order.UserID)
}
err = payHandler.CreatePay(txDB, appId)
globals.SugarLogger.Debug("the last step o f this program,return err……", err)
globals.SugarLogger.Debugf("result : %v", utils.Format4Output(payHandler.WxPayParam, false))
return payHandler.WxPayParam, err
}

View File

@@ -0,0 +1,50 @@
package cms
import (
"errors"
"git.rosy.net.cn/baseapi/platformapi/recharge_phone_bill"
"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/globals/api"
"time"
)
// QueryUserRecharge 用户查询充值列表
func QueryUserRecharge(userId []string, mobile, orderId string, page, pageSize int, startTime, endTime string, rechargeStatus int) ([]*model.RechargeUserModelData, int, error) {
if page == 0 {
page = 1
}
if pageSize == 0 {
pageSize = 10
}
var start time.Time
var end time.Time
if startTime != "" {
start = utils.Str2Time(startTime)
}
if endTime != "" {
end = utils.Str2Time(endTime)
}
return dao.QueryRechargeRecommend(userId, mobile, orderId, page, pageSize, start, end, rechargeStatus)
}
// QueryUserOrderDetail 用户查询订单详情
func QueryUserOrderDetail(orderId, mobile string) ([]recharge_phone_bill.QueryOrderDetailResList, error) {
data, err := api.TelephoneAPI.QueryOrderDetail("", orderId)
if err != nil {
return nil, err
}
have := false
for _, v := range data {
if v.Mobile == mobile {
have = true
}
}
if have {
return data, err
}
return nil, errors.New("参数电话号码异常")
}

View File

@@ -271,38 +271,30 @@ func onTLpayFinished(call *tonglianpayapi.CallBackResult) (err error) {
//充值会员 增加微信支付处理业务
if (order.OrderType == 2 || order.OrderType == 5) && call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
if err := OnWXPayFinished(order); err != nil {
return err
}
return OnWXPayFinished(order)
}
// 充值话费
if order.OrderType == 7 && call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
return OnWxPayTelephone(order)
}
if order.OrderType == 3 && call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
globals.SugarLogger.Debug("得到微信回调结果,快递流程开始")
txdb, _ := dao.Begin(db)
defer func() {
if r := recover(); r != nil {
panic(r)
}
}()
globals.SugarLogger.Debug("更新order")
order.TransactionID = call.TrxID
order.Status = 110 //支付成功状态
globals.SugarLogger.Debug("输出赋值后的order.TransactionID", order.TransactionID)
if _, err := dao.UpdateEntityTx(txdb, order, "TransactionID"); err != nil {
if _, err := dao.UpdateEntityTx(txdb, order, "TransactionID", "Status"); err != nil {
dao.Rollback(db, txdb)
return err
}
if _, err := dao.UpdateEntityTx(txdb, order, "Status"); err != nil {
dao.Rollback(db, txdb)
return err
}
globals.SugarLogger.Debug("获取UserVendorOrder")
userOrder := model.UserVendorOrder{LocalWayBill: order.OrderID}
if err := dao.GetEntity(db, &userOrder, "LocalWayBill"); err != nil {
dao.Rollback(db, txdb)
return err
}
globals.SugarLogger.Debug("更新UserVendorOrder")
userOrder.OrderStatus = payStatus
if _, err := dao.UpdateEntityTx(txdb, &userOrder, "OrderStatus"); err != nil {
dao.Rollback(db, txdb)
@@ -310,24 +302,18 @@ func onTLpayFinished(call *tonglianpayapi.CallBackResult) (err error) {
}
//1-余额,2-微信,5-混合
if order.PayMethod == 5 {
globals.SugarLogger.Debug("进入混合支付回调流程")
userBill, err := dao.GetUserBill(db, order.UserID, "")
if err != nil {
return err
}
//创建混合支付账单
totalPrice := order.PayPrice + userBill.AccountBalance
globals.SugarLogger.Debug("totalPrice=================", totalPrice)
globals.SugarLogger.Debug("进入增加mixpay账单")
if err := AddMixPay(txdb, order.OrderID, userBill.AccountBalance, totalPrice, 1); err != nil {
globals.SugarLogger.Debug("增加mixpay账单失败")
dao.Rollback(db, txdb)
return err
}
//余额清空
globals.SugarLogger.Debug("开始清空余额")
if err := dao.UpdateUserBill(order.UserID, 0); err != nil {
globals.SugarLogger.Debug("修改余额失败")
dao.Rollback(db, txdb)
return err
}

View File

@@ -2,13 +2,13 @@ package financial
import (
"fmt"
"git.rosy.net.cn/baseapi/platformapi/recharge_phone_bill"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego/client/orm"
"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/globals"
"git.rosy.net.cn/jx-callback/globals/api"
)
type PayHandler struct {
@@ -106,11 +106,17 @@ func OnCashFinished(order *model.Order) (err error) {
//微信支付充值会员
func OnWXPayFinished(order *model.Order) (err error) {
var (
db = dao.GetDB()
ctx *jxcontext.Context
txDB orm.TxOrmer
db = dao.GetDB()
ctx *jxcontext.Context
txDB, _ = dao.Begin(db)
)
globals.SugarLogger.Debugf("OnWXPayFinished begin modify account order: %v", utils.Format4Output(order, false))
defer func() {
if r := recover(); r != nil {
dao.Rollback(db, txDB)
panic(r)
}
}()
//判断是新会员充值还是老会员续费
userMembers, err := dao.GetUserMember(db, order.UserID, model.MemberTypeNormal)
if err != nil {
@@ -131,12 +137,34 @@ func OnWXPayFinished(order *model.Order) (err error) {
order.Status = model.OrderStatusFinished
//更新order状态
if _, err := dao.UpdateEntityTx(txDB, &order, "Status"); err != nil {
dao.Rollback(db, txDB)
return err
}
} else {
globals.SugarLogger.Debugf("OnWXPayFinished 暂不支持此订单类型 order: %v", utils.Format4Output(order, false))
return fmt.Errorf("暂不支持此订单类型!")
}
globals.SugarLogger.Debug("OnWXPayFinished end modify account ...", err)
return err
}
// OnWxPayTelephone 微信充值话费
func OnWxPayTelephone(order *model.Order) error {
orderNumber, err := api.TelephoneAPI.RechargePhoneBill(&recharge_phone_bill.RechargePhoneBillBase{
FlowCode: order.FlowCode,
Mobile: order.Mobile,
OrderNumber: order.OrderID,
CallbackURL: "http://callback.rsm.jxc4.com/recharge/msg",
ChargeType: "1",
})
if err != nil {
order.Comment = err.Error()
order.RechargeStatus = -1 // 充值失败
}
order.RechargeStatus = 1 // 充值中
order.Comment = orderNumber
//更新order状态
order.Status = model.OrderStatusFinished
if _, err := dao.UpdateEntity(dao.GetDB(), &order, "Status", "RechargeStatus", "Comment"); err != nil {
return err
}
return nil
}

View File

@@ -686,3 +686,64 @@ func SetOrderStatus(tx orm.TxOrmer, payPrice, payMethod, status int, orderID str
}
return "更新Order状态成功", nil
}
// QueryRechargeRecommend 电话充值记录查询
func QueryRechargeRecommend(userId []string, mobile, orderId string, page, pageSize int, start, end time.Time, rechargeStatus int) ([]*model.RechargeUserModelData, int, error) {
result := make([]*model.RechargeUserModelData, 0, 0)
sql := `SELECT SQL_CALC_FOUND_ROWS o.*,u.name FROM order o `
sqlParams := make([]interface{}, 0, 0)
sql += ` JOIN user u ON o.user_id = u.user_id WHERE 1=1 `
if orderId != "" {
sql += ` AND o.order_id = ? `
sqlParams = append(sqlParams, orderId)
if err := GetRows(GetDB(), &result, sql, sqlParams...); err != nil {
return nil, 0, err
}
return result, 1, nil
}
if userId != nil {
sql += ` AND o.user_id IN (` + GenQuestionMarks(len(userId)) + `)`
sqlParams = append(sqlParams, userId)
}
if !utils.IsTimeZero(start) {
sql += ` AND o.created_at > ?`
sqlParams = append(sqlParams, start)
}
if !utils.IsTimeZero(end) {
sql += ` AND o.created_at < ?`
sqlParams = append(sqlParams, end)
}
if mobile != "" {
sql += ` AND o.mobile = ? `
sqlParams = append(sqlParams, mobile)
}
if rechargeStatus != 0 {
sql += ` AND o.recharge_status = ? `
sqlParams = append(sqlParams, rechargeStatus)
}
sql += " ORDER BY o.created_at DESC LIMIT ? OFFSET ?"
sqlParams = append(sqlParams, jxutils.FormalizePageSize(pageSize), (page-1)*pageSize)
db := GetDB()
tx, _ := Begin(db)
defer func() {
if r := recover(); r != nil {
Rollback(db, tx)
}
}()
if err := GetRowsTx(tx, &result, sql, sqlParams...); err != nil {
Rollback(db, tx)
return nil, 0, err
}
count := GetLastTotalRowCountTx(tx)
return result, count, nil
}

View File

@@ -67,24 +67,27 @@ var (
type Order struct {
ModelIDCUL
OrderID string `orm:"column(order_id)" json:"orderID"` // 订单号
UserID string `orm:"column(user_id);size(48)" json:"userID"` // 用户ID
Type int `json:"type"` // 支付还是提现 1-支付2-提现
OrderType int `json:"orderType"` // 订单类型1-发任务2-会员月卡3-发快递4-提现5-会员年卡,6-使用充值到余额方式的订单
Way string `json:"way"` // weixinapp ,weixinmini
Status int `json:"status"` // 订单状态,待支付2已支付5支付成功110支付失败115,150取消
PayPrice int `json:"payPrice"` // 支付金额
TransactionID string `orm:"column(transaction_id);size(48)" json:"transactionID"` // 支付成功后支付方生成的事务ID
PayFinishedAt time.Time `orm:"type(datetime);null" json:"payFinishedAt"` // 支付完成时间
PrepayID string `orm:"column(prepay_id);size(48)" json:"prepayID"` // 下单后支付前支付方生成的事务ID
OriginalData string `orm:"type(text)" json:"-"` //
Comment string `orm:"size(255)" json:"comment"` // 备注
Lng float64 `json:"lng"` // 坐标
Lat float64 `json:"lat"` // 坐标
CityCode int `orm:"default(0)" json:"cityCode"` // 提交订单时用户所在城市
DistrictCode int `orm:"default(0)" json:"districtCode"` // 城市code
Address string `orm:"size(255)" json:"address"` // 地址
PayMethod int `orm:"size(255)" json:"address"` // 支付方式1-余额支付2-微信支付3-微信提现4-支付宝提现 5-余额+微信混合支付
OrderID string `orm:"column(order_id)" json:"orderID"` // 订单号
UserID string `orm:"column(user_id);size(48)" json:"userID"` // 用户ID
Type int `json:"type"` // 支付还是提现 1-支付2-提现
OrderType int `json:"orderType"` // 订单类型1-发任务2-会员月卡3-发快递4-提现5-会员年卡,6-使用充值到余额方式的订单,7-话费
Way string `json:"way"` // weixinapp ,weixinmini
Status int `json:"status"` // 订单状态,待支付2已支付5支付成功110支付失败115,150取消
PayPrice int `json:"payPrice"` // 支付金额
TransactionID string `orm:"column(transaction_id);size(48)" json:"transactionID"` // 支付成功后支付方生成的事务ID
PayFinishedAt time.Time `orm:"type(datetime);null" json:"payFinishedAt"` // 支付完成时间
PrepayID string `orm:"column(prepay_id);size(48)" json:"prepayID"` // 下单后支付前支付方生成的事务ID
OriginalData string `orm:"type(text)" json:"-"` //
Comment string `orm:"size(255)" json:"comment"` // 备注
Lng float64 `json:"lng"` // 坐标
Lat float64 `json:"lat"` // 坐标
CityCode int `orm:"default(0)" json:"cityCode"` // 提交订单时用户所在城市
DistrictCode int `orm:"default(0)" json:"districtCode"` // 城市code
Address string `orm:"size(255)" json:"address"` // 地址
PayMethod int `orm:"size(255)" json:"payMethod"` // 支付方式1-余额支付2-微信支付3-微信提现4-支付宝提现 5-余额+微信混合支付
Mobile string `orm:"size(15)" json:"mobile"` // 电话话费充值时使用
FlowCode string `orm:"size(15)" json:"flowCode"` // 电话话费充值时使用
RechargeStatus int `orm:"size(2)" json:"rechargeStatus"` // 充值状态 0-未提交,3-等待待充值(本地) 1充值中(三方)2已充值-1失败(三方)
}
func (v *Order) TableUnique() [][]string {
@@ -200,3 +203,9 @@ type UnionOrderStatus struct {
OrderStatusAt time.Time `json:"orderStatusAt"` //更新时间
Comment string `orm:"size(255)" json:"comment"` //备注
}
// RechargeUserModelData 充值列表
type RechargeUserModelData struct {
Order
Name string `json:"name" db:"name"`
}

View File

@@ -92,6 +92,10 @@ dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&l
QBiDaAccess = "18048531223"
QBiDaPassword = "18080188338"
#话费充值平台 账号
AccountNo = "cdrxqgmc"
PasswordNo = "cdrxqgmc1234"
PhoneScenery = "cdrxqgmc123456"
[beta]
enableStoreWrite = true
enableJdStoreWrite = false
@@ -175,6 +179,10 @@ aliUpcAppCode = "00a6eefba0204d3fa310ac0ee7a6fc54"
QBiDaAccess = "18048531223"
QBiDaPassword = "18080188338"
#话费充值平台 账号
AccountNo = "cdrxqgmc"
PasswordNo = "cdrxqgmc1234"
PhoneScenery = "cdrxqgmc123456"
[rsm]
EnableDocs = true
@@ -283,6 +291,10 @@ pddAppSecret = "fa40c1fe356eebc1376ace1d2380ed44e553c602"
QBiDaAccess = "18048531223"
QBiDaPassword = "18080188338"
#话费充值平台 账号
AccountNo = "cdrxqgmc"
PasswordNo = "cdrxqgmc1234"
PhoneScenery = "cdrxqgmc123456"
[print]
httpport = 8088
EnableDocs = false
@@ -298,4 +310,9 @@ enableYbStoreWrite = true
enableJdShopWrite = true
#QBIDA 账号
QBiDaAccess = "18048531223"
QBiDaPassword = "18080188338"
QBiDaPassword = "18080188338"
#话费充值平台 账号
AccountNo = "cdrxqgmc"
PasswordNo = "cdrxqgmc1234"
PhoneScenery = "cdrxqgmc123456"

View File

@@ -18,7 +18,7 @@ type OrderController struct {
// @Param orderID formData string true "订单号"
// @Param payType formData int true "支付平台类型"
// @Param vendorPayType formData string true "平台支付类型"
// @Param orderType formData string true "订单类型member会员express快递recharge充值"
// @Param orderType formData string true "订单类型member会员express快递recharge充值,telephoneBill充话费"
// @Param appId formData string true "appId"
// @Param isChoose formData int true "-1:未选中余额抵消 1余额抵消"
// @Success 200 {object} controllers.CallResult
@@ -70,17 +70,19 @@ func (c *OrderController) Cash() {
// @Description 创建订单
// @Param token header string true "认证token"
// @Param type formData int true "支付类型/账单类型"
// @Param orderType formData int true "订单类型1为发任务2为冲会员3为发快递6-需要充值到余额购买的方式"
// @Param orderType formData int true "订单类型1为发任务2为冲会员3为发快递6-需要充值到余额购买的方式,7-话费充值"
// @Param way formData string true "认证方式"
// @Param price formData int true "支付金额"
// @Param lng formData float64 true "经纬度"
// @Param lat formData float64 true "经纬度"
// @Param mobile formData string false "充值电话"
// @Param flowCode formData string false "业务代码"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /CreateOrder [post]
func (c *OrderController) CreateOrder() {
c.callCreateOrder(func(params *tOrderCreateOrderParams) (retVal interface{}, errCode string, err error) {
retVal, errCode, err = cms.CreateOrder(params.Ctx, params.Type, params.OrderType, params.Way, params.Price, params.Lng, params.Lat)
retVal, errCode, err = cms.CreateOrder(params.Ctx, params.Type, params.OrderType, params.Way, params.Price, params.Lng, params.Lat, params.Mobile, params.FlowCode)
return retVal, errCode, err
})
}

View File

@@ -0,0 +1,69 @@
package controllers
import (
"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/globals"
beego "github.com/astaxie/beego/adapter"
"io/ioutil"
"net/http"
)
type RechargeController struct {
beego.Controller
}
type CallBackMsg struct {
Sign string `json:"sign"` // 签名:大写( md5( md5(密码)+ 平台订单号+秘钥 ) )
Msg string `json:"msg"` // 响应结果描述
OrderNumber string `json:"order_number "` // 平台订单号
UserOrdernum string `json:"user_ordernum"` // 商户订单号
OrderStatus string `json:"order_status"` // 状态0未提交1充值中2已充值-1失败
Mobile string `json:"mobile"` // 电话
Ctime string `json:"ctime"` // ctime
Voucher string `json:"voucher"` // 透传流水号
}
func (c *RechargeController) Msg() {
if c.Ctx.Input.Method() == http.MethodPost {
data, err := ioutil.ReadAll(getUsefulRequest2(c.Ctx).Body)
if err != nil {
c.Abort("404")
return
}
values, err := utils.HTTPBody2Values(data, false)
if err != nil {
c.Abort("404")
return
}
mapData := utils.URLValues2Map(values)
resultData := CallBackMsg{}
if err := utils.Map2StructByJson(mapData, &resultData, false); err != nil {
c.Abort("404")
return
}
if resultData.OrderStatus == "0" || resultData.OrderStatus == "1" {
c.Data["json"] = "success"
c.ServeJSON()
return
}
// 获取平台订单
order := &model.Order{
OrderID: resultData.UserOrdernum,
}
if err = dao.GetEntity(dao.GetDB(), order, "OrderID"); err != nil {
globals.SugarLogger.Debugf("本地加载订单错误,请查询:%s", err)
c.Abort("404")
return
}
order.RechargeStatus = utils.Str2Int(resultData.OrderStatus)
dao.UpdateEntity(dao.GetDB(), order, "RechargeStatus")
c.Data["json"] = "success"
c.ServeJSON()
} else {
c.Abort("404")
}
}

View File

@@ -0,0 +1,105 @@
package controllers
import (
"errors"
"fmt"
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals/api"
beego "github.com/astaxie/beego/adapter"
)
type RechargeManagerController struct {
beego.Controller
}
// GetUserRecharge 用户查询充值记录
// @Title 分页查询用户充值列表
// @Description 分页查询用户充值列表
// @Param token header string true "认证token"
// @Param page formData int true "页码"
// @Param pageSize formData int true "页数"
// @Param mobile formData string false "电话"
// @Param orderId formData string false "订单号"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetUserRecharge [post]
func (c *RechargeManagerController) GetUserRecharge() {
c.callGetUserRecharge(func(params *tRechargeGetUserRechargeParams) (interface{}, string, error) {
result, count, err := cms.QueryUserRecharge([]string{params.Ctx.GetUserID()}, params.Mobile, params.OrderId, params.Page, params.PageSize, "", "", 0)
userRecharge := make(map[string]interface{}, 2)
userRecharge["data"] = result
userRecharge["count"] = count
return userRecharge, "", err
})
}
// GetRechargeOrderDetail 订单详情查询
// @Title 订单详情查询
// @Description 订单详情查询
// @Param token header string true "认证token"
// @Param orderId formData string true "订单号"
// @Param mobile formData string true "手机号"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetRechargeOrderDetail [get]
func (c *RechargeManagerController) GetRechargeOrderDetail() {
c.callGetRechargeOrderDetail(func(params *tRechargeGetRechargeOrderDetailParams) (interface{}, string, error) {
result, err := cms.QueryUserOrderDetail(params.OrderId, params.Mobile)
return result, "", err
})
}
// SystemQueryRechargeList 管理系统获取订单详情
// @Title 管理系统获取订单详情
// @Description 管理系统获取订单详情
// @Param token header string true "认证token"
// @Param orderId formData string false "订单号"
// @Param mobile formData string false "手机号"
// @Param rechargeStatus formData int false "充值状态 0-未提交,3-等待待充值(本地) 1充值中(三方)2已充值-1失败(三方)"
// @Param page formData int true "页码"
// @Param pageSize formData int true "页数"
// @Param startTime formData string true "开始时间"
// @Param endTime formData string true "结束时间"
// @Param userName formData string false "用户名"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SystemQueryRechargeList [post]
func (c *RechargeManagerController) SystemQueryRechargeList() {
c.callSystemQueryRechargeList(func(params *tRechargeSystemQueryRechargeListParams) (interface{}, string, error) {
userIdList := make([]string, 0, 0)
// 根据用户获取用户id
if params.UserName != "" {
userList, _, err := dao.GetUsers(dao.GetDB(), 0, params.UserName, "", nil, nil, nil, 0, 0)
if err != nil {
return nil, "", err
}
if len(userList) == 0 {
return nil, "", errors.New(fmt.Sprintf("未查询到此用户:[%s]", params.UserName))
}
for _, v := range userList {
userIdList = append(userIdList, v.UserID)
}
}
result, count, err := cms.QueryUserRecharge(userIdList, params.Mobile, params.OrderId, params.Page, params.PageSize, params.StartTime, params.EndTime, params.RechargeStatus)
userRecharge := make(map[string]interface{}, 2)
userRecharge["data"] = result
userRecharge["count"] = count
return userRecharge, "", err
})
}
// QueryAccountBill 查询当前账号余额
// @Title 查询当前账号余额
// @Description 查询当前账号余额
// @Param token header string true "认证token"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /QueryAccountBill [get]
func (c *RechargeManagerController) QueryAccountBill() {
c.callQueryAccountBill(func(params *tRechargeQueryAccountBillParams) (interface{}, string, error) {
balance, err := api.TelephoneAPI.QueryAccountBill()
return balance, "", err
})
}

View File

@@ -4,6 +4,7 @@ import (
"git.rosy.net.cn/baseapi/platformapi/jdunionapi"
"git.rosy.net.cn/baseapi/platformapi/pddapi"
"git.rosy.net.cn/baseapi/platformapi/q_bida"
"git.rosy.net.cn/baseapi/platformapi/recharge_phone_bill"
"git.rosy.net.cn/baseapi/platformapi/tbunionapi"
"io/ioutil"
@@ -86,7 +87,8 @@ var (
Cacher cache.ICacher
SMSClient *aliyunsmsclient.SmsClient
QBiDaAPI *q_bida.Api // QBiDaApi
QBiDaAPI *q_bida.Api // QBiDaApi
TelephoneAPI *recharge_phone_bill.API // 话费充值
)
func init() {
@@ -167,4 +169,6 @@ func Init() {
// 初始化QBIDA
QBiDaAPI = q_bida.NewQBiDa(beego.AppConfig.DefaultString("QBiDaAccess", ""), beego.AppConfig.DefaultString("QBiDaPassword", ""))
// 话费充值
TelephoneAPI = recharge_phone_bill.New(beego.AppConfig.DefaultString("PasswordNo", ""), beego.AppConfig.DefaultString("AccountNo", ""), beego.AppConfig.DefaultString("PhoneScenery", ""))
}

View File

@@ -1152,4 +1152,45 @@ func init() {
MethodParams: param.Make(),
Filters: nil,
Params: nil})
// 用户查询充值列表
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:RechargeManagerController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:RechargeManagerController"],
beego.ControllerComments{
Method: "GetUserRecharge",
Router: "/GetUserRecharge",
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
// 用户查询平台订单详情
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:RechargeManagerController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:RechargeManagerController"],
beego.ControllerComments{
Method: "GetRechargeOrderDetail",
Router: "/GetRechargeOrderDetail",
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
// 管理系统查询平台订单
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:RechargeManagerController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:RechargeManagerController"],
beego.ControllerComments{
Method: "SystemQueryRechargeList",
Router: "/SystemQueryRechargeList",
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
// 查询当前账号余额
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:RechargeManagerController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:RechargeManagerController"],
beego.ControllerComments{
Method: "QueryAccountBill",
Router: "/QueryAccountBill",
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
}

View File

@@ -79,11 +79,19 @@ func init() {
&controllers.WithdrawalRecordController{},
),
),
// 话费充值
web.NSNamespace("/recharge",
web.NSInclude(
&controllers.RechargeManagerController{},
),
),
)
web.AddNamespace(ns)
web.AutoRouter(&controllers.WXPayController{})
web.AutoRouter(&controllers.TongLianController{})
web.AutoRouter(&controllers.RechargeController{}) // 充值话费回调
web.AutoRouter(&controllers.MTWMController{})
web.AutoRouter(&controllers.PrintController{})
//web.AutoRouter(&controllers.QBiDaExpressController{})