@ -13,6 +13,7 @@ import weaver.general.Util;
import weaver.interfaces.workflow.action.Action ;
import weaver.soa.workflow.request.RequestInfo ;
import java.util.ArrayList ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Map ;
@ -89,10 +90,93 @@ public class AskForLeaveWorkFlowSubmitAction implements Action {
return Action . FAILURE_AND_CONTINUE ;
}
/ * *
* 假 期 校 验 及 入 库
* 请 假 时 长 是 否 满 足 “ 请 假 类 型 ” 中 单 次 最 小 休 时 长 , 由 假 期 额 度 表 和 流 程 主 表 获 取 对 比 数 据
* /
String jqedSql = "select eddw, dczskxsc, edbxdcxw from uf_jcl_kq_jqed where jb = ?" ;
Map < String , Object > jqedInfo = DbTools . getSqlToMap ( jqedSql , jqlx ) ;
//假期额度的额度单位, 0-天、1-小时
String eddw = Util . null2String ( jqedInfo . get ( "eddw" ) ) ;
String eddwValue = "" ;
//单次最小休时长
String minDuration = Util . null2String ( jqedInfo . get ( "dczskxsc" ) ) ;
//请假时长qjsc
String qjsc = Util . null2String ( mainTableData . get ( "qjsc" ) ) ;
//请假时长单位scdw, 0-天、1-小时
String scdw = Util . null2String ( mainTableData . get ( "scdw" ) ) ;
String scdwValue = "" ;
if ( ! "" . equals ( eddw ) & & ! "" . equals ( minDuration ) ) {
double minDurationValue = Double . parseDouble ( minDuration ) ;
if ( eddw . equals ( AccountingUnitEnum . DAY . getKey ( ) ) ) {
minDurationValue = minDurationValue * 8 ;
eddwValue = AccountingUnitEnum . DAY . getValue ( ) ;
} else {
eddwValue = AccountingUnitEnum . HOUR . getValue ( ) ;
}
double qjscValue = "" . equals ( qjsc ) ? 0 : Double . parseDouble ( qjsc ) ;
if ( scdw . equals ( AccountingUnitEnum . DAY . getKey ( ) ) ) {
qjscValue = qjscValue * 8 ;
scdwValue = AccountingUnitEnum . DAY . getValue ( ) ;
} else {
scdwValue = AccountingUnitEnum . HOUR . getValue ( ) ;
}
if ( Double . compare ( minDurationValue , qjscValue ) > 0 ) {
String message = "请假时长" + qjsc + eddwValue + ",不能小于单次最小休时长" + minDuration + scdwValue ;
log . error ( message ) ;
requestInfo . getRequestManager ( ) . setMessageid ( "11111" + requestid + "22222" ) ;
requestInfo . getRequestManager ( ) . setMessagecontent ( message ) ;
return Action . FAILURE_AND_CONTINUE ;
}
}
/ * *
* 请 假 是 否 满 足 “ 请 假 类 型 ” 中 单 条 请 假 余 额 可 休 次 数 要 求 , 由 假 期 额 度 表 、 假 期 余 额 表 、 请 假 记 录 表 和 流 程 主 表 获 取 对 比 数 据
* /
//先获取假期额度规则中指定假别的可休次数
String allowLeaveNumStr = Util . null2String ( jqedInfo . get ( "edbxdcxw" ) ) ;
String sql = "select id,jqid,sxrq,ktsc,yxsc,wxsc,yqsxrq,ztsc from uf_jcl_kq_jqye where ygid=? and jqid=? and sxrq<=? and yqsxrq>=? order by sxrq" ;
List < Map < String , Object > > holidayBalanceList = DbTools . getSqlToList ( sql , qjry , jqlx , firstStartDate , firstStartDate ) ;
if ( ! allowLeaveNumStr . equals ( "" ) & & holidayBalanceList . size ( ) > 0 ) {
//查询请假记录中, 人员id+假期类别id情况下的结果, 遍历每条主表数据下的明细数据中使用了哪些假期余额id
sql = "select a.id,dt2.jqye from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 dt1 on dt1.mainid = a.id left join uf_jcl_kq_qjjl_dt2 dt2 on dt2.glmxid = dt1.glmxid " +
"where a.jqlx = " + jqlx + " and qjry = " + qjry + " and a.cxqj = 0 and dt1.cxqj = 0 and a.jlzt in (0, 1) and dt1.glmxid is not null" ;
List < Map < String , Object > > leaveList = DbTools . getSqlToList ( sql ) ;
Map < String , Integer > jqyeUseNumInfo = new HashMap < > ( ) ;
List < String > leaveUseList = new ArrayList < > ( ) ;
Integer useNum = 0 ;
for ( Map < String , Object > leaveItem : leaveList ) {
String jqyeId = Util . null2String ( leaveItem . get ( "jqye" ) ) ;
if ( ! "" . equals ( jqyeId ) ) {
String leaveInfo = leaveItem . get ( "id" ) . toString ( ) + "_" + jqyeId ;
if ( leaveUseList . size ( ) = = 0 ) {
leaveUseList . add ( leaveInfo ) ;
jqyeUseNumInfo . put ( jqyeId , 1 ) ;
} else if ( ! leaveUseList . contains ( leaveInfo ) ) {
leaveUseList . add ( leaveInfo ) ;
useNum = jqyeUseNumInfo . get ( jqyeId ) ;
jqyeUseNumInfo . put ( jqyeId , useNum = = null ? 1 : + + useNum ) ;
}
}
}
//筛选次数未使用完的假期余额
holidayBalanceList = holidayBalanceList . stream ( ) . filter ( f - > {
int beforeUseNum = jqyeUseNumInfo . get ( f . get ( "id" ) . toString ( ) ) = = null ? 0 : jqyeUseNumInfo . get ( f . get ( "id" ) . toString ( ) ) ;
return Integer . parseInt ( allowLeaveNumStr ) > beforeUseNum ;
} ) . collect ( Collectors . toList ( ) ) ;
if ( holidayBalanceList . size ( ) = = 0 ) {
String message = "本次使用的假期类型下的假期余额可休次数不足!" ;
log . error ( message ) ;
requestInfo . getRequestManager ( ) . setMessageid ( "11111" + requestid + "22222" ) ;
requestInfo . getRequestManager ( ) . setMessagecontent ( message ) ;
return Action . FAILURE_AND_CONTINUE ;
}
}
/ * *
* 假 期 校 验 及 入 库
* /
// String sql = "select id,jqid,sxrq,ktsc,yxsc,wxsc,yqsxrq,ztsc from uf_jcl_kq_jqye where ygid=? and jqid=? and sxrq<=? and yqsxrq>=? order by sxrq";
// List<Map<String, Object>> holidayBalanceList = DbTools.getSqlToList(sql, qjry, jqlx, firstStartDate, firstStartDate);
Map < String , Object > holidayBalanceMap = holidayBalanceList . stream ( ) . collect ( Collectors . toMap ( e - > e . get ( "id" ) . toString ( ) , e - > e ) ) ;
sql = "select id,mc,hsdw,hsl,jcbyxsyqjb,yxsydjb,qzsyyxjb from uf_jcl_kq_kqxm where id=?" ;
Map < String , Object > holidayItem = DbTools . getSqlToMap ( sql , jqlx ) ;
@ -153,45 +237,6 @@ public class AskForLeaveWorkFlowSubmitAction implements Action {
}
log . info ( "detailTable2 : [{}]" , detailTable2 ) ;
/ * *
* 请 假 时 长 是 否 满 足 “ 请 假 类 型 ” 中 单 次 最 小 休 时 长 , 由 假 期 额 度 表 和 流 程 主 表 获 取 对 比 数 据
* /
String jqedSql = "select eddw, dczskxsc from uf_jcl_kq_jqed where jb = ?" ;
Map < String , Object > jqedInfo = DbTools . getSqlToMap ( jqedSql , jqlx ) ;
//假期额度的额度单位, 0-天、1-小时
String eddw = Util . null2String ( jqedInfo . get ( "eddw" ) ) ;
String eddwValue = "" ;
//单次最小休时长
String minDuration = Util . null2String ( jqedInfo . get ( "dczskxsc" ) ) ;
//请假时长qjsc
String qjsc = Util . null2String ( mainTableData . get ( "qjsc" ) ) ;
//请假时长单位scdw, 0-天、1-小时
String scdw = Util . null2String ( mainTableData . get ( "scdw" ) ) ;
String scdwValue = "" ;
if ( ! "" . equals ( eddw ) & & ! "" . equals ( minDuration ) ) {
double minDurationValue = Double . parseDouble ( minDuration ) ;
if ( eddw . equals ( AccountingUnitEnum . DAY . getKey ( ) ) ) {
minDurationValue = minDurationValue * 8 ;
eddwValue = AccountingUnitEnum . DAY . getValue ( ) ;
} else {
eddwValue = AccountingUnitEnum . HOUR . getValue ( ) ;
}
double qjscValue = "" . equals ( qjsc ) ? 0 : Double . parseDouble ( qjsc ) ;
if ( scdw . equals ( AccountingUnitEnum . DAY . getKey ( ) ) ) {
qjscValue = qjscValue * 8 ;
scdwValue = AccountingUnitEnum . DAY . getValue ( ) ;
} else {
scdwValue = AccountingUnitEnum . HOUR . getValue ( ) ;
}
if ( Double . compare ( minDurationValue , qjscValue ) > 0 ) {
String message = "请假时长" + qjsc + eddwValue + ",不能小于单次最小休时长" + minDuration + scdwValue ;
log . error ( message ) ;
requestInfo . getRequestManager ( ) . setMessageid ( "11111" + requestid + "22222" ) ;
requestInfo . getRequestManager ( ) . setMessagecontent ( message ) ;
return Action . FAILURE_AND_CONTINUE ;
}
}
//更新流程明细表2
String delteSql = "delete from " + detail2TableName + " where mainid=?" ;
DbTools . update ( delteSql , requestid ) ;