C#獲取微信打卡數據

先看個界面
在這裏插入圖片描述
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">&nbsp;同步考勤數據&nbsp;</a>&nbsp;
        <a href="#" class="easyui-linkbutton" iconcls="icon-search" plain="false" onclick="dosearch()">&nbsp;&nbsp;&nbsp;</a>&nbsp;
        <a href="#" class="easyui-linkbutton" iconcls="icon-application_put" plain="false" onclick="AttendanceExport()">&nbsp;&nbsp;&nbsp;</a>&nbsp;
    </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");
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章