|
@@ -2,10 +2,12 @@ package account
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
"dashoo.cn/micro_libary/request"
|
|
"dashoo.cn/micro_libary/request"
|
|
|
|
|
+ "database/sql"
|
|
|
"fmt"
|
|
"fmt"
|
|
|
"github.com/gogf/gf/os/gtime"
|
|
"github.com/gogf/gf/os/gtime"
|
|
|
dao "lims_adapter/dao/account"
|
|
dao "lims_adapter/dao/account"
|
|
|
account "lims_adapter/model/account"
|
|
account "lims_adapter/model/account"
|
|
|
|
|
+ "math"
|
|
|
"strconv"
|
|
"strconv"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
@@ -67,3 +69,88 @@ func (s AccountService) DepositAccount(req *account.BaseAccountResp) error {
|
|
|
_, err := s.Dao.M.Update(fmt.Sprintf("Surplus='%v',Available='%v'", req.Surplus, req.Available), "Id = "+strconv.Itoa(req.Id))
|
|
_, err := s.Dao.M.Update(fmt.Sprintf("Surplus='%v',Available='%v'", req.Surplus, req.Available), "Id = "+strconv.Itoa(req.Id))
|
|
|
return err
|
|
return err
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+// 计算费用
|
|
|
|
|
+func (s AccountService) Calculate(req *account.CalculateAmountReq) error {
|
|
|
|
|
+ var main account.SettleAccountMain
|
|
|
|
|
+ var detail account.SettleAccountDetail
|
|
|
|
|
+ var baseAccount account.BaseAccount
|
|
|
|
|
+
|
|
|
|
|
+ // 获取结算明细记录
|
|
|
|
|
+ result, err := s.Dao.DB.Model("settle_account_main").Where(fmt.Sprintf("AppointId='%v'", req.AppointId)).FindOne()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ if err != sql.ErrNoRows {
|
|
|
|
|
+ return err
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 预约没有对应的结算明细记录,返回
|
|
|
|
|
+ return nil
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ err = result.Struct(&main)
|
|
|
|
|
+ if err != nil && err != sql.ErrNoRows {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+ if main.Id == 0 { // 预约没有对应的结算明细记录,返回
|
|
|
|
|
+ return nil
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 获取费用明细记录
|
|
|
|
|
+ result, err = s.Dao.DB.Model("settle_account_detail").Where(fmt.Sprintf("pid='%v' AND PaymentType='0'", main.Id)).FindOne()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+ err = result.Struct(&detail)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 获取账号信息
|
|
|
|
|
+ result, err = s.Dao.DB.Model("base_account").Where(fmt.Sprintf("MainUserId='%v'", main.MainUserId)).Order("Advance ASC").FindOne()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+ err = result.Struct(&baseAccount)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 计算费用
|
|
|
|
|
+ oldAmount := detail.PaymentAccount
|
|
|
|
|
+ main.ActualStartDate = req.SignInTime
|
|
|
|
|
+ main.ActualEndDate = req.SignOutTime
|
|
|
|
|
+
|
|
|
|
|
+ span := req.SignOutTime.Sub(req.SignInTime)
|
|
|
|
|
+ main.FeeTime = int(math.Ceil(span.Minutes()))
|
|
|
|
|
+ main.ActualMachineHour = main.FeeTime
|
|
|
|
|
+ detail.ActualMinutes = strconv.Itoa(main.FeeTime)
|
|
|
|
|
+ detail.Minutes = strconv.Itoa(main.FeeTime)
|
|
|
|
|
+
|
|
|
|
|
+ detail.PaymentAccount = float64(main.ActualMachineHour) * detail.UnitPrice / 60 // 计算实际费用
|
|
|
|
|
+ diffValue := oldAmount - detail.PaymentAccount
|
|
|
|
|
+ main.TotalPrice -= diffValue // 计算实际费用
|
|
|
|
|
+
|
|
|
|
|
+ baseAccount.Available -= diffValue // 账户可用金额计算
|
|
|
|
|
+
|
|
|
|
|
+ tx, err := s.Dao.DB.Begin()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ _, err = tx.Save("settle_account_main", main)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ tx.Rollback()
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+ _, err = tx.Save("settle_account_detail", detail)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ tx.Rollback()
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+ _, err = tx.Save("base_account", baseAccount)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ tx.Rollback()
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return tx.Commit()
|
|
|
|
|
+}
|