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); } } }