自动对班

dev-chenwnj
Administrator 1 year ago
parent ae383628d5
commit 2a6faf096e

@ -34,6 +34,9 @@ public class KQFormatData extends BaseBean {
private KQLog kqLog = new KQLog();
private boolean writeLog = false;
private LinkedHashMap<String,Object> logInfo = new LinkedHashMap<>();
private final List<String> LIST = Arrays.asList("1", "8", "14","15");
private final static double PI = 3.14159265358979323; // 圆周率
private final static double R = 6371229; // 地球的半径
/***
*
@ -179,6 +182,7 @@ public class KQFormatData extends BaseBean {
Map<String, Object> workFlowInfo, String uuid) {
List<List<Object>> lsParam = new ArrayList<>();
List<Object> params = null;
RecordSet rt = new RecordSet();
try {
bb.writeLog("start to format");
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo();
@ -197,6 +201,105 @@ public class KQFormatData extends BaseBean {
List<TimeScopeEntity> lsRestTime = new ArrayList<>();
List<Object> workFlow = null;
bb.writeLog("format.groupId:"+workTime.getGroupId()+"format.serialId:"+workTime.getSerialId());
if((workTime.getGroupId()!=null&&StringUtils.isNotBlank(workTime.getGroupId()))&&LIST.contains(workTime.getGroupId())&&(workTime.getSerialId()==null||StringUtils.isBlank(workTime.getSerialId()))){
bb.writeLog("start to Automatic shift alignment"+LIST);
bb.writeLog("format.userId:"+userId+"format.kqDate:"+kqDate+"format.workTime:"+workTime+"format.workFlowInfo:"+workFlowInfo+"format.uuid:"+uuid);
//责任制考勤组
//当天考勤标识
boolean kqFlag = false;
boolean xxFlag = false;
boolean ccFlag = false;
boolean wqdkFlag = false;
boolean qjFlag = false;
String showaddress = "";
String dybc = "";
//1.查询该员工当天考勤地点(名称)
String sql = "select a.id as id ,a.longitude,a.latitude,a.showaddress,b.id as resourceid, b.lastname," +
" signdate, signtime from hrmschedulesign a left join hrmresource b on b.id = a.userid" +
" left join hrmdepartment c on c.id = b.departmentid" +
" where a.isincom = 1 and b.id = ? and a.signdate = ? order by a.signdate desc";
rt.executeQuery(sql,userId,kqDate);
if(rt.next()){
kqFlag = true;
showaddress = Util.null2String(rt.getString("showaddress"));
}
bb.writeLog("sign showaddress:"+showaddress);
//2.查询指定打卡地点的经纬度及范围的list
List<Map<String,String>> list2 = new ArrayList<>();
//2.1查询出打卡地点经纬度建模list
String sql2 = "select kqdz,dybc from uf_jwdbj";
rt.execute(sql2);
while (rt.next()){
Map<String,String> map = new HashMap<>();
map.put("kqdz", Util.null2String(rt.getString("kqdz")));
map.put("dybc", Util.null2String(rt.getString("dybc")));
list2.add(map);
}
bb.writeLog("uf_jwdbj.list2:"+list2);
//3.计算两点之间的距离是否大于范围值,小于则自动对班(白班)
for (Map<String, String> map : list2) {
if(map.get("kqdz").equals(showaddress)){
dybc = map.get("dybc");
}
}
bb.writeLog("format.dybc:"+dybc);
// 4.休息日或节假日给休息班次
int changeType = KQOvertimeRulesBiz.getChangeType(userId, kqDate);
bb.writeLog("format.changeType:"+changeType);
//考勤当天是节假日或者休息日
if(changeType==1||changeType==3){
xxFlag = true;
}
bb.writeLog("format.xxFlag:"+xxFlag);
//5.外勤打卡(需要有打卡记录+对应的出差流程)
//5.1打卡记录查询
String wqSql = "select * from mobile_sign where operater = ? and operate_date = ? ";
rt.executeQuery(wqSql,userId,kqDate);
if(rt.next()){
wqdkFlag = true;
}
bb.writeLog("format.wqdkFlag:"+wqdkFlag);
//5.2出差记录查询
String ccSql = "select currentnodetype from workflow_requestbase where requestid in " +
" (select requestId from formtable_main_61 where sqr = ? and " +
" (ksrq +' '+ kssj) <=? " +
" and (yjjsrq+' '+yjjssj) >=? ";
rt.executeQuery(ccSql,userId,kqDate,kqDate);
if(rt.next()){
ccFlag = true;
}
bb.writeLog("format.ccFlag:"+ccFlag);
//6.查询该员工当天是否有已办结的请假流程(有:自动对班;否:不处理)
//6.1 查询当天是否有休假流程查询出流程requestid
String sql3 = "select currentnodetype from workflow_requestbase where requestid in (select requestid from kq_flow_split_leave where (fromdatedb +' '+ fromtimedb) <=? " +
"and (todatedb+' '+totimedb) >=?) and currentnodetype in ('1','3') ";
//6.2 查询这些requestid是否在当天前包含当天已批准
rt.executeQuery(sql3,kqDate,kqDate);
if(rt.next()){
qjFlag = true;
}
bb.writeLog("format.qjFlag:"+qjFlag);
//1.正常打卡给对应打卡地点对应班次
if(kqFlag){
//指定白班
workTime.setSerialId(dybc);
}
if(xxFlag){
//休息
workTime.setSerialId("-1");
}
if(wqdkFlag&&ccFlag){
//外勤打卡+出差流程
workTime.setSerialId("9");
}
if(qjFlag){
//请假流程指定白班
workTime.setSerialId("9");
}
bb.writeLog("format.serialIdLast:"+workTime.getSerialId());
}
if (workTime != null) {
lsSignTime = workTime.getSignTime();//允许打卡时间
lsWorkTime = workTime.getWorkTime();//工作时间
@ -339,6 +442,7 @@ public class KQFormatData extends BaseBean {
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005299,weaver.general.ThreadVarLanguage.getLang())+"",workEndDateTime);
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005300,weaver.general.ThreadVarLanguage.getLang())+"",lsCheckInfo);
}
for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) {
Map<String, Object> checkInfo = (Map<String, Object>) lsCheckInfo.get(j);
@ -1103,4 +1207,12 @@ public class KQFormatData extends BaseBean {
nonlsParam.add(evectionMins);
nonlsParam.add(outMins);
}
public static double getDistance(double lng1, double lat1, double lng2,double lat2) {
double x, y, distance;
x = (lng2 - lng1) * PI * R
* Math.cos(((lat1 + lat2) / 2) * PI / 180) / 180;
y = (lat2 - lat1) * PI * R / 180;
distance = Math.hypot(x, y);
return distance;
}
}

Loading…
Cancel
Save