179 lines
5.8 KiB
Go
179 lines
5.8 KiB
Go
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 {
|
|
}
|
|
|
|
var (
|
|
FixedStoreAcctManager *StoreAcctManager
|
|
)
|
|
|
|
func init() {
|
|
FixedStoreAcctManager = &StoreAcctManager{}
|
|
partner.InitStoreAcctManager(FixedStoreAcctManager)
|
|
}
|
|
|
|
func (s *StoreAcctManager) InsertStoreAcctIncome(ctx *jxcontext.Context, storeID, price, acctType int, vendorOrderID string) (err error) {
|
|
var (
|
|
userID, userName string
|
|
goodsVendorOrderID string
|
|
db = dao.GetDB()
|
|
)
|
|
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
|
|
}
|
|
}
|
|
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, storeID, price, acctType int, vendorOrderID string, expendID int) (err error) {
|
|
var (
|
|
userID, userName string
|
|
db = dao.GetDB()
|
|
)
|
|
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: userID,
|
|
VendorOrderID: vendorOrderID,
|
|
}
|
|
dao.WrapAddIDCULEntity(storeAcctExpend, userName)
|
|
if expendID != 0 {
|
|
|
|
}
|
|
err = dao.CreateEntity(db, storeAcctExpend)
|
|
globals.SugarLogger.Debugf("InsertStoreAcctExpend orderID: [%v] , price :[%v] , type :[%v]", vendorOrderID, price, acctType)
|
|
return err
|
|
}
|
|
|
|
func (s *StoreAcctManager) UpdateStoreAcctBalance(ctx *jxcontext.Context, storeID, price int, isIncome bool) (err error) {
|
|
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,
|
|
}
|
|
dao.Begin(db)
|
|
defer func() {
|
|
if r := recover(); r != nil || err != nil {
|
|
dao.Rollback(db)
|
|
if r != nil {
|
|
panic(r)
|
|
}
|
|
}
|
|
}()
|
|
if err = dao.GetEntity(db, storeAcct, "StoreID"); err != nil && dao.IsNoRowsError(err) {
|
|
//新增门店账单
|
|
dao.WrapAddIDCULEntity(storeAcct, ctx.GetUserName())
|
|
if err = dao.CreateEntity(db, storeAcct); err != nil {
|
|
dao.Rollback(db)
|
|
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
|
|
}
|
|
|
|
func (s *StoreAcctManager) InsertStoreAcctExpendAndUpdateStoreAcctBalance(ctx *jxcontext.Context, storeID, price, acctType int, vendorOrderID string, expendID int) (err error) {
|
|
utils.CallFuncAsync(func() {
|
|
if err = s.InsertStoreAcctExpend(ctx, storeID, price, acctType, vendorOrderID, expendID); err == nil {
|
|
s.UpdateStoreAcctBalance(ctx, storeID, price, false)
|
|
}
|
|
})
|
|
return err
|
|
}
|
|
|
|
func (s *StoreAcctManager) InsertStoreAcctIncomeAndUpdateStoreAcctBalance(ctx *jxcontext.Context, storeID, price, acctType int, vendorOrderID string) (err error) {
|
|
utils.CallFuncAsync(func() {
|
|
if err = s.InsertStoreAcctIncome(ctx, storeID, price, acctType, vendorOrderID); err == nil {
|
|
s.UpdateStoreAcctBalance(ctx, storeID, price, true)
|
|
}
|
|
})
|
|
return err
|
|
}
|
|
|
|
func (s *StoreAcctManager) CheckStoreAcctExpendExist(vendorOrderID string) (isEqual, isZero bool, err error) {
|
|
var (
|
|
expends, incomes int
|
|
db = dao.GetDB()
|
|
)
|
|
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
|
|
}
|
|
|
|
func (s *StoreAcctManager) GetStoreAcctExpendLastCreateWayBillFee(vendorOrderID string) (expend *dao.GetStoreAcctExpendLastCreateWayBillFeeResult, lastFee int, err error) {
|
|
return dao.GetStoreAcctExpendLastCreateWayBillFee(dao.GetDB(), vendorOrderID)
|
|
}
|