| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package service
- import (
- "errors"
- "fmt"
- "time"
- "wails-app/internal/dao"
- "wails-app/internal/global"
- "wails-app/internal/modules/shift/repository"
- )
- type ShiftService struct {
- repo *repository.ShiftRepository
- }
- func NewShiftService() *ShiftService {
- return &ShiftService{repo: &repository.ShiftRepository{}}
- }
- func (s *ShiftService) Start(operatorID uint, startingCash float64) (*dao.ShiftRecord, error) {
- active, _ := s.repo.GetActive(operatorID)
- if active != nil {
- return nil, errors.New("已有当班记录,请先交班")
- }
- rec := &dao.ShiftRecord{
- OperatorID: operatorID, StartTime: time.Now(),
- StartingCash: startingCash, Status: "active",
- }
- if err := s.repo.Create(rec); err != nil {
- return nil, err
- }
- return rec, nil
- }
- func (s *ShiftService) End(operatorID uint, actualCash float64, remark string) (*dao.ShiftRecord, error) {
- active, err := s.repo.GetActive(operatorID)
- if err != nil {
- return nil, errors.New("无当班记录")
- }
- var collected float64
- global.GVA_DB.Raw("SELECT COALESCE(SUM(amount),0) FROM payment_record WHERE payment_method='cash' AND paid_at >= ? AND paid_at < ?",
- active.StartTime, time.Now()).Scan(&collected)
- now := time.Now()
- expected := active.StartingCash + collected
- diff := actualCash - expected
- active.EndTime = &now
- active.CollectedCash = collected
- active.ExpectedTotal = expected
- active.ActualTotal = actualCash
- active.Difference = diff
- active.Status = "closed"
- active.Remark = remark
- if err := s.repo.Update(active); err != nil {
- return nil, err
- }
- fmt.Printf("交班: 接班%.2f+当班%.2f=应交%.2f 实交%.2f 差异%.2f\n",
- active.StartingCash, collected, expected, actualCash, diff)
- return active, nil
- }
- func (s *ShiftService) GetCurrent(operatorID uint) (*dao.ShiftRecord, error) {
- return s.repo.GetActive(operatorID)
- }
- func (s *ShiftService) List(q repository.ShiftListQuery, operatorID uint) ([]dao.ShiftRecord, int64, error) {
- return s.repo.List(q, operatorID)
- }
|