|
|
@@ -2,7 +2,6 @@ package com.xzjmyk.pm.activity.ui.erp.fragment;
|
|
|
|
|
|
|
|
|
import android.os.Bundle;
|
|
|
-import android.os.Looper;
|
|
|
import android.view.LayoutInflater;
|
|
|
import android.view.View;
|
|
|
import android.view.ViewGroup;
|
|
|
@@ -12,7 +11,6 @@ import android.widget.ScrollView;
|
|
|
import android.widget.TextView;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
-import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.lidroid.xutils.ViewUtils;
|
|
|
import com.lidroid.xutils.view.annotation.ViewInject;
|
|
|
@@ -22,11 +20,11 @@ import com.xzjmyk.pm.activity.ui.base.EasyFragment;
|
|
|
import com.xzjmyk.pm.activity.ui.erp.model.oa.WorkModel;
|
|
|
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.LogUtil;
|
|
|
import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
|
|
|
import com.xzjmyk.pm.activity.ui.erp.util.auto.HttpHandler;
|
|
|
import com.xzjmyk.pm.activity.ui.erp.view.oacalender.CalenderView;
|
|
|
import com.xzjmyk.pm.activity.util.TimeUtils;
|
|
|
+import com.xzjmyk.pm.activity.util.WorkHandlerUtil;
|
|
|
import com.xzjmyk.pm.activity.view.crouton.Crouton;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
@@ -47,6 +45,8 @@ public class AttendanceFragment extends EasyFragment implements HttpHandler.OnRe
|
|
|
private ScrollView month_sv;
|
|
|
@ViewInject(R.id.day_lv)
|
|
|
private ListView day_lv;
|
|
|
+ @ViewInject(R.id.date_tv)
|
|
|
+ private TextView date_tv;
|
|
|
|
|
|
@ViewInject(R.id.l1)
|
|
|
private TextView l1;
|
|
|
@@ -76,6 +76,7 @@ public class AttendanceFragment extends EasyFragment implements HttpHandler.OnRe
|
|
|
|
|
|
private WorkAdapter adapter;
|
|
|
private Date selectDate = null;
|
|
|
+ private String newHHmm;
|
|
|
|
|
|
|
|
|
@Override
|
|
|
@@ -92,12 +93,9 @@ public class AttendanceFragment extends EasyFragment implements HttpHandler.OnRe
|
|
|
}
|
|
|
|
|
|
private void initView() {
|
|
|
- calender.setOnMonthChangeListener(new CalenderView.OnMonthChangeListener() {
|
|
|
- @Override
|
|
|
- public void selected(String yyyyMM) {
|
|
|
- loadByNet(yyyyMM);
|
|
|
- }
|
|
|
- });
|
|
|
+ newHHmm = TimeUtils.long2str(System.currentTimeMillis(), "HH:mm");
|
|
|
+ date_tv.setText(TimeUtils.long2str(System.currentTimeMillis(), "yyyy年MM月"));
|
|
|
+
|
|
|
loadByNet(TimeUtils.long2str(System.currentTimeMillis(), "yyyyMM"));
|
|
|
View emptyView = LayoutInflater.from(ct).inflate(R.layout.erp_empty_view, null);
|
|
|
day_lv.setEmptyView(emptyView);
|
|
|
@@ -110,14 +108,15 @@ public class AttendanceFragment extends EasyFragment implements HttpHandler.OnRe
|
|
|
public void selected(boolean isClickAgen, Date date) {
|
|
|
selectDate = date;
|
|
|
showMessage(isClickAgen);
|
|
|
- LogUtil.d("selectDate=" + TimeUtils.f_long_2_str(selectDate.getTime()));
|
|
|
- LogUtil.d("xiancheng==" + (Looper.getMainLooper() == Looper.myLooper()));
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
calender.setOnMonthChangeListener(new CalenderView.OnMonthChangeListener() {
|
|
|
@Override
|
|
|
public void selected(String yyyyMM) {
|
|
|
- LogUtil.d("yyyyMM=" + yyyyMM);
|
|
|
+ long time = TimeUtils.str2long(yyyyMM, "yyyyMM");
|
|
|
+ if (time != 0)
|
|
|
+ date_tv.setText(TimeUtils.long2str(time, "yyyy年MM月"));
|
|
|
loadByNet(yyyyMM);
|
|
|
}
|
|
|
});
|
|
|
@@ -180,134 +179,26 @@ public class AttendanceFragment extends EasyFragment implements HttpHandler.OnRe
|
|
|
* 处理打卡签到
|
|
|
*/
|
|
|
private void handlerWorkData(JSONObject object, Bundle bundle) throws Exception {
|
|
|
- ArrayList<WorkModel> models = new ArrayList<>();
|
|
|
- if (object.containsKey("wd_degree")) {//有排班
|
|
|
- if (object.containsKey("Class1")) {
|
|
|
- handlerByClass(models, object.getJSONObject("Class1"));
|
|
|
- }
|
|
|
- if (object.containsKey("Class2")) {
|
|
|
- handlerByClass(models, object.getJSONObject("Class2"));
|
|
|
- }
|
|
|
- if (object.containsKey("Class3")) {
|
|
|
- handlerByClass(models, object.getJSONObject("Class3"));
|
|
|
- }
|
|
|
- }
|
|
|
+ ArrayList<WorkModel> models = WorkHandlerUtil.handlerWorkData(object);
|
|
|
if (ListUtils.isEmpty(models)) {
|
|
|
setDate2Adapter(null);
|
|
|
}
|
|
|
loadLog(models, bundle);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 处理班次情况,简化代码 分开函数
|
|
|
- *
|
|
|
- * @param models
|
|
|
- * @param object
|
|
|
- */
|
|
|
- private void handlerByClass(ArrayList<WorkModel> models, JSONObject object) {
|
|
|
- String wd_onbeg = object.getString("wd_onbeg");
|
|
|
- String wd_onduty = object.getString("wd_onduty");
|
|
|
- String wd_offduty = object.getString("wd_offduty");
|
|
|
- String wd_offend = object.getString("wd_offend");
|
|
|
- if (StringUtils.isEmpty(wd_onbeg)
|
|
|
- || StringUtils.isEmpty(wd_onduty)
|
|
|
- || StringUtils.isEmpty(wd_offduty)
|
|
|
- || StringUtils.isEmpty(wd_offend)) return;
|
|
|
- WorkModel model = new WorkModel();
|
|
|
- model.setWorkStart(wd_onbeg);
|
|
|
- model.setWorkTime(wd_onduty);
|
|
|
- String rangeTime = null;
|
|
|
- try {
|
|
|
- rangeTime = getStartAndEndTime(true, wd_onduty);
|
|
|
- if (!StringUtils.isEmpty(rangeTime)) {
|
|
|
- model.setWorkend(rangeTime);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- model.setOffTime(wd_offduty);
|
|
|
- model.setOffend(wd_offend);
|
|
|
- try {
|
|
|
- rangeTime = getStartAndEndTime(false, wd_offduty);
|
|
|
- if (!StringUtils.isEmpty(rangeTime)) {
|
|
|
- model.setOffStart(rangeTime);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- models.add(model);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 处理打卡签到列表,建议在线程钟使用
|
|
|
*
|
|
|
- * @param models 获取班次信息时候的数据
|
|
|
+ * @param logModels 获取班次信息时候的数据
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
- private void handlerWorkLog(JSONObject object, final ArrayList<WorkModel> models) throws Exception {
|
|
|
- JSONArray listdata = object.getJSONArray("listdata");
|
|
|
- if (ListUtils.isEmpty(listdata)) {
|
|
|
- setDate2Adapter(null);
|
|
|
- return;
|
|
|
- }
|
|
|
- String timeLog = null;
|
|
|
- for (int i = 0; i < listdata.size(); i++) {
|
|
|
- timeLog = getMinTime(listdata.getJSONObject(i).getString("cl_time"));
|
|
|
- for (int j = 0; j < models.size(); j++) {
|
|
|
- WorkModel e = models.get(j);
|
|
|
- if (StringUtils.isEmpty(e.getWorkStart()) || StringUtils.isEmpty(e.getWorkTime()) ||
|
|
|
- StringUtils.isEmpty(e.getOffend()) || StringUtils.isEmpty(e.getOffTime()))
|
|
|
- continue;
|
|
|
- if (e.getWorkStart().compareTo(timeLog) <= 0 && e.getOffend().compareTo(timeLog) >= 0) {
|
|
|
- //符合该班次 上班开始时间<time<下班结束时间
|
|
|
- if (enoughWork(e, timeLog)) {//属于上班打卡
|
|
|
- models.get(j).setWorkSignin(timeLog);
|
|
|
- } else if (enoughOff(e, timeLog)) {//属于下班打卡
|
|
|
- models.get(j).setOffSignin(timeLog);
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- setDate2Adapter(models);
|
|
|
- }
|
|
|
+ private void handlerWorkLog(JSONObject object, final ArrayList<WorkModel> logModels) throws Exception {
|
|
|
+ ArrayList<WorkModel> models = WorkHandlerUtil.handlerWorkLog(object, logModels);
|
|
|
|
|
|
- private String getMinTime(String time) {
|
|
|
- if (StringUtils.isEmpty(time)) {
|
|
|
- return "";
|
|
|
- } else {
|
|
|
- return TimeUtils.long2str(TimeUtils.f_str_2_long(time), "HH:mm");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private boolean enoughWork(WorkModel e, String time) {
|
|
|
- if (!StringUtils.isEmpty(e.getWorkSignin())) return false;
|
|
|
- if (time.compareTo(e.getWorkTime()) < 0) return true;//小于上班时间
|
|
|
- if (time.compareTo(e.getOffTime()) < 0 && time.compareTo(e.getWorkend()) < 0)
|
|
|
- return true;//小于(下班时间于上班结束计算时间)最小值,小于但是上班没有签到过
|
|
|
- return false;
|
|
|
- }
|
|
|
|
|
|
- private boolean enoughOff(WorkModel e, String time) {
|
|
|
- if (time.compareTo(e.getOffTime()) > 0) return true;//大于下班时间
|
|
|
- if (time.compareTo(e.getWorkTime()) > 0 && time.compareTo(e.getOffStart()) > 0 &&
|
|
|
- !StringUtils.isEmpty(e.getWorkSignin()))
|
|
|
- return true;//小于下班时间,但是上班没有签到过
|
|
|
- return false;
|
|
|
+ setDate2Adapter(models);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取截至时间
|
|
|
- *
|
|
|
- * @param isWork 是否上班
|
|
|
- * @param workTime 时间 (上班时间||下班时间)
|
|
|
- * @return 服务器没有给的时间
|
|
|
- */
|
|
|
- private String getStartAndEndTime(boolean isWork, String workTime) throws Exception {
|
|
|
- long dayTime = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + workTime + ":00");//获取当前天的workTime
|
|
|
- long time = isWork ? dayTime + 90 * 60 * 1000 : dayTime - 90 * 60 * 1000;
|
|
|
- return TimeUtils.long2str(time, "HH:mm");
|
|
|
- }
|
|
|
|
|
|
private void handlerDate(JSONObject object) {
|
|
|
l1.setText("应该出勤 " + getNull(object, "ychuqin") + " 天");
|
|
|
@@ -425,11 +316,34 @@ public class AttendanceFragment extends EasyFragment implements HttpHandler.OnRe
|
|
|
|
|
|
private void initItemView(ViewHoder hoder, int position) {
|
|
|
WorkModel model = models.get(position);
|
|
|
- hoder.title_tv.setText("班次" + (position + 1));
|
|
|
- hoder.work_tv.setText("上班时间 " + model.getWorkTime());
|
|
|
- hoder.work_tag_tv.setText(StringUtils.isEmpty(model.getWorkSignin()) ? "" : model.getWorkSignin());
|
|
|
- hoder.off_tv.setText("下班时间 " + model.getOffTime());
|
|
|
- hoder.off_tag_tv.setText(StringUtils.isEmpty(model.getOffSignin()) ? "" : model.getOffSignin());
|
|
|
+ hoder.title_tv.setText("班次" + (position + 1) + " " + model.getWorkTime() + "-" + model.getOffTime());
|
|
|
+ hoder.work_tv.setText(StringUtils.isEmpty(model.getWorkSignin()) ? "" : model.getWorkSignin());
|
|
|
+ hoder.off_tv.setText(StringUtils.isEmpty(model.getOffSignin()) ? "" : model.getOffSignin());
|
|
|
+ String workTag = "";
|
|
|
+ if (StringUtils.isEmpty(model.getWorkSignin())) {
|
|
|
+ if (newHHmm.compareTo(model.getWorkend()) > 0)
|
|
|
+ workTag = "缺勤";
|
|
|
+ } else {
|
|
|
+ if (model.getWorkSignin().compareTo(model.getWorkTime()) > 0 && model.getWorkSignin().compareTo(model.getWorkend()) <= 0)
|
|
|
+ workTag = getLastTime(model.getWorkSignin(), model.getWorkTime(), true);
|
|
|
+ }
|
|
|
+ hoder.work_tag_tv.setText(workTag);
|
|
|
+
|
|
|
+ String offTag = "";
|
|
|
+ if (!StringUtils.isEmpty(model.getOffSignin())) {
|
|
|
+ if (model.getOffSignin().compareTo(model.getOffStart()) > 0 && model.getOffSignin().compareTo(model.getOffTime()) < 0)
|
|
|
+ offTag = getLastTime(model.getOffSignin(), model.getOffTime(), false);
|
|
|
+ }
|
|
|
+ hoder.off_tag_tv.setText(offTag);
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getLastTime(String signin, String time, boolean isWork) {
|
|
|
+ long lastTime = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + signin + ":00");
|
|
|
+ long thisTime = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + time + ":00");
|
|
|
+ float distance = (lastTime - thisTime) / 1000;//秒
|
|
|
+ int h = (int) (distance / 3600);
|
|
|
+ int m = (int) (distance % 3600) / 60;
|
|
|
+ return (isWork ? "迟到" : "早退") + h + "小时" + m + "分钟";
|
|
|
}
|
|
|
|
|
|
class ViewHoder {
|