package customerform
import (
"appPlatform/models/modelAppPlatform"
"appPlatform/models/modelshr"
"appPlatform/models/modelssystempermission"
"appPlatform/overall"
"appPlatform/overall/publicmethod"
"encoding/json"
"fmt"
"strconv"
"strings"
"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 = gormDb . Where ( "f.`states` = ?" , 1 )
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 )
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2025 - 04 - 15 14 : 47 : 41
@ 功能 : 根据角色配置
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func GainRolePower ( userCont modelshr . ManCont ) ( userKey [ ] string , isTrue bool ) {
isTrue = false
if userCont . Role == "" {
return
}
roleAry := strings . Split ( userCont . Role , "," )
if len ( roleAry ) < 1 {
return
}
for _ , v := range roleAry {
var rolePwoerInfo modelssystempermission . RoleEmpower
rolePwoerInfo . GetCont ( map [ string ] interface { } { "`role_id`" : v , "`system`" : "appsystem" } , "`level`" , "`organization`" )
switch rolePwoerInfo . Level {
case 1 :
var postUsrt [ ] int64
overall . CONSTANT_DB_HR . Model ( & modelshr . PersonArchives { } ) . Select ( "`key`" ) . Where ( "`emp_type` BETWEEN 1 AND 10" ) . Where ( "`position` = ?" , userCont . Position ) . Find ( & postUsrt )
if len ( postUsrt ) > 0 {
for _ , pv := range postUsrt {
keyStr := strconv . FormatInt ( pv , 10 )
if ! publicmethod . IsInTrue ( keyStr , userKey ) {
userKey = append ( userKey , keyStr )
}
}
}
case 2 :
var postUsrt [ ] int64
overall . CONSTANT_DB_HR . Model ( & modelshr . PersonArchives { } ) . Select ( "`key`" ) . Where ( "`emp_type` BETWEEN 1 AND 10" ) . Where ( "`maindeparment` = ?" , userCont . MainDeparment ) . Find ( & postUsrt )
if len ( postUsrt ) > 0 {
for _ , pv := range postUsrt {
keyStr := strconv . FormatInt ( pv , 10 )
if ! publicmethod . IsInTrue ( keyStr , userKey ) {
userKey = append ( userKey , keyStr )
}
}
}
case 3 :
var postUsrt [ ] int64
overall . CONSTANT_DB_HR . Model ( & modelshr . PersonArchives { } ) . Select ( "`key`" ) . Where ( "`emp_type` BETWEEN 1 AND 10" ) . Where ( "`company` = ?" , userCont . Company ) . Find ( & postUsrt )
if len ( postUsrt ) > 0 {
for _ , pv := range postUsrt {
keyStr := strconv . FormatInt ( pv , 10 )
if ! publicmethod . IsInTrue ( keyStr , userKey ) {
userKey = append ( userKey , keyStr )
}
}
}
case 4 :
if rolePwoerInfo . Organization != "" {
orgAry := strings . Split ( rolePwoerInfo . Organization , "," )
if len ( orgAry ) > 0 {
var orgId [ ] int64
for _ , ov := range orgAry {
oId , _ := strconv . ParseInt ( ov , 10 , 64 )
var sunOrg publicmethod . GetOrgAllParent
sunOrg . GetOrgSun ( oId )
sunOrg . Id = append ( sunOrg . Id , oId )
orgId = append ( orgId , sunOrg . Id ... )
}
if len ( orgId ) > 0 {
orgMap := publicmethod . RemoveDuplicate [ int64 ] ( orgId )
var postUsrt [ ] int64
overall . CONSTANT_DB_HR . Model ( & modelshr . PersonArchives { } ) . Select ( "`key`" ) . Where ( "`emp_type` BETWEEN 1 AND 10" ) . Where ( "`maindeparment` IN ?" , orgMap ) . Find ( & postUsrt )
if len ( postUsrt ) > 0 {
for _ , pv := range postUsrt {
keyStr := strconv . FormatInt ( pv , 10 )
if ! publicmethod . IsInTrue ( keyStr , userKey ) {
userKey = append ( userKey , keyStr )
}
}
}
}
}
}
case 5 :
isTrue = true
default :
isTrue = false
userKey = [ ] string { }
}
}
return
}