From c95e9c6dd1d6429e747c72bd13043c8466483d40 Mon Sep 17 00:00:00 2001 From: itgaojian Date: Fri, 7 Jul 2023 16:58:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=B7=E5=81=87=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 16 + app/release/output-metadata.json | 4 +- app/src/main/AndroidManifest.xml | 2 +- .../activitys/base/MainActivity.java | 36 +- .../activitys/common/PhotoActivity.java | 23 +- .../activitys/issue/TakePointActivity.java | 20 +- .../activitys/mine/LeaveActivity.java | 157 +++++- .../activitys/mine/LeaveDetailActivity.java | 99 +++- .../activitys/mine/UserActivity.java | 14 +- .../adapters/LeaveHistoryAdapter.java | 56 +- .../adapters/holders/LeaveHistoryHolder.java | 11 + .../beans/LeaveCheckBean.java | 20 +- .../beans/LeaveDetailBean.java | 191 +++++-- .../realtimelocation/beans/LeaveListBean.java | 272 ++++++--- .../realtimelocation/beans/LeavePostBean.java | 38 ++ .../realtimelocation/beans/SignTimeBean.java | 49 ++ .../services/LocationService.java | 116 ++-- .../drawable-xhdpi/ic_level_approve_icon.png | Bin 0 -> 709 bytes .../drawable-xhdpi/ic_level_history_icon.png | Bin 0 -> 623 bytes .../main/res/drawable-xhdpi/ic_level_icon.png | Bin 0 -> 833 bytes .../drawable-xhdpi/ic_level_location_on.png | Bin 0 -> 1847 bytes app/src/main/res/layout/activity_leave.xml | 527 +++++++++++------- .../main/res/layout/activity_leave_detail.xml | 135 ++++- app/src/main/res/layout/activity_user.xml | 35 +- app/src/main/res/layout/item_leave_item.xml | 63 ++- app/src/main/res/values/strings.xml | 4 +- build.gradle | 4 +- .../cm_utils/constant/PathConfig.java | 9 + .../core/retrofit_net/BaseUrlApi.java | 2 +- .../photoview/adapter/ImageAdapter.java | 13 + .../sucstepsoft/cm_utils/utils/TimeUtils.java | 44 +- 31 files changed, 1489 insertions(+), 471 deletions(-) create mode 100644 app/src/main/res/drawable-xhdpi/ic_level_approve_icon.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_level_history_icon.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_level_icon.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_level_location_on.png diff --git a/app/build.gradle b/app/build.gradle index 4732f74..ced5e53 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,6 +16,7 @@ android { JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. ] } + buildTypes { release { minifyEnabled false @@ -37,6 +38,21 @@ android { defaultConfig { multiDexEnabled true } + + signingConfigs { + release { + storeFile file('/Users/adam/Documents/work/keystore/xukai.jks') + storePassword '123456' + keyAlias = 'xukai' + keyPassword '123456' + } + debug { + storeFile file('/Users/adam/Documents/work/keystore/xukai.jks') + storePassword '123456' + keyAlias = 'xukai' + keyPassword '123456' + } + } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index f9daae5..0721ff6 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -10,8 +10,8 @@ { "type": "SINGLE", "filters": [], - "versionCode": 46, - "versionName": "1.4.6", + "versionCode": 48, + "versionName": "1.4.8", "outputFile": "app-release.apk" } ] diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9e38e3c..8f7368c 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -51,7 +51,7 @@ tools:ignore="GoogleAppIndexingWarning" tools:replace="android:appComponentFactory"> dialog.dismiss()); @@ -611,7 +618,8 @@ public class MainActivity extends BaseActivity { checkAppVersion(); } else { ToastUtils.showLong("软件升级需要使用安装未知来源的权限,请授权."); - Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES); + Uri packageURI = Uri.parse("package:" + mActivity.getPackageName()); + Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI); startActivityForResult(intent, 10086); } } else { @@ -880,14 +888,19 @@ public class MainActivity extends BaseActivity { * 显示N员签到签退 */ private void showN() { - String nowHour = TimeUtils.getNowHour(); + String nowHour = TimeUtils.getNowHourHHmmSS(); if (mSignTimeBean != null) { if (isSgin) { //已经签到,显示签退 if (isSignOff) { ToastUtils.showShort("今日打卡已完成"); } else { - boolean isTimeLegal = TimeUtils.isInTime(mSignTimeBean.getNSignOutStr() + "-" + mSignTimeBean.getNSignOutEnd(), nowHour); + boolean isTimeLegal = false; + if (mSignTimeBean.isGa()) { + isTimeLegal = TimeUtils.isInTimeHHmmSS(mSignTimeBean.getGaSignOutStr() + "-" + mSignTimeBean.getGaSignOutEnd(), nowHour); + } else { + isTimeLegal = TimeUtils.isInTimeHHmmSS(mSignTimeBean.getNSignOutStr() + "-" + mSignTimeBean.getNSignOutEnd(), nowHour); + } if (isTimeLegal) { if (mPenLineList != null && mPenLineList.size() > 0) { if (checkCurrenPointIsBeyond(mCurrentLocation)) { @@ -905,7 +918,12 @@ public class MainActivity extends BaseActivity { } } else { //未签到 - boolean isLegalTime = TimeUtils.isInTime(mSignTimeBean.getNSignInStr() + "-" + mSignTimeBean.getNSignOutStr(), nowHour); + boolean isLegalTime = false; + if (mSignTimeBean.isGa()) { + isLegalTime = TimeUtils.isInTimeHHmmSS(mSignTimeBean.getGaSignInStr() + "-" + mSignTimeBean.getGaSignOutStr(), nowHour); + } else { + isLegalTime = TimeUtils.isInTimeHHmmSS(mSignTimeBean.getNSignInStr() + "-" + mSignTimeBean.getNSignOutStr(), nowHour); + } if (isLegalTime) { if (mPenLineList != null && mPenLineList.size() > 0) { if (checkCurrenPointIsBeyond(mCurrentLocation)) { @@ -929,14 +947,14 @@ public class MainActivity extends BaseActivity { * 显示片长签到签退 */ private void show() { - String nowHour = TimeUtils.getNowHour(); + String nowHour = TimeUtils.getNowHourHHmmSS(); if (mSignTimeBean != null) { if (isSgin) { //已经签到,显示签退 if (isSignOff) { ToastUtils.showShort("今日打卡已完成"); } else { - boolean isTimeLegal = TimeUtils.isInTime(mSignTimeBean.getSignOutStr() + "-" + mSignTimeBean.getSignOutEnd(), nowHour); + boolean isTimeLegal = TimeUtils.isInTimeHHmmSS(mSignTimeBean.getSignOutStr() + "-" + mSignTimeBean.getSignOutEnd(), nowHour); if (isTimeLegal) { if (mPenLineList != null && mPenLineList.size() > 0) { if (checkCurrenPointIsBeyond(mCurrentLocation)) { @@ -954,7 +972,7 @@ public class MainActivity extends BaseActivity { } } else { //未签到 - boolean isLegalTime = TimeUtils.isInTime(mSignTimeBean.getSignInStr() + "-" + mSignTimeBean.getSignOutStr(), nowHour); + boolean isLegalTime = TimeUtils.isInTimeHHmmSS(mSignTimeBean.getSignInStr() + "-" + mSignTimeBean.getSignOutStr(), nowHour); if (isLegalTime) { if (mPenLineList != null && mPenLineList.size() > 0) { if (checkCurrenPointIsBeyond(mCurrentLocation)) { diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/common/PhotoActivity.java b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/common/PhotoActivity.java index b1e9234..3c0468c 100755 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/common/PhotoActivity.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/common/PhotoActivity.java @@ -12,11 +12,8 @@ import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.Target; import com.sucstepsoft.cm_utils.constant.PathConfig; -import com.sucstepsoft.cm_utils.core.retrofit_net.download.DownloadUtils; -import com.sucstepsoft.cm_utils.core.retrofit_net.listener.DownloadListener; import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity; import com.sucstepsoft.cm_utils.core.widget.photoview.adapter.ImageAdapter; -import com.sucstepsoft.cm_utils.utils.LogUtils; import com.sucstepsoft.cm_utils.utils.ToastUtils; import com.sucstepsoft.cm_utils.utils.UIUtil; import com.sucstepsoft.realtimelocation.R; @@ -31,11 +28,9 @@ import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import io.reactivex.Observable; -import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; -import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; /** @@ -72,7 +67,9 @@ public class PhotoActivity extends BaseActivity { ToastUtils.showShort(R.string.check_imgurl); finish(); } else { - mVpImages.setAdapter(new ImageAdapter(this, mImgUrls)); + ImageAdapter imageAdapter = new ImageAdapter(this, mImgUrls); + imageAdapter.addImgClick(() -> finish()); + mVpImages.setAdapter(imageAdapter); mTvCount.setText(String.format(getResources().getString(R.string.img_position), 1, mImgUrls.size())); mVpImages.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override @@ -101,13 +98,13 @@ public class PhotoActivity extends BaseActivity { ProgressDialog dialog = UIUtil.initDialog(mActivity, "保存中..."); dialog.show(); Observable.create((ObservableOnSubscribe) e -> { - //通过gilde下载得到file文件,这里需要注意android.permission.INTERNET权限 - e.onNext(Glide.with(mActivity) - .load(s) - .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) - .get()); - e.onComplete(); - }).subscribeOn(Schedulers.io()) + //通过gilde下载得到file文件,这里需要注意android.permission.INTERNET权限 + e.onNext(Glide.with(mActivity) + .load(s) + .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) + .get()); + e.onComplete(); + }).subscribeOn(Schedulers.io()) .observeOn(Schedulers.newThread()) .subscribe(new Observer() { @Override diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/issue/TakePointActivity.java b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/issue/TakePointActivity.java index d6d38cb..31485bc 100755 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/issue/TakePointActivity.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/issue/TakePointActivity.java @@ -3,7 +3,6 @@ package com.sucstepsoft.realtimelocation.activitys.issue; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.text.TextUtils; import android.view.View; import android.widget.Button; @@ -37,9 +36,9 @@ import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption; import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult; import com.sucstepsoft.cm_utils.constant.PathConfig; import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity; +import com.sucstepsoft.cm_utils.utils.LogUtils; import com.sucstepsoft.cm_utils.utils.ToastUtils; import com.sucstepsoft.realtimelocation.R; -import com.sucstepsoft.realtimelocation.activitys.locus.LocusMapActivity; import butterknife.BindView; import butterknife.ButterKnife; @@ -223,6 +222,7 @@ public class TakePointActivity extends BaseActivity { @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) { + LogUtils.e(result.toString()); if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { // 没有检测到结果 @@ -297,16 +297,16 @@ public class TakePointActivity extends BaseActivity { } private void checkPointIsLegal(BDLocation bdLocation) { - if(PathConfig.IS_LIMIT){ + if (PathConfig.IS_LIMIT) { if (PathConfig.mDefaultCityCode.equals(bdLocation.getCityCode())) { if (bdLocation != null && bdLocation.getLatitude() != 0 && bdLocation.getLongitude() != 0) { if (bdLocation.getRadius() <= 150) { if (bdLocation != null && bdLocation.getLatitude() != Double.MIN_VALUE && bdLocation.getLongitude() != Double.MIN_VALUE) { mBaiduMap.setMyLocationEnabled(true); MyLocationData locData = new MyLocationData.Builder() - .accuracy(bdLocation.getRadius()) - .latitude(bdLocation.getLatitude()) - .longitude(bdLocation.getLongitude()).build(); + .accuracy(bdLocation.getRadius()) + .latitude(bdLocation.getLatitude()) + .longitude(bdLocation.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); if (mCurrentLocation == null) { mCurrentLocation = bdLocation; @@ -316,15 +316,15 @@ public class TakePointActivity extends BaseActivity { } } } - }else{ + } else { if (bdLocation != null && bdLocation.getLatitude() != 0 && bdLocation.getLongitude() != 0) { if (bdLocation.getRadius() <= 150) { if (bdLocation != null && bdLocation.getLatitude() != Double.MIN_VALUE && bdLocation.getLongitude() != Double.MIN_VALUE) { mBaiduMap.setMyLocationEnabled(true); MyLocationData locData = new MyLocationData.Builder() - .accuracy(bdLocation.getRadius()) - .latitude(bdLocation.getLatitude()) - .longitude(bdLocation.getLongitude()).build(); + .accuracy(bdLocation.getRadius()) + .latitude(bdLocation.getLatitude()) + .longitude(bdLocation.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); if (mCurrentLocation == null) { mCurrentLocation = bdLocation; diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveActivity.java b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveActivity.java index 83480b9..8ff1314 100755 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveActivity.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveActivity.java @@ -17,9 +17,21 @@ import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RadioGroup; import android.widget.RelativeLayout; import android.widget.TextView; +import android.widget.ZoomControls; +import com.baidu.mapapi.map.BaiduMap; +import com.baidu.mapapi.map.BitmapDescriptor; +import com.baidu.mapapi.map.BitmapDescriptorFactory; +import com.baidu.mapapi.map.MapStatus; +import com.baidu.mapapi.map.MapStatusUpdateFactory; +import com.baidu.mapapi.map.MarkerOptions; +import com.baidu.mapapi.map.TextureMapView; +import com.baidu.mapapi.model.LatLng; import com.bigkoo.pickerview.builder.OptionsPickerBuilder; import com.bigkoo.pickerview.view.OptionsPickerView; import com.google.gson.Gson; @@ -38,6 +50,7 @@ import com.sucstepsoft.cm_utils.utils.UIUtil; import com.sucstepsoft.cm_utils.utils.UserLgUtils; import com.sucstepsoft.realtimelocation.R; import com.sucstepsoft.realtimelocation.activitys.common.PhotoActivity; +import com.sucstepsoft.realtimelocation.activitys.issue.TakePointActivity; import com.sucstepsoft.realtimelocation.beans.BaseUserBean; import com.sucstepsoft.realtimelocation.beans.LeavePostBean; import com.sucstepsoft.realtimelocation.beans.SuccessBean; @@ -101,12 +114,25 @@ public class LeaveActivity extends BaseActivity { TextView mTvProof; @BindView(R.id.rlv_photo) RecyclerView mRlvPhoto; + @BindView(R.id.rg_is_self) + RadioGroup mRgIsSelf; + @BindView(R.id.tv_le_type_1) + TextView mTvLeType1; + @BindView(R.id.ll_point) + LinearLayout mLlPoint; + @BindView(R.id.tv_choose_point) + TextView mTvChoosePoint; + @BindView(R.id.tmv_map) + TextureMapView mMapView; + @BindView(R.id.et_address) + EditText mEtAddress; private Unbinder mBind; private String mStartTime = ""; private float mStart = 0; private String amOrPm = "am"; private float mEnd = 0; private String mEndTime = ""; + private int mIsSelf = 1;//默认私 private float mCount = 0.0f; private int startTimeAmOrPm = 0; private List mPhotos = new ArrayList<>(); @@ -117,6 +143,9 @@ public class LeaveActivity extends BaseActivity { private List mTypeList; private OptionsPickerView mTypePicker; private TypeListBean mSelType; + private String mLng; + private String mLat; + private List mTypeListBeans1; @Override protected int setLayoutId() { @@ -125,6 +154,7 @@ public class LeaveActivity extends BaseActivity { @Override public void initData() { +// 公出请假和因私请假 mBind = ButterKnife.bind(this); mTvBaseTitle.setText("请假"); refreshView(STATE_LOAD_SUCCESS); @@ -132,15 +162,26 @@ public class LeaveActivity extends BaseActivity { mTvPublish.setText("历史"); mTvPublish.setOnClickListener(v -> startActivity(new Intent(LeaveActivity.this, LeaveHistoryActivity.class))); mTvLeTypeTitle.setText(Html.fromHtml(getResources().getString(R.string.leave_type))); + mTvLeType1.setText(Html.fromHtml(getResources().getString(R.string.leave_type_1))); mTvLeStartTitle.setText(Html.fromHtml(getResources().getString(R.string.leave_start))); mTvLeEndTitle.setText(Html.fromHtml(getResources().getString(R.string.leave_end))); mTvLeCountTitle.setText(Html.fromHtml(getResources().getString(R.string.leave_count))); mTvLeCause.setText(Html.fromHtml(getResources().getString(R.string.leave_cause))); mTvProof.setText(Html.fromHtml(getResources().getString(R.string.leave_proof))); - mRlLeType.setOnClickListener(v -> choosePage(1)); + mRlLeType.setOnClickListener(v -> { + if (mIsSelf == 0) { + showTypePicker1(); + } else { + showTypePicker(); + } + }); mRlLeStart.setOnClickListener(v -> choosePage(2)); mRlLeEnd.setOnClickListener(v -> choosePage(3)); mBtnSubmit.setOnClickListener(v -> doSubmit()); + mTvChoosePoint.setOnClickListener(v -> { + Intent intent = new Intent(mActivity, TakePointActivity.class); + startActivityForResult(intent, 2322); + }); mPhotos.add(new AddPhotoBean()); mPhotoAdapter = new AddPhotoAdapter(LeaveActivity.this, mPhotos); @@ -165,21 +206,60 @@ public class LeaveActivity extends BaseActivity { startActivity(intent); } }); + mRgIsSelf.setOnCheckedChangeListener((group, checkedId) -> { + mSelType = null; + mTvLeTypeContent.setText(""); + mLat = ""; + mLng = ""; + mEtAddress.setText(""); + //移动到中心 + moveMapToDefault(); + if (checkedId == R.id.rb_1) { + //公 + mIsSelf = 0; + mTvLeTypeTitle.setText(Html.fromHtml(getResources().getString(R.string.leave_type_2))); + } else { + //私 + mTvLeTypeTitle.setText(Html.fromHtml(getResources().getString(R.string.leave_type))); + mIsSelf = 1; + mLlPoint.setVisibility(View.GONE); + } + }); + View child = mMapView.getChildAt(1); + if (child != null && (child instanceof ImageView || child instanceof ZoomControls)) { + child.setVisibility(View.GONE); + } + mMapView.showZoomControls(false); + moveMapToDefault(); setEditTextInhibitInputSpeChat(mEtLeCause); } + private void moveMapToDefault() { + mMapView.getMap().clear(); + LatLng point = new LatLng(PathConfig.LA, PathConfig.LO); + MapStatus.Builder builder = new MapStatus.Builder(); + builder.target(point).zoom(18.0f); + mMapView.getMap().animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); + } + private void doSubmit() { if (checkParams()) { ProgressDialog progressDialog = UIUtil.initDialog(LeaveActivity.this, "上报中..."); progressDialog.show(); String cause = mEtLeCause.getText().toString().trim(); LeavePostBean body = new LeavePostBean(); + body.setIsSelf(mIsSelf); body.setLeaveSummary(cause); body.setLeaveType(mSelType.getDictId()); body.setLeaveTypeName(mSelType.getDictName()); body.setLeaveTimeLong(mCount + ""); body.setLeaveTime(mStartTime); body.setLeaveTimeApm(amOrPm); + if (mIsSelf == 0 && PathConfig.LEAVE_OUTGOING_CITY5_OUTER.equals(mSelType.getDictId())) { + body.setOutgoingLat(mLat); + body.setOutgoingLng(mLng); + body.setOutgoingLocation(mEtAddress.getText().toString().trim()); + } if (mPhotoAdapter.getData().size() >= 2) { String ids = ""; for (int i = 0; i < mPhotoAdapter.getData().size(); i++) { @@ -312,6 +392,13 @@ public class LeaveActivity extends BaseActivity { e.printStackTrace(); } break; + case 2322: + mLng = data.getStringExtra("lo"); + mLat = data.getStringExtra("la"); + String address = data.getStringExtra("address"); + mEtAddress.setText(address); + moveMapToCenter(); + break; } } super.onActivityResult(requestCode, resultCode, data); @@ -402,11 +489,33 @@ public class LeaveActivity extends BaseActivity { .launch(); } + private void moveMapToCenter() { + mMapView.getMap().clear(); + Double l = Double.parseDouble(mLng); + Double a = Double.parseDouble(mLat); + BaiduMap map = mMapView.getMap(); + BitmapDescriptor mapIcon = BitmapDescriptorFactory.fromResource(R.drawable.ic_level_location_on); + MapStatus ms = new MapStatus.Builder().zoom(14).target(new LatLng(a, l)).build(); + map.animateMapStatus(MapStatusUpdateFactory.newMapStatus(ms)); + MarkerOptions markerOptions = new MarkerOptions() + .position(new LatLng(a, l))//mark出现的位置 + .icon(mapIcon) //mark图标 + .draggable(false)//mark可拖拽 + .animateType(MarkerOptions.MarkerAnimateType.none); + map.addOverlay(markerOptions); + } + private boolean checkParams() { if (mSelType == null) { - ToastUtils.showShort("请选择请假类型"); + ToastUtils.showShort(mIsSelf == 0 ? "请选择外出地点" : "请选择请假类别"); return false; } + if (PathConfig.LEAVE_OUTGOING_CITY5_OUTER.equals(mSelType.getDictId())) { + if (TextUtils.isEmpty(mLat) || TextUtils.isEmpty(mLng)) { + ToastUtils.showShort("请在地图选点中选择外出地点的经纬度"); + return false; + } + } if (TextUtils.isEmpty(mStartTime)) { ToastUtils.showShort("请选择开始时间"); return false; @@ -415,6 +524,7 @@ public class LeaveActivity extends BaseActivity { ToastUtils.showShort("请选择结束时间"); return false; } + String trim = mEtLeCause.getText().toString().trim(); if (TextUtils.isEmpty(trim)) { ToastUtils.showShort("请输入请假事由"); @@ -468,6 +578,9 @@ public class LeaveActivity extends BaseActivity { mTypeList = typeListBeans; showTypePicker(); break; + case 4:// + mTypeListBeans1 = typeListBeans; + showTypePicker1(); } } else { ToastUtils.showShort("暂无数据"); @@ -643,7 +756,42 @@ public class LeaveActivity extends BaseActivity { } /** - * 请假类型 + * 公 + */ + private void showTypePicker1() { + hideSoftKeyboard(); + if (mTypeListBeans1 != null && mTypeListBeans1.size() > 0) { + OptionsPickerView typePicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> { + mSelType = mTypeListBeans1.get(o1); + mTvLeTypeContent.setText(mSelType.getDictName()); + //重置 + mLat = ""; + mLng = ""; + mEtAddress.setText(""); + //移动到中心 + moveMapToDefault(); + if (PathConfig.LEAVE_OUTGOING_CITY5_INNER.equals(mSelType.getDictId())) { + //内-不需要经纬度 + mLlPoint.setVisibility(View.GONE); + } else { + //外-需要经纬度 + mLlPoint.setVisibility(View.VISIBLE); + } + }) + .setTitleText("请选择外出地点") + .setCancelColor(Color.parseColor("#1189FF")) + .setSubmitColor(Color.parseColor("#1189FF")) + .setTitleColor(Color.parseColor("#1189FF")) + .build(); + typePicker.setPicker(mTypeListBeans1); + typePicker.show(); + } else { + getDicListByType(PathConfig.DIC_LEAVE_2, 4); + } + } + + /** + * 私-请假类型 */ private void showTypePicker() { hideSoftKeyboard(); @@ -653,7 +801,7 @@ public class LeaveActivity extends BaseActivity { mSelType = mTypeList.get(o1); mTvLeTypeContent.setText(mSelType.getDictName()); }) - .setTitleText("请选择请假类型") + .setTitleText("请选择请假类别") .setCancelColor(Color.parseColor("#1189FF")) .setSubmitColor(Color.parseColor("#1189FF")) .setTitleColor(Color.parseColor("#1189FF")) @@ -664,6 +812,7 @@ public class LeaveActivity extends BaseActivity { } else { getDicListByType(PathConfig.DIC_LEAVE, 3); } + } @Override diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveDetailActivity.java b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveDetailActivity.java index e773025..6760cf1 100755 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveDetailActivity.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/LeaveDetailActivity.java @@ -8,11 +8,23 @@ import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; +import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.RadioButton; import android.widget.RelativeLayout; import android.widget.TextView; +import android.widget.ZoomControls; +import com.baidu.mapapi.map.BaiduMap; +import com.baidu.mapapi.map.BitmapDescriptor; +import com.baidu.mapapi.map.BitmapDescriptorFactory; +import com.baidu.mapapi.map.MapStatus; +import com.baidu.mapapi.map.MapStatusUpdateFactory; +import com.baidu.mapapi.map.MarkerOptions; +import com.baidu.mapapi.map.TextureMapView; +import com.baidu.mapapi.model.LatLng; import com.google.gson.Gson; +import com.sucstepsoft.cm_utils.constant.PathConfig; import com.sucstepsoft.cm_utils.core.retrofit_net.BaseUrlApi; import com.sucstepsoft.cm_utils.core.retrofit_net.RetrofitManager; import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity; @@ -91,6 +103,20 @@ public class LeaveDetailActivity extends BaseActivity { RecyclerView mRlvPhoto; @BindView(R.id.tv_hint) TextView mTvHint; + @BindView(R.id.rb_1) + RadioButton mRb1; + @BindView(R.id.rb_2) + RadioButton mRb2; + @BindView(R.id.ll_neirong_2) + LinearLayout mLlNeiRong2; + @BindView(R.id.neirong_2) + TextView mTvNeiRong2; + @BindView(R.id.ll_point) + LinearLayout mLlPoint; + @BindView(R.id.tv_address) + TextView mTvAddress; + @BindView(R.id.tmv_map) + TextureMapView mMapView; private Unbinder mBind; private String mType; private LeaveDetailBean mDetailBean; @@ -107,6 +133,11 @@ public class LeaveDetailActivity extends BaseActivity { mTvBaseTitle.setText("详情"); refreshView(STATE_LOAD_LOADING); mType = getIntent().getStringExtra("type"); + View child = mMapView.getChildAt(1); + if (child != null && (child instanceof ImageView || child instanceof ZoomControls)) { + child.setVisibility(View.GONE); + } + mMapView.showZoomControls(false); if (TextUtils.isEmpty(mType)) { ToastUtils.showShort("数据有误"); finish(); @@ -119,6 +150,7 @@ public class LeaveDetailActivity extends BaseActivity { finish(); } } + mBtnSubmit.setOnClickListener(v -> submit(1)); mBtnTurm.setOnClickListener(v -> submit(2)); } @@ -140,8 +172,8 @@ public class LeaveDetailActivity extends BaseActivity { Gson gson = new Gson(); LeaveCheckBean bean = new LeaveCheckBean(); String trim = mEtCase.getText().toString().trim(); - bean.setLeaveRefuseSummary(trim); - bean.setLeaveState(i); + bean.setApproverRefuseSummary(trim); + bean.setApproverState(i); String obj = gson.toJson(bean); RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), obj); RetrofitManager.getInstance() @@ -200,33 +232,62 @@ public class LeaveDetailActivity extends BaseActivity { mDetailBean = leaveDetailBean; refreshView(STATE_LOAD_SUCCESS); mEtLeCause.setText(leaveDetailBean.getLeaveSummary()); + if (PathConfig.LEAVE_OUTGOING_CITY5_OUTER.equals(mDetailBean.getLeaveType())) { + mLlPoint.setVisibility(View.VISIBLE); + mTvAddress.setText(mDetailBean.getOutgoingLocation()); + moveMapToCenter(mDetailBean.getOutgoingLat(), mDetailBean.getOutgoingLng()); + } else { + mLlPoint.setVisibility(View.GONE); + } mTvLeStartContent.setText(leaveDetailBean.getLeaveTime() + " " + leaveDetailBean.getLeaveTimeApm()); mTvLeCountContent.setText(leaveDetailBean.getLeaveTimeLong() + "天"); mTvQingRen.setText(leaveDetailBean.getLeaveUserName()); + mRb1.setChecked(leaveDetailBean.getIsSelf() == 0); + mRb2.setChecked(leaveDetailBean.getIsSelf() == 1); switch (leaveDetailBean.getLeaveState()) { case 0: mTvLeState.setText("待审批"); - if (mType.equals("show")) { + if (leaveDetailBean.getApproverState() == 0) { + if (mType.equals("show")) { + mLlBtns.setVisibility(View.GONE); + mllNeirong.setVisibility(View.GONE); + mLlNeiRong2.setVisibility(View.GONE); + } else { + mLlBtns.setVisibility(View.VISIBLE); + mllNeirong.setVisibility(View.GONE); + mLlNeiRong2.setVisibility(View.GONE); + } + } else if (leaveDetailBean.getApproverState() == 1) { mLlBtns.setVisibility(View.GONE); - mllNeirong.setVisibility(View.GONE); - } else { - mLlBtns.setVisibility(View.VISIBLE); - mllNeirong.setVisibility(View.GONE); + mllNeirong.setVisibility(View.VISIBLE); + mTvNeiron.setText(leaveDetailBean.getApproverRefuseSummary()); + mTvLeState.setText("待审批(二级)"); } break; case 1: mTvLeState.setText("已通过"); mLlBtns.setVisibility(View.GONE); mllNeirong.setVisibility(View.VISIBLE); - mTvNeiron.setText(leaveDetailBean.getLeaveRefuseSummary()); + mTvNeiron.setText(leaveDetailBean.getApproverRefuseSummary()); break; case 2: - mTvLeState.setText("拒绝"); + mTvLeState.setText("未批准"); mllNeirong.setVisibility(View.VISIBLE); mLlBtns.setVisibility(View.GONE); - mTvNeiron.setText(leaveDetailBean.getLeaveRefuseSummary()); + mTvNeiron.setText(leaveDetailBean.getApproverRefuseSummary()); break; } + if (leaveDetailBean.getApprover2State() == 0) { + mLlNeiRong2.setVisibility(View.GONE); + } else if (leaveDetailBean.getApprover2State() == 1) { + mLlNeiRong2.setVisibility(View.VISIBLE); + mTvNeiRong2.setText(leaveDetailBean.getApprover2RefuseSummary()); + } else if (leaveDetailBean.getApprover2State() == 2) { + mLlNeiRong2.setVisibility(View.VISIBLE); + mTvNeiRong2.setText(leaveDetailBean.getApprover2RefuseSummary()); + } else { + mLlNeiRong2.setVisibility(View.GONE); + } if (!TextUtils.isEmpty(leaveDetailBean.getLeaveType())) { mTvLeTypeContent.setText(leaveDetailBean.getLeaveTypeName()); } @@ -257,6 +318,8 @@ public class LeaveDetailActivity extends BaseActivity { startActivity(intent); }); } + + } else { refreshView(STATE_LOAD_EMPTY); } @@ -275,6 +338,22 @@ public class LeaveDetailActivity extends BaseActivity { }); } + + private void moveMapToCenter(String mLat, String mLng) { + Double l = Double.parseDouble(mLng); + Double a = Double.parseDouble(mLat); + BaiduMap map = mMapView.getMap(); + BitmapDescriptor mapIcon = BitmapDescriptorFactory.fromResource(R.drawable.ic_level_location_on); + MapStatus ms = new MapStatus.Builder().zoom(14).target(new LatLng(a, l)).build(); + map.animateMapStatus(MapStatusUpdateFactory.newMapStatus(ms)); + MarkerOptions markerOptions = new MarkerOptions() + .position(new LatLng(a, l))//mark出现的位置 + .icon(mapIcon) //mark图标 + .draggable(false)//mark可拖拽 + .animateType(MarkerOptions.MarkerAnimateType.none); + map.addOverlay(markerOptions); + } + @Override protected void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/UserActivity.java b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/UserActivity.java index 07821f7..118c049 100755 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/UserActivity.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/mine/UserActivity.java @@ -1,11 +1,7 @@ package com.sucstepsoft.realtimelocation.activitys.mine; -import android.Manifest; import android.app.ProgressDialog; -import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -14,16 +10,13 @@ import android.os.Build; import android.os.Environment; import android.provider.MediaStore; import android.provider.Settings; -import android.support.v4.app.ActivityCompat; import android.support.v4.content.FileProvider; import android.support.v7.app.AlertDialog; -import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Base64; import android.view.Gravity; import android.view.View; import android.widget.Button; -import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; @@ -46,8 +39,6 @@ import com.sucstepsoft.cm_utils.utils.FileIOUtils; import com.sucstepsoft.cm_utils.utils.FileUtils; import com.sucstepsoft.cm_utils.utils.LogUtils; import com.sucstepsoft.cm_utils.utils.ProiderUtil; -import com.sucstepsoft.cm_utils.utils.SPUtils; -import com.sucstepsoft.cm_utils.utils.TimeUtils; import com.sucstepsoft.cm_utils.utils.ToastUtils; import com.sucstepsoft.cm_utils.utils.UIUtil; import com.sucstepsoft.cm_utils.utils.UserLgUtils; @@ -65,8 +56,6 @@ import com.sucstepsoft.realtimelocation.utils.ExceptionHandler; import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; import java.util.UUID; import butterknife.BindView; @@ -115,6 +104,8 @@ public class UserActivity extends BaseActivity { RelativeLayout mRlLeaveCheck; @BindView(R.id.btn_back) Button mBtnBack; + @BindView(R.id.rl_leave_history) + RelativeLayout mRlLeaveHistory; private String mPicPath; private Unbinder mBind; @@ -139,6 +130,7 @@ public class UserActivity extends BaseActivity { mIvUserIcon.setOnClickListener(v -> changeUserIcon()); mRlLeave.setOnClickListener(v -> choosePage(3)); mRlLeaveCheck.setOnClickListener(v -> choosePage(4)); + mRlLeaveHistory.setOnClickListener(v -> startActivity(new Intent(UserActivity.this, LeaveHistoryActivity.class))); String pathStr = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + PathConfig.CATCH_PATH; String dirSize = FileUtils.getDirSize(pathStr); LogUtils.e(dirSize); diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/adapters/LeaveHistoryAdapter.java b/app/src/main/java/com/sucstepsoft/realtimelocation/adapters/LeaveHistoryAdapter.java index 3e64875..8bda2b1 100755 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/adapters/LeaveHistoryAdapter.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/adapters/LeaveHistoryAdapter.java @@ -4,19 +4,12 @@ import android.content.Context; import android.graphics.Color; import android.text.TextUtils; import android.view.LayoutInflater; -import android.view.TextureView; import android.view.View; import android.view.ViewGroup; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.resource.bitmap.CircleCrop; -import com.bumptech.glide.request.RequestOptions; -import com.sucstepsoft.cm_utils.core.retrofit_net.BaseUrlApi; import com.sucstepsoft.cm_utils.core.widget.base.BaseRecyclerAdapter; import com.sucstepsoft.realtimelocation.R; -import com.sucstepsoft.realtimelocation.adapters.holders.IssueSubHolder; import com.sucstepsoft.realtimelocation.adapters.holders.LeaveHistoryHolder; -import com.sucstepsoft.realtimelocation.beans.IssueSubBean; import com.sucstepsoft.realtimelocation.beans.LeaveListBean; import java.util.List; @@ -47,6 +40,7 @@ public class LeaveHistoryAdapter extends BaseRecyclerAdapter rows; + private int total; public int getPage() { return page; @@ -29,14 +23,6 @@ public class LeaveListBean { this.page = page; } - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - public List getRows() { return rows; } @@ -45,92 +31,70 @@ public class LeaveListBean { this.rows = rows; } - public static class RowsBean implements Serializable { - /** - * leaveId : 195ed765-f5fd-4bc6-a24f-175c081b6ac6 - * leaveTime : 2019-10-13 - * leaveType : busy - * leaveSummary : hdhdhdhdj - * leaveTimeLong : 0.5 - * leaveState : 0 - * approverId : 3d43a28e-d274-41d1-a87e-82056c5b8e4b - * approverName : 刘婷 - */ + public int getTotal() { + return total; + } - private String leaveId; - private String leaveTime; - private String leaveType; - private String leaveTypeName; - private String leaveSummary; - private String leaveTimeLong; - private int leaveState; + public void setTotal(int total) { + this.total = total; + } + + public static class RowsBean implements Serializable { + private String approver2Id; + private String approver2Name; + private String approver2RefuseSummary; + private int approver2State; private String approverId; private String approverName; + private String approverRefuseSummary; + private int approverState; + private int isSelf; + private String leaveId; + private String leaveImg; + private String leaveRefuseSummary; + private int leaveState; + private String leaveSummary; + private String leaveTime; + private String leaveTimeApm; + private String leaveTimeEnd; + private String leaveTimeLong; + private String leaveType; + private String leaveTypeName; + private String leaveUserId; private String leaveUserName; + private String userAvatar; + private String userPhone; - - public String getLeaveTypeName() { - return leaveTypeName; + public String getApprover2Id() { + return approver2Id; } - public void setLeaveTypeName(String leaveTypeName) { - this.leaveTypeName = leaveTypeName; + public void setApprover2Id(String approver2Id) { + this.approver2Id = approver2Id; } - public String getLeaveUserName() { - return leaveUserName; + public String getApprover2Name() { + return approver2Name; } - public void setLeaveUserName(String leaveUserName) { - this.leaveUserName = leaveUserName; + public void setApprover2Name(String approver2Name) { + this.approver2Name = approver2Name; } - public String getLeaveId() { - return leaveId; + public String getApprover2RefuseSummary() { + return approver2RefuseSummary; } - public void setLeaveId(String leaveId) { - this.leaveId = leaveId; + public void setApprover2RefuseSummary(String approver2RefuseSummary) { + this.approver2RefuseSummary = approver2RefuseSummary; } - public String getLeaveTime() { - return leaveTime; + public int getApprover2State() { + return approver2State; } - public void setLeaveTime(String leaveTime) { - this.leaveTime = leaveTime; - } - - public String getLeaveType() { - return leaveType; - } - - public void setLeaveType(String leaveType) { - this.leaveType = leaveType; - } - - public String getLeaveSummary() { - return leaveSummary; - } - - public void setLeaveSummary(String leaveSummary) { - this.leaveSummary = leaveSummary; - } - - public String getLeaveTimeLong() { - return leaveTimeLong; - } - - public void setLeaveTimeLong(String leaveTimeLong) { - this.leaveTimeLong = leaveTimeLong; - } - - public int getLeaveState() { - return leaveState; - } - - public void setLeaveState(int leaveState) { - this.leaveState = leaveState; + public void setApprover2State(int approver2State) { + this.approver2State = approver2State; } public String getApproverId() { @@ -148,5 +112,149 @@ public class LeaveListBean { public void setApproverName(String approverName) { this.approverName = approverName; } + + public String getApproverRefuseSummary() { + return approverRefuseSummary; + } + + public void setApproverRefuseSummary(String approverRefuseSummary) { + this.approverRefuseSummary = approverRefuseSummary; + } + + public int getApproverState() { + return approverState; + } + + public void setApproverState(int approverState) { + this.approverState = approverState; + } + + public int getIsSelf() { + return isSelf; + } + + public void setIsSelf(int isSelf) { + this.isSelf = isSelf; + } + + public String getLeaveId() { + return leaveId; + } + + public void setLeaveId(String leaveId) { + this.leaveId = leaveId; + } + + public String getLeaveImg() { + return leaveImg; + } + + public void setLeaveImg(String leaveImg) { + this.leaveImg = leaveImg; + } + + public String getLeaveRefuseSummary() { + return leaveRefuseSummary; + } + + public void setLeaveRefuseSummary(String leaveRefuseSummary) { + this.leaveRefuseSummary = leaveRefuseSummary; + } + + public int getLeaveState() { + return leaveState; + } + + public void setLeaveState(int leaveState) { + this.leaveState = leaveState; + } + + public String getLeaveSummary() { + return leaveSummary; + } + + public void setLeaveSummary(String leaveSummary) { + this.leaveSummary = leaveSummary; + } + + public String getLeaveTime() { + return leaveTime; + } + + public void setLeaveTime(String leaveTime) { + this.leaveTime = leaveTime; + } + + public String getLeaveTimeApm() { + return leaveTimeApm; + } + + public void setLeaveTimeApm(String leaveTimeApm) { + this.leaveTimeApm = leaveTimeApm; + } + + public String getLeaveTimeEnd() { + return leaveTimeEnd; + } + + public void setLeaveTimeEnd(String leaveTimeEnd) { + this.leaveTimeEnd = leaveTimeEnd; + } + + public String getLeaveTimeLong() { + return leaveTimeLong; + } + + public void setLeaveTimeLong(String leaveTimeLong) { + this.leaveTimeLong = leaveTimeLong; + } + + public String getLeaveType() { + return leaveType; + } + + public void setLeaveType(String leaveType) { + this.leaveType = leaveType; + } + + public String getLeaveTypeName() { + return leaveTypeName; + } + + public void setLeaveTypeName(String leaveTypeName) { + this.leaveTypeName = leaveTypeName; + } + + public String getLeaveUserId() { + return leaveUserId; + } + + public void setLeaveUserId(String leaveUserId) { + this.leaveUserId = leaveUserId; + } + + public String getLeaveUserName() { + return leaveUserName; + } + + public void setLeaveUserName(String leaveUserName) { + this.leaveUserName = leaveUserName; + } + + public String getUserAvatar() { + return userAvatar; + } + + public void setUserAvatar(String userAvatar) { + this.userAvatar = userAvatar; + } + + public String getUserPhone() { + return userPhone; + } + + public void setUserPhone(String userPhone) { + this.userPhone = userPhone; + } } } diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/beans/LeavePostBean.java b/app/src/main/java/com/sucstepsoft/realtimelocation/beans/LeavePostBean.java index 290c15b..e065e01 100755 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/beans/LeavePostBean.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/beans/LeavePostBean.java @@ -22,6 +22,44 @@ public class LeavePostBean { private String leaveTypeName; private String leaveTimeApm; private String leaveImg; + private int isSelf; + + private String outgoingLocation; + private String outgoingLng; + private String outgoingLat; + + + public String getOutgoingLocation() { + return outgoingLocation; + } + + public void setOutgoingLocation(String outgoingLocation) { + this.outgoingLocation = outgoingLocation; + } + + public String getOutgoingLng() { + return outgoingLng; + } + + public void setOutgoingLng(String outgoingLng) { + this.outgoingLng = outgoingLng; + } + + public String getOutgoingLat() { + return outgoingLat; + } + + public void setOutgoingLat(String outgoingLat) { + this.outgoingLat = outgoingLat; + } + + public int getIsSelf() { + return isSelf; + } + + public void setIsSelf(int isSelf) { + this.isSelf = isSelf; + } public String getLeaveTypeName() { return leaveTypeName; diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/beans/SignTimeBean.java b/app/src/main/java/com/sucstepsoft/realtimelocation/beans/SignTimeBean.java index 456ac3e..a712277 100755 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/beans/SignTimeBean.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/beans/SignTimeBean.java @@ -24,6 +24,53 @@ public class SignTimeBean implements Serializable { private String signOutEnd;//网格员签退结束时间 private String signOutStr;//网格员签退开始时间 + private boolean ga;//是否是公安 + private String gaSignInEnd;//公安签到结束时间 + private String gaSignInStr;//公安签到开始时间 + private String gaSignOutEnd;//公安签退结束时间 + private String gaSignOutStr;//公安签退开始时间 + + + public boolean isGa() { + return ga; + } + + public void setGa(boolean ga) { + this.ga = ga; + } + + public String getGaSignInEnd() { + return gaSignInEnd; + } + + public void setGaSignInEnd(String gaSignInEnd) { + this.gaSignInEnd = gaSignInEnd; + } + + public String getGaSignInStr() { + return gaSignInStr; + } + + public void setGaSignInStr(String gaSignInStr) { + this.gaSignInStr = gaSignInStr; + } + + public String getGaSignOutEnd() { + return gaSignOutEnd; + } + + public void setGaSignOutEnd(String gaSignOutEnd) { + this.gaSignOutEnd = gaSignOutEnd; + } + + public String getGaSignOutStr() { + return gaSignOutStr; + } + + public void setGaSignOutStr(String gaSignOutStr) { + this.gaSignOutStr = gaSignOutStr; + } + public String getNPositionRecordEnd() { return nPositionRecordEnd; } @@ -119,4 +166,6 @@ public class SignTimeBean implements Serializable { public void setSignOutStr(String signOutStr) { this.signOutStr = signOutStr; } + + } diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/services/LocationService.java b/app/src/main/java/com/sucstepsoft/realtimelocation/services/LocationService.java index 8815274..8cb6de6 100755 --- a/app/src/main/java/com/sucstepsoft/realtimelocation/services/LocationService.java +++ b/app/src/main/java/com/sucstepsoft/realtimelocation/services/LocationService.java @@ -454,6 +454,7 @@ public class LocationService extends NotificationService { @Override public void onNext(Long aLong) { String isHolday = GlobalProvider.getString(LocationService.this, "isHolday", ""); + LogUtils.e("是否请假:" + isHolday); if (!TextUtils.isEmpty(isHolday)) { if ("1".equals(isHolday)) { mIsHolday = true; @@ -545,9 +546,7 @@ public class LocationService extends NotificationService { mUploadPointTime = System.currentTimeMillis(); String nowHour = TimeUtils.getNowHour(); if (TimeUtils.isInTime("08:30-12:00", nowHour) || TimeUtils.isInTime("14:00-17:00", nowHour)) { - if (canUpload()) { - startLocation(); - } + startLocation(); NotificationUtils utils = new NotificationUtils(LocationService.this); utils.sendNotification(45, "片长工作", "您已较长时间未上传定位信息,可能当前位置信号弱,请检查GPS和数据开关设置或者移动到开阔位置."); } @@ -642,6 +641,8 @@ public class LocationService extends NotificationService { mSignOutEnd = signTimeBean.getSignOutEnd(); mPositionRecordSrt = signTimeBean.getPositionRecordSrt(); mPositionRecordEnd = signTimeBean.getPositionRecordEnd(); + LogUtils.e(signTimeBean); + } } @@ -954,6 +955,7 @@ public class LocationService extends NotificationService { private void sendLocationBroadcast(BDLocation bdLocation) { if (null != bdLocation) { boolean isLegal = checkSinglePoint(bdLocation); + LogUtils.e("定位是否合法:" + isLegal + "\n定位点:" + bdLocation.getLatitude() + "===" + bdLocation.getLongitude()); if (isLegal) { if (mTempList.size() >= 25) { checkPoints(); @@ -1096,23 +1098,25 @@ public class LocationService extends NotificationService { private void buildUploadPoint() { isFirst = false; if (mTempList.size() > 0) { - if (NetUtil.getInstance().isNetworkConnected(getApplicationContext())) { - LocationPosition position = new LocationPosition(); - position.setUserLatitude(mTempList.get(0).getLatitude() + ""); - position.setUserLongitude(mTempList.get(0).getLongitude() + ""); - position.setUserLocation(mTempList.get(0).getAddress().address); - position.setUserSpeed(mTempList.get(0).getSpeed() + ""); - Gson gson = new Gson(); - String s = gson.toJson(position); - uploadLocation(s); - } else { - //TODO 无网络状态下是否保存 - if (isSaveLocal) { - String textPoint = - "{\"userLongitude\":" + mTempList.get(0).getLongitude() + ",\"userLatitude\":" + mTempList.get(0).getLatitude() + ",\"userLocation\":\"" + mTempList.get(0).getAddrStr() + "\",\"createTime\":\"" + Utils.formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\"}"; - Utils.saveFile(textPoint, "testLocation.txt", true); - } - } + LocationPosition position = new LocationPosition(); + position.setUserLatitude(mTempList.get(0).getLatitude() + ""); + position.setUserLongitude(mTempList.get(0).getLongitude() + ""); + position.setUserLocation(mTempList.get(0).getAddress().address); + position.setUserSpeed(mTempList.get(0).getSpeed() + ""); + Gson gson = new Gson(); + String s = gson.toJson(position); + uploadLocation(s); +// if (NetUtil.getInstance().isNetworkConnected(getApplicationContext())) { +// +// } else { +// //TODO 无网络状态下是否保存 +// if (isSaveLocal) { +// String textPoint = +// "{\"userLongitude\":" + mTempList.get(0).getLongitude() + ",\"userLatitude\":" + mTempList.get(0).getLatitude() + ",\"userLocation\":\"" + mTempList.get(0).getAddrStr +// () + "\",\"createTime\":\"" + Utils.formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\"}"; +// Utils.saveFile(textPoint, "testLocation.txt", true); +// } +// } } } @@ -1181,6 +1185,7 @@ public class LocationService extends NotificationService { */ private boolean canUpload() { String userType = GlobalProvider.getString(LocationService.this, "userType", "P"); + LogUtils.e("用户登录类型:" + userType); //当前用户类型 String nowHourMM = TimeUtils.getNowHourMM(); boolean isCanUp; @@ -1216,49 +1221,44 @@ public class LocationService extends NotificationService { mCurrentLocation = null; mTempList.clear(); } else { - boolean canUp = canUpload(); - if (canUp) { - isUpload = true; - RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), points); - RetrofitManager.getInstance() - .create(LocationApiService.class) - .saveLocationData(body, token) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { + isUpload = true; + RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), points); + RetrofitManager.getInstance() + .create(LocationApiService.class) + .saveLocationData(body, token) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { - } + } - @Override - public void onNext(SuccessBean successBean) { - isUpload = false; - mCurrentLocation = null; - mTempList.clear(); - mUploadPointTime = System.currentTimeMillis(); - Intent intent = new Intent(); - intent.setAction("com.sucstepsoft.realtimelocation.isonlone"); - intent.putExtra("uploadTime", mUploadPointTime + ""); - sendBroadcast(intent); - } + @Override + public void onNext(SuccessBean successBean) { + isUpload = false; + mCurrentLocation = null; + mTempList.clear(); + mUploadPointTime = System.currentTimeMillis(); + Intent intent = new Intent(); + intent.setAction("com.sucstepsoft.realtimelocation.isonlone"); + intent.putExtra("uploadTime", mUploadPointTime + ""); + sendBroadcast(intent); + } - @Override - public void onError(Throwable e) { - isUpload = false; - mCurrentLocation = null; - mTempList.clear(); - e.printStackTrace(); - } + @Override + public void onError(Throwable e) { + isUpload = false; + mCurrentLocation = null; + mTempList.clear(); + e.printStackTrace(); + } - @Override - public void onComplete() { + @Override + public void onComplete() { - } - }); - } else { - mTempList.clear(); - } + } + }); } } } diff --git a/app/src/main/res/drawable-xhdpi/ic_level_approve_icon.png b/app/src/main/res/drawable-xhdpi/ic_level_approve_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7f1c4aa34cda57d8e8548d9efb60561c346a73ef GIT binary patch literal 709 zcmV;$0y_PPP)Px%e@R3^R9HvtmOE$^Q51&1V+{xC!6JwjSrAb~t*k@~5p9g%?hF|4 zkr*Mu%&w56(LzMA5DPKj0}Z-0|Id_3wDIs3+ha;Sm&r!Pgf5QeuPZMH)LWoDr!+*rZCj)4?xTt=0Z zT06i>grC`;7T~C?!j@lV$NLN&y^IhzI%Ni?jA6^gmS4I)kQv2-(Gml2)I77KPp#8@ rl(FUCGxgWNAc7gi7H=uJB?a&os+Phby;K;z00000NkvXXu0mjf!h<;e literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_level_history_icon.png b/app/src/main/res/drawable-xhdpi/ic_level_history_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..724df6d6020ad4cbeb6536b54585b820390544d2 GIT binary patch literal 623 zcmV-#0+9WQP)Px%DM>^@R9HvNmp^C}K@`S+@3gbkB3AwZ?Sm;ql(SV7EDWTuNFnJ0%3fMyn_CgJ zG1v$ef);{c+K38*5qks1RI$)fJH01!bL(aAZg$_!F2sea?wjxZc4l_oH$s)Ct8H3b zK{*W^8vLBY_x?|KPmdRLN3K0 z;IOgqsB8!25gl0$jSmBK^$o(=$in$y%3C^eZj#qzfK=U@9yAnpYuz^Joa6_IxP6m* z#sO0O3LG(*E|SOtR`d)l-Wl{xvP~jKcWd(isXha)n#>Xzj!jifW4!1&iOgpDp^4vc zx6DTI0HEB?Hl_z~pV}WjR@&`#0APoGoN}M22dMh?ZcIIZf3x5LQvCuPGf#gL0I)?O z$AuNWK#NzEiZ=rQJuV7eeTcBICjiQ-km?6uW={ZM!vRXICay~nXKUc_mCU1jilSEF&HzPxZLdl>d$G78p03+?#nZ>l^ zSctJek{LCbghOy633*Z|wI<@2_a95fp;#VwIu;|1C1NKJUreeb++*;8DVPx%`$%eSg&iUWp z+1eYo;6iqxd9SOs0t#mu7vIF`r%C&Dq}(rcv`a+({U zMORVGdn;k(KCbMs@=ZI<4dCe@LWQ-cQjaS)ZT)8l@bo;wWm~bd-w?0`M@DSo<^p(* zu+c^+!)Jn8&e-jT`~dY@Oc|rV{Kx>x1zc&iiOUbrsudJ5Xd{xtrx!GSUXN?8OkPvvaFIjPK?jMFmbt`@y*vY zC@~iCh6eeauPDvl3w&(@4yF$u`84j}$bsOar&S2e2q09Kgr!1`=962=kE)$?lR}RVtPzqb6?FYRY`SB zbBjtfrkVB>IEf?A!=L^gz@)0Lrq1sKb^$Sj$H5i8l-o4Ok8G~L+e8&G$Q#a900000 LNkvXXu0mjfp{H%L literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_level_location_on.png b/app/src/main/res/drawable-xhdpi/ic_level_location_on.png new file mode 100644 index 0000000000000000000000000000000000000000..110211d43ba85f53f338f86e18496a8dd241e633 GIT binary patch literal 1847 zcmV-72gvw|P)Px*@kvBMRCr$Hn{SLq0D72*AJ&m9*q5l2w`kkcLL~ca%1{Cub zwI~J7b72znCR}e@R5_wEpqzgUWkXcLjvGhhc2e0bQRIrofRX$FLa^Rrd~`c*|J7j= zhBu&?+lnLK3@gNv{{XJ{NlR{>7S4cD{uF|aEO!$0NrHl3<$&+At1@k>e=hzh zT<=4s0n81U*zYo388J;Xi(i#U^7HOK&PsOtM~FubPjS(qvTbNkSxq|ol1Tt_1ImR< zQT?S!l38q*2orrPj!WHBt8m8H0h{okdO7L-Uzm_>47eH9+f9pBi2y{&B;&sPs~_IS}WMR2Yg#La%( zglJ(veh4_4H#FSlWYtS z_LA~W`=2!6WGBJ?-gmU5?S*QEwc}Qe@DQ%o(^8TnpxEAkAm5*sWg2dO^9A2MJ;~0!yp$KO9MXEv4meQb(>P9Yp???f*#A1fh0;V(w-fvDyZMyq7QT zUT-^f8B&^z66T-4LCezl4L$M<0Sa%30u;Jj(op-hCCW2K6(?uV@ekuBksD@l9zwS*1T1Osw0SO(L72Qk`nO~o1D z3oLflvUJ6$0jCbNdjn>c!4H5NOcS;RZ+RIK&VaFhEu)$o0)2m5ifTQm)kVl`c>6b? zz7&Gr0omEQ*0vx&f$IfL+3E>rK#;PW{|<`L;loO4Ba(0%DeoI$;)OS$-VX{t1O0Ru zA?94!g_|{-IcSh18Uu7+C*{f@$OYzw*f4a0sia zHRsD0aI-&Yj%$vH&VYJ97`_no2Z1HcQ`;i+d$|3#*s|yIqBS6hKAQg=KKDi?@R&Ht zL!`aSqKqBA0fD-<{A4aKB5Wj;wYn_)Z>F`!fckPM+=J?s5q(-yP}_)m+LIB*I~t~a z2BI zP>W#-;bKzW!%?sM_8f$cr&9NHQ0@)}99#d@M)@si@1yN3K8PL98&E$f7Onto{lZdp z6Y2g3|9=b!DjCT?gm6geE@EN^#B3!lZuZ$P~v=5GYP-$3*qalLbFi?QJ? zi~%$K;AKQs&J%qjt{2=k$M!6o0j1nFkj=+b>ig%CIrR^*RUhj)V18A_y_exQb0@ln zalLGu#m9RPnqOJ{9Z9q>dmmQ1N4d`23$`nJMi{0pqTp%j@(}_ zxaa(g;@*N1OxRmQ|G}vOlcw3|AO^^r&Ld=P<<~*=JVsFTRKJF80bk2fEJbH zU)GD*Oi5b35V5`iL#kf_y%zN7f0^7jF;2G#mz=nigv`iMcv10pUMP#UT2*C0ip_v0 zwDu!`F9zBM%OgB`u*@q{uQTNc)O?b_$`d*{ySs~R*bLaE zl?{S(hrs(<(I&_~&~KkFi66Iux5dO}Kp^mG)$R(lO@f>QdWIsw^z`fmby4a~P@ePA l-HS*(`azMBZDFnQ{tdUX{ZK+axuyUB002ovPDHLkV1i0sinRa$ literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_leave.xml b/app/src/main/res/layout/activity_leave.xml index 7074e67..1cdb99f 100755 --- a/app/src/main/res/layout/activity_leave.xml +++ b/app/src/main/res/layout/activity_leave.xml @@ -1,206 +1,333 @@ - + android:layout_height="match_parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:background="@color/white">