package customerform import ( "appPlatform/models/modelAppPlatform" "appPlatform/models/modelshr" "appPlatform/overall" "appPlatform/overall/publicmethod" "encoding/json" "fmt" "github.com/gin-gonic/gin" ) /* * @ 作者: 秦东 @ 时间: 2025-03-07 14:05:56 @ 功能: 日历数据处理 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) CalendarDataList(c *gin.Context) { var requestData CalendarSearch c.ShouldBindJSON(&requestData) if len(requestData.TimeAry) < 1 && len(requestData.TimeMonthAry) < 1 { publicmethod.Result(1, requestData, c, "未知日期!无法获取字段!2") return } if requestData.Search.FormId == "" { publicmethod.Result(1, requestData, c, "未知表单!无法获取字段!") return } if requestData.Search.Page == 0 { requestData.Search.Page = 1 } if requestData.Search.PageSize == 0 { requestData.Search.Page = 20 } //Step1:获取搜索栏目的内容 var listField []SearchButtonInfo json.Unmarshal([]byte(requestData.Search.SearchData), &listField) //Step2:获取当前操作人 context, _ := c.Get(overall.MyContJwt) var userCont modelshr.ManCont userCont.GetLoginCont(context) //Step3:获取当前信息表单咨询 var formInfo modelAppPlatform.CustomerFormView err := formInfo.GetCont(map[string]interface{}{"`cfid`": requestData.Search.FormId, "`status`": 1}, "`tablekey`", "`table_structure`", "`mastesform`", "`mastesformjson`", "`listjson`", "`flowIsOpen`", "`flowkey`") if err != nil { publicmethod.Result(1, err, c, "未知表单!无法获取字段!") return } //Step 4: 拆分出列表信息 var listFieldsMap ListPageFields json.Unmarshal([]byte(formInfo.ListJson), &listFieldsMap) //Step 5: 拆分出主表单信息 var formJsonCont CustomerFormMaster json.Unmarshal([]byte(formInfo.MastesFormJson), &formJsonCont) //Step 6:判断当前是否为正月展示 if requestData.Types != 1 { //非正月 var listSynv CalendarList for _, v := range requestData.TimeAry { syncSeting.Add(1) go listSynv.HaveEveryDayData(v, formInfo.TableKey, userCont, requestData.Search, listField, listFieldsMap.View, formInfo.ListJson, formJsonCont) } syncSeting.Wait() sendListArt := TimeHaveAry(requestData.TimeAry, listSynv.List) if len(sendListArt) == 1 { var onInfo TimeAryInfo for _, v := range sendListArt { onInfo = v } publicmethod.Result(0, onInfo, c) return } publicmethod.Result(0, sendListArt, c) } else { //正月 var sendMonthList []interface{} for _, v := range requestData.TimeMonthAry { //按周拆分 var listSynv CalendarList for _, tv := range v { //一周内的天 syncSeting.Add(1) go listSynv.HaveEveryDayData(tv, formInfo.TableKey, userCont, requestData.Search, listField, listFieldsMap.View, formInfo.ListJson, formJsonCont) } syncSeting.Wait() sendMonthList = append(sendMonthList, TimeHaveAry(v, listSynv.List)) } publicmethod.Result(0, sendMonthList, c) } } /* * @ 作者: 秦东 @ 时间: 2025-03-07 14:27:24 @ 功能: 获取指定日期的数据 @ 参数 #day 日历单个日期参数 #tableName 要操作得数据表 #userCont 当前操作人 #Search 搜索条件 #listField 自定义表单查询条件 #viewCondition 视图设定 #listJson 字段处理 @ 返回值 # @ 方法原型 # */ func (c *CalendarList) HaveEveryDayData(day TimeAryInfo, tableName string, userCont modelshr.ManCont, Search FormPageListAttr, listField []SearchButtonInfo, viewCondition map[string]ViewInfo, listJson string, formJsonCont CustomerFormMaster) { defer syncSeting.Done() tableName = fmt.Sprintf("`%v` as f", tableName) //表明 gormDb := overall.CONSTANT_DB_CustomerForm.Table(tableName).Select("f.*,t.status as taskStatus,t.runFlowId") gormDb = gormDb.Joins("LEFT JOIN `taskrecord` as t ON f.masters_key = t.masters_key") gormDb = gormDb.Where("f.`creater` = ? ", userCont.Key) gormDb = gormDb.Where("f.`states` BETWEEN ? AND ?", 1, 2) gormDb = AnalysisSerachTermSqlIng(listField, gormDb) //将查询条件转换成 startTime, endTime := publicmethod.OenDayStartOrEndTime(day.Date, 1) if class, isOk := viewCondition["date"]; isOk { //解析视图设定参数 if class.Status { //当前参数启用 if class.Form.StartTime != "" && class.Form.EndTime != "" { whySql := fmt.Sprintf("f.`%v` BETWEEN %v AND %v OR f.`%v` BETWEEN %v AND %v", class.Form.StartTime, startTime, endTime, class.Form.EndTime, startTime, endTime) gormDb = gormDb.Where(whySql) fmt.Printf("语句1===》%v\n", whySql) } else if class.Form.StartTime != "" && class.Form.EndTime == "" { whySql := fmt.Sprintf("f.`%v` BETWEEN %v AND %v", class.Form.StartTime, startTime, endTime) gormDb = gormDb.Where(whySql) fmt.Printf("语句2===》%v\n", whySql) } else if class.Form.StartTime == "" && class.Form.EndTime != "" { whySql := fmt.Sprintf("f.`%v` BETWEEN %v AND %v", class.Form.EndTime, startTime, endTime) gormDb = gormDb.Where(whySql) fmt.Printf("语句3===》%v\n", whySql) } else { whySql := fmt.Sprintf("f.`creater_time` BETWEEN %v AND %v", startTime, endTime) fmt.Printf("语句4===》%v\n", whySql) gormDb = gormDb.Where(whySql) } } else { whySql := fmt.Sprintf("f.`creater_time` BETWEEN %v AND %v", startTime, endTime) gormDb = gormDb.Where(whySql) } } else { whySql := fmt.Sprintf("f.`creater_time` BETWEEN %v AND %v", startTime, endTime) gormDb = gormDb.Where(whySql) } var formList []map[string]interface{} err := gormDb.Order("`id` DESC").Find(&formList).Error if listJson != "" { var listFieldsMap ListPageFields err = json.Unmarshal([]byte(listJson), &listFieldsMap) if err == nil { formList = listFieldsMap.DevelopSpecificationsSend(formList, formJsonCont) } } if err == nil { inDate := publicmethod.MapOut[string]() inDate[day.Date] = formList c.List = append(c.List, inDate) } }