Browse Source

更换mac

Bitliker 9 years ago
parent
commit
beb8d1ac9f

+ 1 - 1
WeiChat/build.gradle

@@ -13,7 +13,7 @@ android {
     }
     signingConfigs {
         config {
-            storeFile file('C:/Users/Arison/Desktop/applicationsignname[20150409]')
+            storeFile file('D:/config/applicationsignname[20150409]')
             storePassword '13237658359'
             keyAlias 'jie-20150409'
             keyPassword '13237658359'

+ 4 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/SplashActivity.java

@@ -26,6 +26,7 @@ import com.xzjmyk.pm.activity.ui.account.LoginActivity;
 import com.xzjmyk.pm.activity.ui.account.RegisterActivity;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.alarm.AlarmManage;
 import com.xzjmyk.pm.activity.util.DeviceInfoUtil;
 import com.xzjmyk.pm.activity.util.Md5Util;
 import com.xzjmyk.pm.activity.volley.ObjectResult;
@@ -71,8 +72,10 @@ public class SplashActivity extends BaseActivity {
             }
         });
         mSelectLv.setVisibility(View.INVISIBLE);
-
+        AlarmManage manage = new AlarmManage();
+        manage.setSigninAlarm(this);
         initConfig();// 初始化配置
+
     }
 
     /**

+ 5 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/AlarmaActivity.java

@@ -63,6 +63,11 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
         tv_ualar.setOnClickListener(this);
         isalarma_sw.setOnCheckedChangeListener(this);
         auto_signin_sw.setOnCheckedChangeListener(this);
+        int u = CommonUtil.getSharedPreferencesInt(ct, "ALARM_OFFWORK_TIME", 5);
+        int d = CommonUtil.getSharedPreferencesInt(ct, "ALARM_WORK_TIME", 5);
+        tv_alar.setText("提前" + u + "分钟");
+        tv_ualar.setText("延迟" + d + "分钟");
+
     }
 
 

+ 3 - 71
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ChangeMobileActivity.java

@@ -3,7 +3,6 @@ package com.xzjmyk.pm.activity.ui.erp.activity.oa;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
-import android.provider.Settings;
 import android.text.TextUtils;
 import android.view.View;
 import android.widget.Button;
@@ -21,10 +20,10 @@ import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.Constants;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.util.MacAndIDUtil;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 import com.xzjmyk.pm.activity.view.crouton.Crouton;
 
-import java.io.FileInputStream;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -64,16 +63,6 @@ public class ChangeMobileActivity extends BaseActivity {
                     progressDialog.dismiss();
                     if (!StringUtils.isEmpty(message))
                         Crouton.makeText(ct, message);
-//                    JsonValidator validator = new JsonValidator();
-//                    if (validator.validate(message)) {
-//                        Log.i("gongpengming","validate(message");
-//                        if (JSON.parseObject(message).containsKey("exceptionInfo")) {
-//                            Log.i("gongpengming","containsKey(message");
-//                            String error = JSON.parseObject(message).getString("exceptionInfo");
-//                            if (!StringUtils.isEmpty(error))
-//                                Crouton.makeText(ct, error);
-//                        }
-//                    }
                     break;
                 default:
                     break;
@@ -90,7 +79,8 @@ public class ChangeMobileActivity extends BaseActivity {
     }
 
     private void initView() {
-        String mac = getMac();
+        MacAndIDUtil util=new MacAndIDUtil();
+        String mac = util.getMac(ct);
         if (!StringUtils.isEmpty(mac))
             mac_tv.setText(mac);
         exit_btn.setOnClickListener(new View.OnClickListener() {
@@ -140,62 +130,4 @@ public class ChangeMobileActivity extends BaseActivity {
         headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
         ViewUtil.httpSendRequest(ct, url, param, handler, headers, 0x12, null, null, "get");
     }
-
-    public static String getLocalMacAddress() {
-        String mac = null;
-        try {
-            String path = "sys/class/net/eth0/address";
-            FileInputStream fis_name = new FileInputStream(path);
-            byte[] buffer_name = new byte[8192];
-            int byteCount_name = fis_name.read(buffer_name);
-            if (byteCount_name > 0) {
-                mac = new String(buffer_name, 0, byteCount_name, "utf-8");
-            }
-            if (mac == null) {
-                fis_name.close();
-                return "";
-            }
-            fis_name.close();
-        } catch (Exception io) {
-            String path = "sys/class/net/wlan0/address";
-            FileInputStream fis_name;
-            try {
-                fis_name = new FileInputStream(path);
-                byte[] buffer_name = new byte[8192];
-                int byteCount_name = fis_name.read(buffer_name);
-                if (byteCount_name > 0) {
-                    mac = new String(buffer_name, 0, byteCount_name, "utf-8");
-                }
-                fis_name.close();
-            } catch (Exception e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-        }
-        if (mac == null) {
-            return "";
-        } else {
-            return mac.trim();
-        }
-    }
-
-    public static String getMac() {
-        return Settings.Secure.getString(MyApplication.getInstance().getContentResolver(),
-                Settings.Secure.ANDROID_ID);
-//        String macSerial = "";
-//        try {
-//            Process pp = Runtime.getRuntime().exec("cat /sys/class/net/wlan0/address");
-//            InputStreamReader ir = new InputStreamReader(pp.getInputStream());
-//            LineNumberReader input = new LineNumberReader(ir);
-//            String line;
-//            while ((line = input.readLine()) != null) {
-//                macSerial += line.trim();
-//            }
-//
-//            input.close();
-//        } catch (IOException e) {
-//            e.printStackTrace();
-//        }
-//        return macSerial;
-    }
 }

+ 8 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OutSigninOKActivity.java

@@ -409,7 +409,12 @@ public class OutSigninOKActivity extends BaseActivity {
             public void callBack(String code) {
                 if (!StringUtils.isEmpty(code) && isNum(code))
                     mo_id = Integer.valueOf(code);
-                doSignin(mo_id, id);
+                CodeUtil.getInstance().getCode(ct, "MOBILE_OUTSIGN", new CodeUtil.OnCodeLinstener() {
+                    @Override
+                    public void callBack(String code) {
+                        doSignin(code, mo_id, id);
+                    }
+                });
             }
         });
     }
@@ -437,8 +442,7 @@ public class OutSigninOKActivity extends BaseActivity {
     /**
      * 签到
      */
-    private void doSignin(int mo_id, int id) {
-
+    private void doSignin(String code, int mo_id, int id) {
         progressDialog.show();
         //获取网络数据
         String url = baseUrl + "mobile/oa/saveOutSign.action";
@@ -446,6 +450,7 @@ public class OutSigninOKActivity extends BaseActivity {
         OutSigninBean bean = new OutSigninBean();
         if (mo_id > 0)
             bean.setMo_id(mo_id);
+        bean.setMo_code(code);
         bean.setMo_address(addr_tv.getText().toString().trim());
         bean.setMo_mancode(CommonUtil.getSharedPreferences(this, "erp_username"));
         String name = CommonUtil.getSharedPreferences(ct, "erp_emname");

+ 65 - 103
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/SigninFragment.java

@@ -6,7 +6,6 @@ import android.location.LocationManager;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
-import android.provider.Settings;
 import android.support.v7.app.ActionBar;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
@@ -41,14 +40,15 @@ import com.xzjmyk.pm.activity.ui.erp.util.CodeUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.JsonValidator;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.WifiReceiverUtil;
 import com.xzjmyk.pm.activity.ui.tool.ThreadUtil;
 import com.xzjmyk.pm.activity.util.BaiduMapUtil;
 import com.xzjmyk.pm.activity.util.CalendarUtils;
+import com.xzjmyk.pm.activity.util.MacAndIDUtil;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 import com.xzjmyk.pm.activity.view.crouton.Crouton;
 import com.xzjmyk.pm.activity.view.wheel.OASigninPicker;
 
-import java.io.FileInputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -103,6 +103,7 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
     private int loginNum = 0; //登陆次数
     private boolean isReOne = true;//判断是否是第一次重新定位
     private boolean isMacInNet = true;//是否提交过mac地址
+    private String macError = null;
 
     private Handler handler = new Handler() {
         @Override
@@ -128,7 +129,7 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
                             if (loginNum < 3) {
                                 returnLogin();
                             }
-                            Crouton.makeText(ct, "当前账号没有分配公司地址,请联系管理员!!");
+                            Crouton.makeText(ct, R.string.not_addr_message);
                         }
                         if (jsonObject.containsKey("wd_degree")) {//当该用户有排班
                             //用户有排班时候
@@ -139,20 +140,20 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
                         loadLog(TimeUtils.s_long_2_str(selectTime));//获取打卡时间
                     } else {
                         //如果返回失败
-                        Crouton.makeText(ct, "系统尚未找到您的班次,请联系管理员设置班次");
+                        Crouton.makeText(ct, R.string.not_workdata);
                     }
                     break;
                 case 0x12:
                     if (parseObject(message).containsKey("listdata")) {
                         setDataByLogs(parseObject(message).getJSONArray("listdata"));
                     } else {
-                        Crouton.makeText(ct, "系统尚未找到您的打卡记录,请联系管理员设置班次");
+                        Crouton.makeText(ct, R.string.not_workdata);
                     }
                     break;
                 case 0x13:
                     //签到成功
                     if (parseObject(message).containsKey("success") && parseObject(message).getBoolean("success")) {
-                        Crouton.makeText(ct, "签到成功!");
+                        Crouton.makeText(ct, R.string.signin_ok);
                         handler.postDelayed(new Runnable() {
                             @Override
                             public void run() {
@@ -161,7 +162,7 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
                         }, 20000);
                         loadLog(selectTime == 0 ? TimeUtils.s_long_2_str(System.currentTimeMillis()) : TimeUtils.s_long_2_str(selectTime));
                     } else
-                        Crouton.makeText(ct, "签到失败");
+                        Crouton.makeText(ct, R.string.signin_error);
                     break;
                 case 0x15:
                     JSONObject object = JSON.parseObject(message);
@@ -196,23 +197,22 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
                     if (validator.validate(message)) {
                         Crouton.makeText(ct, message);
                     }
-                    if (loginNum < 3 && StringUtils.isInclude(message, "会话已断开") || StringUtils.isInclude(message, "程序错误")) {
+                    if (loginNum < 3 && StringUtils.isInclude(message, getResources().getString(R.string.session_out)) || StringUtils.isInclude(message, "程序错误")) {
                         returnLogin();
-                    } else if (StringUtils.isInclude(message, "该设备不是考勤打卡常用设备")
-                            || StringUtils.isInclude(message, "该设备已被他人绑定")) {
-                        showError(message);
-                    } else if (StringUtils.isInclude(message, "404")) {
-                        CodeUtil.getInstance().getCode(ct, "CardLog", new CodeUtil.OnCodeLinstener() {
-                            @Override
-                            public void callBack(String code) {
-                                doSignin(code);
-                            }
-                        });
+                    } else if (StringUtils.isInclude(message, getString(R.string.mac_other))) {
+                        macError = getResources().getString(R.string.mac_other);
+                    } else if (StringUtils.isInclude(message, "该设备不是考勤打卡常用设备")) {
+                        showError(getString(R.string.other_phone_error));
+                    } else if (StringUtils.isInclude(message, "设备正处于申请变更绑定阶段")) {
+                        macError = getResources().getString(R.string.mac_changing);
                     }
                     break;
             }
         }
     };
+    private String macAddress;
+    private WifiReceiverUtil wifiReceiver;
+    private MacAndIDUtil util;
 
     //生命周期
     @Override
@@ -224,6 +224,8 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
     @Override
     public void onStop() {
         super.onStop();
+        if (wifiReceiver != null)
+            wifiReceiver.unRegReceiver(ct);
     }
 
     @Override
@@ -264,17 +266,18 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
                         Crouton.makeText(ct, "当前网络不可用,请检查网络连接");
                         return;
                     }
-                    CodeUtil.getInstance().getCode(ct, "CardLog", new CodeUtil.OnCodeLinstener() {
-                        @Override
-                        public void callBack(String code) {
-                            doSignin(code);
-                        }
-                    });
-//                    if (isMacInNet) {
-//                        validatorMac();
-//                    } else {
-//                        showFristMac();
-//                    }
+                    //TODO 上传文件
+//                    CodeUtil.getInstance().getCode(ct, "CardLog", new CodeUtil.OnCodeLinstener() {
+//                        @Override
+//                        public void callBack(String code) {
+//                            doSignin(code);
+//                        }
+//                    });
+                    if (isMacInNet) {
+                        validatorMac();
+                    } else {
+                        showFristMac();
+                    }
                 }
                 break;
             case R.id.title:
@@ -366,6 +369,23 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
                 }
             }
         });
+
+        //初始化mac地址
+        util = new MacAndIDUtil();
+        macAddress = util.getMac(ct);
+        if (StringUtils.isEmpty(macAddress)) {
+            //mac地址不合法时候   提示开启wifi
+            wifiReceiver = new WifiReceiverUtil();
+            wifiReceiver.regReceiver(ct, new WifiReceiverUtil.OnWifiStatusChangeLinstener() {
+                @Override
+                public void callBack(boolean isOpen) {
+                    Log.i("gongpengming", "isOpen=" + isOpen);
+                    if (isOpen) {
+                        macAddress = util.getMac(ct);
+                    }
+                }
+            });
+        }
     }
 
     private void setBaiduLocation() {
@@ -385,20 +405,14 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
         listview.setAdapter(adapter);
         office_addr.setText(Html.fromHtml("<font color=\'#575757\'>当前位置  " + "</font><font color=\'#000000\'>" + addr + "</font>"));
         loadNetData(System.currentTimeMillis());//获取打卡班次信息
-//        getMacByNet();
+        getMacByNet();
         //判断是否有定位权限
         if (!isOpenGps()) {
             Crouton.makeText(ct, "为了更好体验,请打开GPS", 3000);
         }
     }
 
-    private void showError(String m) {
-        String message = "";
-        if (StringUtils.isInclude(m, "该设备已被他人绑定")) {
-            message = "该设备已被他人绑定!若手机更换请先填写手机变更单再来签到";
-        } else {
-            message = "请在常用手机签到!若手机更换请先填写手机变更单再来签到";
-        }
+    private void showError(String message) {
         MaterialDialog dialog = new MaterialDialog.Builder(ct).title("提示").content(message)
                 .positiveText("确定").negativeText("取消").autoDismiss(false).callback(new MaterialDialog.ButtonCallback() {
                     @Override
@@ -421,8 +435,8 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
 
     //提示用户是否同意第一次上传mac
     private void showFristMac() {
-        MaterialDialog dialog = new MaterialDialog.Builder(ct).title("提示").content("本次打卡会将本机设为常用签到手机,是否继续签到?")
-                .positiveText("确定").negativeText("取消").autoDismiss(false).callback(new MaterialDialog.ButtonCallback() {
+        MaterialDialog dialog = new MaterialDialog.Builder(ct).title(R.string.prompt_title).content(R.string.show_frist_mac)
+                .positiveText(R.string.sure).negativeText(R.string.cancel).autoDismiss(false).callback(new MaterialDialog.ButtonCallback() {
                     @Override
                     public void onPositive(MaterialDialog dialog) {
                         validatorMac();
@@ -463,20 +477,24 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
             Crouton.makeText(ct, ct.getString(R.string.networks_out));
             return false;
         }
+        if (!StringUtils.isEmpty(macError)) {
+            Crouton.makeText(ct, macError);
+            return false;
+        }
         if (isSignining) {
-            Crouton.makeText(ct, "请不要频繁打卡");
+            Crouton.makeText(ct, R.string.not_signin_agin);
             return false;
         }
         if (companyDistance == -1) {
-            Crouton.makeText(ct, "您当前账号没有设置打卡地址信息,请联系管理员");
+            Crouton.makeText(ct, R.string.not_addr_message);
             return false;
         }
         if (companyDistance < distance) {
-            Crouton.makeText(ct, "您当前位置距离考勤地点太远,请移往目标或重新定位");
+            Crouton.makeText(ct, R.string.too_long);
             return false;
         }
         if (!isToday) {
-            Crouton.makeText(ct, "当前所在日期无法签到");
+            Crouton.makeText(ct, R.string.not_today);
             return false;
         }
         return true;
@@ -496,63 +514,6 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
         return re;
     }
 
-    public static String getMac() {
-        return Settings.Secure.getString(MyApplication.getInstance().getContentResolver(),
-                Settings.Secure.ANDROID_ID);
-//        String macSerial = "";
-//        try {
-//            Process pp = Runtime.getRuntime().exec("cat /sys/class/net/wlan0/address");
-//            InputStreamReader ir = new InputStreamReader(pp.getInputStream());
-//            LineNumberReader input = new LineNumberReader(ir);
-//            String line;
-//            while ((line = input.readLine()) != null) {
-//                macSerial += line.trim();
-//            }
-//            input.close();
-//        } catch (IOException e) {
-//            e.printStackTrace();
-//        }
-//        return macSerial;
-    }
-
-
-    public static String getLocalMacAddress() {
-        String mac = null;
-        try {
-            String path = "sys/class/net/eth0/address";
-            FileInputStream fis_name = new FileInputStream(path);
-            byte[] buffer_name = new byte[8192];
-            int byteCount_name = fis_name.read(buffer_name);
-            if (byteCount_name > 0) {
-                mac = new String(buffer_name, 0, byteCount_name, "utf-8");
-            }
-            if (mac == null) {
-                fis_name.close();
-                return "";
-            }
-            fis_name.close();
-        } catch (Exception io) {
-            String path = "sys/class/net/wlan0/address";
-            FileInputStream fis_name;
-            try {
-                fis_name = new FileInputStream(path);
-                byte[] buffer_name = new byte[8192];
-                int byteCount_name = fis_name.read(buffer_name);
-                if (byteCount_name > 0) {
-                    mac = new String(buffer_name, 0, byteCount_name, "utf-8");
-                }
-                fis_name.close();
-            } catch (Exception e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-        }
-        if (mac == null) {
-            return "";
-        } else {
-            return mac.trim();
-        }
-    }
 
     //前后90分钟,isU--是否是上班
     private String getEndSignin(String workTime, boolean isU) {
@@ -695,7 +656,7 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
 
     private void setDataForAdapter(List<SigninBean> beans) {
         if (companyDistance == -1 || (companyX == 0 && companyY == 0)) {
-            Crouton.makeText(ct, "未获取正确考勤地点,请重试或重新登陆");
+            Crouton.makeText(ct, R.string.not_addr_message);
         }
         if (adapter == null) {
             adapter = new SigninAdapter(ct);
@@ -744,15 +705,16 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
         //获取网络数据
         String url = "mobile/queryMobileMac.action";
         Map<String, Object> param = new HashMap<>();
+        param.put("macaddress", macAddress);
         loadNet(url, param, 0x15);
     }
 
     private void validatorMac() {
         //获取网络数据
         String url = "mobile/addMobileMac.action";
-        String mac = getLocalMacAddress();
+
         Map<String, Object> param = new HashMap<>();
-        param.put("macAddress", mac);
+        param.put("macAddress", macAddress);
         loadNet(url, param, 0x17);
     }
 

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/net/HttpClient.java

@@ -193,7 +193,7 @@ public class HttpClient {
             } else
                 buf.deleteCharAt(buf.length() - 1);
         }
-//        Log.i("gongpengming", "网址:" + buf.toString());
+        Log.i("gongpengming", "网址:" + buf.toString());
         HttpGet httpGet = new HttpGet(buf.toString());
         httpclient.getParams().setParameter(
                 CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8");

+ 58 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/WifiReceiverUtil.java

@@ -0,0 +1,58 @@
+package com.xzjmyk.pm.activity.ui.erp.util;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.wifi.WifiManager;
+
+/**
+ * Created by pengminggong on 2016/10/31.
+ */
+
+public class WifiReceiverUtil {
+    private WifiChangeChangedReceiver receiver = null;
+
+    public void regReceiver(Context ct, OnWifiStatusChangeLinstener linstener) {
+        this.linstener = linstener;
+        if (receiver == null) receiver = new WifiChangeChangedReceiver();
+        IntentFilter intenInfter = new IntentFilter();
+        intenInfter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
+        ct.registerReceiver(receiver, intenInfter);
+    }
+
+    public void unRegReceiver(Context ct) {
+        if (receiver == null) receiver = new WifiChangeChangedReceiver();
+        ct.unregisterReceiver(receiver);
+    }
+
+    class WifiChangeChangedReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {// 这个监听wifi的打开与关闭,与wifi的连接无关
+                int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
+                switch (wifiState) {
+                    case WifiManager.WIFI_STATE_DISABLED://禁用
+                        if (linstener != null)
+                            linstener.callBack(false);
+                        break;
+                    case WifiManager.WIFI_STATE_ENABLED://启用
+                        linstener.callBack(true);
+                        break;
+                    case WifiManager.WIFI_STATE_DISABLING://禁用
+                        linstener.callBack(false);
+                        break;
+                    case WifiManager.WIFI_STATE_ENABLING://有可能
+                        linstener.callBack(true);
+                        break;
+                }
+            }
+        }
+    }
+
+    private OnWifiStatusChangeLinstener linstener;
+
+    public interface OnWifiStatusChangeLinstener {
+        void callBack(boolean isOpen);
+    }
+}

+ 46 - 11
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/AlarmManage.java

@@ -4,6 +4,8 @@ import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
+import android.util.Log;
+import android.widget.Toast;
 
 import com.xzjmyk.pm.activity.bean.oa.SigninBean;
 import com.xzjmyk.pm.activity.db.dao.SigninDao;
@@ -30,7 +32,6 @@ public class AlarmManage {
     public final static String AUTO_SIGNIN = "AUTO_SIGNIN";//判断是否选中
 
     public void setSigninAlarm(Context ct) {
-        if (true) return;
         boolean isAlarm = CommonUtil.getSharedPreferencesBoolean(ct, ALARMA_CLICK, false);//是否自动打卡
         boolean isAuto = CommonUtil.getSharedPreferencesBoolean(ct, AUTO_SIGNIN, false);//是否提醒
         if (!isAlarm && !isAuto) {
@@ -40,26 +41,60 @@ public class AlarmManage {
         List<SigninBean> beans = SigninDao.getInstance(ct).queryByEmcode();
         int u = CommonUtil.getSharedPreferencesInt(ct, "ALARM_WORK_TIME", 5);//上班提前xx分钟
         int d = CommonUtil.getSharedPreferencesInt(ct, "ALARM_OFFWORK_TIME", 5);//下班延迟xx分钟
+        boolean isToday = true;
         long time = System.currentTimeMillis();
-        String today = TimeUtils.s_long_2_str(time);//当天日期   yyyy-MM-dd
-
-        String alarmTime = null;//提醒时间  yyyy-MM-dd HH:mm
-
-
+        long minTime = 0;
+        long minute = 1000 * 60;
+        long alarmTime = 0;
         for (SigninBean e : beans) {
-            if (isAlarm) {//提醒
-                alarmTime = today + " " + e.getWorkTime() + ":00";//当天下班时间
-
+            //***************先上班后下班***************************
+            //***************上班开始***************************
+            //上班情况下,必然存在 ==》 上班打卡提醒 <= 上班自动签到   所以。。。。
+            alarmTime = getTimeByHHmm(e.getWorkTime()) - u * minute;//上班时间减去上班提前时间==上班提醒时间
+            setMinTime(minTime, alarmTime);
+            if (isAlarm && alarmTime > time) {//符合上班提醒
+                setNextAlarm(ct, WORK_ALARM_ACTION, alarmTime);
+                isToday = true;
+                break;
+            }
+            alarmTime = getTimeByHHmm(e.getWorkTime()) - 1 * minute;     //上班时间减去上班提前时间==上班自动打卡
+            if (isAuto && alarmTime > time) {
+                setNextAlarm(ct, AUTO_SIGNIN_ACTION, alarmTime);
+                isToday = true;
                 break;
-
             }
+            //***************上班结束***************************
+            //***************下班开始***************************
+            //下班情况是下班自动大卡必然存在  ==》 下班自动签到 <= 下班提醒   所以。。。。
+            alarmTime = getTimeByHHmm(e.getOffTime()) + 1 * minute;     //上班时间减去上班提前时间==上班自动打卡
+            if (isAuto && alarmTime > time) {
+                setNextAlarm(ct, AUTO_SIGNIN_ACTION, alarmTime);
+                isToday = true;
+                break;
+            }
+            alarmTime = getTimeByHHmm(e.getOffTime()) + d * minute;//上班时间减去上班提前时间==上班提醒时间
+            if (isAlarm && alarmTime > time) {//符合上班提醒
+                setNextAlarm(ct, OFFWORK_ALARM_ACTION, alarmTime);
+                isToday = true;
+                break;
+            }
+            //***************下班结束***************************
         }
+        if (minTime != 0 && !isToday) {
+            setNextAlarm(ct, WORK_ALARM_ACTION, minTime);
+        }
+    }
 
+    private void setMinTime(long minTime, long alarmTime) {
+        if (minTime == 0 || minTime > alarmTime) {
+            minTime = alarmTime;
+        }
     }
 
 
     private long getTimeByHHmm(String time) {
         String che = TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + time + ":00";//当天下班时间
+        Log.i("gongpengming", "che=" + che);
         return TimeUtils.f_str_2_long(che);
     }
 
@@ -79,7 +114,7 @@ public class AlarmManage {
 
     private void setNextAlarm(Context ct, String action, long time) {
         String str = TimeUtils.f_long_2_str(time);
-//        Toast.makeText(ct, "提醒时间为:" + str, Toast.LENGTH_SHORT).show();
+        Toast.makeText(ct, "提醒时间为:" + str, Toast.LENGTH_SHORT).show();
         Intent intent = new Intent(ct, AlarmReceiver.class);
         intent.setAction(StringUtils.isEmpty(action) ? WORK_ALARM_ACTION : action);
         AlarmManager alarm = (AlarmManager) ct.getSystemService(ALARM_SERVICE);

+ 84 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/AlarmReceiver.java

@@ -3,8 +3,24 @@ package com.xzjmyk.pm.activity.ui.erp.util.alarm;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+import android.database.SQLException;
+import android.os.Handler;
+import android.os.Message;
+import android.widget.Toast;
+
+import com.xzjmyk.pm.activity.BdLocationHelper;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.SigninActivity;
+import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.CodeUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
 
-import com.xzjmyk.pm.activity.util.TimeUtils;
 
 /**
  * Created by pengminggong on 2016/10/26.
@@ -14,13 +30,78 @@ public class AlarmReceiver extends BroadcastReceiver {
 
     @Override
     public void onReceive(Context context, Intent intent) {
-        String chche = TimeUtils.f_long_2_str(System.currentTimeMillis());
         String action = intent.getAction();
         AlarmManage manage = new AlarmManage();
-//        manage.setSigninAlarm(context);
+        manage.setSigninAlarm(context);
+        if (StringUtils.isEmpty(action)) {
+
+            return;
+        }
+        NotificationManage notificationManage = new NotificationManage();
+        if (AlarmManage.AUTO_SIGNIN_ACTION.equals(action)) {//自动打卡
+            AutoSignin(context);
+        } else if (AlarmManage.WORK_ALARM_ACTION.equals(action)) {//上班提醒
+            notificationManage.sendNotification(context, "请按时上班打卡", SigninActivity.class);
+        } else if (AlarmManage.OFFWORK_ALARM_ACTION.equals(action)) {//下班提醒
+            notificationManage.sendNotification(context, "请按时下班打卡", SigninActivity.class);
+        } else {
+            AutoSignin(context);
+        }
+//        Toast.makeText(context, "这个是" + action + "的提醒", Toast.LENGTH_SHORT).show();
+    }
+
+    private void AutoSignin(final Context ct) {
+        CodeUtil.getInstance().getCode(ct, "CardLog", new CodeUtil.OnCodeLinstener() {
+            @Override
+            public void callBack(String code) {
+                doSignin(ct, code);
+            }
+        });
     }
 
 
+    //签到
+    private void doSignin(Context ct, String code) {
+
+        Map<String, Object> param = new HashMap<>();
+        Map<String, Object> form = new HashMap<>();
+        form.put("cl_code", code);
+        form.put("cl_phone", MyApplication.getInstance().mLoginUser.getTelephone());
+        form.put("cl_emcode", CommonUtil.getSharedPreferences(ct, "erp_username"));
+        form.put("cl_emname", MyApplication.getInstance().mLoginUser.getNickName());
+        try {
+            BdLocationHelper helper = MyApplication.getInstance().getBdLocationHelper();
+            form.put("cl_address", helper.getAddress());
+            form.put("cl_location", helper.getName());
+            double latitude = helper.getLatitude();
+            double longitude = helper.getLongitude();
+//            String distance = BaiduMapUtil.getInstence().getDistance(companyX, companyY, latitude, longitude);
+            form.put("cl_distance", 90);
+        } catch (NullPointerException e) {
 
+        } catch (SQLException e) {
+
+        }
+        String formStore = StringUtils.mapToJson(form);
+        param.put("caller", "CardLog");
+        param.put("formStore", formStore);
+        String url = CommonUtil.getSharedPreferences(ct, "erp_baseurl") + "mobile/saveCardLog.action";
+        param.put("emcode", CommonUtil.getSharedPreferences(ct, "erp_username"));
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(ct, url, param, handler, headers, 0x11, null, null, "get");
+    }
 
+    private Handler handler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case 0x11:
+                    Toast.makeText(MyApplication.getInstance(), R.string.auto_signin, Toast.LENGTH_SHORT).show();
+                    break;
+                default:
+                    break;
+            }
+        }
+    };
 }

+ 3 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/NotificationManage.java

@@ -42,4 +42,7 @@ public class NotificationManage {
     public void sendNotification(Context context, Class<? extends Activity> clazz) {
         sendNotification(context, R.drawable.uuu, "提醒", "提醒", clazz);
     }
+    public void sendNotification(Context context,String action, Class<? extends Activity> clazz) {
+        sendNotification(context, R.drawable.uuu, "提醒", action, clazz);
+    }
 }

+ 126 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/MacAndIDUtil.java

@@ -0,0 +1,126 @@
+package com.xzjmyk.pm.activity.util;
+
+import android.content.Context;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.util.Log;
+
+import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+
+import java.io.FileInputStream;
+
+/**
+ * Created by pengminggong on 2016/10/31.
+ */
+
+public class MacAndIDUtil {
+
+    public String getMac(Context ct) {
+        String mac = null;
+        String macOld = CommonUtil.getSharedPreferences(ct, "macaddress");
+        if (StringUtils.isEmpty(macOld)) {
+            mac = getLocalMacAddress();
+            if (StringUtils.isEmpty(mac))
+                mac = getMacFromWifiInfo(ct);
+            boolean isOk = legitimateMac(mac);//判断mac地址是否合法
+            if (isOk) {
+                Log.i("gongpengming", "合法的");
+                CommonUtil.setSharedPreferences(ct, "macaddress", mac);
+            } else {
+                Log.i("gongpengming", "不合法的");
+            }
+        } else {
+            mac = macOld;
+        }
+
+        return mac;
+    }
+
+
+    private boolean legitimateMac(String mac) {
+        return !mac.contains("00:00:00");
+    }
+
+    /*通过wifiInfo获取ip*/
+    private String getIpFromWifiInfo(Context ct) {
+        WifiInfo info = getWifiInfo(ct);
+        if (null != info)
+            return int2ip(info.getIpAddress());
+        else
+            return null;
+    }
+
+    /*通过wifiInfo获取mac*/
+    private String getMacFromWifiInfo(Context ct) {
+        //在wifi未开启状态下,仍然可以获取MAC地址,但是IP地址必须在已连接状态下否则为0
+        WifiInfo info = getWifiInfo(ct);
+        if (null != info) {
+            return info.getMacAddress();
+        } else
+            return null;
+    }
+
+    /*获取wifiInfo*/
+    private WifiInfo getWifiInfo(Context ct) {
+        WifiManager wifiMgr = (WifiManager) ct.getSystemService(Context.WIFI_SERVICE);
+        if (wifiMgr == null) {
+            return null;
+        }
+        return wifiMgr.getConnectionInfo();
+    }
+
+    /*将地址整形转化为字符串*/
+    public static String int2ip(long ipInt) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(ipInt & 0xFF).append(".");
+        sb.append((ipInt >> 8) & 0xFF).append(".");
+        sb.append((ipInt >> 16) & 0xFF).append(".");
+        sb.append((ipInt >> 24) & 0xFF);
+        return sb.toString();
+    }
+
+    //获取
+    private String getLocalMacAddress() {
+        String mac = null;
+        try {
+            String path = "sys/class/net/eth0/address";
+            FileInputStream fis_name = new FileInputStream(path);
+            byte[] buffer_name = new byte[8192];
+            int byteCount_name = fis_name.read(buffer_name);
+            if (byteCount_name > 0) {
+                mac = new String(buffer_name, 0, byteCount_name, "utf-8");
+            }
+
+
+            if (mac == null) {
+                fis_name.close();
+                return "";
+            }
+            fis_name.close();
+        } catch (Exception io) {
+            String path = "sys/class/net/wlan0/address";
+            FileInputStream fis_name;
+            try {
+                fis_name = new FileInputStream(path);
+                byte[] buffer_name = new byte[8192];
+                int byteCount_name = fis_name.read(buffer_name);
+                if (byteCount_name > 0) {
+                    mac = new String(buffer_name, 0, byteCount_name, "utf-8");
+                }
+                fis_name.close();
+            } catch (Exception e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
+        if (mac == null) {
+            return "";
+        } else {
+            return mac.trim();
+        }
+
+    }
+
+
+}

+ 0 - 1
WeiChat/src/main/res/layout/activity_oa__alarma.xml

@@ -10,7 +10,6 @@
         android:layout_width="match_parent"
         android:layout_height="@dimen/item_height"
         android:layout_margin="2dp"
-        android:visibility="gone"
         android:background="@drawable/oa_signin_tv_bg"
         android:padding="8dp">
 

+ 12 - 0
WeiChat/src/main/res/values/gpm_values.xml

@@ -2,6 +2,18 @@
 <resources>
     <!--String-->
     <string name="delete_item">确定要删除吗</string>
+    <string name="signin_ok">签到成功</string>
+    <string name="signin_error">签到失败</string>
+    <string name="not_signin_agin">请不要频繁打卡</string>
+    <string name="other_phone_error">请在常用手机签到!若手机更换请先填写手机变更单再来签到</string>
+    <string name="not_addr_message">您当前账号没有设置打卡地址信息,请联系管理员</string>
+    <string name="too_long">您当前位置距离考勤地点太远,请移往目标或重新定位</string>
+    <string name="not_today">当前所在日期无法签到</string>
+    <string name="not_workdata">系统尚未找到您的班次,请联系管理员设置班次</string>
+    <string name="mac_changing">正在变更常用设备中,请勿打卡</string>
+    <string name="mac_other">该设备已被他人绑定</string>
+    <string name="show_frist_mac">本次打卡会将本机设为常用签到手机,是否继续签到?</string>
+    <string name="auto_signin">以为您自动打卡成功</string>
     <string name="agare"><u>重新定位</u></string>
     <string name="click_finds"><u>点击查看</u></string>
     <!--end String-->