|
|
@@ -1,9 +1,27 @@
|
|
|
package com.modular.apptasks.presenter;
|
|
|
|
|
|
+import android.content.BroadcastReceiver;
|
|
|
+import android.content.Context;
|
|
|
+import android.content.Intent;
|
|
|
+import android.content.IntentFilter;
|
|
|
+import android.support.v4.content.LocalBroadcastManager;
|
|
|
+
|
|
|
+import com.baidu.mapapi.model.LatLng;
|
|
|
+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.thread.ThreadUtil;
|
|
|
+import com.core.app.AppConstant;
|
|
|
+import com.core.app.MyApplication;
|
|
|
import com.core.dao.work.WorkModelDao;
|
|
|
import com.core.model.WorkModel;
|
|
|
+import com.core.net.http.http.OAHttpHelper;
|
|
|
+import com.core.net.location.BdLocationHelper;
|
|
|
+import com.core.utils.BaiduMapUtil;
|
|
|
+import com.modular.apptasks.util.AlarmUtil;
|
|
|
+import com.uas.appworks.OA.erp.utils.AutoErpSigninUitl;
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
@@ -14,38 +32,179 @@ import java.util.List;
|
|
|
*/
|
|
|
public class AutoPresenter {
|
|
|
|
|
|
+ private final String[] flags = {
|
|
|
+ AppConstant.CHANGE_WORK_TASK,//
|
|
|
+ AppConstant.UPDATA_ERP_CHANGE//切换账套
|
|
|
+ };
|
|
|
+
|
|
|
public static AutoPresenter onCreate() {
|
|
|
return new AutoPresenter();
|
|
|
}
|
|
|
|
|
|
- private AutoPresenter() {
|
|
|
+ private AutoErpSigninUitl signinUitl;
|
|
|
|
|
|
+ private AutoPresenter() {
|
|
|
+ signinUitl = new AutoErpSigninUitl();
|
|
|
+ initBroadcast();
|
|
|
+ initTask();
|
|
|
}
|
|
|
|
|
|
|
|
|
public void onDestroy() {
|
|
|
+ LocalBroadcastManager.getInstance(BaseConfig.getContext()).unregisterReceiver(updateReceiver);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void initTask() {
|
|
|
+ reckonWork(true);
|
|
|
+ }
|
|
|
|
|
|
+ /* 初始化广播 */
|
|
|
+ private void initBroadcast() {
|
|
|
+ IntentFilter filter = new IntentFilter();
|
|
|
+ if (flags != null && flags.length > 0) {
|
|
|
+ for (String e : flags)
|
|
|
+ filter.addAction(e);
|
|
|
+ }
|
|
|
+ LocalBroadcastManager.getInstance(BaseConfig.getContext()).registerReceiver(updateReceiver, filter);
|
|
|
}
|
|
|
|
|
|
+ private BroadcastReceiver updateReceiver = new BroadcastReceiver() {
|
|
|
+ @Override
|
|
|
+ public void onReceive(Context context, Intent intent) {
|
|
|
+ if (intent == null || StringUtil.isEmpty(intent.getAction())) return;
|
|
|
+ LogUtil.i("onReceive=" + intent.getAction());
|
|
|
+ switch (intent.getAction()) {
|
|
|
+ case AppConstant.CHANGE_WORK_TASK:
|
|
|
+ //判断是否开启任务
|
|
|
+ if (intent.getBooleanExtra(AppConstant.CHANGE_WORK_TASK, true)) {
|
|
|
+ reckonWork(false);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case AppConstant.UPDATA_ERP_CHANGE:
|
|
|
+ initTask();
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
|
|
|
/*计算打开*/
|
|
|
private void reckonWork(final boolean loadAble) {
|
|
|
ThreadUtil.getInstance().addTask(new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
- reckonWorkInThread(loadAble);
|
|
|
+ reckonWorkThread(loadAble);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- private void reckonWorkInThread(boolean loadAble) {
|
|
|
+ /**
|
|
|
+ * 尽最少的计算,判断时候需要打卡或是下一次打卡的时间戳
|
|
|
+ *
|
|
|
+ * @param loadAble
|
|
|
+ */
|
|
|
+ private void reckonWorkThread(boolean loadAble) {
|
|
|
List<WorkModel> models = WorkModelDao.getInstance().queryAuto();
|
|
|
if (!ListUtils.isEmpty(models)) {
|
|
|
-
|
|
|
+ String newHHMM = DateFormatUtil.long2Str(DateFormatUtil.HM);
|
|
|
+ for (WorkModel m : models) {
|
|
|
+ if (satisfyModelThread(newHHMM, m)) {
|
|
|
+ LogUtil.i("break;break;break;");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
} else if (loadAble) {
|
|
|
- //TODO 下拉数据
|
|
|
+ OAHttpHelper.getInstance().post(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ signinUitl.loadWorkSet();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /*判断班次是否符合打卡或是提交定时任务*/
|
|
|
+ private boolean satisfyModelThread(String newHHMM, WorkModel model) {
|
|
|
+ //1.判断上班(打卡条件:在上班开始时间到上班时间可以打卡)
|
|
|
+ //1.1 判断上班有没有打卡
|
|
|
+ if (StringUtil.isEmpty(model.getWorkSignin())) {
|
|
|
+ //1.2 判断当前时间是否在上班结束时间之前,当属于该范围,可以为他打卡
|
|
|
+ if (newHHMM.compareTo(model.getWorkTime()) <= 0) {
|
|
|
+ //1.3 判断当前时间在上班开始时间之后,符合打卡==》前往打卡
|
|
|
+ if (newHHMM.compareTo(model.getWorkStart()) >= 0) {
|
|
|
+ saveWorkLogThread(true, model);
|
|
|
+ return true;
|
|
|
+ } else {//当前时间在上班开始时间之前,需要定闹铃==》前往闹铃
|
|
|
+ pushAlarmThread(true, model);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ }//如果不符合,需要计算下班范围
|
|
|
}
|
|
|
+ //2.判断下班
|
|
|
+ //2.1 判断下班有没有打卡
|
|
|
+ if (StringUtil.isEmpty(model.getOffSignin())) {
|
|
|
+ //2.2 判断当前时间是否在下班结束范围之内,当属于该范围,可以为他打卡
|
|
|
+ if (newHHMM.compareTo(model.getOffend()) <= 0) {
|
|
|
+ //1.3 判断当前时间在下班时间之后,符合打卡==》前往打卡
|
|
|
+ if (newHHMM.compareTo(model.getOffTime()) >= 0) {
|
|
|
+ saveWorkLogThread(false, model);
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ pushAlarmThread(false, model);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
+ /*符合条件,进行判断距离和打卡操作*/
|
|
|
+ private void saveWorkLogThread(final boolean isWork, final WorkModel model) {
|
|
|
+ LogUtil.i("符合打卡时间");
|
|
|
+ MyApplication.getInstance().getBdLocationHelper().requestLocation(new BdLocationHelper.OnReceiveListener() {
|
|
|
+ @Override
|
|
|
+ public void receive(LatLng latLng, String location, String address) {
|
|
|
+ //判断是否符合打卡
|
|
|
+ if (BaiduMapUtil.getInstence().isInWorkPlce()) {
|
|
|
+ signinUitl.signinWork(model);
|
|
|
+ } else {
|
|
|
+ //不符合打卡情况下,去判断下一次打卡时间
|
|
|
+ ThreadUtil.getInstance().addTask(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ pushAlarmThread(isWork, model);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /*提交定时任务*/
|
|
|
+ private void pushAlarmThread(boolean isWork, WorkModel model) {
|
|
|
+ long nextTime = 0;
|
|
|
+ long startTime = 0;
|
|
|
+ long endTime = 0;
|
|
|
+ if (isWork) {
|
|
|
+ long workStart = DateFormatUtil.hhmm2Long(model.getWorkStart());
|
|
|
+ long workTime = DateFormatUtil.hhmm2Long(model.getWorkTime());
|
|
|
+ startTime = Math.max(workStart, workTime - 1000 * 30 * 60);
|
|
|
+ endTime = workTime;
|
|
|
+ } else {
|
|
|
+ startTime = DateFormatUtil.hhmm2Long(model.getOffTime());
|
|
|
+ endTime = startTime + 1000 * 30 * 60;
|
|
|
+ }
|
|
|
+ while (startTime <= endTime) {
|
|
|
+ if (startTime > System.currentTimeMillis()) {
|
|
|
+ nextTime = startTime;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ startTime += 5 * 60 * 1000;
|
|
|
+ }
|
|
|
+ AlarmUtil.startAlarm(AlarmUtil.ID_WORK, AlarmUtil.ACTION_WORK, nextTime);
|
|
|
+ }
|
|
|
|
|
|
}
|