Browse Source

修改自动外勤和自动打卡

RaoMeng 9 years ago
parent
commit
a15e6d3eb1

+ 0 - 1
WeiChat/build.gradle

@@ -55,7 +55,6 @@ android {
 buildscript {
     repositories {
         mavenCentral() // or jcenter()
-
     }
 
     dependencies {

+ 0 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/MyApplication.java

@@ -129,8 +129,6 @@ public class MyApplication extends Application {
         }
         // 初始化网络监听
         mNetWorkObservable = new NetWorkObservable(this);
-
-//        
 //        LogUtil.d("applications",AndroidUtils.getEthernetMacAddress());
 //        LogUtil.d("applications",AndroidUtils.getAndroidId(this));
 //        LogUtil.d("applications",AndroidUtils.getWifiMacAddress(this));

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

@@ -182,7 +182,7 @@ public class LocationSearchActivity extends BaseActivity {
                 if (ListUtils.isEmpty(chche)) {//如果数据为空,就获取输入的地址对应的数据
                     if (type == 2) {
                         loadDataByCity(key);
-                    }
+                    } else adapter.setListData(null);
                     return;
                 } else {
                     adapter.setListData(chche);

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/MissionModel.java

@@ -19,7 +19,7 @@ public class MissionModel implements Parcelable {
     private String realLeave;//实际离开时间  yyyy-MM-dd HH:mm:ss
     private LatLng latLng;//选择地址的经纬度
     private int visitcount;//拜访次数
-    private int status;//状态  1.已提交  0.未提交  (数据库中 0.未进行  1.进行中  2.已完成  )
+    private int status;//状态  1.已提交  0.未提交  (数据库中 0.未进行  1.进行中  2.已完成  3.签退后再回来签到  )
 
     //update by 2016/12/19
     private double distance;

+ 18 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/MissionPresenter.java

@@ -59,7 +59,18 @@ public class MissionPresenter implements IMissionPresenter, HttpHandler.OnResult
             iMission.showModels(models);
             iMission.showLoading();
         }
-        loadMissionPlan();
+        if (MyApplication.getInstance().isNetworkActive()) {
+            loadMissionPlan();
+        } else {
+            //没有网络情况下获取缓存的数据
+            List<MissionModel> models = MissionDao.getInstance().queryByEnCode();
+            if (!ListUtils.isEmpty(models)) {
+                if (iMission != null) {
+                    iMission.dimssLoading();
+                    iMission.showModels(models);
+                }
+            }
+        }
     }
 
     @Override
@@ -70,8 +81,11 @@ public class MissionPresenter implements IMissionPresenter, HttpHandler.OnResult
         }
     }
 
+    boolean isSubmiting = false;
+
     @Override
     public void submit(List<MissionModel> models) {
+        if (isSubmiting) return;
         if (!MyApplication.getInstance().isNetworkActive()) {
             if (iMission != null) iMission.showToast(R.string.networks_out, R.color.load_warning);
             return;
@@ -94,6 +108,7 @@ public class MissionPresenter implements IMissionPresenter, HttpHandler.OnResult
      * @param idUtil  id、code获取工具类
      */
     private void savePlan2Net(final MissionModel mode, final int postion, final CommonInterfaceUtil idUtil) {
+        isSubmiting = true;
         idUtil.getIdByNet("MOBILE_OUTPLAN_SEQ", new CommonInterfaceUtil.OnResultListener() {
             @Override
             public void result(int code, String result) {
@@ -123,6 +138,7 @@ public class MissionPresenter implements IMissionPresenter, HttpHandler.OnResult
 
     //保存外勤计划接口
     private void savePlan2Net(int id, String code, MissionModel entity, int position) {
+        isSubmiting = true;
         //获取网络数据
         if (iMission != null) iMission.showLoading();
         Context ct = MyApplication.getInstance();
@@ -236,6 +252,7 @@ public class MissionPresenter implements IMissionPresenter, HttpHandler.OnResult
                         handlerData(array);
                         break;
                     case SAVE_PLAN:
+                        isSubmiting = false;
                         if (isJSON && JSON.parseObject(message).getBoolean("success")) {
                             int mpd_id = JSON.parseObject(message).getIntValue("mpd_id");
                             MissionModel entity = bundle.getParcelable("data");

+ 8 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/WorkPresenter.java

@@ -75,6 +75,8 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
 
 
     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<>();
@@ -94,6 +96,7 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
 
     //判断mac地址是否已经上传
     private void getMacByNet() {
+        if (iWorkView!=null)iWorkView.showLoading();
         //获取网络数据
         Map<String, Object> param = new HashMap<>();
         param.put("macaddress", macAddress);
@@ -104,6 +107,7 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
 
 
     private void validatorMac(ArrayList<WorkModel> models, String macAddress) {
+        if (iWorkView != null) iWorkView.showLoading();
         Map<String, Object> param = new HashMap<>();
         param.put("macAddress", macAddress);
         param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
@@ -233,6 +237,8 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
         }
         try {
             getPoi();
+            if (companyLongitude == 0 || companyLatitude == 0 && iWorkView != null)
+                iWorkView.showToast(R.string.not_addr_message, R.color.load_warning);
             PreferenceUtils.putInt("distance", companyDistance);
             PreferenceUtils.putInt("innerdistance", innerdistance);
             PreferenceUtils.putFloat("longitude", (float) companyLongitude);
@@ -513,6 +519,7 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
     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 WORK_DATA://打卡班次
                     long time = System.currentTimeMillis();
@@ -576,6 +583,7 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
     public void error(int what, int statuCode, String message, Bundle bundle) {
         try {
             isSubmiting = false;
+            subMitTime = 0;
             if (iWorkView != null) iWorkView.dimssLoading();
 
             if (StringUtils.isInclude(message, "该设备不是考勤打卡常用设备")) {

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

@@ -368,7 +368,7 @@ public class AutoErpSigninUitl implements HttpHandler.OnResultListener {
         } else {//签到
             Log.i("gongpengming", "签到");
             mission.setRealTime(TimeUtils.f_long_2_str(System.currentTimeMillis()));
-            if (mission.getStatus() != 1) {
+            if (mission.getStatus() < 1) {
                 mission.setStatus(1);//说明没有打过卡  TODO 可以通过判断签到时间是否存在来判断是否提示签到
                 boolean saveOk = MissionDao.getInstance().updata(mission);
                 if (saveOk)

+ 4 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/ReckonAutoUtil.java

@@ -41,9 +41,9 @@ public class ReckonAutoUtil {
         for (MissionModel e : list) {
             if (e.getLatLng() == null) continue;//定位不存在
             //获取当前与目的地的距离
-            if (e.getStatus() == 2) continue;
+//            if (e.getStatus() == 2) continue;
             float distance = Float.valueOf(BaiduMapUtil.getInstence().getDistance(e.getLatLng()));
-            if (distance > companyDistance && !StringUtils.isEmpty(e.getRealTime())) {
+            if (e.getStatus() != 2 && distance > companyDistance && !StringUtils.isEmpty(e.getRealTime())) {
                 //1.判断进行中的外勤计划,如果离开了签到最后一次,结束该计划
                 log("符合外勤签退");
                 minBean = e;
@@ -54,6 +54,8 @@ public class ReckonAutoUtil {
                 if (minDistance <= 0 || minDistance > distance) {//2.如果第一个不存在,判断获取最近的位置
                     minDistance = distance;
                     minBean = e;
+                    if (minBean.getStatus() == 2)
+                        minBean.setStatus(3);
                 }
             }
         }