package com.jqyd.son;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import java.util.UUID;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.LinearLayout.LayoutParams;
import android.content.Context;
import android.graphics.Bitmap;
import com.jqyd.camera.AccessoryDTO;
import com.jqyd.camera.PhotoUtil;
import com.jqyd.camera.UIUtil;
import com.jqyd.camera.PhotoDisplayBlock.AddPhotoButtonCallBack;
import com.jqyd.app.BitmapUtils;
import com.jqyd.app.GetDistance;
import com.jqyd.app.LocationUtils;
import com.jqyd.app.MyApp;
import com.jqyd.app.PublicDeal;
import com.jqyd.app.ShareMethod;
import com.jqyd.app.UpMyFile;
import com.jqyd.camera.PhotoDisplayBlock;
import com.jqyd.manager.Login;
import com.jqyd.manager.R;
import com.jqyd.model.GroupsModule;
import com.jqyd.model.LocationModule;
import com.jqyd.model.RecordModel;
import com.jqyd.pub.MyProgressDialog;
import com.jqyd.shareInterface.Baidu_location;
import com.jqyd.shareInterface.GpsService;
import com.jqyd.shareInterface.Optdb_interfce;
import com.jqyd.shareInterface.Optsharepre_interface;
import com.jqyd.shareInterface.SystemInfo;
import com.jqyd.shareInterface.UpdataToServer;
import com.jqyd.socket.UpSocketFile;
public class Ddxq extends Activity implements OnClickListener {
private LinearLayout mh_ddxq_ll;
private LinearLayout kh_ddxq_ll;
private TextView mh_signTs;
private EditText mh_qddd;
private EditText mh_bz;
private TextView khmcTv;
private TextView lxrTv;
private TextView lxdhTv;
private TextView lxdzTv;
private Button sign;
private Button back;
private Button ddlbHistory;
private Button bzHistory;
private MyProgressDialog pBar;
private String custId = "-1";
private double cuLon = 0.0;// 客户真实经度
private double cuLat = 0.0;// 客户真实纬度
private double cuClon = 0.0;// 客户粗经度
private double cuClat = 0.0;// 客户粗纬度
private int dislimit = 0;
// 签到结果、只针对固定工作制下的精确签到且为GPS定位获取位置方式有效
int point = 0;
int type = 0;
private String desc = "";// 描述 签到还是签退
private Optdb_interfce db = null;
private Optsharepre_interface share_obj = null;
private String kqaddr = "";
private String bz = "";
private MyApp myApp;
private long serverTimeSec = 0;
private SignThread signThread = null;
private upPhoto upPhotoThread=null;
private String log = "";// 记录日志
private ShareMethod shareMethod = null;
private final String TAG = "QDQT";
int param = 2;
private Baidu_location baidu;
LinearLayout PhotoLayout;
private PhotoDisplayBlock photoDisplayBlock;
private int imageNum = 0;
private MyBroadcastReciver receiveBroadCast;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.ddxq);
Log.e("oncreat", "onCreate");
mh_signTs = (TextView) findViewById(R.id.mh_signTs);
mh_qddd = (EditText) findViewById(R.id.mh_qddd);
mh_bz = (EditText) findViewById(R.id.mh_bz);
khmcTv = (TextView) findViewById(R.id.ddxq_khmc_tv);
lxrTv = (TextView) findViewById(R.id.ddxq_lxr_tv);
lxdhTv = (TextView) findViewById(R.id.ddxq_lxdh_tv);
lxdzTv = (TextView) findViewById(R.id.ddxq_lxdz_tv);
mh_ddxq_ll = (LinearLayout) this.findViewById(R.id.ddxq_mhqd_ll);
kh_ddxq_ll = (LinearLayout) this.findViewById(R.id.ddxq_khxq_ll);
sign = (Button) findViewById(R.id.sign);
back = (Button) findViewById(R.id.back);
ddlbHistory = (Button) this.findViewById(R.id.ddlbHistory);
bzHistory = (Button) this.findViewById(R.id.bzHistory);
sign.setOnClickListener(this);
back.setOnClickListener(this);
ddlbHistory.setOnClickListener(this);
bzHistory.setOnClickListener(this);
myApp = (MyApp) Ddxq.this.getApplication();
Intent intent = this.getIntent();
point = intent.getIntExtra("point", 0);// 用来判别精准签到和模糊签到、如果是分组跳转至当前界面则取默认值
share_obj = new Optsharepre_interface(Ddxq.this);
dislimit = Integer.parseInt(share_obj.getDataFromPres("DISLIMIT"));
shareMethod = new ShareMethod(Ddxq.this);
System.out
.println("签到方式:1、精签到--非正常2、精签到-正常0、粗签到***********************"
+ point);
type = myApp.getType();// 用来判别签到还是签退
if (share_obj.getDataFromPres("istakephoto").equals("1")) {
type = Integer.parseInt(share_obj.getDataFromPres("signtype"));
myApp.setType(type);
myApp.setPhoto(null);
UIUtil.showMsg(Ddxq.this, "手机内存不足,拍照失败");
} else {
share_obj.editPres("signtype", type + "");
}
Log.e("type", type + "");
Log.e("point", point + "");
if (type == 1) {
mh_signTs.setText("签到地点");
sign.setText("签 到");
desc = "签到";
if (point == 1 || point == 0) {// 粗
mh_ddxq_ll.setVisibility(LinearLayout.VISIBLE);
kh_ddxq_ll.setVisibility(LinearLayout.GONE);
PhotoLayout = (LinearLayout) findViewById(R.id.PhotoDisplayLayout1);
} else if (point == 2) {// 精
mh_ddxq_ll.setVisibility(LinearLayout.GONE);
kh_ddxq_ll.setVisibility(LinearLayout.VISIBLE);
Bundle bundle = intent.getExtras();
khmcTv.setText(bundle.getString("cname"));
lxrTv.setText(bundle.getString("linkman"));
lxdhTv.setText(bundle.getString("link_sim"));
lxdzTv.setText(bundle.getString("address"));
shareMethod.recordLog(bundle.getString("Short_name()")+","+bundle.getString("clon")+","+bundle.getString("clat"));
custId = bundle.getString("cid");
PhotoLayout = (LinearLayout) findViewById(R.id.PhotoDisplayLayout);
// 容错处理
String lonStr = bundle.getString("lon");
String latStr = bundle.getString("lat");
String clonStr = bundle.getString("clon");
String clatStr = bundle.getString("clat");
if (lonStr == null || lonStr.equals("")) {
lonStr = "0.0";
}
if (latStr == null || latStr.equals("")) {
latStr = "0.0";
}
if (clonStr == null || clonStr.equals("")) {
clonStr = "0.0";
}
if (clatStr == null || clatStr.equals("")) {
clatStr = "0.0";
}
cuLon = Double.parseDouble(lonStr);
cuLat = Double.parseDouble(latStr);
cuClon = Double.parseDouble(clonStr);
cuClat = Double.parseDouble(clatStr);
}
} else if (type == 2) {
mh_signTs.setText("签退地点");
sign.setText("签 退");
desc = "签退";
if (point == 1 || point == 0) {// 粗
mh_ddxq_ll.setVisibility(LinearLayout.VISIBLE);
kh_ddxq_ll.setVisibility(LinearLayout.GONE);
PhotoLayout = (LinearLayout) findViewById(R.id.PhotoDisplayLayout1);
} else if (point == 2) {// 精
mh_ddxq_ll.setVisibility(LinearLayout.GONE);
kh_ddxq_ll.setVisibility(LinearLayout.VISIBLE);
Bundle bundle = intent.getExtras();
khmcTv.setText(bundle.getString("cname"));
lxrTv.setText(bundle.getString("linkman"));
lxdhTv.setText(bundle.getString("link_sim"));
lxdzTv.setText(bundle.getString("address"));
custId = bundle.getString("cid");
PhotoLayout = (LinearLayout) findViewById(R.id.PhotoDisplayLayout);
// 容错处理
String lonStr = bundle.getString("lon");
String latStr = bundle.getString("lat");
String clonStr = bundle.getString("clon");
String clatStr = bundle.getString("clat");
if (lonStr == null || lonStr.equals("")) {
lonStr = "0.0";
}
if (latStr == null || latStr.equals("")) {
latStr = "0.0";
}
if (clonStr == null || clonStr.equals("")) {
clonStr = "0.0";
}
if (clatStr == null || clatStr.equals("")) {
clatStr = "0.0";
}
cuLon = Double.parseDouble(lonStr);
cuLat = Double.parseDouble(latStr);
cuClon = Double.parseDouble(clonStr);
cuClat = Double.parseDouble(clatStr);
}
}
// 注册百度
baidu = new Baidu_location(Ddxq.this);
generatePhotosBlock();
}
@SuppressWarnings("unused")
private void generatePhotosBlock() {
/**
* 设置初始照片
*/
PhotoDisplayBlock.Param p = new PhotoDisplayBlock.Param() {
@Override
public List<AccessoryDTO> initPhotos() {
// TODO Auto-generated method stub
return PhotoUtil.photos;
}
};
/**
* 添加照片回调函数
*/
AddPhotoButtonCallBack add = new AddPhotoButtonCallBack() {
@Override
public void preform(AccessoryDTO currentPhoto) {
// TODO Auto-generated method stub
shareMethod.recordLog("开始拍照");
PhotoUtil.startSysCamera(Ddxq.this);
}
};
photoDisplayBlock = new PhotoDisplayBlock(Ddxq.this, p);
photoDisplayBlock.setOnAddPhotoCallBack(add);
LayoutParams fill = new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
if(PhotoLayout!=null)PhotoLayout.addView(photoDisplayBlock, fill);
if(photoDisplayBlock!=null){
photoDisplayBlock.getPhotos();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e("onActivityResult", "onActivityResult");
shareMethod.recordLog("签到签退-----拍照完成-----onActivityResult");
MyApp myApp = (MyApp) this.getApplication();
AccessoryDTO photo = (AccessoryDTO) (myApp.getPhoto());
Log.e("图片路径",photo.getPath()+"");
BitmapUtils bitmapUtils = new BitmapUtils(Ddxq.this);
// 压缩图片之后保存起来
if (myApp.getPhoto() != null) {
shareMethod.recordLog("签到签退------通过路径获得图片:"+photo.getPath());
Bitmap bitmap = bitmapUtils.decodeBitmap(photo.getPath());
shareMethod.recordLog("签到签退-----获得的图片:"+(bitmap==null?"null":bitmap));
if (bitmap != null) {
shareMethod.recordLog("签到签退-----图片开始压缩");
Bitmap bitmap_new = bitmapUtils.zoomBitmap(bitmap);
String imagePath_new = "";
try {
shareMethod.recordLog("签到签退-----图片保存");
imagePath_new = bitmapUtils.saveBitmap(bitmap_new);
} catch (IOException e) {
// TODO Auto-generated catch block
shareMethod.recordLog("签到签退-----保存图片异常");
e.printStackTrace();
}
if(imagePath_new.equals("")){
imagePath_new=photo.getPath();
shareMethod.recordLog("签到签退-------地址:"+imagePath_new);
}
File photofile = new File(imagePath_new);
if (photofile.exists()) {
Log.e("压缩后文件路径", imagePath_new + "");
shareMethod.recordLog("签到签退-----压缩后的文件路径"+imagePath_new);
photo.setPath(imagePath_new);
this.photoDisplayBlock.addPhoto(photo);
PhotoUtil.photos = this.photoDisplayBlock.getPhotos();
} else {
UIUtil.showMsg(Ddxq.this, "取消拍照");
shareMethod.recordLog("签到签退-----取消拍照");
}
}
} else {
UIUtil.showMsg(Ddxq.this, "图片获取失败,请重试");
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v == sign) {
shareMethod.recordLog("签到签退----开始签到");
// Log.e("my",
// PhotoUtil.photos.get(0).getPath()+PhotoUtil.photos.get(1).getPath());
if ((mh_qddd.getText().toString().trim()).equals("") && point != 2) {
String message = "";
if (type == 1) {
message = "请输入签到地点!";
} else {
message = "请输入签退地点!";
}
new AlertDialog.Builder(this).setTitle("警告")
.setMessage(message).setPositiveButton("确定", null)
.show();
} else {
if (point != 2) {
kqaddr = mh_qddd.getText().toString();
bz = mh_bz.getText().toString();
}
signThread = new SignThread();
signThread.start();
}
} else if (v == back) {
finish();
} else if (v == ddlbHistory) {
Optdb_interfce db = new Optdb_interfce(Ddxq.this);
ArrayList<String> list = db.searchHistory(1, "mhdz");
if (list.size() > 0) {
showHistory(list, 0);
} else {
showToast("无历史记录!");
}
db.close_SqlDb();
} else if (v == bzHistory) {
Optdb_interfce db = new Optdb_interfce(Ddxq.this);
ArrayList<String> list = db.searchHistory(1, "bz");
if (list.size() > 0) {
showHistory(list, 1);
} else {
showToast("无历史记录!");
}
db.close_SqlDb();
}
}
public void registerRec(){
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("upfile");
receiveBroadCast = new MyBroadcastReciver();
this.registerReceiver(receiveBroadCast, intentFilter);
}
private class MyBroadcastReciver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if(action.equals("upfile")) {
int length= intent.getIntExtra("length", 0);
if(pBar!=null){
pBar.setProgress(length/1024);
}
}
}
}
public String photoUpToServer() {
registerRec();
String result = "-1";
String relationid = "";
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
UUID uuid = UUID.randomUUID();
// relationid="kq"+format.format(System.currentTimeMillis());
relationid = uuid.toString();
PhotoUtil.photos = this.photoDisplayBlock.getPhotos();
Log.e("PhotoUtil.photos.size()", PhotoUtil.photos.size()+"");
for (int i = 0; i < PhotoUtil.photos.size(); i++) {
Log.e(TAG, "图片个数:" + i);
UpSocketFile file = new UpSocketFile(Ddxq.this);
Bundle bundle = new Bundle();
String filename = format.format(System.currentTimeMillis())
+ ".jpg";
if (i == PhotoUtil.photos.size() - 1) {
Log.e("relationid", relationid);
bundle.putString("relationid", relationid + ",last");
} else {
bundle.putString("relationid", relationid);
}
bundle.putString("imagePath", PhotoUtil.photos.get(i).getPath());
bundle.putString("filename", filename);
bundle.putString("type", type + "");
File uploadFile = new File(PhotoUtil.photos.get(i).getPath());
int uplength = (int) uploadFile.length();
if(pBar!=null){
pBar.setMax((uplength/1024)+1);
}
UpMyFile upfile = new UpMyFile(Ddxq.this);
result = upfile.upToServer(bundle,"qdxq");
Log.e("result", result);
if(result.equals("1")){
return result;
}else{
result = "0";
}
// 上传成功
// if (result != null && result.equals("0")) {
// if (imageNum >= PhotoUtil.photos.size()) {
// System.out.println("jieshu1:" + imageNum + ","
// + PhotoUtil.photos.size());
// Bundle bundleRet = new Bundle();
// Message msgRet = new Message();
// bundleRet.putString("msg", "上传成功");
// msgRet.what = 2;
// msgRet.setData(bundleRet);
// // myHander.sendMessage(msgRet);
// param = 17;
// } else {
//
// Message msg = new Message();
// msg.what = 4;
// // myHander.sendMessage(msg);
//
// Bundle bundleRet = new Bundle();
// Message msgRet = new Message();
// bundleRet.putString("msg", "继续成功");
// msgRet.what = 3;
// msgRet.setData(bundleRet);
// // myHander.sendMessage(msgRet);
// imageNum += 1;
// param = 4;
// }
// } else {
// if (imageNum < PhotoUtil.photos.size()) {
// System.out.println("jieshu3:" + imageNum + ","
// + PhotoUtil.photos.size());
// Message msg2 = new Message();
// msg2.what = 4;
// // myHander.sendMessage(msg2);
//
// Bundle bundleRet = new Bundle();
// Message msgRet = new Message();
// bundleRet.putString("msg", "第" + imageNum + "张图片信息上传失败!");
// msgRet.what = 3;
// msgRet.setData(bundleRet);
// // myHander.sendMessage(msgRet);
// imageNum += 1;
// param = 4;
// } else {
// System.out.println("jieshu4:" + imageNum + ","
// + PhotoUtil.photos.size());
// Bundle bundleRet = new Bundle();
// Message msgRet = new Message();
// bundleRet.putString("msg", "上传失败!");
// msgRet.what = 2;
// msgRet.setData(bundleRet);
// // myHander.sendMessage(msgRet);
// param = 17;
// }
// }
}
Log.i(TAG, "上传结束:" + result);
return result;
}
/**
* 弹出历史记录框
*
* @param list
* @param his
*/
public void showHistory(final ArrayList<String> list, final int his) {
String[] data = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
data[i] = list.get(i);
}
new AlertDialog.Builder(Ddxq.this).setTitle("选择历史记录")
.setItems(data, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (his == 0) {
mh_qddd.setText(list.get(which));
} else {
mh_bz.setText(list.get(which));
}
}
}).setNegativeButton("取消", null).show();
}
/**
* 判断考勤是否正常
*
* @param point
* @return 是否正常签到1.正常2.考勤方式不正常3.签到模式不正常 考勤模式(1-打卡考勤、2-手机考勤、3-短信签到、4-电脑考勤)
*/
public String kqFlag(int point) {
String result = "1";// 根据考勤策略判断操作是否正常
if (point == 1) {// 判断是精签到还是精签到下的非正常签到
result = "3";
} else {
result = "1";
}
return result;
}
class upPhoto extends Thread {
public void run() {
Looper.prepare();
Message message = new Message();
message.what = 4;
myHander.sendMessage(message);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String result = photoUpToServer();
shareMethod.recordLog("签到签退图片上传结果"+result);
Bundle bundle = new Bundle();
bundle.putString("result", result);
Message message2 = new Message();
message2.setData(bundle);
message2.what = 5;
myHander.sendMessage(message2);
Looper.loop();
}
}
/**
* 考勤信息上传线程
*
* @author Administrator 流程: 1、获取服务器端时间,判断是否允许签到、签退 2、获取位置:先小区再百度后卫星
* 3、判误差:百度获取成功误差后卫星获取位置后再次判误差 4、上传位置及考勤信息
*/
class SignThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
Looper.prepare();
int istime = -2;
double distance = 0.0;
String signResult = "";
Message message = new Message();
message.what = 1;
myHander.sendMessage(message);
Message message2 = new Message();
Bundle bundle = new Bundle();
shareMethod.recordLog("-----签到签退开始-----");
shareMethod.recordOptTime("签到/签退-获取位置时间:");
// 获取位置并判断误差
// 获取基站相关信息
LocationModule loc = new LocationUtils(Ddxq.this).takeCellInfos();
LocationUtils locationUtils = new LocationUtils(Ddxq.this);
boolean b1 = locationUtils.getLocation(loc, "All", custId,
baidu);
shareMethod.recordLog("-----签到签退开始-----定位是否成功::"+b1);
// <1>获取服务器端时间并判断是否允许
istime = timeFlagIsKq(loc.getTime());
shareMethod.recordLog("-----签到签退开始----- 获取时间判断是否可以签到::"+istime);
switch (istime) {
case -2:// 网络请求失败,无法获取服务器端时间
// signResult = "请求服务器失败,请稍后操作!";
signResult = "请求服务器获取时间失败,请稍后操作!";
break;
case -1:// 不允许签到、签退
String kqcl = share_obj.getDataFromPres("KQCL");
if (type == 1) {
signResult = "该时间段内不允许签到操作,请在" + kqcl.split("#")[2] + "至"
+ kqcl.split("#")[1] + "时间段内操作!";
} else {
signResult = "该时间段内不允许签退操作,请在" + kqcl.split("#")[0] + "至"
+ kqcl.split("#")[3] + "时间段内操作!";
}
break;
default:// 允许签到、签退操作
if (b1) {
// 位置获取成功
int state = loc.getState();
shareMethod.recordLog("-----签到签退开始-----定位状态————"+state);
boolean b = true;// 默认上报
if (state == 2) {
// 百度获取位置成功
shareMethod.recordLog("定位成功");
if (point == 2) {// 精签到,需要判断误差
shareMethod.recordLog("精签到----开始判断距离");
if (!flagDistance(loc.getLon(), loc.getLat(), 3)) {// 百度获得的位置超出误差范围,获取卫星位置
shareMethod.recordLog("精签到------距离超出开始gps");
boolean b2 = locationUtils.getLocation(loc,
"onlyGps", custId, baidu);
shareMethod.recordLog("精签到------gps定位+++"+b2);
if (b2) {
shareMethod.recordLog("精签到------gps成功");
// gps获取成功
if (point == 2) {// 精签到
shareMethod.recordLog("精签到-----判断距离");
if (!flagDistance(loc.getLon(),
loc.getLat(), 1)) {// 卫星位置判断误差
System.out
.println("******************卫星获取到位置超出距离******************");
shareMethod.recordLog("精签到-----超过距离");
signResult = "超出管理员设置的误差范围"
+ dislimit + "米,请走近客户进行操作!";
b = false;
}
}
} else {
shareMethod.recordLog("精签到-----gps定位失败");
int s = loc.getState();
if (s == -1) {
signResult = "超出管理员设置的误差范围" + dislimit
+ "米,请走近客户进行操作!";
// 记录日志
log = "百度误差超出距离,GPS模块没打开!";
shareMethod.recordLog(log);
b = false;
} else if (s == 0) {
signResult = "超出管理员设置的误差范围" + dislimit
+ "米,请走近客户进行操作!";
// 记录日志
log = "百度误差超出距离,GPS获取位置失败!";
shareMethod.recordLog(log);
b = false;
}
}
}
}
} else if (state == 1) {
shareMethod.recordLog("state==1");
// gps获取成功
// 卫星位置获取成功
if (point == 2) {// 精签到
shareMethod.recordLog("state==1--------------精签到判断距离");
if (!flagDistance(loc.getLon(), loc.getLat(), 1)) {// 卫星位置判断误差
shareMethod.recordLog("state==1----------超出范围");
System.out
.println("******************卫星获取到位置超出距离******************");
signResult = "超出管理员设置的误差范围" + dislimit
+ "米,请走近客户进行操作!";
b = false;
}
}
}
if (b) {
// 判断是否签到正常
String isnormal = kqFlag(point);
loc.setTime(serverTimeSec);
signResult = upToServer(loc, istime, isnormal);
}
} else {
// 获取位置失败
System.out
.println("*******************获取位置失败*******************");
if (point == 0 || point == 1) {// 粗签到
System.out
.println("******************粗签到----获取位置信息失败******************");
loc.setLon(0.0);
loc.setLat(0.0);
loc.setRadius("0");
loc.setTime(serverTimeSec);
loc.setRadius("0");
loc.setDw_type(-1);
// 判断是否签到正常
String isnormal = kqFlag(point);
signResult = upToServer(loc, istime, isnormal);
} else {
System.out
.println("******************精签到----获取位置信息失败******************");
signResult = "位置获取失败,请稍后重新操作!";
// 记录日志
log = "通过卫星获取位置信息失败!";
shareMethod.recordLog(log);
}
}
break;
}
shareMethod.recordLog("-----签到签退结束-----");
Log.d("location", signResult);
bundle.putString("msg", signResult);
message2.setData(bundle);
message2.what = param;
myHander.sendMessage(message2);
Looper.loop();
}
}
/**
* 获取服务器端时间并判断是否允许上报位置
*
* @return
*/
public int timeFlagIsKq(Long TimeSec) {
int kqResult = -2;
serverTimeSec =TimeSec;
//serverTimeSec = shareMethod.getServerTime();
/*
* SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
* Date date=new Date(serverTimeSec);
* System.out.println("time:"+sdf.format(date));
*/
shareMethod.recordLog("timeFlagIsKq中获得的serverTimeSec" + serverTimeSec);
// 固定工作模式判时间是否在上下班时间内
if (share_obj.getDataFromPres("WORKMODE").equals("2")
&& serverTimeSec != 0) {
kqResult = isTimeAlow(serverTimeSec);
} else if (serverTimeSec == 0) {
// 获取失败
kqResult = -2;
} else {
kqResult = 0;
}
return kqResult;
}
/**
* 误差距离判断
*
* @param lon
* @param lat
*/
public boolean flagDistance(double lon, double lat, int dwType) {
log = "《签到签退》-----" + "定位方式:" + dwType + ",经度:" + lon + ",纬度:" + lat;
shareMethod.recordLog(log);
boolean b = true;// 默认在误差范围内
double distance = 0.0;
switch (dwType) {
case 1:// 卫星位置判断
// 如果客户的真实经纬度为空,则需要加对客户加密过后的经纬度加密比较
if (cuLon == 0.0 || cuLat == 0.0) {
PublicDeal pd = new PublicDeal();
Map map = pd.jp(lon, lat);
double clon = Double.parseDouble((String) map.get("x"));
double clat = Double.parseDouble((String) map.get("y"));
distance = GetDistance.getDistance(clon, clat, cuClon, cuClat);
log += ",客户端对客户加过密后的经度:" + clon + ",纬度:" + clat + ",误差结果:"
+ distance;
shareMethod.recordLog(log);
} else {
distance = GetDistance.getDistance(lon, lat, cuLon, cuLat);
log += ",客户真实经度:" + cuLon + ",真实纬度:" + cuLat + ",误差结果:"
+ distance;
shareMethod.recordLog(log);
}
break;
case 3:// 百度位置判断
distance = GetDistance.getDistance(lon, lat, cuClon, cuClat);
log += ",客户加过密后的经度:" + cuClon + ",纬度:" + cuClat + ",误差结果:"
+ distance;
shareMethod.recordLog(log);
break;
}
// 记录日志
Log.i(TAG, log);
shareMethod.recordLog(log);
if (distance > dislimit) {
b = false;
}
return b;
}
/**
* 上报签到及位置信息
*
* @param loc
* @param istime
* @param dw_type
* @param isnormal
* @return
*/
public String upToServer(LocationModule loc, int istime, String isnormal) {
String result = "-1";
db = new Optdb_interfce(Ddxq.this);
// 获得所属分组和分组id等信息
ArrayList<Object> group_list = db.searchGroups(
share_obj.getDataFromPres("GID"), 2);
db.close_SqlDb();
String groupName = " ";
try {
GroupsModule group = (GroupsModule) group_list.get(0);
groupName = group.getGname();
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
System.out.println("获取登录者分组信息异常");
}
String cosim = share_obj.getDataFromPres("COSIM");
String regsim = share_obj.getDataFromPres("REGSIM");
String imgpaths = "";
JSONObject object = new JSONObject();
try {
object.put("cosim", cosim);
object.put("regsim", regsim);
object.put("custid", custId);
object.put("time", loc.getTime());
object.put("lon", loc.getLon());
object.put("lat", loc.getLat());
object.put("cell_id", loc.getCell_id());
object.put("lac_code", loc.getLac());
object.put("country_code", loc.getCcode());
object.put("ncode", loc.getNcode());
object.put("signal_strength", loc.getXhqd());
object.put("loc_method", loc.getDw_type());
object.put("radius", loc.getRadius());
object.put("yys", loc.getYys());
object.put("type", type);
object.put("result", istime);
object.put("kqflag", share_obj.getDataFromPres("KQFLAG"));
object.put("isnormal", isnormal);
object.put("kqaddr", kqaddr);
object.put("bz", bz);
object.put("gid", share_obj.getDataFromPres("GID"));
object.put("group_name", groupName);
object.put("zguid", share_obj.getDataFromPres("GUID"));
object.put("khmc", khmcTv.getText().toString());
object.put("gguid", share_obj.getDataFromPres("GGUID"));
object.put("tag", 1);// 1表示实时上传
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("上传签到信息---------------" + object.toString());
UpdataToServer server = new UpdataToServer(Ddxq.this);
shareMethod.recordOptTime("签到/签退-获取位置结束,请求服务器时间:");
// 请求服务器
result = server.dataToServer("KQSB", object);
shareMethod.recordOptTime("签到/签退-服务器返回结果时间:");
// 记录日志
log = "《签到签退》-----" + "定位方式:" + loc.getDw_type() + ",经度:"
+ loc.getLon() + ",纬度:" + loc.getLat() + ",上传结果:" + result;
Log.i(TAG, log);
shareMethod.recordLog(log);
System.out.println(result);
System.out.println(!result.equals("500"));
if (result != null && !result.equals("-1") && !result.equals("500")) {
try {
JSONObject obj = new JSONObject(result);
String res = obj.getString("result");
String retMsg = obj.getString("detail");
if (res.equals("0")) {
db = new Optdb_interfce(Ddxq.this);
// 保存历史记录
if (!kqaddr.equals("")) {
db.updateHistory(1, "mhdz", kqaddr);
}
if (!bz.equals("")) {
db.updateHistory(1, "bz", bz);
}
db.close_SqlDb();
}
result = retMsg;
// 提示成功结果
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
System.out.println("提示保存");
param = 3;
// 提示保存
failToSave(object);
}
return result;
}
/**
* 上传失败后保存
*/
public void failToSave(final JSONObject object) {
new AlertDialog.Builder(Ddxq.this).setTitle("提示")
.setMessage("上传失败,是否保存?")
.setPositiveButton("保存", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
ArrayList<Object> list = new ArrayList<Object>();
RecordModel record = new RecordModel();
try {
String time = "";
if (object.getLong("time") != 0) {
time = object.getLong("time") + "";
} else {
time = new Date().getTime() + "";
}
record.setAdd_time(time);
record.setBz(object.getString("bz"));
record.setCcode(object.getString("country_code"));
record.setCid(object.getString("cell_id"));
record.setContent(object.getString("kqaddr"));// 存放考勤地点(粗签到)
record.setCustid(object.getString("custid"));
record.setGid(type + "");// 1、签到2、签退
record.setJclb(object.getString("yys"));// 保存运营商字段值
record.setLac(object.getString("lac_code"));
record.setLat(object.getDouble("lat") + "");
record.setLon(object.getDouble("lon") + "");
record.setNcode(object.getString("ncode"));
record.setRaduis(object.getString("radius"));
record.setResult(object.getString("result"));
record.setWzbs(object.getString("loc_method"));// 保存位置获取方式
record.setXhqd(object.getString("signal_strength"));
record.setRemark1(object.getString("isnormal"));// 保存是否签到正常
record.setRemark2(object.getString("khmc"));// 保存客户名称
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
list.add(record);
db = new Optdb_interfce(Ddxq.this);
db.updateToDb("T_RECORDS", list);
db.close_SqlDb();
Toast.makeText(Ddxq.this, "保存成功", Toast.LENGTH_SHORT)
.show();
}
}).setNegativeButton("取消", null).show();
}
/**
* 时间判断
*
* @param time
* @return
*/
private int isTimeAlow(long time) {
System.out.println("获得时间----" + time);
int flag = -1;
Date date = null;
if (time != 0) {
date = new Date(time);
} else {
date = new Date();
}
SimpleDateFormat sdf1 = new SimpleDateFormat("HH");
SimpleDateFormat sdf2 = new SimpleDateFormat("mm");
TimeZone timezone = TimeZone.getTimeZone("Asia/Shanghai"); // 设置时区
sdf1.setTimeZone(timezone);
sdf2.setTimeZone(timezone);
int hours = Integer.parseInt(sdf1.format(date)); // 小时
int minut = Integer.parseInt(sdf2.format(date)); // 分钟
System.out.println("------服务器端时间-------" + hours + ":" + minut);
shareMethod.recordLog("------服务器端时间-------" + hours + ":" + minut
+ "获得时间----" + time);
String kqcl = share_obj.getDataFromPres("KQCL");
String[] onTimes = null;
String[] offTimes = null;
String[] qdTimes = null;
String[] qtTimes = null;
int signHour1 = 0;
int signMinut1 = 0;
int signHour2 = 0;
int signMinut2 = 0;
int signHour3 = 0;
int signMinut3 = 0;
int signHour4 = 0;
int signMinut4 = 0;
onTimes = kqcl.split("#")[0].split(":");
qdTimes = kqcl.split("#")[2].split(":");
offTimes = kqcl.split("#")[1].split(":");
qtTimes = kqcl.split("#")[3].split(":");
signHour1 = new Integer(onTimes[0]).intValue();
signHour2 = new Integer(qdTimes[0]).intValue();
signHour3 = new Integer(offTimes[0]).intValue();
signHour4 = new Integer(qtTimes[0]).intValue();
signMinut1 = new Integer(onTimes[1]).intValue();
signMinut2 = new Integer(qdTimes[1]).intValue();
signMinut3 = new Integer(offTimes[1]).intValue();
signMinut4 = new Integer(qtTimes[1]).intValue();
int baseTime1 = signHour1 * 60 + signMinut1;//on
int baseTime2 = signHour2 * 60 + signMinut2;//qd
int baseTime3 = signHour3 * 60 + signMinut3;//off
int baseTime4 = signHour4 * 60 + signMinut4;//qt
int nowTime = hours * 60 + minut;
System.out.println("baseTime1 " + baseTime1);
System.out.println("baseTime2 " + baseTime2);
System.out.println("baseTime3 " + baseTime3);
System.out.println("nowTime " + nowTime);
if (type == 1) {
if (baseTime2 <= nowTime && nowTime <= baseTime1) {
// 正常签到
flag = 2;
} else if (baseTime1 < nowTime && nowTime <= baseTime3) {
// 迟到
flag = 3;
}
} else if (type == 2) {
if (baseTime3 <= nowTime && nowTime <= baseTime4) {
// 正常签退
flag = 2;
} else if (baseTime1 < nowTime && nowTime < baseTime3) {
// 早退
flag = 3;
}
}
System.out.println("时间判断结果:" + flag);
// 记录日志
log = "《签到签退》*******************:" + "上班时间:" + kqcl.split("#")[0]
+ ",下班时间:" + kqcl.split("#")[1] + ",签到时间:" + kqcl.split("#")[2]
+ ",签退时间:" + kqcl.split("#")[3] + ",服务器时间" + hours + ":"
+ minut + ",时间判断结果:" + flag;
Log.i(TAG, log);
shareMethod.recordLog(log);
return flag;
}
Handler myHander = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
try {
switch (msg.what) {
case 1:
showDialog(1);
break;
case 2:
removeDialog(1);
Bundle bundle = msg.getData();
if (bundle.getString("msg").equals("签到成功")
|| bundle.getString("msg").equals("签退成功")) {
if (PhotoUtil.photos.size() > 0) {
Log.e("size", PhotoUtil.photos.size() + "");
upPhotoThread = new upPhoto();
upPhotoThread.start();
} else {
showToast(bundle.getString("msg"));
}
Log.e("size", PhotoUtil.photos.size() + "");
} else {
showToast(bundle.getString("msg"));
}
break;
case 3:
removeDialog(1);
break;
case 4:
String type="";
if(myApp.getType()==1){
type="签到";
}else{
type="签退";
}
pBar = new MyProgressDialog(Ddxq.this);
pBar.setMessage(type+"成功正在上传图片");
pBar.setCancelable(false);
pBar.show();
//showDialog(2);
break;
case 5:
pBar.dismiss();
//removeDialog(2);
Bundle bundle2 = msg.getData();
String result = bundle2.getString("result");
if (result.equals("0")) {
showToast("图片上传成功");
PhotoUtil.photos.clear();
} else {
showToast("图片上传失败,请重试");
//PhotoUtil.photos.clear();
//generatePhotosBlock();
//finish();
}
break;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("显示或取消运行框时出现异常");
}
}
};
/**
* 登录结果显示
*
* @param message
*/
public void showToast(final String message) {
new AlertDialog.Builder(this).setTitle("提示").setMessage(message)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (message.contains("成功")) {
finish();
}
}
}).show();
}
@Override
protected Dialog onCreateDialog(int id) {
// TODO Auto-generated method stub
ProgressDialog dialog = new ProgressDialog(this);
dialog.setIndeterminate(true);
dialog.setCancelable(false);
switch (id) {
case 1:
dialog.setMessage("正在" + desc + ",请稍候……");
break;
case 2:
String type = "";
if (myApp.getType() == 1) {
type = "签到";
} else {
type = "签退";
}
dialog.setMessage(type + "成功正在上传图片" + ",请稍候……");
break;
}
return dialog;
}
/**
* 检测并关闭Gps设备
*/
public void closeGps() {
SystemInfo sys = new SystemInfo(Ddxq.this);
boolean flag = sys
.isServiceRunning("com.jqyd.shareInterface.GpsService");
if (flag) {
Intent intent = new Intent(Ddxq.this, GpsService.class);
stopService(intent);
}
}
@Override
public void finish() {
// TODO Auto-generated method stub
super.finish();
// 终止上报线程
if (signThread != null && signThread.isAlive()) {
System.out.println("终止上报线程");
try {
SignThread.currentThread().interrupt();
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("终止线程出现异常");
e.printStackTrace();
}
}
// 关闭GPS设备
closeGps();
freeBdListener();
}
// 销毁百度定位监听器
public void freeBdListener() {
if (baidu != null) {
baidu.stopListener();
baidu = null;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
finish();
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
share_obj.editPres("istakephoto", "0");
if(receiveBroadCast!=null){
Ddxq.this.unregisterReceiver(receiveBroadCast);
}
}
}