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" ) type StoreAcctManager struct { } var ( FixedStoreAcctManager *StoreAcctManager ) func init() { FixedStoreAcctManager = &StoreAcctManager{} partner.InitStoreAcctManager(FixedStoreAcctManager) } func (s *StoreAcctManager) InsertStoreAcctIncome(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 } } storeAcctIncome := &model.StoreAcctIncome{ StoreID: storeID, IncomePrice: price, Type: acctType, UserID: userID, } dao.WrapAddIDCULEntity(storeAcctIncome, userName) err = dao.CreateEntity(db, storeAcctIncome) 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: userID, VendorOrderID: vendorOrderID, } dao.WrapAddIDCULEntity(storeAcctExpend, userName) err = dao.CreateEntity(db, storeAcctExpend) return err } func (s *StoreAcctManager) UpdateStoreAcctBalance(ctx *jxcontext.Context, storeID, price int, isIncome bool) (err error) { var ( db = dao.GetDB() ) 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 { 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 { if _, err = dao.UpdateEntity(db, storeAcct, "AccountBalance"); err != nil { dao.Rollback(db) return err } } dao.Commit(db) return err } func (s *StoreAcctManager) InsertStoreAcctExpendAndUpdateStoreAcctBalance(ctx *jxcontext.Context, storeID, price, acctType int, vendorOrderID string) (err error) { var ( db = dao.GetDB() ) 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, vendorOrderID string) (err error) { var ( db = dao.GetDB() ) 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, acctType int, vendorOrderID string) (result bool, err error) { var ( db = dao.GetDB() ) //暂时这样,后应该会再查有没有对冲的入账记录来判断 if results, err := dao.GetStoreAcctExpend(db, storeID, acctType, vendorOrderID, utils.ZeroTimeValue, utils.ZeroTimeValue); err == nil && len(results) > 0 { return true, err } return false, err }