123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package service
-
- import (
- "XT_New/models"
- "fmt"
- "github.com/jinzhu/gorm"
- "github.com/robfig/cron"
- "time"
- )
-
- //// cron表达式 https://www.cnblogs.com/zuxingyu/p/6023919.html
- //var createWeekDisinfectionCronJob *cron.Cron
- //
- //func init() {
- // createWeekDisinfectionCronJob = cron.New()
- // //spec := "0 0 23 * * ?" // 每天23点执行一次
- // spec := "0 55 23 * * ?" // 每天23点55执行一次
- // //spec := "0 0 5 * * ?" // 每天23点55执行一次
- // //spec := "0 */1 * * * ?" // 每1分钟执行一次
- // createWeekDisinfectionCronJob.AddFunc(spec, func() {
- //
- // AutoCreateWeekDisinfectionJob()
- // })
- //}
- //
- //func BeginAutoCreateWeekDisinfectionJob() {
- //
- // createWeekDisinfectionCronJob.Start()
- //}
-
- //// cron表达式 https://www.cnblogs.com/zuxingyu/p/6023919.html
-
- var createStaffScheduleCronJob *cron.Cron
-
- func init() {
-
- createStaffScheduleCronJob = cron.New()
- //spec := "0 */1 * * * ?" // 每1分钟执行一次
- //spec := "0 55 23 * * ?" // 每天23点55执行一次
- 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("下周数据已生成")
- }
- //if len(schedules) != len(schedule) {
- // AddSchedules(&staffSchedule)
- //}else{
- // fmt.Println("下周数据已生成")
- // //createStaffScheduleCronJob.Stop()
- //}
- }
- }
- }
- }
-
- 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
- }
|