删除一些model和dao文件

This commit is contained in:
suyl
2021-06-24 16:18:07 +08:00
parent 829b00d3c8
commit cb0f8c2001
12 changed files with 0 additions and 1765 deletions

View File

@@ -60,13 +60,8 @@ func InitServiceInfo(version string, buildTime time.Time, gitCommit string) {
"purchaseVendorInfo": model.PurchaseVendorInfo,
"afsReasonTypeName": model.AfsReasonTypeName,
"afsAppealTypeName": model.AfsAppealTypeName,
"actTypeName": model.ActTypeName,
"actStatusName": model.ActStatusName,
"actCreateTypeName": model.ActCreateTypeName,
"configTypeName": model.ConfigTypeName,
"userTypeName": model.UserTypeName,
"payStatusName": model.PayStatusName,
"refundStatusName": model.RefundStatusName,
"complaintReasons": model.ComplaintReasons,
"supplementType": model.SupplementTypeName,
"operateType": model.OperateTypeName,

View File

@@ -8,8 +8,6 @@ import (
"git.rosy.net.cn/jx-callback/business/jxstore/event"
"git.rosy.net.cn/jx-callback/business/jxstore/financial"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/auth2"
"git.rosy.net.cn/jx-callback/business/jxutils"
@@ -356,26 +354,6 @@ func LoadUserCart(ctx *jxcontext.Context, userID string, storeIDs []int) (cartIt
return cartItems, err
}
func GetSelfInfo(ctx *jxcontext.Context) (getSelfInfoResult *dao.GetSelfInfoResult, err error) {
tokenInfo, err := auth2.GetTokenInfo(ctx.GetToken())
if err == nil {
if getSelfInfoResult, err = dao.GetUserByIDWithMembers(dao.GetDB(), "user_id", tokenInfo.GetID()); err == nil {
if userMembers, err3 := dao.GetUserMember(dao.GetDB(), getSelfInfoResult.User.UserID, 0); err3 == nil {
getSelfInfoResult.UserMembers = userMembers
} else {
err = err3
}
if price, err := dao.GetUserAllWaitCashPrice(dao.GetDB(), getSelfInfoResult.User.UserID); err == nil {
getSelfInfoResult.WaitCashPrice = price
}
if price, err := dao.GetUserAllWaitRealCashPrice(dao.GetDB(), getSelfInfoResult.User.UserID); err == nil {
getSelfInfoResult.WaitRealCashPrice = price
}
}
}
return getSelfInfoResult, err
}
func RefreshUserMemberStatus(ctx *jxcontext.Context) (err error) {
var (
db = dao.GetDB()
@@ -390,90 +368,6 @@ func RefreshUserMemberStatus(ctx *jxcontext.Context) (err error) {
return err
}
func InvestMember(ctx *jxcontext.Context, memberID int, userID string, isFree bool) (errCode string, err error) {
var (
db = dao.GetDB()
memberCards []*model.MemberCard
memberCard *model.MemberCard
userIDReal string
)
if !isFree {
userIDReal = ctx.GetUserID()
} else {
userIDReal = userID
}
userMembers, err := dao.GetUserMember(db, userIDReal, model.MemberTypeNormal)
configList, err := dao.QueryConfigs(db, model.ConfigTypeName[model.ConfigTypeMemberCard], model.ConfigTypeMemberCard, "")
userBill, err := dao.GetUserBill(db, userIDReal, "")
if len(configList) <= 0 {
return "", fmt.Errorf("未找到会员卡配置!")
}
config := configList[0]
err = jxutils.Strings2Objs(config.Value, &memberCards)
if err != nil {
return "", err
}
for _, v := range memberCards {
if v.ID == memberID {
memberCard = v
}
}
if !isFree {
//验证微信绑定
if err = auth2.CheckWeixinminiAuthBind(userIDReal); err != nil {
return "", err
}
if userBill.AccountBalance < memberCard.Price {
return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!")
}
}
txDB, _ := dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db, txDB)
panic(r)
}
}()
//证明已经开了会员了,相当于续费
if len(userMembers) > 0 {
userMember := userMembers[0]
if memberID == model.MemberCardTypeMonth {
userMember.EndAt = userMember.EndAt.AddDate(0, 1, 0)
} else {
userMember.EndAt = userMember.EndAt.AddDate(1, 0, 0)
}
if _, err = dao.UpdateEntity(db, userMember, "EndAt"); err != nil {
dao.Rollback(db, txDB)
return
}
} else {
userMember2 := &model.UserMember{
UserID: userIDReal,
MemberType: model.MemberTypeNormal,
MemberTypeID: memberID,
}
if memberID == model.MemberCardTypeMonth {
userMember2.EndAt = time.Now().AddDate(0, 1, 0)
} else {
userMember2.EndAt = time.Now().AddDate(1, 0, 0)
}
dao.WrapAddIDCULDEntity(userMember2, ctx.GetUserName())
if err = dao.CreateEntity(db, userMember2); err != nil {
dao.Rollback(db, txDB)
return
}
}
if !isFree {
//支出明细
if err = financial.AddExpendUpdateAccount(txDB, userBill, model.BillTypeMember, memberCard.Price, 0); err != nil {
dao.Rollback(db, txDB)
return
}
}
dao.Commit(db, txDB)
return errCode, err
}
func UpdateUser(ctx *jxcontext.Context, payload map[string]interface{}) (err error) {
var (
db = dao.GetDB()

View File

@@ -8,7 +8,6 @@ import (
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxstore/financial"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
@@ -554,82 +553,6 @@ func UpdateMessageGroup(ctx *jxcontext.Context, groupID int, payload map[string]
return num, err
}
func DeleteMessageGroup(ctx *jxcontext.Context, groupID int, userID string, flag bool) (errCode string, err error) {
var (
db = dao.GetDB()
messageGroup = &model.MessageGroup{
GroupID: groupID,
}
)
if err = dao.GetEntity(db, messageGroup, "GroupID"); err != nil {
return errCode, err
}
//解散群
if flag {
if messageGroup.UserID != ctx.GetUserID() {
return errCode, fmt.Errorf("只有群主才能解散群!")
}
messageGroup.DeletedAt = time.Now()
messageGroup.LastOperator = ctx.GetUserName()
dao.UpdateEntity(db, messageGroup, "DeletedAt", "LastOperator")
messageGroupMembers, _ := dao.GetMessageGroupMembers(db, groupID, 0, "")
for _, v := range messageGroupMembers {
v.DeletedAt = time.Now()
v.LastOperator = ctx.GetUserName()
dao.UpdateEntity(db, v, "DeletedAt", "LastOperator")
}
} else {
//token中用户与传入user不一致就判定为踢人
if ctx.GetUserID() != userID {
if messageGroup.UserID != ctx.GetUserID() {
messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, ctx.GetUserID())
if err != nil {
return errCode, err
}
if messageGroupMembers[0].Type == model.GroupMemberTypeNormal {
return errCode, fmt.Errorf("只有创建者和管理员才能踢人!")
}
}
} else {
quitPrice := messageGroup.QuitPrice
userBill, err := dao.GetUserBill(db, userID, "")
userBillGroupMaster, err := dao.GetUserBill(db, messageGroup.UserID, "")
if err != nil {
return errCode, err
}
if userBill.AccountBalance < quitPrice {
return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!")
}
txDB, _ := dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db, txDB)
panic(r)
}
}()
//账户支出
if err = financial.AddExpendUpdateAccount(txDB, userBill, model.BillTypeQuitGroup, quitPrice, 0); err != nil {
dao.Rollback(db, txDB)
return errCode, err
}
//群主收到退团金额
if err = financial.AddIncomeUpdateAccount(txDB, userBillGroupMaster, model.BillTypeQuitGroup, quitPrice, 0); err != nil {
dao.Rollback(db, txDB)
return errCode, err
}
dao.Commit(db, txDB)
}
messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, userID)
if err != nil {
return errCode, err
}
messageGroupMembers[0].DeletedAt = time.Now()
messageGroupMembers[0].LastOperator = ctx.GetUserName()
dao.UpdateEntity(db, messageGroupMembers[0], "DeletedAt", "LastOperator")
}
return errCode, err
}
func TransferMessageGroupMaster(ctx *jxcontext.Context, groupID int, userID string) (err error) {
var (
db = dao.GetDB()

View File

@@ -1,167 +1 @@
package financial
import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"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"
"github.com/astaxie/beego/client/orm"
"time"
)
func AddBillIncome(txDB orm.TxOrmer, billID int64, billType, incomePrice, jobID int) (err error) {
billIncome := &model.BillIncome{
BillID: billID,
Type: billType,
IncomePrice: incomePrice,
JobID: jobID,
}
dao.WrapAddIDCULEntity(billIncome, jxcontext.AdminCtx.GetUserName())
return dao.CreateEntityTx(txDB, billIncome)
}
func AddBillExpend(txDB orm.TxOrmer, billID int64, billType, expendPrice, jobID int) (err error) {
billExpend := &model.BillExpend{
BillID: billID,
Type: billType,
ExpendPrice: expendPrice,
JobID: jobID,
}
dao.WrapAddIDCULEntity(billExpend, jxcontext.AdminCtx.GetUserName())
return dao.CreateEntityTx(txDB, billExpend)
}
func AddUserBill(txDB orm.TxOrmer, billID int64, userID string) (err error) {
userBillInsert := &model.UserBill{
BillID: billID,
UserID: userID,
}
dao.WrapAddIDCULDEntity(userBillInsert, jxcontext.AdminCtx.GetUserName())
return dao.CreateEntityTx(txDB, userBillInsert)
}
func AddUserBillDb(db *dao.DaoDB, billID int64, userID string) (err error) {
userBillInsert := &model.UserBill{
BillID: billID,
UserID: userID,
}
dao.WrapAddIDCULDEntity(userBillInsert, jxcontext.AdminCtx.GetUserName())
return dao.CreateEntity(db, userBillInsert)
}
func GetUserBillDetail(ctx *jxcontext.Context, userID, fromTime, toTime string, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
return dao.GetUserBillDetail(dao.GetDB(), userID, utils.Str2Time(fromTime), utils.Str2Time(toTime), pageSize, offset)
}
func AddExpendUpdateAccount(txDB orm.TxOrmer, userBill *model.UserBill, billType, price, jobID int) (err error) {
//1、账户支出增加一条记录
err = AddBillExpend(txDB, userBill.BillID, billType, price, jobID)
if err != nil {
return err
}
//2、账户表余额减少相应值
userBill.AccountBalance -= price
_, err = dao.UpdateEntityTx(txDB, userBill, "AccountBalance")
return err
}
func AddIncomeUpdateAccount(txDB orm.TxOrmer, userBill *model.UserBill, billType, price, jobID int) (err error) {
//2、账户收入增加一条记录
err = AddBillIncome(txDB, userBill.BillID, billType, price, jobID)
if err != nil {
return err
}
//1、根据任务剩余数量退钱到账户余额中
userBill.AccountBalance += price
_, err = dao.UpdateEntityTx(txDB, userBill, "AccountBalance")
return err
}
func SettleUnionOrders(ctx *jxcontext.Context, vendorIDs []int) (err error) {
var (
db = dao.GetDB()
unionOrderVendorMap map[int][]*model.UnionOrder //key 为平台ID
unionOrderMap map[string]map[int][]*model.UnionOrder //key为userID整个map把每个User的不同平台的订单放一起
settleOrders []*model.UnionOrderSettle
)
unionOrderVendorMap = make(map[int][]*model.UnionOrder)
unionOrderMap = make(map[string]map[int][]*model.UnionOrder)
unionOrders, err := dao.GetUnionOrders(db, vendorIDs, []int{model.UnionOrderStatusFinish}, utils.ZeroTimeValue, utils.ZeroTimeValue, model.NO)
if err != nil {
return err
}
for _, v := range unionOrders {
if _, ok := unionOrderMap[v.UserID]; ok {
if _, ol := unionOrderVendorMap[v.VendorID]; ol {
unionOrderMap[v.UserID][v.VendorID] = append(unionOrderMap[v.UserID][v.VendorID], v)
} else {
unionOrderMap[v.UserID][v.VendorID] = []*model.UnionOrder{v}
}
} else {
unionOrderVendorMap[v.VendorID] = []*model.UnionOrder{v}
unionOrderMap[v.UserID] = unionOrderVendorMap
}
}
for userID, v := range unionOrderMap {
var (
billID int64
)
userBill, _ := dao.GetUserBill(db, userID, "")
if userBill == nil {
billID = jxutils.GenBillID()
AddUserBillDb(db, billID, userID)
} else {
billID = userBill.BillID
}
for vendorID, vv := range v {
var (
sumPrice, count int
)
for _, unionOrder := range vv {
count++
sumPrice += unionOrder.PromotionAmount
}
unionOrderSettle := &model.UnionOrderSettle{
BillID: billID,
VendorID: vendorID,
Issue: jxutils.GetIssue(),
EarningPrice: sumPrice,
OrderCount: count,
}
dao.WrapAddIDCULEntity(unionOrderSettle, ctx.GetUserName())
settleOrders = append(settleOrders, unionOrderSettle)
//err = dao.CreateEntity(db, unionOrderSettle)
}
}
txDB, _ := dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db, txDB)
panic(r)
}
}()
for _, v := range settleOrders {
//插入结算表
if err = dao.CreateEntityTx(txDB, v); err != nil {
dao.Rollback(db, txDB)
return err
}
//更新用户账户
userBill, _ := dao.GetUserBill(db, "", utils.Int64ToStr(v.BillID))
if err = AddIncomeUpdateAccount(txDB, userBill, model.BillTypeUnionShare, v.EarningPrice, 0); err != nil {
dao.Rollback(db, txDB)
return err
}
}
//修改订单结算标志
for _, v := range unionOrders {
v.IsEarning = model.YES
v.UpdatedAt = time.Now()
if _, err = dao.UpdateEntityTx(txDB, v, "IsEarning", "UpdatedAt"); err != nil {
dao.Rollback(db, txDB)
return err
}
}
dao.Commit(db, txDB)
return err
}

View File

@@ -1,106 +1 @@
package financial
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/globals"
"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"
)
type PayHandler struct {
PayType int `json:"-"` //支付方式
Ctx *jxcontext.Context
Order *model.Order
VendorPayType string
WxPayParam *WxPayParam `json:"wxPayParam"`
}
type WxPayParam struct {
Prepayid string `json:"prepayid"`
Noncestr string `json:"noncestr"`
Timestamp string `json:"timestamp"`
Package string `json:"package"`
Partnerid string `json:"partnerid"`
Appid string `json:"appid"`
Sign string `json:"sign"`
}
type PayHandlerInterface interface {
CreatePay() (err error)
CreateRefund() (err error)
}
func OnPayFinished(order *model.Order) (err error) {
var (
db = dao.GetDB()
)
globals.SugarLogger.Debugf("OnPayFinished begin modify account order: %v", utils.Format4Output(order, false))
txDB, _ := dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db, txDB)
panic(r)
}
}()
//如果用户没有对应账单信息就给他生成一条
userBill, err := dao.GetUserBill(db, order.UserID, "")
if userBill == nil {
globals.SugarLogger.Debugf("OnPayFinished 未找到该用户的账单 order: %v", utils.Format4Output(order, false))
return fmt.Errorf("未找到该用户的账单!%v", order.UserID)
}
//根据订单类型来操作账户
switch order.Type {
case model.OrderTypePay:
//如果是账户充值(发布任务等)
//账户收入
if err = AddIncomeUpdateAccount(txDB, userBill, model.BillTypeInvest, order.PayPrice, 0); err != nil {
dao.Rollback(db, txDB)
}
default:
globals.SugarLogger.Debugf("OnPayFinished 暂不支持此订单类型 order: %v", utils.Format4Output(order, false))
return fmt.Errorf("暂不支持此订单类型!")
}
dao.Commit(db, txDB)
globals.SugarLogger.Debugf("OnPayFinished end modify account ...")
return err
}
func OnCashFinished(order *model.Order) (err error) {
var (
db = dao.GetDB()
)
globals.SugarLogger.Debugf("OnCashFinished begin modify account order: %v", utils.Format4Output(order, false))
txDB, _ := dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db, txDB)
panic(r)
}
}()
//如果用户没有对应账单信息就给他生成一条
userBill, err := dao.GetUserBill(db, order.UserID, "")
if userBill == nil {
globals.SugarLogger.Debugf("OnCashFinished 未找到该用户的账单 order: %v", utils.Format4Output(order, false))
return fmt.Errorf("未找到该用户的账单!%v", order.UserID)
}
//根据订单类型来操作账户
switch order.Type {
case model.OrderTypeCash:
//如果是账户提现
//账户支出
if err = AddExpendUpdateAccount(txDB, userBill, model.BillTypeCash, order.PayPrice, 0); err != nil {
dao.Rollback(db, txDB)
}
default:
globals.SugarLogger.Debugf("OnPayFinished 暂不支持此订单类型 order: %v", utils.Format4Output(order, false))
return fmt.Errorf("暂不支持此订单类型!")
}
dao.Commit(db, txDB)
globals.SugarLogger.Debugf("OnCashFinished end modify account ...")
return err
}

View File

@@ -49,20 +49,6 @@ func init() {
orderNoBeginTimestamp = utils.Str2Time("2010-01-01 00:00:00").Unix()
}
func GetSaleStoreIDFromAfsOrder(order *model.AfsOrder) (retVal int) {
if order.JxStoreID > 0 {
return order.JxStoreID
}
return order.StoreID
}
func GetSkuIDFromOrderSkuFinancial(sku *model.OrderSkuFinancial) (skuID int) {
if sku.JxSkuID > 0 {
return sku.JxSkuID
}
return sku.SkuID
}
func SplitUniversalOrderID(universalOrderID string) (orderID string, vendorID int) {
index := strings.Index(universalOrderID, "|")
if index != -1 {
@@ -545,19 +531,6 @@ func Strings2Objs(strAndObjAddPairs ...interface{}) (err error) {
return nil
}
func RefreshAfsOrderSkuRelated(afsOrder *model.AfsOrder) *model.AfsOrder {
afsOrder.SkuUserMoney = 0
afsOrder.PmSkuSubsidyMoney = 0
for _, orderSku := range afsOrder.Skus {
if orderSku.SkuID > math.MaxInt32 {
orderSku.SkuID = orderSku.JxSkuID
}
afsOrder.SkuUserMoney += orderSku.UserMoney
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
}
return afsOrder
}
func TaskResult2Hint(resultList []interface{}) (hint string) {
strList := make([]string, len(resultList))
for k, v := range resultList {

View File

@@ -1,41 +0,0 @@
package jxutils
import (
"git.rosy.net.cn/jx-callback/business/model"
)
type ActStoreSkuMap struct {
actStoreSkuMap map[int64]map[int]*model.ActStoreSku2
}
// isActPrice为true表示是活动false表示是结算
func NewActStoreSkuMap(actStoreSkuList []*model.ActStoreSku2, isActPrice bool) (actMap *ActStoreSkuMap) {
actMap = &ActStoreSkuMap{}
actStoreSkuMap := make(map[int64]map[int]*model.ActStoreSku2)
for _, v := range actStoreSkuList {
index := Combine2Int(v.StoreID, v.SkuID)
if actStoreSkuMap[index] == nil {
actStoreSkuMap[index] = make(map[int]*model.ActStoreSku2)
}
if (isActPrice && v.ActualActPrice > 0 && (actStoreSkuMap[index][v.VendorID] == nil || actStoreSkuMap[index][v.VendorID].ActualActPrice > v.ActualActPrice)) ||
(!isActPrice && v.EarningPrice > 0 && (actStoreSkuMap[index][v.VendorID] == nil || actStoreSkuMap[index][v.VendorID].EarningPrice > v.EarningPrice)) {
actStoreSkuMap[index][v.VendorID] = v
}
}
actMap.actStoreSkuMap = actStoreSkuMap
return actMap
}
func (a *ActStoreSkuMap) GetActStoreSku(storeID, skuID, vendorID int) (storeSku *model.ActStoreSku2) {
index := Combine2Int(storeID, skuID)
if a.actStoreSkuMap[index] != nil {
if vendorID < 0 {
for k := range a.actStoreSkuMap[index] {
vendorID = k
break
}
}
storeSku = a.actStoreSkuMap[index][vendorID]
}
return storeSku
}

View File

@@ -2,7 +2,6 @@ package model
import (
"math"
"time"
)
const (
@@ -35,23 +34,6 @@ type PagedInfo struct {
Data interface{} `json:"data"`
}
type OrderFinancialExt struct {
OrderFinancial
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"` //
OrderFinishedAt time.Time `orm:"type(datetime)" json:"orderFinishedAt"` // 订单妥投/完成时间
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
JxStoreID int `orm:"column(jx_store_id)" json:"jxStoreID"` // 根据VendorStoreID在本地系统里查询出来的 jxstoreid
StoreName string `orm:"size(64)" json:"storeName"` //
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
Skus []*OrderSkuFinancial `orm:"-" json:"skus"` // 正向订单购买商品列表
Discounts []*OrderDiscountFinancial `orm:"-" json:"discounts"` // 正向订单享受优惠列表
}
type OrderFinancialSkuExt struct {
OrderSkuFinancial
Image string `json:"image"`
}
type ProductInfo struct {
OriginalName string `json:"originalName"`
OriginalSpec string `json:"originalSpec"`

View File

@@ -1,499 +0,0 @@
package dao
import (
"fmt"
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/model"
)
type ActMapPureInfo struct {
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空
VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"`
SyncStatus int `orm:"default(2)" json:"syncStatus"`
Remark string `orm:"column(map_remark)" json:"remark"`
}
type ActVendorInfo struct {
model.Act
VendorList []*ActMapPureInfo `json:"vendorList"`
}
type tActAndMap struct {
model.Act
MapID int `orm:"column(map_id)" json:"-"` // 内部使用,不暴露
ActMapPureInfo
}
type PagedActListInfo struct {
TotalCount int `json:"totalCount"`
Data []*ActVendorInfo `json:"data"`
}
func GetActVendorInfo(db *DaoDB, actID int, vendorIDs []int) (actMap map[int]*model.Act2, err error) {
leftOrEmpty := ""
if len(vendorIDs) == 1 && vendorIDs[0] == -1 {
leftOrEmpty = "LEFT"
}
sql := fmt.Sprintf(`
SELECT t1.*,
t2.id map_id, t2.vendor_id, t2.vendor_org_code, t2.vendor_act_id, t2.sync_status
FROM act t1
%s JOIN act_map t2 ON t2.act_id = t1.id AND t2.deleted_at = ?`, leftOrEmpty)
sqlParams := []interface{}{
utils.DefaultTimeValue,
}
if len(vendorIDs) > 0 {
sql += " AND t2.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
sqlParams = append(sqlParams, vendorIDs)
}
sql += `
WHERE t1.deleted_at = ? AND t1.id = ?`
sqlParams = append(sqlParams, utils.DefaultTimeValue, actID)
var actList []*model.Act2
if err = GetRows(db, &actList, sql, sqlParams...); err == nil {
actMap = make(map[int]*model.Act2)
for _, v := range actList {
if leftOrEmpty != "" {
v.VendorID = -1
}
actMap[v.VendorID] = v
}
}
return actMap, err
}
func GetActStoreSkuVendorList(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs []int, keyword string, offset, pageSize int) (totalCount int, actStoreSkuList []*model.ActStoreSku2, err error) {
// globals.SugarLogger.Debugf("GetActStoreSkuVendorList actID:%d", actID)
// offset = jxutils.FormalizePageOffset(offset)
// pageSize = jxutils.FormalizePageSize(pageSize)
// leftOrEmpty := ""
// if len(vendorIDs) == 1 && (vendorIDs[0] == -1 || vendorIDs[0] == model.VendorIDJX) {
// leftOrEmpty = "LEFT"
// }
// sql := fmt.Sprintf(`
// SELECT SQL_CALC_FOUND_ROWS
// t1.*,
// t2.id map_id, t2.vendor_id, t2.vendor_act_id, t2.sync_status, t2.actual_act_price, t2.vendor_price, t2.trend_type, t2.trend_price,
// t3.vendor_store_id,
// CASE t2.vendor_id
// WHEN 0 THEN
// t4m.vendor_thing_id
// WHEN 1 THEN
// t5.mtwm_id
// WHEN 3 THEN
// t5.ebai_id
// ELSE
// ''
// END vendor_sku_id,
// t4.comment, t4.spec_quality, t4.spec_unit,
// t6.name store_name,
// t7.name sku_name_name, t7.unit, t7.prefix, t7.ex_prefix, t7.ex_prefix_begin, t7.ex_prefix_end
// FROM act_store_sku t1
// %s JOIN act_store_sku_map t2 ON t2.act_id = ? AND t2.bind_id = t1.id AND t2.deleted_at = ?`, leftOrEmpty)
// sqlParams := []interface{}{
// actID,
// utils.DefaultTimeValue,
// }
// if len(vendorIDs) > 0 {
// sql += " AND t2.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
// sqlParams = append(sqlParams, vendorIDs)
// }
// sql += `
// LEFT JOIN store_map t3 ON t3.store_id = t1.store_id AND t3.vendor_id = t2.vendor_id AND t3.deleted_at = ?
// JOIN sku t4 ON t4.id = t1.sku_id
// LEFT JOIN thing_map t4m ON t4m.vendor_id = ? AND t4m.thing_id = t4.id AND t4m.thing_type = ? AND t4m.vendor_id = t2.vendor_id AND t4m.vendor_org_code = t3.vendor_org_code AND t4m.deleted_at = ?
// LEFT JOIN store_sku_bind t5 ON t5.sku_id = t1.sku_id AND t5.store_id = t1.store_id AND t5.deleted_at = ?
// LEFT JOIN store t6 ON t6.id = t1.store_id
// JOIN sku_name t7 ON t7.id = t4.name_id
// WHERE t1.act_id = ?
// `
// sqlParams = append(sqlParams,
// utils.DefaultTimeValue,
// model.VendorIDJD, model.ThingTypeSku, utils.DefaultTimeValue,
// utils.DefaultTimeValue,
// actID,
// )
// if keyword != "" {
// keywordLike := "%" + keyword + "%"
// sql += " AND (t7.name LIKE ? OR t6.name LIKE ?"
// sqlParams = append(sqlParams, keywordLike, keywordLike)
// if intKeyword := int(utils.Str2Int64WithDefault(keyword, 0)); intKeyword > 0 {
// sql += " OR t1.sku_id = ? OR t1.store_id = ?"
// sqlParams = append(sqlParams, intKeyword, intKeyword)
// }
// sql += ")"
// }
// if leftOrEmpty != "" {
// sql += " AND t1.deleted_at = ?"
// sqlParams = append(sqlParams, utils.DefaultTimeValue)
// }
// if len(storeIDs) > 0 {
// sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
// sqlParams = append(sqlParams, storeIDs)
// }
// if len(skuIDs) > 0 {
// sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
// sqlParams = append(sqlParams, skuIDs)
// }
// sql += " LIMIT ? OFFSET ?;"
// sqlParams = append(sqlParams, pageSize, offset)
// // globals.SugarLogger.Debug(sql)
// // globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false))
// // globals.SugarLogger.Debug(utils.Format4Output(actStoreSkuList, false))
// Begin(db)
// defer Commit(db)
// if err = GetRows(db, &actStoreSkuList, sql, sqlParams...); err == nil {
// totalCount = GetLastTotalRowCount(db)
// }
return totalCount, actStoreSkuList, err
}
func GetActStoreSkuVendorInfo(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs []int) (actStoreSkuMap map[int][]*model.ActStoreSku2, err error) {
leftOrEmpty := ""
if len(vendorIDs) == 1 && vendorIDs[0] == -1 {
leftOrEmpty = "LEFT"
}
_, actStoreSkuList, err := GetActStoreSkuVendorList(db, actID, vendorIDs, storeIDs, skuIDs, "", 0, -1)
if err == nil {
actStoreSkuMap = make(map[int][]*model.ActStoreSku2)
for _, v := range actStoreSkuList {
if leftOrEmpty != "" {
v.VendorID = -1
}
actStoreSkuMap[v.VendorID] = append(actStoreSkuMap[v.VendorID], v)
}
}
return actStoreSkuMap, err
}
func QueryActs(db *DaoDB, actID int, offset, pageSize int, syncStatus int, keyword string, vendorID int, statusList, actTypeList, createTypeList []int,
storeID int, skuIDs []int, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *PagedActListInfo, err error) {
if actID == 0 && utils.IsTimeZero(createdAtFrom) && utils.IsTimeZero(beginAt) {
return nil, fmt.Errorf("actID,createdAtFrom和beginAt中至少要指定一个条件")
}
offset = jxutils.FormalizePageOffset(offset)
pageSize = jxutils.FormalizePageSize(pageSize)
isGetAll := offset == 0 && pageSize == model.UnlimitedPageSize
sql := `
SELECT SQL_CALC_FOUND_ROWS
DISTINCT t1.id
FROM act t1`
sqlParams := []interface{}{}
if isGetAll {
sql = `
SELECT
t1.*,
t2.id map_id, t2.vendor_id, t2.vendor_act_id, t2.sync_status, t2.remark map_remark
FROM act t1`
}
sql += " LEFT JOIN act_map t2 ON t2.act_id = t1.id AND t2.deleted_at = ?"
sqlParams = append(sqlParams, utils.DefaultTimeValue)
if syncStatus >= 0 {
sql += " AND (t2.sync_status = ? OR t2.sync_status & ? <> 0)"
sqlParams = append(sqlParams, syncStatus, syncStatus)
}
sql += `
WHERE t1.deleted_at = ?`
if syncStatus >= 0 {
sql += " AND t2.id IS NOT NULL"
}
sqlParams = append(sqlParams, utils.DefaultTimeValue)
keywordInt := int64(0)
if keyword != "" {
keywordLike := "%" + keyword + "%"
sql += " AND ( t1.name LIKE ? OR t1.advertising LIKE ? OR t1.remark LIKE ? OR t2.vendor_act_id LIKE ?"
sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike)
keywordInt = utils.Str2Int64WithDefault(keyword, 0)
if keywordInt > 0 {
sql += `
OR t1.id = ?`
sqlParams = append(sqlParams, keywordInt)
}
sql += ")"
}
if storeID > 0 || len(skuIDs) > 0 || cityCode > 0 {
sql += ` AND (SELECT COUNT(*)
FROM act_store_sku t2`
if cityCode > 0 {
sql += " JOIN store t3 ON t3.id = t2.store_id AND t3.city_code = ?"
sqlParams = append(sqlParams, cityCode)
}
sql += `
WHERE t2.act_id = t1.id AND t2.deleted_at = ?`
sqlParams = append(sqlParams, utils.DefaultTimeValue)
if storeID > 0 {
sql += " AND t2.store_id = ?"
sqlParams = append(sqlParams, storeID)
}
if len(skuIDs) > 0 {
sql += " AND t2.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
sql += ") > 0"
}
if actID > 0 {
sql += " AND t1.id = ?"
sqlParams = append(sqlParams, actID)
}
if vendorID >= 0 {
sql += " AND t1.vendor_mask & ? <> 0"
sqlParams = append(sqlParams, model.GetVendorMask(vendorID))
}
if len(statusList) > 0 {
sql += " AND t1.status IN (" + GenQuestionMarks(len(statusList)) + ")"
sqlParams = append(sqlParams, statusList)
}
if len(actTypeList) > 0 {
sql += " AND t1.type IN (" + GenQuestionMarks(len(actTypeList)) + ")"
sqlParams = append(sqlParams, actTypeList)
}
if len(createTypeList) > 0 {
sql += " AND t1.create_type IN (" + GenQuestionMarks(len(createTypeList)) + ")"
sqlParams = append(sqlParams, createTypeList)
}
if !utils.IsTimeZero(beginAt) {
sql += " AND t1.begin_at <= ?"
sqlParams = append(sqlParams, beginAt)
}
if !utils.IsTimeZero(endAt) {
sql += " AND t1.end_at >= ?"
sqlParams = append(sqlParams, endAt)
}
if !utils.IsTimeZero(createdAtFrom) {
sql += " AND t1.created_at >= ?"
sqlParams = append(sqlParams, createdAtFrom)
}
if !utils.IsTimeZero(createdAtTo) {
sql += " AND t1.created_at <= ?"
sqlParams = append(sqlParams, createdAtTo)
}
pagedInfo = &PagedActListInfo{}
if isGetAll {
sql += `
ORDER BY t1.id DESC, t2.vendor_id`
} else {
sql += `
ORDER BY 1 DESC
LIMIT ? OFFSET ?
`
sqlParams = append(sqlParams, pageSize, offset)
var idList []int
txDB, _ := Begin(db)
defer func() {
if r := recover(); r != nil {
Rollback(db, txDB)
panic(r)
}
}()
// globals.SugarLogger.Debug(sql)
if err = GetRowsTx(txDB, &idList, sql, sqlParams...); err != nil || len(idList) == 0 {
Rollback(db, txDB)
return pagedInfo, err
}
pagedInfo.TotalCount = GetLastTotalRowCountTx(txDB)
Commit(db, txDB)
sql = `
SELECT
t1.*,
t2.id map_id, t2.vendor_id, t2.vendor_org_code, t2.vendor_act_id, t2.sync_status, t2.remark map_remark
FROM act t1
LEFT JOIN act_map t2 ON t2.act_id = t1.id AND t2.deleted_at = ?
WHERE t1.id IN (` + GenQuestionMarks(len(idList)) + `)`
if syncStatus >= 0 {
sql += " AND t2.id IS NOT NULL"
}
sql += `
ORDER BY t1.id DESC, t2.vendor_id`
sqlParams = []interface{}{
utils.DefaultTimeValue,
idList,
}
}
var actList []*tActAndMap
// globals.SugarLogger.Debug(sql)
if err = GetRows(db, &actList, sql, sqlParams...); err != nil {
return nil, err
}
actMap := make(map[int]*ActVendorInfo)
for _, v := range actList {
tmpAct := actMap[v.ID]
if tmpAct == nil {
tmpAct = &ActVendorInfo{
Act: v.Act,
}
actMap[v.ID] = tmpAct
pagedInfo.Data = append(pagedInfo.Data, tmpAct)
}
if v.MapID > 0 {
tmpAct.VendorList = append(tmpAct.VendorList, &v.ActMapPureInfo)
}
}
if isGetAll {
pagedInfo.TotalCount = len(pagedInfo.Data)
}
return pagedInfo, err
}
func GetExistVendorActIDs(db *DaoDB, vendorID int) (vendorActIDs []string, err error) {
// todo 不应该是全表扫描
sql := `
SELECT
DISTINCT t1.vendor_act_id
FROM act_store_sku_map t1
WHERE t1.deleted_at = ? AND t1.vendor_id = ?`
sqlParams := []interface{}{
utils.DefaultTimeValue,
vendorID,
}
err = GetRows(db, &vendorActIDs, sql, sqlParams...)
return vendorActIDs, err
}
func UpdateActStatusByTime(db *DaoDB, refTime time.Time) (num int64, err error) {
sql := `
UPDATE act t1
SET t1.status = ?
WHERE t1.deleted_at = ? AND t1.status < ? AND t1.end_at < ?;`
sqlParams := []interface{}{
model.ActStatusEnded,
utils.DefaultTimeValue,
model.ActStatusCanceled,
utils.Time2Date(refTime),
}
num, err = ExecuteSQL(db, sql, sqlParams...)
return num, err
}
// func ActStoreSkuMap2StoreSkuAct(actStoreSkuMap *model.ActStoreSkuMap, isCanceled bool) (storeSkuAct *model.StoreSkuAct) {
// storeSkuAct = &model.StoreSkuAct{
// StoreID: actStoreSkuMap.StoreID,
// SkuID: actStoreSkuMap.SkuID,
// VendorID: actStoreSkuMap.VendorID,
// }
// storeSkuAct.CreatedAt = actStoreSkuMap.CreatedAt
// storeSkuAct.UpdatedAt = actStoreSkuMap.UpdatedAt
// storeSkuAct.LastOperator = actStoreSkuMap.LastOperator
// if actStoreSkuMap.ActualActPrice > 0 {
// if isCanceled || !utils.IsTimeZero(actStoreSkuMap.DeletedAt) {
// storeSkuAct.ActID = 0
// } else {
// storeSkuAct.ActID = actStoreSkuMap.ActID
// storeSkuAct.VendorActID = actStoreSkuMap.VendorActID
// storeSkuAct.SyncStatus = actStoreSkuMap.SyncStatus
// storeSkuAct.VendorPrice = actStoreSkuMap.VendorPrice
// storeSkuAct.ActualActPrice = actStoreSkuMap.ActualActPrice
// }
// }
// if actStoreSkuMap.EarningPrice > 0 {
// if isCanceled || !utils.IsTimeZero(actStoreSkuMap.DeletedAt) {
// storeSkuAct.EarningActID = 0
// } else {
// storeSkuAct.EarningActID = actStoreSkuMap.ActID
// storeSkuAct.EarningPrice = actStoreSkuMap.EarningPrice
// }
// }
// return storeSkuAct
// }
func BatchUpdateActEntity(db *DaoDB, isCanceled bool, items []*KVUpdateItem) (num int64, err error) {
return BatchUpdateEntityByKV(db, items)
// if globals.IsStoreSkuAct {
// Begin(db)
// defer func() {
// if r := recover(); r != nil || err != nil {
// Rollback(db)
// if r != nil {
// panic(r)
// }
// }
// }()
// for _, v := range items {
// if actStoreSku, ok := v.Item.(*model.ActStoreSkuMap); ok {
// for k1, v1 := range v.KVs {
// refutil.SetObjFieldByName(actStoreSku, k1, v1)
// }
// if err = CreateOrUpdateActStoreSku(db, ActStoreSkuMap2StoreSkuAct(actStoreSku, isCanceled)); err != nil {
// return 0, err
// }
// }
// }
// }
// if _, err = BatchUpdateEntityByKV(db, items); err != nil {
// return 0, err
// }
// if globals.IsStoreSkuAct {
// Commit(db)
// }
// return num, err
}
func CreateOrUpdateActStoreSku(db *DaoDB, storeSkuAct *model.StoreSkuAct) (err error) {
storeSkuActCopy := *storeSkuAct
if err2 := GetEntity(db, &storeSkuActCopy, model.FieldStoreID, model.FieldSkuID, model.FieldVendorID); err2 == nil {
storeSkuAct.ID = storeSkuActCopy.ID
_, err = UpdateEntity(db, storeSkuAct)
} else if IsNoRowsError(err2) {
err = CreateEntity(db, storeSkuAct)
} else {
err = err2
}
return err
}
func GetStoresSkusAct(db *DaoDB, hintActID int, mustDirty bool, storeIDs, skuIDs, vendorIDs []int, mustHaveVendorActID bool, minActPercentage, maxActPercentage int) (storeSkuActList []*model.StoreSkuAct, err error) {
sql := `
SELECT *
FROM store_sku_act t1
WHERE 1 = 1
`
sqlParams := []interface{}{}
if hintActID > 0 {
sql += " AND t1.hint_act_id = ?"
sqlParams = append(sqlParams, hintActID)
}
if mustDirty {
sql += " AND (t1.sync_status <> 0 OR (t1.act_percentage = 0 AND t1.vendor_act_id <> '') OR (t1.act_percentage <> 0 AND t1.vendor_act_id = ''))"
}
if len(storeIDs) > 0 {
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
if len(skuIDs) > 0 {
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
if len(vendorIDs) > 0 {
sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
sqlParams = append(sqlParams, vendorIDs)
}
if mustHaveVendorActID {
sql += " AND t1.vendor_act_id <> ''"
}
if minActPercentage > 0 {
sql += " AND t1.act_percentage >= ?"
sqlParams = append(sqlParams, minActPercentage)
}
if maxActPercentage > 0 {
sql += " AND t1.act_percentage <= ?"
sqlParams = append(sqlParams, maxActPercentage)
}
err = GetRows(db, &storeSkuActList, sql, sqlParams...)
return storeSkuActList, err
}

View File

@@ -1,54 +0,0 @@
package dao
import (
"testing"
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
)
func TestGetEffectiveActStoreSkuInfo(t *testing.T) {
type testData struct {
ResultCount int
ActID int
VendorIDs []int
StoreIDs []int
SkuIDs []int
FromTime time.Time
ToTime time.Time
}
for _, v := range []*testData{
&testData{
StoreIDs: []int{100190},
SkuIDs: []int{23847},
ResultCount: 1,
FromTime: utils.Str2Time("2019-08-06 12:34:56"),
ToTime: utils.Str2Time("2019-08-06 12:34:56"),
},
} {
result, err := GetEffectiveActStoreSkuInfo(GetDB(), v.ActID, v.VendorIDs, model.ActTypeAll, v.StoreIDs, v.SkuIDs, v.FromTime, v.ToTime)
if err != nil {
t.Fatal(err)
}
if len(result) != v.ResultCount {
t.Log(utils.Format4Output(result, false))
t.Errorf("cond:%s, len(result):%d, v.ResultCount:%d", utils.Format4Output(v, false), len(result), v.ResultCount)
}
}
}
func TestUpdateActStatusByTime(t *testing.T) {
_, err := UpdateActStatusByTime(GetDB(), time.Now().Add(-48*time.Hour))
if err != nil {
t.Fatal(err)
}
}
func TestGetActStoreSkuVendorList(t *testing.T) {
_, _, err := GetActStoreSkuVendorList(GetDB(), 18440, nil, nil, nil, "", 0, 0)
if err != nil {
t.Fatal(err)
}
}

View File

@@ -1,654 +0,0 @@
package dao
import (
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/model"
)
func GetDeliveryOrdersNoPage(db *DaoDB, userIDs []string, statuss []int, fromTime, toTime time.Time, isWeights []int) (dOrders []*model.DeliveryOrder, err error) {
sql := `
SELECT a.*
FROM delivery_order a
WHERE 1 = 1
`
sqlParams := []interface{}{}
if len(userIDs) > 0 {
sql += ` AND a.user_id IN (` + GenQuestionMarks(len(userIDs)) + `)`
sqlParams = append(sqlParams, userIDs)
}
if len(statuss) > 0 {
sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)`
sqlParams = append(sqlParams, statuss)
}
if len(isWeights) > 0 {
sql += ` AND a.is_weight IN (` + GenQuestionMarks(len(isWeights)) + `)`
sqlParams = append(sqlParams, isWeights)
}
if fromTime != utils.ZeroTimeValue {
sql += ` AND a.created_at >= ?`
sqlParams = append(sqlParams, fromTime)
}
if toTime != utils.ZeroTimeValue {
sql += ` AND a.created_at <= ?`
sqlParams = append(sqlParams, toTime)
}
err = GetRows(db, &dOrders, sql, sqlParams)
return dOrders, err
}
type GetDeliveryOrdersResult struct {
model.DeliveryOrder
DeliverySendInfo *UserDeliveryAddressEx `json:"deliverySendInfo"`
DeliveryReceiveInfo *UserDeliveryAddressEx `json:"deliveryReceiveInfo"`
}
func GetDeliveryOrders(db *DaoDB, userIDs []string, statuss []int, fromTime, toTime time.Time, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
var dOrders []*GetDeliveryOrdersResult
sql := `
SELECT SQL_CALC_FOUND_ROWS a.*
FROM delivery_order a
WHERE 1 = 1
`
sqlParams := []interface{}{}
if len(userIDs) > 0 {
sql += ` AND a.user_id IN (` + GenQuestionMarks(len(userIDs)) + `)`
sqlParams = append(sqlParams, userIDs)
}
if len(statuss) > 0 {
sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)`
sqlParams = append(sqlParams, statuss)
}
if fromTime != utils.ZeroTimeValue {
sql += ` AND a.created_at >= ?`
sqlParams = append(sqlParams, fromTime)
}
if toTime != utils.ZeroTimeValue {
sql += ` AND a.created_at <= ?`
sqlParams = append(sqlParams, toTime)
}
sql += " ORDER BY a.created_at DESC"
sql += " LIMIT ? OFFSET ?"
pageSize = jxutils.FormalizePageSize(pageSize)
sqlParams = append(sqlParams, pageSize, offset)
txDB, _ := Begin(db)
defer Commit(db, txDB)
if err = GetRowsTx(txDB, &dOrders, sql, sqlParams...); err == nil {
pagedInfo = &model.PagedInfo{
TotalCount: GetLastTotalRowCountTx(txDB),
// Data: dOrders,
}
for _, v := range dOrders {
if addressList1, _, err := QueryUserDeliveryAddress(db, int64(v.DeliverySendID), nil, 0, 0, 0); err == nil && len(addressList1) > 0 {
v.DeliverySendInfo = addressList1[0]
} else {
sendInfo := &UserDeliveryAddressEx{}
sendInfo.ConsigneeName = v.SendName
sendInfo.ConsigneeMobile = v.SendMobile
sendInfo.Address = v.SendAddress
sendInfo.AutoAddress = v.SendAutoAddress
sendInfo.CityCode = v.SendCityCode
sendInfo.DistrictCode = v.SendDistrictCode
sendInfo.DetailAddress = v.SendDetailAddress
sendInfo.Lng = v.SendLng
sendInfo.Lat = v.SendLat
v.DeliverySendInfo = sendInfo
}
if addressList2, _, err := QueryUserDeliveryAddress(db, int64(v.DeliveryReceiveID), nil, 0, 0, 0); err == nil && len(addressList2) > 0 {
v.DeliveryReceiveInfo = addressList2[0]
} else {
receiveInfo := &UserDeliveryAddressEx{}
receiveInfo.ConsigneeName = v.ReceiveName
receiveInfo.ConsigneeMobile = v.ReceiveMobile
receiveInfo.Address = v.ReceiveAddress
receiveInfo.AutoAddress = v.ReceiveAutoAddress
receiveInfo.CityCode = v.ReceiveCityCode
receiveInfo.DistrictCode = v.ReceiveDistrictCode
receiveInfo.DetailAddress = v.ReceiveDetailAddress
receiveInfo.Lng = v.ReceiveLng
receiveInfo.Lat = v.ReceiveLat
v.DeliveryReceiveInfo = receiveInfo
}
}
pagedInfo.Data = dOrders
}
return pagedInfo, err
}
type GetOrdersResult struct {
model.Order
UserName string `json:"userName"`
Mobile string `json:"mobile"`
}
func GetOrders(db *DaoDB, orderID, userID string, orderType int, cityCodes []int, fromTime, toTime time.Time, keyword string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
var orders []*GetOrdersResult
sql := `
SELECT SQL_CALC_FOUND_ROWS a.*, b.name user_name, b.mobile
FROM ` + "`order`" + ` a
JOIN user b ON b.user_id = a.user_id AND b.deleted_at = ?
WHERE 1 = 1
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
}
if orderID != "" {
sql += ` AND a.order_id = ?`
sqlParams = append(sqlParams, orderID)
}
if userID != "" {
sql += ` AND a.user_id = ?`
sqlParams = append(sqlParams, userID)
}
if orderType != 0 {
sql += ` AND a.type = ?`
sqlParams = append(sqlParams, orderType)
}
if len(cityCodes) > 0 {
sql += ` AND a.city_code IN (` + GenQuestionMarks(len(cityCodes)) + `)`
sqlParams = append(sqlParams, cityCodes)
}
if fromTime != utils.ZeroTimeValue {
sql += ` AND a.created_at >= ?`
sqlParams = append(sqlParams, fromTime)
}
if toTime != utils.ZeroTimeValue {
sql += ` AND a.created_at <= ?`
sqlParams = append(sqlParams, toTime)
}
if keyword != "" {
sql += ` AND (b.mobile LIKE ? OR b.name LIKE ?)`
sqlParams = append(sqlParams, "%"+keyword+"%", "%"+keyword+"%")
}
sql += " LIMIT ? OFFSET ?"
pageSize = jxutils.FormalizePageSize(pageSize)
sqlParams = append(sqlParams, pageSize, offset)
txDB, _ := Begin(db)
defer Commit(db, txDB)
if err = GetRowsTx(txDB, &orders, sql, sqlParams); err == nil {
pagedInfo = &model.PagedInfo{
TotalCount: GetLastTotalRowCountTx(txDB),
Data: orders,
}
}
return pagedInfo, err
}
type GetPayStatisticsResult struct {
TotalPay int `json:"totalPay"` //支付总额
CanCash int `json:"canCash"` //可提现(未提现+申请提现)
AccountBalance int `json:"accountBalance"` //未提现(含保证金)
SubmitCash int `json:"submitCash"` //申请提现
Cashed int `json:"cashed"` //已经体现
CashIncome int `json:"cashIncome"` //提现收益
TotalIncome int `json:"totalIncome"` //收益总额
MemberIncome int `json:"memberIncome"` //会员收益
}
func getFromSql(orderType, status int, alies string, userID string, pop int, cityCodes []int, mobile string, fromTime, toTime time.Time, orderTypes []int) (sql string, sqlParams []interface{}) {
sql += `
(SELECT SUM(IFNULL(b.pay_price,0)) total_pay
FROM user a
JOIN ` + "`order` b " + `ON b.user_id = a.user_id AND b.type = ? AND b.status = ?
`
sqlParams = append(sqlParams, orderType, status)
if len(orderTypes) > 0 {
sql += ` AND b.order_type IN (` + GenQuestionMarks(len(orderTypes)) + `)`
sqlParams = append(sqlParams, orderTypes)
}
if fromTime != utils.ZeroTimeValue {
sql += ` AND b.created_at > ?`
sqlParams = append(sqlParams, fromTime)
}
if toTime != utils.ZeroTimeValue {
sql += ` AND b.created_at < ?`
sqlParams = append(sqlParams, toTime)
}
if mobile != "" {
if pop == 1 {
sql += " JOIN user e ON e.moblie = ? AND a.pop_user = e.user_id"
sqlParams = append(sqlParams, mobile)
}
}
sql += `
WHERE a.status = ? AND a.deleted_at = ?
`
sqlParams = append(sqlParams, model.UserStatusNormal, utils.DefaultTimeValue)
if userID != "" {
if pop == 1 {
sql += " AND a.pop_user = ?"
sqlParams = append(sqlParams, userID)
} else {
sql += " AND a.user_id = ?"
sqlParams = append(sqlParams, userID)
}
}
if mobile != "" {
if pop == 0 {
sql += " AND a.mobile = ?"
sqlParams = append(sqlParams, mobile)
}
}
if len(cityCodes) > 0 {
sql += ` AND a.city_code IN (` + GenQuestionMarks(len(cityCodes)) + `)`
sqlParams = append(sqlParams, cityCodes)
}
sql += `) ` + alies
return sql, sqlParams
}
func GetPayStatistics(db *DaoDB, userID string, pop int, cityCodes []int, mobile string, fromTime, toTime time.Time, orderTypes []int) (getPayStatisticsResult *GetPayStatisticsResult, err error) {
sqlParams := []interface{}{}
sql := `SELECT t1.total_pay, t2.total_pay submit_cash, t3.total_pay cashed, t4.account_balance, t4.account_balance + t2.total_pay can_cash
FROM `
rSQL1, rSQLParams1 := getFromSql(model.OrderTypePay, model.OrderStatusFinished, "t1", userID, pop, cityCodes, mobile, fromTime, toTime, orderTypes)
sql += rSQL1 + ","
sqlParams = append(sqlParams, rSQLParams1...)
rSQL2, rSQLParams2 := getFromSql(model.OrderTypeCash, model.OrderStatusWait4Pay, "t2", userID, pop, cityCodes, mobile, fromTime, toTime, orderTypes)
sql += rSQL2 + ","
sqlParams = append(sqlParams, rSQLParams2...)
rSQL3, rSQLParams3 := getFromSql(model.OrderTypeCash, model.OrderStatusFinished, "t3", userID, pop, cityCodes, mobile, fromTime, toTime, orderTypes)
sql += rSQL3 + ","
sqlParams = append(sqlParams, rSQLParams3...)
sql += `(SELECT SUM(IFNULL(b.account_balance,0)) account_balance
FROM user a
JOIN user_bill b ON a.user_id = b.user_id
`
if mobile != "" {
if pop == 1 {
sql += " JOIN user e ON e.moblie = ? AND a.pop_user = e.user_id"
sqlParams = append(sqlParams, mobile)
}
}
sql += `
WHERE 1 = 1
`
if userID != "" {
if pop == 1 {
sql += " AND a.pop_user = ?"
sqlParams = append(sqlParams, userID)
} else {
sql += " AND a.user_id = ?"
sqlParams = append(sqlParams, userID)
}
}
if mobile != "" {
if pop == 0 {
sql += " AND a.mobile = ?"
sqlParams = append(sqlParams, mobile)
}
}
if len(cityCodes) > 0 {
sql += ` AND a.city_code IN (` + GenQuestionMarks(len(cityCodes)) + `)`
sqlParams = append(sqlParams, cityCodes)
}
sql += `
) t4`
err = GetRow(db, &getPayStatisticsResult, sql, sqlParams)
sqlParams2 := []interface{}{}
getPayStatisticsResult1 := &GetPayStatisticsResult{}
sql2 := `
SELECT SUM(IFNULL(d.expend_price,0)) member_income
FROM user a`
if mobile != "" {
if pop == 1 {
sql2 += " JOIN user e ON e.moblie = ? AND a.pop_user = e.user_id"
sqlParams2 = append(sqlParams2, mobile)
}
}
sql2 += `
LEFT JOIN user_bill c ON c.user_id = a.user_id
LEFT JOIN bill_expend d ON d.bill_id = c.bill_id AND d.type = ?
`
sqlParams2 = append(sqlParams2, model.BillTypeMember)
if fromTime != utils.ZeroTimeValue {
sql2 += ` AND d.created_at > ?`
sqlParams2 = append(sqlParams2, fromTime)
}
if toTime != utils.ZeroTimeValue {
sql2 += ` AND d.created_at < ?`
sqlParams2 = append(sqlParams2, toTime)
}
sql2 += `
WHERE a.status = ? AND a.deleted_at = ?
`
sqlParams2 = append(sqlParams2, model.UserStatusNormal, utils.DefaultTimeValue)
if len(cityCodes) > 0 {
sql2 += ` AND a.city_code IN (` + GenQuestionMarks(len(cityCodes)) + `)`
sqlParams2 = append(sqlParams2, cityCodes)
}
if mobile != "" {
if pop == 0 {
sql2 += " AND a.mobile = ?"
sqlParams2 = append(sqlParams2, mobile)
}
}
if userID != "" {
if pop == 1 {
sql2 += " AND a.pop_user = ?"
sqlParams2 = append(sqlParams2, userID)
} else {
sql2 += " AND a.user_id = ?"
sqlParams2 = append(sqlParams2, userID)
}
}
err = GetRow(db, &getPayStatisticsResult1, sql2, sqlParams2)
getPayStatisticsResult.MemberIncome = getPayStatisticsResult1.MemberIncome
getPayStatisticsResult.CashIncome = getPayStatisticsResult.Cashed / 10
getPayStatisticsResult.TotalIncome = getPayStatisticsResult.MemberIncome + getPayStatisticsResult.CashIncome
return getPayStatisticsResult, err
}
type GetManageStatisticsResult struct {
Date time.Time `json:"date"` //日期
BrowseCount int `json:"browseCount"` //点击次数
AcceptCount int `json:"acceptCount"` //接受任务数
FinishCount int `json:"finishCount"` //完成任务数
CancelCount int `json:"cancelCount"` //取消任务数
TotalCash int `json:"totalCash"` //返现总额
InversionRate float64 `json:"inversionRate"` //转化率
}
func getFromSqlManage(status int, alies string, cityCodes []int, jobTime, endTime time.Time, jobIDs []int) (sql string, sqlParams []interface{}) {
sql += `
(SELECT COUNT(b.id) count
FROM job a
JOIN job_order b ON a.id = b.job_id
WHERE a.deleted_at = ?
`
sqlParams = append(sqlParams, utils.DefaultTimeValue)
if status != 0 {
sql += " AND b.status = ?"
sqlParams = append(sqlParams, status)
}
if jobTime != utils.ZeroTimeValue {
sql += " AND a.created_at > ?"
sqlParams = append(sqlParams, jobTime)
}
if endTime != utils.ZeroTimeValue {
sql += " AND a.created_at < ?"
sqlParams = append(sqlParams, endTime)
}
if len(cityCodes) > 0 {
sql += ` AND a.job_city_code IN (` + GenQuestionMarks(len(cityCodes)) + `)`
sqlParams = append(sqlParams, cityCodes)
}
if len(jobIDs) > 0 {
sql += ` AND a.id IN (` + GenQuestionMarks(len(jobIDs)) + `)`
sqlParams = append(sqlParams, jobIDs)
}
sql += ") " + alies
return sql, sqlParams
}
func getWhereSqlManage(cityCodes []int, jobTime, endTime time.Time, jobIDs []int) (sql string, sqlParams []interface{}) {
if jobTime != utils.ZeroTimeValue {
sql += " AND a.created_at > ?"
sqlParams = append(sqlParams, jobTime)
}
if endTime != utils.ZeroTimeValue {
sql += " AND a.created_at < ?"
sqlParams = append(sqlParams, endTime)
}
if len(cityCodes) > 0 {
sql += ` AND a.job_city_code IN (` + GenQuestionMarks(len(cityCodes)) + `)`
sqlParams = append(sqlParams, cityCodes)
}
if len(jobIDs) > 0 {
sql += ` AND a.id IN (` + GenQuestionMarks(len(jobIDs)) + `)`
sqlParams = append(sqlParams, jobIDs)
}
return sql, sqlParams
}
func GetManageStatistics(db *DaoDB, cityCodes []int, jobTime time.Time, jobIDs []int) (getManageStatisticsResult *GetManageStatisticsResult, err error) {
endTime := jobTime.AddDate(0, 0, 1)
sqlParams := []interface{}{}
sql := `
SELECT t1.count accept_count, t2.count finish_count, t3.count cancel_count, t4.browse_count, t6.total_cash
FROM
`
rSQL1, rSQLparams1 := getFromSqlManage(model.JobOrderStatusAccept, "t1", cityCodes, jobTime, endTime, jobIDs)
sql += rSQL1 + ","
sqlParams = append(sqlParams, rSQLparams1...)
rSQL2, rSQLparams2 := getFromSqlManage(model.JobOrderStatusFinish, "t2", cityCodes, jobTime, endTime, jobIDs)
sql += rSQL2 + ","
sqlParams = append(sqlParams, rSQLparams2...)
rSQL3, rSQLparams3 := getFromSqlManage(model.JobOrderStatusCancel, "t3", cityCodes, jobTime, endTime, jobIDs)
sql += rSQL3 + ","
sqlParams = append(sqlParams, rSQLparams3...)
sql += `
(SELECT SUM(a.browse_count) browse_count
FROM job a
JOIN job_order b ON a.id = b.job_id
WHERE a.deleted_at = ?
`
sqlParams = append(sqlParams, utils.DefaultTimeValue)
rSQL4, rSQLparams4 := getWhereSqlManage(cityCodes, jobTime, endTime, jobIDs)
sql += rSQL4
sqlParams = append(sqlParams, rSQLparams4...)
sql += `
) t4,
`
sql += `
(SELECT t5.count * a.avg_price total_cash FROM job a,
(SELECT COUNT(b.id) count, a.id
FROM job a
JOIN job_order b ON a.id = b.job_id
WHERE a.deleted_at = ? AND b.status = ?
`
sqlParams = append(sqlParams, utils.DefaultTimeValue, model.JobOrderStatusFinish)
rSQL5, rSQLparams5 := getWhereSqlManage(cityCodes, jobTime, endTime, jobIDs)
sql += rSQL5
sqlParams = append(sqlParams, rSQLparams5...)
sql += `
GROUP BY 2) t5
WHERE a.id = t5.id
)t6
`
GetRow(db, &getManageStatisticsResult, sql, sqlParams)
if getManageStatisticsResult == nil {
return &GetManageStatisticsResult{
Date: jobTime,
}, err
} else {
getManageStatisticsResult.Date = jobTime
if getManageStatisticsResult.BrowseCount == 0 {
getManageStatisticsResult.InversionRate = 0
} else {
getManageStatisticsResult.InversionRate = float64(getManageStatisticsResult.FinishCount) / float64(getManageStatisticsResult.BrowseCount)
}
return getManageStatisticsResult, err
}
}
type GetManageStatisticsJobResult struct {
BrowseCount int `json:"browseCount"` //点击次数
AcceptCount int `json:"acceptCount"` //接受任务数
FinishCount int `json:"finishCount"` //完成任务数
CancelCount int `json:"cancelCount"` //取消任务数
TotalCash int `json:"totalCash"` //返现总额
InversionRate float64 `json:"inversionRate"` //转化率
Title string `json:"title"` //任务标题
}
func GetManageStatisticsJob(db *DaoDB, cityCodes []int, fromTime, toTime time.Time, jobIDs []int, offset, pageSize int) (pageInfo *model.PagedInfo, err error) {
var (
sqlParams = []interface{}{}
getManageStatisticsJobResult []*GetManageStatisticsJobResult
)
sql := `
SELECT t1.count acceptCount, t2.count finish_count, t3.count cancel_count, a.browse_count, a.title, a.browse_count / t2.count inversion_rate, t4.total_cash
FROM job a
LEFT JOIN (SELECT job_id, COUNT(*) count FROM job_order WHERE status = ? GROUP BY 1) t1 ON t1.job_id = a.id
LEFT JOIN (SELECT job_id, COUNT(*) count FROM job_order WHERE status = ? GROUP BY 1) t2 ON t2.job_id = a.id
LEFT JOIN (SELECT job_id, COUNT(*) count FROM job_order WHERE status = ? GROUP BY 1) t3 ON t3.job_id = a.id
`
sql += `
LEFT JOIN (SELECT COUNT(b.id) * a.avg_price total_cash, a.id
FROM job a
JOIN job_order b ON a.id = b.job_id AND b.status = ?
GROUP BY 2) t4 ON t4.id = a.id
`
sqlParams = append(sqlParams, model.JobOrderStatusAccept, model.JobOrderStatusFinish, model.JobOrderStatusCancel, model.JobOrderStatusFinish)
sql += " WHERE a.deleted_at = ?"
sqlParams = append(sqlParams, utils.DefaultTimeValue)
rSQL, rSQLparams := getWhereSqlManage(cityCodes, fromTime, toTime, jobIDs)
sql += rSQL
sqlParams = append(sqlParams, rSQLparams...)
sql += " LIMIT ? OFFSET ?"
pageSize = jxutils.FormalizePageSize(pageSize)
sqlParams = append(sqlParams, pageSize, offset)
txDB, _ := Begin(db)
defer Commit(db, txDB)
err = GetRowsTx(txDB, &getManageStatisticsJobResult, sql, sqlParams)
if err == nil {
pageInfo = &model.PagedInfo{
Data: getManageStatisticsJobResult,
TotalCount: GetLastTotalRowCountTx(txDB),
}
}
return pageInfo, err
}
func GetUnionOrders(db *DaoDB, vendorIDs, statuss []int, beginTime, endTime time.Time, isEarning int) (orders []*model.UnionOrder, err error) {
sql := `
SELECT *
FROM union_order
WHERE 1 = 1
`
sqlParams := []interface{}{}
if len(vendorIDs) > 0 {
sql += ` AND vendor_id IN (` + GenQuestionMarks(len(vendorIDs)) + `)`
sqlParams = append(sqlParams, vendorIDs)
}
if len(statuss) > 0 {
sql += ` AND status IN (` + GenQuestionMarks(len(statuss)) + `)`
sqlParams = append(sqlParams, statuss)
}
if !utils.IsTimeZero(beginTime) {
sql += ` AND order_settle_at > ?`
sqlParams = append(sqlParams, beginTime)
}
if !utils.IsTimeZero(endTime) {
sql += ` AND order_settle_at < ?`
sqlParams = append(sqlParams, endTime)
}
if isEarning != -1 {
sql += ` AND is_earning = ?`
sqlParams = append(sqlParams, isEarning)
}
err = GetRows(db, &orders, sql, sqlParams)
return orders, err
}
func GetUnionOrdersByIDs(db *DaoDB, vendorOrderIDs []string, vendorID int) (orders []*model.UnionOrder, err error) {
if len(vendorOrderIDs) == 0 {
return nil, err
}
sql := `
SELECT *
FROM union_order
WHERE 1 = 1
`
sqlParams := []interface{}{}
if len(vendorOrderIDs) > 0 {
sql += ` AND vendor_order_id IN (` + GenQuestionMarks(len(vendorOrderIDs)) + `)`
sqlParams = append(sqlParams, vendorOrderIDs)
}
if vendorID != 0 {
sql += ` AND vendor_id = ?`
sqlParams = append(sqlParams, vendorID)
}
err = GetRows(db, &orders, sql, sqlParams)
return orders, err
}
func GetMyUnionOrders(db *DaoDB, userID string, statuss []int, vendorID, offset, pageSize int) (page *model.PagedInfo, err error) {
var orders []*model.UnionOrder
sql := `
SELECT SQL_CALC_FOUND_ROWS a.*
FROM union_order a
WHERE 1 = 1
`
sqlParams := []interface{}{}
if vendorID != -1 {
sql += ` AND a.vendor_id = ?`
sqlParams = append(sqlParams, vendorID)
}
if len(statuss) > 0 {
sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)`
sqlParams = append(sqlParams, statuss)
}
if userID != "" {
sql += ` AND a.user_id = ?`
sqlParams = append(sqlParams, userID)
}
sql += " ORDER BY a.created_at DESC"
sql += " LIMIT ? OFFSET ?"
pageSize = jxutils.FormalizePageSize(pageSize)
sqlParams = append(sqlParams, pageSize, offset)
txDB, _ := Begin(db)
defer Commit(db, txDB)
if err = GetRowsTx(txDB, &orders, sql, sqlParams...); err == nil {
page = &model.PagedInfo{
TotalCount: GetLastTotalRowCountTx(txDB),
Data: orders,
}
}
return page, err
}
type GetUnionOrdersPageResult struct {
model.UnionOrder
Name string `json:"name"`
Moble string `json:"moble"`
}
func GetUnionOrdersPage(db *DaoDB, vendorIDs, statuss []int, beginTime, endTime time.Time, keyword string, offset, pageSize int) (page *model.PagedInfo, err error) {
var orders []*GetUnionOrdersPageResult
sql := `
SELECT SQL_CALC_FOUND_ROWS a.*, b.name, b.mobile
FROM union_order a
LEFT JOIN user b ON a.user_id = b.user_id
WHERE 1 = 1
`
sqlParams := []interface{}{}
if len(vendorIDs) > 0 {
sql += ` AND a.vendor_id IN (` + GenQuestionMarks(len(vendorIDs)) + `)`
sqlParams = append(sqlParams, vendorIDs)
}
if len(statuss) > 0 {
sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)`
sqlParams = append(sqlParams, statuss)
}
if !utils.IsTimeZero(beginTime) {
sql += ` AND a.order_settle_at > ?`
sqlParams = append(sqlParams, beginTime)
}
if !utils.IsTimeZero(endTime) {
sql += ` AND a.order_settle_at < ?`
sqlParams = append(sqlParams, endTime)
}
if keyword != "" {
keywordLike := "%" + keyword + "%"
sql += ` AND (b.name LIKE ? OR b.mobile LIKE ? OR a.vendor_order_id LIKE ? OR a.goods_name LIKE ? OR a.comment LIKE ?)`
sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike)
}
sql += " LIMIT ? OFFSET ?"
pageSize = jxutils.FormalizePageSize(pageSize)
sqlParams = append(sqlParams, pageSize, offset)
txDB, _ := Begin(db)
defer Commit(db, txDB)
if err = GetRowsTx(txDB, &orders, sql, sqlParams...); err == nil {
page = &model.PagedInfo{
TotalCount: GetLastTotalRowCountTx(txDB),
Data: orders,
}
}
return page, err
}

View File

@@ -381,19 +381,6 @@ func GetUserAllWaitCashPrice(db *DaoDB, userID string) (price int, err error) {
return result.Price, err
}
func GetUserAllWaitRealCashPrice(db *DaoDB, userID string) (price int, err error) {
var result = &GetUserAllWaitCashPriceResult{}
sql := `
SELECT SUM(pay_price) price FROM ` + "`order`" + ` WHERE user_id = ? AND status = ? AND type = ?
`
sqlParams := []interface{}{
userID,
model.OrderStatusWait4Pay,
model.OrderTypeCash,
}
err = GetRow(db, &result, sql, sqlParams)
return result.Price, err
}
func GetUserUnionBind(db *DaoDB, userID string, vendorID int, unionID string) (userBinds []*model.UserUnionBind, err error) {
sql := `
SELECT * FROM user_union_bind WHERE deleted_at = ?