equipment.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565
  1. package equipment
  2. import (
  3. "database/sql"
  4. "errors"
  5. "fmt"
  6. "lims_adapter/common"
  7. "lims_adapter/dao/equipment"
  8. equipment2 "lims_adapter/model/equipment"
  9. "lims_adapter/model/user"
  10. "strconv"
  11. "strings"
  12. "time"
  13. "dashoo.cn/micro_libary/myerrors"
  14. "dashoo.cn/micro_libary/request"
  15. "github.com/gogf/gf/frame/g"
  16. "github.com/gogf/gf/os/gtime"
  17. "github.com/gogf/gf/util/gconv"
  18. )
  19. // Service 设备
  20. type Service struct {
  21. Dao *equipment.BaseEquipmentQualificationDao
  22. Tenant string
  23. }
  24. // NewSrv 服务初始化
  25. func NewSrv(tenant string) Service {
  26. return Service{Dao: equipment.NewBaseEquipmentQualificationDao(tenant), Tenant: tenant}
  27. }
  28. // AppointmentQualificationList 预约资格分页查询
  29. func (s Service) AppointmentQualificationList(req *equipment2.QualificationListReq) ([]user.UserQualification, int, error) {
  30. var current = req.Current
  31. var size = req.Size
  32. var enabled = req.Enabled
  33. var instrumentId = req.InstrumentId
  34. var reqType = req.Type
  35. entity := s.Dao.DB.Model("base_user a")
  36. var userInfo []user.UserQualification
  37. where := "a.Enabled = " + strconv.Itoa(enabled) + " and b.EquipmentId = " + strconv.Itoa(instrumentId)
  38. if reqType == 1 { // 预约资格查询条件
  39. where += " and (b.Qualification = 1 or b.Qualification = 2)"
  40. } else if reqType == 2 { // 优先预约权查询条件
  41. where += " and b.Qualification = 3"
  42. }
  43. entity.LeftJoin("base_equipment_qualification b", "a.id = b.UserId").
  44. Where(where)
  45. count, _ := entity.Count()
  46. err := entity.Fields("a.Id, a.UserName, a.RealName, a.Mobile, b.Qualification, b.AuthorizeTime").
  47. Page(current, size).Scan(&userInfo)
  48. if err != nil {
  49. return nil, 0, err
  50. }
  51. return userInfo, count, nil
  52. }
  53. // AdvanceList 优先预约权资格列表查询
  54. func (s Service) AdvanceList(req *equipment2.QualificationListReq) ([]user.UserQualification, int, error) {
  55. var current = req.Current
  56. var size = req.Size
  57. var enabled = req.Enabled
  58. var instrumentId = req.InstrumentId
  59. entity := s.Dao.DB.Model("base_user a")
  60. var userInfo []user.UserQualification
  61. entity.LeftJoin("base_equipment_qualification b", "a.id = b.UserId").
  62. Where("a.Enabled = " + strconv.Itoa(enabled) + " and b.EquipmentId = " + strconv.Itoa(instrumentId))
  63. count, _ := entity.Count()
  64. err := entity.Fields("a.Id, a.UserName, a.RealName, a.Mobile, b.AuthorizeTime").
  65. Page(current, size).Scan(&userInfo)
  66. if err != nil {
  67. return nil, 0, err
  68. }
  69. return userInfo, count, nil
  70. }
  71. // AddOrUpdateQualification 新增、修改预约资格名单;新增优先预约权名单
  72. func (s Service) AddOrUpdateQualification(req *equipment2.AddOrUpdateQualification, userInfo request.UserInfo) (err error) {
  73. entity := s.Dao.M
  74. var instrumentId = req.InstrumentId
  75. var ids = req.Ids
  76. var qualification = 1
  77. if req.QualificationType == "normal" {
  78. qualification = 1
  79. } else if req.QualificationType == "senior" {
  80. qualification = 2
  81. } else if req.QualificationType == "advance" {
  82. qualification = 3
  83. }
  84. //if qualification == 1 || qualification == 2 { // 预约资格
  85. for _, v := range ids {
  86. where := "EquipmentId = " + strconv.Itoa(instrumentId) + " and UserId = " +
  87. strconv.Itoa(v)
  88. if qualification == 1 || qualification == 2 { // 预约资格
  89. where += " and Qualification != 3"
  90. } else if qualification == 3 { // 优先预约权
  91. // 先判断是否有预约资格,没有则不更新操作
  92. count, _ := s.Dao.DB.Model("base_equipment_qualification").Where("EquipmentId = " +
  93. strconv.Itoa(instrumentId) + " and Qualification != 0" + " and UserId = " +
  94. strconv.Itoa(v)).Count()
  95. if count == 0 {
  96. continue
  97. }
  98. where += " and Qualification = 3"
  99. }
  100. var qualificationInfo equipment2.BaseEquipmentQualification
  101. entity.Where(where).Scan(&qualificationInfo)
  102. entity.Data(g.Map{"Id": qualificationInfo.Id, "EquipmentId": instrumentId, "UserId": v, "Qualification": qualification, "CreateOn": gtime.Now(),
  103. "AuthorizeTime": gtime.Now(), "CreateUserId": userInfo.Id, "CreateBy": userInfo.RealName}).Save()
  104. }
  105. //} else if qualification ==3 { // 优先预约权
  106. // for _, v := range ids {
  107. // var qualificationInfo model.BaseEquipmentQualification
  108. // entity.Where("EquipmentId = " + strconv.Itoa(instrumentId) + " and UserId = " +
  109. // strconv.Itoa(v) ).Scan(&qualificationInfo)
  110. // entity.Data(g.Map{"Id": qualificationInfo.Id,"EquipmentId": instrumentId, "UserId": v, "CreateOn": gtime.Now(),
  111. // "AuthorizeTime": gtime.Now(), "CreateUserId": userInfo.Id, "CreateBy": userInfo.RealName}).Save()
  112. // }
  113. //}
  114. return err
  115. }
  116. // DeleteQualification 删除预约资格
  117. func (s Service) DeleteQualification(req *equipment2.IdReq, info request.UserInfo) error {
  118. _, err := s.Dao.M.Update(g.Map{"Qualification": 0, "ModifiedOn": gtime.Now(),
  119. "ModifiedUserId": info.Id, "ModifiedBy": info.RealName}, "UserId = "+strconv.Itoa(req.UserId)+
  120. " and EquipmentId = "+strconv.Itoa(req.EquipmentId)+" and Qualification != 3")
  121. if err != nil {
  122. return err
  123. }
  124. return nil
  125. }
  126. // DeleteAdvance 删除优先预约权人员
  127. func (s Service) DeleteAdvance(req *equipment2.IdReq) error {
  128. _, err := s.Dao.M.Delete("UserId = " + strconv.Itoa(req.UserId) +
  129. " and EquipmentId = " + strconv.Itoa(req.EquipmentId) + " and Qualification = 3")
  130. if err != nil {
  131. return err
  132. }
  133. return nil
  134. }
  135. // SearchAdvanceTime 查看设备优先预约时间段
  136. func (s Service) SearchAdvanceTime(req *equipment2.QualificationListReq) (advanceTime []equipment2.BaseEquipmentAdvanceTime, count int, err error) {
  137. entity := s.Dao.DB.Model("base_equipment_advance_time")
  138. err = entity.Where("EquipmentId = " + strconv.Itoa(req.InstrumentId)).Scan(&advanceTime)
  139. count, _ = entity.CountColumn("1")
  140. err = entity.Fields("Week, StartTime,EndTime").Order("Week").Page(req.Current, req.Size).Scan(&advanceTime)
  141. if err != nil {
  142. return advanceTime, count, err
  143. }
  144. return advanceTime, count, nil
  145. }
  146. // AddAdvanceTime 添加设备优先预约时间段
  147. func (s Service) AddAdvanceTime(req *equipment2.AdvanceTimeReq, info request.UserInfo) error {
  148. //for _, v := range domains {
  149. // count, err := s.Dao.DB.Model("base_equipment_advance_time").Where("Week = '" + v.Week +
  150. // "' and StartTime = '" + v.StartTime + "' and EndTime = '" + v.EndTime + "'").Count()
  151. // if err != nil{
  152. // return err
  153. // }
  154. // if count == 0 {
  155. // week, _ := strconv.Atoi(v.Week)
  156. // saveEntity := model.BaseEquipmentAdvanceTime{
  157. // EquipmentId: equipmentId,
  158. // Week: week,
  159. // StartTime: v.StartTime,
  160. // EndTime: v.EndTime,
  161. // CreateOn: gtime.Now(),
  162. // CreateUserId: gconv.Int(info.Id),
  163. // CreateBy: info.RealName,
  164. // }
  165. // s.Dao.DB.Model("base_equipment_advance_time").Insert(saveEntity)
  166. // }
  167. //}
  168. count, err := s.Dao.DB.Model("base_equipment_advance_time").Where("EquipmentId = " +
  169. strconv.Itoa(req.EquipmentId) + " and Week = " + req.Week +
  170. " and StartTime = '" + req.StartTime + "' and EndTime = '" + req.EndTime + "'").Count()
  171. if err != nil {
  172. return err
  173. }
  174. if count > 0 {
  175. return errors.New("该时间段已存在,请重新输入!")
  176. }
  177. week, _ := strconv.Atoi(req.Week)
  178. saveEntity := equipment2.BaseEquipmentAdvanceTime{
  179. EquipmentId: req.EquipmentId,
  180. Week: week,
  181. StartTime: req.StartTime,
  182. EndTime: req.EndTime,
  183. CreateOn: gtime.Now(),
  184. CreateUserId: gconv.Int(info.Id),
  185. CreateBy: info.RealName,
  186. }
  187. _, err = s.Dao.DB.Model("base_equipment_advance_time").Insert(saveEntity)
  188. if err != nil {
  189. return err
  190. }
  191. return nil
  192. }
  193. // DeleteAdvanceTime 删除设备预约时间段
  194. func (s Service) DeleteAdvanceTime(id int) error {
  195. _, err := s.Dao.DB.Model("base_equipment_advance_time").Delete("Id = " + strconv.Itoa(id))
  196. if err != nil {
  197. return err
  198. }
  199. return nil
  200. }
  201. // AppointmentTime 设备预约时间段
  202. func (s Service) AppointmentTime(req *equipment2.IdReq) error {
  203. // 先查该人员的预约资格、优先使用权
  204. var qualificationInfo []equipment2.BaseEquipmentQualification
  205. s.Dao.DB.Model("base_equipment_qualification").Where("EquipmentId = " +
  206. strconv.Itoa(req.EquipmentId)).Order("Qualification").Scan(&qualificationInfo)
  207. // 如果是普通预约资格,筛选出周末时间段
  208. if qualificationInfo[0].Qualification == "1" {
  209. // TODO 时间获取
  210. }
  211. // 如果有预约资格但没有优先使用权,查询优先使用权时间段
  212. if len(qualificationInfo) == 2 && qualificationInfo[1].Qualification == "3" {
  213. var appointmentInfo []equipment2.BaseEquipmentAdvanceTime
  214. s.Dao.DB.Model("base_equipment_advance_time").Where("EquipmentId = " +
  215. strconv.Itoa(req.EquipmentId) + " and UserId").Scan(&appointmentInfo)
  216. }
  217. return nil
  218. }
  219. func (s Service) AppointTimeSplit() int {
  220. return g.Cfg().GetInt("appointment.time_split", 30)
  221. }
  222. type AppointTimeInfoAppoint struct {
  223. Id int `json:"id"`
  224. Start string `json:"start"`
  225. End string `json:"end"`
  226. Status int `json:"status"`
  227. Uid int `json:"uid"`
  228. Uname string `json:"uname"`
  229. Tel string `json:"tel"`
  230. Dept string `json:"dept"`
  231. }
  232. type AppointTimeInfoInstrument struct {
  233. Id int
  234. Weekday string
  235. BeginAt *gtime.Time
  236. EndAt *gtime.Time
  237. IsAppointAvailable int // 是否默认可预约 1是 2否
  238. }
  239. type TimeSpan struct {
  240. Start *gtime.Time `json:"start"`
  241. End *gtime.Time `json:"end"`
  242. }
  243. // 获取指定仪器预约信息
  244. func (s Service) AppointTimeInfo(req *equipment2.AppointTimeInfoReq, userinfo request.UserInfo) (map[string]interface{}, error) {
  245. if req.InstrumentId == 0 {
  246. return nil, myerrors.NewMsgError(nil, "仪器 Id 不能为空")
  247. }
  248. if req.Date == nil {
  249. return nil, myerrors.NewMsgError(nil, "日期不能为空")
  250. }
  251. timesplit := s.AppointTimeSplit()
  252. days := common.Weekday(req.Date.Time)
  253. var instr AppointTimeInfoInstrument
  254. err := s.Dao.DB.Table("instrument").
  255. Where("Id", req.InstrumentId).
  256. Fields("Id, BeginAt, EndAt, Weekday, IsAppointAvailable").
  257. Struct(&instr)
  258. if err != nil {
  259. return nil, err
  260. }
  261. disableExpired := g.Cfg().GetBool("appointment.disableExpired")
  262. appointStatus := g.Slice{1, 2}
  263. if disableExpired {
  264. // 需要包含超时未上机的预约
  265. appointStatus = g.Slice{1, 2, 10}
  266. }
  267. var appointInfo []AppointTimeInfoAppoint
  268. err = s.Dao.DB.Table("appointment a").LeftJoin("base_user b", "a.UserId=b.Id").Unscoped().
  269. Where("a.DeletedAt IS NULL").
  270. Where("a.RelevanceId", req.InstrumentId).
  271. WherePri("a.Status", appointStatus).
  272. Where("a.EndTime > ?", days[0]).
  273. Where("a.EndTime <= ?", days[6].Add(time.Hour*24)).
  274. Fields("a.Id, a.StartTime as Start, a.EndTime as End, a.Status, a.UserId as Uid, b.Realname as Uname, b.Mobile as Tel, b.DepartmentName as Dept").
  275. Structs(&appointInfo)
  276. if err == sql.ErrNoRows {
  277. err = nil
  278. }
  279. if err != nil {
  280. return nil, err
  281. }
  282. instrWeekStr := strings.Split(instr.Weekday, ",")
  283. instrWeek := []int{}
  284. for _, i := range instrWeekStr {
  285. d, err := strconv.Atoi(i)
  286. if err != nil {
  287. continue
  288. }
  289. instrWeek = append(instrWeek, d)
  290. }
  291. toRemoveDay := []int{}
  292. for i := 1; i <= 7; i++ {
  293. if !common.SliceIntcontains(instrWeek, i) {
  294. toRemoveDay = append(toRemoveDay, i)
  295. }
  296. }
  297. // 普通资格不可以预约周六周日的时间
  298. if instr.IsAppointAvailable != 1 {
  299. count, err := s.Dao.DB.Model("base_equipment_qualification").
  300. Where("EquipmentId = ?", req.InstrumentId).
  301. Where("UserId = ?", userinfo.Id).
  302. Where("Qualification = 1").Count()
  303. if err != nil {
  304. return nil, err
  305. }
  306. if count != 0 {
  307. if !common.SliceIntcontains(toRemoveDay, 6) {
  308. toRemoveDay = append(toRemoveDay, 6)
  309. }
  310. if !common.SliceIntcontains(toRemoveDay, 7) {
  311. toRemoveDay = append(toRemoveDay, 7)
  312. }
  313. }
  314. }
  315. // 优先预约权
  316. advanceTimeList := []equipment2.BaseEquipmentAdvanceTime{}
  317. qualificationCount, err := s.Dao.DB.Model("base_equipment_qualification").
  318. Where("EquipmentId = ?", req.InstrumentId).
  319. Where("UserId = ?", userinfo.Id).
  320. Where("Qualification = 3").Count()
  321. if err != nil {
  322. return nil, err
  323. }
  324. if qualificationCount == 0 {
  325. err := s.Dao.DB.Model("base_equipment_advance_time").
  326. Where("EquipmentId = ?", req.InstrumentId).
  327. Structs(&advanceTimeList)
  328. if err == sql.ErrNoRows {
  329. err = nil
  330. }
  331. if err != nil {
  332. return nil, err
  333. }
  334. }
  335. unavailable := []TimeSpan{}
  336. // 仪器设置的可预约范围外
  337. for i, d := range days {
  338. if common.SliceIntcontains(toRemoveDay, i+1) {
  339. unavailable = append(unavailable, TimeSpan{
  340. Start: gtime.NewFromTime(d),
  341. End: gtime.NewFromTime(d.Add(24 * time.Hour)),
  342. })
  343. continue
  344. }
  345. if instr.BeginAt.Hour() != 0 || instr.BeginAt.Minute() != 0 {
  346. end := d.Add(
  347. time.Hour*time.Duration(instr.BeginAt.Hour()) +
  348. time.Minute*time.Duration(instr.BeginAt.Minute()))
  349. unavailable = append(unavailable, TimeSpan{
  350. Start: gtime.NewFromTime(d),
  351. End: gtime.NewFromTime(end),
  352. })
  353. }
  354. endat := instr.EndAt.Add(time.Minute * time.Duration(timesplit))
  355. if endat.Hour() != 0 || endat.Minute() != 0 {
  356. start := d.Add(
  357. time.Hour*time.Duration(endat.Hour()) +
  358. time.Minute*time.Duration(endat.Minute()))
  359. unavailable = append(unavailable, TimeSpan{
  360. Start: gtime.NewFromTime(start),
  361. End: gtime.NewFromTime(d.Add(time.Hour * 24)),
  362. })
  363. }
  364. }
  365. // 优先预约时间段
  366. for _, i := range advanceTimeList {
  367. if i.Week == 0 {
  368. continue
  369. }
  370. startTime, err := time.Parse("15:04", i.StartTime)
  371. if err != nil {
  372. continue
  373. }
  374. endTime, err := time.Parse("15:04", i.EndTime)
  375. if err != nil {
  376. continue
  377. }
  378. d := days[i.Week-1]
  379. start := d.Add(
  380. time.Hour*time.Duration(startTime.Hour()) +
  381. time.Minute*time.Duration(startTime.Minute()))
  382. end := d.Add(
  383. time.Hour*time.Duration(endTime.Hour()) +
  384. time.Minute*time.Duration(endTime.Minute()))
  385. unavailable = append(unavailable, TimeSpan{
  386. Start: gtime.NewFromTime(start),
  387. End: gtime.NewFromTime(end),
  388. })
  389. }
  390. return map[string]interface{}{
  391. "time_split": timesplit,
  392. "begin_at": instr.BeginAt.Time.Format("15:04:05"),
  393. "ent_at": instr.EndAt.Time.Format("15:04:05"),
  394. "unavailable": unavailable,
  395. "appoint": appointInfo,
  396. }, nil
  397. }
  398. // 默认可预约: 否表示只有加入预约资格设置可以预约,是表示预约资格设置失效,都可以预约
  399. // 普通资格不可以预约周六周日的时间,资深资格无限制
  400. // 优先预约权设置: 优先预约时段内只有添加到优先预约人员的用户才能预约
  401. // SearchNoAppointment 查看不能预约时间段信息
  402. func (s Service) SearchNoAppointment(req *equipment2.IdReq, info request.UserInfo) ([]equipment2.NoReservationInfo, error) {
  403. // 普通资格限制周末时间
  404. var qualificationInfo []equipment2.BaseEquipmentQualification
  405. var noAppointmentInfos []equipment2.NoReservationInfo
  406. // 查询设备可预约时间段 和是否开启了默认可预约
  407. var equipmentInfo equipment2.Instrument
  408. s.Dao.DB.Model("instrument").Fields("IsAppointAvailable,BeginAt, EndAt").
  409. Where("Id = " + strconv.Itoa(req.EquipmentId)).Scan(&equipmentInfo)
  410. s.Dao.DB.Model("base_equipment_qualification").Where("EquipmentId = " +
  411. strconv.Itoa(req.EquipmentId) + " and UserId = " +
  412. strconv.Itoa(gconv.Int(info.Id))).Order("Qualification").Scan(&qualificationInfo)
  413. if len(qualificationInfo) >= 1 && qualificationInfo[0].Qualification == "1" && equipmentInfo.IsAppointAvailable != 1 { // 只有普通预约资格,限制周末预约时间段// 如果没有开启默认可预约 则进行时间段限制
  414. startTime := equipmentInfo.BeginAt
  415. endTime := equipmentInfo.EndAt
  416. // 设备当天预约时间总长度h
  417. timeLong := endTime.Sub(startTime).Hours()
  418. saturdayTime := noReservationInfo(startTime, timeLong, req.Date, 6)
  419. sundayTime := noReservationInfo(startTime, timeLong, req.Date, 7)
  420. noAppointmentInfos = append(saturdayTime, sundayTime...)
  421. }
  422. if len(qualificationInfo) == 1 && qualificationInfo[0].Qualification != "3" { // 没有优先预约权,限制优先预约时间段
  423. var advanceTimeList []equipment2.BaseEquipmentAdvanceTime
  424. s.Dao.DB.Model("base_equipment_advance_time").
  425. Where("EquipmentId = " + strconv.Itoa(req.EquipmentId)).Scan(&advanceTimeList)
  426. for _, v := range advanceTimeList {
  427. // TODO 遍历获取不能预约时间段
  428. startTime, _ := gtime.StrToTime(strings.Trim(v.StartTime, " "), "H:i")
  429. endTime, _ := gtime.StrToTime(strings.Trim(v.EndTime, " "), "H:i")
  430. timeLong := endTime.Sub(startTime).Hours()
  431. saturdayTime := noReservationInfo(startTime, timeLong, req.Date, v.Week)
  432. noAppointmentInfos = append(noAppointmentInfos, saturdayTime...)
  433. }
  434. }
  435. return noAppointmentInfos, nil
  436. }
  437. // ChangeInstrStauts 修改设备所属
  438. func (s Service) ChangeBelongs(req *equipment2.IdReq) error {
  439. _, err := s.Dao.DB.Model("Instrument").
  440. Update("Belongs = "+req.Belongs, "Id = "+strconv.Itoa(req.EquipmentId))
  441. if err != nil {
  442. return err
  443. }
  444. return nil
  445. }
  446. // GetUnitCount 查询设备计费
  447. func (s Service) GetUnitCount(instrumentId int) (rspInfo []equipment2.Instrument, err error) {
  448. err = s.Dao.DB.Model("Instrument").Where("Id = ?", instrumentId).Scan(&rspInfo)
  449. if err != nil {
  450. return rspInfo, err
  451. }
  452. return rspInfo, nil
  453. }
  454. // UpdateUnifPrice 更新计费价格
  455. func (s Service) UpdateUnitPrice(instrumentId int, unitCount float64) error {
  456. _, err := s.Dao.DB.Model("Instrument").Update(fmt.Sprintf("unitCount=%v", unitCount), "Id = "+
  457. strconv.Itoa(instrumentId))
  458. if err != nil {
  459. return err
  460. }
  461. return nil
  462. }
  463. // RateChange 优惠比例更新
  464. func (s Service) RateChange(InstrumentId, rate int) error {
  465. _, err := s.Dao.DB.Model("Instrument").Update("Rate = "+strconv.Itoa(rate), "Id = "+
  466. strconv.Itoa(InstrumentId))
  467. if err != nil {
  468. return err
  469. }
  470. return nil
  471. }
  472. // IsAdvance 是否有优先预约资格
  473. func (s Service) IsAdvance(id int32, instrumentId int) (isAdvance int, err error) {
  474. equipmentQualification := equipment2.BaseEquipmentQualification{}
  475. err = s.Dao.DB.Model("base_equipment_qualification").Where("UserId", id).
  476. Where("Qualification", "3").Where("EquipmentId", instrumentId).Scan(&equipmentQualification)
  477. if err == sql.ErrNoRows {
  478. return 0, nil
  479. }
  480. return 1, nil
  481. }
  482. // noReservationInfo 不可预约时间段处理 startTime开始时间 timeLong 时间间隔 Date 前端传入日期 week 星期几
  483. func noReservationInfo(startTime *gtime.Time, timeLong float64, Date string, week int) (noAppointmentInfo []equipment2.NoReservationInfo) {
  484. date, _ := gtime.StrToTime(Date, "Y-m-d")
  485. // 获取当前星期对应的日期
  486. day := GetDate(date, week)
  487. grids := int(timeLong*2) + 1
  488. for i := 0; i < grids; i++ {
  489. // 开始时间
  490. start_time := startTime.Add(time.Duration(i) * 30 * time.Minute)
  491. //fmt.Println("day:", day, "week:", week, "start_time", fmt.Sprintf("%02d", start_time.Hour()) + ":"+fmt.Sprintf("%02d", start_time.Minute()), "status:", status)
  492. noAppointmentInfo = append(noAppointmentInfo, equipment2.NoReservationInfo{
  493. Day: day,
  494. Week: week,
  495. StartTime: fmt.Sprintf("%02d", start_time.Hour()) + ":" + fmt.Sprintf("%02d", start_time.Minute()),
  496. Status: 3,
  497. })
  498. }
  499. return noAppointmentInfo
  500. }
  501. // 获取当前星期对应的日期
  502. func GetDate(Date *gtime.Time, week int) int {
  503. weekday := Date.Weekday().String()
  504. var targetDay *gtime.Time
  505. switch weekday {
  506. case "Monday":
  507. targetDay = Date.AddDate(0, 0, week-1)
  508. case "Tuesday":
  509. targetDay = Date.AddDate(0, 0, week-2)
  510. case "Wednesday":
  511. targetDay = Date.AddDate(0, 0, week-3)
  512. case "Thursday":
  513. targetDay = Date.AddDate(0, 0, week-4)
  514. case "Friday":
  515. targetDay = Date.AddDate(0, 0, week-5)
  516. case "Saturday":
  517. targetDay = Date.AddDate(0, 0, week-6)
  518. case "Sunday":
  519. targetDay = Date.AddDate(0, 0, week-7)
  520. }
  521. _, _, day := targetDay.Date()
  522. return day
  523. }