123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package service
-
- import (
- "XT_New/models"
- "fmt"
- "github.com/jinzhu/gorm"
- "github.com/robfig/cron"
- "time"
- )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- var createStaffScheduleCronJob *cron.Cron
-
- func init() {
-
- createStaffScheduleCronJob = cron.New()
-
-
- spec := "0 0 0 ? * Sun"
- createStaffScheduleCronJob.AddFunc(spec, func() {
- AutoCreateStaffScheduleJob()
- })
- }
-
- func BeginAutoCreateStaffScheduleJob() {
-
- createStaffScheduleCronJob.Start()
- }
-
- func AutoCreateStaffScheduleJob() {
-
- now := time.Now()
-
- offset := int(time.Monday - now.Weekday())
- if offset > 0 {
- offset = -6
- }
- weekStart := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, offset)
- fmt.Println("weekStart", weekStart.Unix())
- start_time := weekStart.Unix()
- fmt.Println("start_time", start_time)
- weekEnd := time.Date(now.Year(), now.Month(), now.Day()+6, 0, 0, 0, 0, time.Local).AddDate(0, 0, offset)
- fmt.Println("weekEnd", weekEnd.Unix())
- end_time := weekEnd.Unix()
- fmt.Println("end_time", end_time)
-
-
-
- orgs, _ := GetAllOrgs()
- for _, item := range orgs {
-
- schdule, _ := GetAutoContinueSchdule(item.ID)
-
- if schdule.IsStatus == 0 {
- fmt.Println("连续排班未开启")
- }
-
- if schdule.IsStatus == 1 {
-
- schedules, _ := GeThisWeekScheduleData(item.ID, start_time, end_time)
- for _, it := range schedules {
- staffSchedule := models.StaffSchedule{
- DoctorId: it.DoctorId,
- DoctorType: it.DoctorType,
- ScheduleType: it.ScheduleType,
- ScheduleWeek: it.ScheduleWeek,
- UserOrgId: it.UserOrgId,
- StartTime: it.StartTime + 604800,
- EndTime: it.EndTime + 604800,
- Status: 1,
- Ctime: time.Now().Unix(),
- ScheduleDate: it.ScheduleDate + 604800,
- }
-
- _, errcode := GetNextWeekData(it.UserOrgId, it.DoctorId, it.ScheduleDate+604800)
- if errcode == gorm.ErrRecordNotFound {
- AddSchedules(&staffSchedule)
- } else {
- fmt.Println("下周数据已生成")
- }
-
-
-
-
-
-
- }
- }
- }
- }
-
- func GetAllOrgs() (orgs []*models.SgjUserOrg, err error) {
-
- err = UserReadDB().Model(&orgs).Where("status = 1").Find(&orgs).Error
- return orgs, err
- }
-
- func GetAutoContinueSchdule(orgid int64) (models.ContinueSchedule, error) {
-
- schedule := models.ContinueSchedule{}
- err := XTReadDB().Model(&schedule).Where("user_org_id = ? and status = 1", orgid).Find(&schedule).Error
- return schedule, err
- }
-
- func GeThisWeekScheduleData(orgid int64, startime int64, endtime int64) (staffschedule []*models.StaffSchedule, err error) {
-
- err = XTReadDB().Model(&staffschedule).Where("user_org_id = ? and status = 1 and start_time>=? and end_time<=?", orgid, startime, endtime).Find(&staffschedule).Error
- return staffschedule, err
- }
-
- func AddSchedules(schedule *models.StaffSchedule) error {
- tx := writeDb.Begin()
- err := XTWriteDB().Model(&schedule).Create(&schedule).Error
- if err != nil {
- tx.Rollback()
- return err
- }
- tx.Commit()
- return nil
- }
-
- func GetNextWeekData(orgid int64, docid int64, scheduledate int64) (*models.StaffSchedule, error) {
- schedule := models.StaffSchedule{}
- err := XTReadDB().Model(&schedule).Where("user_org_id = ? and status = 1 and doctor_id =? and schedule_date =?", orgid, docid, scheduledate).Find(&schedule).Error
- if err == gorm.ErrRecordNotFound {
- return nil, err
- }
- if err != nil {
- return nil, err
- }
- return &schedule, nil
- }
|