package service

import (
	"Xcx_New/models"
	"Xcx_New/utils"
	"time"

	"github.com/robfig/cron"
)

// cron表达式 https://www.cnblogs.com/zuxingyu/p/6023919.html
var clearSchedulesCronJob *cron.Cron

func init() {
	utils.InfoLog("开启自动清除排班定时任务")
	clearSchedulesCronJob = cron.New()
	spec := "0 0 1 * * ?" // 每天凌晨1点清除已排班未上机的排班数据
	clearSchedulesCronJob.AddFunc(spec, func() {
		AutoClearSchedules()
	})
}

func BeginAutoClearSchedulesJob() {
	clearSchedulesCronJob.Start()
}

func AutoClearSchedules() {
	utils.TraceLog("自动清除排班任务开始执行")
	//查出所有机构
	var schedules []*models.Schedule
	err = readDb.Table("xt_schedule as s").Where("s.status = 1").Select("distinct(s.user_org_id)").Find(&schedules).Error
	//遍历所有机构
	scheduleDate := utils.ZeroHourTimeOfDay(time.Now())
	for _, item := range schedules {
		//将今天(不包括今天)以前的的排班数据进行软删除
		writeDb.
			Table("xt_schedule as s").
			Where("s.schedule_date < ? AND s.status = 1 AND "+
				"s.user_org_id = ? AND "+
				"NOT EXISTS (Select * FROM `xt_dialysis_order` as d Where  d.`status` = 1 AND"+
				" d.`patient_id` = s.patient_id AND "+
				" d.user_org_id = s.user_org_id AND d.dialysis_date = s.schedule_date)", scheduleDate.Unix(), item.UserOrgId).
			Updates(map[string]interface{}{"status": 0, "updated_time": time.Now().Unix()})
	}
	utils.SuccessLog("自动清除排班任务完成")
}
