先看個界面
HTML+JS
<script type="text/javascript">
$(document).ready(function () {
$('#dg').datagrid({
width: '100%',
title: '', //標題內容
loadMsg: '數據加載中請稍候...',
autoRowHeight: false, //行高是否自動
collapsible: true, //是否可摺疊
pagination: true, //分頁是否顯示
rownumbers: true, //行號
pageSize: 10, //每頁多少條
pageList: [10, 20],
fitColumns: true, //設置爲 true,則會自動擴大或縮小列的尺寸以適應網格的寬度並且防止水平滾動
singleSelect: false, //設置爲 true,則只允許選中一行。
checkOnSelect: false, //如果設置爲 true,當用戶點擊某一行時,則會選中/取消選中複選框。如果設置爲 false 時,只有當用戶點擊了複選框時,纔會選中/取消選中複選框
idField: 'ID',
url: null,
toolbar: '#toolbar',
columns: [[
//{ title: '', field: 'ID', checkbox: true },
{ title: '姓名', field: 'UserName' },
{ title: '所在部門', field: 'DepName' },
{
title: '打卡類型', field: 'Checkin_Type',
formatter: function (val, row, index) { if (val == "1") { return "上班打卡"; } else if (val == "2") { return "下班打卡"; } else if (val == "3") { return "外出打卡" } }
},
{ title: '打卡地點', field: 'Location_Title' },
{ title: '地點詳情', field: 'Location_Detail' },
{ title: '異常類型', field: 'Exception_Type', styler: flagColor },
{ title: '備註', field: 'Notes', width: '150px' },
{ title: '打卡時間', field: 'Checkin_Time', formatter: DateTimeFormatter },
{ title: '同步時間', field: 'OP_DATE', formatter: DateTimeFormatter },
]],
});
});
function flagColor(val, row, index) {
if (val == '時間異常' || val == '未打卡') {
return 'background:#FFCCCC';
} else {
return 'background:#B9F3B9';
}
}
//查詢
function dosearch() {
if ($("#StartTime").datebox("getValue") == "") {
$.messager.alert('<%=HLY.Common.Common.GetSystemNameAndVersion()%>', "請輸入開始時間", 'warning');
return;
}
if ($("#EndTime").datebox("getValue") == "") {
$.messager.alert('<%=HLY.Common.Common.GetSystemNameAndVersion()%>', "請輸入結束時間", 'warning');
return;
}
$('#dg').datagrid('clearSelections');
var gridOpts = $('#dg').datagrid('options');
gridOpts.url = 'OfficeApi.aspx?method=QueryAttendance';
$('#dg').datagrid('load', {
DepID: $("#DepID").combobox('getValue'),
UserID: $("#UserID").combobox('getValue'),
StartDate: $("#StartTime").datebox("getValue") + ' 00:00:00',
EndDate: $("#EndTime").datebox("getValue") + ' 23:59:59'
});
}
</script>
<%--檢索欄--%>
<div id="saPanel" class="easyui-panel" title="" data-options="iconCls:'icon-search'">
<table>
<tr>
<td style="text-align: right; width: 60px;">開始時間:
</td>
<td>
<input id="StartTime" class="easyui-datebox" data-options="required:true,showSeconds:false" value="" style="width: 200px" />
</td>
<td style="text-align: right; width: 60px;">結束時間:
</td>
<td>
<input id="EndTime" class="easyui-datebox" data-options="required:true,showSeconds:false" value="" style="width: 200px" />
</td>
<td style="text-align: right; width: 60px;">所屬部門:
</td>
<td>
<input id="DepID" class="easyui-combotree" data-options="url:'../SystemManager/systemManagerApi.aspx?method=QueryAllOrganize',editable:true" style="width: 200px;" />
</td>
<td style="text-align: right; width: 60px;">姓名:
</td>
<td>
<input id="UserID" class="easyui-combobox" data-options="url:'OfficeApi.aspx?method=FindUserName',valueField:'LoginName',textField:'UserName'" style="width: 200px;" />
</td>
</tr>
</table>
</div>
<%-- 數據綁定 --%>
<table id="dg" class="easyui-datagrid">
</table>
<%-- 工具欄 --%>
<div id="toolbar">
<a href="#" class="easyui-linkbutton" id="btnGetAttendanceData" iconcls="icon-cog_go"> 同步考勤數據 </a>
<a href="#" class="easyui-linkbutton" iconcls="icon-search" plain="false" onclick="dosearch()"> 查 詢 </a>
<a href="#" class="easyui-linkbutton" iconcls="icon-application_put" plain="false" onclick="AttendanceExport()"> 導 出 </a>
</div>
<form runat="server" id="fm1">
<asp:Button ID="btnAttendance" runat="server" Style="display: none;" Text="導出" OnClick="btnAttendance_Click" />
</form>
<script>
//導出所選擇的考勤數據
function AttendanceExport() {
if ($("#StartTime").datebox("getValue") == "") {
$.messager.alert('<%=HLY.Common.Common.GetSystemNameAndVersion()%>', "請輸入開始時間", 'warning');
return;
}
if ($("#EndTime").datebox("getValue") == "") {
$.messager.alert('<%=HLY.Common.Common.GetSystemNameAndVersion()%>', "請輸入結束時間", 'warning');
return;
}
var row = $('#dg').datagrid('getData').rows[0];
if (row == null) { $.messager.alert('<%= HLY.Common.Common.GetSystemNameAndVersion()%>', '沒有數據可以進行導出,請重新查詢!', 'warning'); return; }
var arr = new Array();
arr[0] = $("#DepID").combobox('getValue');
arr[1] = $("#UserID").combobox('getValue');
arr[2] = $("#StartTime").datebox("getValue") + ' 00:00:00';
arr[3] = $("#EndTime").datebox("getValue") + ' 23:59:59';
$.ajax({
url: "OfficeApi.aspx?method=AttendanceExport&arr=" + escape(arr.toString()),
success: function (text) {
if (text == "OK") { var obj = document.getElementById("<%=btnAttendance.ClientID %>"); obj.click(); }
else { $.messager.alert('<%= HLY.Common.Common.GetSystemNameAndVersion()%>', text, 'warning'); }
}
})
}
function ChangeDateFormat(cellval) {
var str = cellval;//對應的UNIX時間戳爲1223559328
var new_str = str.replace(/:/g, '-');
new_str = new_str.replace(/ /g, '-');
var arr = new_str.split("-");
var datum = new Date(Date.UTC(arr[0], arr[1] - 1, arr[2], arr[3] - 8, arr[4], arr[5]));
//var datum = new Date(datum.getTime());
return datum.getTime()/1000;
}
$('#btnGetAttendanceData').click(function () {
if ($("#StartTime").datebox("getValue") == "") {
$.messager.alert('<%=HLY.Common.Common.GetSystemNameAndVersion()%>', "請輸入開始時間", 'warning');
return;
}
if ($("#EndTime").datebox("getValue") == "") {
$.messager.alert('<%=HLY.Common.Common.GetSystemNameAndVersion()%>', "請輸入結束時間", 'warning');
return;
}
$('#btnGetAttendanceData').attr('disabled', true);
$.messager.progress({ msg: '請稍後,正在同步中...' });
var starttime = ChangeDateFormat($("#StartTime").datebox("getValue") + ' 00:00:00');
var endtime = ChangeDateFormat($("#EndTime").datebox("getValue") + ' 23:59:59');
$.ajax({
url: 'OfficeApi.aspx?method=GetAttendanceData',
type: 'post',
dateType: 'json',
data: { starttime: starttime, endtime: endtime },
success: function (su) {
var result = eval('(' + su + ')');
if (result.Result == true) {
$.messager.alert('<%=HLY.Common.Common.GetSystemNameAndVersion()%>', result.Message, 'info');
$('#btnGetAttendanceData').attr('disabled', true);
$.messager.progress("close");
}
else {
$.messager.alert('<%= HLY.Common.Common.GetSystemNameAndVersion()%>', result.Message, 'warning');
$('#btnGetAttendanceData').attr('disabled', false);
$.messager.progress("close");
}
}
});
})
</script>
public class body
{
public int opencheckindatatype { get; set; }
public int starttime { get; set; }
public int endtime { get; set; }
public List<string> useridlist { get; set; }
}
/// <summary>
/// 獲取考勤打卡數據
/// </summary>
public void GetAttendanceData()
{
OAAttendanceEntity ent = new OAAttendanceEntity();
IBusinessOffice obj = (IBusinessOffice)RemoteObjectCreation.CreateBusinessFacade(typeof(IBusinessOffice));
LogEntity log = new LogEntity();
log.IPAddress = Common.GetUserIP(HttpContext.Current.Request);
log.Moudle = "考勤管理";
log.NvgPage = "同步考勤打卡記錄";
log.Status = "0";
log.Operate = "A";
log.UserID = UserInfor.LoginName.Trim();
ErrMessage msg = new ErrMessage(); msg.Message = "";
msg.Result = false;
body rt = new body();
rt.opencheckindatatype = 3;
rt.starttime = Convert.ToInt32(Request["starttime"]);
rt.endtime = Convert.ToInt32(Request["endtime"]);
OASystemUserEntity qyuser = new OASystemUserEntity();
List<OASystemUserEntity> lists = obj.FindUserName(qyuser);
List<OAAttendanceEntity> relist = new List<OAAttendanceEntity>();
List<string> LoginNameJson = new List<string>();
for (int i = 0; i < lists.Count; i++)
{
LoginNameJson.Add(lists[i].LoginName);
}
foreach (string a in LoginNameJson) {
List<string> data = new List<string>() { a };
rt.useridlist = data;
string json = JsonConvert.SerializeObject(rt);
string token = Common.GetWeixinQYToken("你的企業ID", "你的考勤數接口Script");
string serviceUrl = string.Format("https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckindata?access_token={0}&body={1}", token, json);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
//把用戶傳過來的數據轉成“UTF-8”的字節流
byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(json);
myRequest.Method = "POST";
myRequest.ContentLength = buf.Length;
myRequest.ContentType = "application/json";
myRequest.MaximumAutomaticRedirections = 1;
myRequest.AllowAutoRedirect = true;
//發送請求
Stream stream = myRequest.GetRequestStream();
stream.Write(buf, 0, buf.Length);
stream.Close();
//獲取接口返回值
//通過Web訪問對象獲取響應內容
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
//通過響應內容流創建StreamReader對象,因爲StreamReader更高級更快
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有編碼問題就用這個方法
string returnXml = reader.ReadToEnd();//利用StreamReader就可以從響應內容從頭讀到尾
reader.Close();
myResponse.Close();
AttendanceInfo whh = JsonConvert.DeserializeObject<AttendanceInfo>(returnXml);
if (whh.errmsg != "ok"||whh.errcode!="0"||whh.checkindata.Count==0) {
continue;
}
int IndexofA = returnXml.IndexOf("[{");
int IndexofB = returnXml.IndexOf("}]");
string Ru = returnXml.Substring(IndexofA, IndexofB - IndexofA + 2);
ArrayList rel = (ArrayList)JSON.Decode(Ru);
foreach (Hashtable la in rel)
{
if (Convert.ToString(la["userid"]) == null||Convert.ToString(la["userid"]) == "")
{
break;
}
OAAttendanceEntity entity = new OAAttendanceEntity();
entity.UserID = Convert.ToString(la["userid"]);
entity.Checkin_Time = Convert.ToDateTime(ChangUnixtoDateTime(Convert.ToInt32(la["checkin_time"])));
if (obj.QueryAttendanceCount(entity) != 0)
{
continue;
}
int checkin_type = 0;
if (Convert.ToString(la["checkin_type"]) == "上班打卡")
{
checkin_type = 1;
}
else if (Convert.ToString(la["checkin_type"]) == "下班打卡")
{
checkin_type = 2;
}
else if (Convert.ToString(la["checkin_type"]) == "外出打卡")
{
checkin_type = 3;
}
relist.Add(new OAAttendanceEntity
{
UserID = Convert.ToString(la["userid"]),
GroupName = Convert.ToString(la["groupname"]),
Checkin_Type = checkin_type,
Exception_Type = Convert.ToString(la["exception_type"]),
Checkin_Time = Convert.ToDateTime(ChangUnixtoDateTime(Convert.ToInt32(la["checkin_time"]))),
Location_Title = Convert.ToString(la["location_title"]),
Location_Detail = Convert.ToString(la["location_detail"]),
WifiName = Convert.ToString(la["wifiname"]),
Notes = Convert.ToString(la["notes"]),
Longitude = Convert.ToDecimal(la["lng"]) / 1000000,
Latitude = Convert.ToDecimal(la["lat"]) / 1000000,
OP_DATE = System.DateTime.Now
});
}
}
ent.AttendanceList = relist;
obj.GetAttendanceData(ent, log);
msg.Result = true;
msg.Message = "成功獲取數據!";
//返回處理結果
string res = JSON.Encode(msg);
Response.Write(res);
Response.End();
}
public String ChangUnixtoDateTime(long unixTimeStamp)
{
//long unixTimeStamp = 1478162177;
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 當地時區
DateTime dt = startTime.AddSeconds(unixTimeStamp);
return dt.ToString("yyyy-MM-dd HH:mm:ss");
}