zm_dev
liuliang 1 year ago
parent a382660455
commit e2663afe3d

@ -1 +1 @@
<EFBFBD><EFBFBD><EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>Z譿<EFBFBD>y<EFBFBD>Q<EFBFBD><EFBFBD>
<EFBFBD>[<EFBFBD><EFBFBD>鵿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

@ -10,17 +10,58 @@
</component>
<component name="ChangeListManager">
<list default="true" id="baeb3dfb-5097-46c5-933e-6d1dab18b815" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/src/com/engine/attendance/attendanceanalysis/service/ComprehensiveWorkingHourService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/com/engine/attendance/attendanceanalysis/service/impl/ComprehensiveWorkingHourServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/com/engine/attendance/attendanceplan/cmd/GetWorkHoursItemByPersonCmd.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/test/shuju/SaleOrderEnum.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/test/shuju/Test.java" afterDir="false" />
<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/attendance/vacation/cmd/VocationCmd.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/vacation/cmd/VocationCmd.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/vacation/job/holidaygeneration/tactics/ByIntervalPayMentWay.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/vacation/job/holidaygeneration/tactics/ByIntervalPayMentWay.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/vacation/job/holidaygeneration/tactics/BySchedulePaymentWay.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/vacation/job/holidaygeneration/tactics/BySchedulePaymentWay.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/vacation/job/holidaygeneration/tactics/SinglePaymentInFullWay.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/vacation/job/holidaygeneration/tactics/SinglePaymentInFullWay.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/vacation/util/VocationCommonUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/vacation/util/VocationCommonUtil.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/log/sdk.log" beforeDir="false" afterPath="$PROJECT_DIR$/log/sdk.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/artifacts/hrm_attendance/hrm-attendance.jar" beforeDir="false" afterPath="$PROJECT_DIR$/out/artifacts/hrm_attendance/hrm-attendance.jar" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/attendanceanalysis/cmd/RecordDataCmd.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/attendanceanalysis/cmd/RecordDataCmd.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/attendanceanalysis/web/AttendanceanalysisAction.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/attendanceanalysis/web/AttendanceanalysisAction.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/attendanceplan/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/attendanceplan/README.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/attendanceplan/service/AttendancePlanService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/attendanceplan/service/AttendancePlanService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/attendanceplan/service/impl/AttendancePlanServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/attendanceplan/service/impl/AttendancePlanServiceImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/attendanceplan/web/AttendancePlanAction.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/attendanceplan/web/AttendancePlanAction.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/vacation/job/holidaygeneration/HolidayGenerationJob.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/vacation/job/holidaygeneration/HolidayGenerationJob.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/attendance/vacation/service/impl/VocationServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/attendance/vacation/service/impl/VocationServiceImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/common/service/impl/CommonServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/common/service/impl/CommonServiceImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/common/util/CommonUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/common/util/CommonUtil.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/common/util/DateUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/common/util/DateUtil.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/com/engine/common/util/Utils.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/com/engine/common/util/Utils.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceanalysis/web/AttendanceanalysisAction.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceanalysis/web/AttendanceanalysisAction.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceplan/service/AttendancePlanService.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceplan/service/AttendancePlanService.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceplan/service/impl/AttendancePlanServiceImpl.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceplan/service/impl/AttendancePlanServiceImpl.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceplan/web/AttendancePlanAction.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/attendanceplan/web/AttendancePlanAction.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/cmd/VocationCmd.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/cmd/VocationCmd.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/job/holidaygeneration/HolidayGenerationJob.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/job/holidaygeneration/HolidayGenerationJob.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/job/holidaygeneration/tactics/ByIntervalPayMentWay.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/job/holidaygeneration/tactics/ByIntervalPayMentWay.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/job/holidaygeneration/tactics/BySchedulePaymentWay.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/job/holidaygeneration/tactics/BySchedulePaymentWay.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/job/holidaygeneration/tactics/SinglePaymentInFullWay.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/job/holidaygeneration/tactics/SinglePaymentInFullWay.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/service/impl/VocationServiceImpl.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/service/impl/VocationServiceImpl.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/util/VocationCommonUtil.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/attendance/vacation/util/VocationCommonUtil.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/common/service/impl/CommonServiceImpl.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/common/service/impl/CommonServiceImpl.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/common/util/CommonUtil.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/common/util/CommonUtil.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/common/util/DateUtil.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/common/util/DateUtil.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/classes/com/engine/common/util/Utils.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/engine/common/util/Utils.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/test-classes/TestObj.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/test-classes/TestObj.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/target/test-classes/shuju/TestMain.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/test-classes/shuju/TestMain.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/test/TestObj.java" beforeDir="false" afterPath="$PROJECT_DIR$/test/TestObj.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/test/shuju/TestMain.java" beforeDir="false" afterPath="$PROJECT_DIR$/test/shuju/TestMain.java" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -63,7 +104,7 @@
<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$/../../../easyentry" />
<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.proportion" value="0.15" />
@ -82,11 +123,11 @@
<recent name="D:\项目备份\考勤\hrm-attendance\src\com\engine\jucailin\cmd\calendar" />
</key>
<key name="CopyClassDialog.RECENTS_KEY">
<recent name="shuju" />
<recent name="com.engine.attendance.attendanceanalysis.service.impl" />
<recent name="com.engine.attendance.workflow.action" />
<recent name="com.api.attendance.workflow" />
<recent name="com.engine.attendance.workflow.enums" />
<recent name="com.engine.common.util" />
<recent name="com.engine.kq.biz" />
</key>
</component>
<component name="RunAnythingCache">
@ -94,11 +135,17 @@
<command value="organzationList" />
</option>
</component>
<component name="RunManager" selected="Application.TestMain">
<configuration name="Test" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="Test" />
<component name="RunManager" selected="Application.Test (1)">
<configuration name="Test (1)" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="shuju.Test" />
<module name="hrm-attendance" />
<shortenClasspath name="MANIFEST" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="shuju.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
@ -125,7 +172,7 @@
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="TestObj" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<configuration name="TestObj" type="Application" factoryName="Application" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="TestObj" />
<module name="hrm-attendance" />
<shortenClasspath name="MANIFEST" />
@ -149,11 +196,10 @@
</configuration>
<recent_temporary>
<list>
<item itemvalue="Application.Test (1)" />
<item itemvalue="Application.TestMain" />
<item itemvalue="Application.TestMethod" />
<item itemvalue="Application.TestObj" />
<item itemvalue="Application.TestOneTimePayMentWay" />
<item itemvalue="Application.Test" />
</list>
</recent_temporary>
</component>
@ -506,6 +552,14 @@
<workItem from="1712107764009" duration="8487000" />
<workItem from="1712122093628" duration="7701000" />
<workItem from="1712137663376" duration="1779000" />
<workItem from="1712460791770" duration="11290000" />
<workItem from="1712494547624" duration="2301000" />
<workItem from="1712539366015" duration="1352000" />
<workItem from="1712541255335" duration="27965000" />
<workItem from="1712579434383" duration="8148000" />
<workItem from="1712625932205" duration="4880000" />
<workItem from="1712631543852" duration="25091000" />
<workItem from="1712712249272" duration="6291000" />
</task>
<servers />
</component>

File diff suppressed because it is too large Load Diff

@ -31,7 +31,7 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
String userId = Util.null2String(params.get("userId"));
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//数据集合
//项目数据集合
List<Map<String, Object>> recordDataList = (List<Map<String, Object>>)params.get("recordData");
//日期类型
String rqlx = Util.null2String(params.get("rqlx"));
@ -67,7 +67,7 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,userId,analysisDate);
if (dataList.size() >0){
sql = "update uf_jcl_kq_cqjg set cqsc="+attendanceDuration+",cqzt="+cqzt+",fxrq='"+DateUtil.getCurrentTime()+"',rqlx="+rqlx;
if (classInfo.get(0).get("bcxx") == null || "".equals(classInfo.get(0).get("bcxx"))){
if (classInfo.get(0) == null || classInfo.get(0).get("bcxx") == null || "".equals(classInfo.get(0).get("bcxx"))){
sql = sql + ",bc=NULL,bcbdxx=NULL,";
}else {
sql = sql + ",bc="+classInfo.get(0).get("bcxx")+",bcbdxx='"+classInfo.get(0).get("bcsdxx")+"',";
@ -110,8 +110,8 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
insertDatas.add(userList.get(0).get("departmentid"));
insertDatas.add(userList.get(0).get("jobtitle"));
insertDatas.add(analysisDate);
insertDatas.add(classInfo.get(0).get("bcxx"));
insertDatas.add(classInfo.get(0).get("bcsdxx"));
insertDatas.add(classInfo.size()>0?classInfo.get(0).get("bcxx"):null);
insertDatas.add(classInfo.size()>0?classInfo.get(0).get("bcsdxx"):null);
insertDatas.add(cqzt);
insertDatas.add(attendanceDuration);
insertDatas.add(1);

@ -39,13 +39,18 @@ public class AttendanceAnalysisJob extends BaseCronJob {
String userId = Util.null2String(userMap.get("id"));
/**获得人员考勤项目*/
Map<String,Object> paramMap = Maps.newHashMap();
paramMap.put("startDate","");
paramMap.put("endDate","");
paramMap.put("startDate",beforeThreeDayDate);
paramMap.put("endDate",beforeOneDayDate);
paramMap.put("resourceId",userId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(paramMap);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/**
*
*/
Map<String,Object> workHourdataMap = basicsetService.getWorkHoursItemByPerson(paramMap);
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)workHourdataMap.get("data");
attendanceAnalysisService.attendanceAnalysis(userId,collect.get(userMap.get("id")),attendanceItems);
attendanceAnalysisService.attendanceAnalysis(userId,collect.get(userMap.get("id")),attendanceItems,workHourItems);
}
log.info("********AttendanceAnalysisJob end********");
}

@ -0,0 +1,14 @@
package com.engine.attendance.attendanceanalysis.service;
import java.util.Map;
/**
*
*/
public interface ComprehensiveWorkingHourService {
/**
*
* @return
*/
Map<String,Object> excuteByWorkHour(Map<String,Object> param);
}

@ -0,0 +1,359 @@
package com.engine.attendance.attendanceanalysis.service.impl;
import com.engine.attendance.attendanceanalysis.cmd.item.AbsenteeismItemCmd;
import com.engine.attendance.attendanceanalysis.cmd.item.BeLateItemCmd;
import com.engine.attendance.attendanceanalysis.cmd.item.LeaveEarlyItemCmd;
import com.engine.attendance.attendanceanalysis.service.ComprehensiveWorkingHourService;
import com.engine.attendance.attendanceanalysis.service.UtilService;
import com.engine.attendance.enums.AccountingUnitEnum;
import com.engine.attendance.enums.CheckBoxEnum;
import com.engine.attendance.enums.SystemItemEnum;
import com.engine.common.util.CommonUtil;
import com.engine.common.util.DateUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.common.util.Utils;
import com.engine.core.impl.Service;
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.general.Util;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.ZoneOffset;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j
public class ComprehensiveWorkingHourServiceImpl extends Service implements ComprehensiveWorkingHourService {
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
@Override
public Map<String, Object> excuteByWorkHour(Map<String, Object> param) {
Map<String, Object> resultMap = Maps.newHashMap();
//按照日期分割的打卡时间
List<Map<String,Object>> clockInTimeList = (List<Map<String,Object>>) param.get("clockInTimeCollect");
//分析日期
String analysisDate = Util.null2String(param.get("analysisDate"));
//人员
String userId = Util.null2String(param.get("userId"));
//考勤项目
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)param.get("attendanceItems");
//综合工时
Map<String,Object> workHourItem = (Map<String,Object>)param.get("workHourItem");
//日工作时长不足,核算异常
String rgzscbzhsyc= Util.null2String(workHourItem.get("rgzscbzhsyc"));
//日最晚打卡报到时间
String rzwdkbdsj = Util.null2String(workHourItem.get("rzwdkbdsj"));
//日工作时长要求
double rgzscyq = Double.valueOf(Util.null2String(workHourItem.get("rgzscyq")));
//累计出勤时长的核算分钟数
int ljcqscdhsfzs = Integer.valueOf(Util.null2String(workHourItem.get("ljcqscdhsfzs")));
//超出日工作时长要求,计入出勤 时长
String ccrgzscyqjrcqsc = Util.null2String(workHourItem.get("ccrgzscyqjrcqsc"));
//日最长工作时长
double rzcgzsc = Double.valueOf(Util.null2String(workHourItem.get("rzcgzsc")));
//核算工时的日期类型
String hsgsdrqlx = Util.null2String(workHourItem.get("hsgsdrqlx"));
String cqzt = "0";
String rqlx = Utils.getDateType(analysisDate,Util.null2String(workHourItem.get("qyrl")));
if (!CommonUtil.ifContainStr(hsgsdrqlx,rqlx,",")){
resultMap.put("message","执行的日期不在设置的日期类型内");
return resultMap;
}
//异常项目
List<Map<String, Object>> recordDataList = Lists.newArrayList();
clockInTimeList = getClockInDataByRule(param);
int betweenMinute = getDurationMinute(clockInTimeList);
if (betweenMinute == 0 || clockInTimeList.size()==0){
if (rgzscbzhsyc.equals(CheckBoxEnum.CHECKED.getKey())){
//记漏打卡项目
Map<String, Object> itemMap = Maps.newHashMap();
itemMap.put("item", SystemItemEnum.MISSING_CLOCK_IN.getKey());
itemMap.put("itemduration","1");
recordDataList.add(itemMap);
}
}
double adjustBetWeenMinute = Utils.getItemdurationDown(ljcqscdhsfzs, AccountingUnitEnum.MINUTES.getKey(),betweenMinute,AccountingUnitEnum.MINUTES);
double adjustBetweenHour = new BigDecimal(adjustBetWeenMinute).divide(new BigDecimal(60),2, RoundingMode.HALF_UP).doubleValue();
log.info("betweenMinute : [{}],adjustBetWeenMinute: [{}],betweenHour:[{}]",betweenMinute,adjustBetWeenMinute,adjustBetweenHour);
if (clockInTimeList.size() > 0){
String reportTime = clockInTimeList.get(0).get("signdate")+" "+clockInTimeList.get(0).get("signtime");
int lateDurationTime = 0;
int earlyLeaveMinute = 0;
Map<String,Object> abnormalParams = Maps.newHashMap();
abnormalParams.put("attendanceItems",attendanceItems);
abnormalParams.put("rqlx",rqlx);
if (!"".equals(rzwdkbdsj)){
String lastReportTime = Utils.installTime(analysisDate,rzwdkbdsj);
if (Utils.dateGreaterThan(reportTime,lastReportTime)){
//迟到
lateDurationTime = DateUtil.getBetWeenDays(lastReportTime,reportTime);
}
}
if ((betweenMinute+lateDurationTime) < (rgzscyq*60)){
//早退
earlyLeaveMinute = Double.valueOf(rgzscyq*60-(betweenMinute+lateDurationTime)).intValue();
}
if (rgzscbzhsyc.equals(CheckBoxEnum.CHECKED.getKey())){
if (lateDurationTime > 0){
//计入迟到项目
abnormalParams.put("time",lateDurationTime);
Map<String,Object> result = commandExecutor.execute(new BeLateItemCmd(abnormalParams));
List<Map<String,Object>> workTimeBeLateItems = (List<Map<String,Object>>)result.get("attendanceItems");
if (workTimeBeLateItems.size() == 0){
workTimeBeLateItems = (List<Map<String,Object>>)commandExecutor.execute(new AbsenteeismItemCmd(abnormalParams)).get("attendanceItems");
}
if (workTimeBeLateItems.size() > 0){
double hsl = Double.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl")));
String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw"));
double itemduration = Utils.getItemduration(hsl,hsdw,lateDurationTime,AccountingUnitEnum.MINUTES);
Map<String, Object> itemMap = Maps.newHashMap();
itemMap.put("item", workTimeBeLateItems.get(0).get("key"));
itemMap.put("itemduration",itemduration);
recordDataList.add(itemMap);
}
}
if (earlyLeaveMinute > 0){
//计早退项目
abnormalParams.put("time",lateDurationTime);
Map<String,Object> result = commandExecutor.execute(new LeaveEarlyItemCmd(abnormalParams));
List<Map<String,Object>> workTimeBeLateItems = (List<Map<String,Object>>)result.get("attendanceItems");
if (workTimeBeLateItems.size() == 0){
workTimeBeLateItems = (List<Map<String,Object>>)commandExecutor.execute(new AbsenteeismItemCmd(abnormalParams)).get("attendanceItems");
}
if (workTimeBeLateItems.size() > 0){
double hsl = Double.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl")));
String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw"));
double itemduration = Utils.getItemduration(hsl,hsdw,earlyLeaveMinute,AccountingUnitEnum.MINUTES);
Map<String, Object> itemMap = Maps.newHashMap();
itemMap.put("item", workTimeBeLateItems.get(0).get("key"));
itemMap.put("itemduration",itemduration);
recordDataList.add(itemMap);
}
}
}
}
//超出日工作时长要求,计入出勤 时长,否则最大为日工作时长要求
if (CheckBoxEnum.CHECKED.getKey().equals(ccrgzscyqjrcqsc)){
if (adjustBetweenHour > rzcgzsc){
adjustBetweenHour = rzcgzsc;
}
}else {
if (adjustBetweenHour > rgzscyq){
adjustBetweenHour=rgzscyq;
}
}
if (recordDataList.size() > 0){
cqzt="1";
}
Map<String,Object> recordParam = Maps.newHashMap();
recordParam.put("userId",userId);
recordParam.put("analysisDate",analysisDate);
recordParam.put("recordData",recordDataList);
recordParam.put("rqlx",rqlx);
recordParam.put("classInfo",Lists.newArrayList());
recordParam.put("recordDataTime",getRecordDataTime(clockInTimeList));
recordParam.put("attendanceDuration",adjustBetweenHour);
recordParam.put("formmodeIdMap",Utils.getFormmodeIdMap());
recordParam.put("cqzt",cqzt);
resultMap.put("recordParam",recordParam);
utilService.recordItem(recordParam);
return resultMap;
}
/**
*
* @param param
* @return
*/
public List<Map<String,Object>> getClockInDataByRule(Map<String, Object> param){
//按照日期分割的打卡时间
List<Map<String,Object>> clockInTimeList = (List<Map<String,Object>>) param.get("clockInTimeCollect");
//分析日期
String analysisDate = Util.null2String(param.get("analysisDate"));
//综合工时
Map<String,Object> workHourItem = (Map<String,Object>)param.get("workHourItem");
//最早打卡上班的开始时间
String zzdksbdkssj = Util.null2String(workHourItem.get("zzdksbdkssj"));
//最晚打卡下班的开始时间
String zwdkxbdkssj = Util.null2String(workHourItem.get("zwdkxbdkssj"));
//日工作时长计算规则
String rgzscjsgz = Util.null2String(workHourItem.get("zwdkxbdkssj"));
//调整上班开始到
String dzsbksd = Util.null2String(workHourItem.get("dzsbksd"));
//误打卡忽略分钟数
int wdkhlfzs = Util.null2String(workHourItem.get("wdkhlfzs")).equals("")?1:Integer.valueOf(Util.null2String(workHourItem.get("wdkhlfzs")));
String startTime = analysisDate+" "+zzdksbdkssj;
String endTime = analysisDate+" "+zwdkxbdkssj;
if (DateUtil.getTime(startTime).compareTo(DateUtil.getTime(endTime)) >=0){
endTime = DateUtil.AfterDay(analysisDate,1) +" "+zwdkxbdkssj;
}
String finalEndTime = endTime;
clockInTimeList = clockInTimeList.stream().filter(e -> {
String signdate = Util.null2String(e.get("signdate"));
String signtime = Util.null2String(e.get("signtime"));
String time = signdate +" "+signtime;
return DateUtil.getTime(startTime).compareTo(DateUtil.getTime(time)) <=0 && DateUtil.getTime(finalEndTime).compareTo(DateUtil.getTime(time)) >=0;
}).collect(Collectors.toList());
clockInTimeList = clockInTimeList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
if (clockInTimeList.size() == 0){
return clockInTimeList;
}
List<Map<String,Object>> newClockInTimeList = Lists.newArrayList();
if ("0".equals(rgzscjsgz)){
//最早最晚打卡间隔时长
newClockInTimeList.add(clockInTimeList.get(0));
newClockInTimeList.add(clockInTimeList.get(clockInTimeList.size()-1));
}else if ("1".equals(rgzscjsgz)){
//依次累加成对打卡间隔时长
if (clockInTimeList.size() %2 == 1){
clockInTimeList.remove(clockInTimeList.size()-1);
newClockInTimeList = clockInTimeList;
}
if (newClockInTimeList.size() > 1){
//数据清洗
Set<Map<String,Object>> needRemoveData = Sets.newHashSet();
for (int i=0;i<newClockInTimeList.size()-1;i++){
String time1 = newClockInTimeList.get(i).get("signdate")+" "+newClockInTimeList.get(i).get("signtime");
for (int j=i+1;j<newClockInTimeList.size();j++){
String time2 = newClockInTimeList.get(j).get("signdate")+" "+newClockInTimeList.get(j).get("signtime");
if (DateUtil.getBetWeenMinutes(time1,time2) <wdkhlfzs){
needRemoveData.add(newClockInTimeList.get(j));
}
}
}
for (Map<String,Object> map:needRemoveData){
newClockInTimeList.remove(map);
}
}
}
if (newClockInTimeList.size() > 0){
String time = newClockInTimeList.get(0).get("signdate")+" "+newClockInTimeList.get(0).get("signtime");
int minute = DateUtil.getTime(time).getMinute();
int hour = DateUtil.getTime(time).getHour();
if ("1".equals(dzsbksd)){
//整点
if (minute > 0){
hour=hour+1;
}
String hourstr = DateUtil.getTimeStr(hour);
newClockInTimeList.get(0).put("signtime",hourstr+":00");
}else if ("2".equals(dzsbksd)){
//半点
String minuteStr = "";
if (minute < 30){
minuteStr = "30";
}else if (minute > 30){
minuteStr = "00";
hour = hour+1;
}
String hourstr = DateUtil.getTimeStr(hour);
newClockInTimeList.get(0).put("signtime",hourstr+":"+minuteStr);
}else if ("3".equals(dzsbksd)){
//15分钟
if (minute%15 > 0){
minute = (minute/15)*15+15;
if (minute == 60){
minute = 0;
hour = hour+1;
}
}
String hourstr = DateUtil.getTimeStr(hour);
String minutestr = DateUtil.getTimeStr(minute);
newClockInTimeList.get(0).put("signtime",hourstr+":"+minutestr);
}
if (newClockInTimeList.size() > 1){
String firstSignDate = newClockInTimeList.get(0).get("signdate")+" "+newClockInTimeList.get(0).get("signtime");
String twoSignDate = newClockInTimeList.get(1).get("signdate")+" "+newClockInTimeList.get(1).get("signtime");
//当调整后第一笔上班时间超过第二比那么去除这2比记录
if (DateUtil.getTime(firstSignDate).compareTo(DateUtil.getTime(twoSignDate)) >=0){
newClockInTimeList.remove(0);
newClockInTimeList.remove(0);
}
}
}
log.info("newClockInTimeList : [{}]",newClockInTimeList);
return newClockInTimeList;
}
/**
*
* @param clockInTimeList
* @return
*/
public int getDurationMinute(List<Map<String,Object>> clockInTimeList){
if (clockInTimeList.size() == 0){
return 0;
}
int logarithm = clockInTimeList.size()/2;
int betweenMinute = 0;
for (int i =0;i<logarithm;i++){
int index1 = i*2;
int index2 = index1+1;
String time1 = clockInTimeList.get(index1).get("signdate") +" "+clockInTimeList.get(index1).get("signtime");
String time2 = clockInTimeList.get(index2).get("signdate") +" "+clockInTimeList.get(index2).get("signtime");
betweenMinute += DateUtil.getBetWeenMinutes(time1,time2);
}
log.info("betweenMinute : [{}]",betweenMinute);
return betweenMinute;
}
/**
*
* @param clockInTimeList
* @return
*/
public Map<String,Object> getRecordDataTime(List<Map<String,Object>> clockInTimeList){
Map<String,Object> resultMap = Maps.newHashMap();
if (clockInTimeList.size() == 0){
return resultMap;
}
int logarithm = clockInTimeList.size()/2;
for (int i =0;i<logarithm;i++){
int index1 = i*2;
int index2 = index1+1;
String time1 = clockInTimeList.get(index1).get("signdate") +" "+clockInTimeList.get(index1).get("signtime");
String time2 = clockInTimeList.get(index2).get("signdate") +" "+clockInTimeList.get(index2).get("signtime");
resultMap.put("j"+i,time1);
resultMap.put("c"+i,time1);
}
log.info("betweenMinute : [{}]",resultMap);
return resultMap;
}
}

@ -55,12 +55,18 @@ public class AttendanceanalysisAction {
String userId = userMap.get("id").toString();
/**获得人员考勤项目*/
Map<String,Object> param = Maps.newHashMap();
param.put("startDate","");
param.put("endDate","");
param.put("startDate",startBeforeDate);
param.put("endDate",endAfterDate);
param.put("resourceId",userId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(param);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/**
*
*/
Map<String,Object> workHourdataMap = basicsetService.getWorkHoursItemByPerson(paramMap);
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)workHourdataMap.get("data");
/** 获取人员班次*/
Map<String,Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName","uf_pbjg");
@ -76,7 +82,7 @@ public class AttendanceanalysisAction {
for (int i=0; i<=betweenDays;i++){
String date = DateUtil.AfterDay(startDate,i);
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap);
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems);
}
}
}else {
@ -87,12 +93,19 @@ public class AttendanceanalysisAction {
for (String userId : userIds.split(",")){
/**获得人员考勤项目*/
Map<String,Object> param = Maps.newHashMap();
param.put("startDate","");
param.put("endDate","");
param.put("startDate",startBeforeDate);
param.put("endDate",endAfterDate);
param.put("resourceId",userId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(param);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/**
*
*/
Map<String,Object> workHourdataMap = basicsetService.getWorkHoursItemByPerson(paramMap);
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)workHourdataMap.get("data");
/** 获取人员班次*/
Map<String,Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName","uf_pbjg");
@ -108,7 +121,7 @@ public class AttendanceanalysisAction {
for (int i=0; i<=betweenDays;i++){
String date = DateUtil.AfterDay(startDate,i);
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap);
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems);
}
}
}

@ -1,7 +1,9 @@
package com.engine.attendance.attendanceanalysis.wrapper;
import com.engine.attendance.attendanceanalysis.service.ComprehensiveWorkingHourService;
import com.engine.attendance.attendanceanalysis.service.ForgetClockInService;
import com.engine.attendance.attendanceanalysis.service.UtilService;
import com.engine.attendance.attendanceanalysis.service.impl.ComprehensiveWorkingHourServiceImpl;
import com.engine.attendance.attendanceanalysis.service.impl.ForgetClockInServiceImpl;
import com.engine.attendance.attendanceanalysis.service.impl.UtilServiceImpl;
import com.engine.attendance.enums.CheckBoxEnum;
@ -30,8 +32,8 @@ import java.util.stream.Collectors;
public class AttendanceAnalysisWrapper extends Service {
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private ForgetClockInService forgetClockInService = ServiceUtil.getService(ForgetClockInServiceImpl.class);
private UpdateAttendanceResultWrapper updateAttendanceResultWrapper = ServiceUtil.getService(UpdateAttendanceResultWrapper.class);
private ComprehensiveWorkingHourService comprehensiveWorkingHourService = ServiceUtil.getService(ComprehensiveWorkingHourServiceImpl.class);
/**
*
@ -39,7 +41,7 @@ public class AttendanceAnalysisWrapper extends Service {
* @param dataList
* @param attendanceItems
*/
public void attendanceAnalysis(String userId, List<Map<String,Object>> dataList,List<Map<String,Object>> attendanceItems){
public void attendanceAnalysis(String userId, List<Map<String,Object>> dataList,List<Map<String,Object>> attendanceItems,List<Map<String,Object>> workHourItems){
log.info("***********analysis userId:{} start***********",userId);
log.info("clockInTimeDate : [{}]",dataList);
@ -76,14 +78,14 @@ public class AttendanceAnalysisWrapper extends Service {
List<Map<String, Object>> beforeOneDayClockInTimeList = utilService.getClockInTime(getClockTimeParam);
log.info("beforeOneDayClockInTimeList : [{}]",beforeOneDayClockInTimeList);
//分析前一天考勤
analysis(userId,beforeOneDayDate,beforeOneDayClockInTimeList,schedulingResultsMap.get(beforeOneDayDate),attendanceItems,schedulingMapBydate.get(beforeOneDayDate));
analysis(userId,beforeOneDayDate,beforeOneDayClockInTimeList,schedulingResultsMap.get(beforeOneDayDate),attendanceItems,schedulingMapBydate.get(beforeOneDayDate),workHourItems,dataList);
getClockTimeParam.put("date",beforeTwoDayDate);
//前第二天打卡数据
List<Map<String, Object>> beforeTwoDayClockInTimeList = utilService.getClockInTime(getClockTimeParam);
log.info("beforeTwoDayClockInTimeList : [{}]",beforeTwoDayClockInTimeList);
//分析前第二天考勤
analysis(userId,beforeTwoDayDate,beforeTwoDayClockInTimeList,schedulingResultsMap.get(beforeTwoDayDate),attendanceItems,schedulingMapBydate.get(beforeTwoDayDate));
analysis(userId,beforeTwoDayDate,beforeTwoDayClockInTimeList,schedulingResultsMap.get(beforeTwoDayDate),attendanceItems,schedulingMapBydate.get(beforeTwoDayDate),workHourItems,dataList);
}
@ -95,7 +97,7 @@ public class AttendanceAnalysisWrapper extends Service {
* @param dataList 23
* @param attendanceItems
*/
public void attendanceAnalysisForApi(String userId,String analysisDate, List<Map<String,Object>> dataList,List<Map<String,Object>> attendanceItems,Map<String,Object> schedulMap){
public void attendanceAnalysisForApi(String userId,String analysisDate, List<Map<String,Object>> dataList,List<Map<String,Object>> attendanceItems,Map<String,Object> schedulMap,List<Map<String,Object>> workHourItems){
log.info("***********analysis userId:{} start***********",userId);
log.info("clockInTimeDate : [{}]",dataList);
Map<String, List<Map<String,Object>>> collect = Maps.newHashMap();
@ -112,7 +114,7 @@ public class AttendanceAnalysisWrapper extends Service {
//前一天打卡数据
log.info("getClockTimeParam : [{}]",getClockTimeParam);
List<Map<String, Object>> clockInTimeList = utilService.getClockInTime(getClockTimeParam);
analysis(userId,analysisDate,clockInTimeList,schedulingResultsMap.get(analysisDate),attendanceItems,schedulingMapBydate.get(analysisDate));
analysis(userId,analysisDate,clockInTimeList,schedulingResultsMap.get(analysisDate),attendanceItems,schedulingMapBydate.get(analysisDate),workHourItems,dataList);
}
/**
@ -123,7 +125,7 @@ public class AttendanceAnalysisWrapper extends Service {
* @param scheduleResult
* @param attendanceItems
*/
public void analysis(String userId,String analysisDate,List<Map<String, Object>> clockInTimeList,List<Map<String, Object>> scheduleResult,List<Map<String,Object>> attendanceItems,List<Map<String, Object>> scheduleList){
public void analysis(String userId,String analysisDate,List<Map<String, Object>> clockInTimeList,List<Map<String, Object>> scheduleResult,List<Map<String,Object>> attendanceItems,List<Map<String, Object>> scheduleList,List<Map<String,Object>> workHourItems,List<Map<String,Object>> clockList){
Map<String,Object> recordParam = Maps.newHashMap();
Map<String,String> formModeIdMap = Utils.getFormmodeIdMap();
recordParam.put("userId",userId);
@ -134,14 +136,30 @@ public class AttendanceAnalysisWrapper extends Service {
recordParam.put("modeId",formModeIdMap.get("uf_jcl_kq_cqjg"));
if (scheduleResult == null || scheduleResult.size() ==0){
Map<String,Object> workingHourparam = Maps.newHashMap();
workingHourparam.put("clockInTimeCollect",clockList);
workingHourparam.put("analysisDate",analysisDate);
workingHourparam.put("userId",userId);
workingHourparam.put("attendanceItems",attendanceItems);
if (workHourItems !=null && workHourItems.size() >0){
workingHourparam.put("workHourItem",workHourItems.get(0));
String ifPriority = Util.null2String(workHourItems.get(0).get("hlpbyxsyzhgs"));
if (CheckBoxEnum.CHECKED.getKey().equals(ifPriority)){
comprehensiveWorkingHourService.excuteByWorkHour(workingHourparam);
}
}
if (scheduleResult == null || scheduleResult.size() ==0){
//没有排班
Map<String,Object> params = Maps.newHashMap();
params.put("userId",userId);
params.put("analysisDate",analysisDate);
params.put("clockInTimeCollect",clockList);
params.put("modeId",formModeIdMap.get("uf_jcl_kq_cqjg"));
params.put("scheduleList",scheduleList);
params.put("workHourItems",workHourItems);
params.put("attendanceItems",attendanceItems);
updateAttendanceResultWrapper.recordNoClass(params);
return;
}

@ -26,6 +26,8 @@ public class UpdateAttendanceResultWrapper extends Service {
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);
/**
*
@ -405,6 +407,8 @@ public class UpdateAttendanceResultWrapper extends Service {
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> normalParams = Maps.newHashMap();
@ -413,7 +417,12 @@ public class UpdateAttendanceResultWrapper extends Service {
normalParams.put("modeId",params.get("modeId"));
normalParams.put("scheduleList",params.get("scheduleList"));
log.info("userId : {} ,analysisDate: {} have no class",userId,analysisDate);
commandExecutor.execute(new UpdateAttendanceResultsCmd(normalParams));
if (workHourItems.size() >0){
params.put("workHourItem",workHourItems.get(0));
comprehensiveWorkingHourService.excuteByWorkHour(params);
}else {
commandExecutor.execute(new UpdateAttendanceResultsCmd(normalParams));
}
return false;
}

@ -1,4 +1,4 @@
# attendance.attendanceAnalysis
## 考勤方案模块
## 考勤方案、排班管理模块
##

@ -0,0 +1,120 @@
package com.engine.attendance.attendanceplan.cmd;
import com.engine.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.common.util.DbTools;
import com.engine.common.util.Utils;
import com.engine.core.interceptor.CommandContext;
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.general.Util;
import weaver.hrm.company.DepartmentComInfo;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j
public class GetWorkHoursItemByPersonCmd extends AbstractCommonCommand<Map<String,Object>> {
public GetWorkHoursItemByPersonCmd(Map<String,Object> params){
this.params=params;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
String resourceId = Util.null2String(params.get("resourceId"));
String startDate = Util.null2String(params.get("startDate"));
String endDate = Util.null2String(params.get("endDate"));
String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_zhgs");
Map<String,Object> resultMap = Maps.newHashMap();
String sql = "select dxlx,dataid,dx from uf_jcl_syzz where modeid=?";
List<Map<String,Object>> organizationList = DbTools.getSqlToList(sql,modeId);
sql = "select id,departmentid,subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,resourceId);
Set<String> dataIds = Sets.newHashSet();
Map<String, List<Map<String,Object>>> organizationListGroupBydxlx = organizationList.stream().collect(Collectors.groupingBy(e ->e.get("dxlx").toString()));
//对象类型为人员
List<Map<String,Object>> personOrganizationList = organizationListGroupBydxlx.get("0");
//对象类型为人员组织
List<Map<String,Object>> personGroupOrganizationList = organizationListGroupBydxlx.get("1");
//对象类型为部门
List<Map<String,Object>> departmentOrganizationList = organizationListGroupBydxlx.get("2");
//对象类型为分部
List<Map<String,Object>> subCompanyOrganizationList = organizationListGroupBydxlx.get("3");
if (personOrganizationList != null){
for (Map<String,Object> personOrganization :personOrganizationList){
String dx = Util.null2String(personOrganization.get("dx"));
String ids = dx.split("-")[0];
if (ids.equals(resourceId)){
dataIds.add(Util.null2String(personOrganization.get("dataid")));
}
}
}
try {
if (departmentOrganizationList != null){
String deptid = Util.null2String(departMentMap.get("departmentid"));
String pdeptids = "";
pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids);
pdeptids = deptid + pdeptids;
log.info("pdeptids : [{}]",pdeptids);
for (Map<String,Object> departmentOrganization :departmentOrganizationList){
String dx = Util.null2String(departmentOrganization.get("dx"));
String ids = dx.split("-")[0];
for (String pdeptid : pdeptids.split(",")){
if (pdeptid.equals(ids)){
dataIds.add(Util.null2String(departmentOrganization.get("dataid")));
}
}
}
}
}catch (Exception e){
log.error("catch error :{}",e);
}
if (subCompanyOrganizationList != null){
String subCompanyId = Util.null2String(departMentMap.get("subcompanyid1"));
for (Map<String,Object> subCompanyOrganization :subCompanyOrganizationList){
String dx = Util.null2String(subCompanyOrganization.get("dx"));
String ids = dx.split("-")[0];
if (ids.equals(subCompanyId)){
dataIds.add(Util.null2String(subCompanyOrganization.get("dataid")));
}
}
}
if (personGroupOrganizationList != null){
Set<String> personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet());
sql = "select mainid,empid,filters,bdate,edate from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")";
log.info("query personGroupData : {}",sql);
List<Map<String,Object>> personGroupData = DbTools.getSqlToList(sql);
Set<String> personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,startDate,endDate);
log.info("personnelGroupIds : {}",personnelGroupIds);
for (Map<String,Object> personGroupOrganization :personGroupOrganizationList){
String personnelGroupId = Util.null2String(personGroupOrganization.get("dx")).split("-")[0];
if (personnelGroupIds.contains(personnelGroupId)){
dataIds.add(Util.null2String(personGroupOrganization.get("dataid")));
}
}
}
List<Map<String,Object>> attendanceItems = Lists.newArrayList();
log.info("dataIds : {}",dataIds);
sql = "select * from uf_jcl_kq_zhgs where id in ("+String.join(",",dataIds)+")";
if (dataIds.size() > 0){
log.info("query GetWorkHoursItemByPersonCmd sql : {}",sql);
attendanceItems.addAll(DbTools.getSqlToList(sql));
}
resultMap.put("data",attendanceItems);
resultMap.put("total",attendanceItems.size());
return resultMap;
}
}

@ -3,5 +3,17 @@ package com.engine.attendance.attendanceplan.service;
import java.util.Map;
public interface AttendancePlanService {
/**
*
* @param params
* @return
*/
Map<String,Object> getAttendanceItemsByPerson(Map<String,Object> params);
/**
*
* @param params
* @return
*/
Map<String,Object> getWorkHoursItemByPerson(Map<String,Object> params);
}

@ -1,6 +1,7 @@
package com.engine.attendance.attendanceplan.service.impl;
import com.engine.attendance.attendanceplan.cmd.GetAttendanceItemsByPersonDataCmd;
import com.engine.attendance.attendanceplan.cmd.GetWorkHoursItemByPersonCmd;
import com.engine.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.core.impl.Service;
@ -12,4 +13,9 @@ public class AttendancePlanServiceImpl extends Service implements AttendancePlan
Map<String,Object> result = commandExecutor.execute(new GetAttendanceItemsByPersonDataCmd(params));
return result;
}
@Override
public Map<String, Object> getWorkHoursItemByPerson(Map<String, Object> params) {
return commandExecutor.execute(new GetWorkHoursItemByPersonCmd(params));
}
}

@ -28,4 +28,16 @@ public class AttendancePlanAction {
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(paramMap);
return ApiReturnTools.success(dataMap);
}
/**
*
* @return
*/
@POST
@Path("/getWorkHoursItemByPerson")
@Produces({"text/plain"})
public String getWorkHoursItemByPerson(@Context HttpServletRequest request, @Context HttpServletResponse response) {
Map<String,Object> paramMap = ParamUtil.request2Map(request);
Map<String,Object> dataMap = basicsetService.getWorkHoursItemByPerson(paramMap);
return ApiReturnTools.success(dataMap);
}
}

@ -32,6 +32,7 @@ public class HolidayGenerationJob extends BaseCronJob {
Map<String, Object> params = Maps.newHashMap();
params.put("modeId",modeId);
params.put("releaseDate",releaseDate);
params.put("cover",cover);
basicsetService.generateVocation(params);
}

@ -84,6 +84,7 @@ public class VocationServiceImpl extends Service implements VocationService {
vocationParam.put("vocationList",e.getValue());
vocationParam.put("userMap",userIdMap.get(userId).get(0));
vocationParam.put("releaseDate",params.get("releaseDate"));
vocationParam.put("cover",params.get("cover"));
commandExecutor.execute(new VocationCmd(vocationParam));
}
}

@ -35,7 +35,7 @@ public class CommonServiceImpl extends Service implements CommonService {
Map<String,Object> params = Utils.resolveMap(Util.null2String(param.get("params")));
String tableName = Util.null2String(params.get("tableName"));
params.remove("tableName");
result.put("result", DbTools.update(CommonUtil.makeInsertSql(tableName,params)));
result.put("result", CommonUtil.makeInsertSql(tableName,params));
return result;
}

@ -5,9 +5,13 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import weaver.soa.workflow.request.*;
import java.sql.Date;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
import java.util.stream.Collectors;
@ -19,19 +23,30 @@ public class CommonUtil {
* @param map
* @return
*/
public static String makeInsertSql(String tableName, Map<String,Object> map){
public static boolean makeInsertSql(String tableName, Map<String,Object> map){
String insertSql = "insert into "+tableName;
String key = "(";
String value = "(";
List<Object> dataList = Lists.newArrayList();
for (Map.Entry<String,Object> e : map.entrySet()){
key = key + e.getKey() +",";
value = value + "'"+e.getValue()+"'" +",";
if (e.getValue() != null && !"".equals(e.getValue())){
key = key + e.getKey() +",";
value = value + "?" +",";
if (e.getKey().endsWith("date")){
LocalDateTime localDateTime = DateUtil.getTime(String.valueOf(e.getValue()));
long datelong = localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
dataList.add(new Date(datelong));
}else {
dataList.add(e.getValue());
}
}
}
key = key.substring(0,key.length()-1) + ")";
value = value.substring(0,value.length()-1)+")";
insertSql = insertSql + key +" values "+value;
log.info("makeInsertSql :[{}]",insertSql);
return insertSql;
log.info("makeInsertSql : [{}]",insertSql);
log.info("needInsertDate: [{}]",dataList);
return DbTools.update(insertSql,dataList);
}
/**

@ -248,4 +248,14 @@ public class DateUtil {
calendar.set(Integer.valueOf(time.split("-")[0]), Integer.valueOf(time.split("-")[1]) - 1, 1);
return calendar.getActualMaximum(CalendarType);
}
public static String getTimeStr(int value){
String str = "";
if (value < 10){
str = "0"+value;
}else {
str = String.valueOf(value);
}
return str;
}
}

@ -266,7 +266,7 @@ public class Utils<T> {
if ((durationHour/hsl) > Math.floor(durationHour/hsl)){
// (durationHour/hsl)*hsl+hsl
durationBig = new BigDecimal(Math.floor(durationHour/hsl));
itemDuration = durationBig.multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
itemDuration = durationBig.multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_UP)).doubleValue();
}else {
itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue();
}
@ -274,7 +274,7 @@ public class Utils<T> {
}else if (unit.equals(AccountingUnitEnum.HOUR)){
if ((duration/hsl) > Math.floor(duration/hsl)){
durationBig = new BigDecimal(Math.floor(duration/hsl));
itemDuration=durationBig.multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
itemDuration=durationBig.multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_UP)).doubleValue();
}else {
itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue();
}
@ -285,7 +285,7 @@ public class Utils<T> {
if (unit.equals(AccountingUnitEnum.MINUTES)){
if ((duration/hsl) > Math.floor(duration/hsl)){
durationBig = new BigDecimal(Math.floor(duration/hsl));
itemDuration=durationBig.multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
itemDuration=durationBig.multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_UP)).doubleValue();
}else {
itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue();
}
@ -295,7 +295,7 @@ public class Utils<T> {
durationBig = new BigDecimal(durationMinute);
if ((durationMinute/hsl) > Math.floor(durationMinute/hsl)){
durationBig = new BigDecimal(Math.floor(durationMinute/hsl));
itemDuration=durationBig.multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
itemDuration=durationBig.multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_UP)).doubleValue();
}else {
itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue();
}
@ -490,7 +490,7 @@ public class Utils<T> {
dataMap.put("modedatacreatertype","0");
dataMap.put("modedatacreatedate",DateUtil.getCurrentTime().split(" ")[0]);
dataMap.put("modedatacreatetime",DateUtil.getCurrentTime().split(" ")[1]);
DbTools.update(CommonUtil.makeInsertSql(tableName,dataMap));
CommonUtil.makeInsertSql(tableName,dataMap);
}
/**
@ -571,4 +571,36 @@ public class Utils<T> {
return new BigDecimal(value1).add(new BigDecimal(value2),new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
}
/**
*
* @param date
* @param time
* @return
*/
public static String installTime(String date ,String time){
return date+" "+time;
}
/**
*
* @param beginTime
* @param endTime
* @return
*/
public static boolean dateGreaterThan(String beginTime,String endTime){
return DateUtil.getTime(beginTime).compareTo(DateUtil.getTime(endTime)) >0;
}
/**
* id
* @param date
* @param rlmc
* @return
*/
public static String getDateType(String date,String rlmc){
String sql = "select rqlx from uf_jcl_kq_rlxx where rlmc=? and rq=?";
Map<String,Object> data = DbTools.getSqlToMap(sql,rlmc,date.split(" ")[0]);
return Util.null2String(data.get("rqlx"));
}
}

Binary file not shown.

@ -1,5 +1,6 @@
import com.api.doc.detail.util.ooxml.commons.DateTimePattern;
import com.api.doc.detail.util.ooxml.commons.DateTimeUtils;
import com.engine.attendance.enums.AccountingUnitEnum;
import com.engine.attendance.enums.ClassSegmentTypeEnum;
import com.engine.attendance.vacation.util.VocationCommonUtil;
import com.engine.common.util.DateUtil;
@ -14,6 +15,8 @@ import weaver.general.TimeUtil;
import weaver.general.Util;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.Date;
import java.sql.Timestamp;
import java.time.LocalDate;
@ -26,9 +29,35 @@ import java.util.stream.Collectors;
public class TestObj {
public static void main(String[] args) throws Exception{
List<Map<String,Object>> existsList = new ArrayList<>();
existsList = existsList.stream().filter(e->DateUtil.getTime("2024-03-19").compareTo(DateUtil.getTime(e.get("dkrq").toString())) <=0 &&
DateUtil.getTime("2024-03-19").compareTo(DateUtil.getTime(e.get("dkrq").toString())) >=0).collect(Collectors.toList());
// List<Map<String,Object>> existsList = new ArrayList<>();
// existsList = existsList.stream().filter(e->DateUtil.getTime("2024-03-19").compareTo(DateUtil.getTime(e.get("dkrq").toString())) <=0 &&
// DateUtil.getTime("2024-03-19").compareTo(DateUtil.getTime(e.get("dkrq").toString())) >=0).collect(Collectors.toList());
//
// List<Map<String,Object>> list = Lists.newArrayList();
// Map<String,Object> map1 = Maps.newHashMap();
// map1.put("a","a");
// Map<String,Object> map2 = Maps.newHashMap();
// map2.put("b","b");
// Map<String,Object> map3 = Maps.newHashMap();
// map3.put("c","c");
// Map<String,Object> map4 = Maps.newHashMap();
// map4.put("d","d");
// list.add(map1);
// list.add(map2);
// list.add(map3);
// list.add(map4);
//
// System.out.println(list);
// list.remove(map3);
// list.remove(map1);
// System.out.println(list);
//
//
// System.out.println(DateUtil.getBetWeenMinutes("2023-12-01 10:14","2023-12-01 12:25"));
BigDecimal bigDecimal1 = new BigDecimal(100);
BigDecimal bigDecimal2 = new BigDecimal(60);
System.out.println(bigDecimal1.divide(bigDecimal2,2,RoundingMode.HALF_UP).doubleValue());
// System.out.println(Utils.getItemdurationDown(30, AccountingUnitEnum.MINUTES.getKey(), 35,AccountingUnitEnum.MINUTES));
}
public static Map<String, Object> delCommon() {

@ -0,0 +1,28 @@
package shuju;
import com.finance.toolkit.BaseEnum;
/**
*
*/
public enum SaleOrderEnum implements BaseEnum {
ALL("0","全部销售订单"),
CLOSE("1","已关闭销售订单"),
PART("2","部分销售订单");
SaleOrderEnum(String key, String value){
this.key=key;
this.value=value;
}
private String key;
private String value;
@Override
public String getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}

@ -0,0 +1,13 @@
package shuju;
import com.google.common.collect.Lists;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) {
List<String> list = Lists.newArrayList();
System.out.println(list.get(0));
}
}

@ -1,9 +1,12 @@
package shuju;
import com.google.gson.Gson;
import kingdee.bos.webapi.client.ApiClient;
import kingdee.bos.webapi.client.K3CloudApiClient;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
public class TestMain {
public static void main(String[] args) throws Exception{
@ -43,8 +46,21 @@ public class TestMain {
// "}" )
// ;
String view = client.queryXSDDSLTJ();
System.out.println(view);
String view1 = client.queryXSDDSLTJ();
String view2 = client.queryCGDDSLTJ();
String view3 = client.querySCDDTJSL();
// System.out
// System.out.println("2222222222222222222222");
// Gson gson = new Gson();
// Map<String,Object> mainTableData = gson.fromJson(view2, (Type)Map.class);
// System.out.println(mainTableData);
// List<Map<String,Object>> list = (List<Map<String,Object>>)mainTableData.get("Data");
// System.out.println(list.get(0).get("类别"));
// System.out.println(list.get(0).get("数量"));
// Map<String,Object> map = gson.fromJson(view1, (Type)Map.class);
System.out.println(view1);
System.out.println(view2);
System.out.println(view3);
// String view = client.view("AP_AgingAnalysis","{\n" +
// " \"FormId\": \"AP_AgingAnalysis\",\n" +
// " \"FieldKeys\": \"FContactUnitNumber\",\n" +
@ -74,7 +90,5 @@ public class TestMain {
// " \"FFinishDateInvolve\": true\n" +
// " }\n" +
// "}");
System.out.println(view);
}
}

Loading…
Cancel
Save