Browse Source

外勤签到错误修改

Bitlikr 9 years ago
parent
commit
bd2bfdc4e3
19 changed files with 377 additions and 137 deletions
  1. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/BdLocationHelper.java
  2. 0 9
      WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/OutSigninBean.java
  3. 2 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/AddMeetingActivity.java
  4. 7 6
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MissionPlanActivity.java
  5. 7 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OutSigninOKActivity.java
  6. 5 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/SelectAimsActivity.java
  7. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/SelectAimsAdapter.java
  8. 1 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/db/DBOpenHelper.java
  9. 2 5
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/SigninFragment.java
  10. 12 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/Constants.java
  11. 0 60
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/FormatUtil.java
  12. 198 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/SigninUtil.java
  13. 23 27
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/AlarmManage.java
  14. 1 6
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/AlarmReceiver.java
  15. 49 12
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/AlarmService.java
  16. 51 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/IAlarmManage.java
  17. 9 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/TimeUtils.java
  18. 7 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/view/crouton/Crouton.java
  19. 1 2
      WeiChat/src/main/res/layout/fragment_me.xml

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/BdLocationHelper.java

@@ -143,7 +143,7 @@ public class BdLocationHelper {
             if (listener != null) {
                 listener.result(true);
             }
-            reckonAlarm();
+//            reckonAlarm();
         }
     };
 

+ 0 - 9
WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/OutSigninBean.java

@@ -13,15 +13,6 @@ public class OutSigninBean {
     private String mo_remark;
     private int mo_attachid;
     private String mo_company;
-    private String mp_recordercode;
-
-    public String getMp_recordercode() {
-        return mp_recordercode;
-    }
-
-    public void setMp_recordercode(String mp_recordercode) {
-        this.mp_recordercode = mp_recordercode;
-    }
 
     public int getMo_id() {
         return mo_id;

+ 2 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/AddMeetingActivity.java

@@ -359,6 +359,7 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
 
 
     private void getIdByNet() {
+        time=System.currentTimeMillis();
         String url = CommonUtil.getSharedPreferences(ct, "erp_baseurl") + "common/getId.action";
         final Map<String, Object> param = new HashMap<>();
         param.put("seq", "Meetingroomapply_SEQ");
@@ -447,7 +448,7 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
         params.put("formStore", formStore);
         LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
         headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
-        com.xzjmyk.pm.activity.ui.erp.util.ViewUtil.httpSendRequest(ct, url, params, handler, headers, 0x15, null, null, "post");
+        ViewUtil.httpSendRequest(ct, url, params, handler, headers, 0x15, null, null, "post");
     }
 
     private String mr_code;

+ 7 - 6
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MissionPlanActivity.java

@@ -252,11 +252,11 @@ public class MissionPlanActivity extends BaseActivity implements View.OnClickLis
         /***formStore***/
         formStore.put("Md_id",  "");//请求的id MOBILE_OUTPLAN_SEQ
         formStore.put("Md_company", entity.getCompanyName());//拜访公司
-        formStore.put("Mo_address", entity.getCompanyAddr());//拜访地址
-        formStore.put("Mo_visitcount", entity.getVisitcount());//拜访次数
-        formStore.put("Mo_visittime", entity.getReckonTime());//预计时间
-        formStore.put("mo_longitude", entity.getLatLng().longitude);//经度
-        formStore.put("mo_latitude", entity.getLatLng().latitude);//纬度
+        formStore.put("Md_address", entity.getCompanyAddr());//拜访地址
+        formStore.put("Md_visitcount", entity.getVisitcount());//拜访次数
+        formStore.put("Md_visittime", entity.getReckonTime());//预计时间
+        formStore.put("Md_longitude", entity.getLatLng().longitude);//经度
+        formStore.put("Md_latitude", entity.getLatLng().latitude);//纬度
         param.put("formStore", StringUtils.mapToJson(formStore));
         LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
         headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(this, "sessionId"));
@@ -281,7 +281,8 @@ public class MissionPlanActivity extends BaseActivity implements View.OnClickLis
         formStore.put("mp_code", code);//请求的id MOBILE_OUTPLAN_SEQ
         formStore.put("mp_visittime", entity.getReckonTime());
         formStore.put("mp_recorder", name);//用户名
-        formStore.put("mo_address", MyApplication.getInstance().getBdLocationHelper().getAddress());//当前地址
+        formStore.put("mp_recordercode", CommonUtil.getSharedPreferences(ct, "erp_username"));//编号
+        formStore.put("Md_address", MyApplication.getInstance().getBdLocationHelper().getAddress());//当前地址
         /***params***/
         params.put("mpd_detno", position + 1);
         params.put("mpd_id", "");

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

@@ -137,6 +137,7 @@ public class OutSigninOKActivity extends BaseActivity {
         baseUrl = CommonUtil.getSharedPreferences(ct, "erp_baseurl");
         com_tv.setText(com);
         task.execute();
+        time_tv.setText(TimeUtils.f_long_2_str(System.currentTimeMillis()));
         addr_tv.setText(addr);
         image_tag.setOnClickListener(new View.OnClickListener() {
             @Override
@@ -216,6 +217,7 @@ public class OutSigninOKActivity extends BaseActivity {
         });
 
     }
+
     private void closePopupWindow() {
         if (mPopupWindow != null) {
             mPopupWindow.dismiss();
@@ -223,6 +225,7 @@ public class OutSigninOKActivity extends BaseActivity {
             DisplayUtil.backgroundAlpha(this, 1f);
         }
     }
+
     private int getID(String chche) {
         if (StringUtils.isEmpty(chche)) return 0;
         Pattern p = Pattern.compile("(\\d+)");
@@ -318,7 +321,7 @@ public class OutSigninOKActivity extends BaseActivity {
                 }
             }
         }*/
-        else if (requestCode == REQUEST_CODE_PICK_PHOTO){
+        else if (requestCode == REQUEST_CODE_PICK_PHOTO) {
             if (resultCode == Activity.RESULT_OK) {
                 if (data != null && data.getData() != null) {
 //                    path = mNewPhotoUri.getPath();
@@ -353,6 +356,7 @@ public class OutSigninOKActivity extends BaseActivity {
 
 
     private final int whatSignin = 0x12;
+    private boolean isSigninOK = false;
     private Handler handler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
@@ -363,13 +367,14 @@ public class OutSigninOKActivity extends BaseActivity {
                     isSubmit = false;
                     JSONObject json = JSON.parseObject(message);
                     if (json.containsKey("success") && json.getBoolean("success")) {
+                        isSigninOK = true;
                         doNextNet();
                     } else {
                         ToastUtil.showToast(ct, "签到失败");
                     }
                     break;
                 case 0x13:
-                    if (JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
+                    if (isSigninOK || JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
                         ToastUtil.showToast(ct, "签到成功");
                         Intent intent = new Intent();
                         intent.putExtra("result", true);
@@ -531,7 +536,6 @@ public class OutSigninOKActivity extends BaseActivity {
         if (com.xzjmyk.pm.activity.util.StringUtils.isEmpty(name))
             name = MyApplication.getInstance().mLoginUser.getNickName();
         bean.setMo_man(name);
-        bean.setMp_recordercode(emconde);
         bean.setMo_remark(text_edit.getText().toString());
         bean.setMo_attachid(id);
         bean.setMo_company(com_tv.getText().toString().trim());

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

@@ -100,8 +100,12 @@ public class SelectAimsActivity extends BaseActivity {
         search_edit.addTextChangedListener(new EditChangeListener() {
             @Override
             public void afterTextChanged(Editable editable) {
-                if (ListUtils.isEmpty(entities)) return;
                 String str = editable.toString();
+                if (ListUtils.isEmpty(entities)) {
+                    adapter.setEntities(str);
+                    adapter.notifyDataSetChanged();
+                    return;
+                }
                 List<MissionLocationEntity> chche = new ArrayList<>();
                 for (MissionLocationEntity e : entities) {
                     if (e == null) continue;

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/SelectAimsAdapter.java

@@ -81,7 +81,7 @@ public class SelectAimsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
             String text = "将 " + company + " 加入常用地址";
             int start = text.indexOf(company.charAt(0));
             SpannableStringBuilder style = new SpannableStringBuilder(text);
-            style.setSpan(new BackgroundColorSpan(Color.RED), start, company.length() + start, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+            style.setSpan(new BackgroundColorSpan(Color.RED), start, company.length() + start, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
             viewHolder.add_tv.setText(style);
             viewHolder.add_rl.setOnClickListener(new View.OnClickListener() {
                 @Override

+ 1 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/db/DBOpenHelper.java

@@ -37,6 +37,7 @@ public class DBOpenHelper extends SQLiteOpenHelper {
         db.execSQL(Constants.SUB_MESSAGE);//
         db.execSQL(Constants.TABLE_ALL_SUBSCRIPTION);//未订阅列表
         db.execSQL(Constants.TABLE_MY_SUBSCRIPTION);//已订阅列表
+        db.execSQL(Constants.TABLE_MISSION);//外勤计划
     }
 
     @Override

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

@@ -606,10 +606,7 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
         return TimeUtils.long2str(minTime, "HH:mm");
     }
 
-    //获取打卡时间列表去除年月日和秒
-    private String clearDay(String time) {
-        return TimeUtils.long2str(TimeUtils.f_str_2_long(time), "HH:mm");
-    }
+
 
 
     //处理数据,用户无排班时候,获取默认排版
@@ -695,7 +692,7 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
         }
         String[] logTime = new String[array.size()];
         for (int i = 0; i < array.size(); i++) {//获取打卡记录中的打卡时间
-            logTime[i] = clearDay(array.getJSONObject(i).containsKey("cl_time") ? (array.getJSONObject(i).getString("cl_time") == null ? " " : array.getJSONObject(i).getString("cl_time")) : " ");
+            logTime[i] = TimeUtils.clearDay(array.getJSONObject(i).containsKey("cl_time") ? (array.getJSONObject(i).getString("cl_time") == null ? " " : array.getJSONObject(i).getString("cl_time")) : " ");
         }
         Arrays.sort(logTime);//排序时间数组
         SigninBean b = null;

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

@@ -131,6 +131,18 @@ public class Constants {
             + ")";
 
 
+    //外勤计划表
+    public static final String TABLE_MISSION = "CREATE TABLE mission "
+            + "company varchar(50),"//公司
+            + "companyAddr varchar(50),"//公司名称
+            + "distance Float,"//距离
+            + "latitude Float,"//纬度
+            + "longitude Float,"//经度
+            + "visittime varchar(50),"//预计到达时间 yyyy-MM-dd HH:mm:ss
+            + "realvisitTime varchar(50),"//实际到达时间yyyy-MM-dd HH:mm:ss
+            + "realLeaveTime varchar(50)"//实际离开时间yyyy-MM-dd HH:mm:ss
+            + ")";
+
     /**
      * 检测网络是否可用
      *

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

@@ -1,60 +0,0 @@
-package com.xzjmyk.pm.activity.ui.erp.util;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-
-import com.xzjmyk.pm.activity.MyApplication;
-import com.xzjmyk.pm.activity.util.TimeUtils;
-
-/**
- * Created by gongp on 2016/8/16.
- */
-public class FormatUtil {
-    private static FormatUtil insance;
-
-    private FormatUtil() {
-    }
-
-    public static FormatUtil getInsance() {
-        if (insance == null)
-            synchronized (FormatUtil.class) {
-                insance = new FormatUtil();
-            }
-        return insance;
-    }
-
-    //从yyyy-mm-dd hh:dd:ss 转为  hh:dd:ss
-    public String clearDay(String date) {
-        return TimeUtils.long2str(TimeUtils.f_str_2_long(date), "HH:mm");
-    }
-
-    //比较两个差
-    public long reckonByhm(String d1, String d2) {
-        String t1 = TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + d1 + ":" + "00";
-        String t2 = TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + d2 + ":" + "00";
-        return TimeUtils.f_str_2_long(t1) - TimeUtils.f_str_2_long(t2);
-    }
-
-    //比较两个时间相差的毫秒数
-//    public long reckonHHMM(String d1, String d2) {
-//        String t1 = TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + d1 + ":" + "00";
-//        return TimeUtils.f_str_2_long(d2) - TimeUtils.f_str_2_long(t1);
-//    }
-
-    //提醒相关
-    //获取下一次提醒时间
-    private String name = "alar";
-
-
-    private long getNextAlar() {
-        SharedPreferences preferences = MyApplication.getInstance().getSharedPreferences(name, Context.MODE_PRIVATE);
-        return preferences.getLong("next", 0);
-    }
-
-    //设置下一次提醒时间
-    private void setNextAlar() {
-        SharedPreferences preferences = MyApplication.getInstance().getSharedPreferences(name, Context.MODE_PRIVATE);
-        long time = 0;
-        preferences.edit().putLong("next", time);
-    }
-}

+ 198 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/SigninUtil.java

@@ -1,14 +1,211 @@
 package com.xzjmyk.pm.activity.ui.erp.util;
 
+import android.content.Context;
+import android.database.SQLException;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.xzjmyk.pm.activity.AppConfig;
+import com.xzjmyk.pm.activity.BdLocationHelper;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.bean.oa.SigninBean;
+import com.xzjmyk.pm.activity.db.dao.SigninDao;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.SigninActivity;
+import com.xzjmyk.pm.activity.ui.erp.util.alarm.NotificationManage;
+import com.xzjmyk.pm.activity.util.BaiduMapUtil;
+import com.xzjmyk.pm.activity.util.TimeUtils;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.alibaba.fastjson.JSON.parseObject;
+import static com.xzjmyk.pm.activity.ui.erp.util.CommonUtil.getSharedPreferences;
+
 /**
+ * 签到工具类
+ * 自动外勤和自动签到
+ * 0x11:自动打卡
+ * 0x12:打卡列表
  * Created by Bitliker on 2016/11/25.
  */
-
 public class SigninUtil {
 
+    private NotificationManage notificationManage;
+    private Context ct;
+    private String baseUrl;
+
+    public SigninUtil() {
+        notificationManage = new NotificationManage();
+        ct = MyApplication.getInstance();
+        baseUrl = CommonUtil.getSharedPreferences(ct, "erp_baseurl");
+    }
+
+    private Handler handler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            String message = msg.getData().getString("result");
+            JsonValidator validator = new JsonValidator();
+            boolean isJSON = validator.validate(message);
+            switch (msg.what) {
+                case 0x11://打卡
+                    loadLog();
+                    break;
+                case 0x12://获取打卡列表
+                    if (isJSON && parseObject(message).containsKey("listdata")) {
+                        try {
+                            saveSignin2DB(parseObject(message).getJSONArray("listdata"));
+                        } catch (Exception e) {
+                            if (AppConfig.DEBUG && e != null)
+                                Log.i("gongpengming", "Exception=" + e.getMessage());
+                        }
+                    }
+                    break;
+                case 0x13:
+                    break;
+                case 0x14:
+                    break;
+                case Constants.APP_SOCKETIMEOUTEXCEPTION://请求超时
+                    break;
+            }
+        }
+    };
+
 
     //1.外勤签到
     public void missionSignin() {
 
     }
+
+
+
+    //2.内勤签到
+    public void autoSignin( ) {
+        //获取id
+        CodeUtil.getInstance().getCode(MyApplication.getInstance(), "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", getSharedPreferences(ct, "erp_username"));
+        String emname = getSharedPreferences(ct, "erp_emname");
+        if (StringUtils.isEmpty(emname)) {
+            emname = MyApplication.getInstance().mLoginUser.getNickName().trim();
+        }
+        form.put("cl_emname", emname);
+        boolean isp = isPlay(ct, form);
+        if (!isp) return;//不符合打卡
+        String formStore = StringUtils.mapToJson(form);
+        param.put("caller", "CardLog");
+        param.put("formStore", formStore);
+        param.put("emcode", getSharedPreferences(ct, "erp_username"));
+        net(ct, "mobile/saveCardLog.action", param, 0x11);
+    }
+
+    /*判断是否符合打卡*/
+    private boolean isPlay(Context ct, Map<String, Object> form) {
+        try {
+            //判断是否符合打卡
+            BdLocationHelper helper = MyApplication.getInstance().getBdLocationHelper();
+            form.put("cl_address", helper.getAddress());
+            form.put("cl_location", helper.getName());
+            int comDistance = CommonUtil.getSharedPreferencesInt(ct, "distance", 0);
+            String distance = BaiduMapUtil.getInstence().getDistance();
+            if (comDistance < Float.valueOf(distance)) {//规定地址<实际地址  不符合
+                notificationManage.sendNotification(ct, "当前位置距离考勤地点太远,打卡失败", SigninActivity.class);
+                return false;
+            } else {
+                form.put("cl_distance", distance);
+                return true;
+            }
+        } catch (NullPointerException e) {
+            return false;
+        } catch (SQLException e) {
+            return false;
+        }
+    }
+
+    //获取打卡记录
+    private void loadLog() {
+        String date = TimeUtils.s_long_2_str(System.currentTimeMillis());
+        //获取网络数据
+        Map<String, Object> param = new HashMap<>();
+        String code = getSharedPreferences(MyApplication.getInstance(), "erp_username");
+        param.put("currentMaster", getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        param.put("page", 1);
+        param.put("pageSize", 1);
+        param.put("condition", "cl_emcode='" + code + "' and to_char(cl_time,'yyyy-MM-dd')='" + date + "'");
+        param.put("caller", "CardLog");
+        param.put("emcode", code);
+        param.put("master", getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        net(ct, "mobile/oa/workdata.action", param, 0x12);
+    }
+
+    //保存到数据库
+    private void saveSignin2DB(JSONArray array) throws Exception {
+        //取最后一个
+        JSONObject object = array.getJSONObject(array.size() - 1);
+        String time = object.getString("cl_time");//获取最后一次打卡信息,班次打卡信息
+        time = TimeUtils.clearDay(time);//获取到的
+        if (StringUtils.isEmpty(time)) return;
+        SigninDao dao = new SigninDao(MyApplication.getInstance());
+        List<SigninBean> list = dao.queryByEmcode();
+        if (ListUtils.isEmpty(list)) return;//TODO数据库中获取的班次表为null
+        for (SigninBean e : list) {
+            //判断在那个班次
+            //1.班次没有上班和下班打卡范围
+            if (StringUtils.isEmpty(e.getStartTime()) || StringUtils.isEmpty(e.getEndTime()) ||
+                    StringUtils.isEmpty(e.getWorkTime()) || StringUtils.isEmpty(e.getOffTime()))
+                continue;
+            //2.该打卡时间在上班之前或下班之后
+            if (time.compareTo(e.getStartTime()) < 0 || time.compareTo(e.getEndTime()) > 0)
+                continue;
+            //符合该班次打卡时间
+            //上班打过卡
+            if (time.compareTo(e.getWorkTime()) < 0) {
+                //TODO 符合上班打卡
+                e.setWorkSignin(time);
+            }
+            if (time.compareTo(e.getOffTime()) > 0) {
+                //TODO 符合下班打卡
+                e.setOffSignin(time);
+            }
+            boolean saveOk = dao.updateByBrean(e);
+            if (saveOk) {
+                getManage().sendNotification(MyApplication.getInstance(), R.string.auto_signin, SigninActivity.class);
+                break;
+            }
+        }
+
+    }
+
+    private void net(Context ct, String action, Map<String, Object> param, int what) {
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + getSharedPreferences(ct, "sessionId"));
+        if (StringUtils.isEmpty(baseUrl)) {
+            baseUrl = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_baseurl");
+        }
+        String url = baseUrl + action;
+        com.xzjmyk.pm.activity.ui.erp.net.ViewUtil.httpSendRequest(MyApplication.getInstance(), url, param, handler, headers, what, null, null, "post");
+    }
+    private NotificationManage getManage() {
+        if (notificationManage == null)
+            notificationManage = new NotificationManage();
+        return notificationManage;
+    }
 }

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

@@ -70,7 +70,7 @@ public class AlarmManage extends IAlarmManage {
     }
 
     //设置提醒
-    public void reckonNextAlarm() {
+    public int reckonNextAlarm() {
         //1.判断是否离开办公地点
 //        if (isOutoffWork()) {//离开办公地点
 //            getManage().sendNotification(MyApplication.getInstance(), R.string.outoff_work, SigninActivity.class);
@@ -78,47 +78,52 @@ public class AlarmManage extends IAlarmManage {
 //        }
         boolean isAlarm = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), "ALARMA_CLICK", false);//是否自动打卡
         boolean isAuto = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), "AUTO_SIGNIN", false);//是否提醒
-        if (!isAlarm && !isAuto) return;
+        if (!isAlarm && !isAuto) return -1;
         long time = 0;
         bean = getNextBean();
-        if (bean == null) return;
+        if (bean == null) return -1;
         if (isAuto) {
             time = getNextWorkAuto(bean);//获取下一次自动上班打卡
-            Log.i("MYTODO", "时间为=" + TimeUtils.f_long_2_str(time));
-            Log.i("MYTODO", "________________________________");
+            Log.i("gongpengming", "获取下一次自动上班打卡时间为=" + TimeUtils.f_long_2_str(time));
             if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
-                doAutoSignin(true);
-                return;
+                //TODO 符合自动上班打卡
+//                SigninUtil util = new SigninUtil();
+//                util.autoSignin();
+//                doAutoSignin(true);
+                return 1;
             }
             time = getNextOffAuto(bean);//获取下一次自动上班打卡
-            Log.i("MYTODO", "时间为=" + TimeUtils.f_long_2_str(time));
-            Log.i("MYTODO", "________________________________");
+            Log.i("gongpengming", "获取下一次自动上班打卡=" + TimeUtils.f_long_2_str(time));
             if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
-                doAutoSignin(false);
-                return;
+                //TODO 符合自动下班打卡
+//                SigninUtil util = new SigninUtil();
+//                util.autoSignin();
+//                doAutoSignin(false);
+                return 1;
             }
         }
         if (isAlarm) {
             SigninDao dao = new SigninDao(MyApplication.getInstance());
             time = getNextWorkAlarm(bean);//获取上班提醒时间
-            Log.i("MYTODO", "时间为=" + TimeUtils.f_long_2_str(time));
-            Log.i("MYTODO", "________________________________");
+            Log.i("gongpengming", "获取上班提醒时间=" + TimeUtils.f_long_2_str(time));
             if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
+                //TODO 符合上班提醒
                 getManage().sendNotification(MyApplication.getInstance(), "请按时上班打卡", SigninActivity.class);
                 bean.setWorkAlarm(bean.getWorkAlarm() + 1);
                 dao.updateByBrean(bean);
-                return;
+                return 2;
             }
             time = getNextOffAlarm(bean);//获取下班提醒时间
-            Log.i("MYTODO", "时间为=" + TimeUtils.f_long_2_str(time));
-            Log.i("MYTODO", "________________________________");
+            Log.i("gongpengming", "获取下班提醒时间=" + TimeUtils.f_long_2_str(time));
             if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
+                //TODO 符合下班提醒
                 getManage().sendNotification(MyApplication.getInstance(), "请按时下班打卡", SigninActivity.class);
                 bean.setOffAlarm(bean.getOffAlarm() + 1);
                 dao.updateByBrean(bean);
-                return;
+                return 3;
             }
         }
+        return -1;
     }
 
     private void doAutoSignin(boolean isWork) {
@@ -216,7 +221,7 @@ public class AlarmManage extends IAlarmManage {
         //取最后一个
         JSONObject object = array.getJSONObject(array.size() - 1);
         String time = object.getString("cl_time");//获取最后一次打卡信息,班次打卡信息
-        time = clearDay(time);//获取到的
+        time = TimeUtils.clearDay(time);//获取到的
         if (StringUtils.isEmpty(time)) return;
         SigninDao dao = new SigninDao(MyApplication.getInstance());
         if (bean != null) {
@@ -247,13 +252,4 @@ public class AlarmManage extends IAlarmManage {
 
     }
 
-    //获取打卡时间列表去除年月日和秒
-    private String clearDay(String time) {
-        if (StringUtils.isEmpty(time)) return null;
-        try {
-            return TimeUtils.long2str(TimeUtils.f_str_2_long(time), "HH:mm");
-        } catch (Exception e) {
-            return null;
-        }
-    }
 }

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

@@ -232,7 +232,7 @@ public class AlarmReceiver extends BroadcastReceiver {
         JSONObject object = array.getJSONObject(array.size() - 1);
         String time = object.getString("cl_time");//获取最后一次打卡信息,班次打卡信息
         if (!StringUtils.isEmpty(time)) {
-            time = clearDay(time);//获取的打卡列表
+            time = TimeUtils.clearDay(time);//获取的打卡列表
             for (SigninBean e : beans) {
                 if (!StringUtils.isEmpty(e.getStartTime()) && !StringUtils.isEmpty(e.getEndTime()) && e.getStartTime().compareTo(time) < 0 && e.getEndTime().compareTo(time) > 0) {
                     //在该班次内
@@ -267,10 +267,5 @@ public class AlarmReceiver extends BroadcastReceiver {
         notificationManage.sendNotification(MyApplication.getInstance(), "系统已为你自动打卡成功", SigninActivity.class);
     }
 
-    //获取打卡时间列表去除年月日和秒
-    private String clearDay(String time) {
-        return TimeUtils.long2str(TimeUtils.f_str_2_long(time), "HH:mm");
-    }
-
 
 }

+ 49 - 12
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/AlarmService.java

@@ -11,9 +11,11 @@ import android.util.Log;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.xzjmyk.pm.activity.MyApplication;
+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.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.JsonValidator;
+import com.xzjmyk.pm.activity.ui.erp.util.SigninUtil;
 
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -24,6 +26,8 @@ public class AlarmService extends Service {
     public static long intervalTime = 60000;//轮询时间间隔
     public static int aralmType = 1;//提醒类型   1.内勤  2.外勤
     private AlarmTask alarmTask;
+    private IAlarmManage iManage;
+    private NotificationManage manage;
 
     private Handler handler = new Handler() {
         @Override
@@ -47,7 +51,6 @@ public class AlarmService extends Service {
             }
         }
     };
-    private AlarmManage manage;
 
     @Override
     public IBinder onBind(Intent intent) {
@@ -57,7 +60,8 @@ public class AlarmService extends Service {
 
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {//每次启动服务
-        if (manage == null) manage = new AlarmManage();
+        if (iManage == null) iManage = new IAlarmManage();
+        if (manage == null) manage = new NotificationManage();
         if (alarmTask == null) {
             alarmTask = new AlarmTask();
             alarmTask.execute();
@@ -90,13 +94,15 @@ public class AlarmService extends Service {
     }
 
 
-    private class AlarmTask extends AsyncTask<String, String, String> {
+    private class AlarmTask extends AsyncTask<String, Integer, String> {
         @Override
         protected String doInBackground(String... strings) {
             try {
                 while (true) {
                     Log.i("gongpengming", "AppConfig.INTERVAL_TIME=" + intervalTime);
-                    reckonAlarm();
+                    int i = reckonAlarm();
+                    if (i != -1)
+                        publishProgress(i);
                     Thread.sleep(intervalTime);
                 }
             } catch (InterruptedException e) {
@@ -104,20 +110,45 @@ public class AlarmService extends Service {
             }
             return null;
         }
+
+        @Override
+        protected void onProgressUpdate(Integer... values) {
+            super.onProgressUpdate(values);
+            if (values != null && values.length > 0) {
+                SigninUtil util = null;
+                switch (values[0]) {
+                    case 1://自动打卡
+                        util = new SigninUtil();
+                        util.autoSignin();
+                        break;
+                    case 2://上班提醒
+                        getManage().sendNotification(MyApplication.getInstance(), "上班时间快到了,请及时打卡", SigninActivity.class);
+                        break;
+                    case 3://下班提醒
+                        getManage().sendNotification(MyApplication.getInstance(), "下班时间已到了,请及时打卡", SigninActivity.class);
+                        break;
+                    case 4://自动外勤
+                        break;
+                    default:
+                        break;
+                }
+            }
+        }
     }
 
-    private void reckonAlarm() {
-        if (manage == null) manage = new AlarmManage();
+    // 1.自动打卡  2.提醒上班   3.提醒下班  4.自动外勤
+    private int reckonAlarm() {
+        if (iManage == null) iManage = new IAlarmManage();
         switch (aralmType) {
             case 1:
-                if (manage == null)
-                    manage = new AlarmManage();
-                manage.reckonNextAlarm();
-                break;
+                if (iManage == null)
+                    iManage = new IAlarmManage();
+                return iManage.reckonNextAlarm();
             case 2:
                 //TODO 外勤签到
-
-                break;
+                return 4;
+            default:
+                return -1;
         }
     }
 
@@ -129,4 +160,10 @@ public class AlarmService extends Service {
         headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(this, "sessionId"));
         ViewUtil.httpSendRequest(MyApplication.getInstance(), url, param, handler, headers, 0x11, null, null, "post");
     }
+
+    private NotificationManage getManage() {
+        if (manage == null)
+            manage = new NotificationManage();
+        return manage;
+    }
 }

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

@@ -19,6 +19,57 @@ import java.util.List;
  * Created by Bitliker on 2016/11/18.
  */
 public class IAlarmManage {
+
+
+    public int reckonNextAlarm() {
+        //1.判断是否离开办公地点
+//        if (isOutoffWork()) {//离开办公地点
+//            getManage().sendNotification(MyApplication.getInstance(), R.string.outoff_work, SigninActivity.class);
+//            return;
+//        }
+        boolean isAlarm = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), "ALARMA_CLICK", false);//是否自动打卡
+        boolean isAuto = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), "AUTO_SIGNIN", false);//是否提醒
+        if (!isAlarm && !isAuto) return -1;
+        long time = 0;
+        SigninBean bean = getNextBean();
+        if (bean == null) return -1;
+        if (isAuto) {
+            time = getNextWorkAuto(bean);//获取下一次自动上班打卡
+            Log.i("gongpengming", "获取下一次自动上班打卡时间为=" + TimeUtils.f_long_2_str(time));
+            if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
+                //TODO 符合自动上班打卡
+                return 1;
+            }
+            time = getNextOffAuto(bean);//获取下一次自动上班打卡
+            Log.i("gongpengming", "获取下一次自动上班打卡=" + TimeUtils.f_long_2_str(time));
+            if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
+                //TODO 符合自动下班打卡
+                return 1;
+            }
+        }
+        if (isAlarm) {
+            SigninDao dao = new SigninDao(MyApplication.getInstance());
+            time = getNextWorkAlarm(bean);//获取上班提醒时间
+            Log.i("gongpengming", "获取上班提醒时间=" + TimeUtils.f_long_2_str(time));
+            if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
+                //TODO 符合上班提醒
+                bean.setWorkAlarm(bean.getWorkAlarm() + 1);
+                dao.updateByBrean(bean);
+                return 2;
+            }
+            time = getNextOffAlarm(bean);//获取下班提醒时间
+            Log.i("gongpengming", "获取下班提醒时间=" + TimeUtils.f_long_2_str(time));
+            if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
+                //TODO 符合下班提醒
+                bean.setOffAlarm(bean.getOffAlarm() + 1);
+                dao.updateByBrean(bean);
+                return 3;
+            }
+        }
+        return -1;
+    }
+
+
     //暴露接口
     //1.获取下一个上班提醒时间戳
     protected long getNextWorkAlarm() {

+ 9 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/TimeUtils.java

@@ -444,6 +444,15 @@ public class TimeUtils {
         return 0;
     }
 
+    //获取打卡时间列表去除年月日和秒  返回 HH:mm
+    public static String clearDay(String time) {
+        if ( StringUtils.isEmpty(time)) return "00:00";
+        try {
+            return TimeUtils.long2str(TimeUtils.f_str_2_long(time), "HH:mm");
+        } catch (Exception e) {
+            return "00:00";
+        }
+    }
     public static int yMdHm_getMonth(String dateString) {
         try {
             Date d = sk_format_1.parse(dateString);

+ 7 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/crouton/Crouton.java

@@ -181,12 +181,17 @@ public final class Crouton {
     public static void makeText(Context ct, int id) {
         makeText((Activity) ct, id, ct.getResources().getColor(R.color.light_green), 1000).show();
     }
-    public static void makeText(Context ct, int id,int time) {
+
+    public static void makeText(Context ct, int id, int time) {
         makeText((Activity) ct, id, ct.getResources().getColor(R.color.light_green), time).show();
     }
 
     public static void makeText(Context ct, String message) {
-        makeText((Activity) ct, message, ct.getResources().getColor(R.color.light_green), 1000).show();
+        try {
+            makeText((Activity) ct, message, ct.getResources().getColor(R.color.light_green), 1000).show();
+        } catch (Exception e) {
+
+        }
     }
 
     public static void makeText(Context ct, String message, int time) {

+ 1 - 2
WeiChat/src/main/res/layout/fragment_me.xml

@@ -493,8 +493,7 @@
             android:id="@+id/test_rl"
             style="@style/IMTbleLine_UP_Me"
             android:layout_marginTop="7dp"
-            android:background="@drawable/selector_me_menu_item_bg"
-            android:visibility="gone">
+            android:background="@drawable/selector_me_menu_item_bg">
 
             <TextView
                 android:layout_width="wrap_content"