From dda3d11583ef71f4018e7f058796ccb510ba549c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 4 Mar 2021 16:49:45 +0800 Subject: [PATCH] aa --- business/jxstore/cms/store_acct.go | 114 +++++++++++++++++++++++------ business/model/store.go | 9 ++- 2 files changed, 96 insertions(+), 27 deletions(-) diff --git a/business/jxstore/cms/store_acct.go b/business/jxstore/cms/store_acct.go index fac82d992..d4872bb07 100644 --- a/business/jxstore/cms/store_acct.go +++ b/business/jxstore/cms/store_acct.go @@ -1,10 +1,12 @@ package cms import ( + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" + "git.rosy.net.cn/jx-callback/globals" ) type StoreAcctManager struct { @@ -19,28 +21,64 @@ func init() { partner.InitStoreAcctManager(FixedStoreAcctManager) } -func (s *StoreAcctManager) InsertStoreAcctIncome(ctx *jxcontext.Context, db *dao.DaoDB, storeID, price, acctType int) (err error) { - storeAcctIncome := &model.StoreAcctIncome{ - StoreID: storeID, - IncomePrice: price, - Type: acctType, - UserID: ctx.GetUserID(), +func (s *StoreAcctManager) InsertStoreAcctIncome(ctx *jxcontext.Context, db *dao.DaoDB, storeID, price, acctType int, vendorOrderID string) (err error) { + var ( + userID, userName string + goodsVendorOrderID string + ) + if ctx != nil { + userID = ctx.GetUserID() + userName = ctx.GetUserName() + goodsVendorOrderID = vendorOrderID + } else { + storeOrder := &model.StoreAcctOrder{ + VendorOrderID: vendorOrderID, + } + if err = dao.GetEntity(db, storeOrder, "VendorOrderID"); err == nil && storeOrder.ID != 0 { + userID = storeOrder.UserID + userName = storeOrder.LastOperator + goodsVendorOrderID = storeOrder.GoodsVendorOrderID + } } - dao.WrapAddIDCULEntity(storeAcctIncome, ctx.GetUserName()) + storeAcctIncome := &model.StoreAcctIncome{ + StoreID: storeID, + IncomePrice: price, + Type: acctType, + UserID: userID, + VendorOrderID: goodsVendorOrderID, + } + dao.WrapAddIDCULEntity(storeAcctIncome, userName) err = dao.CreateEntity(db, storeAcctIncome) + globals.SugarLogger.Debugf("InsertStoreAcctIncome orderID: [%v] , price :[%v] , type :[%v]", vendorOrderID, price, acctType) return err } func (s *StoreAcctManager) InsertStoreAcctExpend(ctx *jxcontext.Context, db *dao.DaoDB, storeID, price, acctType int, vendorOrderID string) (err error) { + var ( + userID, userName string + ) + if ctx != nil { + userID = ctx.GetUserID() + userName = ctx.GetUserName() + } else { + storeOrder := &model.StoreAcctOrder{ + VendorOrderID: vendorOrderID, + } + if err = dao.GetEntity(db, storeOrder, "VendorOrderID"); err == nil && storeOrder.ID != 0 { + userID = storeOrder.UserID + userName = storeOrder.LastOperator + } + } storeAcctExpend := &model.StoreAcctExpend{ StoreID: storeID, ExpendPrice: price, Type: acctType, - UserID: ctx.GetUserID(), + UserID: userID, VendorOrderID: vendorOrderID, } - dao.WrapAddIDCULEntity(storeAcctExpend, ctx.GetUserName()) + dao.WrapAddIDCULEntity(storeAcctExpend, userName) err = dao.CreateEntity(db, storeAcctExpend) + globals.SugarLogger.Debugf("InsertStoreAcctExpend orderID: [%v] , price :[%v] , type :[%v]", vendorOrderID, price, acctType) return err } @@ -48,14 +86,13 @@ func (s *StoreAcctManager) UpdateStoreAcctBalance(ctx *jxcontext.Context, storeI var ( db = dao.GetDB() ) + globals.SugarLogger.Debugf("UpdateStoreAcctBalance storeID: [%v] , price :[%v] ,", storeID, price) + if ctx == nil { + ctx = jxcontext.AdminCtx + } storeAcct := &model.StoreAcct{ StoreID: storeID, } - if isIncome { - storeAcct.AccountBalance += price - } else { - storeAcct.AccountBalance -= price - } dao.Begin(db) defer func() { if r := recover(); r != nil || err != nil { @@ -73,10 +110,17 @@ func (s *StoreAcctManager) UpdateStoreAcctBalance(ctx *jxcontext.Context, storeI return err } } else { + globals.SugarLogger.Debugf("UpdateStoreAcctBalance1 storeID: [%v] , balance :[%v] ,", storeID, storeAcct.AccountBalance) + if isIncome { + storeAcct.AccountBalance += price + } else { + storeAcct.AccountBalance -= price + } if _, err = dao.UpdateEntity(db, storeAcct, "AccountBalance"); err != nil { dao.Rollback(db) return err } + globals.SugarLogger.Debugf("UpdateStoreAcctBalance2 storeID: [%v] , balance :[%v] ,", storeID, storeAcct.AccountBalance) } dao.Commit(db) return err @@ -86,22 +130,46 @@ func (s *StoreAcctManager) InsertStoreAcctExpendAndUpdateStoreAcctBalance(ctx *j var ( db = dao.GetDB() ) - if err = s.InsertStoreAcctExpend(ctx, db, storeID, price, acctType, vendorOrderID); err == nil { - s.UpdateStoreAcctBalance(ctx, storeID, price, false) - } + utils.CallFuncAsync(func() { + if err = s.InsertStoreAcctExpend(ctx, db, storeID, price, acctType, vendorOrderID); err == nil { + s.UpdateStoreAcctBalance(ctx, storeID, price, false) + } + }) return err } -func (s *StoreAcctManager) InsertStoreAcctIncomeAndUpdateStoreAcctBalance(ctx *jxcontext.Context, storeID, price, acctType int) (err error) { +func (s *StoreAcctManager) InsertStoreAcctIncomeAndUpdateStoreAcctBalance(ctx *jxcontext.Context, storeID, price, acctType int, vendorOrderID string) (err error) { var ( db = dao.GetDB() ) - if err = s.InsertStoreAcctIncome(ctx, db, storeID, price, acctType); err == nil { - s.UpdateStoreAcctBalance(ctx, storeID, price, true) - } + utils.CallFuncAsync(func() { + if err = s.InsertStoreAcctIncome(ctx, db, storeID, price, acctType, vendorOrderID); err == nil { + s.UpdateStoreAcctBalance(ctx, storeID, price, true) + } + }) return err } -func (s *StoreAcctManager) CheckStoreAcctExpendExist(storeID int, vendorOrderID string) (result bool, err error) { - return false, err +func (s *StoreAcctManager) CheckStoreAcctExpendExist(vendorOrderID string) (isEqual, isZero bool, err error) { + var ( + db = dao.GetDB() + expends, incomes int + ) + globals.SugarLogger.Debugf("CheckStoreAcctExpendExist orderID:[%v]", vendorOrderID) + expends, err = dao.GetStoreAcctExpendTotal(db, 0, []int{partner.StoreAcctTypeExpendCreateWaybillEx, partner.StoreAcctTypeRealFeeExpend}, vendorOrderID, utils.ZeroTimeValue, utils.ZeroTimeValue) + incomes, err = dao.GetStoreAcctIncomeTotal(db, 0, []int{partner.StoreAcctTypeRealFeeIncome, partner.StoreAcctTypeIncomeCancelTemp, partner.StoreAcctTypeIncomeCancelReal}, vendorOrderID, utils.ZeroTimeValue, utils.ZeroTimeValue) + if expends != incomes { + if expends > incomes { + return false, false, err + } else { + globals.SugarLogger.Debugf("CheckStoreAcctExpendExist 收入大于支出! orderID:[%v]", vendorOrderID) + } + } else { + if expends == 0 && incomes == 0 { + return true, true, err + } else { + return true, false, err + } + } + return false, false, err } diff --git a/business/model/store.go b/business/model/store.go index e6aa597f6..e4b9d77e9 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -807,10 +807,11 @@ func (*BrandStore) TableUnique() [][]string { type StoreAcctIncome struct { ModelIDCUL - StoreID int `orm:"column(store_id)" json:"storeID"` //门店ID - UserID string `orm:"column(user_id)" json:"userID"` //用户ID (谁消费的) - Type int `json:"type"` //收入类型 - IncomePrice int `json:"incomePrice"` //收入金额 + StoreID int `orm:"column(store_id)" json:"storeID"` //门店ID + VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` + UserID string `orm:"column(user_id)" json:"userID"` //用户ID (谁消费的) + Type int `json:"type"` //收入类型 + IncomePrice int `json:"incomePrice"` //收入金额 } func (v *StoreAcctIncome) TableIndex() [][]string {