@@ -1200,4 +1200,207 @@ public class CphGoodApplyServiceImpl extends ServiceImpl<CphGoodApplyMapper, Cph
if ( insertAudit < = 0 ) throw new RuntimeException ( " 添加审核记录失败 " ) ;
return AjaxResult . success ( ) ;
}
@Override
public AjaxResult checkXyjxjEligibility ( String stuNo , String typeCode ) {
try {
SrsStudent student = srsStudentMapper . selectSrsStudentByStuNo ( stuNo ) ;
if ( student = = null ) {
return AjaxResult . error ( " 学生不存在 " ) ;
}
List < CphGoodTypeCode > canTypes = cphGoodApplyMapper . listXyjxjCanType ( ) ;
if ( canTypes = = null | | canTypes . isEmpty ( ) ) {
return AjaxResult . error ( " 当前无可申请的奖项 " ) ;
}
CphCoursePassCount passCount = cphGoodApplyMapper . getOwnPassCountByCode ( stuNo , canTypes . get ( 0 ) . getTypeCode ( ) ) ;
if ( passCount = = null ) {
return AjaxResult . error ( " 无法获取课程成绩信息 " ) ;
}
if ( passCount . unpassCount > 0 ) {
Map < String , Object > result = buildBaseResult ( stuNo , student . getName ( ) , false ) ;
result . put ( " reason " , " 您有课程成绩未通过,不能参加评优评先 " ) ;
result . put ( " details " , buildCoursePassDetails ( false , passCount . unpassCount ) ) ;
return AjaxResult . success ( result ) ;
}
CphSearch searchParam = new CphSearch ( ) ;
searchParam . setStuNo ( stuNo ) ;
searchParam . setCode ( canTypes . get ( 0 ) . getTypeCode ( ) ) ;
CphClassRankScore rankData = cphGoodApplyMapper . getOwnRankByCode ( searchParam ) ;
if ( rankData = = null ) {
return AjaxResult . error ( " 无法获取排名信息 " ) ;
}
BigDecimal cphPer = new BigDecimal ( rankData . cphClassRank )
. divide ( new BigDecimal ( rankData . classCount ) , 4 , RoundingMode . HALF_UP )
. multiply ( new BigDecimal ( 100 ) ) ;
BigDecimal stuPer = new BigDecimal ( rankData . stuClassRank )
. divide ( new BigDecimal ( rankData . classCount ) , 4 , RoundingMode . HALF_UP )
. multiply ( new BigDecimal ( 100 ) ) ;
boolean cphPassed = cphPer . compareTo ( new BigDecimal ( 50 ) ) < = 0 ;
if ( ! cphPassed ) {
Map < String , Object > result = buildBaseResult ( stuNo , student . getName ( ) , false ) ;
result . put ( " reason " , " 您的综合素质排名不达标,无法申请学业奖学金 " ) ;
result . put ( " details " , buildRankDetails ( rankData , cphPer , stuPer , false , false ) ) ;
return AjaxResult . success ( result ) ;
}
if ( typeCode ! = null & & ! typeCode . isEmpty ( ) ) {
return checkSpecificLevel ( stuNo , student . getName ( ) , typeCode , rankData , cphPer , stuPer ) ;
} else {
return checkAllLevels ( stuNo , student . getName ( ) , rankData , cphPer , stuPer , canTypes ) ;
}
} catch ( Exception ex ) {
return AjaxResult . error ( " 资格检查失败: " + ex . getMessage ( ) ) ;
}
}
private AjaxResult checkSpecificLevel ( String stuNo , String stuName , String typeCode ,
CphClassRankScore rankData , BigDecimal cphPer , BigDecimal stuPer ) {
BigDecimal maxStuPer ;
String typeName ;
if ( typeCode . contains ( " YDXYJXJ " ) ) {
maxStuPer = new BigDecimal ( 3 ) ;
typeName = " 一等奖学金 " ;
} else if ( typeCode . contains ( " EDXYJXJ " ) ) {
maxStuPer = new BigDecimal ( 6 ) ;
typeName = " 二等奖学金 " ;
} else if ( typeCode . contains ( " SDXYJXJ " ) ) {
maxStuPer = new BigDecimal ( 9 ) ;
typeName = " 三等奖学金 " ;
} else {
return AjaxResult . error ( " 无效的奖项类型 " ) ;
}
boolean stuPassed = stuPer . compareTo ( maxStuPer ) < = 0 ;
boolean eligible = stuPassed ;
Map < String , Object > result = buildBaseResult ( stuNo , stuName , eligible ) ;
result . put ( " typeCode " , typeCode ) ;
result . put ( " typeName " , typeName ) ;
result . put ( " reason " , eligible ?
" 您符合 " + typeName + " 申请条件 " :
" 您不符合 " + typeName + " 申请条件 " ) ;
result . put ( " details " , buildRankDetails ( rankData , cphPer , stuPer , true , stuPassed , maxStuPer ) ) ;
return AjaxResult . success ( result ) ;
}
private AjaxResult checkAllLevels ( String stuNo , String stuName , CphClassRankScore rankData ,
BigDecimal cphPer , BigDecimal stuPer , List < CphGoodTypeCode > canTypes ) {
List < Map < String , Object > > results = new java . util . ArrayList < > ( ) ;
String highestEligible = null ;
String highestTypeName = null ;
String [ ] typeCodes = { " YDXYJXJ " , " EDXYJXJ " , " SDXYJXJ " } ;
String [ ] typeNames = { " 一等奖学金 " , " 二等奖学金 " , " 三等奖学金 " } ;
BigDecimal [ ] maxStuPers = { new BigDecimal ( 3 ) , new BigDecimal ( 6 ) , new BigDecimal ( 9 ) } ;
for ( int i = 0 ; i < typeCodes . length ; i + + ) {
boolean stuPassed = stuPer . compareTo ( maxStuPers [ i ] ) < = 0 ;
boolean eligible = stuPassed ;
Map < String , Object > levelResult = new HashMap < > ( ) ;
levelResult . put ( " typeCode " , typeCodes [ i ] ) ;
levelResult . put ( " typeName " , typeNames [ i ] ) ;
levelResult . put ( " eligible " , eligible ) ;
levelResult . put ( " reason " , eligible ?
" 您符合 " + typeNames [ i ] + " 申请条件 " :
" 您不符合 " + typeNames [ i ] + " 申请条件 " ) ;
results . add ( levelResult ) ;
if ( eligible & & highestEligible = = null ) {
highestEligible = typeCodes [ i ] ;
highestTypeName = typeNames [ i ] ;
}
}
boolean overallEligible = highestEligible ! = null ;
Map < String , Object > result = buildBaseResult ( stuNo , stuName , overallEligible ) ;
result . put ( " highestEligible " , highestEligible ) ;
result . put ( " highestTypeName " , highestTypeName ) ;
result . put ( " reason " , overallEligible ?
" 您符合 " + highestTypeName + " 申请条件 " :
" 您不符合学业奖学金申请条件 " ) ;
result . put ( " results " , results ) ;
result . put ( " details " , buildRankDetails ( rankData , cphPer , stuPer , true , true ) ) ;
return AjaxResult . success ( result ) ;
}
private Map < String , Object > buildBaseResult ( String stuNo , String stuName , boolean eligible ) {
Map < String , Object > result = new HashMap < > ( ) ;
result . put ( " stuNo " , stuNo ) ;
result . put ( " stuName " , stuName ) ;
result . put ( " eligible " , eligible ) ;
return result ;
}
private Map < String , Object > buildCoursePassDetails ( boolean passed , int unpassCount ) {
Map < String , Object > details = new HashMap < > ( ) ;
Map < String , Object > courseCheck = new HashMap < > ( ) ;
courseCheck . put ( " passed " , passed ) ;
courseCheck . put ( " message " , passed ? " 所有课程均已通过 " :
" 有 " + unpassCount + " 门课程成绩未通过 " ) ;
details . put ( " coursePass " , courseCheck ) ;
return details ;
}
private Map < String , Object > buildRankDetails ( CphClassRankScore rankData , BigDecimal cphPer ,
BigDecimal stuPer , boolean cphPassed , boolean stuPassed ) {
return buildRankDetails ( rankData , cphPer , stuPer , cphPassed , stuPassed , null ) ;
}
private Map < String , Object > buildRankDetails ( CphClassRankScore rankData , BigDecimal cphPer ,
BigDecimal stuPer , boolean cphPassed ,
boolean stuPassed , BigDecimal maxStuPer ) {
Map < String , Object > details = new HashMap < > ( ) ;
Map < String , Object > courseCheck = new HashMap < > ( ) ;
courseCheck . put ( " passed " , true ) ;
courseCheck . put ( " message " , " 所有课程均已通过 " ) ;
details . put ( " coursePass " , courseCheck ) ;
Map < String , Object > cphCheck = new HashMap < > ( ) ;
cphCheck . put ( " passed " , cphPassed ) ;
cphCheck . put ( " currentRank " , rankData . cphClassRank ) ;
cphCheck . put ( " classCount " , rankData . classCount ) ;
cphCheck . put ( " percentage " , cphPer ) ;
if ( maxStuPer ! = null ) {
cphCheck . put ( " requiredPercentage " , 50 . 0 ) ;
cphCheck . put ( " message " , cphPassed ?
" 综合素质排名达标(前 " + cphPer + " %, 要求前50%) " :
" 综合素质排名不达标(前 " + cphPer + " %, 要求前50%) " ) ;
} else {
cphCheck . put ( " message " , " 综合素质排名前 " + cphPer + " % " ) ;
}
details . put ( " comprehensiveRank " , cphCheck ) ;
Map < String , Object > stuCheck = new HashMap < > ( ) ;
stuCheck . put ( " passed " , stuPassed ) ;
stuCheck . put ( " currentRank " , rankData . stuClassRank ) ;
stuCheck . put ( " classCount " , rankData . classCount ) ;
stuCheck . put ( " percentage " , stuPer ) ;
if ( maxStuPer ! = null ) {
stuCheck . put ( " requiredPercentage " , maxStuPer ) ;
stuCheck . put ( " message " , stuPassed ?
" 平均学分绩排名达标(前 " + stuPer + " %,要求前 " + maxStuPer + " %) " :
" 平均学分绩排名不达标(前 " + stuPer + " %,要求前 " + maxStuPer + " %) " ) ;
} else {
stuCheck . put ( " message " , " 平均学分绩排名前 " + stuPer + " % " ) ;
}
details . put ( " scoreRank " , stuCheck ) ;
return details ;
}
}