String rule = context.data.field_2d5dZ__c as String
String record_type = context.data.record_type as String
String id = context.data._id as String
String teacherID = context.data.field_0jhWj__c as String
String opuserid=context.userId as String
Map result = [:]
List resultList = []
Map date = [:]
long now = (Date.now() as Date).toTimestamp()
String flag = '0'
String making_people = context.userId as String
def(boolean errorP, List dataP, String messageP) = Fx.auth.user.getRolesByUsers(1, [making_people])
if (errorP) {
log.info("error: " + messageP)
} else {
log.info(dataP)
dataP.find{i ->
Map tmp_people = i as Map
if(tmp_people.containsValue("61302c0bbc2704167c5e2628")||tmp_people.containsValue("61302c370c2ec51a396f1f2c")||tmp_people.containsValue("61302c43a6b9516fc5930d79" )){
flag = '2'
log.info("教务员/大项目专员/大项目经理在操作该页面!")
return true
}else{
flag = '1'
log.info("校长在操作该页面")
}
if(tmp_people.containsValue("627db5503e048974906fd874")){
flag = '1'
log.info("受控的角色操作了页面")
return true
}
}
}
List details = context.details["object_3s7hD__c"] as List
List details_date = []
details.each{i ->
Map details_tmp = i as Map
details_date.add(details_tmp.field_dX12n__c)
}
log.info("从排课明细中取出日期:"+details_date)
details_date = Fx.utils.listUnique(details_date)
log.info("去重(从排课明细中取出)的日期:"+details_date)
String details_date_str = ''
details_date.eachWithIndex{ item,int index ->
String tmp = item as String
if( index == 0 ){
details_date_str = tmp
}else{
details_date_str+=","+tmp
}
}
log.info("排课明细里的日期提取为字符串:"+details_date_str)
context.data.field_44c1g__c = details_date_str
context.data.field_jjtcI__c = details_date.size()
if( record_type == 'default__c'){
log.info("业务类型为:小课/大课")
FindAttribute findAttribute = FindAttribute.builder()
.useCurrentIdentity(false)
.forceQueryFromDB(false)
.build()
def (Boolean errorR,Map dataR,String errorMessageR) = Fx.object.findById('object_317OI__c', rule)
if( errorR ){
log.info(errorMessageR)
}else{
log.info("排课规则:"+dataR)
date.put("startTime", dataR.field_ymsnR__c as String)
date.put("endTime", dataR.field_7325N__c as String)
date.put("continuousDates", dataR.field_BKi6y__c as String)
log.info(date)
}
log.info("时间范围:"+date)
if(date!=null && date.startTime!=null && date.endTime!=null && date.continuousDates!=null){
long ruleStartLong = (Date.of(date.startTime as String) as Date).toTimestamp() as long
long ruleEndLong = (Date.of(date.endTime as String) as Date).toTimestamp() as long
def (Boolean error1,QueryResult data1,String errorMessage1) =
Fx.object.find("object_uLDSo__c",[["field_GO0j3__c": Operator.GTE(ruleStartLong)],["field_9ktFj__c":teacherID],["life_status":Operator.NE("invalid")],["field_u72Hj__c":Operator.NE("Unlock")]],["create_time":1], 100, 0, findAttribute);
if( error1 ){
log.info(errorMessage1)
}else{
if( data1.size>0 ){
log.info("找到"+data1.size+"条讲师请假")
data1.dataList.each{i ->
log.info("====")
Map tmp = i as Map
Date tmp_start = (tmp.field_nUJ12__c as DateTime).toDate()
Date tmp_end = (tmp.field_GO0j3__c as DateTime).toDate()
long thisStartLong = tmp_start.toTimestamp()
long thisEndLong = tmp_end.toTimestamp()
log.info("开始日期:"+tmp_start+" 结束日期:"+tmp_end)
Range range = Ranges.of(1,30)
Date cannotDate = Date.of(tmp_start as String) as Date
resultList.add(cannotDate as String)
range.each{
long cannotDateLong = cannotDate.toTimestamp()
if( cannotDateLong < thisEndLong ){
cannotDate = cannotDate+1.days
resultList.add(cannotDate as String)
}
}
log.info((tmp.name as String)+"在排课规则范围内的讲师请假日期(排课开始日期~排课结束日期):"+resultList)
}
log.info("总的讲师请假日期集合:"+resultList)
}
}
List pk = []
def (Boolean error2,QueryResult data2,String errorMessage2) =
Fx.object.find("object_3s7hD__c",[["field_kGmGb__c":Operator.NE(id)],["life_status":Operator.NIN(["invalid"])],["field_dX12n__c": Operator.LTE(ruleEndLong)],["field_dX12n__c": Operator.GTE(ruleStartLong)],["field_HLros__c":teacherID]],["create_time":1], 100, 0, findAttribute);
if( error2 ){
log.info(errorMessage2)
}else{
if(data2.size>0){
log.info("共找到"+data2.size+"条排课明细")
data2.dataList.eachWithIndex { i, int index ->
Map tmp = i as Map
log.info("=======")
Date cannotDate = tmp.field_dX12n__c as Date
log.info("主属性="+tmp.name)
log.info("参与排课的日期:"+cannotDate)
pk.add(cannotDate as String)
}
log.info("讲师参与排课的日期:"+pk)
}else{
log.info("在规则内没有排课明细")
}
}
resultList = (resultList + pk).sort(true)
resultList = Fx.utils.listUnique(resultList)
log.info("最终日期:"+resultList)
}
if(teacherID == '627caeca72b3950001377d94'){
resultList = []
}
List date_str_list = resultList
log.info("讲师不能上课日期:"+date_str_list)
List intersect_list = []
date_str_list.each{i ->
if( details_date_str.contains(i as String) ){
log.info(i as String)
intersect_list.add(i as String)
}
}
log.info("交集日期:"+intersect_list)
if(intersect_list!=null&&intersect_list.size()>0){
intersect_list = Fx.utils.listUnique(intersect_list)
if(opuserid=="1007"){
}else{
return ["error":true, "errorMessage":"讲师在"+intersect_list+"请假/已有排课,请修改排课明细的日期!", "block":true ]
}
}
String isX = 'N'
String course = context.data.field_tP1kG__c as String
String school = context.data.field_cAn5H__c as String
String school_level = context.data.field_Pzj6M__c as String
APIResult ret = Fx.object.findOne("ProductObj",
FQLAttribute.builder()
.columns(["_id", "name","field_B5b0b__c"])
.queryTemplate( QueryTemplate.AND(["_id": QueryOperator.EQ(course)] ))
.build(),
SelectAttribute.builder()
.needInvalid(false)
.build());
if(ret.isError()){
log.info(ret.message());
}else{
log.info(ret.data)
if( ((ret.data as Map).field_B5b0b__c as String )=='Z3tuqWYM8'){
isX = 'Y'
}
}
if( school_level!=null &&school_level == "A+" ){
school_level = "AA"
}
log.info("校区等级:"+school_level)
def (Boolean error,QueryResult data,String errorMessage) =
Fx.object.find("object_tcZ0f__c",[["field_S3bYK__c":rule],["field_SN6AR__c": Operator.EQ(school_level)]],10,0);
if( error ){
log.info("查找课程期数失败:"+errorMessage)
}else{
log.info("查找对应校区等级的课程期数:"+data.total)
if( data.total>0 ){
log.info("有对应的课程期数限制:"+data)
Map tmp = data.dataList[0] as Map
BigDecimal dz_quota = tmp.field_51I61__c as BigDecimal
BigDecimal others_quota = tmp.field_J2ql9__c as BigDecimal
log.info("当众讲话可排期数:"+dz_quota+" 其他可排:"+others_quota)
def (Boolean error12,QueryResult data12,String errorMessage12) =
Fx.object.find("object_G2aY4__c",[["field_2d5dZ__c":rule],["field_cAn5H__c": Operator.EQ(school)],["_id":Operator.NE(context.data._id as String)],["field_tP1kG__c":Operator.EQ(course)]],10,0);
if( error12 ){
log.info("查找课程期数失败:"+errorMessage12)
}else{
log.info("查找已排课表:"+data12)
if( course == "612d9a2a2a65980001f062bf" && (data12.total as BigDecimal)>= dz_quota ){
log.info("当众讲话已达规则下可排课额度")
return ["error":true, "errorMessage":"您校区的《当众讲话》已达本月的排课次数上限,不允许再排课!", "block":true ]
}else if(course != "612d9a2a2a65980001f062bf" && isX =='Y' && (data12.total as BigDecimal)>= others_quota){
log.info("已达规则下可排课额度")
return ["error":true, "errorMessage":"您校区的《其他小课》已达本月的排课次数上限,不允许再排课!", "block":true ]
}else{
log.info("没有已排课表")
}
}
}else{
log.info("没有对应的课程期数限制")
}
}
Boolean isSameCity = false
APIResult retRule = Fx.object.find("object_317OI__c",
FQLAttribute.builder()
.columns(["_id", "field_23Kq4__c"])
.queryTemplate( QueryTemplate.AND(["_id": QueryOperator.EQ(rule)] ))
.build(),
SelectAttribute.builder()
.needInvalid(false)
.build());
if(retRule.isError()){
log.info(retRule.message());
}else{
log.info(retRule.data)
if( (retRule.data as QueryResult).size>0 ){
isSameCity = ((retRule.data as QueryResult).dataList[0] as Map).field_23Kq4__c as Boolean
}
}
if(details_date !=null && details_date!=[]&& teacherID!=null && teacherID!='627caeca72b3950001377d94'&&isSameCity){
List days_flag = []
int days_count = 0
List date_list = details_date
date_list.each{i ->
Date tmp_date = Date.of(i as String)
if( (tmp_date.dayOfWeek as int) == 5){
days_flag.add(["50":tmp_date])
days_count+=1
}else if((tmp_date.dayOfWeek as int) == 6){
days_flag.add(["60":tmp_date])
days_count+=1
}else if((tmp_date.dayOfWeek as int) == 7){
days_flag.add(["70":tmp_date])
days_count+=1
}
}
List find_days = []
if( days_count!=0||days_count!=3 ){
if( days_count == 1 ){
log.info("选了三天中的一天")
int dayOfWeek_tmp_int = 0
List dayOfWeek_tmp = []
days_flag.each{i ->
dayOfWeek_tmp.add(((i as Map).keys() as List)[0] )
}
dayOfWeek_tmp.each{i1 ->
if( (i1 as int)>dayOfWeek_tmp_int ){
dayOfWeek_tmp_int = i1 as int
}
}
switch(dayOfWeek_tmp_int){
case 50:
List dayOfWeek_date_list = days_flag.collect{x ->x["50"]} as List
find_days.add((dayOfWeek_date_list[0] as Date)+1.days)
find_days.add((dayOfWeek_date_list[0] as Date)+2.days)
break;
case 60:
List dayOfWeek_date_list = days_flag.collect{x ->x["60"]}
find_days.add((dayOfWeek_date_list[0] as Date)+1.days)
find_days.add((dayOfWeek_date_list[0] as Date)-1.days)
break;
case 70:
List dayOfWeek_date_list = days_flag.collect{x ->x["70"]}
find_days.add((dayOfWeek_date_list[0] as Date)-1.days)
find_days.add((dayOfWeek_date_list[0] as Date)-2.days)
break;
default: break;
}
}
if( days_count == 2 ){
log.info("选了三天中的两天")
List dayOfWeek_tmp = []
days_flag.each{i ->
dayOfWeek_tmp.add(((i as Map).keys() as List)[0] )
}
int dayOfWeek_tmp_int = 0
dayOfWeek_tmp.each{i1 ->
dayOfWeek_tmp_int += (i1 as int)
}
log.info("天数总和:"+dayOfWeek_tmp_int+" days_flag:"+days_flag)
switch(dayOfWeek_tmp_int){
case 110:
List dayOfWeek_date_list = days_flag.collect{x ->x["60"]}
log.info("110时取出的日期:"+dayOfWeek_date_list)
dayOfWeek_date_list.find{ i2 ->
if( (i2 as Date)!=null ){
find_days.add(((i2 as Date)+1.days).toTimestamp() as long)
return true
}
}
break;
case 120:
List dayOfWeek_date_list = days_flag.collect{x ->x["50"]}
log.info("120时取出的日期:"+dayOfWeek_date_list)
dayOfWeek_date_list.find{ i2 ->
if( (i2 as Date)!=null ){
find_days.add(((i2 as Date)+1.days).toTimestamp() as long)
return true
}
}
break;
case 130:
List dayOfWeek_date_list = days_flag.collect{x ->x["60"]}
log.info("130时取出的日期:"+dayOfWeek_date_list)
dayOfWeek_date_list.find{ i2 ->
if( (i2 as Date)!=null ){
find_days.add(((i2 as Date)-1.days).toTimestamp() as long)
return true
}
}
break;
default: break;
}
}
log.info("需要查找的日期:"+find_days+'讲师:'+teacherID)
if(find_days!=null&&find_days!=[]&&find_days.size()>0){
APIResult ret0 = Fx.object.find("object_3s7hD__c",
FQLAttribute.builder()
.columns(["field_4sD21__c","name"])
.queryTemplate( QueryTemplate.AND(["field_HLros__c": QueryOperator.EQ(teacherID)],["field_dX12n__c":Operator.IN(find_days)] ))
.build(),
SelectAttribute.builder()
.needInvalid(false)
.build());
if(ret0.isError()){
log.info(ret0.message());
}else{
log.info("周五周六周日的排课明细"+ret0.data)
QueryResult qr = ret0.data as QueryResult
String city_standard = ''
if( qr.size>0 ){
APIResult ret1 = Fx.object.findOne("object_2bwgw__c",
FQLAttribute.builder()
.columns(["field_kx487__c"])
.queryTemplate( QueryTemplate.AND(["_id": QueryOperator.EQ(school)] ))
.build(),
SelectAttribute.builder()
.needInvalid(false)
.build());
if(ret1.isError()){
log.info(ret1.message());
}else{
log.info("校区"+school+"的城市为:"+ret1.data)
city_standard = (ret1.data as Map).field_kx487__c as String
}
List pk_dayOfWeek = (qr.dataList as List)
String flag_1 = 'Y'
List campus_dayOfWeek = pk_dayOfWeek.collect{x ->x["field_4sD21__c"]} as List
campus_dayOfWeek.find{i2 ->
APIResult ret2 = Fx.object.findOne("object_2bwgw__c",
FQLAttribute.builder()
.columns(["name","field_kx487__c"])
.queryTemplate( QueryTemplate.AND(["_id": QueryOperator.EQ(i2 as String)] ))
.build(),
SelectAttribute.builder()
.needInvalid(false)
.build());
if(ret2.isError()){
log.info(ret2.message());
}else{
log.info("周五六日排课校区的城市为:"+ret2.data)
String city= (ret2.data as Map)."field_kx487__c" as String
log.info("city:"+city+" city_standard:"+city_standard)
if( city!=null && city!=''&& !city.contains(city_standard)){
if((city.contains('484')&&city_standard.contains('479'))||(city.contains('479')&&city_standard.contains('484'))){
log.info("广佛")
}else{
flag_1 = 'N'
return true
}
}else{
log.info("城市为空或城市相等!")
}
}
}
if( flag_1 == 'N' ){
}
}else{
log.info("周五六日暂时无多个城市的情况")
}
}
}
}else{
log.info("没有选到周五周六日")
}
}
}else{
log.info("其他类型的排课,不对日期、期数做校验")
}
String skjs = context.data.field_9mq1d__c
log.info(skjs)
String pkmc = context.data.field_tP1kG__c
log.info("排课课程名称:"+pkmc)
def js = Fx.object.find("object_q4TS1__c",[["name":skjs]],10, 0)
if(js[0]){
log.info("查询失败,原因:"+ js[2])
}else{
}
List jsids1 = js[1]["dataList"]["_id"] as List
String jsids = jsids1[0] as String
log.info("讲师ID:"+jsids)
def sckc = Fx.object.find("object_QKrk8__c",[["field_NwaBP__c":jsids]],50, 0)
if(sckc[0]){
log.info("查询失败,原因:"+ sckc[2])
}else{
}
String record = context.data.record_type
String RS = context.data.field_oVkl9__c
List A = sckc[1]["dataList"] as List
List jssckc = []
A.each{
itemA ->
String kcmc = itemA["field_r0j45__c"]
jssckc.add(kcmc)
}
log.info("取出擅长课程:"+jssckc)
Boolean a = jssckc.containsAll(pkmc)
log.info(a)
if( a == false && jsids != "627caeca72b3950001377d94" && record == "default__c" && RS == null ){
return ["error":true, "errorMessage":"该老师擅长课程没有这门课,请检查该老师的擅长课程!", "block":true ]
}
String JiaoShi=context.data.field_McOk7__c as String
def jl = Fx.object.find("object_01jMZ__c",[["field_a6sO9__c":jsids,"field_1zrM6__c":JiaoShi]],100, 0)
if(jl[0]){
log.info("查询失败,原因:"+ jl[2])
}else{
}
List jsjl1 = jl[1]["dataList"]["field_87mAQ__c"] as List
String jsjl = jsjl1[0] as String
log.info("授课范围:"+jsjl)
if( jsjl != "Y" && jsids != "627caeca72b3950001377d94" && record == "default__c" && RS == null ){
return ["error":true, "errorMessage":"该老师授课距离不够,请检查该老师的授课距离!", "block":true ]
}