411 lines
19 KiB
Plaintext
411 lines
19 KiB
Plaintext
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
|
||
<%@page import="weaver.general.Util"%>
|
||
<%@ page import="weaver.conn.RecordSet" %>
|
||
<%@ page import="weaver.general.TimeUtil" %>
|
||
<%@ page import="com.alibaba.fastjson.JSONObject" %>
|
||
<%@ page import="java.util.*" %>
|
||
<%@ page import="com.alibaba.fastjson.JSONArray" %>
|
||
<%@ page import="org.apache.http.client.methods.CloseableHttpResponse" %>
|
||
<%@ page import="org.apache.http.impl.client.CloseableHttpClient" %>
|
||
<%@ page import="org.apache.http.impl.client.HttpClients" %>
|
||
<%@ page import="org.apache.http.client.methods.HttpPost" %>
|
||
<%@ page import="org.apache.http.entity.StringEntity" %>
|
||
<%@ page import="org.apache.http.HttpEntity" %>
|
||
<%@ page import="org.apache.http.util.EntityUtils" %>
|
||
<%@ page import="java.io.IOException" %>
|
||
<%@ page import="com.google.common.collect.Maps" %>
|
||
<%@ page import="com.google.common.collect.Lists" %>
|
||
<%@ page import="weaver.interfaces.lingyue.util.HttpUtil" %>
|
||
<%@ page import="com.engine.kq.biz.KQFormatBiz" %>
|
||
<%@ page import="com.engine.kq.timer.KQTaskBean" %>
|
||
<%@ page import="com.engine.kq.wfset.util.SplitActionUtil" %>
|
||
<%@ page import="com.engine.kq.timer.KQQueue" %>
|
||
<%@ page import="weaver.formmode.setup.ModeRightInfo" %>
|
||
<%@ page import="weaver.common.DateUtil" %>
|
||
<%@ page import="weaver.hrm.common.Tools" %>
|
||
<%@ page import="weaver.conn.BatchRecordSet" %>
|
||
<%@ page import="com.engine.kq.bean.ImportSetting" %>
|
||
<%@ page import="com.engine.kq.entity.KQScheduleSignEntity" %>
|
||
<%@ page import="java.text.DateFormat" %>
|
||
<%@ page import="java.text.SimpleDateFormat" %>
|
||
<%@ page import="weaver.conn.RecordSetDataSource" %>
|
||
<%@ page import="java.sql.Timestamp" %>
|
||
<%@ page import="weaver.common.StringUtil" %>
|
||
<%@ page import="weaver.hrm.User" %>
|
||
<%@ page import="com.engine.kq.util.KQDurationCalculatorUtil" %>
|
||
<jsp:useBean id="rs" class="weaver.conn.RecordSet" scope="page" />
|
||
<%
|
||
int sum = 0;
|
||
|
||
int userlanguage = 7; //登录语言
|
||
|
||
String userId = request.getParameter("userid");
|
||
String beginDate = request.getParameter("fromdate");
|
||
String endDate = request.getParameter("todate");
|
||
|
||
User user = new User(Integer.parseInt(userId));
|
||
|
||
String username = user.getLastname();
|
||
|
||
rs.writeLog("考勤机同步:importData:开始>>>>>>beginDate>>"+beginDate+">>>>>endDate>>>>"+endDate+">>>>>>"+ DateUtil.getFullDate());
|
||
RecordSet delrs = new RecordSet();
|
||
String sql = "";
|
||
endDate = Tools.getDate(endDate, 1);
|
||
BatchRecordSet bRs = new BatchRecordSet();
|
||
List<List<Object>> lsParams = new ArrayList<>();
|
||
List<Object> params = null;
|
||
|
||
List<List<Object>> lsDelParams = new ArrayList<>();
|
||
List<Object> delParams = null;
|
||
|
||
List<String> lsFormatData = new ArrayList<>();
|
||
List<List<Object>> lsFormatParams = new ArrayList<>();
|
||
List<Object> formatParams = null;
|
||
|
||
Map<String, Map<String, String>> users = getUsers(userlanguage);
|
||
Map<String, String> loginidMap = users.get("loginidMap");
|
||
Map<String, String> lastnameMap = users.get("lastnameMap");
|
||
Map<String, String> workcodeMap = users.get("workcodeMap");
|
||
List<String> keymap = new ArrayList<>();
|
||
|
||
|
||
List<ImportSetting> lsImportSetting = new ArrayList<>();
|
||
ImportSetting importSetting = null;
|
||
sql = " select datasourceid, loginid, workcode, lastname, signdate, signtime, tablename, clientaddress,longitude,latitude,addr,memo " +
|
||
" from HrmScheduleSignSet ";
|
||
rs.execute(sql);
|
||
while (rs.next()) {
|
||
importSetting = new ImportSetting();
|
||
importSetting.setDatasourceid(Util.null2String(rs.getString("datasourceid")).trim());
|
||
importSetting.setLoginid(Util.null2String(rs.getString("loginid")).trim());
|
||
importSetting.setWorkcode(Util.null2String(rs.getString("workcode")).trim());
|
||
importSetting.setLastname(Util.null2String(rs.getString("lastname")).trim());
|
||
importSetting.setSigndate(Util.null2String(rs.getString("signdate")).trim());
|
||
importSetting.setSigntime(Util.null2String(rs.getString("signtime")).trim());
|
||
importSetting.setTablename(Util.null2String(rs.getString("tablename")).trim());
|
||
importSetting.setClientaddress(Util.null2String(rs.getString("clientaddress")).trim());
|
||
importSetting.setLongitude(Util.null2String(rs.getString("longitude")).trim());
|
||
importSetting.setLatitude(Util.null2String(rs.getString("latitude")).trim());
|
||
importSetting.setAddr(Util.null2String(rs.getString("addr")).trim());
|
||
importSetting.setMemo(Util.null2String(rs.getString("memo")).trim());
|
||
lsImportSetting.add(importSetting);
|
||
}
|
||
List<KQScheduleSignEntity> lsKQScheduleSignData = new ArrayList<>();
|
||
KQScheduleSignEntity kqScheduleSignData = null;
|
||
for (int i = 0; lsImportSetting != null && i < lsImportSetting.size(); i++) {
|
||
try {
|
||
importSetting = lsImportSetting.get(i);
|
||
String datasourceid = importSetting.getDatasourceid();
|
||
String loginid = importSetting.getLoginid();
|
||
String workcode = importSetting.getWorkcode();
|
||
String lastname = importSetting.getLastname();
|
||
String signdate = importSetting.getSigndate();
|
||
String signtime = importSetting.getSigntime();
|
||
String tablename = importSetting.getTablename();
|
||
String clientaddress = importSetting.getClientaddress();
|
||
String longitude = importSetting.getLongitude();
|
||
String latitude = importSetting.getLatitude();
|
||
String addr = importSetting.getAddr();
|
||
String memo = importSetting.getMemo();
|
||
|
||
DateFormat df = new SimpleDateFormat("HH:mm:ss");
|
||
|
||
sql = " select * from " + tablename + " where oary = '"+userId+"' and modedatacreatedate >= '" + beginDate + "' and modedatacreatedate < '" + endDate + "' order by modedatacreatedate,modedatacreatetime ";
|
||
|
||
//有遇到外部同步,上面的【conn = ds.getConnection();】这个阻塞住,导致下面的同步不执行,下面的用法和集成领导确认
|
||
RecordSetDataSource rsds = new RecordSetDataSource(datasourceid);
|
||
|
||
rsds.execute(sql);
|
||
|
||
List<String> noRepertSynData = new ArrayList<>();
|
||
while (rsds.next()) {
|
||
String tmpLoginid = "";
|
||
String tmpWorkcode = "";
|
||
String tmpLastname = "";
|
||
String tmpSigndate = "";
|
||
String tmpSigntime = "";
|
||
String tmpClientaddress = "";
|
||
String tmpLongitude = "";
|
||
String tmpLatitude = "";
|
||
String tmpAddr = "";
|
||
String tmpMemo = "";
|
||
String tmpCreatedate = "";
|
||
|
||
if (loginid.length() > 0) tmpLoginid = Util.null2String(rsds.getString(loginid)).trim();
|
||
if (workcode.length() > 0) tmpWorkcode = Util.null2String(rsds.getString(workcode)).trim();
|
||
if (lastname.length() > 0) tmpLastname = Util.null2String(rsds.getString(lastname)).trim();
|
||
if (signdate.length() > 0) tmpSigndate = Util.null2String(rsds.getString(signdate)).trim();
|
||
if (clientaddress.length() > 0)
|
||
tmpClientaddress = Util.null2String(rsds.getString(clientaddress));
|
||
if (longitude.length() > 0) tmpLongitude = Util.null2String(rsds.getString(longitude)).trim();
|
||
if (latitude.length() > 0) tmpLatitude = Util.null2String(rsds.getString(latitude)).trim();
|
||
if (addr.length() > 0) tmpAddr = Util.null2String(rsds.getString(addr)).trim();
|
||
if (memo.length() > 0) tmpMemo = Util.null2String(rsds.getString(memo)).trim();
|
||
tmpCreatedate = Util.null2String(rsds.getString("modedatacreatedate")).trim();
|
||
|
||
if (signtime.length() > 0) {
|
||
tmpSigntime = Util.null2String(rsds.getString(signtime)).trim();
|
||
//判断tmpSigntime格式 08:21:11 如果为长格式需要格式化
|
||
if (tmpSigntime.length() > 8) {
|
||
if(tmpSigntime.length()<16){//有遇到signtime格式为hh:mm:ss.0000的格式导致同步不成功
|
||
tmpSigntime = tmpSigntime.substring(0,8);
|
||
}else{//比如上yyyy-mm-dd hh:mm的格式走原逻辑
|
||
tmpSigntime = df.format(Timestamp.valueOf(tmpSigntime));
|
||
}
|
||
} else if (tmpSigntime.length() < 8) {
|
||
//不带秒的情况 自动补齐
|
||
tmpSigntime += ":00";
|
||
}
|
||
} else {
|
||
tmpSigntime = "";
|
||
}
|
||
|
||
if (tmpSigndate.length() > 10) {
|
||
//如果时间为长格式,从signdate字段中格式化时间
|
||
if (tmpSigndate.length() == 16) {
|
||
//不带秒的情况 自动补齐
|
||
tmpSigndate += ":00";
|
||
}
|
||
if (tmpSigntime.length() == 0) {//以signtime字段为有限
|
||
tmpSigndate = tmpSigndate.length()>19?tmpSigndate.substring(0,19):tmpSigndate;
|
||
tmpSigntime = df.format(Timestamp.valueOf(tmpSigndate));
|
||
}
|
||
tmpSigndate = Tools.formatDate(tmpSigndate, "yyyy-MM-dd");
|
||
}
|
||
|
||
//如果时间格式不带秒补齐
|
||
if (tmpSigntime.length() <= 5) {
|
||
tmpSigntime += ":00";
|
||
}
|
||
|
||
kqScheduleSignData = new KQScheduleSignEntity();
|
||
kqScheduleSignData.setLoginid(tmpLoginid);
|
||
kqScheduleSignData.setWorkcode(tmpWorkcode);
|
||
kqScheduleSignData.setLastname(tmpLastname);
|
||
kqScheduleSignData.setSigndate(tmpSigndate);
|
||
kqScheduleSignData.setSigntime(tmpSigntime);
|
||
kqScheduleSignData.setClientaddress(tmpClientaddress);
|
||
kqScheduleSignData.setLongitude(tmpLongitude);
|
||
kqScheduleSignData.setLatitude(tmpLatitude);
|
||
kqScheduleSignData.setAddr(tmpAddr);
|
||
kqScheduleSignData.setMemo(tmpMemo);
|
||
kqScheduleSignData.setCreatedate(tmpCreatedate);
|
||
lsKQScheduleSignData.add(kqScheduleSignData);
|
||
}
|
||
} catch (Exception e) {
|
||
rs.writeLog(e);
|
||
}
|
||
}
|
||
List<String> noRepertSynData = new ArrayList<>();
|
||
for (int i = 0; lsKQScheduleSignData != null && i < lsKQScheduleSignData.size(); i++) {
|
||
kqScheduleSignData = lsKQScheduleSignData.get(i);
|
||
String tmpLoginid = kqScheduleSignData.getLoginid();
|
||
String tmpWorkcode = kqScheduleSignData.getWorkcode();
|
||
String tmpLastname = kqScheduleSignData.getLastname();
|
||
String tmpSigndate = kqScheduleSignData.getSigndate();
|
||
String tmpSigntime = kqScheduleSignData.getSigntime();
|
||
String tmpClientaddress = kqScheduleSignData.getClientaddress();
|
||
String tmpLongitude = kqScheduleSignData.getLongitude();
|
||
String tmpLatitude = kqScheduleSignData.getLatitude();
|
||
String tmpAddr = kqScheduleSignData.getAddr();
|
||
String tmpMemo = kqScheduleSignData.getMemo();
|
||
String tmpCreatedate = kqScheduleSignData.getCreatedate();
|
||
int userid = 0;
|
||
if (Util.null2String(tmpLoginid).length() > 0) {
|
||
userid = StringUtil.parseToInt(loginidMap.get(tmpLoginid), 0);
|
||
}
|
||
if (userid == 0 && Util.null2String(tmpWorkcode).length() > 0) {
|
||
userid = StringUtil.parseToInt(workcodeMap.get(tmpWorkcode), 0);
|
||
}
|
||
if (userid == 0 && Util.null2String(tmpLastname).length() > 0) {
|
||
userid = StringUtil.parseToInt(lastnameMap.get(tmpLastname), 0);
|
||
}
|
||
|
||
if (userid <= 0) {
|
||
rs.writeLog("人员id未找到>>>>>>>>>>" + JSONObject.toJSONString(kqScheduleSignData));
|
||
continue;
|
||
}
|
||
String dkParamData = userid + "#" + tmpCreatedate + "#" + tmpSigntime;
|
||
if (noRepertSynData.contains(dkParamData)) {
|
||
continue;
|
||
}
|
||
noRepertSynData.add(dkParamData);
|
||
params = new ArrayList<>();
|
||
params.add(userid);
|
||
params.add(1);
|
||
params.add(tmpSigndate);
|
||
params.add(tmpSigntime);
|
||
params.add(tmpClientaddress);
|
||
params.add(1);
|
||
params.add(1);
|
||
params.add("OutDataSourceSyn");
|
||
params.add(tmpLongitude);
|
||
params.add(tmpLatitude);
|
||
params.add(tmpAddr);
|
||
params.add(tmpMemo);
|
||
params.add(tmpCreatedate);
|
||
lsParams.add(params);
|
||
|
||
String belongDate = getBelongDate(new User(userid), tmpCreatedate, tmpSigntime);
|
||
|
||
String formatData = userid + "|" + tmpCreatedate+ "|" + belongDate;
|
||
if (!lsFormatData.contains(formatData)) {
|
||
lsFormatData.add(formatData);
|
||
}
|
||
}
|
||
|
||
Map<String, List<String>> overtimeMap = Maps.newHashMap();
|
||
List<String> overtimeList = Lists.newArrayList();
|
||
//刷新报表数据
|
||
for (int i = 0; lsFormatData != null && i < lsFormatData.size(); i++) {
|
||
formatParams = new ArrayList<>();
|
||
String key = lsFormatData.get(i);//String formatData = userid + "|" + tmpSigndate;
|
||
String[] formatData = Util.splitString(lsFormatData.get(i), "|");
|
||
String date_1 = DateUtil.addDate(formatData[1], -1);
|
||
formatParams.add(formatData[0]);
|
||
formatParams.add(date_1);
|
||
lsFormatParams.add(formatParams);
|
||
|
||
formatParams = new ArrayList<>();
|
||
formatParams.add(formatData[0]);
|
||
formatParams.add(formatData[1]);
|
||
lsFormatParams.add(formatParams);
|
||
|
||
if (!keymap.contains(key)) {
|
||
keymap.add(key);
|
||
delParams = new ArrayList<>();
|
||
delParams.add(formatData[0]);
|
||
delParams.add(formatData[1]);
|
||
lsDelParams.add(delParams);
|
||
}
|
||
|
||
String resourceId = formatData[0];
|
||
String kqdate = formatData[1];
|
||
String belongDate = formatData[2];
|
||
if (overtimeMap.containsKey(resourceId)) {
|
||
List<String> tmp_overtimeList = overtimeMap.get(resourceId);
|
||
if (!tmp_overtimeList.contains(kqdate)) {
|
||
tmp_overtimeList.add(kqdate);
|
||
if(!kqdate.equals(belongDate)) {
|
||
tmp_overtimeList.add(belongDate);
|
||
}
|
||
}
|
||
} else {
|
||
if (!overtimeList.contains(kqdate)) {
|
||
overtimeList.add(kqdate);
|
||
if(!kqdate.equals(belongDate)) {
|
||
overtimeList.add(belongDate);
|
||
}
|
||
}
|
||
overtimeMap.put(resourceId, overtimeList);
|
||
}
|
||
}
|
||
|
||
rs.writeLog("同步之前删除数据:"+ JSONObject.toJSONString(lsDelParams));
|
||
rs.writeLog("同步插入数据:"+ JSONObject.toJSONString(lsParams));
|
||
|
||
//删除本次同步数据
|
||
sql = " delete from hrmschedulesign where signfrom='OutDataSourceSyn' and userid =? and (createdate = ? or createdate is null) ";
|
||
bRs.executeBatchSql(sql, lsDelParams);
|
||
|
||
|
||
sql = " insert into HrmScheduleSign (userid, usertype, signdate, signtime, clientaddress, isincom, isimport, signfrom, longitude, latitude, addr,memo, createdate) "
|
||
+ " values(?,?,?,?,?,?,?,?,?,?,?,?,?)";
|
||
bRs.executeBatchSql(sql, lsParams);
|
||
|
||
new KQFormatBiz().format(lsFormatParams, 12);
|
||
|
||
//处理加班生成
|
||
List<KQTaskBean> tasks = new ArrayList<>();
|
||
for (Map.Entry<String, List<String>> mme : overtimeMap.entrySet()) {
|
||
String resid = mme.getKey();
|
||
List<String> overList = mme.getValue();
|
||
for (String date : overList) {
|
||
SplitActionUtil.pushOverTimeTasks(date, date, resid, tasks);
|
||
}
|
||
}
|
||
if (!tasks.isEmpty()) {
|
||
KQQueue.writeTasks(tasks);
|
||
}
|
||
|
||
|
||
int size = lsKQScheduleSignData.size();
|
||
sum++;
|
||
|
||
%>
|
||
|
||
<%!
|
||
private String getBelongDate(User user, String curDate, String signDateTime) {
|
||
String belongDate = curDate;
|
||
Map<String, Object> todayLineMap = KQDurationCalculatorUtil.getWorkButton(user, curDate,true);
|
||
if(todayLineMap != null) {
|
||
List<Map<String, String>> preInfo = (ArrayList<Map<String, String>>)todayLineMap.get("pre_signTime");
|
||
if(preInfo != null) {
|
||
for(Map<String, String> entry : preInfo) {
|
||
String pre_endtime_across = entry.get("endtime_across");
|
||
String pre_endtime = entry.get("endtime");
|
||
String signEndInfo = "1".equals(pre_endtime_across) ? (curDate+" "+pre_endtime+":00") : (DateUtil.addDate(curDate,-1)+" "+pre_endtime+":00");
|
||
String signOutDateTime = signDateTime;
|
||
if(signOutDateTime.compareTo(signEndInfo) < 0) {
|
||
belongDate = DateUtil.addDate(curDate, -1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return belongDate;
|
||
}
|
||
|
||
public Map<String, Map<String, String>> getUsers(int language) {
|
||
RecordSet rs = new RecordSet();
|
||
String sql = "select id,loginid,lastname,workcode from hrmresource where status in(0,1,2,3,5)";
|
||
if (Util.isEnableMultiLang()) {
|
||
if (rs.getDBType().equalsIgnoreCase("sqlserver")) {
|
||
sql = "select id,loginid,ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(lastname)),"+language+"))) as lastname,workcode from hrmresource where status in(0,1,2,3,5)";
|
||
} else {
|
||
sql = "select id,loginid,ltrim(rtrim(convToMultiLang(ltrim(rtrim(lastname)),"+language+"))) as lastname,workcode from hrmresource where status in(0,1,2,3,5)";
|
||
}
|
||
}
|
||
|
||
Map<String, Map<String, String>> users = new HashMap<String, Map<String, String>>();
|
||
rs.execute(sql);
|
||
Map<String, String> loginidMap = new HashMap<String, String>();
|
||
Map<String, String> lastnameMap = new HashMap<String, String>();
|
||
Map<String, String> workcodeMap = new HashMap<String, String>();
|
||
String resourceId = "", loginid = "",lastname = "", workcode = "";
|
||
while (rs.next()) {
|
||
if (StringUtil.isNull(resourceId = StringUtil.vString(rs.getString("id")))) continue;
|
||
loginid = StringUtil.vString(rs.getString("loginid"));
|
||
if (StringUtil.isNull(loginid)){
|
||
}else{
|
||
loginidMap.put(loginid, resourceId);
|
||
}
|
||
if (StringUtil.isNotNull(lastname = StringUtil.vString(rs.getString("lastname")))) lastnameMap.put(lastname, resourceId);
|
||
if (StringUtil.isNotNull(workcode = StringUtil.vString(rs.getString("workcode")))) workcodeMap.put(workcode, resourceId);
|
||
}
|
||
users.put("loginidMap", loginidMap);
|
||
users.put("lastnameMap", lastnameMap);
|
||
users.put("workcodeMap", workcodeMap);
|
||
return users;
|
||
}
|
||
%>
|
||
|
||
<HEAD>
|
||
</HEAD>
|
||
<BODY>
|
||
|
||
<h1>Congratulation Mode 666666 !</h1>
|
||
|
||
<h1> 以下是 <%=username%> 的 相关数据展示 </h1>
|
||
|
||
<h1> size <%=size%> </h1>
|
||
|
||
<h1> 需要同步到原始打卡记录表的数据 <%=JSONObject.toJSONString(lsKQScheduleSignData)%> </h1>
|
||
|
||
<h1> 同步之前删除数据:<%=JSONObject.toJSONString(lsDelParams)%></h1>
|
||
|
||
<h1> 同步插入数据 <%=JSONObject.toJSONString(lsParams)%></h1>
|
||
|
||
<h1> sum <%=sum%> </h1>
|
||
|
||
</BODY>
|