Ecology-Dev-chaofa/领悦二开new/interface/lingyue/cc.jsp

411 lines
19 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<%@ 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>