| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362 |
- package equipment
- import (
- "dashoo.cn/micro_libary/request"
- "database/sql"
- "errors"
- "fmt"
- "github.com/gogf/gf/frame/g"
- "github.com/gogf/gf/os/gtime"
- "github.com/gogf/gf/util/gconv"
- "lims_adapter/dao/equipment"
- equipment2 "lims_adapter/model/equipment"
- "lims_adapter/model/user"
- "strconv"
- "strings"
- "time"
- )
- // Service 设备
- type Service struct {
- Dao *equipment.BaseEquipmentQualificationDao
- Tenant string
- }
- // NewSrv 服务初始化
- func NewSrv(tenant string) Service {
- return Service{Dao: equipment.NewBaseEquipmentQualificationDao(tenant), Tenant: tenant}
- }
- // AppointmentQualificationList 预约资格分页查询
- func (s Service) AppointmentQualificationList(req *equipment2.QualificationListReq) ([]user.UserQualification, int, error) {
- var current = req.Current
- var size = req.Size
- var enabled = req.Enabled
- var instrumentId = req.InstrumentId
- var reqType = req.Type
- entity := s.Dao.DB.Model("base_user a")
- var userInfo []user.UserQualification
- where := "a.Enabled = " + strconv.Itoa(enabled) + " and b.EquipmentId = " + strconv.Itoa(instrumentId)
- if reqType == 1 { // 预约资格查询条件
- where += " and (b.Qualification = 1 or b.Qualification = 2)"
- } else if reqType == 2 { // 优先预约权查询条件
- where += " and b.Qualification = 3"
- }
- entity.LeftJoin("base_equipment_qualification b", "a.id = b.UserId").
- Where(where)
- count, _ := entity.Count()
- err := entity.Fields("a.Id, a.UserName, a.RealName, a.Mobile, b.Qualification, b.AuthorizeTime").
- Page(current, size).Scan(&userInfo)
- if err != nil {
- return nil, 0, err
- }
- return userInfo, count, nil
- }
- // AdvanceList 优先预约权资格列表查询
- func (s Service) AdvanceList(req *equipment2.QualificationListReq) ([]user.UserQualification, int, error) {
- var current = req.Current
- var size = req.Size
- var enabled = req.Enabled
- var instrumentId = req.InstrumentId
- entity := s.Dao.DB.Model("base_user a")
- var userInfo []user.UserQualification
- entity.LeftJoin("base_equipment_qualification b", "a.id = b.UserId").
- Where("a.Enabled = " + strconv.Itoa(enabled) + " and b.EquipmentId = " + strconv.Itoa(instrumentId))
- count, _ := entity.Count()
- err := entity.Fields("a.Id, a.UserName, a.RealName, a.Mobile, b.AuthorizeTime").
- Page(current, size).Scan(&userInfo)
- if err != nil {
- return nil, 0, err
- }
- return userInfo, count, nil
- }
- // AddOrUpdateQualification 新增、修改预约资格名单;新增优先预约权名单
- func (s Service) AddOrUpdateQualification(req *equipment2.AddOrUpdateQualification, userInfo request.UserInfo) (err error) {
- entity := s.Dao.M
- var instrumentId = req.InstrumentId
- var ids = req.Ids
- var qualification = 1
- if req.QualificationType == "normal" {
- qualification = 1
- } else if req.QualificationType == "senior" {
- qualification = 2
- } else if req.QualificationType == "advance" {
- qualification = 3
- }
- //if qualification == 1 || qualification == 2 { // 预约资格
- for _, v := range ids {
- where := "EquipmentId = " + strconv.Itoa(instrumentId) + " and UserId = " +
- strconv.Itoa(v)
- if qualification == 1 || qualification == 2 { // 预约资格
- where += " and Qualification != 3"
- } else if qualification == 3 { // 优先预约权
- // 先判断是否有预约资格,没有则不更新操作
- count, _ := s.Dao.DB.Model("base_equipment_qualification").Where("EquipmentId = " +
- strconv.Itoa(instrumentId) + " and Qualification != 0" + " and UserId = " +
- strconv.Itoa(v)).Count()
- if count == 0 {
- continue
- }
- where += " and Qualification = 3"
- }
- var qualificationInfo equipment2.BaseEquipmentQualification
- entity.Where(where).Scan(&qualificationInfo)
- entity.Data(g.Map{"Id": qualificationInfo.Id, "EquipmentId": instrumentId, "UserId": v, "Qualification": qualification, "CreateOn": gtime.Now(),
- "AuthorizeTime": gtime.Now(), "CreateUserId": userInfo.Id, "CreateBy": userInfo.RealName}).Save()
- }
- //} else if qualification ==3 { // 优先预约权
- // for _, v := range ids {
- // var qualificationInfo model.BaseEquipmentQualification
- // entity.Where("EquipmentId = " + strconv.Itoa(instrumentId) + " and UserId = " +
- // strconv.Itoa(v) ).Scan(&qualificationInfo)
- // entity.Data(g.Map{"Id": qualificationInfo.Id,"EquipmentId": instrumentId, "UserId": v, "CreateOn": gtime.Now(),
- // "AuthorizeTime": gtime.Now(), "CreateUserId": userInfo.Id, "CreateBy": userInfo.RealName}).Save()
- // }
- //}
- return err
- }
- // DeleteQualification 删除预约资格
- func (s Service) DeleteQualification(req *equipment2.IdReq, info request.UserInfo) error {
- _, err := s.Dao.M.Update(g.Map{"Qualification": 0, "ModifiedOn": gtime.Now(),
- "ModifiedUserId": info.Id, "ModifiedBy": info.RealName}, "UserId = "+strconv.Itoa(req.UserId)+
- " and EquipmentId = "+strconv.Itoa(req.EquipmentId)+" and Qualification != 3")
- if err != nil {
- return err
- }
- return nil
- }
- // DeleteAdvance 删除优先预约权人员
- func (s Service) DeleteAdvance(req *equipment2.IdReq) error {
- _, err := s.Dao.M.Delete("UserId = " + strconv.Itoa(req.UserId) +
- " and EquipmentId = " + strconv.Itoa(req.EquipmentId) + " and Qualification = 3")
- if err != nil {
- return err
- }
- return nil
- }
- // SearchAdvanceTime 查看设备优先预约时间段
- func (s Service) SearchAdvanceTime(req *equipment2.QualificationListReq) (advanceTime []equipment2.BaseEquipmentAdvanceTime, count int, err error) {
- entity := s.Dao.DB.Model("base_equipment_advance_time")
- err = entity.Where("EquipmentId = " + strconv.Itoa(req.InstrumentId)).Scan(&advanceTime)
- count, _ = entity.CountColumn("1")
- err = entity.Fields("Week, StartTime,EndTime").Order("Week").Page(req.Current, req.Size).Scan(&advanceTime)
- if err != nil {
- return advanceTime, count, err
- }
- return advanceTime, count, nil
- }
- // AddAdvanceTime 添加设备优先预约时间段
- func (s Service) AddAdvanceTime(req *equipment2.AdvanceTimeReq, info request.UserInfo) error {
- //for _, v := range domains {
- // count, err := s.Dao.DB.Model("base_equipment_advance_time").Where("Week = '" + v.Week +
- // "' and StartTime = '" + v.StartTime + "' and EndTime = '" + v.EndTime + "'").Count()
- // if err != nil{
- // return err
- // }
- // if count == 0 {
- // week, _ := strconv.Atoi(v.Week)
- // saveEntity := model.BaseEquipmentAdvanceTime{
- // EquipmentId: equipmentId,
- // Week: week,
- // StartTime: v.StartTime,
- // EndTime: v.EndTime,
- // CreateOn: gtime.Now(),
- // CreateUserId: gconv.Int(info.Id),
- // CreateBy: info.RealName,
- // }
- // s.Dao.DB.Model("base_equipment_advance_time").Insert(saveEntity)
- // }
- //}
- count, err := s.Dao.DB.Model("base_equipment_advance_time").Where("EquipmentId = " +
- strconv.Itoa(req.EquipmentId) + " and Week = " + req.Week +
- " and StartTime = '" + req.StartTime + "' and EndTime = '" + req.EndTime + "'").Count()
- if err != nil {
- return err
- }
- if count > 0 {
- return errors.New("该时间段已存在,请重新输入!")
- }
- week, _ := strconv.Atoi(req.Week)
- saveEntity := equipment2.BaseEquipmentAdvanceTime{
- EquipmentId: req.EquipmentId,
- Week: week,
- StartTime: req.StartTime,
- EndTime: req.EndTime,
- CreateOn: gtime.Now(),
- CreateUserId: gconv.Int(info.Id),
- CreateBy: info.RealName,
- }
- _, err = s.Dao.DB.Model("base_equipment_advance_time").Insert(saveEntity)
- if err != nil {
- return err
- }
- return nil
- }
- // DeleteAdvanceTime 删除设备预约时间段
- func (s Service) DeleteAdvanceTime(id int) error {
- _, err := s.Dao.DB.Model("base_equipment_advance_time").Delete("Id = " + strconv.Itoa(id))
- if err != nil {
- return err
- }
- return nil
- }
- // AppointmentTime 设备预约时间段
- func (s Service) AppointmentTime(req *equipment2.IdReq) error {
- // 先查该人员的预约资格、优先使用权
- var qualificationInfo []equipment2.BaseEquipmentQualification
- s.Dao.DB.Model("base_equipment_qualification").Where("EquipmentId = " +
- strconv.Itoa(req.EquipmentId)).Order("Qualification").Scan(&qualificationInfo)
- // 如果是普通预约资格,筛选出周末时间段
- if qualificationInfo[0].Qualification == "1" {
- // TODO 时间获取
- }
- // 如果有预约资格但没有优先使用权,查询优先使用权时间段
- if len(qualificationInfo) == 2 && qualificationInfo[1].Qualification == "3" {
- var appointmentInfo []equipment2.BaseEquipmentAdvanceTime
- s.Dao.DB.Model("base_equipment_advance_time").Where("EquipmentId = " +
- strconv.Itoa(req.EquipmentId) + " and UserId").Scan(&appointmentInfo)
- }
- return nil
- }
- // SearchNoAppointment 查看不能预约时间段信息
- func (s Service) SearchNoAppointment(req *equipment2.IdReq, info request.UserInfo) ([]equipment2.NoReservationInfo, error) {
- // 普通资格限制周末时间
- var qualificationInfo []equipment2.BaseEquipmentQualification
- var noAppointmentInfos []equipment2.NoReservationInfo
- // 查询设备可预约时间段 和是否开启了默认可预约
- var equipmentInfo equipment2.Instrument
- s.Dao.DB.Model("instrument").Fields("IsAppointAvailable,BeginAt, EndAt").
- Where("Id = " + strconv.Itoa(req.EquipmentId)).Scan(&equipmentInfo)
- s.Dao.DB.Model("base_equipment_qualification").Where("EquipmentId = " +
- strconv.Itoa(req.EquipmentId) + " and UserId = " +
- strconv.Itoa(gconv.Int(info.Id))).Order("Qualification").Scan(&qualificationInfo)
- if len(qualificationInfo) >= 1 && qualificationInfo[0].Qualification == "1" && equipmentInfo.IsAppointAvailable!=1 { // 只有普通预约资格,限制周末预约时间段// 如果没有开启默认可预约 则进行时间段限制
- startTime := equipmentInfo.BeginAt
- endTime := equipmentInfo.EndAt
- // 设备当天预约时间总长度h
- timeLong := endTime.Sub(startTime).Hours()
- saturdayTime := noReservationInfo(startTime, timeLong, req.Date, 6)
- sundayTime := noReservationInfo(startTime, timeLong, req.Date, 7)
- noAppointmentInfos = append(saturdayTime, sundayTime...)
- }
- if len(qualificationInfo) == 1 && qualificationInfo[0].Qualification != "3" { // 没有优先预约权,限制优先预约时间段
- var advanceTimeList []equipment2.BaseEquipmentAdvanceTime
- s.Dao.DB.Model("base_equipment_advance_time").
- Where("EquipmentId = " + strconv.Itoa(req.EquipmentId)).Scan(&advanceTimeList)
- for _, v := range advanceTimeList {
- // TODO 遍历获取不能预约时间段
- startTime, _ := gtime.StrToTime(strings.Trim(v.StartTime, " "), "H:i")
- endTime, _ := gtime.StrToTime(strings.Trim(v.EndTime, " "), "H:i")
- timeLong := endTime.Sub(startTime).Hours()
- saturdayTime := noReservationInfo(startTime, timeLong, req.Date, v.Week)
- noAppointmentInfos = append(noAppointmentInfos, saturdayTime...)
- }
- }
- return noAppointmentInfos, nil
- }
- // ChangeInstrStauts 修改设备所属
- func (s Service) ChangeBelongs(req *equipment2.IdReq) error {
- _, err := s.Dao.DB.Model("Instrument").
- Update("Belongs = "+req.Belongs, "Id = "+strconv.Itoa(req.EquipmentId))
- if err != nil {
- return err
- }
- return nil
- }
- // GetUnitCount 查询设备计费
- func (s Service) GetUnitCount(instrumentId int) (rspInfo []equipment2.Instrument, err error) {
- err = s.Dao.DB.Model("Instrument").Where("Id = ?", instrumentId).Scan(&rspInfo)
- if err != nil {
- return rspInfo, err
- }
- return rspInfo, nil
- }
- // UpdateUnifPrice 更新计费价格
- func (s Service) UpdateUnitPrice(instrumentId int, unitCount float64) error {
- _, err := s.Dao.DB.Model("Instrument").Update(fmt.Sprintf("unitCount=%v", unitCount), "Id = "+
- strconv.Itoa(instrumentId))
- if err != nil {
- return err
- }
- return nil
- }
- // RateChange 优惠比例更新
- func (s Service) RateChange(InstrumentId, rate int) error {
- _, err := s.Dao.DB.Model("Instrument").Update("Rate = "+strconv.Itoa(rate), "Id = "+
- strconv.Itoa(InstrumentId))
- if err != nil {
- return err
- }
- return nil
- }
- // IsAdvance 是否有优先预约资格
- func (s Service) IsAdvance(id int32, instrumentId int) (isAdvance int, err error) {
- equipmentQualification := equipment2.BaseEquipmentQualification{}
- err = s.Dao.DB.Model("base_equipment_qualification").Where("UserId", id).
- Where("Qualification", "3").Where("EquipmentId", instrumentId).Scan(&equipmentQualification)
- if err == sql.ErrNoRows {
- return 0, nil
- }
- return 1, nil
- }
- // noReservationInfo 不可预约时间段处理 startTime开始时间 timeLong 时间间隔 Date 前端传入日期 week 星期几
- func noReservationInfo(startTime *gtime.Time, timeLong float64, Date string, week int) (noAppointmentInfo []equipment2.NoReservationInfo) {
- date, _ := gtime.StrToTime(Date, "Y-m-d")
- // 获取当前星期对应的日期
- day := GetDate(date, week)
- grids := int(timeLong * 2)
- for i := 0; i < grids; i++ {
- // 开始时间
- start_time := startTime.Add(time.Duration(i) * 30 * time.Minute)
- //fmt.Println("day:", day, "week:", week, "start_time", fmt.Sprintf("%02d", start_time.Hour()) + ":"+fmt.Sprintf("%02d", start_time.Minute()), "status:", status)
- noAppointmentInfo = append(noAppointmentInfo, equipment2.NoReservationInfo{
- Day: day,
- Week: week,
- StartTime: fmt.Sprintf("%02d", start_time.Hour()) + ":" + fmt.Sprintf("%02d", start_time.Minute()),
- Status: 3,
- })
- }
- return noAppointmentInfo
- }
- // 获取当前星期对应的日期
- func GetDate(Date *gtime.Time, week int) int {
- weekday := Date.Weekday().String()
- var targetDay *gtime.Time
- switch weekday {
- case "Monday":
- targetDay = Date.AddDate(0, 0, week-1)
- case "Tuesday":
- targetDay = Date.AddDate(0, 0, week-2)
- case "Wednesday":
- targetDay = Date.AddDate(0, 0, week-3)
- case "Thursday":
- targetDay = Date.AddDate(0, 0, week-4)
- case "Friday":
- targetDay = Date.AddDate(0, 0, week-5)
- case "Saturday":
- targetDay = Date.AddDate(0, 0, week-6)
- case "Sunday":
- targetDay = Date.AddDate(0, 0, week-7)
- }
- _, _, day := targetDay.Date()
- return day
- }
|