作者 陈志颖

fix:增加更新兑换活动汇率时同步更新兑换清单操作

... ... @@ -8,6 +8,7 @@ import (
type UpdateExchangeCashPersonCommand struct {
ListId int64 `json:"listId" valid:"Required"` // 兑换现金人员编号
ExchangedSuMoney float64 `json:"exchangedSuMoney"` // 已兑换的素币(需要和当前的已兑换素币进行比较,少于当前已兑换素币则生成一条扣除素币记录,大于当前已兑换素币则生成一条增加素币记录)
ExchangedCash float64 `json:"exchangedCash"` // 已兑换现金
Operator int64 `json:"operator,omitempty"` // 操作人
}
... ...
... ... @@ -2,13 +2,14 @@ package service
import (
"fmt"
"github.com/linmadan/egglib-go/utils/tool_funs"
"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain/service"
"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/infrastructure/dao"
"math"
"strconv"
"time"
"github.com/linmadan/egglib-go/utils/tool_funs"
"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain/service"
"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/infrastructure/dao"
"github.com/linmadan/egglib-go/core/application"
"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/application/factory"
"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/application/suMoney/command"
... ... @@ -480,8 +481,34 @@ func (cashPoolService *CashPoolService) UpdateExchangeCashActivity(updateExchang
if activitySuMoney * updateExchangeCashActivityCommand.ExchangeRate > cashPools[0].UnExchangeCash {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "已超过投入现金池的未兑换现金")
}
// TODO 批量更新兑换清单中已兑换现金值
// 批量更新兑换清单中已兑换现金值
// 获取兑换清单列表
var exchangeCashPersonListRepository domain.ExchangeCashPersonListRepository
if value, err := factory.CreateExchangeCashPersonListRepository(map[string]interface{}{
"transactionContext": transactionContext,
}); err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
} else {
exchangeCashPersonListRepository = value
}
_, people, err := exchangeCashPersonListRepository.Find(map[string]interface{}{
"exchangeCashActivityId": updateExchangeCashActivityCommand.ExchangeCashActivityId,
});
if err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
}
// 更新兑换清单,更新已兑换现金值
for _, person := range people {
updateExchangeCashPerson := &command.UpdateExchangeCashPersonCommand {
ExchangedCash: updateExchangeCashActivityCommand.ExchangeRate * person.ExchangedSuMoney,
}
if err := person.Update(tool_funs.SimpleStructToMap(updateExchangeCashPerson)); err != nil {
return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
}
if _, err := exchangeCashPersonListRepository.Save(person);err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
}
}
// 计算系统平均兑换汇率并更新现金池
var employeeDao *dao.EmployeeDao
if value, err := factory.CreateEmployeeDao(map[string]interface{}{
... ... @@ -491,6 +518,7 @@ func (cashPoolService *CashPoolService) UpdateExchangeCashActivity(updateExchang
} else {
employeeDao = value
}
// 获取平台素币状况
systemSuMoneyStatistics, err := employeeDao.CalculateSystemSuMoney(activity.CompanyId)
if err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
... ... @@ -499,6 +527,7 @@ func (cashPoolService *CashPoolService) UpdateExchangeCashActivity(updateExchang
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "无效的公司")
}
systemExchangedSuMoney := systemSuMoneyStatistics["systemExchangedSuMoney"].(float64)
// 获取平台现金状况
systemCashStatistics, err := employeeDao.CalculateSystemCash(activity.CompanyId)
if err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
... ... @@ -1190,6 +1219,7 @@ func (cashPoolService *CashPoolService) UpdateExchangeCashPerson(updateExchangeC
if cashPoolUpdated == nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
}
if personUpdated, err := exchangeCashPersonListRepository.Save(person);err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
} else {
... ...
... ... @@ -152,18 +152,27 @@ func (dao *EmployeeDao) CalculateSystemCash(companyId int64) (map[string] interf
systemExchangedCash float64
)
// 系统已兑换现金
suMoneyTransactionRecordModel := new(models.SuMoneyTransactionRecord)
if err := tx.Model(suMoneyTransactionRecordModel).Join("JOIN employees AS e ON e.uid = (su_money_transaction_record.employee->>'uid')::bigint").
ColumnExpr("sum(su_money_transaction_record.cash) AS system_exchanged_cash").
Where("e.company_id = ?", companyId).
//Where(`e.status = ?`, 1).
Where(`su_money_transaction_record.record_type = ?`, 5).
Select(&systemExchangedCash) ; err != nil {
return nil, err
}
//suMoneyTransactionRecordModel := new(models.SuMoneyTransactionRecord)
//if err := tx.Model(suMoneyTransactionRecordModel).Join("JOIN employees AS e ON e.uid = (su_money_transaction_record.employee->>'uid')::bigint").
// ColumnExpr("sum(su_money_transaction_record.cash) AS system_exchanged_cash").
// Where("e.company_id = ?", companyId).
// //Where(`e.status = ?`, 1).
// Where(`su_money_transaction_record.record_type = ?`, 5).
// Select(&systemExchangedCash) ; err != nil {
// return nil, err
//}
// 系统未兑换现金
cashPool := new(models.CashPool)
if err := tx.Model(cashPool).
Column("exchanged_cash").
Where("cash_pool.company_id = ?", companyId).
Order("id DESC").
Limit(1).
Select(&systemUnExchangeCash) ; err != nil {
return nil, err
}
if err := tx.Model(cashPool).
Column("un_exchange_cash").
Where("cash_pool.company_id = ?", companyId).
Order("id DESC").
... ...
... ... @@ -15,6 +15,7 @@ type OperationSuMoneyService struct {
transactionContext *pgTransaction.TransactionContext
}
// TODO 增加兑换现金事务记录
func (service *OperationSuMoneyService) Operation(uid int64, operatorUid int64, suMoney float64, operationType int, recordDescription string) (*domain.SuMoneyTransactionRecord, error) {
var employeeRepository domain.EmployeeRepository
var suMoneyTransactionRecordRepository domain.SuMoneyTransactionRecordRepository
... ...