equipment.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593
  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. InAdvance int // 需要提前预约时间 单位小时
  239. FurtherRange int // 未来可预约范围 单位周
  240. FurtherLimit int // 非优先预约人员可预约时间/小时
  241. }
  242. type TimeSpan struct {
  243. Start *gtime.Time `json:"start"`
  244. End *gtime.Time `json:"end"`
  245. }
  246. // 获取指定仪器预约信息
  247. func (s Service) AppointTimeInfo(req *equipment2.AppointTimeInfoReq, userinfo request.UserInfo) (map[string]interface{}, error) {
  248. if req.InstrumentId == 0 {
  249. return nil, myerrors.NewMsgError(nil, "仪器 Id 不能为空")
  250. }
  251. if req.Date == nil {
  252. return nil, myerrors.NewMsgError(nil, "日期不能为空")
  253. }
  254. timesplit := s.AppointTimeSplit()
  255. days := common.Weekday(req.Date.Time)
  256. var instr AppointTimeInfoInstrument
  257. err := s.Dao.DB.Table("instrument").
  258. Where("Id", req.InstrumentId).
  259. Fields("Id, BeginAt, EndAt, Weekday, IsAppointAvailable, InAdvance, FurtherRange").
  260. Struct(&instr)
  261. if err != nil {
  262. return nil, err
  263. }
  264. // 需要包含超时未上机的预约
  265. appointStatus := g.Slice{1, 2, 10}
  266. var appointInfo []AppointTimeInfoAppoint
  267. err = s.Dao.DB.Table("appointment a").LeftJoin("base_user b", "a.UserId=b.Id").Unscoped().
  268. Where("a.DeletedAt IS NULL").
  269. Where("a.RelevanceId", req.InstrumentId).
  270. WherePri("a.Status", appointStatus).
  271. Where("a.EndTime > ?", days[0]).
  272. Where("a.EndTime <= ?", days[6].Add(time.Hour*24)).
  273. 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").
  274. Structs(&appointInfo)
  275. if err == sql.ErrNoRows {
  276. err = nil
  277. }
  278. if err != nil {
  279. return nil, err
  280. }
  281. instrWeekStr := strings.Split(instr.Weekday, ",")
  282. instrWeek := []int{}
  283. for _, i := range instrWeekStr {
  284. d, err := strconv.Atoi(i)
  285. if err != nil {
  286. continue
  287. }
  288. instrWeek = append(instrWeek, d)
  289. }
  290. toRemoveDay := []int{}
  291. for i := 1; i <= 7; i++ {
  292. if !common.SliceIntcontains(instrWeek, i) {
  293. toRemoveDay = append(toRemoveDay, i)
  294. }
  295. }
  296. // 普通资格不可以预约周六周日的时间
  297. if instr.IsAppointAvailable != 1 {
  298. count, err := s.Dao.DB.Model("base_equipment_qualification").
  299. Where("EquipmentId = ?", req.InstrumentId).
  300. Where("UserId = ?", userinfo.Id).
  301. Where("Qualification = 1").Count()
  302. if err != nil {
  303. return nil, err
  304. }
  305. if count != 0 {
  306. if !common.SliceIntcontains(toRemoveDay, 6) {
  307. toRemoveDay = append(toRemoveDay, 6)
  308. }
  309. if !common.SliceIntcontains(toRemoveDay, 7) {
  310. toRemoveDay = append(toRemoveDay, 7)
  311. }
  312. }
  313. }
  314. // 优先预约权
  315. advanceTimeList := []equipment2.BaseEquipmentAdvanceTime{}
  316. qualificationCount, err := s.Dao.DB.Model("base_equipment_qualification").
  317. Where("EquipmentId = ?", req.InstrumentId).
  318. Where("UserId = ?", userinfo.Id).
  319. Where("Qualification = 3").Count()
  320. if err != nil {
  321. return nil, err
  322. }
  323. var furtherLimit *gtime.Time
  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. if instr.FurtherLimit != 0 {
  335. furtherLimit = gtime.Now().Add(time.Hour * time.Duration(instr.FurtherLimit))
  336. }
  337. }
  338. unavailable := []TimeSpan{}
  339. // 仪器设置的可预约范围外
  340. for i, d := range days {
  341. if common.SliceIntcontains(toRemoveDay, i+1) {
  342. unavailable = append(unavailable, TimeSpan{
  343. Start: gtime.NewFromTime(d),
  344. End: gtime.NewFromTime(d.Add(24 * time.Hour)),
  345. })
  346. continue
  347. }
  348. if instr.BeginAt.Hour() != 0 || instr.BeginAt.Minute() != 0 {
  349. end := d.Add(
  350. time.Hour*time.Duration(instr.BeginAt.Hour()) +
  351. time.Minute*time.Duration(instr.BeginAt.Minute()))
  352. unavailable = append(unavailable, TimeSpan{
  353. Start: gtime.NewFromTime(d),
  354. End: gtime.NewFromTime(end),
  355. })
  356. }
  357. endat := instr.EndAt.Add(time.Minute * time.Duration(timesplit))
  358. if endat.Hour() != 0 || endat.Minute() != 0 {
  359. start := d.Add(
  360. time.Hour*time.Duration(endat.Hour()) +
  361. time.Minute*time.Duration(endat.Minute()))
  362. unavailable = append(unavailable, TimeSpan{
  363. Start: gtime.NewFromTime(start),
  364. End: gtime.NewFromTime(d.Add(time.Hour * 24)),
  365. })
  366. }
  367. }
  368. // 优先预约时间段
  369. for _, i := range advanceTimeList {
  370. if i.Week == 0 {
  371. continue
  372. }
  373. startTime, err := time.Parse("15:04", i.StartTime)
  374. if err != nil {
  375. continue
  376. }
  377. endTime, err := time.Parse("15:04", i.EndTime)
  378. if err != nil {
  379. continue
  380. }
  381. d := days[i.Week-1]
  382. start := d.Add(
  383. time.Hour*time.Duration(startTime.Hour()) +
  384. time.Minute*time.Duration(startTime.Minute()))
  385. end := d.Add(
  386. time.Hour*time.Duration(endTime.Hour()) +
  387. time.Minute*time.Duration(endTime.Minute()))
  388. unavailable = append(unavailable, TimeSpan{
  389. Start: gtime.NewFromTime(start),
  390. End: gtime.NewFromTime(end),
  391. })
  392. }
  393. if instr.InAdvance != 0 {
  394. start := time.Now()
  395. var toNextSpan time.Duration
  396. if start.Minute()%timesplit != 0 {
  397. toNextSpan = time.Duration(timesplit - start.Minute()%timesplit) * time.Minute
  398. }
  399. start = time.Date(start.Year(), start.Month(), start.Day(), start.Hour(), start.Minute(), 0, 0, time.Local)
  400. start = start.Add(toNextSpan)
  401. end := start.Add(time.Duration(instr.InAdvance) * time.Hour)
  402. unavailable = append(unavailable, TimeSpan{
  403. Start: gtime.NewFromTime(start),
  404. End: gtime.NewFromTime(end),
  405. })
  406. }
  407. return map[string]interface{}{
  408. "further_limit": furtherLimit,
  409. "further_range": instr.FurtherRange,
  410. "time_split": timesplit,
  411. "begin_at": instr.BeginAt.Time.Format("15:04:05"),
  412. "ent_at": instr.EndAt.Time.Format("15:04:05"),
  413. "unavailable": unavailable,
  414. "appoint": appointInfo,
  415. }, nil
  416. }
  417. // 默认可预约: 否表示只有加入预约资格设置可以预约,是表示预约资格设置失效,都可以预约
  418. // 普通资格不可以预约周六周日的时间,资深资格无限制
  419. // 优先预约权设置: 优先预约时段内只有添加到优先预约人员的用户才能预约
  420. // SearchNoAppointment 查看不能预约时间段信息
  421. func (s Service) SearchNoAppointment(req *equipment2.IdReq, info request.UserInfo) ([]equipment2.NoReservationInfo, error) {
  422. // 普通资格限制周末时间
  423. var qualificationInfo []equipment2.BaseEquipmentQualification
  424. var noAppointmentInfos []equipment2.NoReservationInfo
  425. // 查询设备可预约时间段 和是否开启了默认可预约
  426. var equipmentInfo equipment2.Instrument
  427. s.Dao.DB.Model("instrument").Fields("IsAppointAvailable,BeginAt, EndAt").
  428. Where("Id = " + strconv.Itoa(req.EquipmentId)).Scan(&equipmentInfo)
  429. s.Dao.DB.Model("base_equipment_qualification").Where("EquipmentId = " +
  430. strconv.Itoa(req.EquipmentId) + " and UserId = " +
  431. strconv.Itoa(gconv.Int(info.Id))).Order("Qualification").Scan(&qualificationInfo)
  432. if len(qualificationInfo) >= 1 && qualificationInfo[0].Qualification == "1" && equipmentInfo.IsAppointAvailable != 1 { // 只有普通预约资格,限制周末预约时间段// 如果没有开启默认可预约 则进行时间段限制
  433. startTime := equipmentInfo.BeginAt
  434. endTime := equipmentInfo.EndAt
  435. // 设备当天预约时间总长度h
  436. timeLong := endTime.Sub(startTime).Hours()
  437. saturdayTime := noReservationInfo(startTime, timeLong, req.Date, 6)
  438. sundayTime := noReservationInfo(startTime, timeLong, req.Date, 7)
  439. noAppointmentInfos = append(saturdayTime, sundayTime...)
  440. }
  441. if len(qualificationInfo) == 1 && qualificationInfo[0].Qualification != "3" { // 没有优先预约权,限制优先预约时间段
  442. var advanceTimeList []equipment2.BaseEquipmentAdvanceTime
  443. s.Dao.DB.Model("base_equipment_advance_time").
  444. Where("EquipmentId = " + strconv.Itoa(req.EquipmentId)).Scan(&advanceTimeList)
  445. for _, v := range advanceTimeList {
  446. // TODO 遍历获取不能预约时间段
  447. startTime, _ := gtime.StrToTime(strings.Trim(v.StartTime, " "), "H:i")
  448. endTime, _ := gtime.StrToTime(strings.Trim(v.EndTime, " "), "H:i")
  449. timeLong := endTime.Sub(startTime).Hours()
  450. saturdayTime := noReservationInfo(startTime, timeLong, req.Date, v.Week)
  451. noAppointmentInfos = append(noAppointmentInfos, saturdayTime...)
  452. }
  453. }
  454. return noAppointmentInfos, nil
  455. }
  456. // ChangeInstrStauts 修改设备所属
  457. func (s Service) ChangeBelongs(req *equipment2.IdReq) error {
  458. _, err := s.Dao.DB.Model("Instrument").
  459. Update("Belongs = "+req.Belongs, "Id = "+strconv.Itoa(req.EquipmentId))
  460. if err != nil {
  461. return err
  462. }
  463. return nil
  464. }
  465. // GetUnitCount 查询设备计费
  466. func (s Service) GetUnitCount(instrumentId int) (rspInfo []equipment2.Instrument, err error) {
  467. err = s.Dao.DB.Model("Instrument").Where("Id = ?", instrumentId).Scan(&rspInfo)
  468. if err != nil {
  469. return rspInfo, err
  470. }
  471. return rspInfo, nil
  472. }
  473. // UpdateUnifPrice 更新计费价格
  474. func (s Service) UpdateUnitPrice(instrumentId int, unitCount float64) error {
  475. _, err := s.Dao.DB.Model("Instrument").Update(fmt.Sprintf("unitCount=%v", unitCount), "Id = "+
  476. strconv.Itoa(instrumentId))
  477. if err != nil {
  478. return err
  479. }
  480. return nil
  481. }
  482. // RateChange 优惠比例更新
  483. func (s Service) RateChange(InstrumentId, rate int) error {
  484. _, err := s.Dao.DB.Model("Instrument").Update("Rate = "+strconv.Itoa(rate), "Id = "+
  485. strconv.Itoa(InstrumentId))
  486. if err != nil {
  487. return err
  488. }
  489. return nil
  490. }
  491. func (s Service) UpdateFurtherLimit(id, limit int) error {
  492. _, err := s.Dao.DB.Model("Instrument").Update("FurtherLimit = "+strconv.Itoa(limit), "Id = "+
  493. strconv.Itoa(id))
  494. if err != nil {
  495. return err
  496. }
  497. return nil
  498. }
  499. // IsAdvance 是否有优先预约资格
  500. func (s Service) IsAdvance(id int32, instrumentId int) (isAdvance int, err error) {
  501. equipmentQualification := equipment2.BaseEquipmentQualification{}
  502. err = s.Dao.DB.Model("base_equipment_qualification").Where("UserId", id).
  503. Where("Qualification", "3").Where("EquipmentId", instrumentId).Scan(&equipmentQualification)
  504. if err == sql.ErrNoRows {
  505. return 0, nil
  506. }
  507. return 1, nil
  508. }
  509. // noReservationInfo 不可预约时间段处理 startTime开始时间 timeLong 时间间隔 Date 前端传入日期 week 星期几
  510. func noReservationInfo(startTime *gtime.Time, timeLong float64, Date string, week int) (noAppointmentInfo []equipment2.NoReservationInfo) {
  511. date, _ := gtime.StrToTime(Date, "Y-m-d")
  512. // 获取当前星期对应的日期
  513. day := GetDate(date, week)
  514. grids := int(timeLong*2) + 1
  515. for i := 0; i < grids; i++ {
  516. // 开始时间
  517. start_time := startTime.Add(time.Duration(i) * 30 * time.Minute)
  518. //fmt.Println("day:", day, "week:", week, "start_time", fmt.Sprintf("%02d", start_time.Hour()) + ":"+fmt.Sprintf("%02d", start_time.Minute()), "status:", status)
  519. noAppointmentInfo = append(noAppointmentInfo, equipment2.NoReservationInfo{
  520. Day: day,
  521. Week: week,
  522. StartTime: fmt.Sprintf("%02d", start_time.Hour()) + ":" + fmt.Sprintf("%02d", start_time.Minute()),
  523. Status: 3,
  524. })
  525. }
  526. return noAppointmentInfo
  527. }
  528. // 获取当前星期对应的日期
  529. func GetDate(Date *gtime.Time, week int) int {
  530. weekday := Date.Weekday().String()
  531. var targetDay *gtime.Time
  532. switch weekday {
  533. case "Monday":
  534. targetDay = Date.AddDate(0, 0, week-1)
  535. case "Tuesday":
  536. targetDay = Date.AddDate(0, 0, week-2)
  537. case "Wednesday":
  538. targetDay = Date.AddDate(0, 0, week-3)
  539. case "Thursday":
  540. targetDay = Date.AddDate(0, 0, week-4)
  541. case "Friday":
  542. targetDay = Date.AddDate(0, 0, week-5)
  543. case "Saturday":
  544. targetDay = Date.AddDate(0, 0, week-6)
  545. case "Sunday":
  546. targetDay = Date.AddDate(0, 0, week-7)
  547. }
  548. _, _, day := targetDay.Date()
  549. return day
  550. }