123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- package controllers
-
- import (
- "XT_New/enums"
- "XT_New/models"
- "XT_New/service"
- "XT_New/utils"
- "encoding/json"
- "time"
-
- "github.com/astaxie/beego"
- )
-
- func PatientScheduleTemplateAPIControllerRegistRouters() {
- beego.Router("/api/schtemp/p/initdata", &PatientScheduleTemplateAPIController{}, "get:InitData")
- beego.Router("/api/schtemp/p/setmode", &PatientScheduleTemplateAPIController{}, "post:SetMode")
- beego.Router("/api/schtemp/p/update_sch", &PatientScheduleTemplateAPIController{}, "post:UpdateSchedules")
-
- // beego.Router("/api/test", &TestCtr{}, "get:Test")
- }
-
- // type TestCtr struct {
- // BaseAPIController
- // }
-
- // func (this *TestCtr) Test() {
- // now := time.Now().AddDate(0, 0, 7)
-
- // weekday := int(now.Weekday())
- // if weekday == 0 {
- // weekday = 7
- // }
-
- // monday := now.AddDate(0, 0, 1-weekday)
- // sunday := now.AddDate(0, 0, 7-weekday)
-
- // // this.TraceLog("%v", weekday)
- // this.ServeSuccessJSON(map[string]interface{}{
- // "weekday": weekday,
- // "monday": monday.Format("2006-01-02"),
- // "sunday": sunday.Format("2006-01-02"),
- // })
- // }
-
- // ------- 患者排班模板 --------
- type PatientScheduleTemplateAPIController struct {
- BaseAuthAPIController
- }
-
- // /api/schtemp/p/initdata [get]
- func (this *PatientScheduleTemplateAPIController) InitData() {
- adminUserInfo := this.GetAdminUserInfo()
-
- mode, getModeErr := service.GetOrgPatientScheduleTemplateMode(adminUserInfo.CurrentOrgId)
- if getModeErr != nil {
- this.ErrorLog("获取排班模板启用模式失败:%v", getModeErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- now := time.Now()
- if mode == nil {
- mode = &models.PatientScheduleTemplateMode{
- OrgID: adminUserInfo.CurrentOrgId,
- Mode: 0,
- ExecuteTimes: 0,
- Status: 1,
- CreateTime: now.Unix(),
- ModifyTime: now.Unix(),
- }
- createModeErr := service.SavePatientScheduleTemplateMode(mode)
- if createModeErr != nil {
- this.ErrorLog("创建排班模板启用模式失败:%v", createModeErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- }
-
- deviceNumbers, getDeviceNumbersErr := service.GetScheduleValidDeviceNumbers(adminUserInfo.CurrentOrgId)
- if getDeviceNumbersErr != nil {
- this.ErrorLog("获取床位号失败:%v", getDeviceNumbersErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- templates, getTemplatesErr := service.GetOrgPatientScheduleTemplateItems(adminUserInfo.CurrentOrgId)
- if getTemplatesErr != nil {
- this.ErrorLog("获取排班模板及其排班列表失败:%v", getTemplatesErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- if len(templates) == 0 {
- firstTemp, secondTemp, createTempErr := service.CreateTwoPatientScheduleTemplates(adminUserInfo.CurrentOrgId)
- if createTempErr != nil {
- this.ErrorLog("创建两个排班模板失败:%v", createTempErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- templates = append(templates, firstTemp, secondTemp)
-
- } else if len(templates) == 1 {
- temp, createTempErr := service.CreatePatientScheduleTemplate(adminUserInfo.CurrentOrgId)
- if createTempErr != nil {
- this.ErrorLog("创建两个排班模板失败:%v", createTempErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- templates = append(templates, temp)
- }
-
- patients, getPatientsErr := service.PatientScheduleTemplateGetAllValidPatient(adminUserInfo.CurrentOrgId)
- if getPatientsErr != nil {
- this.ErrorLog("获取患者列表失败失败:%v", getPatientsErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- // 获取本周的排班
- monday, sunday := utils.GetMondayAndSundayOfWeekDate(&now)
- schedules, getScheduleErr := service.GetWeekSchedule(adminUserInfo.CurrentOrgId, monday.Unix(), sunday.Unix())
- if getScheduleErr != nil {
- this.ErrorLog("获取本周排班失败:%v", getScheduleErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- this.ServeSuccessJSON(map[string]interface{}{
- "template_mode": mode,
- "device_numbers": deviceNumbers,
- "templates": templates,
- "patients": patients,
- "schedules": schedules,
- })
- }
-
- // /api/schtemp/p/setmode [post]
- // @param mode:int 0.不启用模板 1.单周模板 2.双周模板
- func (this *PatientScheduleTemplateAPIController) SetMode() {
- mode, _ := this.GetInt8("mode")
- if mode != 1 && mode != 2 && mode != 0 && mode != 3 && mode != 4 {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
-
- adminUserInfo := this.GetAdminUserInfo()
-
- templateMode, getTemplateModeErr := service.GetOrgPatientScheduleTemplateMode(adminUserInfo.CurrentOrgId)
- if getTemplateModeErr != nil {
- this.ErrorLog("获取排班模板启用模式失败:%v", getTemplateModeErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- } else if templateMode == nil {
- this.ErrorLog("获取不到排班模板启用模式")
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- if mode != templateMode.Mode {
- if templateMode.Mode == 0 { // 0 -> 1 或 0 -> 2 则直接清除下两周的排班
- templateMode.Mode = mode
- templateMode.ExecuteTimes = 0
- templateMode.ModifyTime = time.Now().Unix()
- updateErr := service.SavePatientScheduleTemplateModeAndClearNextTwoWeekSchedules(templateMode)
- if updateErr != nil {
- this.ErrorLog("更新排班模板启用方式(0 -> 1 或 0 -> 2)时失败:%v", updateErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- } else if mode == 0 { // 1 -> 0 或 2 -> 0 则不处理排班,但清除所有模板item
- templateMode.Mode = mode
- templateMode.ExecuteTimes = 0
- templateMode.ModifyTime = time.Now().Unix()
- updateErr := service.SavePatientScheduleTemplateModeAndClearAllTemplateItems(templateMode)
- if updateErr != nil {
- this.ErrorLog("更新排班模板启用方式(1 -> 0 或 2 -> 0)时失败:%v", updateErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- } else if templateMode.Mode == 1 && mode == 2 { // 1 -> 2 清除第二周排班
- templateMode.Mode = mode
- templateMode.ExecuteTimes = 0
- templateMode.ModifyTime = time.Now().Unix()
- updateErr := service.SavePatientScheduleTemplateModeAndClearNextSecondWeekSchedules(templateMode)
- if updateErr != nil {
- this.ErrorLog("更新排班模板启用方式(1 -> 2)时失败:%v", updateErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- } else if templateMode.Mode == 2 && mode == 1 { // 2 -> 1 清除第二周模板item,清除第二周排班,将第一周的排班重复到第二周
- templateIDs, getTemplateIDsErr := service.GetOrgPatientScheduleTemplateIDs(adminUserInfo.CurrentOrgId)
- if getTemplateIDsErr != nil {
- this.ErrorLog("获取排班模板失败:%v", getTemplateIDsErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- firstWeekItems, getFirstWeekItemsErr := service.GetOrgPatientScheduleTemplateItemsWithoutPatientByTemplateID(adminUserInfo.CurrentOrgId, templateIDs[0].ID)
- if getFirstWeekItemsErr != nil {
- this.ErrorLog("获取排班模板排班失败:%v", getFirstWeekItemsErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- templateMode.Mode = mode
- templateMode.ExecuteTimes = 0
- templateMode.ModifyTime = time.Now().Unix()
- updateErr := service.SavePatientScheduleTemplateMode2To1(templateMode, templateIDs[1].ID, firstWeekItems)
- if updateErr != nil {
- this.ErrorLog("更新排班模板启用方式(1 -> 2)时失败:%v", updateErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- }
- }
- this.ServeSuccessJSON(nil)
- }
-
- // /api/schtemp/p/update_sch [post]
- // @param template_id:int
- // @param add_schs:array'json ([ {device_number_id, patient_id, mode(treat_mode), weekday, time_type} ])
- // @param del_schs:array'json ([ {device_number_id, weekday, time_type} ])
- // @param change_schs:array'json ([ {device_number_id, patient_id, mode(treat_mode), weekday, time_type} ])
- func (this *PatientScheduleTemplateAPIController) UpdateSchedules() {
- templateID, _ := this.GetInt64("template_id")
- addSchedulesJSON := this.GetString("add_schs")
- delSchedulesJSON := this.GetString("del_schs")
- changeSchedulesJSON := this.GetString("change_schs")
- if templateID <= 0 || len(addSchedulesJSON) == 0 || len(delSchedulesJSON) == 0 || len(changeSchedulesJSON) == 0 {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
-
- var addSchedules []*ParamModelSchedule
- var delSchedules []*ParamModelSchedule
- var changeSchedules []*ParamModelSchedule
- parseErr := json.Unmarshal([]byte(addSchedulesJSON), &addSchedules)
- if parseErr != nil {
- this.ErrorLog("解析增加排班的数组参数失败:%v", parseErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
- parseErr = json.Unmarshal([]byte(delSchedulesJSON), &delSchedules)
- if parseErr != nil {
- this.ErrorLog("解析删除排班的数组参数失败:%v", parseErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
- parseErr = json.Unmarshal([]byte(changeSchedulesJSON), &changeSchedules)
- if parseErr != nil {
- this.ErrorLog("解析修改排班的数组参数失败:%v", parseErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
-
- adminUserInfo := this.GetAdminUserInfo()
- templateIDs, getTemplateIDsErr := service.GetOrgPatientScheduleTemplateIDs(adminUserInfo.CurrentOrgId)
- if getTemplateIDsErr != nil {
- this.ErrorLog("获取排班模板失败:%v", getTemplateIDsErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- } else {
- isTemplateIDExist := false
- for _, templateIDObject := range templateIDs {
- if templateIDObject.ID == templateID {
- isTemplateIDExist = true
- break
- }
- }
- if isTemplateIDExist == false {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeScheduleTemplateNotExist)
- return
- }
- }
-
- addTemplateItems := make([]*models.PatientScheduleTemplateItem, 0, len(addSchedules))
- delTemplateItems := make([]*models.PatientScheduleTemplateItem, 0, len(delSchedules))
- changeTemplateItems := make([]*models.PatientScheduleTemplateItem, 0, len(changeSchedules))
- for _, sch := range addSchedules {
- if sch.DeviceNumberID <= 0 || sch.PatientID <= 0 || sch.Weekday < 1 || sch.Weekday > 7 || sch.TimeType < 1 || sch.TimeType > 3 {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
- addTemplateItems = append(addTemplateItems, &models.PatientScheduleTemplateItem{
- DeviceNumberID: sch.DeviceNumberID,
- PatientID: sch.PatientID,
- TreatMode: sch.Mode,
- Weekday: sch.Weekday,
- TimeType: sch.TimeType,
- })
- }
- for _, sch := range delSchedules {
- if sch.DeviceNumberID <= 0 || sch.Weekday < 1 || sch.Weekday > 7 || sch.TimeType < 1 || sch.TimeType > 3 {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
- delTemplateItems = append(delTemplateItems, &models.PatientScheduleTemplateItem{
- DeviceNumberID: sch.DeviceNumberID,
- Weekday: sch.Weekday,
- TimeType: sch.TimeType,
- })
- }
- for _, sch := range changeSchedules {
- if sch.DeviceNumberID <= 0 || sch.PatientID <= 0 || sch.Weekday < 1 || sch.Weekday > 7 || sch.TimeType < 1 || sch.TimeType > 3 {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
- changeTemplateItems = append(changeTemplateItems, &models.PatientScheduleTemplateItem{
- DeviceNumberID: sch.DeviceNumberID,
- PatientID: sch.PatientID,
- TreatMode: sch.Mode,
- Weekday: sch.Weekday,
- TimeType: sch.TimeType,
- })
- }
-
- templateMode, getTemplateModeErr := service.GetOrgPatientScheduleTemplateMode(adminUserInfo.CurrentOrgId)
- if getTemplateModeErr != nil {
- this.ErrorLog("获取排班模板启用模式失败:%v", getTemplateModeErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- } else if templateMode == nil {
- this.ErrorLog("获取不到排班模板启用模式")
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- shouldUpdateNextWeekSchedules := false
- shouldUpdateNextSecondWeekSchedules := false
- if templateMode.Mode == 0 {
- this.ErrorLog("当前未开启排班模板,所以更新模板的操作将被无视")
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
- templateIDIndex := 1
- for index, templateIDObject := range templateIDs {
- if templateIDObject.ID == templateID {
- templateIDIndex = index + 1
- }
- }
- if templateMode.Mode == 1 {
- if templateIDIndex == 1 {
- shouldUpdateNextWeekSchedules = true
- shouldUpdateNextSecondWeekSchedules = true
- } else {
- this.ErrorLog("当前开启的是单周模板,所以不会更新第二个模板")
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
-
- } else { // mode == 2 => 开启双周模板时,只需更新一周排班
- if templateIDIndex == 1 {
- if templateMode.ExecuteTimes%2 == 0 {
- shouldUpdateNextWeekSchedules = true
- shouldUpdateNextSecondWeekSchedules = false
- } else {
- shouldUpdateNextWeekSchedules = false
- shouldUpdateNextSecondWeekSchedules = true
- }
-
- } else {
- if templateMode.ExecuteTimes%2 == 0 {
- shouldUpdateNextWeekSchedules = false
- shouldUpdateNextSecondWeekSchedules = true
- } else {
- shouldUpdateNextWeekSchedules = true
- shouldUpdateNextSecondWeekSchedules = false
- }
-
- }
- }
-
- updateErr := service.UpdateScheduleTemplate(adminUserInfo.CurrentOrgId, templateID, addTemplateItems, delTemplateItems, changeTemplateItems, shouldUpdateNextWeekSchedules, shouldUpdateNextSecondWeekSchedules)
- if updateErr != nil {
- this.ErrorLog("更新排班模板排班失败:%v", updateErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDBUpdate)
- return
- }
-
- newItems, getTemplateItemsErr := service.GetOrgPatientScheduleTemplateItemsByTemplateID(adminUserInfo.CurrentOrgId, templateID)
- if getTemplateItemsErr != nil {
- this.ErrorLog("获取排班模板排班失败:%v", getTemplateItemsErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- this.ServeSuccessJSON(map[string]interface{}{
- "items": newItems,
- })
- }
-
- type ParamModelSchedule struct {
- DeviceNumberID int64 `json:"device_number_id"`
- PatientID int64 `json:"patient_id"`
- Mode int64 `json:"mode"`
- Weekday int8 `json:"weekday"`
- TimeType int8 `json:"time_type"`
- }
|