假期余额透支功能

zm_dev
liuliang 9 months ago
parent e6553dcab4
commit 827ec85084

@ -1 +1 @@
аyГ~цЭ|дй~Й~хд|И}фЛ~ш}Т~М|юй~с}С}юЯ}У}Ь~к~Х}Н~г}ЭЖ|б}О}ЪрqчhаjЖkЛjВhТjгiлjфkзiУhЭlЩkуoжpжxЯuЭtЧvВvтwЛvа{иxяyТxЙvЮxЦvБyиxрzпwЧvзxаЫЧшСжМЧСъмЖСЪзнНШзЭдДоЩЪДвкдЩРыщчАяПЬэяЮчцПГЗУЪлощбЭхдЪтзЖТНБУщПсЩлэррЦькмИпЙПРжпАлиШФмюмШдшжиИЖъВнлОЙНиwбsСsЪvцsЕwаtПsщyАlГtДoфsшqлlЬqЦpЗrКlыsЖsвuрsХmхoьqЛrщlйjНZК\т^Й\ФZоVфZХXШ\РVИhбwчxкzБyп{Шzб|ш{оxОxЙ|фzд|яwи{ЗvБyК|ЦVеZюUаYфSТYхXе\цXэaцcвeщ_ЮWхWц^бTмRюTЫTПZсWж[ъTЕ]ы[ЪWТRДWгVоZГZЧUЮYСQсXЮWБYЦ[кZшgО~В~ыzю~л{РzвyК{Бxи~ц|М{ъ~тж|Ф}к~н}ычaчdВ]вhп]вaь^ГaК`гaй^ж_Ш]С]И]в^Т^в^и]Т]Х`ЯkКgшgюgЩgюhШcТ]жWЬkшiцqжhЧoяLбLшLюMБMГMКMКMНMсNХMКMНMГMХMЙMНMФMХMЯKДKЕKЙKюKаJцJЪJЕKЦKБKоLшKФKГKГKЕKИKЕKЕKИJюJФJсKЕKИKФKЕKФKДKГKГKпLДKЕKшKжJаJХJДKЕKХKЦKоLЦKДKЦKИKГKФKЕKюKдJЧIсKБKЦKХKГKЕKДKГKЕKГKрLФKГKКJЪIсJтKЕKФKГKДKоLФKФKФKДKЙKДKвKшJюJФJЧKДKДKДKДK
аyГ~цЭ|дй~Й~хд|И}фЛ~ш}Т~М|юй~с}С}юЯ}У}Ь~к~Х}Н~г}ЭЖ|б}О}ЪрqчhаjЖkЛjВhТjгiлjфkзiУhЭlЩkуoжpжxЯuЭtЧvВvтwЛvа{иxяyТxЙvЮxЦvБyиxрzпwЧvзxаЫЧшСжМЧСъмЖСЪзнНШзЭдДоЩЪДвкдЩРыщчАяПЬэяЮчцПГЗУЪлощбЭхдЪтзЖТНБУщПсЩлэррЦькмИпЙПРжпАлиШФмюмШдшжиИЖъВнлОЙНиwбsСsЪvцsЕwаtПsщyАlГtДoфsшqлlЬqЦpЗrКlыsЖsвuрsХmхoьqЛrщlйjНZК\т^Й\ФZоVфZХXШ\РVИhбwчxкzБyп{Шzб|ш{оxОxЙ|фzд|яwи{ЗvБyК|ЦVеZюUаYфSТYхXе\цXэaцcвeщ_ЮWхWц^бTмRюTЫTПZсWж[ъTЕ]ы[ЪWТRДWгVоZГZЧUЮYСQсXЮWБYЦ[кZшgО~В~ыzю~л{РzвyК{Бxи~ц|М{ъ~тж|Ф}к~н}ычaчdВ]вhп]вaь^ГaК`гaй^ж_Ш]С]И]в^Т^в^и]Т]Х`ЯkКgшgюgЩgюhШcТ]жWЬkшiцqжh

@ -12,11 +12,44 @@
<list default="true" id="baeb3dfb-5097-46c5-933e-6d1dab18b815" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values.at" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values.at" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values.s" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values.s" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat_i" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat_i" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/common/util/Utils.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/common/util/Utils.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/WEB-INF/sqllog/ecologysql" beforeDir="false" afterPath="$PROJECT_DIR$/WEB-INF/sqllog/ecologysql" afterDir="false" />
<change beforePath="$PROJECT_DIR$/log/interceptSql/interceptSql.log" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/log/sdk.log" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/RecordDataCmd.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/RecordDataCmd.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/WorkOverTimeService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/WorkOverTimeService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/component/persongroup/cmd/GetDatatableCmd.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/component/persongroup/cmd/GetDatatableCmd.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/vacation/util/VocationCommonUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/vacation/util/VocationCommonUtil.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/workflow/cmd/GetAskForLeaveRecordListCmd.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/workflow/cmd/GetAskForLeaveRecordListCmd.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/common/util/CommonUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/common/util/CommonUtil.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/jucailinkq/common/util/DbTools.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/jucailinkq/common/util/DbTools.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/RecordDataCmd.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/RecordDataCmd.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/service/WorkOverTimeService.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/service/WorkOverTimeService.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/AttendanceSummaryServiceImpl.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/AttendanceSummaryServiceImpl.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/component/persongroup/cmd/GetDatatableCmd.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/component/persongroup/cmd/GetDatatableCmd.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/vacation/job/holidaygeneration/tactics/OneTimePayMentWay.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/vacation/job/holidaygeneration/tactics/OneTimePayMentWay.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/vacation/util/VocationCommonUtil.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/vacation/util/VocationCommonUtil.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/workflow/service/impl/AllowanceServiceImpl.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/workflow/service/impl/AllowanceServiceImpl.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/common/util/CommonUtil.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/common/util/CommonUtil.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/common/util/DbTools.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/common/util/DbTools.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/common/util/Utils.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/jucailinkq/common/util/Utils.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/test-classes/vocation/Test1.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/test-classes/vocation/Test1.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/test-classes/workflow/UpdateAttendanceResultWrapper$1.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/target/test-classes/workflow/UpdateAttendanceResultWrapper.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/test/Test.java" beforeDir="false" afterPath="$PROJECT_DIR$/test/Test.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/test/vocation/Test1.java" beforeDir="false" afterPath="$PROJECT_DIR$/test/vocation/Test1.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/test/workflow/UpdateAttendanceResultWrapper.java" beforeDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -59,9 +92,9 @@
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="com.intellij.ide.scratch.ScratchImplUtil$2/New Scratch File" value="PLAIN_TEXT" />
<property name="last_directory_selection" value="$PROJECT_DIR$/src/com/engine/kq" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/test" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="nodejs_package_manager_path" value="npm" />
<property name="project.structure.last.edited" value="Artifacts" />
<property name="project.structure.last.edited" value="Modules" />
<property name="project.structure.proportion" value="0.15" />
<property name="project.structure.side.proportion" value="0.15287958" />
<property name="settings.editor.selected.configurable" value="editor.preferences.fonts.default" />
@ -71,8 +104,8 @@
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\项目备份\考勤\hrm-attendance\test" />
<recent name="D:\项目备份\考勤\hrm-attendance\log\interceptSql" />
<recent name="D:\项目备份\考勤\hrm-attendance\test" />
<recent name="D:\项目备份\考勤\hrm-attendance\src" />
<recent name="D:\项目备份\考勤\hrm-attendance" />
<recent name="D:\项目备份\考勤\hrm-attendance\workflow\request\hrmattendance" />
@ -93,7 +126,7 @@
<command value="organzationList" />
</option>
</component>
<component name="RunManager" selected="JUnit.Test.testAnalysis">
<component name="RunManager" selected="Application.Test">
<configuration name="Test" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="Test" />
<module name="hrm-attendance" />
@ -193,10 +226,10 @@
</configuration>
<recent_temporary>
<list>
<item itemvalue="Application.Test" />
<item itemvalue="JUnit.Test.testAnalysis" />
<item itemvalue="JUnit.Test1.test1" />
<item itemvalue="JUnit.Test1.test3" />
<item itemvalue="Application.Test" />
<item itemvalue="JUnit.Test.testjob" />
</list>
</recent_temporary>
@ -722,6 +755,18 @@
<workItem from="1720675844486" duration="17476000" />
<workItem from="1720747895355" duration="7406000" />
<workItem from="1720756125339" duration="1646000" />
<workItem from="1720761422457" duration="18001000" />
<workItem from="1720791896115" duration="1643000" />
<workItem from="1720841624218" duration="1797000" />
<workItem from="1720852555447" duration="317000" />
<workItem from="1720854486557" duration="656000" />
<workItem from="1720855753924" duration="1161000" />
<workItem from="1720864159551" duration="2105000" />
<workItem from="1720931193229" duration="612000" />
<workItem from="1720938148886" duration="18384000" />
<workItem from="1720958284858" duration="25000" />
<workItem from="1720958325355" duration="6047000" />
<workItem from="1721006102395" duration="7362000" />
</task>
<servers />
</component>
@ -776,14 +821,14 @@
<option name="timeStamp" value="186" />
</line-breakpoint>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/getclockInpoint/GetClockInPointCmd.java</url>
<line>54</line>
<option name="timeStamp" value="189" />
<url>file://$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/RecordDataCmd.java</url>
<line>202</line>
<option name="timeStamp" value="239" />
</line-breakpoint>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java</url>
<line>57</line>
<option name="timeStamp" value="190" />
<url>file://$PROJECT_DIR$/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/RecordDataCmd.java</url>
<line>295</line>
<option name="timeStamp" value="240" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

110160
log/sdk.log

File diff suppressed because one or more lines are too long

@ -3,17 +3,26 @@ package com.engine.jucailinkq.attendance.attendanceanalysis.cmd;
import com.engine.jucailinkq.attendance.enums.CheckBoxEnum;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.jucailinkq.attendance.vacation.util.VocationCommonUtil;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.core.interceptor.CommandContext;
import com.engine.jucailinkq.common.util.Utils;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.conn.RecordSet;
import weaver.conn.RecordSetTrans;
import weaver.general.Util;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
/**
*
@ -45,6 +54,10 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
Map<String,Object> recordDataTime = (Map<String,Object>)params.get("recordDataTime");
//出勤时间
String attendanceDuration = Util.null2String(params.get("attendanceDuration"));
//加班转假期余额集合
List<Map<String, Object>> overTimeHolidayList = (List<Map<String, Object>>)params.get("overTimeHolidayList");
//加班结果集合
List<Map<String, Object>> overTimeResultList = (List<Map<String, Object>>)params.get("overTimeResultList");
Map<String,String> formmodeIdMap = (Map<String,String>)params.get("formmodeIdMap");
@ -162,32 +175,245 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
DbTools.update(sql,insertDatas.toArray());
}
updateWorkOverTimeDate(userId,analysisDate);
updateWorkOverTimeDate(userId,analysisDate,overTimeHolidayList,overTimeResultList);
return null;
}
public void updateWorkOverTimeDate(String userId,String date){
/**
*
* @param userId
* @param date
* @param overTimeHolidayList
* @param overTimeResultList
*/
public void updateWorkOverTimeDate(String userId,String date,List<Map<String,Object>> overTimeHolidayList,List<Map<String,Object>> overTimeResultList){
String sql = "select id from uf_jcl_kq_cqjg where ygid=? and rq=?";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,userId,date);
if (dataList.size() > 0){
String id = Util.null2String(dataList.get(0).get("id"));
RecordSetTrans rst = new RecordSetTrans();
rst.setAutoCommit(false);
//处理加班结果
sql = "select id,jblx,lyid from uf_jcl_kq_jbjg where lyid=? and jbjgly=4";
List<Map<String,Object>> oldOverTimeList = DbTools.getSqlToList(sql,id);
for (Map<String,Object> overTimeResult : overTimeResultList){
overTimeResult.put("lyid",id);
}
try {
sql = "delete from uf_jcl_kq_jbjg where lyid=?";
rst.executeUpdate(sql,id);
sql = "delete from uf_jcl_kq_jqye where lyid=?";
rst.executeUpdate(sql,id);
sql = "update uf_jcl_kq_jbjg set lyid =? where lyid=?";
rst.executeUpdate(sql,id,userId+"-"+DateUtil.getCurrentDate());
sql = "update uf_jcl_kq_jqye set lyid =? where lyid=?";
rst.executeUpdate(sql,id,userId+"-"+DateUtil.getCurrentDate());
rst.commit();
updateOverTimeResult(oldOverTimeList,overTimeResultList);
//处理假期余额
sql = "select id,jqid,ktsc,yxsc,wxsc,ztsc,zfsc,jxsc,dzkxsc,lyid,lyjblx from uf_jcl_kq_jqye where lyid=? and lylx=4";
List<Map<String,Object>> oldOverTimeHolidayList = DbTools.getSqlToList(sql,id);
for (Map<String,Object> overTimeHoliday : overTimeHolidayList){
overTimeHoliday.put("lyid",id);
}
updateOverTimeHoliday(oldOverTimeHolidayList,overTimeHolidayList);
}catch (Exception e){
rst.rollback();
log.error("updateWorkOverTimeDate error :{}",e);
log.error("updateWorkOverTimeDate error : [{}]",e);
}
}
}
/**
*
* @param oldResultData
* @param newResultData
*/
public void updateOverTimeResult(List<Map<String,Object>> oldResultData,List<Map<String,Object>> newResultData)throws Exception{
Map<String,Object> operate = Maps.newHashMap();
operate.put("delete",Lists.newArrayList());
operate.put("insert",Lists.newArrayList());
operate.put("update",Lists.newArrayList());
Map<String,List<Map<String,Object>>> oldOverTimeGroupByType = oldResultData.stream().collect(Collectors.groupingBy(e->e.get("jblx").toString()));
Map<String,List<Map<String,Object>>> overTimeGroupByType = newResultData.stream().collect(Collectors.groupingBy(e->e.get("jblx").toString()));
oldOverTimeGroupByType.entrySet().forEach(e->{
String jblx = e.getKey();
List<Map<String,Object>> oldData = e.getValue();
List<Map<String,Object>> newData = overTimeGroupByType.get(jblx);
if (newData == null || newData.size() == 0){
//新数据不存在,老数据存在。老数据需要删除
List<String> deleteList = (List<String>)operate.get("delete");
deleteList.addAll(oldData.stream().map(f->f.get("id").toString()).collect(Collectors.toList()));
}else if (newData.size() == oldData.size()){
//新数据和老数据条数相等。更新老数据。
List<Map<String,Object>> updateList = (List<Map<String,Object>>)operate.get("update");
for (int i =0;i<newData.size();i++){
newData.get(i).put("id",oldData.get(i).get("id"));
}
updateList.addAll(newData);
}else {
//老数据与新数据条数不一致,删除老数据。新增新数据
List<Map<String,Object>> insertList = (List<Map<String,Object>>)operate.get("insert");
List<String> deleteList = (List<String>)operate.get("delete");
deleteList.addAll(oldData.stream().map(f->f.get("id").toString()).collect(Collectors.toList()));
insertList.addAll(newData);
}
});
overTimeGroupByType.entrySet().forEach(e->{
String jblx = e.getKey();
List<Map<String,Object>> newData = e.getValue();
List<Map<String,Object>> oldData = oldOverTimeGroupByType.get(jblx);
if (oldData == null || oldData.size() == 0){
//老数据不存在,新数据存在。新增数据
List<Map<String,Object>> insertList = (List<Map<String,Object>>)operate.get("insert");
insertList.addAll(newData);
}
});
List<String> deleteList = (List<String>) operate.get("delete");
List<Map<String, Object>> updateList = (List<Map<String, Object>>) operate.get("update");
List<Map<String, Object>> insertList = (List<Map<String, Object>>) operate.get("insert");
if (deleteList.size() > 0) {
String deleteSql = "delete from uf_jcl_kq_jbjg where id in (" + String.join(",", deleteList) + ")";
DbTools.update(deleteSql);
}
if (updateList.size() > 0) {
for (Map<String, Object> updateParam : updateList) {
Map<String, Object> condition = Maps.newHashMap();
condition.put("id", updateParam.get("id"));
DbTools.update(CommonUtil.makeUpdateSql("uf_jcl_kq_jbjg", updateParam, condition));
}
}
if (insertList.size() > 0) {
for (Map<String, Object> insertParam : insertList) {
Utils.InsertFormTable("uf_jcl_kq_jbjg",insertParam,(Map<String,String>)params.get("formmodeIdMap"));
}
}
}
/**
*
* @param oldHolidayData
* @param newHolidayData
*/
public void updateOverTimeHoliday(List<Map<String,Object>> oldHolidayData,List<Map<String,Object>> newHolidayData)throws Exception {
Map<String,List<Map<String,Object>>> oldHolidayGroupByType = oldHolidayData.stream().collect(Collectors.groupingBy(e->e.get("lyjblx").toString()));
Map<String,List<Map<String,Object>>> newHolidayGroupByType = newHolidayData.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("lyjblx"))));
List<String> deleteList = Lists.newArrayList();
List<Map<String,Object>> updateList = Lists.newArrayList();
List<Map<String,Object>> insertList = Lists.newArrayList();
List<String> revokeHoliday = Lists.newArrayList();
Map<String,List<Map<String,Object>>> beforeHolidays = Maps.newHashMap();
for (Map.Entry<String,List<Map<String,Object>>> entry : oldHolidayGroupByType.entrySet()){
String jblx = entry.getKey();
Map<String,Object> oldData = entry.getValue().get(0);
List<Map<String,Object>> newDataList = newHolidayGroupByType.get(jblx);
double oldktsc = Double.valueOf(oldData.get("ktsc").toString());
double oldyxsc = Double.valueOf(oldData.get("yxsc").toString());
double oldwxsc = Double.valueOf(oldData.get("wxsc").toString());
double oldzfsc = Double.valueOf(oldData.get("zfsc").toString());
double oldztsc = Double.valueOf(oldData.get("ztsc").toString());
if (newDataList == null || newDataList.size() == 0 || newDataList.get(0).size() <= 1){
//新数据不存在或者可休时长为0老数据存在。
//删除老数据
deleteList.add(oldData.get("id").toString());
if (oldyxsc > 0){
//手动撤销所有请假余额
revokeHoliday.add(oldData.get("id").toString());
}
}else{
double totalKtsc = newDataList.stream().mapToDouble(e->Double.valueOf(e.get("ktsc").toString())).sum();
if (totalKtsc == 0){
//可休时长为0
deleteList.add(oldData.get("id").toString());
if (oldyxsc > 0){
//手动撤销所有请假余额
revokeHoliday.add(oldData.get("id").toString());
}
}else {
Map<String,Object> newData = newDataList.get(0);
newData.put("ktsc",String.format ("%.2f",totalKtsc));
//更新老数据。
newData.put("zfsc",oldzfsc);
newData.put("ztsc",oldztsc);
newData.put("wxsc",VocationCommonUtil.substract(String.format ("%.2f",totalKtsc),oldzfsc,oldztsc,oldyxsc));
newData.put("yxsc",oldyxsc);
newData.put("id",oldData.get("id"));
if (!newData.get("jqid").equals(oldData.get("jqid"))){
//假期类型替换
revokeHoliday.add(oldData.get("id").toString());
newData.put("yxsc",0);
newData.put("wxsc",totalKtsc);
}else {
if (oldwxsc >= 0 && Double.compare(totalKtsc,oldyxsc) <0){
//当没有透支时,新的可休时长小于老的已休时长,手动撤销所有已休请假余额。
revokeHoliday.add(oldData.get("id").toString());
newData.put("yxsc",0);
newData.put("wxsc",totalKtsc);
}else if (oldwxsc < 0 && Double.compare(totalKtsc,oldktsc) < 0){
//当透支时,新的可休时长小于老的可休时长,不撤销继续减
double subctractKtsc = new BigDecimal(String.valueOf(totalKtsc)).subtract(new BigDecimal(String.valueOf(oldktsc)),new MathContext(4, RoundingMode.HALF_UP)).doubleValue();
newData.put("yxsc",oldyxsc+subctractKtsc);
newData.put("wxsc",new BigDecimal(oldData.get("wxsc").toString()).subtract(new BigDecimal(String.valueOf(subctractKtsc)),new MathContext(4, RoundingMode.HALF_UP)).doubleValue());
}
}
updateList.add(newData);
}
}
}
String queryHolidaySql = "select id,yxsc,wxsc,ktsc,jqid,ztsc,zfsc from uf_jcl_kq_jqye where ygid=? and jqid=? order by modedatacreatedate desc,modedatacreatetime desc";
for (Map.Entry<String,List<Map<String,Object>>> entry : newHolidayGroupByType.entrySet()){
String jblx = entry.getKey();
List<Map<String,Object>> newDataList = entry.getValue();
if (newDataList != null && newDataList.size() > 0 && newDataList.get(0).size() > 1){
double totalKtsc = newDataList.stream().mapToDouble(e->Double.valueOf(e.get("ktsc").toString())).sum();
Map<String,Object> newData = newDataList.get(0);
List<Map<String,Object>> oldData = oldHolidayGroupByType.get(jblx);
if (oldData == null || oldData.size() == 0){
newData.put("ktsc",totalKtsc);
beforeHolidays.put(newData.get("jqid").toString(),DbTools.getSqlToList(queryHolidaySql,newData.get("ygid"),newData.get("jqid")));
//老数据不存在,新数据存在。新增数据
insertList.add(newData);
}
}
}
if (deleteList.size() > 0){
String deleteSql = "delete from uf_jcl_kq_jqye where id in ("+String.join(",",deleteList)+")";
DbTools.update(deleteSql);
}
if (updateList.size() > 0){
for (Map<String,Object> updateParam:updateList){
Map<String,Object> condition = Maps.newHashMap();
condition.put("id",updateParam.get("id"));
DbTools.update(CommonUtil.makeUpdateSql("uf_jcl_kq_jqye",updateParam,condition));
}
}
if (insertList.size() > 0){
for (Map<String,Object> insertParam:insertList){
List<Map<String,Object>> beforeHolidayList = beforeHolidays.get(insertParam.get("jqid").toString());
double beforewxsc = 0;
if (beforeHolidayList != null && beforeHolidayList.size() >0){
//假期余额透支功能
beforewxsc =Double.valueOf(beforeHolidayList.get(0).get("wxsc").toString());
}
if (beforewxsc < 0){
insertParam.put("wxsc",Double.valueOf(insertParam.get("ktsc").toString())+beforewxsc);
insertParam.put("yxsc",0-beforewxsc);
}
boolean excuteResult = Utils.InsertFormTable("uf_jcl_kq_jqye",insertParam,(Map<String,String>)params.get("formmodeIdMap"));
List<Map<String,Object>> nowdataList = DbTools.getSqlToList(queryHolidaySql,insertParam.get("ygid"),insertParam.get("jqid"));
if (excuteResult && beforewxsc <0){
VocationCommonUtil.handleOverdraftHoliday(beforeHolidayList.get(0),beforewxsc,nowdataList.get(0));
}
}
}
if (revokeHoliday.size() > 0){
String sql = "select b.id from uf_jcl_kq_qjjl_dt2 a left join uf_jcl_kq_qjjl_dt1 b on a.glmxid=b.glmxid where a.jqye in ("+String.join(",",revokeHoliday)+")";
List<String> needRevokeHolidays = DbTools.getSqlToList(sql).stream().map(e->e.get("id").toString()).collect(Collectors.toList());
if (needRevokeHolidays.size() > 0){
sql = "update uf_jcl_kq_qjjl_dt1 set cxqj=1 where id in ("+String.join(",",needRevokeHolidays)+")";
DbTools.update(sql);
}
}
}
}

@ -86,6 +86,8 @@ public class SaveWorkOverTimeCmd extends AbstractCommonCommand<Map<String,Object
String userId = Util.null2String(params.get("userId"));
Map<String,Object> resultMap = Maps.newHashMap();
if (!"".equals(jbqsfzs)){
if (jbsc < Integer.valueOf(jbqsfzs)){
//小于最小加班分钟数不算加班
@ -170,11 +172,14 @@ public class SaveWorkOverTimeCmd extends AbstractCommonCommand<Map<String,Object
*
*/
//加班时长自动转入假期余额
resultMap.put("overTimeHoliday",Maps.newHashMap());
if (CheckBoxEnum.CHECKED.getKey().equals(jbzdzjqye)){
Map<String,Object> insertHoliDayParam = Maps.newHashMap();
insertHoliDayParam.put("ygid",userId);
insertHoliDayParam.put("jqid",workTimeBeLateItems.get(0).get("zrdjb"));
insertHoliDayParam.put("lyid",userId+"-"+DateUtil.getCurrentDate());
insertHoliDayParam.put("lylx","4");
insertHoliDayParam.put("lyjblx",workTimeBeLateItems.get(0).get("key"));
Map<String,Object> holidayItem = getHolidayItem(workTimeBeLateItems.get(0).get("zrdjb").toString(),attendanceItems);
double ktsc = Utils.getItemdurationDown(Double.valueOf(holidayItem.get("hsl").toString()),holidayItem.get("hsdw").toString(),Double.valueOf(jbsc).intValue(),AccountingUnitEnum.MINUTES);
@ -232,6 +237,7 @@ public class SaveWorkOverTimeCmd extends AbstractCommonCommand<Map<String,Object
}
String zdyqsc = Util.null2String(workTimeBeLateItems.get(0).get("zdyqsc"));
insertHoliDayParam.put("yqsxrq",insertHoliDayParam.get("jzrq"));
if (DelayTypeEnum.ONE_MONTH.getKey().equals(zdyqsc)){
//一个月
insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(insertHoliDayParam.get("jzrq").toString(),1,DateUtil.yyyyMMdd));
@ -248,12 +254,11 @@ public class SaveWorkOverTimeCmd extends AbstractCommonCommand<Map<String,Object
//一年
insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(insertHoliDayParam.get("jzrq").toString(),12,DateUtil.yyyyMMdd));
}
updateholidayResult(id,insertHoliDayParam);
resultMap.put("overTimeHoliday",getholidayResult(id,insertHoliDayParam));
}
updateOverTimeResult(id,insertParam);
return workOverTimeItems;
resultMap.put("overTimeResult",getOverTimeResult(id,insertParam));
resultMap.put("workOverTimeItems",workOverTimeItems);
return resultMap;
}
public List<Map<String, Object>> getWorkOverTimeResults(String startDate,String endDate,String userId){
@ -310,7 +315,7 @@ public class SaveWorkOverTimeCmd extends AbstractCommonCommand<Map<String,Object
/**
*
*/
public void updateOverTimeResult(String lyid, Map<String,Object> insertParam){
public Map<String,Object> getOverTimeResult(String lyid, Map<String,Object> insertParam){
if (!"".equals(lyid)){
String sql = "select edjxsc,ydxsc from uf_jcl_kq_jbjg where lyid=?";
List<Map<String,Object>> overTimeResultList = DbTools.getSqlToList(sql,lyid);
@ -323,52 +328,43 @@ public class SaveWorkOverTimeCmd extends AbstractCommonCommand<Map<String,Object
insertParam.put("wdxsc",String.format("%.2f",eddxsc-ydxsc));
}
}
Utils.InsertFormTable("uf_jcl_kq_jbjg",insertParam,(Map<String,String>)params.get("formmodeIdMap"));
return insertParam;
//Utils.InsertFormTable("uf_jcl_kq_jbjg",insertParam,(Map<String,String>)params.get("formmodeIdMap"));
}
/**
*
* 0
*/
public void updateholidayResult(String lyid,Map<String,Object> insertParam){
public Map<String,Object> getholidayResult(String lyid,Map<String,Object> insertParam){
double ktsc = Utils.convertDouble(insertParam.get("ktsc"));
String queryBeforeHolidaySql = "select id,yxsc,wxsc,ktsc,lyid from uf_jcl_kq_jqye where ygid=? and jqid=? order by jzrq desc, modedatacreatedate desc ,modedatacreatetime";
List<Map<String,Object>> beforeHolidayBalanceList = DbTools.getSqlToList(queryBeforeHolidaySql,insertParam.get("ygid"),insertParam.get("jqid"));
double beforewxsc = 0;
if (!"".equals(lyid)) {
beforeHolidayBalanceList = beforeHolidayBalanceList.stream().filter(e->!e.get("lyid").equals(lyid)).collect(Collectors.toList());
if (beforeHolidayBalanceList.size() > 0 && Double.valueOf(beforeHolidayBalanceList.get(0).get("wxsc").toString()) <0){
beforewxsc = Double.valueOf(beforeHolidayBalanceList.get(0).get("wxsc").toString());
}
String sql = "select yxsc,ztsc,zfsc,jxsc,yqsc,yqyxsc from uf_jcl_kq_jqye where lyid=?";
List<Map<String,Object>> holidayList = DbTools.getSqlToList(sql,lyid);
if (holidayList.size() > 0){
Map<String,Object> holidayMap = holidayList.get(0);
insertParam.put("yxsc",holidayMap.get("yxsc"));
insertParam.put("ztsc",holidayMap.get("ztsc"));
insertParam.put("zfsc",holidayMap.get("zfsc"));
insertParam.put("jxsc",holidayMap.get("jxsc"));
insertParam.put("yqsc",holidayMap.get("yqsc"));
insertParam.put("yqyxsc",holidayMap.get("yqyxsc"));
double wxsc = ktsc-Utils.convertDouble(insertParam.get("yxsc"))-Utils.convertDouble(holidayMap.get("ztsc"))-Utils.convertDouble(holidayMap.get("zfsc"));
insertParam.put("wxsc",String.format("%.2f",wxsc));
}else {
if (ktsc == 0){
insertParam.put("lyid",lyid);
}
}
Utils.InsertFormTable("uf_jcl_kq_jqye",insertParam,(Map<String,String>)params.get("formmodeIdMap"));
}else {
if (ktsc !=0){
if (beforeHolidayBalanceList.size() > 0 && Double.valueOf(beforeHolidayBalanceList.get(0).get("wxsc").toString()) <0){
beforewxsc = Double.valueOf(beforeHolidayBalanceList.get(0).get("wxsc").toString());
}
Utils.InsertFormTable("uf_jcl_kq_jqye",insertParam,(Map<String,String>)params.get("formmodeIdMap"));
}
// String sql = "select yxsc,ztsc,zfsc,jxsc,yqsc,yqyxsc from uf_jcl_kq_jqye where lyid=?";
// List<Map<String,Object>> holidayList = DbTools.getSqlToList(sql,lyid);
// if (holidayList.size() > 0){
// Map<String,Object> holidayMap = holidayList.get(0);
// insertParam.put("yxsc",holidayMap.get("yxsc"));
// insertParam.put("ztsc",holidayMap.get("ztsc"));
// insertParam.put("zfsc",holidayMap.get("zfsc"));
// insertParam.put("jxsc",holidayMap.get("jxsc"));
// insertParam.put("yqsc",holidayMap.get("yqsc"));
// insertParam.put("yqyxsc",holidayMap.get("yqyxsc"));
// double wxsc = ktsc-Utils.convertDouble(insertParam.get("yxsc"))-Utils.convertDouble(holidayMap.get("ztsc"))-Utils.convertDouble(holidayMap.get("zfsc"));
// insertParam.put("wxsc",String.format("%.2f",wxsc));
// }
// else {
// if (ktsc == 0){
// insertParam.put("lyid",lyid);
// }
// }
// Utils.InsertFormTable("uf_jcl_kq_jqye",insertParam,(Map<String,String>)params.get("formmodeIdMap"));
}
// else {
// if (ktsc !=0){
// Utils.InsertFormTable("uf_jcl_kq_jqye",insertParam,(Map<String,String>)params.get("formmodeIdMap"));
// }
// }
return insertParam;
}

@ -12,5 +12,5 @@ public interface WorkOverTimeService {
* @param params
* @return
*/
List<Map<String, Object>> recordWorkOverTime(Map<String,Object> params);
Map<String, Object> recordWorkOverTime(Map<String,Object> params);
}

@ -24,7 +24,7 @@ import java.util.stream.Collectors;
@Slf4j
public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeService {
@Override
public List<Map<String, Object>> recordWorkOverTime(Map<String, Object> params) {
public Map<String, Object> recordWorkOverTime(Map<String, Object> params) {
//考勤项目
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
//排班
@ -58,7 +58,10 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
/**
*
*/
List<Map<String, Object>> resultLists = Lists.newArrayList();
Map<String,Object> resultMap = Maps.newHashMap();
List<Map<String, Object>> workOverTimeItemList = Lists.newArrayList();
List<Map<String, Object>> overTimeHolidayList = Lists.newArrayList();
List<Map<String, Object>> overTimeResultList = Lists.newArrayList();
for (Map<String, Object> scheduleMap :scheduleResult){
List<Map<String,Object>> workTimeBeLateItems = getWorkTimeBeLateItems(scheduleMap,attendanceItems);
if (workTimeBeLateItems.size() == 0 || ClassSegmentTypeEnum.WORK_TIME.getKey().equals(scheduleMap.get("beforeClassSegment"))){
@ -71,8 +74,10 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
Map<String,Object> overTimeDuraionMap = commandExecutor.execute(new GetOvertimeDurationCmd(params));
params.putAll(overTimeDuraionMap);
//获得加班项目
Map<String,Object> itemMap = commandExecutor.execute(new SaveWorkOverTimeCmd(params));
resultLists.add(itemMap);
Map<String,Object> saveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(params));
workOverTimeItemList.add((Map<String,Object>)saveWorkOverTimeMap.get("workOverTimeItems"));
overTimeHolidayList.add((Map<String,Object>)saveWorkOverTimeMap.get("overTimeHoliday"));
overTimeResultList.add((Map<String,Object>)saveWorkOverTimeMap.get("overTimeResult"));
}
/**
@ -100,12 +105,16 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
String realityEndime = restOverTimeDuraion.stream().max(Comparator.comparing(e->DateUtil.getTime(e.get("realityEndime").toString()).toInstant(ZoneOffset.of("+8")).toEpochMilli())).get().get("realityEndime").toString();
params.put("realityStartTime",realityStartTime);
params.put("realityEndime",realityEndime);
Map<String,Object> itemMap = commandExecutor.execute(new SaveWorkOverTimeCmd(params));
resultLists.add(itemMap);
Map<String,Object> saveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(params));
workOverTimeItemList.add((Map<String,Object>)saveWorkOverTimeMap.get("workOverTimeItems"));
overTimeHolidayList.add((Map<String,Object>)saveWorkOverTimeMap.get("overTimeHoliday"));
overTimeResultList.add((Map<String,Object>)saveWorkOverTimeMap.get("overTimeResult"));
}
return resultLists;
resultMap.put("workOverTimeItemList",workOverTimeItemList);
resultMap.put("overTimeHolidayList",overTimeHolidayList);
resultMap.put("overTimeResultList",overTimeResultList);
return resultMap;
}
public List<Map<String,Object>> getWorkTimeBeLateItems(Map<String, Object> scheduleMap,List<Map<String,Object>> attendanceItems){

@ -304,7 +304,6 @@ public class AttendanceAnalysisWrapper extends Service {
/**
*
*/
Map<String, Object> vactionMap = updateAttendanceResultWrapper.recordAskForLeave(recordAbnormalParam);
List<Map<String, Object>> abnormalClockInListByAskForLeave = (List<Map<String, Object>>) vactionMap.get("abnormalClockInList");
List<Map<String, Object>> vactionList = (List<Map<String, Object>>) vactionMap.get("resultList");
@ -324,8 +323,11 @@ public class AttendanceAnalysisWrapper extends Service {
log.debug("出差外出后消除的异常 : [{}]", recordEvection.get("offsetEvectionAnomaly"));
/**
*
* workOverTimeItemList:
* overTimeHolidayList
* overTimeResultList
*/
List<Map<String, Object>> recordWorkOverTime = updateAttendanceResultWrapper.recordWorkOverTime(recordAbnormalParam);
Map<String, Object> recordWorkOverTime = updateAttendanceResultWrapper.recordWorkOverTime(recordAbnormalParam);
/**
@ -341,10 +343,12 @@ public class AttendanceAnalysisWrapper extends Service {
recordData.addAll(evectionResultList);
abnormalClockInListByEvction = abnormalClockInListByEvction.stream().filter(e -> (boolean) e.get("record")).collect(Collectors.toList());
recordData.addAll(abnormalClockInListByEvction);
recordData.addAll(recordWorkOverTime);
recordData.addAll((List<Map<String, Object>>)recordWorkOverTime.get("workOverTimeItemList"));
recordParam.put("recordData", recordData);
recordParam.put("recordDataTime", utilService.getNeedRecordClockInTime(clcokInTimeData));
recordParam.put("attendanceDuration", attendanceDuration);
recordParam.put("overTimeHolidayList",recordWorkOverTime.get("overTimeHolidayList"));
recordParam.put("overTimeResultList",recordWorkOverTime.get("overTimeResultList"));
log.info("recordParam : {}", recordParam);
if (abnormalClockInListByEvction.size() > 0) {
recordParam.put("cqzt", CheckBoxEnum.CHECKED.getKey());

@ -175,7 +175,7 @@ public class UpdateAttendanceResultWrapper extends Service {
* @param params
* @return
*/
public List<Map<String, Object>> recordWorkOverTime(Map<String,Object> params){
public Map<String, Object> recordWorkOverTime(Map<String,Object> params){
return workOverTimeService.recordWorkOverTime(params);
}

@ -35,7 +35,7 @@ public class GetDatatableCmd extends AbstractCommonCommand<Map<String,Object>> {
int pageSize = Integer.valueOf(Util.null2String(params.get("pageSize")));
String showAll = Util.null2String(params.get("showAll"));
RecordSet rs = new RecordSet();
Map<String, Object> resultMap = Maps.newHashMap();
String sql = "select id from "+tableName +" where 1=1 ";
List<Object> param = Lists.newArrayList();
@ -75,7 +75,7 @@ public class GetDatatableCmd extends AbstractCommonCommand<Map<String,Object>> {
}
int startindex = (current-1)*pageSize;
int endindex = current*pageSize;
String dbType = rs.getDBType();
String dbType = DbTools.thread.get().getDBType();
if ("oracle".equals(dbType) || "dm".equals(dbType) || "jc".equals(dbType) || "st".equals(dbType)){
sql = "select a.id as keyid,b.lastname,a.*,ROWNUM rn from "+tableName +" a left join hrmresource b on a.pbdxry=b.id where ROWNUM<="+endindex;

@ -8,6 +8,7 @@ import com.engine.jucailinkq.common.util.Utils;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.conn.RecordSetTrans;
import weaver.general.TimeUtil;
import weaver.general.Util;
@ -472,99 +473,85 @@ public class VocationCommonUtil {
*/
public static void updateHolidayBalance(String tableName,Map<String,Object> dataMap,List<Map<String,Object>> dataList,String edyxq){
log.debug("updateHolidayBalance dataMap:[{}]",dataMap);
String lyid = Util.null2String(dataMap.get("lyid"));
String ygid = Util.null2String(dataMap.get("ygid"));
String jqid = Util.null2String(dataMap.get("jqid"));
String sxrq = Util.null2String(dataMap.get("sxrq"));
String jzrq = Util.null2String(dataMap.get("jzrq"));
dataMap.put("yxsc",0);
dataMap.put("ztsc",0);
dataMap.put("wxsc",dataMap.get("ktsc"));
dataMap.put("yqsxrq",dataMap.get("jzrq"));
dataMap.put("jxsc",0);
dataMap.put("yqsc",0);
dataMap.put("yqyxsc",0);
//查询上一笔假期余额是否有透支情况
String queryBeforeHolidaySql = "select id,yxsc,wxsc,ktsc from uf_jcl_kq_jqye where and ygid=? and jqid=? and sxrq=? and jzrq=? order by modedatacreatedate desc ,modedatacreatetime";
String beforeSxrq = "";
String beforeJzrq = "";
if (edyxq.equals(StartingUnitEnum.NATURAL_YEAR.getKey()) || edyxq.equals(StartingUnitEnum.STARTING_YEAR.getKey())){
beforeSxrq = DateUtil.beforeYear(sxrq,1,DateUtil.yyyyMMdd);
beforeJzrq = DateUtil.beforeYear(jzrq,1,DateUtil.yyyyMMdd);
}else if (edyxq.equals(StartingUnitEnum.NATURAL_MONTH.getKey()) || edyxq.equals(StartingUnitEnum.STARTING_MONTH.getKey())){
beforeSxrq = DateUtil.beforeMonth(sxrq,1);
beforeJzrq = DateUtil.beforeMonth(jzrq,1);
}else if (edyxq.equals(StartingUnitEnum.NATURAL_WEEK.getKey()) || edyxq.equals(StartingUnitEnum.STARTING_WEEK.getKey())){
beforeSxrq = DateUtil.beforeDay(sxrq,7);
beforeJzrq = DateUtil.beforeDay(jzrq,7);
}else if (edyxq.equals(StartingUnitEnum.NATURAL_DAY.getKey())){
beforeSxrq = DateUtil.beforeDay(sxrq,1);
beforeJzrq = DateUtil.beforeDay(jzrq,1);
}
List<Map<String,Object>> beforeHolidayBalanceList = DbTools.getSqlToList(queryBeforeHolidaySql,lyid,ygid,jqid,beforeSxrq,beforeJzrq);
double beforewxsc = 0;
String updatesql = "update uf_jcl_kq_jqye set wxsc=0,yxsc=ktsc where id=?";
if (beforeHolidayBalanceList.size() > 0 && Double.valueOf(beforeHolidayBalanceList.get(0).get("wxsc").toString()) <0){
//beforeHolidayBalanceList
beforewxsc = Double.valueOf(beforeHolidayBalanceList.get(0).get("wxsc").toString());
}
boolean excuteResult = false;
if (dataList.size()>0){
Map<String,Object> condition = Maps.newHashMap();
condition.put("id",dataList.get(0).get("id"));
double ktsc = Double.valueOf(dataMap.get("ktsc").toString());
double oldyxsc = Double.valueOf(Util.null2String(dataList.get(0).get("yxsc")).equals("")?"0":Util.null2String(dataList.get(0).get("yxsc")));
double oldztsc = Double.valueOf(Util.null2String(dataList.get(0).get("ztsc")).equals("")?"0":Util.null2String(dataList.get(0).get("ztsc")));
double oldzfsc = Double.valueOf(Util.null2String(dataList.get(0).get("zfsc")).equals("")?"0":Util.null2String(dataList.get(0).get("zfsc")));
double oldjxsc = Double.valueOf(Util.null2String(dataList.get(0).get("jxsc")).equals("")?"0":Util.null2String(dataList.get(0).get("jxsc")));
dataMap.put("yqsc",dataList.get(0).get("yqsc"));
dataMap.put("yqyxsc",dataList.get(0).get("yqyxsc"));
dataMap.put("jxsc",oldjxsc);
dataMap.put("ztsc",oldztsc);
dataMap.put("zfsc",oldzfsc);
double wxsc = ktsc-oldztsc-oldzfsc-oldyxsc;
if (beforewxsc < 0){
wxsc = wxsc+beforewxsc;
oldyxsc = oldyxsc-beforewxsc;
try {
String lyid = Util.null2String(dataMap.get("lyid"));
String ygid = Util.null2String(dataMap.get("ygid"));
String jqid = Util.null2String(dataMap.get("jqid"));
String sxrq = Util.null2String(dataMap.get("sxrq"));
String jzrq = Util.null2String(dataMap.get("jzrq"));
dataMap.put("yxsc",0);
dataMap.put("ztsc",0);
dataMap.put("wxsc",dataMap.get("ktsc"));
dataMap.put("yqsxrq",dataMap.get("jzrq"));
dataMap.put("jxsc",0);
dataMap.put("yqsc",0);
dataMap.put("yqyxsc",0);
dataMap.put("zfsc",0);
//查询上一笔假期余额是否有透支情况
String queryBeforeHolidaySql = "select id,yxsc,wxsc,ktsc,ztsc,zfsc,modedatacreatedate,modedatacreatetime from uf_jcl_kq_jqye where ygid=? and jqid=? order by modedatacreatedate desc ,modedatacreatetime desc";
String beforeSxrq = "";
String beforeJzrq = "";
if (edyxq.equals(StartingUnitEnum.NATURAL_YEAR.getKey()) || edyxq.equals(StartingUnitEnum.STARTING_YEAR.getKey())){
beforeSxrq = DateUtil.beforeYear(sxrq,1,DateUtil.yyyyMMdd);
beforeJzrq = DateUtil.beforeYear(jzrq,1,DateUtil.yyyyMMdd);
}else if (edyxq.equals(StartingUnitEnum.NATURAL_MONTH.getKey()) || edyxq.equals(StartingUnitEnum.STARTING_MONTH.getKey())){
beforeSxrq = DateUtil.beforeMonth(sxrq,1);
beforeJzrq = DateUtil.beforeMonth(jzrq,1);
}else if (edyxq.equals(StartingUnitEnum.NATURAL_WEEK.getKey()) || edyxq.equals(StartingUnitEnum.STARTING_WEEK.getKey())){
beforeSxrq = DateUtil.beforeDay(sxrq,7);
beforeJzrq = DateUtil.beforeDay(jzrq,7);
}else if (edyxq.equals(StartingUnitEnum.NATURAL_DAY.getKey())){
beforeSxrq = DateUtil.beforeDay(sxrq,1);
beforeJzrq = DateUtil.beforeDay(jzrq,1);
}
dataMap.put("yxsc",oldyxsc);
dataMap.put("wxsc",String.format ("%.2f",wxsc));
excuteResult = DbTools.update(CommonUtil.makeUpdateSql(tableName,dataMap,condition));
}else {
if (beforewxsc < 0){
dataMap.put("wxsc",Double.valueOf(dataMap.get("ktsc").toString())+beforewxsc);
dataMap.put("yxsc",0-beforewxsc);
}
excuteResult = Utils.InsertFormTable(tableName, dataMap, Utils.getFormmodeIdMap());
dataList = DbTools.getSqlToList(queryBeforeHolidaySql,lyid,ygid,jqid,dataMap.get("sxrq"),dataMap.get("jzrq"));
}
if (excuteResult && beforewxsc < 0){
//上一笔假透支归0
DbTools.update(updatesql,beforeHolidayBalanceList.get(0).get("id"));
//修改请假申请明细的假期余额字段将透支的假改成当前的
String currentHolidayId = dataList.get(0).get("id").toString();
String beforeHolidayId = beforeHolidayBalanceList.get(0).get("id").toString();
String sql = "select id,glrq,sysc from uf_jcl_kq_qjjl_dt2 where jqye=? order by id desc";
List<Map<String,Object>> askforleaveList = DbTools.getSqlToList(sql,beforeHolidayId);
BigDecimal overdraftHoliday = new BigDecimal(String.valueOf(Math.abs(beforewxsc)));
List<String> ids = Lists.newArrayList();
for (Map<String,Object> askforleave:askforleaveList){
BigDecimal sysc = new BigDecimal(askforleave.get("sysc").toString());
overdraftHoliday = overdraftHoliday.subtract(sysc,new MathContext(2, RoundingMode.HALF_UP));
if (overdraftHoliday.doubleValue() >= 0){
ids.add(askforleave.get("id").toString());
List<Map<String,Object>> beforeHolidayBalanceList = DbTools.getSqlToList(queryBeforeHolidaySql,ygid,jqid);
double beforewxsc = 0;
boolean excuteResult = false;
if (dataList.size()>0){
Map<String,Object> condition = Maps.newHashMap();
condition.put("id",dataList.get(0).get("id"));
double ktsc = Double.valueOf(dataMap.get("ktsc").toString());
double oldyxsc = Double.valueOf(Util.null2String(dataList.get(0).get("yxsc")).equals("")?"0":Util.null2String(dataList.get(0).get("yxsc")));
double oldztsc = Double.valueOf(Util.null2String(dataList.get(0).get("ztsc")).equals("")?"0":Util.null2String(dataList.get(0).get("ztsc")));
double oldzfsc = Double.valueOf(Util.null2String(dataList.get(0).get("zfsc")).equals("")?"0":Util.null2String(dataList.get(0).get("zfsc")));
double oldjxsc = Double.valueOf(Util.null2String(dataList.get(0).get("jxsc")).equals("")?"0":Util.null2String(dataList.get(0).get("jxsc")));
dataMap.put("yqsc",dataList.get(0).get("yqsc"));
dataMap.put("yqyxsc",dataList.get(0).get("yqyxsc"));
dataMap.put("jxsc",oldjxsc);
dataMap.put("ztsc",oldztsc);
dataMap.put("zfsc",oldzfsc);
double wxsc = VocationCommonUtil.substract(dataMap.get("ktsc").toString(),oldztsc,oldzfsc,oldyxsc);
// if (beforewxsc < 0){
// wxsc = wxsc+beforewxsc;
// oldyxsc = oldyxsc-beforewxsc;
// }
dataMap.put("yxsc",oldyxsc);
dataMap.put("wxsc",String.format ("%.2f",wxsc));
excuteResult = DbTools.update(CommonUtil.makeUpdateSql(tableName,dataMap,condition));
}else {
if (beforeHolidayBalanceList.size() > 0 && Double.valueOf(beforeHolidayBalanceList.get(0).get("wxsc").toString()) <0){
//beforeHolidayBalanceList
beforewxsc = Double.valueOf(beforeHolidayBalanceList.get(0).get("wxsc").toString());
}
if (beforewxsc < 0){
dataMap.put("wxsc",Double.valueOf(dataMap.get("ktsc").toString())+beforewxsc);
dataMap.put("yxsc",0-beforewxsc);
}
excuteResult = Utils.InsertFormTable(tableName, dataMap, Utils.getFormmodeIdMap());
String querNowSql = "select id,yxsc,wxsc,ktsc from uf_jcl_kq_jqye where lyid=? and ygid=? and jqid=? and sxrq=? and jzrq=? and (lylx is null or lylx = 6) order by modedatacreatedate desc ,modedatacreatetime desc";
dataList = DbTools.getSqlToList(querNowSql,lyid,ygid,jqid,dataMap.get("sxrq"),dataMap.get("jzrq"));
if (excuteResult && beforewxsc <0){
handleOverdraftHoliday(beforeHolidayBalanceList.get(0),beforewxsc,dataList.get(0));
}
}
log.info("need adjust askforleave detail2 data : [{}]",ids);
if (ids.size() > 0){
updatesql = "update uf_jcl_kq_qjjl_dt2 set jqye=? where id in ("+String.join(",",ids)+")";
DbTools.update(updatesql,currentHolidayId);
}
}catch (Exception e){
log.error(e.getMessage());
}
}
/**
@ -585,4 +572,64 @@ public class VocationCommonUtil {
return dataList;
}
/**
*
*/
public static void handleOverdraftHoliday(Map<String,Object> beforeHolidayBalance, double beforewxsc, Map<String,Object> nowData)throws Exception{
String updatesql = "update uf_jcl_kq_jqye set wxsc=0,yxsc=? where id=?";
double oldktsc = Double.valueOf(beforeHolidayBalance.get("ktsc").toString());
double oldztsc = Double.valueOf(Util.null2String(beforeHolidayBalance.get("ztsc")).equals("")?"0":Util.null2String(beforeHolidayBalance.get("ztsc")));
double oldzfsc = Double.valueOf(Util.null2String(beforeHolidayBalance.get("zfsc")).equals("")?"0":Util.null2String(beforeHolidayBalance.get("zfsc")));
//上一笔假透支归0
double oldyxsc = new BigDecimal(oldktsc).subtract(new BigDecimal(oldztsc)).subtract(new BigDecimal(oldzfsc),new MathContext(2, RoundingMode.HALF_UP)).doubleValue();
DbTools.update(updatesql,oldyxsc,beforeHolidayBalance.get("id"));
//修改请假申请明细的假期余额字段将透支的假改成当前的
String currentHolidayId = nowData.get("id").toString();
String beforeHolidayId = beforeHolidayBalance.get("id").toString();
String sql = "select id,glrq,sysc from uf_jcl_kq_qjjl_dt2 where jqye=? order by id desc";
List<Map<String,Object>> askforleaveList = DbTools.getSqlToList(sql,beforeHolidayId);
BigDecimal overdraftHoliday = new BigDecimal(String.valueOf(Math.abs(beforewxsc)));
List<String> ids = Lists.newArrayList();
for (Map<String,Object> askforleave:askforleaveList){
BigDecimal sysc = new BigDecimal(askforleave.get("sysc").toString());
overdraftHoliday = overdraftHoliday.subtract(sysc,new MathContext(2, RoundingMode.HALF_UP));
if (overdraftHoliday.doubleValue() >= 0){
ids.add(askforleave.get("id").toString());
}else {
double newsysc = Math.abs(overdraftHoliday.doubleValue());
overdraftHoliday = overdraftHoliday.add(sysc);
String updateSql = "update uf_jcl_kq_qjjl_dt2 set sysc=? where id=?";
Map<String,Object> insertParam = Maps.newHashMap();
insertParam.put("mainid",askforleave.get("mainid"));
insertParam.put("glmxid",askforleave.get("glmxid"));
insertParam.put("jqye",currentHolidayId);
insertParam.put("sysc",overdraftHoliday.doubleValue());
insertParam.put("glrq",askforleave.get("glrq"));
insertParam.put("mxid",askforleave.get("mxid"));
if (DbTools.update(updateSql,newsysc,askforleave.get("id"))){
Utils.InsertFormTable("uf_jcl_kq_qjjl_dt2",insertParam,Utils.getFormmodeIdMap());
}
break;
}
}
log.info("need adjust askforleave detail2 data : [{}]",ids);
if (ids.size() > 0){
updatesql = "update uf_jcl_kq_qjjl_dt2 set jqye=? where id in ("+String.join(",",ids)+")";
DbTools.update(updatesql,currentHolidayId);
}
}
public static double substract(String total,Object...values){
BigDecimal totalbig = new BigDecimal(total);
for (Object value :values){
totalbig = totalbig.subtract(new BigDecimal(String.valueOf(value)),new MathContext(4, RoundingMode.HALF_UP));
}
return totalbig.doubleValue();
}
}

@ -35,7 +35,7 @@ public class GetAskForLeaveRecordListCmd extends AbstractCommonCommand<Map<Strin
String endDate = Util.null2String(params.get("endDate"));
log.debug("targetUserId : {}, businessTripsType : {}, startDate : {}, endDate : {}", targetUserId, businessTripsType, startDate, endDate);
String detailSql = "select a.id,a.cxqj,a.ksrq,a.kssj,a.jsrq,a.jssj,a.qjsc,a.qtj,a.btj,a.cxsm from uf_jcl_kq_qjjl_dt1 a left join uf_jcl_kq_qjjl b on a.mainid=b.id where (a.cxqj is null or a.cxqj<>1) and b.qjry =? and a.ksrq >= ? and a.ksrq <= ? and b.jqlx=?";
String detailSql = "select a.id,a.cxqj,a.ksrq,a.kssj,a.jsrq,a.jssj,a.qjsc,a.qtj,a.btj,a.cxsm from uf_jcl_kq_qjjl_dt1 a where (a.cxqj is null or a.cxqj<>1) and a.qjry =? and a.ksrq >= ? and a.ksrq <= ? and a.jqlx=?";
List<Map<String, Object>> detailList = DbTools.getSqlToList(detailSql,targetUserId,startDate,endDate,businessTripsType);
if (detailList.size() > 0) {
retmap.put("result", detailList);

@ -10,6 +10,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import weaver.conn.RecordSetTrans;
import weaver.general.Util;
import weaver.hrm.company.DepartmentComInfo;
import weaver.soa.workflow.request.*;
@ -51,6 +52,7 @@ public class CommonUtil {
return DbTools.update(insertSql,dataList);
}
/**
* updatesql
* @param tableName

@ -2,6 +2,7 @@ package com.engine.jucailinkq.common.util;
import com.google.common.collect.Maps;
import weaver.conn.RecordSet;
import weaver.conn.RecordSetTrans;
import java.util.ArrayList;
import java.util.HashMap;
@ -10,8 +11,9 @@ import java.util.Map;
public class DbTools {
private static ThreadLocal<RecordSet> thread = ThreadLocal.withInitial(()->new RecordSet());
public static ThreadLocal<RecordSet> thread = ThreadLocal.withInitial(()->new RecordSet());
public static ThreadLocal<RecordSetTrans> threadRecordSetTrans = ThreadLocal.withInitial(()->new RecordSetTrans());
public static List<Map<String,Object>> getSqlToList(String sql,Object...value){
RecordSet rs = thread.get();

Binary file not shown.

@ -14,8 +14,8 @@ import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
for (int i=0;i<10;i++){
System.out.println("i :"+i);
for (int j=0;j<10;j++){
if (j == 3){
break;
@ -23,7 +23,7 @@ public class Test {
System.out.println("j :"+j);
}
System.out.println("sadasdsadasd");
}
System.out.println(DateUtil.getBetWeenMinutes("2024-06-28 17:17","2024-06-28 22:29"));
System.out.println((int) Math.ceil(Double.valueOf("0.18")*60));

@ -52,7 +52,7 @@ public class Test1 extends beforlog {
BigDecimal overdraftHoliday2 = new BigDecimal(0.9000);
BigDecimal overdraftHoliday3 = new BigDecimal(0.1000);
System.out.println(overdraftHoliday.subtract(overdraftHoliday2,new MathContext(2, RoundingMode.HALF_UP)).subtract(overdraftHoliday3,new MathContext(2, RoundingMode.HALF_UP)).toString());
System.out.println(new BigDecimal("-7.0000").subtract(new BigDecimal(String.valueOf("1.0000")),new MathContext(4, RoundingMode.HALF_UP)).doubleValue());
}

@ -1,597 +0,0 @@
package workflow;
import com.engine.jucailinkq.attendance.attendanceanalysis.dto.clockpoint.ClockPointDTO;
import com.engine.jucailinkq.attendance.attendanceanalysis.service.*;
import com.engine.jucailinkq.attendance.attendanceanalysis.service.impl.*;
import com.engine.jucailinkq.attendance.enums.*;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.jucailinkq.common.util.Utils;
import com.engine.core.impl.Service;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
public class UpdateAttendanceResultWrapper extends Service {
private AbnormalAttendanceService beLateService = ServiceUtil.getService(AbnormalAttendanceServiceImpl.class);
private ForgetClockInService forgetClockInService = ServiceUtil.getService(ForgetClockInServiceImpl.class);
private AskForLeaveService askForLeaveService= ServiceUtil.getService(AskForLeaveServiceImpl.class);
private EvectionService evectionService= ServiceUtil.getService(EvectionServiceImpl.class);
private WorkOverTimeService workOverTimeService = ServiceUtil.getService(WorkOverTimeServiceImpl.class);
private ComprehensiveWorkingHourService comprehensiveWorkingHourService = ServiceUtil.getService(ComprehensiveWorkingHourServiceImpl.class);
private AllowanceService allowanceService = ServiceUtil.getService(AllowanceServiceImpl.class);
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
/**
*
* */
public List<Map<String,Object>> recordAbnormalClockIn(Map<String,Object> params){
//卡点
List<ClockPointDTO> clcokInTimeDataList = (List<ClockPointDTO>)params.get("clcokInTimeData");
//考勤项目
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
//排班
List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)params.get("scheduleResult");
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//人员
String userId = Util.null2String(params.get("userId"));
//请假集合
List<Map<String,Object>> askForLeaveList = (List<Map<String,Object>>)params.get("askForLeaveList");
//请假项目
Map<String,Map<String,Object>> askForLeaveItems = (Map<String,Map<String,Object>>)params.get("askForLeaveItems");
//出差集合
List<Map<String,Object>> evectionList = (List<Map<String,Object>>)params.get("evectionList");
//出差项目
Map<String,Map<String,Object>> evectionItems = (Map<String,Map<String,Object>>)params.get("evectionItems");
//以开始时间分割班次
Map<String,List<Map<String, Object>>> startScheduleResult = scheduleResult.stream().collect(Collectors.groupingBy(e->e.get("dtkssj").toString()));
//以结束时间分割班次
Map<String,List<Map<String, Object>>> endScheduleResult = scheduleResult.stream().collect(Collectors.groupingBy(e->e.get("dtjssj").toString()));
List<Map<String,Object>> resultList = Lists.newArrayList();
for (ClockPointDTO clcokInTimedto :clcokInTimeDataList){
//当天打卡数据
Map<String,Object> clcokInTimeData = clcokInTimedto.getClockTime();
//需要计算的班次打卡时间点
String pointTime = clcokInTimedto.getClassTime();
//start开始打卡时间点end结束打卡时间点
ClockPointEnum pointType = clcokInTimedto.getPointType();
//empty:漏卡equal:打卡时间和班次时间相等before打卡时间在班次时间之前after打卡时间在班次时间之后
ClockPointEnum timeType = clcokInTimedto.getTimeType();
//是否是请假、外出打卡
boolean ifevectionOrAskLeave = false;
if (ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey().equals(clcokInTimedto.getClassSegmentType()) ||
ClassSegmentTypeEnum.EVECTION.getKey().equals(clcokInTimedto.getClassSegmentType())){
ifevectionOrAskLeave = true;
}
//班次
Map<String, Object> classInfo = Maps.newHashMap();
if (ClockPointEnum.START.equals(pointType) && !ifevectionOrAskLeave){
classInfo = startScheduleResult.get(pointTime.split(" ")[1]).get(0);
}else if (ClockPointEnum.END.equals(pointType) && !ifevectionOrAskLeave){
classInfo = endScheduleResult.get(pointTime.split(" ")[1]).get(0);
}else if (ClockPointEnum.START.equals(pointType) && ifevectionOrAskLeave){
classInfo = endScheduleResult.get(pointTime.split(" ")[1]).get(0);
}else if (ClockPointEnum.END.equals(pointType) && ifevectionOrAskLeave){
classInfo = startScheduleResult.get(pointTime.split(" ")[1]).get(0);
}
if (ClockPointEnum.EMPTY.equals(timeType) || clcokInTimeData == null){
//漏卡
Map<String,Object> missCardParams = Maps.newHashMap();
missCardParams.put("classInfo",classInfo);
missCardParams.put("clcokInTimeData",clcokInTimeData);
missCardParams.put("attendanceItems",attendanceItems);
missCardParams.put("analysisDate",analysisDate);
missCardParams.put("userId",userId);
missCardParams.put("point",clcokInTimedto);
missCardParams.put("scheduleResult",scheduleResult);
log.debug("missCardParams classInfo: [{}],clcokInTimeData:[{}]",classInfo,clcokInTimeData);
List<Map<String,Object>> iforgetClockIn = forgetClockInService.forgetClockIn(missCardParams);
if (iforgetClockIn.size() >0){
iforgetClockIn.get(0).put("pointTime",pointTime);
iforgetClockIn.get(0).put("bdlx",classInfo.get("bdlx"));
iforgetClockIn.get(0).put("record",clcokInTimedto.isRecord());
iforgetClockIn.get(0).put("clcokInTimeData",clcokInTimeData);
resultList.add(iforgetClockIn.get(0));
}
}else if (ClockPointEnum.START.equals(pointType) && ClockPointEnum.AFTER.equals(timeType)){
//迟到
Map<String,Object> beLateParams = Maps.newHashMap();
beLateParams.put("classInfo",classInfo);
beLateParams.put("clcokInTimeData",clcokInTimeData);
beLateParams.put("attendanceItems",attendanceItems);
beLateParams.put("analysisDate",analysisDate);
beLateParams.put("userId",userId);
beLateParams.put("point",clcokInTimedto);
beLateParams.put("askForLeaveList",askForLeaveList);
beLateParams.put("askForLeaveItems",askForLeaveItems);
beLateParams.put("evectionList",evectionList);
beLateParams.put("evectionItems",evectionItems);
beLateParams.put("scheduleResult",scheduleResult);
log.debug("beLateParams classInfo: [{}],clcokInTimeData:[{}]",classInfo,clcokInTimeData);
List<Map<String,Object>> ifBeLate = beLateService.beLate(beLateParams);
if (ifBeLate.size() > 0){
ifBeLate.get(0).put("pointTime",pointTime);
ifBeLate.get(0).put("bdlx",classInfo.get("bdlx"));
ifBeLate.get(0).put("record",clcokInTimedto.isRecord());
ifBeLate.get(0).put("clcokInTimeData",clcokInTimeData);
resultList.add(ifBeLate.get(0));
}
}else if (ClockPointEnum.END.equals(pointType) && ClockPointEnum.BEFORE.equals(timeType)){
//早退
Map<String,Object> leaveEarlyParams = Maps.newHashMap();
leaveEarlyParams.put("classInfo",classInfo);
leaveEarlyParams.put("clcokInTimeData",clcokInTimeData);
leaveEarlyParams.put("attendanceItems",attendanceItems);
leaveEarlyParams.put("analysisDate",analysisDate);
leaveEarlyParams.put("userId",userId);
leaveEarlyParams.put("point",clcokInTimedto);
leaveEarlyParams.put("askForLeaveList",askForLeaveList);
leaveEarlyParams.put("askForLeaveItems",askForLeaveItems);
leaveEarlyParams.put("evectionList",evectionList);
leaveEarlyParams.put("evectionItems",evectionItems);
leaveEarlyParams.put("scheduleResult",scheduleResult);
log.debug("leaveEarlyParams classInfo: [{}],clcokInTimeData:[{}]",classInfo,clcokInTimeData);
List<Map<String,Object>> ifLeaveEarly = beLateService.leaveEarly(leaveEarlyParams);
if (ifLeaveEarly.size() > 0){
ifLeaveEarly.get(0).put("pointTime",pointTime);
ifLeaveEarly.get(0).put("bdlx",classInfo.get("bdlx"));
ifLeaveEarly.get(0).put("record",clcokInTimedto.isRecord());
ifLeaveEarly.get(0).put("clcokInTimeData",clcokInTimeData);
resultList.add(ifLeaveEarly.get(0));
}
}
}
// if (iforgetClockIn || ifBeLate ||ifLeaveEarly){
// return true;
// }
log.debug("abnormalClockInList : [{}]",resultList);
return resultList;
}
/**
*
* @param params
* @return
*/
public List<Map<String, Object>> recordWorkOverTime(Map<String,Object> params){
return workOverTimeService.recordWorkOverTime(params);
}
/**
*
* @param params
* @return
*/
public Map<String, Object> recordAskForLeave(Map<String,Object> params){
//请假项目
Map<String,Map<String,Object>> askForLeaveItems = (Map<String,Map<String,Object>>)params.get("askForLeaveItems");
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//排班
List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)params.get("scheduleResult");
//请假记录
List<Map<String, Object>> askForLeaveList = (List<Map<String,Object>>)params.get("askForLeaveList");
//异常记录
List<Map<String,Object>> abnormalClockInList = (List<Map<String,Object>>)params.get("abnormalClockInList");
//请假抵消异常
List<Map<String,Object>> offsetAskForLeaveAnomaly = Lists.newArrayList();
Map<String, Object> map = Maps.newHashMap();
List<Map<String, Object>> resultList = Lists.newArrayList();
for (int i=0;i<askForLeaveList.size();i++){
Map<String, Object> resultMap = Maps.newHashMap();
String kssj = askForLeaveList.get(i).get("ksrq") + " "+askForLeaveList.get(i).get("kssj");
String jssj = askForLeaveList.get(i).get("jsrq")+ " "+askForLeaveList.get(i).get("jssj");
//半天请假
String btj = Util.null2String(askForLeaveList.get(i).get("btj"));
//请假时长
String qjsc = Util.null2String(askForLeaveList.get(i).get("qjsc"));
//请假时长分钟数
int qjscMinute = "".equals(qjsc)?0:Double.valueOf(Math.ceil(Double.valueOf(qjsc)*60)).intValue();
//请假项目
Map<String,Object> askForLeaveItem = askForLeaveItems.get(askForLeaveList.get(i).get("jqlx"));
//自动移除时间区间内的非工作时长
String zdycbcndfgzsd = Util.null2String(askForLeaveItem.get("zdycbcndfgzsd"));
//同一天可抵消多个异常
String tybcndbjlhbjs = Util.null2String(askForLeaveItem.get("tybcndbjlhbjs"));
//作用时段
String zysd = Util.null2String(askForLeaveItem.get("zysd"));
//核算量
double hsl = Double.valueOf(Util.null2String(askForLeaveItem.get("hsl")));
//核算单位
String hsdw = Util.null2String(askForLeaveItem.get("hsdw"));
//是否分组呈现
String sffzcx = Util.null2String(askForLeaveItem.get("sffzcx"));
if (!sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){
resultMap.put("item",askForLeaveList.get(i).get("jqlx"));
resultList.add(resultMap);
}
Map<String,Object> param = Maps.newHashMap();
param.put("abnormalClockInList",abnormalClockInList);
param.put("zysd",zysd);
param.put("scheduleResult",scheduleResult);
param.put("analysisDate",analysisDate);
double itemduration = 0;
if ("".equals(Util.null2String(askForLeaveList.get(i).get("kssj"))) || "".equals(Util.null2String(askForLeaveList.get(i).get("jssj")))){
//弹性请假,半天请假
if (CheckBoxEnum.CHECKED.getKey().equals(btj)){
//半天请假
askForLeaveService.askForLeaveByHalfDay(param);
}else if (!"".equals(qjsc)){
//时长请假
itemduration = Utils.getItemduration(hsl,hsdw,Double.valueOf(Double.valueOf(qjsc)*60).intValue(),AccountingUnitEnum.MINUTES);
if (!sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){
resultMap.put("itemduration",itemduration);
}
param.put("qjsc",qjsc);
param.put("tybcndbjlhbjs",tybcndbjlhbjs);
if (abnormalClockInList.size()>0){
Map<String,Object> map1 = askForLeaveService.askForLeaveByDurationTime(param);
abnormalClockInList =(List<Map<String,Object>>)map1.get("abnormalClockInList");
List<Map<String,Object>> offsetAskForLeaveAnomalyList = (List<Map<String,Object>>)map1.get("offsetAskForLeaveAnomaly");
offsetAskForLeaveAnomaly.addAll(offsetAskForLeaveAnomalyList);
//按时长请假,将标记请假作用的时段上的异常 按标准逻辑进行冲销如果冲销后还有多余时长如请假时长为1.5小时但员工当天有两个时段上各有不到30分钟的异常此时每个时段0.5小时需要冲销多出来的0.5小时放哪里,放到异常多的那个时段上
//有几个抵消异常计入几个请假考勤项目
if (sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){
int total = offsetAskForLeaveAnomalyList.stream().mapToInt(e->Integer.valueOf(e.get("betweenMinutes").toString())).sum();
int more = 0;
if (total < qjscMinute){
more = qjscMinute-total;
}
List<Map<String,Object>> sortOffsetAskForLeaveAnomalyList = offsetAskForLeaveAnomalyList.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("betweenMinutes").toString()))).collect(Collectors.toList());
for (int j=0;j<sortOffsetAskForLeaveAnomalyList.size();j++){
//异常班段类型
String bdlx = sortOffsetAskForLeaveAnomalyList.get(i).get("bdlx").toString();
//异常时间
int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString());
if (j == 0){
time = time+more;
}
Map<String,Object> item = CommonUtil.assembleAskForOrEvectionItem(askForLeaveItem,bdlx);
if (item != null){
itemduration = Utils.getItemduration(Double.valueOf(Util.null2String(item.get("hsl"))),Util.null2String(item.get("hsdw")),time,AccountingUnitEnum.MINUTES);
Map<String, Object> itemMap = Maps.newHashMap();
itemMap.put("itemduration",itemduration);
itemMap.put("item",item.get("keyid"));
resultList.add(itemMap);
}
}
}
}else {
if (sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){
Map<String,Object> item = CommonUtil.assembleAskForOrEvectionItem(askForLeaveItem,ClassSegmentTypeEnum.WORK_TIME.getKey());
if (item != null){
Map<String, Object> itemMap = Maps.newHashMap();
itemduration = Utils.getItemduration(Double.valueOf(Util.null2String(item.get("hsl"))),Util.null2String(item.get("hsdw")),qjscMinute,AccountingUnitEnum.MINUTES);
itemMap.put("itemduration",itemduration);
itemMap.put("item",item.get("keyid"));
resultList.add(itemMap);
}
}
}
}
}else {
//按照开始时间,结束时间请假
int timeMinutes = DateUtil.getBetWeenMinutes(kssj,jssj);
if (CheckBoxEnum.CHECKED.getKey().equals(zdycbcndfgzsd)){
timeMinutes = Utils.removeRestTime(kssj,jssj,scheduleResult,analysisDate);
}
if (timeMinutes > qjscMinute){
timeMinutes = qjscMinute;
}
log.debug("recordAskForLeave timeMinutes [{}] ,hsl:{},hsdw",timeMinutes,hsl,hsdw);
itemduration = Utils.getItemduration(hsl,hsdw,timeMinutes,AccountingUnitEnum.MINUTES);
param.put("kssj",kssj);
param.put("jssj",jssj);
if (abnormalClockInList.size()>0){
Map<String,Object> map1 = askForLeaveService.askForLeaveByTime(param);
abnormalClockInList = (List<Map<String,Object>>)map1.get("abnormalClockInList");
offsetAskForLeaveAnomaly.addAll((List<Map<String,Object>>)map1.get("offsetAskForLeaveAnomaly"));
}
if (sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){
//按时间区间请假时 将连接的同一类型时段设置一种假别 计算出分钟时长后按核算量算出核算时长及单位即可
Map<String,Object> proportionMap = Utils.getAskLeaveAndEvctionProportion(kssj,jssj,scheduleResult,analysisDate);
for (Map.Entry<String,Object> entry: proportionMap.entrySet()){
String bdlx = entry.getKey();
int betweenTimes = Integer.valueOf(entry.getValue().toString());
Map<String,Object> item = CommonUtil.assembleAskForOrEvectionItem(askForLeaveItem,bdlx);
if (item != null){
Map<String, Object> itemMap = Maps.newHashMap();
itemMap.put("itemduration",Utils.getItemduration(Double.valueOf(Util.null2String(item.get("hsl"))),Util.null2String(item.get("hsdw")),betweenTimes,AccountingUnitEnum.MINUTES));
itemMap.put("item",item.get("keyid"));
resultList.add(itemMap);
}
}
}else {
resultMap.put("itemduration",itemduration);
}
}
}
map.put("resultList",resultList);
map.put("abnormalClockInList",abnormalClockInList);
map.put("offsetAskForLeaveAnomaly",offsetAskForLeaveAnomaly);
return map;
}
/**
*
* @param params
* @return
*/
public Map<String, Object> recordEvection(Map<String,Object> params){
//外出项目
Map<String,Map<String,Object>> evectionItems = (Map<String,Map<String,Object>>)params.get("evectionItems");
//排班
List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)params.get("scheduleResult");
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//出差记录
List<Map<String, Object>> evectionList = (List<Map<String,Object>>)params.get("evectionList");
//异常记录
List<Map<String,Object>> abnormalClockInList = (List<Map<String,Object>>)params.get("abnormalClockInList");
//外出抵消异常
List<Map<String,Object>> offsetEvectionAnomaly = Lists.newArrayList();
Map<String, Object> map = Maps.newHashMap();
List<Map<String, Object>> resultList = Lists.newArrayList();
for (int i=0;i<evectionList.size();i++){
Map<String, Object> resultMap = Maps.newHashMap();
resultList.add(resultMap);
resultMap.put("item",evectionList.get(i).get("cclx"));
String kssj = evectionList.get(i).get("ksrq") + " "+evectionList.get(i).get("kssj");
String jssj = evectionList.get(i).get("jsrq")+ " "+evectionList.get(i).get("jssj");
//半天请假
String btj = Util.null2String(evectionList.get(i).get("btcc"));
//请假时长
String qjsc = Util.null2String(evectionList.get(i).get("ccsc"));
//请假项目
Map<String,Object> evectionItem = evectionItems.get(evectionList.get(i).get("cclx"));
//自动移除时间区间内的非工作时长
String zdycbcndfgzsd = Util.null2String(evectionItem.get("zdycbcndfgzsd"));
//同一天可抵消多个异常
String tybcndbjlhbjs = Util.null2String(evectionItem.get("tybcndbjlhbjs"));
//核算量
double hsl = Double.valueOf(Util.null2String(evectionItem.get("hsl")));
//核算单位
String hsdw = Util.null2String(evectionItem.get("hsdw"));
//作用时间段
String zysd = Util.null2String(evectionItem.get("zysd"));
Map<String,Object> param = Maps.newHashMap();
param.put("abnormalClockInList",abnormalClockInList);
param.put("zysd",zysd);
param.put("scheduleResult",scheduleResult);
param.put("analysisDate",analysisDate);
double itemduration = 0;
if ("".equals(Util.null2String(evectionList.get(i).get("kssj"))) || "".equals(Util.null2String(evectionList.get(i).get("jssj")))){
//弹性请假,半天出差
if (CheckBoxEnum.CHECKED.getKey().equals(btj)){
//半天出差
evectionService.evectionByHalfDay(param);
}else if (!"".equals(qjsc)){
//时长出差
itemduration = Utils.getItemduration(hsl,hsdw,Double.valueOf(Double.valueOf(qjsc)*60).intValue(),AccountingUnitEnum.MINUTES);
resultMap.put("itemduration",itemduration);
param.put("ccsc",qjsc);
param.put("tybcndbjlhbjs",tybcndbjlhbjs);
if (abnormalClockInList.size()>0){
Map<String,Object> map1 =evectionService.evectionByDurationTime(param);
abnormalClockInList = (List<Map<String,Object>>)map1.get("abnormalClockInList");
offsetEvectionAnomaly.addAll((List<Map<String,Object>>)map1.get("offsetEvectionAnomaly"));
}
}
}else {
//按照开始时间,结束时间出差
int timeMinutes = DateUtil.getBetWeenMinutes(kssj,jssj);
if (CheckBoxEnum.CHECKED.getKey().equals(zdycbcndfgzsd)){
timeMinutes = Utils.removeRestTime(kssj,jssj,scheduleResult,analysisDate);
}
log.debug("recordEvection timeMinutes [{}] ,hsl:{},hsdw",timeMinutes,hsl,hsdw);
itemduration = Utils.getItemduration(hsl,hsdw,timeMinutes,AccountingUnitEnum.MINUTES);
resultMap.put("itemduration",itemduration);
param.put("kssj",kssj);
param.put("jssj",jssj);
if (abnormalClockInList.size()>0){
Map<String,Object> map1 = evectionService.evectionByTime(param);
abnormalClockInList = (List<Map<String,Object>>)map1.get("abnormalClockInList");
offsetEvectionAnomaly.addAll((List<Map<String,Object>>)map1.get("offsetEvectionAnomaly"));
}
}
}
map.put("resultList",resultList);
map.put("abnormalClockInList",abnormalClockInList);
map.put("offsetEvectionAnomaly",offsetEvectionAnomaly);
return map;
}
/**
* ,
* @param params
* @return
*/
public List<Map<String,Object>> recordNormal(Map<String,Object> params){
//排班
List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)params.get("scheduleResult");
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//人员
String userId = Util.null2String(params.get("userId"));
//日期类型
String rqlx = Util.null2String(scheduleResult.get(0).get("rqlx"));
List<Map<String, Object>> resultList = Lists.newArrayList();
Map<String,Object> normalParams = Maps.newHashMap();
// normalParams.put("userId",userId);
// normalParams.put("date",analysisDate);
// normalParams.put("classInfo",scheduleResult);
// normalParams.put("modeId",params.get("modeId"));
if (DateTypeEnum.WORK_DAY.getKey().equals(rqlx) || DateTypeEnum.CHANGECLASS.getKey().equals(rqlx)){
//工作日
normalParams.put("item",SystemItemEnum.WORK_DAY.getKey());
}else if (DateTypeEnum.HOLIDAY.getKey().equals(rqlx)){
//节假日
normalParams.put("item",SystemItemEnum.HOLIDAY.getKey());
}else if (DateTypeEnum.PUBLIC_RESTDAY.getKey().equals(rqlx) ||
DateTypeEnum.EXCHANGE_LEAVEDAY.getKey().equals(rqlx)){
//休息日
normalParams.put("item",SystemItemEnum.REST_DAY.getKey());
}
resultList.add(normalParams);
//commandExecutor.execute(new UpdateAttendanceResultsCmd(normalParams));
return resultList;
}
/**
*
* @param params
* @return
*/
public boolean recordNoClass(Map<String,Object> params){
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//人员
String userId = Util.null2String(params.get("userId"));
//综合工时
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)params.get("workHourItems");
//津贴
Map<String,Object> allowanceMap = (Map<String,Object>)params.get("allowanceMap");
log.debug("userId : {} ,analysisDate: {} have no class",userId,analysisDate);
Map<String,Object> recordParam = Maps.newHashMap();
recordParam.put("userId",userId);
recordParam.put("analysisDate",analysisDate);
recordParam.put("recordData",Lists.newArrayList());
String rqlx = CommonUtil.getRqlx(userId,analysisDate);
recordParam.put("rqlx",rqlx);
recordParam.put("classInfo",Lists.newArrayList());
recordParam.put("recordDataTime",Maps.newHashMap());
recordParam.put("attendanceDuration",0);
recordParam.put("formmodeIdMap",Utils.getFormmodeIdMap());
List<Map<String, Object>> recordDataList = Lists.newArrayList();;
if (allowanceMap.get("ifnotWork") != null){
//次日免班
recordParam.put("cqzt",CheckBoxEnum.UNCHECKED.getKey());
utilService.recordItem(recordParam);
return false;
}
if (rqlx.equals(DateTypeEnum.WORK_DAY.getKey()) || rqlx.equals(DateTypeEnum.CHANGECLASS.getKey())){
recordParam.put("cqzt",CheckBoxEnum.CHECKED.getKey());
recordDataList.add(new HashMap(){{
put("item",SystemItemEnum.NO_SCHEDULING.getKey());
put("itemduration","NULL");
}});
}else {
recordParam.put("cqzt",CheckBoxEnum.UNCHECKED.getKey());
recordParam.put("sfxx",CheckBoxEnum.CHECKED.getKey());
}
if (workHourItems != null && workHourItems.size() >0 ){
//核算工时的日期类型
String hsgsdrqlx = Util.null2String(workHourItems.get(0).get("hsgsdrqlx"));
rqlx = Utils.getDateType(analysisDate,Util.null2String(workHourItems.get(0).get("qyrl")));
params.put("workHourItem",workHourItems.get(0));
if (CommonUtil.ifContainStr(hsgsdrqlx,rqlx,",")){
//走综合工时
comprehensiveWorkingHourService.excuteByWorkHour(params);
}else {
//没有排班
recordParam.put("recordData",recordDataList);
utilService.recordItem(recordParam);
}
}else {
//没有排班
recordParam.put("recordData",recordDataList);
utilService.recordItem(recordParam);
}
return false;
}
/**
*
* @param params
* @return
*/
public Map<String,Object> allowanceHandle(Map<String,Object> params){
return allowanceService.allowanceHandle(params);
}
/**
*
* @param params
* @return
*/
public Map<String,Object> removeAbnormal(Map<String,Object> params){
return allowanceService.removeAbnormal(params);
}
/**
*
* @param params
* @return
*/
public Map<String,Object> getAskForLeave(Map<String,Object> params){
return askForLeaveService.getAskForLeave(params);
}
/**
*
* @param params
* @return
*/
public Map<String,Object> getEvection(Map<String,Object> params){
return evectionService.getEvection(params);
}
/**
*
*/
public void recordRest(Map<String,Object> recordParam){
recordParam.put("recordData",Lists.newArrayList());
recordParam.put("recordDataTime",Maps.newHashMap());
recordParam.put("attendanceDuration",0);
recordParam.put("cqzt",CheckBoxEnum.UNCHECKED.getKey());
recordParam.put("sfxx",CheckBoxEnum.CHECKED.getKey());
utilService.recordItem(recordParam);
}
}
Loading…
Cancel
Save