Browse Source

修改代码

Bitlikr 9 years ago
parent
commit
98119eb90c
16 changed files with 233 additions and 114 deletions
  1. 7 7
      WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/WorkModelDao.java
  2. 5 11
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/DestinationActivity.java
  3. 2 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/LocationMapActivity.java
  4. 6 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/LocationSearchActivity.java
  5. 37 5
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MissionActivity.java
  6. 25 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MissionSetActivity.java
  7. 0 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/TestActivity.java
  8. 14 13
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/WorkActivity.java
  9. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/MissionAdapter.java
  10. 5 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/WorkAdapter.java
  11. 6 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/MissionPresenter.java
  12. 24 12
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/WorkPresenter.java
  13. 50 35
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/AutoErpService.java
  14. 33 9
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/AutoErpSigninUitl.java
  15. 3 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/ReckonAutoUtil.java
  16. 15 8
      WeiChat/src/main/res/layout/item_location_ls.xml

+ 7 - 7
WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/WorkModelDao.java

@@ -100,7 +100,6 @@ public class WorkModelDao {
         return saveOk;
     }
 
-
     /**
      * 获取数据库中全部数据
      *
@@ -141,9 +140,9 @@ public class WorkModelDao {
                         StringUtils.isEmpty(offStart) || StringUtils.isEmpty(offTime) || StringUtils.isEmpty(offend))
                     continue;
                 if (!allSignin) {
-                    if (!StringUtils.isEmpty(workSignin) && workTime.compareTo(workSignin) < 0)//迟到
+                    if (!StringUtils.isEmpty(workSignin) && workSignin.compareTo(workTime) > 0)//迟到  打卡时间>上班时间
                         workSignin = "";
-                    if (!StringUtils.isEmpty(offSignin) && offTime.compareTo(offSignin) > 0)//早退
+                    if (!StringUtils.isEmpty(offSignin) && offSignin.compareTo(offTime) < 0)//早退  打卡时间<下班时间
                         offSignin = "";
                 }
                 model = new WorkModel(workStart, workTime, workend, workSignin, offStart,
@@ -228,9 +227,10 @@ public class WorkModelDao {
             else values.put("offSignin", models.getOffSignin());
             String where = "emCode=? and master=?  and workStart=? and workTime=?" +
                     " and workend=? and offStart=? and offTime=? and offend=? and date=?";
-
-            String[] whereArg = {"emCode", "master", models.getWorkStart(), models.getWorkTime(), models.getWorkend()
-                    , models.getOffStart(), models.getOffTime(), models.getOffend(), TimeUtils.s_long_2_str(System.currentTimeMillis())};
+            String[] whereArg = {emCode, master, models.getWorkStart(),
+                    models.getWorkTime(), models.getWorkend()
+                    , models.getOffStart(), models.getOffTime(),
+                    models.getOffend(), TimeUtils.s_long_2_str(System.currentTimeMillis())};
             i = db.update(TIBLE_NAME, values, where, whereArg);
         } catch (Exception e) {
         } finally {
@@ -326,7 +326,7 @@ public class WorkModelDao {
                     continue;
                 String where = "emCode=? and master=?  and workStart=? and workTime=?" +
                         " and workend=? and offStart=? and offTime=? and offend=? ";
-                String[] whereArg = {"emCode", "master", e.getWorkStart(), e.getWorkTime(), e.getWorkend()
+                String[] whereArg = {emCode, master, e.getWorkStart(), e.getWorkTime(), e.getWorkend()
                         , e.getOffStart(), e.getOffTime(), e.getOffend()};
                 i = db.delete(TIBLE_NAME, where, whereArg);
             }

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

@@ -78,7 +78,7 @@ public class DestinationActivity extends BaseActivity {
                         }
                         handleDada(array);
                     } catch (Exception e) {
-
+                        
                     }
                     break;
             }
@@ -128,16 +128,11 @@ public class DestinationActivity extends BaseActivity {
                 }
             }
         });
-        listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
+        listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
             @Override
-            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
+            public void onRefresh(PullToRefreshBase<ListView> refreshView) {
                 pager = 1;
-                loadOutAddress();
-            }
-
-            @Override
-            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
-                pager++;
+                search_edit.setText("");
                 loadOutAddress();
             }
         });
@@ -147,7 +142,7 @@ public class DestinationActivity extends BaseActivity {
         allList = new ArrayList<>();
         showList = new ArrayList<>();
         listView.setEmptyView(R.layout.view_empty);
-        listView.setMode(PullToRefreshBase.Mode.BOTH);
+        listView.setMode(PullToRefreshBase.Mode.PULL_FROM_START);
         adapter = new DestinAdapter();
         listView.setAdapter(adapter);
         loadOutAddress();
@@ -210,7 +205,6 @@ public class DestinationActivity extends BaseActivity {
 
             }
         }
-
         adapter.notifyDataSetChanged();
     }
 

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

@@ -70,7 +70,8 @@ public class LocationMapActivity extends BaseActivity implements OnGetPoiSearchR
         }
         init();
         initView();
-        BaiduMapUtil.getInstence().getNearInfo(location, 0, point, "公司", new BaiduMapUtil.OnSearchPoiListener() {
+        BaiduMapUtil.getInstence().getNearInfo(location, 0, point,
+                "公司", new BaiduMapUtil.OnSearchPoiListener() {
             @Override
             public void result(SearchResult result) {
                 if (result instanceof PoiResult)

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

@@ -229,6 +229,12 @@ public class LocationSearchActivity extends BaseActivity {
             List<PoiInfo> chches = poiResult.getAllPoi();
             if (ListUtils.isEmpty(chches)) return;
             BaiduMapUtil.getInstence().setMapViewPoint(bmapView, chches.get(0).location, true);
+            for (int i = 0; i < chches.size(); i++) {
+                if (StringUtils.isEmpty(chches.get(i).name) || StringUtils.isEmpty(chches.get(i).address)) {
+                    chches.remove(i);
+                    i--;
+                }
+            }
             listData = chches;
             adapter.setListData(listData);
         }

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

@@ -70,7 +70,7 @@ public class MissionActivity extends BaseActivity implements View.OnClickListene
         } else if (item.getItemId() == R.id.title) {
             Intent intent = new Intent(ct, MissionSetActivity.class);
             intent.putExtra(AppConfig.IS_ADMIN, adminStatus);
-            startActivityForResult(intent, 0x20);
+            startActivityForResult(intent, 0x22);
         }
         return super.onOptionsItemSelected(item);
     }
@@ -93,7 +93,6 @@ public class MissionActivity extends BaseActivity implements View.OnClickListene
 
 
     private void endActivity() {
-        //更新外勤计划 TODO 先这样定 后期修改缓存方式
         sendBroadcast(new Intent(AlarmService.UPDATA_MISSION_PLAN));
         boolean isAuto = PreferenceUtils.getBoolean(AppConfig.AUTO_MISSION, false);
         if (isAuto) {
@@ -189,9 +188,28 @@ public class MissionActivity extends BaseActivity implements View.OnClickListene
                 startActivityForResult(intent, 0x21);
                 break;
             case R.id.item_delete_tv://删除选项
-                adapter.getModels().remove(position);
-                adapter.notifyItemRemoved(position);
-                adapter.notifyItemRangeChanged(position, adapter.getModels().size());
+//                MissionModel m = adapter.getModels().remove(position);
+//                if (!StringUtils.isEmpty(m.getCompanyName()) || !StringUtils.isEmpty(m.getCompanyAddr()) ||
+//                        !StringUtils.isEmpty(m.getVisitTime())) {
+//                    AlertDialog.Builder builder = new AlertDialog.Builder(ct);
+//                    builder.setTitle(R.string.prompt_title).setMessage("是否确认删除单号" + (position + 1)).setPositiveButton("确定", new DialogInterface.OnClickListener() {
+//                        @Override
+//                        public void onClick(DialogInterface dialogInterface, int i) {
+//                            adapter.getModels().remove(position);
+//                            adapter.notifyItemRemoved(position);
+//                            adapter.notifyItemRangeChanged(position, adapter.getModels().size());
+//                        }
+//                    }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
+//                        @Override
+//                        public void onClick(DialogInterface dialogInterface, int i) {
+//
+//                        }
+//                    }).show();
+//                } else {
+                    adapter.getModels().remove(position);
+                    adapter.notifyItemRemoved(position);
+                    adapter.notifyItemRangeChanged(position, adapter.getModels().size());
+//                }
                 break;
             case R.id.item_reckontime_tv://预计到达时间
                 if (model == null || model.getStatus() == 1) return;
@@ -241,6 +259,20 @@ public class MissionActivity extends BaseActivity implements View.OnClickListene
                                 MyApplication.getInstance().getBdLocationHelper().getLongitude())));
                 adapter.notifyItemChanged(position);
             }
+        } else if (0x22 == requestCode) {//外勤测试
+            boolean isAuto = data.getBooleanExtra("isAuto", true);
+            if (!isAuto) {
+                if (flag == 1) {
+                    //启动手动外勤
+                    Intent intent = new Intent(ct, OutofficeActivity.class);
+                    intent.putExtra(AppConfig.IS_ADMIN, true);
+                    startActivity(intent);
+                    finish();
+                } else if (flag == 2) {
+                    setResult(0x20);
+                    finish();
+                }
+            }
         }
 
     }

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

@@ -4,6 +4,7 @@ import android.annotation.TargetApi;
 import android.content.Intent;
 import android.os.Build;
 import android.os.Bundle;
+import android.view.MenuItem;
 import android.view.View;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
@@ -60,6 +61,27 @@ public class MissionSetActivity extends BaseActivity implements SwitchView.OnChe
         initEvent();
     }
 
+    @Override
+    public void onBackPressed() {
+        endActivity();
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (item.getItemId() == android.R.id.home) {
+            endActivity();
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    private void endActivity() {
+        Intent intent = new Intent();
+        intent.putExtra("isAuto", auto_sv.isChecked());
+        setResult(0x20, intent);
+        finish();
+    }
+
     private void initEvent() {
         auto_sv.setOnCheckedChangeListener(this);
         alarm_sv.setOnCheckedChangeListener(this);
@@ -80,9 +102,9 @@ public class MissionSetActivity extends BaseActivity implements SwitchView.OnChe
         setTextColor(is, alar_rl, alarm_tv);
         int chche = CommonUtil.getSharedPreferencesInt(ct, AppConfig.ALARM_MISSION_TIME, 5);
         alarm_tv.setText("提前" + chche + "分钟");
-        chche =PreferenceUtils.getInt(AppConfig.ALARM_MISSION_DISTANCE, 500);
+        chche = PreferenceUtils.getInt(AppConfig.ALARM_MISSION_DISTANCE, 500);
         distance_tv.setText(chche + "m");
-        chche =PreferenceUtils.getInt(AppConfig.AUTO_MISSION_TIME, 20);
+        chche = PreferenceUtils.getInt(AppConfig.AUTO_MISSION_TIME, 20);
         time_tv.setText(chche + "分钟");
     }
 
@@ -207,6 +229,6 @@ public class MissionSetActivity extends BaseActivity implements SwitchView.OnChe
     }
 
     private void updataSet() {
-        util.addOutSet(distance, time, isAuto,null);
+        util.addOutSet(distance, time, isAuto, null);
     }
 }

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

@@ -67,7 +67,6 @@ public class TestActivity extends BaseActivity implements View.OnClickListener {
                         show("getOffTime" + m.getOffTime());
                         show("getWorkStart" + m.getWorkStart());
                         show("getWorkSignin" + m.getWorkSignin());
-                        show("getOffTime" + m.getOffTime());
                         show("getOffSignin" + m.getOffSignin());
                         show("getOffend" + m.getOffend());
                         show("getOffStart" + m.getOffStart());

+ 14 - 13
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/WorkActivity.java

@@ -206,19 +206,20 @@ public class WorkActivity extends BaseActivity implements View.OnClickListener,
                 showDateDialog();
                 break;
             case R.id.unoffice_:
-                if (ListUtils.isEmpty(pois)) {
-                    Crouton.showToast(ct, "距离太远,无法微调至有效打卡范围", R.color.load_message);
-                } else {
-                    Intent intent = new Intent(ct, LocationSearchActivity.class);
-                    intent.putExtra("type", 1);
-                    intent.putExtra("title", "地点微调");
-                    intent.putExtra("single", true);
-                    intent.putExtra("radius", 300);
-                    intent.putExtra("latlng", latLng);
-                    intent.putExtra("resultCode", ADDRESS_CHANGE);
-                    intent.putExtra("resultName", "resultName");
-                    startActivityForResult(intent, ADDRESS_CHANGE);
-                }
+                //TODO 没办法处理好  先关闭
+//                if (ListUtils.isEmpty(pois)) {
+//                    Crouton.showToast(ct, "距离太远,无法微调至有效打卡范围", R.color.load_message);
+//                } else {
+                Intent intent = new Intent(ct, LocationSearchActivity.class);
+                intent.putExtra("type", 1);
+                intent.putExtra("title", "地点微调");
+                intent.putExtra("single", true);
+                intent.putExtra("radius", 300);
+                intent.putExtra("latlng", latLng);
+                intent.putExtra("resultCode", ADDRESS_CHANGE);
+                intent.putExtra("resultName", "resultName");
+                startActivityForResult(intent, ADDRESS_CHANGE);
+//                }
                 break;
         }
     }

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

@@ -57,7 +57,7 @@ public class MissionAdapter extends RecyclerView.Adapter<MissionAdapter.BaseView
         MissionModel entity = models.get(position);
         if (entity == null) return;
         holder.item_title_tv.setText("目的地 " + (position + 1));
-        holder.item_delete_tv.setVisibility(entity.getStatus() != 1 ? View.VISIBLE : View.GONE);
+        holder.item_delete_tv.setVisibility((entity.getStatus() != 1 && position != 0) ? View.VISIBLE : View.GONE);
         if (entity.getLatLng() != null) {
             holder.item_length_tv.setText(entity.getDistance() + "米");
         } else {

+ 5 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/WorkAdapter.java

@@ -63,15 +63,16 @@ public class WorkAdapter extends RecyclerView.Adapter<WorkAdapter.ViewHoler> {
             holder.off_time.setText(getNull(model.getOffTime()));
             holder.off_signin.setText(getNull(model.getOffSignin()));
             //处理迟到、早退、缺勤
-
             String workTag = null;
             if (StringUtils.isEmpty(model.getWorkSignin())) {
                 if (newTime.compareTo(model.getWorkend()) > 0) {
                     //缺勤(没有签到,同时当前时间大于上班时间后90分钟)
                     workTag = "缺勤";
-                } else if (newTime.compareTo(model.getWorkTime()) > 0) {
-                    workTag = "迟到";
                 }
+                //不打卡情况下,迟到不显示
+//                else if (newTime.compareTo(model.getWorkTime()) > 0) {
+//                    workTag = "迟到";
+//                }
                 if (!isToday) {
                     workTag = "缺勤";
                 }
@@ -99,7 +100,7 @@ public class WorkAdapter extends RecyclerView.Adapter<WorkAdapter.ViewHoler> {
                         }
                     });
                 } else {
-                    holder.off_supple.setVisibility(View.GONE);
+                    holder.work_supple.setVisibility(View.GONE);
                 }
             }
 

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

@@ -1,6 +1,7 @@
 package com.xzjmyk.pm.activity.ui.erp.presenter;
 
 import android.content.Context;
+import android.content.Intent;
 import android.os.Bundle;
 
 import com.alibaba.fastjson.JSON;
@@ -17,6 +18,7 @@ import com.xzjmyk.pm.activity.ui.erp.util.CommonInterfaceUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.attendance.AutoErpService;
 import com.xzjmyk.pm.activity.ui.erp.util.auto.HttpHandler;
 import com.xzjmyk.pm.activity.ui.tool.ThreadUtil;
 import com.xzjmyk.pm.activity.util.BaiduMapUtil;
@@ -232,6 +234,10 @@ public class MissionPresenter implements IMissionPresenter, HttpHandler.OnResult
                         handlerData(array);
                         break;
                     case SAVE_PLAN:
+                        //TODO 保存成功后将对象添加到数据库中 并更新任务
+                        Intent intent = new Intent();
+                        intent.setAction(AutoErpService.INIT_MISSION_TASK);
+                        MyApplication.getInstance().sendBroadcast(intent);
                         if (iMission != null) iMission.dimssLoading();
                         int position = bundle.getInt("position", -1);//成功保存第几个目标
                         if (iMission != null) iMission.showToast("保存成功", R.color.load_submit);

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

@@ -58,7 +58,6 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
     private boolean isMacInNet = false;//服务器上是否有mac地址
     private boolean isSubmiting = false;
     private CommonInterfaceUtil util;
-    private List<PoiInfo> pois;
 
     private String macAddress;
 
@@ -161,16 +160,20 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
 
     private void getPoi() {
         final LatLng compayLng = new LatLng(companyLatitude, companyLongitude);
-        final LatLng latLng = new LatLng(latitude, longitude);
-        BaiduMapUtil.getInstence().getNearInfo(500, 20, latLng,
+        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) {
-                            pois = ((PoiResult) result).getAllPoi();
+                            List<PoiInfo> pois = ((PoiResult) result).getAllPoi();
                             if (ListUtils.isEmpty(pois)) return;
                             for (int i = 0; i < pois.size(); i++) {
-                                double dis = BaiduMapUtil.getInstence().distance(latLng, pois.get(i).location);
+                                double dis = BaiduMapUtil.getInstence().distance(compayLng, pois.get(i).location);
+                                log("dis=" + dis);
+                                log("pois.get(i).name=" + pois.get(i).name);
+                                log("pois.get(i).address=" + pois.get(i).address);
+                                log("_________________________________");
                                 if (companyDistance < dis) {
                                     pois.remove(i);
                                     i--;
@@ -198,15 +201,18 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
             return;
         }
         JSONObject object = JSON.parseObject(message);
+        int innerdistance = 0;
         boolean comaddressset = object.getBooleanValue("comaddressset");
         if (comaddressset) {
             companyLongitude = object.getDoubleValue("longitude");
             companyLatitude = object.getDoubleValue("latitude");
             companyDistance = object.getIntValue("distance");
+            innerdistance = object.getIntValue("innerdistance");
         }
         try {
             getPoi();
             PreferenceUtils.putInt("distance", companyDistance);
+            PreferenceUtils.putInt("innerdistance", innerdistance);
             PreferenceUtils.putFloat("longitude", (float) companyLongitude);
             PreferenceUtils.putFloat("latitude", (float) companyLatitude);
             setBaiduLocation();
@@ -335,7 +341,6 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
             iWorkView.showModel(models);
             iWorkView.dimssLoading();
         }
-
         //下拉数据后保存到数据库
         if (!ListUtils.isEmpty(models) &&
                 TimeUtils.s_long_2_str(longTime).equals(TimeUtils.s_long_2_str(System.currentTimeMillis()))) {
@@ -513,11 +518,10 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
                                 if ("0".equals(array.getJSONObject(0).getString("MACADDRESS"))) {
                                     //获取到新的mac地址
                                     isMacInNet = false;
-                                }
+                                } else isMacInNet = true;
                             }
                         }
                     } else isMacInNet = false;
-
                     break;
                 case SIGNING:
                     //签到成功
@@ -542,22 +546,30 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
 
     @Override
     public void error(int what, int statuCode, String message, Bundle bundle) {
-
         try {
             if (StringUtils.isInclude(message, "该设备不是考勤打卡常用设备")) {
                 if (iWorkView != null) iWorkView.showErrorMac();
             } else if (StringUtils.isInclude(message, "设备正处于申请变更绑定阶段")) {
                 if (iWorkView != null) {
-                    iWorkView.showToast(R.string.mac_changing, R.color.load_warning);
-                    iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_changing));
+                    long time = 0;
+                    if (bundle != null) time = bundle.getLong("time");
+                    if (time != 0 && !TimeUtils.s_long_2_str(System.currentTimeMillis()).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 (StringUtils.isInclude(message, "该设备已被他人绑定")) {
+                iWorkView.showToast(R.string.mac_other, R.color.load_warning);
+                iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_other));
             } else {
                 String mes = StringUtils.getChinese(message);
                 if (!StringUtils.isEmpty(mes) && iWorkView != null)
                     iWorkView.showToast(R.string.mac_changing, R.color.load_warning);
             }
         } catch (Exception e) {
-            if (e != null) log("error Exception =" + e.getMessage());
+            if (e != null) log("Error Exception =" + e.getMessage());
         }
     }
 

+ 50 - 35
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/AutoErpService.java

@@ -37,32 +37,36 @@ public class AutoErpService extends Service {
     public static final String SAVE_MISSION_ACTION = "SAVE_MISSION_ACTION";
     public static final String LOAD_MISSION = "LOAD_MISSION";
     public static final String UPDATA_ERP_CHANGE = "com.app.home.update";//更新账套信息
+    public static final String CHANGE_WORK_TASK = "CHANGE_WORK_TASK";//自动打卡任务变更
+    public static final String CHANGE_MISSION_TASK = "CHANGE_MISSION_TASK";//自动外勤任务变更
+    public static final String INIT_MISSION_TASK = "INIT_MISSION_TASK";//初始化外勤签到任务
 
-    public static final int STATUS_SIGNING = 0x11;//自动打卡
-    public static final int STATUS_WORK_ALARM = 0x12;//上班提醒
-    public static final int STATUS_OFF_ALARM = 0x13;//下班提醒
-    public static final int STATUS_MISSION = 0x14;//外勤签到
-    public static final int STATUS_LEAVE_ALARM = 0x15;//离开提醒
+
+    public final int STATUS_SIGNING = 0x11;//自动打卡
+    public final int STATUS_WORK_ALARM = 0x12;//上班提醒
+    public final int STATUS_OFF_ALARM = 0x13;//下班提醒
+    public final int STATUS_MISSION = 0x14;//外勤签到
+    public final int STATUS_LEAVE_ALARM = 0x15;//离开提醒
 
 
     private ReckonAutoUtil reckonAutoUtil;//计算工具
     private NotificationManage notificationManage;//通知管理器
 
-
-    private boolean isAlarm;//是否打卡提醒
-    private boolean isAuto;//是否自动打卡
-
-    private boolean iscanAutoWork;
-    private boolean iscanAutoMission;
-
-
     private final long MINUTE = 60 * 1000;//一分钟的时间戳
     private long workInterval = MINUTE;//计算循环的时间
-    private long missionInterval = 2 * MINUTE;//计算循环的时间
+    private long missionInterval = 6 * MINUTE;//计算循环的时间
     private AutoErpSigninUitl signinUitl;
 
     private final String[] flags = {
-            SAVE_WORK_ACTION, SAVE_MISSION_ACTION, LOAD_MISSION, UPDATA_ERP_CHANGE
+            SAVE_WORK_ACTION,//保存班次数据成功
+            SAVE_MISSION_ACTION, //保存外勤计划数据成功
+            LOAD_MISSION,//下拉外勤数据
+
+            CHANGE_WORK_TASK,//下拉外勤数据
+            CHANGE_MISSION_TASK,//下拉外勤数据
+            INIT_MISSION_TASK,//初始化外勤签到任务
+
+            UPDATA_ERP_CHANGE//更换账套
     };
     private Handler handler = new Handler() {
         @Override
@@ -98,6 +102,8 @@ public class AutoErpService extends Service {
 
     private boolean isWorkRuning = false;
     private boolean isMissionRuning = false;
+    private boolean canWork = false;
+    private boolean canMission = false;
 
     private BroadcastReceiver updateReceiver = new BroadcastReceiver() {
         @Override
@@ -105,18 +111,32 @@ public class AutoErpService extends Service {
             try {
                 if (intent == null || StringUtils.isEmpty(intent.getAction())) return;
                 if (intent.getAction().equals(SAVE_WORK_ACTION)) {
+                    log(SAVE_WORK_ACTION);
                     if (!isWorkRuning)
                         startWorkTask();
-                } else if (intent.getAction().equals(SAVE_MISSION_ACTION)) {
-                    if (!isMissionRuning)
+                } else if (intent.getAction().equals(SAVE_MISSION_ACTION)) {//1.保存新增外勤计划成功
+                    log(SAVE_MISSION_ACTION);
+                    if (!isMissionRuning) {
+                        canMission = true;
                         startMissionTask();
+                    }
                 } else if (intent.getAction().equals(LOAD_MISSION)) {
+                    log(LOAD_MISSION);
                     signinUitl.loadMissionPlan();
                 } else if (intent.getAction().equals(UPDATA_ERP_CHANGE)) {
+                    log(UPDATA_ERP_CHANGE);
                     init();
+                } else if (intent.getAction().equals(CHANGE_WORK_TASK)) {
+                    log(CHANGE_WORK_TASK);
+                    canWork = intent.getBooleanExtra(CHANGE_WORK_TASK, true);
+                } else if (intent.getAction().equals(CHANGE_MISSION_TASK)) {
+                    log(CHANGE_MISSION_TASK);
+                    canMission = intent.getBooleanExtra(CHANGE_MISSION_TASK, true);
+                }else if (intent.getAction().equals(INIT_MISSION_TASK)){
+                    initMission();
                 }
             } catch (Exception e) {
-
+                if (e != null) log("BroadcastReceiver Exception=" + e.getMessage());
             }
         }
     };
@@ -133,7 +153,6 @@ public class AutoErpService extends Service {
             initBroadcast();//初始化广播接受器
             initDB();//初始化数据库数据,1.删除昨天数据   2.下拉当天数据
             init();//初始化
-            initTask();//初始化任务
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -158,15 +177,6 @@ public class AutoErpService extends Service {
         registerReceiver(updateReceiver, filter);
     }
 
-    /**
-     * 初始化任务
-     * 1.判断任务是否应该启动
-     * 2.启动任务
-     */
-    private void initTask() throws Exception {
-
-    }
-
 
     /**
      * 开启自动打卡和提醒任务
@@ -186,7 +196,9 @@ public class AutoErpService extends Service {
                             isWorkRuning = false;
                             break;
                         }
-                        if (isAuto) {
+                        log("startWorkTask run");
+                        //是否提醒
+                        if (CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), AppConfig.AUTO_SIGNIN, true)) {
                             WorkModel model = getReckonAutoUtil().reckonAutoWork();
                             if (model != null) {
                                 log("符合打卡");
@@ -198,8 +210,8 @@ public class AutoErpService extends Service {
                                 message.setData(bundle);
                                 handler.sendMessage(message);
                             }
-                        } else if (isAlarm) {//提醒  1.离开办公室 2.上班提醒   3.下班提醒
-                            int type = getReckonAutoUtil().reckonAlarm(isAlarm, workInterval);
+                        } else if (CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), AppConfig.ALARMA_CLICK, false)) {//提醒  1.离开办公室 2.上班提醒   3.下班提醒
+                            int type = getReckonAutoUtil().reckonAlarm(workInterval);
                             if (type == 1) {
                                 //TODO 符合离开办公室提醒
                                 handler.sendEmptyMessage(STATUS_LEAVE_ALARM);
@@ -243,6 +255,7 @@ public class AutoErpService extends Service {
                             isMissionRuning = false;
                             break;
                         }
+                        log("startMissionTask run");
                         List<MissionModel> plans = MissionDao.getInstance().queryByEnCode();
                         log("自动外勤 plans==" + (ListUtils.isEmpty(plans) ? 0 : plans.size()));
                         //符合外勤判断
@@ -305,6 +318,7 @@ public class AutoErpService extends Service {
             public void result(int code, String result) {
                 boolean isNeedAutoOut = PreferenceUtils.getBoolean(AppConfig.AUTO_MISSION, false);
                 if (isNeedAutoOut) {
+                    canMission = true;
                     signinUitl.loadMissionPlan();
                 } else {
                     try {
@@ -322,10 +336,11 @@ public class AutoErpService extends Service {
     private void initWork() {
         //判断是否是自动打卡
         //是否自动打卡
-        isAlarm = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), AppConfig.ALARMA_CLICK, false);
+        boolean isAlarm = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), AppConfig.ALARMA_CLICK, false);
         //是否提醒
-        isAuto = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), AppConfig.AUTO_SIGNIN, true);
+        boolean isAuto = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), AppConfig.AUTO_SIGNIN, true);
         if (isAlarm || isAuto) {
+            canWork = true;
             //TODO 下拉班次数据和是否本机账号
             signinUitl.loadWorkData();
         } else {
@@ -346,11 +361,11 @@ public class AutoErpService extends Service {
     }
 
     private boolean isCanMission() {
-        return true;
+        return canMission;
     }
 
     private boolean isCanWork() {
-        return true;
+        return canWork;
     }
 
     /**

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

@@ -155,7 +155,7 @@ public class AutoErpSigninUitl implements HttpHandler.OnResultListener {
             //判断是否符合打卡
             BdLocationHelper helper = MyApplication.getInstance().getBdLocationHelper();
             form.put("cl_address", helper.getAddress());
-            form.put("cl_location", helper.getName());
+            form.put("cl_location", "android自动打卡记录");
             int comDistance = PreferenceUtils.getInt("distance", 0);
             float distance = BaiduMapUtil.getInstence().getDistance();
             if (comDistance < distance) {
@@ -330,9 +330,24 @@ public class AutoErpSigninUitl implements HttpHandler.OnResultListener {
 
     }
 
+    boolean isErrorMac;
+
     @Override
     public void error(int what, int statuCode, String message, Bundle bundle) {
-
+        if (!StringUtils.isEmpty(message)) {
+            String msg = null;
+            if (StringUtils.isInclude(message, "该设备不是考勤打卡常用设备")) {
+                msg = "该设备不是考勤打卡常用设备,无法为您自动打卡";
+            } else if (StringUtils.isInclude(message, "设备正处于申请变更绑定阶段")) {
+                msg = "设备正处于申请变更绑定阶段,无法为您自动打卡";
+            } else if (StringUtils.isInclude(message, "该设备已被他人绑定")) {
+                msg = "该设备已被他人绑定,无法为您自动打卡";
+            }
+            if (!isErrorMac && !StringUtils.isEmpty(msg)) {
+                isErrorMac = true;
+                notificationManage.sendNotification(MyApplication.getInstance(), msg, WorkActivity.class);
+            }
+        }
     }
 
     /**
@@ -451,16 +466,18 @@ public class AutoErpSigninUitl implements HttpHandler.OnResultListener {
         String time = object.getString("cl_time");//获取最后一次打卡信息,班次打卡信息
         time = TimeUtils.clearDay(time);//获取到的
         if (StringUtils.isEmpty(time) || model == null) return;
-        if (StringUtils.isEmpty(model.getWorkSignin()) && model.getWorkStart().compareTo(time) < 0
-                && model.getWorkTime().compareTo(time) > 0) {
+        if (StringUtils.isEmpty(model.getWorkSignin()) && model.getWorkStart().compareTo(time) <= 0
+                && model.getWorkTime().compareTo(time) >= 0) {
             model.setWorkSignin(time);
             long i = WorkModelDao.getInstance().update(model);
+            log("i=" + i);
             notificationManage.sendNotification(MyApplication.getInstance(),
                     R.string.auto_signin, WorkActivity.class);
-        } else if (StringUtils.isEmpty(model.getOffSignin()) && model.getOffTime().compareTo(time) < 0
-                && model.getOffend().compareTo(time) > 0) {
+        } else if (StringUtils.isEmpty(model.getOffSignin()) && model.getOffTime().compareTo(time) <= 0
+                && model.getOffend().compareTo(time) >= 0) {
             model.setOffSignin(time);
             long i = WorkModelDao.getInstance().update(model);
+            log("i=" + i);
             notificationManage.sendNotification(MyApplication.getInstance(),
                     R.string.auto_signin, WorkActivity.class);
         }
@@ -492,13 +509,16 @@ public class AutoErpSigninUitl implements HttpHandler.OnResultListener {
         double companyLongitude = 0;
         double companyLatitude = 0;
         int companyDistance = 0;
+        int innerdistance = 0;
         if (comaddressset) {
             companyLongitude = object.getDoubleValue("longitude");
             companyLatitude = object.getDoubleValue("latitude");
             companyDistance = object.getIntValue("distance");
+            innerdistance = object.getIntValue("innerdistance");
         }
         try {
             PreferenceUtils.putInt("distance", companyDistance);
+            PreferenceUtils.putInt("innerdistance", innerdistance);
             PreferenceUtils.putFloat("longitude", (float) companyLongitude);
             PreferenceUtils.putFloat("latitude", (float) companyLatitude);
         } catch (ClassCastException e) {
@@ -574,14 +594,16 @@ public class AutoErpSigninUitl implements HttpHandler.OnResultListener {
      * @param models  获取班次信息时候的数据
      * @throws Exception
      */
-    private void handlerWorkLog(boolean isJSON, String message, final ArrayList<WorkModel> models) throws Exception {
+    private void handlerWorkLog(boolean isJSON, String message, ArrayList<WorkModel> models) throws Exception {
         if (!isJSON || ListUtils.isEmpty(models)) {
+            saveDb(models);
             return;
         }
         JSONObject object = JSON.parseObject(message);
         JSONArray listdata = object.getJSONArray("listdata");
         if (ListUtils.isEmpty(listdata)) {
             log("ListUtils.isEmpty(listdata) 数据为空,容错处理");
+            saveDb(models);
             return;
         }
         String timeLog = null;
@@ -608,7 +630,10 @@ public class AutoErpSigninUitl implements HttpHandler.OnResultListener {
                 }
             }
         }
-        //下拉数据后保存到数据库
+        saveDb(models);
+    }
+
+    private void saveDb(final List<WorkModel> models) {
         if (!ListUtils.isEmpty(models)) {
             //当天日期数据
             ThreadUtil.getInstance().addTask(new Runnable() {
@@ -629,7 +654,6 @@ public class AutoErpSigninUitl implements HttpHandler.OnResultListener {
         }
     }
 
-
     /**
      * 解析处理外勤计划列表并保存到数据库
      *

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

@@ -76,6 +76,7 @@ public class ReckonAutoUtil {
 
         long offStart = getTimeByHHmm(model.getOffTime());
         long offEnd = getTimeByHHmm(model.getOffend());
+
         if (workStart < System.currentTimeMillis() && workEnd > System.currentTimeMillis()) {
             int comDistance = PreferenceUtils.getInt(MyApplication.getInstance(), "distance", 0);//规定距离
             if (comDistance == 0) {
@@ -105,15 +106,13 @@ public class ReckonAutoUtil {
     /**
      * 计算是否符合提醒
      *
-     * @param isAlarm      是否开启提醒
      * @param intervalTime 轮回时间
      * @return
      */
-    public int reckonAlarm(boolean isAlarm, long intervalTime) {
+    public int reckonAlarm(long intervalTime) {
         WorkModel model = getPlaceWork();
         if (model == null) return 0;
         if (isOutoffWork(model)) return 1;
-        if (!isAlarm) return 0;
         long time = getWorkAlarm(model);
         if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= intervalTime) {
             model.setWorkAlarm(true);
@@ -173,7 +172,7 @@ public class ReckonAutoUtil {
     //5.判断是否离开工作范围
     protected boolean isOutoffWork(WorkModel model) {
         if (!isWorkTime(model)) return false;
-        int comDistance = PreferenceUtils.getInt(MyApplication.getInstance(), "distance", 0);//规定距离
+        int comDistance = PreferenceUtils.getInt(MyApplication.getInstance(), "innerdistance", 0);//规定距离
         if (comDistance == 0) return false;
         boolean is = comDistance < BaiduMapUtil.getInstence().getDistance() && !model.isLeaveAlarm();
         if (is) {

+ 15 - 8
WeiChat/src/main/res/layout/item_location_ls.xml

@@ -5,11 +5,22 @@
     android:background="@drawable/selector_me_menu_item_bg"
     android:padding="5dp">
 
+
+    <TextView
+        android:id="@+id/distance_tv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentRight="true"
+        android:text="name" />
+
     <TextView
         android:id="@+id/name_tv"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_toLeftOf="@+id/select_rb"
+        android:layout_toLeftOf="@+id/distance_tv"
+        android:ellipsize="end"
+        android:lines="1"
+        android:text="name"
         android:textColor="@color/text_main"
         android:textSize="@dimen/text_main" />
 
@@ -18,15 +29,11 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_below="@+id/name_tv"
-        android:layout_marginTop="2dp"
+        android:layout_marginTop="5dp"
         android:layout_toLeftOf="@+id/select_rb"
+        android:text="name"
         android:textColor="@color/text_hine"
         android:textSize="@dimen/text_hine" />
 
-    <TextView
-        android:id="@+id/distance_tv"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignParentRight="true"
-        android:padding="10dp" />
+
 </RelativeLayout>