|
|
@@ -50,17 +50,25 @@ public class AutoErpService extends Service {
|
|
|
private ReckonAutoUtil reckonAutoUtil;//计算工具
|
|
|
private NotificationManage notificationManage;//通知管理器
|
|
|
|
|
|
- private final long MINUTE = 60 * 1000;//一分钟的时间戳
|
|
|
- private long workInterval = 5 * MINUTE;//计算循环的时间
|
|
|
- private long missionInterval = 2 * MINUTE;//分钟计算一次
|
|
|
+ private final long INTERVAL = 2 * 60 * 1000;//每两分钟回来一次,防止时间太久出现回不来情况 通过 iter来判断是否进入判断
|
|
|
+ private final int WORK_ITER = 5;//计算循环的时间
|
|
|
private final int MISSION_ITER = 10;//外勤时间 2分钟的倍数
|
|
|
+
|
|
|
private AutoErpSigninUitl signinUitl;
|
|
|
|
|
|
+ private int missionIter;
|
|
|
+ private int workIter;
|
|
|
+
|
|
|
+
|
|
|
+ private boolean isWorkRuning = false;
|
|
|
+ private boolean isMissionRuning = false;
|
|
|
+ private boolean canWork = false;
|
|
|
+ private boolean canMission = false;
|
|
|
+
|
|
|
private final String[] flags = {
|
|
|
CHANGE_WORK_TASK,//
|
|
|
CHANGE_MISSION_TASK,//
|
|
|
INIT_MISSION_TASK,//初始化外勤签到任务
|
|
|
-
|
|
|
UPDATA_ERP_CHANGE//更换账套
|
|
|
};
|
|
|
private Handler handler = new Handler() {
|
|
|
@@ -95,11 +103,6 @@ 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
|
|
|
public void onReceive(Context context, Intent intent) {
|
|
|
@@ -111,13 +114,17 @@ public class AutoErpService extends Service {
|
|
|
} else if (intent.getAction().equals(CHANGE_WORK_TASK)) {//自动打卡任务变更
|
|
|
log(CHANGE_WORK_TASK);
|
|
|
canWork = intent.getBooleanExtra(CHANGE_WORK_TASK, true);//获取是否开启任务
|
|
|
- if (canWork && !isWorkRuning)
|
|
|
+ if (canWork && !isWorkRuning) {
|
|
|
startWorkTask();
|
|
|
+ } else
|
|
|
+ workIter = 0;
|
|
|
} else if (intent.getAction().equals(CHANGE_MISSION_TASK)) {//自动外勤任务开启变更
|
|
|
log(CHANGE_MISSION_TASK);
|
|
|
canMission = intent.getBooleanExtra(CHANGE_MISSION_TASK, true);
|
|
|
if (canMission && !isMissionRuning) {
|
|
|
startMissionTask();
|
|
|
+ } else {
|
|
|
+ missionIter = 0;
|
|
|
}
|
|
|
} else if (intent.getAction().equals(INIT_MISSION_TASK)) {
|
|
|
initMission();
|
|
|
@@ -174,7 +181,7 @@ public class AutoErpService extends Service {
|
|
|
private void startWorkTask() throws Exception {
|
|
|
log("startWorkTask");
|
|
|
isWorkRuning = true;
|
|
|
- iter = 1;
|
|
|
+ workIter = 0;
|
|
|
ThreadUtil.getInstance().addLoopTask(new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
@@ -184,43 +191,46 @@ public class AutoErpService extends Service {
|
|
|
isWorkRuning = false;
|
|
|
break;
|
|
|
}
|
|
|
- //百度地图定位
|
|
|
+ //如果外勤没有打开,由内勤作为定位
|
|
|
if (!isMissionRuning) {
|
|
|
- iter++;
|
|
|
- if (iter == 2) {
|
|
|
- iter = 1;
|
|
|
+ int i = WORK_ITER - 1;
|
|
|
+ if (workIter == i) {
|
|
|
MyApplication.getInstance().getBdLocationHelper().requestLocation();
|
|
|
}
|
|
|
}
|
|
|
- log("startWorkTask run");
|
|
|
- //是否提醒
|
|
|
- if (CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(),
|
|
|
- AppConfig.AUTO_SIGNIN, true)) {
|
|
|
- WorkModel model = getReckonAutoUtil().reckonAutoWork();
|
|
|
- if (model != null) {
|
|
|
- log("符合打卡");
|
|
|
- //TODO 符合打卡
|
|
|
- Message message = handler.obtainMessage();
|
|
|
- message.what = STATUS_SIGNING;
|
|
|
- Bundle bundle = new Bundle();
|
|
|
- bundle.putParcelable("data", model);
|
|
|
- message.setData(bundle);
|
|
|
- handler.sendMessage(message);
|
|
|
- }
|
|
|
- } 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);
|
|
|
- } else if (type == 2) {
|
|
|
- //TODO 符合上班提醒
|
|
|
- handler.sendEmptyMessage(STATUS_WORK_ALARM);
|
|
|
- } else if (type == 3) {
|
|
|
- //TODO 符合下班提醒
|
|
|
- handler.sendEmptyMessage(STATUS_OFF_ALARM);
|
|
|
+ if (workIter == 0 || workIter == WORK_ITER) {
|
|
|
+ workIter = 0;
|
|
|
+ log("startWorkTask run");
|
|
|
+ if (CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(),
|
|
|
+ AppConfig.AUTO_SIGNIN, true)) {
|
|
|
+ //计算打卡
|
|
|
+ WorkModel model = getReckonAutoUtil().reckonAutoWork();
|
|
|
+ if (model != null) {
|
|
|
+ log("符合打卡");
|
|
|
+ //TODO 符合打卡
|
|
|
+ Message message = handler.obtainMessage();
|
|
|
+ message.what = STATUS_SIGNING;
|
|
|
+ Bundle bundle = new Bundle();
|
|
|
+ bundle.putParcelable("data", model);
|
|
|
+ message.setData(bundle);
|
|
|
+ handler.sendMessage(message);
|
|
|
+ }
|
|
|
+ } else if (CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), AppConfig.ALARMA_CLICK, false)) {//提醒 1.离开办公室 2.上班提醒 3.下班提醒
|
|
|
+ int type = getReckonAutoUtil().reckonAlarm(INTERVAL);
|
|
|
+ if (type == 1) {
|
|
|
+ //TODO 符合离开办公室提醒
|
|
|
+ handler.sendEmptyMessage(STATUS_LEAVE_ALARM);
|
|
|
+ } else if (type == 2) {
|
|
|
+ //TODO 符合上班提醒
|
|
|
+ handler.sendEmptyMessage(STATUS_WORK_ALARM);
|
|
|
+ } else if (type == 3) {
|
|
|
+ //TODO 符合下班提醒
|
|
|
+ handler.sendEmptyMessage(STATUS_OFF_ALARM);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- Thread.sleep(workInterval);
|
|
|
+ workIter++;
|
|
|
+ Thread.sleep(INTERVAL);
|
|
|
} catch (InterruptedException e) {
|
|
|
if (e != null)
|
|
|
log("startWorkTask InterruptedException=" + e.getMessage());
|
|
|
@@ -231,11 +241,8 @@ public class AutoErpService extends Service {
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
-
|
|
|
}
|
|
|
|
|
|
- private int iter;
|
|
|
-
|
|
|
/**
|
|
|
* 开启自动外勤任务
|
|
|
* 在获取外勤计划列表之后
|
|
|
@@ -244,7 +251,7 @@ public class AutoErpService extends Service {
|
|
|
*/
|
|
|
private void startMissionTask() throws Exception {
|
|
|
log("startMissionTask");
|
|
|
- iter = 0;
|
|
|
+ missionIter = 0;
|
|
|
isMissionRuning = true;
|
|
|
ThreadUtil.getInstance().addLoopTask(new Runnable() {
|
|
|
@Override
|
|
|
@@ -259,12 +266,12 @@ public class AutoErpService extends Service {
|
|
|
log("startMissionTask run");
|
|
|
save("外勤", "startMissionTask run");
|
|
|
int i = MISSION_ITER - 1;
|
|
|
- if (iter == i) {
|
|
|
+ if (missionIter == i) {
|
|
|
MyApplication.getInstance().getBdLocationHelper().requestLocation();
|
|
|
}
|
|
|
- if (iter == 0 || iter == MISSION_ITER) {
|
|
|
+ if (missionIter == 0 || missionIter == MISSION_ITER) {
|
|
|
save("外勤", "符合进来计算");
|
|
|
- iter = 1;
|
|
|
+ missionIter = 0;
|
|
|
List<MissionModel> plans = MissionDao.getInstance().queryByEnCode();
|
|
|
log("自动外勤 plans==" + (ListUtils.isEmpty(plans) ? 0 : plans.size()));
|
|
|
//符合外勤判断
|
|
|
@@ -284,8 +291,8 @@ public class AutoErpService extends Service {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- iter++;
|
|
|
- Thread.sleep(missionInterval);
|
|
|
+ missionIter++;
|
|
|
+ Thread.sleep(INTERVAL);
|
|
|
} catch (InterruptedException e) {
|
|
|
if (e != null)
|
|
|
log("startWorkTask InterruptedException=" + e.getMessage());
|
|
|
@@ -326,7 +333,11 @@ public class AutoErpService extends Service {
|
|
|
}
|
|
|
|
|
|
|
|
|
- private void init() {
|
|
|
+ private void init() throws Exception {
|
|
|
+ try {
|
|
|
+ MyApplication.getInstance().getBdLocationHelper().requestLocation();
|
|
|
+ } catch (Exception e) {
|
|
|
+ }
|
|
|
signinUitl = new AutoErpSigninUitl();
|
|
|
initWork();
|
|
|
initMission();
|