FANGLH 8 лет назад
Родитель
Сommit
fb17adae9e
29 измененных файлов с 819 добавлено и 1121 удалено
  1. 8 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/oa/OAModel.java
  2. 0 17
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/AutoErpService.java
  3. 20 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/OAHttpUtil.java
  4. 3 3
      WeiChat/version.properties
  5. 9 0
      app_core/common/src/main/assets/work_menu.json
  6. 4 6
      app_core/common/src/main/java/com/core/dao/WorkLocationDao.java
  7. 0 1
      app_core/common/src/main/java/com/core/model/OAConfig.java
  8. 0 8
      app_core/common/src/main/java/com/core/model/WorkLocationModel.java
  9. 1 1
      app_core/common/src/main/java/com/core/net/http/ViewUtil.java
  10. 1 19
      app_core/common/src/main/java/com/core/utils/BaiduMapUtil.java
  11. 1 1
      app_core/common/src/main/java/com/core/utils/CommonUtil.java
  12. 0 5
      app_core/common/src/main/java/com/core/utils/WorkHandlerUtil.java
  13. 42 10
      app_core/common/src/main/java/com/core/widget/view/selectcalendar/OACalendarView.java
  14. BIN
      app_core/common/src/main/res/drawable-hdpi/ic_work_special_attendance.png
  15. BIN
      app_core/common/src/main/res/drawable-xhdpi/ic_work_special_attendance.png
  16. BIN
      app_core/common/src/main/res/drawable-xxhdpi/ic_work_special_attendance.png
  17. 1 0
      app_core/common/src/main/res/values-en/strings.xml
  18. 1 0
      app_core/common/src/main/res/values-zh-rCN/strings.xml
  19. 1 0
      app_core/common/src/main/res/values-zh-rTW/strings.xml
  20. 1 0
      app_core/common/src/main/res/values/strings.xml
  21. 51 52
      app_modular/appmessages/src/main/java/com/modular/appmessages/activity/MsgsSecondCommonActivity.java
  22. 1 4
      app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/ApprovaPresenter.java
  23. 60 54
      app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java
  24. 0 290
      app_modular/apptasks/src/main/java/com/modular/apptasks/util/ReckonAutoUtil.java
  25. 2 0
      app_modular/apputils/src/main/java/com/modular/apputils/utils/SwitchUtil.java
  26. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/adapter/CycleCountAdapter.java
  27. 2 2
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/adapter/WorkAdapter.java
  28. 593 643
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/WorkPresenter.java
  29. 16 1
      app_modular/appworks/src/main/java/com/uas/appworks/model/WorkPlatModel.java

+ 8 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/oa/OAModel.java

@@ -29,9 +29,17 @@ public class OAModel {
     private String address;//
     private String recorder;//录入人
     private String status;
+    private String  kind;
     private String handler;
     private String json;
 
+   public boolean isAllDay(){
+       return kind==null?false:(kind.equals("全天"));
+   }
+    public void setKind(String kind) {
+        this.kind = kind;
+    }
+
     public boolean isMe() {
         return isMe;
     }

+ 0 - 17
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/AutoErpService.java

@@ -8,42 +8,26 @@ import android.content.IntentFilter;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
-import android.os.Message;
 import android.support.v4.content.LocalBroadcastManager;
 import android.text.TextUtils;
 import android.util.Log;
 
 import com.alibaba.fastjson.JSON;
 import com.common.LogUtil;
-import com.common.config.BaseConfig;
-import com.common.data.DateFormatUtil;
-import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.common.preferences.PreferenceUtils;
 import com.common.thread.ThreadUtil;
-import com.core.api.wxapi.ApiPlatform;
-import com.core.api.wxapi.ApiUtils;
 import com.core.app.AppConfig;
 import com.core.app.AppConstant;
 import com.core.app.MyApplication;
 import com.core.broadcast.MsgBroadcast;
-import com.core.dao.MessageDao;
 import com.core.dao.work.WorkModelDao;
-import com.core.model.MissionModel;
-import com.core.model.OAConfig;
-import com.core.model.WorkModel;
 import com.core.net.http.http.OAHttpHelper;
-import com.core.utils.BaiduMapUtil;
-import com.core.utils.CommonInterface;
 import com.core.utils.NotificationManage;
 import com.core.utils.TimeUtils;
-import com.modular.apptasks.util.AlarmUtil;
-import com.modular.apptasks.util.ReckonAutoUtil;
 import com.uas.appme.pedometer.service.StepService;
-import com.uas.appworks.OA.erp.activity.WorkActivity;
 import com.uas.appworks.OA.erp.utils.AutoErpSigninUitl;
 import com.uas.appworks.dao.MissionDao;
-import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.MainActivity;
 import com.xzjmyk.pm.activity.ui.erp.model.book.SureBookModel;
 import com.xzjmyk.pm.activity.ui.me.TimeStatisticsActivity;
@@ -51,7 +35,6 @@ import com.xzjmyk.pm.activity.ui.me.TimeStatisticsActivity;
 import java.util.ArrayList;
 import java.util.List;
 
-import static com.common.preferences.PreferenceUtils.getBoolean;
 
 
 /**

+ 20 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/OAHttpUtil.java

@@ -2,6 +2,7 @@ package com.xzjmyk.pm.activity.util.oa;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.common.LogUtil;
 import com.common.data.DateFormatUtil;
 import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
@@ -70,13 +71,16 @@ public class OAHttpUtil {
             //录入时间作为选择时间,如果没有录入,使用实际到达时间或是预计到达时间或开始时间
             model.setRecorddate(getTimeMillis(o, "recorddate", "vr_recorddate", "vr_date", "mpd_arrivedate", "startdate", "mpd_actdate"));
             model.setTitle(JSONUtil.getText(o, "mpd_company", "name", "vr_cuname", "taskname", "custname"));
-            model.setRemark(JSONUtil.getText(o, "mpd_remark", "vr_nichestep","vr_detail", "detail", "description"));
+            model.setRemark(JSONUtil.getText(o, "mpd_remark", "vr_nichestep", "vr_detail", "detail", "description"));
             model.setAddress(JSONUtil.getText(o, "vr_cuaddress", "mpd_address", "address"));
             model.setRecorder(JSONUtil.getText(o, "vr_emname", "recorder", "mp_recorder"));
             //外勤计划的实行人就是录入人
             model.setHandler(JSONUtil.getText(o, "handler", "visitman", "vr_emname", "doman"));
             model.setStatus(JSONUtil.getText(o, "mpd_status", "status"));
             model.setJson(o.toString());
+            if (type == OAModel.OA_TYPE_MISSION) {
+                model.setKind(JSONUtil.getText(o, "mpd_kind"));
+            }
             if (canShow(model))
                 models.add(model);
         }
@@ -122,12 +126,25 @@ public class OAHttpUtil {
 
     public boolean isMissionOk(OAModel e) {
         if (!e.isMission()) return false;
+        //当天以前的内容
         if (e.isTadayBefore() && e.getStartdate() > 0 && e.getEnddate() > 0 && e.getStartdate() != e.getEnddate()) {
             return true;
         } else {
             String status = e.getStatus();
-            if ("签退".equals(status)) return true;
-            else return false;
+            if ("签退".equals(status)) {
+                if (e.isAllDay()) {
+                    long five = DateFormatUtil.str2Long(DateFormatUtil.long2Str("yyyy-MM-dd") + " 17:00:00", "yyyy-MM-dd HH:mm:ss");
+                    if (five < System.currentTimeMillis()) {
+                        return true;
+                    } else {
+                        return false;
+                    }
+                } else {
+                    return true;
+                }
+            } else {
+                return false;
+            }
         }
     }
 }

+ 3 - 3
WeiChat/version.properties

@@ -1,5 +1,5 @@
-#Fri Jan 05 15:03:51 CST 2018
-debugName=474
+#Fri Jan 05 14:24:50 CST 2018
+debugName=388
 versionName=624
-debugCode=474
+debugCode=388
 versionCode=163

+ 9 - 0
app_core/common/src/main/assets/work_menu.json

@@ -141,6 +141,15 @@
         "caller": "",
         "isHide": false
       },
+      {
+        "isLocalMenu": true,
+        "menuName": "str_work_special_attendance",
+        "menuIcon": "ic_work_special_attendance",
+        "menuActivity": "com.modular.form.DataFormDetailActivity",
+        "menuUrl": "",
+        "caller": "",
+        "isHide": false
+      },
       {
         "isLocalMenu": true,
         "menuName": "title_device_manage",

+ 4 - 6
app_core/common/src/main/java/com/core/dao/WorkLocationDao.java

@@ -52,8 +52,7 @@ public class WorkLocationDao {
             db = DatabaseManager.getInstance().openDatabase();
             String[] columns = {"id", "latitude",
                     "longitude", "shortName",
-                    "workaddr", "innerdistance",
-                    "validrange"};
+                    "workaddr", "validrange"};
             String selection = "master =? and emcode=? ";
             String[] selecttionArg = {master, emcode};
             cursor = db.query(TIBLE_NAME, columns, selection, selecttionArg, null, null, null);
@@ -68,8 +67,7 @@ public class WorkLocationDao {
                     bean.setLocation(new LatLng(latitude, longitude));
                 bean.setShortName(cursor.getString(3));
                 bean.setWorkaddr(cursor.getString(4));
-                bean.setInnerdistance(cursor.getInt(5));
-                bean.setValidrange(cursor.getInt(6));
+                bean.setValidrange(cursor.getInt(5));
                 beans.add(bean);
             }
             if (cursor != null)
@@ -89,7 +87,7 @@ public class WorkLocationDao {
         SQLiteDatabase db = null;
         long i = 0;
         try {
-            db =DatabaseManager.getInstance().openDatabase();
+            db = DatabaseManager.getInstance().openDatabase();
             db.beginTransaction();//开启事务
             //清空表数据
             db.execSQL("DELETE FROM " + TIBLE_NAME);
@@ -108,7 +106,7 @@ public class WorkLocationDao {
                 values.put("master", master);
                 values.put("emcode", emcode);
                 values.put("validrange", e.getValidrange());
-                values.put("innerdistance", e.getInnerdistance());
+                values.put("innerdistance", 1);
                 values.put("latitude", e.getLatitude());
                 values.put("longitude", e.getLongitude());
                 values.put("shortName", e.getShortName());

+ 0 - 1
app_core/common/src/main/java/com/core/model/OAConfig.java

@@ -30,7 +30,6 @@ public class OAConfig {
 
 
 
-    /*是否显示Crm2.0功能*/
     public static boolean canShowRed = false;
 
 

+ 0 - 8
app_core/common/src/main/java/com/core/model/WorkLocationModel.java

@@ -10,7 +10,6 @@ public class WorkLocationModel {
 
     private int id;
     private int validrange;//打卡距离
-    private int innerdistance;//办公范围
     private LatLng location;
     private String shortName;//位置
     private String workaddr;//位置//地址
@@ -31,13 +30,6 @@ public class WorkLocationModel {
         this.validrange = validrange;
     }
 
-    public int getInnerdistance() {
-        return innerdistance;
-    }
-
-    public void setInnerdistance(int innerdistance) {
-        this.innerdistance = innerdistance;
-    }
 
     public double getLatitude() {
         return location==null?0:location.latitude;

+ 1 - 1
app_core/common/src/main/java/com/core/net/http/ViewUtil.java

@@ -1049,7 +1049,7 @@ public class ViewUtil {
         url = url + "mobile/login.action";
 //        if (BaseConfig.isDebug()){
 //            master=CommonUtil.getMaster();
-//            url="http://192.168.253.203:8090/ERP/mobile/login.action";
+//            url="http://192.168.253.97:8080/ERP/mobile/login.action";
 //        }
  //       url="http://192.168.253.58:8080/ERP/mobile/login.action";
 //        url = "http://192.168.253.29:8080/ERP/mobile/login.action";

+ 1 - 19
app_core/common/src/main/java/com/core/utils/BaiduMapUtil.java

@@ -161,25 +161,7 @@ public class BaiduMapUtil {
         }
     }
 
-    public boolean isInnerdistance() {
-        float dis = 0;
-        try {
-            List<WorkLocationModel> beanList = WorkLocationDao.getInstance().queryByEnCode();
-            if (ListUtils.isEmpty(beanList)) return false;
-            BdLocationHelper helper = MyApplication.getInstance().getBdLocationHelper();
-            for (WorkLocationModel bean : beanList) {
-                String chche = BaiduMapUtil.getInstence().getDistance(bean.getLongitude(),
-                        bean.getLatitude(), helper.getLatitude(), helper.getLongitude());
-                dis = Float.valueOf(chche);
-                if (dis < bean.getInnerdistance()) return true;
-            }
-            return false;
-        } catch (NumberFormatException e) {
-            return false;
-        } catch (Exception e) {
-            return false;
-        }
-    }
+
 
 
     //计算距离saaa

+ 1 - 1
app_core/common/src/main/java/com/core/utils/CommonUtil.java

@@ -100,7 +100,7 @@ public class CommonUtil {
         }
         String baseUrl = getSharedPreferences(ct, "erp_baseurl");
 //        if (BaseConfig.isDebug()){
-//            baseUrl="http://192.168.253.203:8090/ERP/";
+//            baseUrl="http://192.168.253.97:8080/ERP/";
 //        }
 //        baseUrl="http://192.168.253.203:8090/ERP/
 

+ 0 - 5
app_core/common/src/main/java/com/core/utils/WorkHandlerUtil.java

@@ -188,7 +188,6 @@ public class WorkHandlerUtil {
             WorkLocationModel bean = null;
             JSONObject o = null;
             String csId = isB2b ? "cS_ID" : "CS_ID";
-            String cs_innerdistance = isB2b ? "cS_INNERDISTANCE" : "CS_INNERDISTANCE";
             String cs_latitude = isB2b ? "cS_LATITUDE" : "CS_LATITUDE";
             String cs_longitude = isB2b ? "cS_LONGITUDE" : "CS_LONGITUDE";
             String cs_shortname = isB2b ? "sHORTNAME" : "CS_SHORTNAME";
@@ -198,7 +197,6 @@ public class WorkHandlerUtil {
                 o = array.getJSONObject(i);
                 bean = new WorkLocationModel();
                 int id = o.getInteger(csId);
-                int innerdistance = o.getInteger(cs_innerdistance);//办公距离
                 double latitude = o.getDouble(cs_latitude);//精度
                 double longitude = o.getDouble(cs_longitude);//纬度
                 LatLng location = new LatLng(latitude, longitude);
@@ -210,7 +208,6 @@ public class WorkHandlerUtil {
                 bean.setValidrange(Integer.valueOf(validrange));
                 bean.setShortName(shortname);
                 bean.setWorkaddr(workaddr);
-                bean.setInnerdistance(innerdistance);
                 beanList.add(bean);
             }
             //兼容非2.0版本接口
@@ -222,8 +219,6 @@ public class WorkHandlerUtil {
                 bean.setLocation(new LatLng(latitude, longitude));
                 String validrange = o.getString("distance");//打卡范围
                 bean.setValidrange(Integer.valueOf(validrange));
-                int innerdistance = o.getInteger("innerdistance");//办公距离
-                bean.setInnerdistance(innerdistance);
                 bean.setShortName("默认位置");
                 bean.setWorkaddr("默认地址");
                 beanList.add(bean);

+ 42 - 10
app_core/common/src/main/java/com/core/widget/view/selectcalendar/OACalendarView.java

@@ -19,14 +19,15 @@ import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-
 /**
+ * update 2018-1-4 更新添加可以选择过去的时间过去时间不可点击,变灰等
+ * setCanClickHistory//是否需要向过去的时间变灰,当设置为ture时候默认不可以点击,默认值为flase
+ * setNeedHintHistory//是否可以点击过去的日期,默认为true
  * Created by pengminggong on 2016/9/20.
  */
 public class OACalendarView extends View implements View.OnTouchListener {
     //日期记录
     private Date curDate; // 当前日历显示的月
-    private Date today; // 今天的日期
     private Date downDate; // 手指按下状态时临时日期
     //索引
     private int todayIndex; // 今天的索引
@@ -50,7 +51,7 @@ public class OACalendarView extends View implements View.OnTouchListener {
     public OACalendarView(Context context, AttributeSet attrs) {
         super(context, attrs);
         surface = new Surface();
-        curDate = today = new Date();
+        curDate =  new Date();
         calendar = Calendar.getInstance();
         calendar.setTime(curDate);
         todayIndex = calendar.get(Calendar.DAY_OF_MONTH);
@@ -72,9 +73,20 @@ public class OACalendarView extends View implements View.OnTouchListener {
         setOnTouchListener(this);
     }
 
+    private boolean needHintHistory=false;
+    private boolean canClickHistory=true;
+
+    public void setCanClickHistory(boolean canClickHistory) {
+        this.canClickHistory = canClickHistory;
+    }
+
+    public void setNeedHintHistory(boolean needHintHistory) {
+        this.needHintHistory = needHintHistory;
+        this.canClickHistory = !needHintHistory;
+    }
 
     private void setCalendar(Date d) {
-        curDate = today = d;
+        curDate =d;
         calendar.setTime(curDate);
         calendar.set(Calendar.DAY_OF_MONTH, 1);//设置为当月第一天
         startIndex = calendar.get(Calendar.DAY_OF_WEEK) - 1;//获取第一天在当周的星期几,返回多1,所以减1
@@ -188,7 +200,7 @@ public class OACalendarView extends View implements View.OnTouchListener {
 
     //绘画点击的内容
     private void drawSelect(Canvas canvas) {
-        if (downIndex >= startIndex && downIndex <= endIndex) {
+        if (downIndex >= startIndex && downIndex <= endIndex && canClickHistory) {
             //圆的最中心
             float cellY = surface.weekHeight + surface.cellHeight * (downIndex / 7) + surface.cellHeight / 2;
             float cellX = surface.cellWidth * (downIndex % 7) + surface.cellWidth / 2;
@@ -229,6 +241,8 @@ public class OACalendarView extends View implements View.OnTouchListener {
             }
             if (downIndex == i) {
                 surface.datePaint.setColor(surface.selectColor);
+            } else if (isHistory(i)) {
+                surface.datePaint.setColor(surface.hineDateColor);
             }
             float dayTextX = surface.cellWidth * (i % surface.weekText.length) +
                     (surface.cellWidth - surface.datePaint.measureText(chche)) / 2f;
@@ -270,6 +284,22 @@ public class OACalendarView extends View implements View.OnTouchListener {
             return false;
         return true;
     }
+
+    public boolean isHistory(int index) {
+        if (needHintHistory) {
+            calendar.setTime(curDate);
+            int month = calendar.get(Calendar.MONTH);
+            int year = calendar.get(Calendar.YEAR);
+            calendar.set(Calendar.DAY_OF_MONTH, date[index]);
+            Calendar c = Calendar.getInstance();
+            if (year == c.get(Calendar.YEAR) && month == c.get(Calendar.MONTH) && todayIndex == index) {
+                return false;
+            }
+            return calendar.compareTo(c) < 0;
+        } else {
+            return false;
+        }
+    }
     /*end 判断*/
 
     /**
@@ -302,7 +332,9 @@ public class OACalendarView extends View implements View.OnTouchListener {
         int indexX = (int) Math.floor(x / surface.cellWidth);
         int indexY = (int) Math.floor((y - surface.weekHeight) / surface.cellHeight);
         downIndex = indexY * 7 + indexX;
-        if (downIndex < startIndex || downIndex > endIndex) return false;//当点击的是非本月的日期时候
+        if (downIndex < startIndex || downIndex > endIndex || !canClickHistory)
+            return false;//当点击的是非本月的日期时候
+
         calendar.setTime(curDate);
         calendar.set(Calendar.DAY_OF_MONTH, date[downIndex]);
         downDate = calendar.getTime();
@@ -328,10 +360,10 @@ public class OACalendarView extends View implements View.OnTouchListener {
 
     /*设置月份*/
     public void setCurDate(Date date) {
-        LogUtil.d("Test",""+ DateFormatUtil.getStrDate4Date(date,"yyyy-MM-dd"));
+        LogUtil.d("Test", "" + DateFormatUtil.getStrDate4Date(date, "yyyy-MM-dd"));
         curDate = date;
         calendar.setTime(curDate);
-        int curMoth=calendar.get(Calendar.DAY_OF_MONTH);
+        int curMoth = calendar.get(Calendar.DAY_OF_MONTH);
         calendar.set(Calendar.DAY_OF_MONTH, 1);
         startIndex = calendar.get(Calendar.DAY_OF_WEEK) - 1;//获取第一天在当周的星期几,返回多1,所以减1
         maxDay = calendar.getActualMaximum(Calendar.DATE);//获取当月有多少天
@@ -341,11 +373,11 @@ public class OACalendarView extends View implements View.OnTouchListener {
         for (int i = startIndex, j = 1; i < this.date.length; i++, j++) {
             this.date[i] = j;
         }
-        
+
 //        if (isThisMonth()) {
 //            downIndex = todayIndex;
 //        } else {
-            this.downIndex = Math.min(startIndex + curMoth - 1, this.date.length - 1);
+        this.downIndex = Math.min(startIndex + curMoth - 1, this.date.length - 1);
 //        }
         surface.init();
         invalidate();

BIN
app_core/common/src/main/res/drawable-hdpi/ic_work_special_attendance.png


BIN
app_core/common/src/main/res/drawable-xhdpi/ic_work_special_attendance.png


BIN
app_core/common/src/main/res/drawable-xxhdpi/ic_work_special_attendance.png


+ 1 - 0
app_core/common/src/main/res/values-en/strings.xml

@@ -1453,6 +1453,7 @@
     <string name="str_work_travel_request">出差申请</string>
     <string name="str_work_expense_account">费用报销</string>
     <string name="str_work_meeting_manage">会议管理</string>
+    <string name="str_work_special_attendance">特殊考勤</string>
 
     <string name="str_customer_relationship">客户关系管理</string>
     <string name="str_work_business_manage">商机管理</string>

+ 1 - 0
app_core/common/src/main/res/values-zh-rCN/strings.xml

@@ -1566,6 +1566,7 @@
     <string name="str_work_travel_request">出差申请</string>
     <string name="str_work_expense_account">费用报销</string>
     <string name="str_work_meeting_manage">会议管理</string>
+    <string name="str_work_special_attendance">特殊考勤</string>
 
     <string name="str_customer_relationship">客户关系管理</string>
     <string name="str_work_business_manage">商机管理</string>

+ 1 - 0
app_core/common/src/main/res/values-zh-rTW/strings.xml

@@ -1554,6 +1554,7 @@
     <string name="str_work_travel_request">出差申请</string>
     <string name="str_work_expense_account">费用报销</string>
     <string name="str_work_meeting_manage">会议管理</string>
+    <string name="str_work_special_attendance">特殊考勤</string>
 
     <string name="str_customer_relationship">客户关系管理</string>
     <string name="str_work_business_manage">商机管理</string>

+ 1 - 0
app_core/common/src/main/res/values/strings.xml

@@ -1904,6 +1904,7 @@
     <string name="str_work_travel_request">出差申请</string>
     <string name="str_work_expense_account">费用报销</string>
     <string name="str_work_meeting_manage">会议管理</string>
+    <string name="str_work_special_attendance">特殊考勤</string>
 
     <string name="str_customer_relationship">客户关系管理</string>
     <string name="str_work_business_manage">商机管理</string>

+ 51 - 52
app_modular/appmessages/src/main/java/com/modular/appmessages/activity/MsgsSecondCommonActivity.java

@@ -129,7 +129,7 @@ public class MsgsSecondCommonActivity extends BaseActivity implements View.OnCli
                             handleMsgsArray(msgsArray);
                             if (platform) {
                                 String ids = resultJsonObject.getString("ids");
-                                if (!StringUtil.isEmpty(ids)) {
+                                if (!StringUtil.isEmpty(ids) && platform) {
                                     doPlatBackids(ids);
                                 }
                             }
@@ -215,7 +215,6 @@ public class MsgsSecondCommonActivity extends BaseActivity implements View.OnCli
     private void initView() {
         myplv = (PullToRefreshListView) findViewById(R.id.waitting_work_plv);
         more_msg_tv = (TextView) findViewById(R.id.more_msg_tv);
-        progressDialog.show();
         mEmptyLayout = new EmptyLayout(this, myplv.getRefreshableView());
         mEmptyLayout.setShowEmptyButton(false);
         mEmptyLayout.setShowErrorButton(false);
@@ -236,17 +235,20 @@ public class MsgsSecondCommonActivity extends BaseActivity implements View.OnCli
         if (!StringUtil.isEmpty(msg_title)) {
             getSupportActionBar().setTitle(msg_title);
         }
-        if (MyApplication.getInstance().isNetworkActive()) { //有网下优先请求数据进行本地数据更新再显示本地数据库消息
-            if (!"kpi".equals(msg_type)) {
-                loadNet();
-            } else {
-                loadLocalData(msg_type);
-            }
+        if (platform && MyApplication.getInstance().isNetworkActive() && !"kpi".equals(msg_type)) {
+            progressDialog.show();
+            loadNet();
         } else {
-            loadLocalData(msg_type);  //无网下直接获取数据库显示老数据
-            ToastMessage(getResources().getString(R.string.networks_out));
-            progressDialog.dismiss();
+            loadLocalData(msg_type);
         }
+//
+//        if (MyApplication.getInstance().isNetworkActive()) { //有网下优先请求数据进行本地数据更新再显示本地数据库消息
+//
+//        } else {
+//            loadLocalData(msg_type);  //无网下直接获取数据库显示老数据
+//            ToastMessage(getResources().getString(R.string.networks_out));
+//            progressDialog.dismiss();
+//        }
 
     }
 
@@ -341,38 +343,39 @@ public class MsgsSecondCommonActivity extends BaseActivity implements View.OnCli
     }
 
     private void NewMsgsEvent() {
-        myplv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
-            @Override
-            public void onPullDownToRefresh(PullToRefreshBase refreshView) { //TODO 下拉刷新
-                if (MyApplication.getInstance().isNetworkActive()) {
-                    if (!"kpi".equals(msg_type)) {
-                        loadNet();
-                    }
-                    new Handler().postDelayed(new Runnable() {
-                        @Override
-                        public void run() {
-                            ToastMessage(getString(R.string.common_down_finish));
-                            myplv.onRefreshComplete();
-                        }
-                    }, 3000);
-                } else {
-                    myplv.onRefreshComplete();
-                    ToastMessage(getResources().getString(R.string.networks_out));
-                }
-
-            }
-
-            @Override
-            public void onPullUpToRefresh(PullToRefreshBase refreshView) { //TODO 上拉加载
-                new Handler().postDelayed(new Runnable() {
-                    @Override
-                    public void run() {
-                        ToastMessage(getString(R.string.common_up_finish));
-                        myplv.onRefreshComplete();
-                    }
-                }, 3000);
-            }
-        });
+        myplv.setMode(PullToRefreshBase.Mode.DISABLED);
+//        myplv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
+//            @Override
+//            public void onPullDownToRefresh(PullToRefreshBase refreshView) { //TODO 下拉刷新
+//                if (MyApplication.getInstance().isNetworkActive()) {
+//                    if (!"kpi".equals(msg_type)) {
+//                        loadNet();
+//                    }
+//                    new Handler().postDelayed(new Runnable() {
+//                        @Override
+//                        public void run() {
+//                            ToastMessage(getString(R.string.common_down_finish));
+//                            myplv.onRefreshComplete();
+//                        }
+//                    }, 3000);
+//                } else {
+//                    myplv.onRefreshComplete();
+//                    ToastMessage(getResources().getString(R.string.networks_out));
+//                }
+//
+//            }
+
+//            @Override
+//            public void onPullUpToRefresh(PullToRefreshBase refreshView) { //TODO 上拉加载
+//                new Handler().postDelayed(new Runnable() {
+//                    @Override
+//                    public void run() {
+//                        ToastMessage(getString(R.string.common_up_finish));
+//                        myplv.onRefreshComplete();
+//                    }
+//                }, 3000);
+//            }
+//        });
         myplv.getRefreshableView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
             @Override
             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
@@ -494,16 +497,16 @@ public class MsgsSecondCommonActivity extends BaseActivity implements View.OnCli
     @Override
     public void onClick(View v) {
         closePopupWindow();
-        int id=v.getId();
-        if (R.id.msg_delete_tv==id){
+        int id = v.getId();
+        if (R.id.msg_delete_tv == id) {
             doDeleteMsg();     // 删除操作
-        }else  if (R.id.msg_markread_tv==id){
+        } else if (R.id.msg_markread_tv == id) {
             if (item_readed) {
                 doMarkUnReadMsg();
             } else {
                 doMarkReadedMsg();   //  标为已读
             }
-        }else if (R.id.msg_detail_tv==id){
+        } else if (R.id.msg_detail_tv == id) {
             new Handler().postDelayed(new Runnable() {
                 @Override
                 public void run() {
@@ -641,11 +644,7 @@ public class MsgsSecondCommonActivity extends BaseActivity implements View.OnCli
             viewHolder.msgs_img.setImageResource(imageurl);
             viewHolder.msgs_title_tv.setText(msgModel.get(position).getTitle());
             if (!TextUtils.isEmpty(msgModel.get(position).getTime())) {
-                if (platform) {
-                    viewHolder.msgs_time_tv.setText(msgModel.get(position).getTime());
-                } else {
-                    viewHolder.msgs_time_tv.setText(DateFormatUtil.long2Str(TimeUtils.f_str_2_long(msgModel.get(position).getTime()), "yyyy-MM-dd HH:mm"));
-                }
+                viewHolder.msgs_time_tv.setText(msgModel.get(position).getTime());
             }
             viewHolder.msgs_content_tv.setText(Html.fromHtml(msgModel.get(position).getSubTitle()));
             if (msgModel.get(position).isReaded()) {

+ 1 - 4
app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/ApprovaPresenter.java

@@ -848,11 +848,8 @@ public class ApprovaPresenter implements OnHttpResultListener {
                 String findTionName = JSONUtil.getText(config, "DG_FINDFUNCTIONNAME");
                 if (!StringUtil.isEmpty(findTionName)) {
                     int hhitem = findTionName.indexOf('|');
-                    Log.i("gongpengming","findTionName="+findTionName);
                     String gCaller = findTionName.substring(0, hhitem);
-                    Log.i("gongpengming","gCaller="+gCaller);
                     String coreKey = findTionName.substring(hhitem+1, findTionName.length());
-                    Log.i("coreKey","coreKey="+coreKey);
                     approval.setgCaller(gCaller);
                     approval.setCoreKey(coreKey);
                 }
@@ -872,7 +869,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
             } else {
                 newValues = values;
             }
-            if (approval.isDftypeEQ("MF") || (record.title.contains("公章用印申请流程") && "附件".equals(caption))) {
+            if (approval.isDftypeEQ("FF") || (record.title.contains("公章用印申请流程") && "附件".equals(caption))) {
                 if (isMain) {
                     final String fb_attach = newValues;
                     OAHttpHelper.getInstance().post(new Runnable() {

+ 60 - 54
app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java

@@ -54,7 +54,6 @@ import com.modular.appmessages.activity.UUHelperActivity;
 import com.modular.appmessages.db.SubsDao;
 import com.modular.appmessages.model.MessageHeader;
 import com.modular.appmessages.model.SubMessage;
-import com.modular.appmessages.model.SubscriptionMessage;
 import com.modular.appmessages.presenter.imp.IMessageView;
 import com.modular.appmessages.util.ApprovalUtil;
 import com.modular.apputils.utils.SwitchUtil;
@@ -62,7 +61,6 @@ import com.modular.booking.activity.services.BServiceListActivity;
 import com.modular.booking.model.SBMenuModel;
 import com.uas.appworks.CRM.erp.activity.DeviceManageActivity;
 import com.uas.appworks.OA.platform.activity.BusinessTravelActivity;
-import com.uas.appworks.OA.platform.activity.CharitableActivity;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -248,32 +246,6 @@ public class MessagePresenter implements OnHttpResultListener {
 
     }
 
-    /**
-     * 获取消息详细信息接口
-     *
-     * @param type     消息类型
-     * @param isReaded 是否是阅读全部,如果不是就是删除全部
-     */
-    private void loadEmNewsDetails(String type, boolean isReaded) {
-        if (isB2b) {
-            return;
-        }
-        Map<String, Object> param = new HashMap<>();
-        param.put("emcode", CommonUtil.getSharedPreferences(ct, "erp_username"));
-        param.put("type", type);
-        Bundle bundle = new Bundle();
-        bundle.putString("type", type);
-        bundle.putBoolean("isReaded", isReaded);
-
-        Request request = new Request.Bulider()
-                .setParam(param)
-                .setUrl("mobile/queryEmNewsDetails.action")
-                .setMode(Request.Mode.GET)
-                .setBundle(bundle)
-                .setWhat(LOAD_EMNEWS_DETAILS)
-                .bulid();
-        OAHttpHelper.getInstance().requestHttp(request, this);
-    }
 
     private void postReadNews(String ids) {
         Map<String, Object> param = new HashMap<>();
@@ -381,7 +353,7 @@ public class MessagePresenter implements OnHttpResultListener {
                     return;
                 }
                 String ids = object.getString("ids");
-                if (!StringUtil.isEmpty(ids))
+                if (!StringUtil.isEmpty(ids) && isB2b)
                     postReadNews(ids);
                 JSONArray array = object.getJSONArray("listdata");
                 handlerNewsFormErp(array);
@@ -543,20 +515,34 @@ public class MessagePresenter implements OnHttpResultListener {
             showsubsNum(0, "", "");
             return;
         }
-        List<SubscriptionMessage> messages = null;
         int num = 0;
+        String title = "";
+        String sub = "";
         if (object.containsKey("data")) {
-            messages = JSON.parseArray(object.getJSONArray("data").toJSONString(), SubscriptionMessage.class);
-            if (ListUtils.isEmpty(messages)) {
-                showsubsNum(0, "", "");
-                return;
-            }
-            for (SubscriptionMessage e : messages) {
-                if (e.getSTATUS_() == 0)
-                    num += 1;
+            //TODO 未验证修改
+            JSONArray array = JSONUtil.getJSONArray(object, "data");
+            if (!ListUtils.isEmpty(array)) {
+                for (int i = 0; i < array.size(); i++) {
+                    if (JSONUtil.getInt(array.getJSONObject(i), "STATUS_") == 0) {
+                        num += 1;
+                    }
+                }
+                title = JSONUtil.getText(array.getJSONObject(0), "TITLE_");
+                long time = JSONUtil.getLong(array.getJSONObject(0), "CREATEDATE_");
+                sub = TimeUtils.getFriendlyTimeDesc(ct, (int) (time / 1000));
             }
+//            messages = JSON.parseArray(object.getJSONArray("data").toJSONString(), SubscriptionMessage.class);
+//            if (ListUtils.isEmpty(messages)) {
+//                showsubsNum(0, "", "");
+//                return;
+//            }
+//            for (SubscriptionMessage e : messages) {
+//                if (e.getSTATUS_() == 0) {
+//                    num += 1;
+//                }
+//            }
         }
-        showsubsNum(num, messages.get(0).getTITLE_(), messages.get(0).getCREATEDATE_());
+        showsubsNum(num, title, sub);
     }
 
     private void showsubsNum(int num, String title, String time) {
@@ -607,24 +593,41 @@ public class MessagePresenter implements OnHttpResultListener {
             return;
         }
         JSONObject object = null;
+        JSONObject detail = null;
         List<MessageModel> models = new ArrayList<>();
+        List<MessageModel> detailModels = new ArrayList<>();
         MessageModel model = null;
+        MessageModel  detailModel = null;
+        LogUtil.i("array="+array.size());
         for (int i = 0; i < array.size(); i++) {
             object = array.getJSONObject(i);
             model = new MessageModel();
             model.setTitle(object.getString("title"));
             model.setSubTitle(object.getString("lastMessage"));
             model.setTime(DateFormatUtil.long2Str(JSONUtil.getTime(object, "lastTime"), "yyyy-MM-dd HH:mm"));
-            model.setType(object.getString("type"));
+            String type = object.getString("type");
+            model.setType(type);
             if (object.containsKey("count") && object.get("count") != null)
                 model.setCount(object.getInteger("count"));
             if (StringUtil.isEmpty(model.getTitle()) || StringUtil.isEmpty(model.getSubTitle()))
                 continue;
-//            if (model.getSubTitle().length() > 100)
-//                model.setSubTitle(model.getSubTitle().substring(0, 18));
+            JSONArray details = JSONUtil.getJSONArray(object, "detail");
             models.add(model);
+            if (!ListUtils.isEmpty(details)) {
+                for (int j = 0; j < details.size(); j++) {
+                    detail = details.getJSONObject(j);
+                    detailModel = new MessageModel();
+                    detailModel.setId(JSONUtil.getInt(detail, "id"));
+                    detailModel.setTitle(JSONUtil.getText(detail, "title"));
+                    detailModel.setSubTitle(JSONUtil.getText(detail, "subTitle"));
+                    detailModel.setTime(DateFormatUtil.long2Str(JSONUtil.getTime(detail,"createTime"), "yyyy-MM-dd HH:mm"));
+                    detailModel.setType(type);
+                    detailModel.setHierarchy(1);
+                    detailModels.add(detailModel);
+                }
+            }
         }
-        saveErp2DB(models);
+        saveErp2DB(models, detailModels);
     }
 
     /**
@@ -633,12 +636,16 @@ public class MessagePresenter implements OnHttpResultListener {
      * @param models
      */
     private void saveErp2DB(final List<MessageModel> models) {
-        LogUtil.i("saveErp2DB");
+        saveErp2DB(models, null);
+    }
+
+    private void saveErp2DB(final List<MessageModel> models, final List<MessageModel> detailModels) {
         new Thread(new Runnable() {
             @Override
             public void run() {
-                if (!ListUtils.isEmpty(models))
+                if (!ListUtils.isEmpty(models)) {
                     MessageDao.getInstance().createOrinstart(models, true);
+                }
                 final List<BaseSortModel<Friend>> chche = loadDataByImAsync();//loadDataByImAsync()
                 OAHttpHelper.getInstance().post(new Runnable() {
                     @Override
@@ -650,6 +657,9 @@ public class MessagePresenter implements OnHttpResultListener {
                         showByEndIm();
                     }
                 });
+                if (!ListUtils.isEmpty(detailModels)) {
+                    MessageDao.getInstance().createOrinstart(detailModels);
+                }
             }
         }).start();
     }
@@ -813,12 +823,9 @@ public class MessagePresenter implements OnHttpResultListener {
         if (ListUtils.isEmpty(mFriendList) || mFriendList.size() < position || position < 0) return;
         Friend friend = mFriendList.get(position).getBean();
         if (friend.getType() == XmppMessage.TYPE_ERP) {
-            if (!"kpi".equals(friend.getDescription()))
-                loadEmNewsDetails(friend.getDescription(), false);
-            else {
-                MessageDao.getInstance().deleteBytype(friend.getDescription());
-                loadData();
-            }
+            MessageDao.getInstance().deleteBytype(friend.getDescription());
+            loadData();
+
         } else if (friend.getType() == XmppMessage.TYPE_UUHELPER) {
             UUHelperDao.getInstance().deleteData(-1);
             if (!ListUtils.isEmpty(mFriendList) && mFriendList.size() > position) {
@@ -839,9 +846,8 @@ public class MessagePresenter implements OnHttpResultListener {
         if (ListUtils.isEmpty(mFriendList) || mFriendList.size() < position) return;
         Friend friend = mFriendList.get(position).getBean();
         if (friend.getType() == XmppMessage.TYPE_ERP) {
-            loadEmNewsDetails(friend.getDescription(), true);
-//            MessageDao.getInstance().upStatusByType(friend.getDescription(), true);
-//            loadData();
+            MessageDao.getInstance().upStatusByType(friend.getDescription(), true);
+            loadData();
         } else if (friend.getType() == XmppMessage.TYPE_UUHELPER) {
             UUHelperDao.getInstance().updateRead(true);
         } else {

+ 0 - 290
app_modular/apptasks/src/main/java/com/modular/apptasks/util/ReckonAutoUtil.java

@@ -1,290 +0,0 @@
-package com.modular.apptasks.util;
-
-import com.common.LogUtil;
-import com.common.data.DateFormatUtil;
-import com.common.data.ListUtils;
-import com.common.data.StringUtil;
-import com.common.preferences.PreferenceUtils;
-import com.core.app.AppConfig;
-import com.core.app.MyApplication;
-import com.core.dao.work.WorkModelDao;
-import com.core.model.MissionModel;
-import com.core.model.WorkModel;
-import com.core.utils.BaiduMapUtil;
-import com.core.utils.CommonUtil;
-
-import java.util.List;
-
-/**
- * 计算自动外勤和自动打卡工具类
- * Created by Bitliker on 2016/12/13.
- */
-public class ReckonAutoUtil {
-
-	/**
-	 * 计算是否符合自动外勤,返回外勤列表中距离最小的对象,如果不符合,返回空
-	 * 1.判断进行中的外勤计划,如果离开了签到最后一次,结束该计划
-	 * 2.如果第一个不存在,判断获取最近的位置(包含已经结束的,防止定位不准问题)
-	 *
-	 * @param list 外勤列表数据
-	 * @return
-	 * @throws ClassCastException
-	 */
-	public MissionModel reckonMission(List<MissionModel> list) throws Exception {
-		int companyDistance = PreferenceUtils.getInt(AppConfig.ALARM_MISSION_DISTANCE, 500);
-		MissionModel minBean = null;
-		float minDistance = 0;
-		if (ListUtils.isEmpty(list)) {
-			return minBean;
-		}
-		for (MissionModel e : list) {
-			if (!timeAllowMission(e)) continue;//时间上不符合该外勤签到或签退
-			if (e.getLatLng() == null) continue;//定位不存在
-			//获取当前与目的地的距离
-			float distance = BaiduMapUtil.getInstence().autoDistance(e.getLatLng());
-			if (distance == -1f) return null;
-			if (e.getStatus() != 2 && distance > companyDistance && !StringUtil.isEmpty(e.getRealTime())) {
-				//符合外勤签退  1.判断进行中的外勤计划,如果离开了签到最后一次,结束该计划
-				minBean = e;
-				minBean.setStatus(2);//结束该外勤
-				break;
-			} else if (distance < companyDistance && (e.getType() != 1 || e.getStatus() != 2)) { //判断符合自动外勤
-				if (minDistance <= 0 || minDistance > distance) {//2.如果第一个不存在,判断获取最近的位置
-					minDistance = distance;
-					minBean = e;
-					if (minBean.getStatus() == 2)
-						minBean.setStatus(3);
-				}
-			}
-		}
-		return minBean;
-	}
-
-	/**
-	 * 判断该对应班次最后一次签到时间和当前是否有足够长的时间间隔
-	 *
-	 * @param bean
-	 * @return
-	 */
-	private boolean timeAllowMission(MissionModel bean) {
-		if (bean == null) return false;
-		if (StringUtil.isEmpty(bean.getRealTime())) return true;
-		String lastTime = StringUtil.isEmpty(bean.getRealLeave()) ? bean.getRealTime() : bean.getRealLeave();
-		return long2LastTime(lastTime);
-	}
-
-	/**
-	 * 判断最后一次签到是否相隔足够长的时间
-	 *
-	 * @param lastSignin 最后一次签到时间  yyyy-MM-dd HH:mm:ss
-	 * @return
-	 */
-	private boolean long2LastTime(String lastSignin) {
-		long last = DateFormatUtil.str2Long(lastSignin, DateFormatUtil.YMD_HMS);
-		if ((System.currentTimeMillis() - last) > (15 * 60 * 1000)) {
-			//如果遍历到了,但是时间相差很小,就更新
-			return true;
-		} else
-			return false;
-	}
-
-
-	//获取下一个没有打卡的班次(/*子线程*/)
-	public WorkModel getNextNotSigninWork() {
-		List<WorkModel> models = WorkModelDao.getInstance().queryAuto();//获取当天所有班次,去除迟到和早退签到数据
-		if (ListUtils.isEmpty(models)) return null;
-		for (WorkModel m : models) {
-			if (satisfyNextSignin(m))
-				return m;
-		}
-		return null;
-	}
-
-	/**
-	 * 判断当前班次是否满足打卡或是满足下次打卡的时间范围
-	 *
-	 * @param w 计算班次
-	 * @return
-	 */
-	public boolean satisfyNextSignin(WorkModel w) {
-		if (StringUtil.isEmpty(w.getOffend()) || StringUtil.isEmpty(w.getWorkStart()))
-			return false;
-		String newHHMM = DateFormatUtil.long2Str(DateFormatUtil.HM);
-		//判断上班,当前时间是否处于上班时间之前并没有打上班卡
-		if (StringUtil.isEmpty(w.getWorkSignin()) && newHHMM.compareTo(w.getWorkTime()) <= 0)
-			return true;
-		//判断下班,当前时间是否处于下班打卡结束时间之前并没有打下班卡
-		if (StringUtil.isEmpty(w.getOffSignin()) && newHHMM.compareTo(w.getOffend()) <= 0)
-			return true;
-		return false;
-
-	}
-
-	/**
-	 * 计算自动打卡
-	 */
-	public WorkModel reckonAutoWork() throws Exception {
-		WorkModel model = getPlaceWork();
-		if (model == null) return null;
-		if (StringUtil.isEmpty(model.getWorkStart()) || StringUtil.isEmpty(model.getWorkTime()) ||
-				StringUtil.isEmpty(model.getWorkend()) || StringUtil.isEmpty(model.getOffStart()) ||
-				StringUtil.isEmpty(model.getOffTime()) || StringUtil.isEmpty(model.getOffend()))
-			return null;
-		long workStart = getTimeByHHmm(model.getWorkStart());
-		long workEnd = getTimeByHHmm(model.getWorkTime());
-		long offStart = getTimeByHHmm(model.getOffTime());
-		long offEnd = getTimeByHHmm(model.getOffend());
-		if (workStart < System.currentTimeMillis() && workEnd > System.currentTimeMillis()) {
-			//公司规定范围 大于当前位置范围
-			boolean is = BaiduMapUtil.getInstence().isInWorkPlce() &&
-					StringUtil.isEmpty(model.getWorkSignin());
-			if (is)
-				return model;
-		} else if (offStart < System.currentTimeMillis() && offEnd > System.currentTimeMillis()) {
-			//公司规定范围 大于当前位置范围
-			boolean is = BaiduMapUtil.getInstence().isInWorkPlce() &&
-					StringUtil.isEmpty(model.getOffSignin());
-			if (is)
-				return model;
-		}
-		return null;
-	}
-
-	/**
-	 * 计算是否符合提醒
-	 *
-	 * @param intervalTime 轮回时间
-	 * @return
-	 */
-	public int reckonAlarm(long intervalTime) {
-		WorkModel model = getPlaceWork();
-		if (model == null) return 0;
-//        if (isOutoffWork(model)) return 1;
-		long time = getWorkAlarm(model);
-		if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= intervalTime) {
-			model.setWorkAlarm(true);
-			long i = WorkModelDao.getInstance().update(model);
-			if (i > 0)
-				return 2;
-		}
-		time = getOffAlarm(model);
-		if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= intervalTime) {
-			model.setOffAlarm(true);
-			long i = WorkModelDao.getInstance().update(model);
-			if (i > 0)
-				return 3;
-		}
-		return 0;
-	}
-
-
-	//获取当前所处于的班次
-	public WorkModel getPlaceWork() {
-		List<WorkModel> models = WorkModelDao.getInstance().query(false);//获取当天所有班次,去除迟到和早退签到数据
-		if (ListUtils.isEmpty(models)) return null;
-		for (WorkModel m : models) {
-			if (StringUtil.isEmpty(m.getOffend()) || StringUtil.isEmpty(m.getWorkStart()))
-				continue;
-			long start = getTimeByHHmm(m.getWorkStart());
-			long end = getTimeByHHmm(m.getOffend());
-			if (end > System.currentTimeMillis() && start < System.currentTimeMillis()) return m;
-		}
-		return null;
-	}
-
-
-	private long getWorkAlarm(WorkModel model) {
-		if (model == null || !StringUtil.isEmpty(model.getWorkSignin()) || model.isWorkAlarm() || StringUtil.isEmpty(model.getWorkTime()))
-			return 0;
-		int difference = CommonUtil.getSharedPreferencesInt(MyApplication.getInstance(), "ALARM_WORK_TIME", 5);//上班提前xx分钟
-		return getTimeByHHmm(model.getWorkTime()) - difference * 60000;
-	}
-
-
-	private long getOffAlarm(WorkModel model) {
-		if (model == null || !StringUtil.isEmpty(model.getOffSignin()) || model.isOffAlarm() || StringUtil.isEmpty(model.getOffTime()))
-			return 0;
-		int difference = CommonUtil.getSharedPreferencesInt(MyApplication.getInstance(), "ALARM_OFFWORK_TIME", 5);//下班延迟xx分钟
-		return getTimeByHHmm(model.getOffTime()) + difference * 60000;
-	}
-
-
-	/**
-	 * 通过时分获取当天改时间时间戳
-	 *
-	 * @param time HH:mm
-	 * @return
-	 */
-	public long getTimeByHHmm(String time) {
-		if (StringUtil.isEmpty(time)) return 0;
-		String che = DateFormatUtil.long2Str(DateFormatUtil.YMD) + " " + time + ":00";//当天下班时间
-		return DateFormatUtil.str2Long(che, DateFormatUtil.YMD_HMS);
-	}
-
-	//5.判断是否离开工作范围
-	protected boolean isOutoffWork(WorkModel model) {
-		if (!isWorkTime(model)) return false;
-		boolean is = BaiduMapUtil.getInstence().isInnerdistance() && !model.isLeaveAlarm();
-		if (is) {
-			model.setLeaveAlarm(true);
-			WorkModelDao.getInstance().update(model);
-		}
-		return is;
-	}
-
-	/*当前是否在办公时间内*/
-	private boolean isWorkTime(WorkModel model) {
-		try {
-			//此语句判空处理有问题!!! Arison
-			if (getTimeByHHmm(model.getWorkTime()) < System.currentTimeMillis() && getTimeByHHmm(model.getOffTime()) > System.currentTimeMillis())
-				return true;
-			else return false;
-		} catch (Exception e) {
-			e.printStackTrace();
-			return false;
-		}
-	}
-
-
-	public void nextNotSigninTime(WorkModel model) {
-		long nextTime = 0;
-		if (model != null) {
-			String newHHMM = DateFormatUtil.long2Str(DateFormatUtil.HM);
-			//在上班时间范围内
-			if (StringUtil.isEmpty(model.getWorkSignin()) &&
-					newHHMM.compareTo(model.getWorkTime()) <= 0 &&
-					newHHMM.compareTo(model.getWorkStart()) >= 0) {
-				LogUtil.i("计算时间");
-				long startTime = getTimeByHHmm(model.getWorkStart());
-				long workTime = getTimeByHHmm(model.getWorkTime());
-				long time = Math.max(startTime, workTime - 1000 * 30 * 60);
-				while (true) {
-					if (time > workTime) {
-						break;
-					} else if (time > System.currentTimeMillis()) {
-						nextTime = time;
-						break;
-					}
-					time += 5 * 60 * 1000;
-				}
-			} else if (StringUtil.isEmpty(model.getOffSignin()) &&
-					newHHMM.compareTo(model.getOffTime()) >= 0 &&
-					newHHMM.compareTo(model.getOffend()) <= 0) {//在下班时间范围内
-				long time = getTimeByHHmm(model.getOffTime());
-				long endTime = time + 1000 * 30 * 60;
-				while (true) {
-					if (time > endTime) {
-						break;
-					} else if (time > System.currentTimeMillis()) {
-						nextTime = time;
-						break;
-					}
-					time += 5 * 60 * 1000;
-				}
-			}
-		}
-		if (nextTime != 0) {
-			AlarmUtil.startAlarm(AlarmUtil.ID_WORK, AlarmUtil.ACTION_WORK, nextTime);
-		}
-	}
-}

+ 2 - 0
app_modular/apputils/src/main/java/com/modular/apputils/utils/SwitchUtil.java

@@ -1,6 +1,8 @@
 package com.modular.apputils.utils;
 
 
+import com.common.config.BaseConfig;
+
 /**
  * Created by Bitlike on 2017/11/22.
  */

+ 1 - 1
app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/adapter/CycleCountAdapter.java

@@ -56,7 +56,7 @@ public class CycleCountAdapter extends BaseAdapter {
         }
         List<CycleCount.Data> datas = null;
         if (model.isExpand()) {
-            holder.expandImg.setImageResource(R.drawable.ic_menu_retract);
+            holder.expandImg.setImageResource(R.drawable.ic_menu_spread);
             datas = model.getDatas();
         } else {
             holder.expandImg.setImageResource(R.drawable.ic_menu_retract);

+ 2 - 2
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/adapter/WorkAdapter.java

@@ -109,14 +109,14 @@ public class WorkAdapter extends RecyclerView.Adapter<WorkAdapter.ViewHoler> {
         if (StringUtil.isEmpty(workTag)) {
             holder.work_tag.setVisibility(View.GONE);
             holder.work_supple.setVisibility(View.GONE);
-        } else {//TODO 进入申述
+        } else {
             bindTag(true, workTag, model, holder);
         }
         String offTag = getOffTag(model, isFinal);
         if (StringUtil.isEmpty(offTag)) {
             holder.off_tag.setVisibility(View.GONE);
             holder.off_supple.setVisibility(View.GONE);
-        } else {//TODO 进入申述
+        } else {
             bindTag(false, offTag, model, holder);
         }
     }

+ 593 - 643
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/WorkPresenter.java

@@ -22,6 +22,7 @@ import com.core.api.wxapi.ApiPlatform;
 import com.core.api.wxapi.ApiUtils;
 import com.core.app.MyApplication;
 import com.core.dao.UserDao;
+import com.core.dao.WorkLocationDao;
 import com.core.dao.work.WorkModelDao;
 import com.core.model.User;
 import com.core.model.WorkLocationModel;
@@ -52,653 +53,602 @@ import java.util.Map;
  * Created by Bitliker on 2016/12/12.
  */
 public class WorkPresenter implements OnHttpResultListener, IWorkPresenter {
-	private final int WORK_LOG = 0x12;
-	private final int WORK_DATA = 0x11;
-	private final int MAC_VAL = 0x13;
-	private final int LOAD_MAC = 0x14;
-	private final int SIGNING = 0x15;//签到
-	private final int LOAD_WORK_SET = 0x16;//获取考勤设置
-	private final int ADDRESS_CHANGE = 0x14;//地址微调
-
-	private double distance = -1;
-
-	//本地位置
-	private double longitude;
-	private double latitude;
-	private String loaction;
-	private String address;
-
-	private List<WorkLocationModel> locationList;
-	private WorkLocationModel companyLocation;
-
-	private boolean isMacInNet = false;//服务器上是否有mac地址
-	private boolean isSubmiting = false;
-
-	private String macAddress;
-	private boolean isFree = false;
-	private String days;
-	private String name;
-
-
-	private IWorkView iWorkView;
-	private boolean isB2b;
-
-	public WorkPresenter(IWorkView iWorkView, String macAddress) {
-		if (iWorkView == null) new NullPointerException("iWorkView not be null ");
-		this.iWorkView = iWorkView;
-		this.macAddress = macAddress;
-	}
-
-	private void loadLog(ArrayList<WorkModel> models, long time) {
-		if (iWorkView != null)
-			iWorkView.showLoading();
-		String date = TimeUtils.s_long_2_str(time);
-		Map<String, Object> param = new HashMap<>();
-		String code = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username");
-		param.put("currentMaster", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
-		if (isB2b)
-			param.put("pageNumber", 1);
-		else
-			param.put("page", 1);
-		param.put("pageSize", 1000);
-		if (!isB2b)
-			param.put("condition", "cl_emcode='" + code + "' and to_char(cl_time,'yyyy-MM-dd')='" + date + "'");
-		else
-			param.put("date", DateFormatUtil.long2Str(time, "yyyyMMdd"));
-		param.put("caller", "CardLog");
-		param.put("emcode", code);
-		param.put("master", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
-		Bundle bundle = new Bundle();
-		bundle.putParcelableArrayList("models", models);
-		bundle.putLong("time", time);
-		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_record_url :
-				"mobile/oa/workdata.action";
-		Request request = new Request.Bulider()
-				.setUrl(url)
-				.setWhat(WORK_LOG)
-				.setMode(Request.Mode.GET)
-				.setParam(param)
-				.setBundle(bundle)
-				.bulid();
-		OAHttpHelper.getInstance().requestHttp(request, this);
-	}
-
-	//判断mac地址是否已经上传
-	private void getMacByNet() {
-		if (iWorkView != null) iWorkView.showLoading();
-		//获取网络数据
-		Map<String, Object> param = new HashMap<>();
-		param.put("macaddress", macAddress);
-		param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-		String url = "mobile/queryMobileMac.action";
-
-		Request request = new Request.Bulider()
-				.setUrl(url)
-				.setWhat(LOAD_MAC)
-				.setMode(Request.Mode.GET)
-				.setParam(param)
-				.bulid();
-		OAHttpHelper.getInstance().requestHttp(request, this);
-
-	}
-
-	private void validatorMac(ArrayList<WorkModel> models, String macAddress) {
-		isSubmiting = true;
-		if (iWorkView != null) iWorkView.showLoading();
-		Map<String, Object> param = new HashMap<>();
-		param.put("macAddress", macAddress);
-		param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-		Bundle bundle = new Bundle();
-		bundle.putParcelableArrayList("models", models);
-
-		String url = "mobile/addMobileMac.action";
-		Request request = new Request.Bulider()
-				.setUrl(url)
-				.setWhat(MAC_VAL)
-				.setMode(Request.Mode.POST)
-				.setParam(param)
-				.setBundle(bundle)
-				.bulid();
-		OAHttpHelper.getInstance().requestHttp(request, this);
-
-	}
-
-	//签到
-	private void signinWork(Bundle bundle, String code) {
-		if (iWorkView != null) iWorkView.showLoading();
-		Map<String, Object> param = new HashMap<>();
-		Map<String, Object> form = new HashMap<>();
-
-		//如果是erp就上传code
-		if (!isB2b)
-			form.put("cl_code", code);
-		if (StringUtil.isEmpty(address))
-			address = PreferenceUtils.getString("bdaddress");
-		String phone = MyApplication.getInstance().mLoginUser.getTelephone();
-		if (StringUtil.isEmpty(phone)) {
-			String userId = MyApplication.getInstance().mLoginUser.getUserId();
-			if (!StringUtil.isEmpty(userId)) {
-				User user = UserDao.getInstance().getUserByUserId(userId);
-				phone = user.getTelephone();
-			} else
-				phone = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "user_phone");
-		}
-		String emCode = CommonUtil.getEmcode();
-		String emname = CommonUtil.getName();
-		if (StringUtil.isEmpty(loaction))
-			loaction = PreferenceUtils.getString("bdlocation");
-		form.put("cl_address", address);//地址
-		form.put("cl_phone", phone);    //电话号码
-		form.put("cl_distance", distance);//距离
-		form.put("cl_emname", emname);  //名字
-		form.put("cl_location", loaction); //位置
-		form.put("cl_emcode", emCode);//编号 erp员工编号  b2b  enuu
-		if (isB2b) {
-			form.put("enuu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu"));
-			form.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu"));
-		}
-		String formStore = JSONUtil.map2JSON(form);
-		param.put("formStore", formStore);
-		if (!isB2b)
-			param.put("caller", "CardLog");
-
-		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_worksignin_url : "mobile/saveCardLog.action";
-		Request request = new Request.Bulider()
-				.setUrl(url)
-				.setWhat(SIGNING)
-				.setMode(Request.Mode.POST)
-				.setParam(param)
-				.setBundle(bundle)
-				.bulid();
-		OAHttpHelper.getInstance().requestHttp(request, this);
-	}
-
-
-	/*获取高级设置*/
-	private void loadWorkSet(long time) {
-		if (iWorkView != null)
-			iWorkView.showLoading();
-		//获取考勤高级设置时间请求
-		Map<String, Object> param = new HashMap<>();
-		Bundle bundle = new Bundle();
-		bundle.putLong("time", time);
-		if (!isB2b)
-			param.put("code", 1);
-		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().get_plat_senior_setting_url :
-				"/mobile/getconfigs.action";
-		Request request = new Request.Bulider()
-				.setUrl(url)
-				.setWhat(LOAD_WORK_SET)
-				.setMode(Request.Mode.GET)
-				.setParam(param)
-				.setBundle(bundle)
-				.bulid();
-		OAHttpHelper.getInstance().requestHttp(request, this);
-
-	}
-
-	/*请求班次数据*/
-	private void loadWorkData(long time) {
-		Map<String, Object> param = new HashMap<>();
-		param.put("date", DateFormatUtil.long2Str(time, "yyyyMMdd"));
-		param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-		Bundle bundle = new Bundle();
-		bundle.putLong("time", time);
-		String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_schedule_url :
-				"mobile/getWorkDate.action";
-		Request request = new Request.Bulider()
-				.setUrl(url)
-				.setWhat(WORK_DATA)
-				.setMode(Request.Mode.GET)
-				.setParam(param)
-				.setBundle(bundle)
-				.bulid();
-		OAHttpHelper.getInstance().requestHttp(request, this);
-	}
-
-	public void upDateLocation() {
-		try {
-			setBaiduLocation();
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-
-	//设置位置信息
-	private void setBaiduLocation() throws Exception {
-		boolean isLocation = MyApplication.getInstance().getBdLocationHelper().locationOk();
-		if (!isLocation) {
-			if (iWorkView != null) {
-				iWorkView.showNotLocation();
-			}
-			return;
-		}
-		longitude = MyApplication.getInstance().getBdLocationHelper().getLongitude();
-		latitude = MyApplication.getInstance().getBdLocationHelper().getLatitude();
-		loaction = MyApplication.getInstance().getBdLocationHelper().getName();
-		address = MyApplication.getInstance().getBdLocationHelper().getAddress();
-		if (iWorkView == null) return;
-		distance = -1;
-		iWorkView.showDistance(getDistance());
-		iWorkView.showLocation(address);
-
-	}
-
-	//获取与公司距离
-	private double getDistance() {
-		try {
-			if (ListUtils.isEmpty(locationList)) return -1;
-			for (WorkLocationModel b : locationList) {
-				String dis = BaiduMapUtil.getInstence().getDistance(
-						new LatLng(b.getLocation().longitude, b.getLocation().latitude)
-						, new LatLng(latitude, longitude));
-				if (StringUtil.isEmpty(dis)) continue;
-				if (distance == -1 || distance > Double.valueOf(dis)) {
-					distance = Double.valueOf(dis);
-					companyLocation = b;
-				}
-			}
-			return distance;
-		} catch (Exception e) {
-			return -1;
-		}
-	}
-
-
-	public void gotoLocationActivity(Activity ct) {
-		if (companyLocation == null) {
-			iWorkView.showToast(R.string.not_addr_to_select, R.color.load_error);
-			return;
-		}
-		Intent intent = new Intent(ct, SearchLocationActivity.class);
-		SearchPoiParam poiParam = new SearchPoiParam();
-		poiParam.setType(1);
-		poiParam.setTitle(MyApplication.getInstance().getResources().getString(R.string.unoffice));
-		poiParam.setRadius(300);
-		poiParam.setShowRange(companyLocation.getValidrange());
-		poiParam.setContrastLatLng(new LatLng(companyLocation.getLocation().longitude, companyLocation.getLocation().latitude));
-		poiParam.setResultCode(ADDRESS_CHANGE);
-		poiParam.setDistanceTag(MyApplication.getInstance().getResources().getString(R.string.rice));
-		intent.putExtra("data", poiParam);
-		ct.startActivityForResult(intent, ADDRESS_CHANGE);
-	}
-
-	private void getPoi() {
-		if (companyLocation == null) return;
-		//公司地址必须反过来
-		final LatLng compayLng = new LatLng(companyLocation.getLongitude(), companyLocation.getLatitude());
-		LatLng latLng = new LatLng(latitude, longitude);
-		BaiduMapUtil.getInstence().getNearInfo(500, 0, latLng,
-				"公司", new BaiduMapUtil.OnSearchPoiListener() {
-					@Override
-					public void result(SearchResult result) {
-						if (result instanceof PoiResult) {
-							List<PoiInfo> pois = ((PoiResult) result).getAllPoi();
-							if (ListUtils.isEmpty(pois) || companyLocation == null) return;
-							for (int i = 0; i < pois.size(); i++) {
-								double dis = BaiduMapUtil.getInstence().distance(compayLng, pois.get(i).location);
-								if (companyLocation.getValidrange() < dis) {
-									pois.remove(i);
-									i--;
-								}
-							}
-							if (iWorkView != null) iWorkView.setPois(pois, compayLng);
-						}
-					}
-				});
-	}
-
-
-	/**
-	 * 处理打卡签到
-	 *
-	 * @param isJSON
-	 * @param message
-	 * @param time
-	 */
-	private void handlerWorkData(boolean isJSON, String message, long time) throws Exception {
-		if (!isJSON) {
-			if (iWorkView != null) {
-				iWorkView.showToast(message, R.color.load_error);
-				showModels(null, time);
-			}
-			return;
-		}
-		JSONObject object = null;
-		object = JSON.parseObject(message);
-		days = JSONUtil.getText(object, "wd_day", "day");
-		name = JSONUtil.getText(object, "wd_name", "name");
-		locationList = WorkHandlerUtil.handerLocation(object, isB2b);
-		//获取当前最近的位置信息
-		if (!ListUtils.isEmpty(locationList)) {
-			float dis = 0;
-			boolean first = true;
-			for (WorkLocationModel location : locationList) {
-				float distance = BaiduMapUtil.getInstence().autoDistance(location.getLocation());
-				if (first || dis > distance) {
-					dis = distance;
-					companyLocation = location;
-				}
-			}
-		} else {
-			companyLocation = null;
-		}
-
-		ArrayList<WorkModel> models = WorkHandlerUtil.handlerWorkData(object, isB2b);
-		try {
-			if (ListUtils.isEmpty(locationList) && iWorkView != null && !ListUtils.isEmpty(models))
-				iWorkView.showToast(R.string.not_addr_message, R.color.load_warning);
-			else getPoi();
-			setBaiduLocation();
-		} catch (ClassCastException e) {
-			if (e != null)
-				LogUtil.i("handlerWorkData ClassCastException=" + e.getMessage());
-		} catch (Exception e) {
-			if (e != null)
-				LogUtil.i("handlerWorkData Exception=" + e.getMessage());
-		}
-		//b2b平台接口出现异常
-		Object ifNeedSignCard = object.get("ifNeedSignCard");
-		if (ifNeedSignCard instanceof Boolean)
-			isFree = !((boolean) ifNeedSignCard);
-		else if (ifNeedSignCard instanceof String)
-			isFree = !"是".equals(ifNeedSignCard);
-		if (isFree) {
-			loadLog(null, time);
-			return;
-		}
-		if (ListUtils.isEmpty(models)) {
-			if (iWorkView != null) {
-				iWorkView.showToast(R.string.not_work_message, R.color.load_error);
-				showModels(null, time);
-			}
-			return;
-		}
-		loadLog(models, time);
-	}
-
-	/**
-	 * 处理打卡签到列表,建议在线程钟使用
-	 *
-	 * @param isJSON  是否是json数据
-	 * @param message 返回信息
-	 * @param logTime 日期时间戳
-	 * @throws Exception
-	 */
-	private void handlerWorkLog(boolean isJSON, String message, final ArrayList<WorkModel> workModels, long logTime) throws Exception {
-		if (!isJSON || (!isFree && ListUtils.isEmpty(workModels))) {
-			showModels(workModels, logTime);
-			return;
-		}
-		JSONObject object = JSON.parseObject(message);
-		ArrayList<WorkModel> models;
-		if (!isFree) {
-			models = WorkHandlerUtil.handlerWorkLog(object, workModels);
-		} else {
-			models = WorkHandlerUtil.handlerFreeLog(object);
-		}
-		showModels(models, logTime);
-	}
-
-
-	private void showModels(List<WorkModel> models, long longTime) {
-		if (ListUtils.isEmpty(models)) {
-			WorkModelDao.getInstance().clearByDate(longTime);
-		} else {
-			WorkModelDao.getInstance().createOrUpdata(models, longTime);
-		}
-		List<WorkModel> chche = WorkModelDao.getInstance().query(true, longTime);
-		Collections.sort(chche, new Comparator<WorkModel>() {
-			@Override
-			public int compare(WorkModel lhs, WorkModel rhs) {
-				return lhs.getId() - rhs.getId();
-			}
-		});
-		iWorkView.showModel(isFree, chche);
-		iWorkView.dimssLoading();
-	}
-
-
-	private long subMitTime;
-
-	/**
-	 * 判断是否符合签到
-	 *
-	 * @param models
-	 * @return
-	 */
-	private boolean isSubmitAble(ArrayList<WorkModel> models) {
-		if (ListUtils.isEmpty(models) && !isFree) {
-			if (iWorkView != null)
-				iWorkView.showToast(R.string.not_work_message, R.color.load_warning);
-			return false;
-		}
-		if (isSubmiting) {
-			if (iWorkView != null)
-				iWorkView.showToast(R.string.not_signin_agin, R.color.load_warning);
-			return false;
-		} else if (companyLocation == null || companyLocation.getValidrange() < distance) {
-			if (iWorkView != null)
-				iWorkView.showToast(R.string.too_long, R.color.load_warning);
-			return false;
-		} else if (subMitTime != 0 && (System.currentTimeMillis() - subMitTime) < (20 * 1000)) {
-			if (iWorkView != null)
-				iWorkView.showToast(R.string.not_signin_agin, R.color.load_warning);
-			return false;
-		} else if (!MyApplication.getInstance().isNetworkActive()) {
-			if (iWorkView != null)
-				iWorkView.showToast(R.string.networks_out, R.color.load_warning);
-			return false;
-		}
-		return true;
-	}
-
-
-	/********************
-	 * 对外接口
-	 *********************************/
-
-	@Override
-	public void start(boolean canShowTocat) {
-		// 判断当前为平台用户;
-		isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
-		MyApplication.getInstance().getBdLocationHelper().requestLocation();
-		if (MyApplication.getInstance().isNetworkActive()) {
-
+    private final int WORK_LOG = 0x12;
+    private final int WORK_DATA = 0x11;
+    private final int SIGNING = 0x15;//签到
+    private final int LOAD_WORK_SET = 0x16;//获取考勤设置
+    private final int ADDRESS_CHANGE = 0x14;//地址微调
+
+    private double distance = -1;
+
+    //本地位置
+    private double longitude;
+    private double latitude;
+    private String loaction;
+    private String address;
+
+    private List<WorkLocationModel> locationList;
+    private WorkLocationModel companyLocation;
+
+
+    private boolean isSubmiting = false;
+
+
+    private boolean isFree = false;
+    private String days;
+    private String name;
+
+
+    private IWorkView iWorkView;
+    private boolean isB2b;
+
+    public WorkPresenter(IWorkView iWorkView, String macAddress) {
+        if (iWorkView == null) new NullPointerException("iWorkView not be null ");
+        this.iWorkView = iWorkView;
+
+    }
+
+    private void loadLog(ArrayList<WorkModel> models, long time) {
+        if (iWorkView != null)
+            iWorkView.showLoading();
+        String date = TimeUtils.s_long_2_str(time);
+        Map<String, Object> param = new HashMap<>();
+        String code = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username");
+        param.put("currentMaster", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        if (isB2b)
+            param.put("pageNumber", 1);
+        else
+            param.put("page", 1);
+        param.put("pageSize", 1000);
+        if (!isB2b)
+            param.put("condition", "cl_emcode='" + code + "' and to_char(cl_time,'yyyy-MM-dd')='" + date + "'");
+        else
+            param.put("date", DateFormatUtil.long2Str(time, "yyyyMMdd"));
+        param.put("caller", "CardLog");
+        param.put("emcode", code);
+        param.put("master", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        Bundle bundle = new Bundle();
+        bundle.putParcelableArrayList("models", models);
+        bundle.putLong("time", time);
+        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_record_url :
+                "mobile/oa/workdata.action";
+        Request request = new Request.Bulider()
+                .setUrl(url)
+                .setWhat(WORK_LOG)
+                .setMode(Request.Mode.GET)
+                .setParam(param)
+                .setBundle(bundle)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+    }
+
+
+    //签到
+    private void signinWork(Bundle bundle, String code) {
+        if (iWorkView != null) iWorkView.showLoading();
+        Map<String, Object> param = new HashMap<>();
+        Map<String, Object> form = new HashMap<>();
+
+        //如果是erp就上传code
+        if (!isB2b)
+            form.put("cl_code", code);
+        if (StringUtil.isEmpty(address))
+            address = PreferenceUtils.getString("bdaddress");
+        String phone = MyApplication.getInstance().mLoginUser.getTelephone();
+        if (StringUtil.isEmpty(phone)) {
+            String userId = MyApplication.getInstance().mLoginUser.getUserId();
+            if (!StringUtil.isEmpty(userId)) {
+                User user = UserDao.getInstance().getUserByUserId(userId);
+                phone = user.getTelephone();
+            } else
+                phone = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "user_phone");
+        }
+        String emCode = CommonUtil.getEmcode();
+        String emname = CommonUtil.getName();
+        if (StringUtil.isEmpty(loaction))
+            loaction = PreferenceUtils.getString("bdlocation");
+        form.put("cl_address", address);//地址
+        form.put("cl_phone", phone);    //电话号码
+        form.put("cl_distance", distance);//距离
+        form.put("cl_emname", emname);  //名字
+        form.put("cl_location", loaction); //位置
+        form.put("cl_emcode", emCode);//编号 erp员工编号  b2b  enuu
+        if (isB2b) {
+            form.put("enuu", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "companyEnUu"));
+            form.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance().getApplicationContext(), "b2b_uu"));
+        }
+        String formStore = JSONUtil.map2JSON(form);
+        param.put("formStore", formStore);
+        if (!isB2b)
+            param.put("caller", "CardLog");
+
+        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_worksignin_url : "mobile/saveCardLog.action";
+        Request request = new Request.Bulider()
+                .setUrl(url)
+                .setWhat(SIGNING)
+                .setMode(Request.Mode.POST)
+                .setParam(param)
+                .setBundle(bundle)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+    }
+
+
+    /*获取高级设置*/
+    private void loadWorkSet(long time) {
+        if (iWorkView != null)
+            iWorkView.showLoading();
+        //获取考勤高级设置时间请求
+        Map<String, Object> param = new HashMap<>();
+        Bundle bundle = new Bundle();
+        bundle.putLong("time", time);
+        if (!isB2b)
+            param.put("code", 1);
+        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().get_plat_senior_setting_url :
+                "/mobile/getconfigs.action";
+        Request request = new Request.Bulider()
+                .setUrl(url)
+                .setWhat(LOAD_WORK_SET)
+                .setMode(Request.Mode.GET)
+                .setParam(param)
+                .setBundle(bundle)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+
+    }
+
+    /*请求班次数据*/
+    private void loadWorkData(long time) {
+        Map<String, Object> param = new HashMap<>();
+        param.put("date", DateFormatUtil.long2Str(time, "yyyyMMdd"));
+        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        Bundle bundle = new Bundle();
+        bundle.putLong("time", time);
+        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_schedule_url :
+                "mobile/getWorkDate.action";
+        Request request = new Request.Bulider()
+                .setUrl(url)
+                .setWhat(WORK_DATA)
+                .setMode(Request.Mode.GET)
+                .setParam(param)
+                .setBundle(bundle)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+    }
+
+    public void upDateLocation() {
+        try {
+            setBaiduLocation();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    //设置位置信息
+    private void setBaiduLocation() throws Exception {
+        boolean isLocation = MyApplication.getInstance().getBdLocationHelper().locationOk();
+        if (!isLocation) {
+            if (iWorkView != null) {
+                iWorkView.showNotLocation();
+            }
+            return;
+        }
+        longitude = MyApplication.getInstance().getBdLocationHelper().getLongitude();
+        latitude = MyApplication.getInstance().getBdLocationHelper().getLatitude();
+        loaction = MyApplication.getInstance().getBdLocationHelper().getName();
+        address = MyApplication.getInstance().getBdLocationHelper().getAddress();
+        if (iWorkView == null) return;
+        distance = -1;
+        iWorkView.showDistance(getDistance());
+        iWorkView.showLocation(address);
+
+    }
+
+    //获取与公司距离
+    private double getDistance() {
+        try {
+            if (ListUtils.isEmpty(locationList)) return -1;
+            for (WorkLocationModel b : locationList) {
+                String dis = BaiduMapUtil.getInstence().getDistance(
+                        new LatLng(b.getLocation().longitude, b.getLocation().latitude)
+                        , new LatLng(latitude, longitude));
+                if (StringUtil.isEmpty(dis)) continue;
+                if (distance == -1 || distance > Double.valueOf(dis)) {
+                    distance = Double.valueOf(dis);
+                    companyLocation = b;
+                }
+            }
+            return distance;
+        } catch (Exception e) {
+            return -1;
+        }
+    }
+
+
+    public void gotoLocationActivity(Activity ct) {
+        if (companyLocation == null) {
+            iWorkView.showToast(R.string.not_addr_to_select, R.color.load_error);
+            return;
+        }
+        Intent intent = new Intent(ct, SearchLocationActivity.class);
+        SearchPoiParam poiParam = new SearchPoiParam();
+        poiParam.setType(1);
+        poiParam.setTitle(MyApplication.getInstance().getResources().getString(R.string.unoffice));
+        poiParam.setRadius(300);
+        poiParam.setShowRange(companyLocation.getValidrange());
+        poiParam.setContrastLatLng(new LatLng(companyLocation.getLocation().longitude, companyLocation.getLocation().latitude));
+        poiParam.setResultCode(ADDRESS_CHANGE);
+        poiParam.setDistanceTag(MyApplication.getInstance().getResources().getString(R.string.rice));
+        intent.putExtra("data", poiParam);
+        ct.startActivityForResult(intent, ADDRESS_CHANGE);
+    }
+
+    private void getPoi() {
+        if (companyLocation == null) return;
+        //公司地址必须反过来
+        final LatLng compayLng = new LatLng(companyLocation.getLongitude(), companyLocation.getLatitude());
+        LatLng latLng = new LatLng(latitude, longitude);
+        BaiduMapUtil.getInstence().getNearInfo(500, 0, latLng,
+                "公司", new BaiduMapUtil.OnSearchPoiListener() {
+                    @Override
+                    public void result(SearchResult result) {
+                        if (result instanceof PoiResult) {
+                            List<PoiInfo> pois = ((PoiResult) result).getAllPoi();
+                            if (ListUtils.isEmpty(pois) || companyLocation == null) return;
+                            for (int i = 0; i < pois.size(); i++) {
+                                double dis = BaiduMapUtil.getInstence().distance(compayLng, pois.get(i).location);
+                                if (companyLocation.getValidrange() < dis) {
+                                    pois.remove(i);
+                                    i--;
+                                }
+                            }
+                            if (iWorkView != null) iWorkView.setPois(pois, compayLng);
+                        }
+                    }
+                });
+    }
+
+
+    /**
+     * 处理打卡签到
+     *
+     * @param isJSON
+     * @param message
+     * @param time
+     */
+    private void handlerWorkData(boolean isJSON, String message, long time) throws Exception {
+        if (!isJSON) {
+            if (iWorkView != null) {
+                iWorkView.showToast(message, R.color.load_error);
+                showModels(null, time);
+            }
+            return;
+        }
+        JSONObject object = null;
+        object = JSON.parseObject(message);
+        days = JSONUtil.getText(object, "wd_day", "day");
+        name = JSONUtil.getText(object, "wd_name", "name");
+        initLocation(WorkHandlerUtil.handerLocation(object, isB2b));
+        ArrayList<WorkModel> models = WorkHandlerUtil.handlerWorkData(object, isB2b);
+        try {
+            if (ListUtils.isEmpty(locationList) && iWorkView != null && !ListUtils.isEmpty(models))
+                iWorkView.showToast(R.string.not_addr_message, R.color.load_warning);
+            else getPoi();
+            setBaiduLocation();
+        } catch (ClassCastException e) {
+            if (e != null)
+                LogUtil.i("handlerWorkData ClassCastException=" + e.getMessage());
+        } catch (Exception e) {
+            if (e != null)
+                LogUtil.i("handlerWorkData Exception=" + e.getMessage());
+        }
+        //b2b平台接口出现异常
+        Object ifNeedSignCard = object.get("ifNeedSignCard");
+        if (ifNeedSignCard instanceof Boolean)
+            isFree = !((boolean) ifNeedSignCard);
+        else if (ifNeedSignCard instanceof String)
+            isFree = !"是".equals(ifNeedSignCard);
+        if (isFree) {
+            loadLog(null, time);
+            return;
+        }
+        if (ListUtils.isEmpty(models)) {
+            if (iWorkView != null) {
+                iWorkView.showToast(R.string.not_work_message, R.color.load_error);
+                showModels(null, time);
+            }
+            return;
+        }
+        loadLog(models, time);
+    }
+
+
+    private void initLocation(List<WorkLocationModel> locationList) {
+        this.locationList = locationList;
+        //获取当前最近的位置信息
+        if (!ListUtils.isEmpty(locationList)) {
+            float dis = 0;
+            boolean first = true;
+            for (WorkLocationModel location : locationList) {
+                float distance = BaiduMapUtil.getInstence().autoDistance(location.getLocation());
+                if (first || dis > distance) {
+                    dis = distance;
+                    companyLocation = location;
+                }
+            }
+        } else {
+            companyLocation = null;
+        }
+    }
+
+    /**
+     * 处理打卡签到列表,建议在线程钟使用
+     *
+     * @param isJSON  是否是json数据
+     * @param message 返回信息
+     * @param logTime 日期时间戳
+     * @throws Exception
+     */
+    private void handlerWorkLog(boolean isJSON, String message, final ArrayList<WorkModel> workModels, long logTime) throws Exception {
+        if (!isJSON || (!isFree && ListUtils.isEmpty(workModels))) {
+            showModels(workModels, logTime);
+            return;
+        }
+        JSONObject object = JSON.parseObject(message);
+        ArrayList<WorkModel> models;
+        if (!isFree) {
+            models = WorkHandlerUtil.handlerWorkLog(object, workModels);
+        } else {
+            models = WorkHandlerUtil.handlerFreeLog(object);
+        }
+        showModels(models, logTime);
+    }
+
+
+    private void showModels(List<WorkModel> models, long longTime) {
+        if (ListUtils.isEmpty(models)) {
+            WorkModelDao.getInstance().clearByDate(longTime);
+        } else {
+            WorkModelDao.getInstance().createOrUpdata(models, longTime);
+        }
+        showModels(WorkModelDao.getInstance().query(true, longTime));
+
+    }
+
+    private void showModels(List<WorkModel> models) {
+        Collections.sort(models, new Comparator<WorkModel>() {
+            @Override
+            public int compare(WorkModel lhs, WorkModel rhs) {
+                return lhs.getId() - rhs.getId();
+            }
+        });
+        iWorkView.showModel(isFree, models);
+        iWorkView.dimssLoading();
+    }
+
+
+    private long subMitTime;
+
+    /**
+     * 判断是否符合签到
+     *
+     * @param models
+     * @return
+     */
+    private boolean isSubmitAble(ArrayList<WorkModel> models) {
+        if (ListUtils.isEmpty(models) && !isFree) {
+            if (iWorkView != null)
+                iWorkView.showToast(R.string.not_work_message, R.color.load_warning);
+            return false;
+        }
+        if (isSubmiting) {
+            if (iWorkView != null)
+                iWorkView.showToast(R.string.not_signin_agin, R.color.load_warning);
+            return false;
+        } else if (companyLocation == null || companyLocation.getValidrange() < distance) {
+            if (iWorkView != null)
+                iWorkView.showToast(R.string.too_long, R.color.load_warning);
+            return false;
+        } else if (subMitTime != 0 && (System.currentTimeMillis() - subMitTime) < (20 * 1000)) {
+            if (iWorkView != null)
+                iWorkView.showToast(R.string.not_signin_agin, R.color.load_warning);
+            return false;
+        } else if (!MyApplication.getInstance().isNetworkActive()) {
+            if (iWorkView != null)
+                iWorkView.showToast(R.string.networks_out, R.color.load_warning);
+            return false;
+        }
+        return true;
+    }
+
+
+    /********************
+     * 对外接口
+     *********************************/
+
+    @Override
+    public void start(boolean canShowTocat) {
+        // 判断当前为平台用户;
+        isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
+        MyApplication.getInstance().getBdLocationHelper().requestLocation();
+        if (MyApplication.getInstance().isNetworkActive()) {
 //            if (!isB2b)  //TODO 去除手机mac验证
 //                getMacByNet();
-			loadWorkData(System.currentTimeMillis(), canShowTocat);
-		} else if (canShowTocat) {
-			iWorkView.showToast(R.string.networks_out, R.color.load_warning);
-		}
-	}
-
-
-	public void loadWorkData(long time, boolean canShowTocat) {
-		if (!MyApplication.getInstance().isNetworkActive() && canShowTocat) {
-			iWorkView.showToast(R.string.networks_out, R.color.load_warning);
-			return;
-		}
-		if (isB2b)
-			loadWorkData(time);//TODO 如果是b2b的情况就先下拉打卡,因为没有排班设计只有默认班次
-		else
-			loadWorkSet(time);
-	}
-
-
-	@Override
-	public void submit(ArrayList<WorkModel> models, String macAddress) {
-		if (isSubmitAble(models)) {
-			if (isB2b) {
-				Bundle bundle = new Bundle();
-				bundle.putParcelableArrayList("models", models);
-				signinWork(bundle, "");
-			} else {
-				submitWork(models, macAddress);
-			}
+            loadWorkData(System.currentTimeMillis(), canShowTocat);
+        } else if (canShowTocat) {
+            iWorkView.showToast(R.string.networks_out, R.color.load_warning);
+        }
+        local();
+    }
+
+
+    public void loadWorkData(long time, boolean canShowTocat) {
+        if (!MyApplication.getInstance().isNetworkActive() && canShowTocat) {
+            iWorkView.showToast(R.string.networks_out, R.color.load_warning);
+            return;
+        }
+        if (isB2b) {
+            loadWorkData(time);
+        } else {
+            loadWorkSet(time);
+        }
+    }
+
+    private void local() {
+        initLocation(WorkLocationDao.getInstance().queryByEnCode());
+        List<WorkModel> localModel = WorkModelDao.getInstance().query(true);
+        if (!ListUtils.isEmpty(localModel)) {
+            iWorkView.showModel(isFree, localModel);
+        }
+    }
+
+    @Override
+    public void submit(ArrayList<WorkModel> models, String macAddress) {
+        if (isSubmitAble(models)) {
+            if (isB2b) {
+                Bundle bundle = new Bundle();
+                bundle.putParcelableArrayList("models", models);
+                signinWork(bundle, "");
+            } else {
+                submitWork(models, macAddress);
+            }
 //            else {
 //                if (iWorkView != null)
 //                    iWorkView.showFristMac();
 //            }
-		}
-	}
-
-	public void submitByFrist(ArrayList<WorkModel> models, String macAddress) {
-		if (isSubmitAble(models)) {
-			submitWork(models, macAddress);
-		}
-	}
-
-	/**
-	 * 提交打卡
-	 *
-	 * @param models     班次以及打卡记录数据
-	 * @param macAddress mac地址
-	 */
-	private void submitWork(final ArrayList<WorkModel> models, String macAddress) {
-		subMitTime = System.currentTimeMillis();
-		final Bundle bundle = new Bundle();
-		bundle.putParcelableArrayList("models", models);
-		if (isB2b) {
-			signinWork(bundle, "");
-		} else {
-			CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
-				@Override
-				public void result(boolean isOk, int result, String message) {
-					signinWork(bundle, message);
-				}
-			});
-
-			//validatorMac(models, macAddress);//TODO 去除mac地址验证
-		}
-	}
-
-
-	/**
-	 * 更改位置信息
-	 *
-	 * @param poi 位置信息
-	 */
-	public void changPoi(PoiInfo poi) {
-		loaction = StringUtil.isEmpty(poi.name) ? "" : poi.name;//位置名称
-		address = StringUtil.isEmpty(poi.address) ? "" : poi.address;
-		latitude = poi.location.latitude;
-		longitude = poi.location.longitude;
-		if (iWorkView == null) return;
-		iWorkView.showLocation(address);
-		distance = -1;
-		iWorkView.showDistance(getDistance());
-	}
-
-
-	@Override
-	public void result(int what, boolean isJSON, String message, final Bundle bundle) {
-		try {
-			ArrayList<WorkModel> models = null;
-			if (iWorkView != null) iWorkView.dimssLoading();
-			switch (what) {
-				case LOAD_WORK_SET://获取打卡设置
-					long t = System.currentTimeMillis();
-					if (bundle != null) t = bundle.getLong("time");
-					if (isJSON)
-						WorkHandlerUtil.handlerWorkSet(JSON.parseObject(message));
-					loadWorkData(t);
-					break;
-				case WORK_DATA://打卡班次
-					long time = System.currentTimeMillis();
-					if (bundle != null) time = bundle.getLong("time");
-					handlerWorkData(isJSON, message, time);
-					break;
-				case WORK_LOG://打卡列表
-					long logTime = System.currentTimeMillis();
-					if (bundle != null) models = bundle.getParcelableArrayList("models");
-					if (bundle != null) logTime = bundle.getLong("time");
-					handlerWorkLog(isJSON, message, models, logTime);
-					break;
-				case MAC_VAL://判断mac地址
-					if (isJSON && JSON.parseObject(message).containsKey("success") &&
-							JSON.parseObject(message).getBoolean("success")) {
-						CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
-							@Override
-							public void result(boolean isOk, int result, String message) {
-								signinWork(bundle, message);
-							}
-						});
-					}
-					break;
-				case LOAD_MAC://判断是否是第一次请求数据
-					if (isJSON) {
-						JSONObject object = JSON.parseObject(message);
-						if (object.containsKey("success") && object.getBoolean("success")) {
-							//返回成功
-							JSONArray array = object.getJSONArray("macaddress");
-							if (array != null && array.getJSONObject(0).containsKey("MACADDRESS")) {
-								if ("0".equals(array.getJSONObject(0).getString("MACADDRESS"))) {
-									//获取到新的mac地址
-									isMacInNet = false;
-								} else isMacInNet = true;
-							}
-						}
-					} else isMacInNet = false;
-					break;
-				case SIGNING:
-					//签到成功
-					isSubmiting = false;
-					if (isJSON && JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
-						if (iWorkView != null)
-							iWorkView.showToast(R.string.signin_ok, R.color.load_submit);
-						if (bundle != null) models = bundle.getParcelableArrayList("models");
-						loadLog(models, System.currentTimeMillis());
-					} else if (iWorkView != null)
-						iWorkView.showToast(R.string.signin_error, R.color.load_error);
-					break;
-				default:
-					break;
-			}
-		} catch (Exception e) {
-			if (e != null)
-				LogUtil.i("result= " + what + " " + e.getMessage());
-		}
-	}
-
-
-	@Override
-	public void error(int what, String message, Bundle bundle) {
-		try {
-			isSubmiting = false;
-			subMitTime = 0;
-			if (iWorkView != null) iWorkView.dimssLoading();
-			if (StringUtil.isInclude(message, "该设备不是考勤打卡常用设备")) {
-				if (iWorkView != null) iWorkView.showErrorMac();
-			} else if (StringUtil.isInclude(message, "设备正处于申请变更绑定阶段")) {
-				if (iWorkView != null) {
-					long time = 0;
-					if (bundle != null) time = bundle.getLong("time");
-					if (time != 0 && !DateFormatUtil.long2Str(DateFormatUtil.YMD).equals(TimeUtils.s_long_2_str(time))) {
-					} else {
-						iWorkView.showToast(R.string.mac_changing, R.color.load_warning);
-						iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_changing));
-					}
-				}
-			} else if (StringUtil.isInclude(message, MyApplication.getInstance().getResources().getString(R.string.mac_other))) {
-				iWorkView.showToast(R.string.mac_other, R.color.load_warning);
-				iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_other));
-			} else {
-				String mes = StringUtil.getChinese(message);
-				if (!StringUtil.isEmpty(mes) && iWorkView != null)
-					iWorkView.showToast(mes, R.color.load_warning);
-			}
-		} catch (Exception e) {
-			if (e != null) LogUtil.i("Error Exception =" + e.getMessage());
-		}
-	}
-
-	/*调转显示我的考勤*/
-	public void showMyRele(Intent intent, List<WorkModel> models) {
-		if (models instanceof ArrayList)
-			intent.putParcelableArrayListExtra("data", (ArrayList<WorkModel>) models);
-		intent.putExtra("isFree", isFree);
-		intent.putExtra("day", days);
-		intent.putExtra("name", name);
-	}
+        }
+    }
+
+    public void submitByFrist(ArrayList<WorkModel> models, String macAddress) {
+        if (isSubmitAble(models)) {
+            submitWork(models, macAddress);
+        }
+    }
+
+    /**
+     * 提交打卡
+     *
+     * @param models     班次以及打卡记录数据
+     * @param macAddress mac地址
+     */
+    private void submitWork(final ArrayList<WorkModel> models, String macAddress) {
+        subMitTime = System.currentTimeMillis();
+        final Bundle bundle = new Bundle();
+        bundle.putParcelableArrayList("models", models);
+        if (isB2b) {
+            signinWork(bundle, "");
+        } else {
+            CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
+                @Override
+                public void result(boolean isOk, int result, String message) {
+                    signinWork(bundle, message);
+                }
+            });
+
+            //validatorMac(models, macAddress);//TODO 去除mac地址验证
+        }
+    }
+
+
+    /**
+     * 更改位置信息
+     *
+     * @param poi 位置信息
+     */
+    public void changPoi(PoiInfo poi) {
+        loaction = StringUtil.isEmpty(poi.name) ? "" : poi.name;//位置名称
+        address = StringUtil.isEmpty(poi.address) ? "" : poi.address;
+        latitude = poi.location.latitude;
+        longitude = poi.location.longitude;
+        if (iWorkView == null) return;
+        iWorkView.showLocation(address);
+        distance = -1;
+        iWorkView.showDistance(getDistance());
+    }
+
+
+    @Override
+    public void result(int what, boolean isJSON, String message, final Bundle bundle) {
+        try {
+            ArrayList<WorkModel> models = null;
+            if (iWorkView != null) iWorkView.dimssLoading();
+            switch (what) {
+                case LOAD_WORK_SET://获取打卡设置
+                    long t = System.currentTimeMillis();
+                    if (bundle != null) t = bundle.getLong("time");
+                    if (isJSON)
+                        WorkHandlerUtil.handlerWorkSet(JSON.parseObject(message));
+                    loadWorkData(t);
+                    break;
+                case WORK_DATA://打卡班次
+                    long time = System.currentTimeMillis();
+                    if (bundle != null) time = bundle.getLong("time");
+                    handlerWorkData(isJSON, message, time);
+                    break;
+                case WORK_LOG://打卡列表
+                    long logTime = System.currentTimeMillis();
+                    if (bundle != null) models = bundle.getParcelableArrayList("models");
+                    if (bundle != null) logTime = bundle.getLong("time");
+                    handlerWorkLog(isJSON, message, models, logTime);
+                    break;
+                case SIGNING:
+                    //签到成功
+                    isSubmiting = false;
+                    if (isJSON && JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
+                        if (iWorkView != null)
+                            iWorkView.showToast(R.string.signin_ok, R.color.load_submit);
+                        if (bundle != null) models = bundle.getParcelableArrayList("models");
+                        loadLog(models, System.currentTimeMillis());
+                    } else if (iWorkView != null)
+                        iWorkView.showToast(R.string.signin_error, R.color.load_error);
+                    break;
+                default:
+                    break;
+            }
+        } catch (Exception e) {
+            if (e != null)
+                LogUtil.i("result= " + what + " " + e.getMessage());
+        }
+    }
+
+
+    @Override
+    public void error(int what, String message, Bundle bundle) {
+        try {
+            isSubmiting = false;
+            subMitTime = 0;
+            if (iWorkView != null) iWorkView.dimssLoading();
+            if (StringUtil.isInclude(message, "该设备不是考勤打卡常用设备")) {
+                if (iWorkView != null) iWorkView.showErrorMac();
+            } else if (StringUtil.isInclude(message, "设备正处于申请变更绑定阶段")) {
+                if (iWorkView != null) {
+                    long time = 0;
+                    if (bundle != null) time = bundle.getLong("time");
+                    if (time != 0 && !DateFormatUtil.long2Str(DateFormatUtil.YMD).equals(TimeUtils.s_long_2_str(time))) {
+                    } else {
+                        iWorkView.showToast(R.string.mac_changing, R.color.load_warning);
+                        iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_changing));
+                    }
+                }
+            } else if (StringUtil.isInclude(message, MyApplication.getInstance().getResources().getString(R.string.mac_other))) {
+                iWorkView.showToast(R.string.mac_other, R.color.load_warning);
+                iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_other));
+            } else {
+                String mes = StringUtil.getChinese(message);
+                if (!StringUtil.isEmpty(mes) && iWorkView != null)
+                    iWorkView.showToast(mes, R.color.load_warning);
+            }
+        } catch (Exception e) {
+            if (e != null) LogUtil.i("Error Exception =" + e.getMessage());
+        }
+    }
+
+    /*调转显示我的考勤*/
+    public void showMyRele(Intent intent, List<WorkModel> models) {
+        if (models instanceof ArrayList)
+            intent.putParcelableArrayListExtra("data", (ArrayList<WorkModel>) models);
+        intent.putExtra("isFree", isFree);
+        intent.putExtra("day", days);
+        intent.putExtra("name", name);
+    }
 }

+ 16 - 1
app_modular/appworks/src/main/java/com/uas/appworks/model/WorkPlatModel.java

@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.common.config.BaseConfig;
+import com.common.data.JSONUtil;
 import com.core.api.wxapi.ApiPlatform;
 import com.core.api.wxapi.ApiUtils;
 import com.core.app.Constants;
@@ -74,7 +75,17 @@ public class WorkPlatModel implements IWorkPlatModel {
 
                 @Override
                 public void onFailure(Object t) {
-                    workCallback.onFail(request.getWhat(), t == null ? "" : t.toString());
+                    String failMsg = "";
+                    if (t != null) {
+                        String result = t.toString();
+                        if (JSONUtil.validate(result)) {
+                            JSONObject resultObject = JSON.parseObject(result);
+                            failMsg = JSONUtil.getText(resultObject, "exceptionInfo");
+                        } else {
+                            failMsg = result;
+                        }
+                    }
+                    workCallback.onFail(request.getWhat(), failMsg);
                 }
             }));
         }
@@ -130,6 +141,7 @@ public class WorkPlatModel implements IWorkPlatModel {
                     }
                     List<WorkMenuBean.ModuleListBean> localModuleList = localWorkMenuBean.getModuleList();
                     if (localModuleName.equals(cacheModuleName)) {
+                        //本地模块存在,按本地模块更新缓存数据
                         isWorkMenuExist = true;
                         WorkMenuBean workMenuBean = new WorkMenuBean();
                         workMenuBean.setIsLocalModule(true);
@@ -145,6 +157,7 @@ public class WorkPlatModel implements IWorkPlatModel {
                             for (WorkMenuBean.ModuleListBean localModuleListBean : localModuleList) {
                                 String localMenuIcon = localModuleListBean.getMenuIcon();
                                 if (localMenuIcon.equals(cacheMenuIcon)) {
+                                    //本地应用存在,按本地应用更新缓存数据
                                     isModuleListExist = true;
                                     WorkMenuBean.ModuleListBean resultModuleListBean = new WorkMenuBean.ModuleListBean();
                                     resultModuleListBean.setIsHide(cacheModuleListBean.isHide());
@@ -158,6 +171,7 @@ public class WorkPlatModel implements IWorkPlatModel {
                                     break;
                                 }
                             }
+                            //如果本地应用不存在,则直接添加
                             if (!isModuleListExist && !cacheModuleListBean.isLocalMenu()) {
                                 resultModuleListBeans.add(cacheModuleListBean);
                             }
@@ -172,6 +186,7 @@ public class WorkPlatModel implements IWorkPlatModel {
                                     break;
                                 }
                             }
+                            //本地文件中有缓存中不存在的模块,则将新增模块添加入模块列表最后一项
                             if (!isExist) {
                                 resultModuleListBeans.add(localModuleListBean);
                             }