package com.jqyd.son;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import org.json.JSONException;
import org.json.JSONObject;
import com.jqyd.app.BitmapUtils;
import com.jqyd.app.ShareMethod;
import com.jqyd.camera.PhotoUtil;
import com.jqyd.manager.R;
import com.jqyd.manager.Xxfk;
import com.jqyd.model.MyLogModule;
import com.jqyd.shareInterface.Optdb_interfce;
import com.jqyd.shareInterface.Optsharepre_interface;
import com.jqyd.shareInterface.UpdataToServer;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.provider.MediaStore;
import android.provider.MediaStore.Audio.Media;
import android.text.Html;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
public class Rzsb extends Activity implements OnClickListener {
private EditText ywsj;
private EditText gznr;
private Spinner workMin;
private Spinner workSec;
private EditText gzcg;
private EditText gzjy;
private Button gznrHistory;
private Button gzcgHistory;
private Button up;
private Button pz;
private Button back;
private Optdb_interfce db =null;
private Calendar c;
private ArrayAdapter<String> adapter_min = null;
private ArrayAdapter<String> adapter_sec = null;
private Optsharepre_interface share_obj = null;
private static String imagePath;
private static String imagePath_new;
private int num = 1;// 默认第一张
private ArrayList<String> paths = new ArrayList<String>();
private ArrayList<String> picTimes = new ArrayList<String>();
private ShareMethod method;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.rzsb);
Log.e("onCreate", "onCreate");
method = new ShareMethod(Rzsb.this);
ywsj = (EditText) this.findViewById(R.id.ywsj);
gznr = (EditText) this.findViewById(R.id.gznr);
workMin = (Spinner) this.findViewById(R.id.workMin);
workSec = (Spinner) this.findViewById(R.id.workSec);
gzcg = (EditText) this.findViewById(R.id.gzcg);
gzjy = (EditText) this.findViewById(R.id.gzjy);
gznrHistory = (Button) this.findViewById(R.id.gznrHistory);
gzcgHistory = (Button) this.findViewById(R.id.gzcgHistory);
up = (Button) this.findViewById(R.id.up);
pz = (Button) this.findViewById(R.id.pz);
back = (Button) this.findViewById(R.id.back);
ywsj.setOnClickListener(this);
gznrHistory.setOnClickListener(this);
gzcgHistory.setOnClickListener(this);
up.setOnClickListener(this);
back.setOnClickListener(this);
pz.setOnClickListener(this);
init();
}
// 赋默认值
public void init() {
c = Calendar.getInstance();
// 业务时间默认当天
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String mDateTime1 = formatter.format(date);
ywsj.setText(mDateTime1);
ArrayList<String> minList = new ArrayList<String>();
minList.add("0小时");
minList.add("1小时");
minList.add("2小时");
minList.add("3小时");
minList.add("4小时");
minList.add("5小时");
minList.add("6小时");
minList.add("7小时");
minList.add("8小时");
adapter_min = new ArrayAdapter<String>(Rzsb.this,
android.R.layout.simple_spinner_item, minList);
adapter_min
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 绑定适配器
workMin.setAdapter(adapter_min);
ArrayList<String> secList = new ArrayList<String>();
secList.add("0分钟");
secList.add("15分钟");
secList.add("30分钟");
secList.add("45分钟");
adapter_sec = new ArrayAdapter<String>(Rzsb.this,
android.R.layout.simple_spinner_item, secList);
adapter_sec
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 绑定适配器
workSec.setAdapter(adapter_sec);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v == ywsj) {
getDate();
} else if (v == up) {
//对业务日期进行时间限制,每月的5号前可以选择上月的,当月的可选择当日前的任一天
int limit = dateLimit();
if(limit == 0){
String gznrStr = gznr.getText().toString();
String gzcgStr = gzcg.getText().toString();
String gzjyStr = gzjy.getText().toString();
if(gznrStr.equals("")){
warnTell("请填写工作内容!");
}else{
if(gzcgStr.equals("")){
gzcg.setText("无");
gzcgStr = "无";
}
if(gzjyStr.equals("")){
gzjy.setText("无");
gzjyStr = "无";
}
//计算时常
int hour = Integer.parseInt(workMin.getSelectedItem().toString().replaceAll("小时", ""));
int minute = Integer.parseInt(workSec.getSelectedItem().toString().replaceAll("分钟", ""));
double sc = (double)hour+(double)minute/60;
share_obj = new Optsharepre_interface(Rzsb.this);
MyLogModule log = new MyLogModule();
log.setCosim(share_obj.getDataFromPres("COSIM"));
log.setRegsim(share_obj.getDataFromPres("REGSIM"));
log.setYwrq(ywsj.getText().toString());
log.setGznr(gznrStr);
log.setGzsc(sc+"");
log.setGzyj(gzjyStr);
log.setGzcg(gzcgStr);
log.setGguid(share_obj.getDataFromPres("GGUID"));
log.setZguid(share_obj.getDataFromPres("GUID"));
log.setHasimage(false);
new GzrzThread(log).start();
}
}else{
warnTell("请选择正确的业务日期!");
}
}else if(v == pz){
//对业务日期进行时间限制,每月的5号前可以选择上月的,当月的可选择当日前的任一天
int limit = dateLimit();
if(limit == 0){
String gznrStr = gznr.getText().toString();
if(gznrStr.equals("")){
warnTell("请填写工作内容!");
}else{
takePhotos();
}
}else{
warnTell("请选择正确的业务日期!");
}
} else if (v == back) {
finish();
}else if(v == gznrHistory){
db = new Optdb_interfce(Rzsb.this);
ArrayList<String> list = db.searchHistory(2, "gznr");
if(list.size()>0){
showHistory(list,0);
}else{
showToast("无历史记录!");
}
db.close_SqlDb();
}else if(v == gzcgHistory){
db = new Optdb_interfce(Rzsb.this);
ArrayList<String> list = db.searchHistory(2, "gzcg");
if(list.size()>0){
showHistory(list,1);
}else{
showToast("无历史记录!");
}
db.close_SqlDb();
}
}
/**
* 业务日期限制
* @return
*/
public int dateLimit(){
int result = 0;//返回结果0、正常1、请选择正确的日期
String xzsj = ywsj.getText().toString();
int year = Integer.parseInt((xzsj.split("-"))[0]);
int month = Integer.parseInt((xzsj.split("-"))[1]);
int day = Integer.parseInt((xzsj.split("-"))[2]);
Date date = new Date();
String dates = new SimpleDateFormat("yyyy-MM-dd").format(date);
int currYear = Integer.parseInt((dates.split("-"))[0]);
int currMonth = Integer.parseInt((dates.split("-"))[1]);
int currDay = Integer.parseInt((dates.split("-"))[2]);
System.out.println("日期限制---------"+year+"-"+month+"-"+day+"*********"+currYear+"-"+currMonth+"-"+currDay);
if(year == currYear){//同一年
if(month==currMonth){//当月
if(day<=currDay){
result = 0;
}else{
result = 1;
}
}else if(currDay<6){//当月5号前,可选择上月
if(month == (currMonth-1)){//上月
result = 0;
}else{
result = 1;
}
}else{
result =1;
}
}else if(year == currYear-1 && currDay<6 && currMonth==1){//选择上一年,这种情况仅限当月是1号且在当月的5号前的情况
if(month==12){//上一年12月份
result =0;
}else{
result =1;
}
}else{
result =1;
}
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(Rzsb.this).setTitle("选择历史记录")
.setItems(data, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if(his == 0){
gznr.setText(list.get(which));
}else{
gzcg.setText(list.get(which));
}
}
}).setNegativeButton("取消", null).show();
}
// 弹出日期框
public void getDate() {
new DatePickerDialog(Rzsb.this,
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker arg0, int year, int month,
int date) {
// TODO Auto-generated method stub
String m = "";
String d = "";
if ((month + 1) < 10) {
m = "0" + (month + 1);
} else {
m = (month + 1) + "";
}
if (date < 10) {
d = "0" + date;
} else {
d = date + "";
}
String time = year + "-" + m + "-" + d;
ywsj.setText(time);
}
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH),
c.get(Calendar.DAY_OF_MONTH)).show();
}
/**
* 日志上报线程
* @author Administrator
*
*/
class GzrzThread extends Thread {
private MyLogModule log;
public GzrzThread(MyLogModule log) {
this.log = log;
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
Looper.prepare();
Message message = new Message();
message.what = 1;
myHander.sendMessage(message);
Message message2 = new Message();
message2.what = 2;
Bundle bundle = new Bundle();
JSONObject object = new JSONObject();
try {
object.put("cosim", log.getCosim());
object.put("regsim", log.getRegsim());
object.put("gzyj", log.getGzyj());
object.put("ywrq", log.getYwrq());
object.put("gznr", log.getGznr());
object.put("gzsc", log.getGzsc());
object.put("gzcg", log.getGzcg());
object.put("gguid", log.getGguid());
object.put("zguid", log.getZguid());
object.put("hasimage", log.getHasimage());
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("日志上报--------------------"+object.toString());
// 请求服务器
String result = new UpdataToServer(Rzsb.this).dataToServer("RZSB", object);
if (result != null && !result.equals("-1") && !result.equals("500")) {
try {
JSONObject obj = new JSONObject(result);
String res = obj.getString("result");
if (res.equals("0")) {
bundle.putString("msg", "上传成功");
//保存历史记录
db = new Optdb_interfce(Rzsb.this);
db.updateHistory(2, "gznr", gznr.getText().toString());
db.updateHistory(2, "gzcg", gzcg.getText().toString());
db.close_SqlDb();
} else {
String errMsg = obj.getString("detail");
bundle.putString("msg", errMsg);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if(result.equals("-1")){
bundle.putString("msg", "抱歉,网络连接失败!");
} else if(result.equals("500")){
bundle.putString("msg", "上报失败,请联系你的管理员!");
}
message2.setData(bundle);
myHander.sendMessage(message2);
Looper.loop();
}
}
Handler myHander = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case 1:
showDialog(1);
break;
case 2:
removeDialog(1);
Bundle data = msg.getData();
String message = data.getString("msg");
showToast(message);
break;
}
}
};
/**
* 拍照
*/
public void takePhotos() {
method.recordLog("日志上报---开始拍照");
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
Toast.makeText(this, "SD卡不可用", Toast.LENGTH_SHORT).show();
return;
}
SimpleDateFormat timeStampFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String filename = timeStampFormat.format(new Date());
ContentValues values = new ContentValues();
values.put(Media.TITLE, filename);
Uri photoUri = null;
boolean isOldPath=true;
try{
photoUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}catch(Exception e){
isOldPath=false;
}
// 限制最多拍五张照片
if (num <= 5) {
num += 1;
if(isOldPath&&photoUri!=null){
imagePath = getRealPathFromURI(photoUri, getContentResolver());
}
//paths.add(imagePath);
System.out.println("imagePath:" + imagePath);
if(imagePath!=null&&!imagePath.equals("")&&new File(imagePath).exists()){
Log.e("xiao","true");
method.recordLog("日志上报---默认路径可以使用");
}else{
Log.e("xiao", "false");
//如果为FALSE说明无法创建文件
// 更换目录
File dir = new File(PhotoUtil.SDCARD_ROOT_PATH+ PhotoUtil.SAVE_PATH_IN_SDCARD);
if(!dir.exists()){
dir.mkdirs();
}
imagePath=PhotoUtil.SDCARD_ROOT_PATH+ PhotoUtil.SAVE_PATH_IN_SDCARD+PhotoUtil.createPhotoName();
method.recordLog("日志上报---默认路径不可以使用,使用新的路径"+imagePath);
}
String picTime = new Date().getTime() + "";
picTimes.add(picTime);
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File(imagePath)));
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
method.recordLog("日志上报---开始调用系统相机");
startActivityForResult(intent, 0);
} else {
new AlertDialog.Builder(Rzsb.this)
.setTitle("提示")
.setMessage(Html.fromHtml("对不起最多只能拍摄五张照片!"))
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
jumpActivity();
}
}).show();
}
}
/**
* 拍照返回结果
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
method.recordLog("日志上报---onActivityResult--"+requestCode+",第二个参数:"+resultCode);
if (requestCode != 0) {
return;
} else if(resultCode == Activity.RESULT_OK){
System.out.println("GetCamera+sendPath:" + imagePath);
BitmapUtils bitmapUtils=new BitmapUtils(Rzsb.this);
method.recordLog("日志上报---开始读取图片变成bitmap");
//压缩图片之后保存起来
Bitmap bitmap = bitmapUtils.decodeBitmap(imagePath);
method.recordLog("日志上报---读取完成,获得的图片是:"+bitmap);
if(bitmap!=null){
method.recordLog("日志上报---通过路径获得的bitmap:"+bitmap);
Bitmap bitmap_new = bitmapUtils.zoomBitmap(bitmap);
method.recordLog("日志上报---通过压缩后获得的新的bitmap:"+bitmap);
try {
imagePath_new=bitmapUtils.saveBitmap(bitmap_new);
method.recordLog("日志上报---保存新的bitmap后得到的路径:"+imagePath_new);
} catch (IOException e) {
e.printStackTrace();
}
paths.add(imagePath_new.equals("")?imagePath:imagePath_new);
method.recordLog("日志上报---将路径加入集合:"+paths.get(0));
if(!imagePath_new.equals("")){
method.recordLog("日志上报---新的路径不为null删除老的路径下的图片");
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
File originImage=new File(imagePath);
originImage.delete();
Looper.loop();
}
}).start();
}
new AlertDialog.Builder(Rzsb.this)
.setTitle("提示")
.setMessage(Html.fromHtml("是否继续拍照?"))
.setPositiveButton("继续拍",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
method.recordLog("日志上报---继续拍");
takePhotos();
}
})
.setNegativeButton("不拍了",
new DialogInterface.OnClickListener() {
@SuppressLint("NewApi")
public void onClick(DialogInterface dialog,
int which) {
method.recordLog("日志上报---开始跳转");
// try{
// Rzsb.this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
// method.recordLog("发送刷新图库广播-------------------4.4之前");
// }catch(SecurityException e){
method.recordLog("发送刷新图库广播-------------------4.4之后");
for(String path : paths){
method.recordLog("日志上报---地址++"+Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath()+"/"+path);
MediaScannerConnection.scanFile(Rzsb.this,
new String[]{path},
null, null);
}
// }
jumpActivity();
}
}).show();
}else {
Toast.makeText(this, "手机内存不足,拍照失败", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(this, "取消拍照", Toast.LENGTH_SHORT).show();
}
}
// 获得图片保存的路径
public static String getRealPathFromURI(Uri uri, ContentResolver resolver) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = resolver.query(uri, proj, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String str = cursor.getString(column_index);
cursor.close();
return str;
}
/**
* 执行跳转
*/
public void jumpActivity() {
method.recordLog("jumpActivity()");
String gznrStr = gznr.getText().toString();
String gzcgStr = gzcg.getText().toString();
String gzjyStr = gzjy.getText().toString();
String ywrqStr = ywsj.getText().toString();
if(gzcgStr.equals("")){
gzcg.setText("无");
gzcgStr = "无";
}
if(gzjyStr.equals("")){
gzjy.setText("无");
gzjyStr = "无";
}
method.recordLog("开始计算时常");
//计算时常
int hour = Integer.parseInt(workMin.getSelectedItem().toString().replaceAll("小时", ""));
int minute = Integer.parseInt(workSec.getSelectedItem().toString().replaceAll("分钟", ""));
method.recordLog("计算完毕,时间为:"+hour+minute/60);
double sc = (double)hour+(double)minute/60;
share_obj = new Optsharepre_interface(Rzsb.this);
Bundle bundle = new Bundle();
Intent intent = new Intent();
//bundle.putString("imagePath", imagePath);
share_obj = new Optsharepre_interface(Rzsb.this);
bundle.putString("gguid", share_obj.getDataFromPres("GGUID"));
bundle.putString("zguid", share_obj.getDataFromPres("GUID"));
bundle.putString("cosim", share_obj.getDataFromPres("COSIM"));
bundle.putString("regsim", share_obj.getDataFromPres("REGSIM"));
bundle.putString("gznr", gznrStr);
bundle.putString("ywrq", ywrqStr);
bundle.putString("gzsc", String.valueOf(sc).toString());
bundle.putString("gzyj", gzjyStr);
bundle.putString("gzcg", gzcgStr);
intent.putExtras(bundle);
intent.putExtra("pic_sort", "rzsb");
intent.putStringArrayListExtra("imagePaths", paths);// 存放多图片路径
intent.setClass(Rzsb.this, PicMoreDetail.class);
method.recordLog("开始跳转");
startActivity(intent);
method.recordLog("结束跳转,finish");
finish();
}
/**
* 清空历史数据
*/
public void cheanHisdatas(){
gznr.setText("");
gzcg.setText("");
gzjy.setText("");
init();
}
/**
* 警告提示
*/
public void warnTell(String message){
new AlertDialog.Builder(Rzsb.this).setTitle("警告").setMessage(message)
.setPositiveButton("确定", null).show();
}
/**
* 结果显示
*
* @param message
*/
public void showToast(final String message) {
new AlertDialog.Builder(Rzsb.this).setTitle("提示").setMessage(message)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if(message.contains("成功")){
cheanHisdatas();
}
}
}).show();
}
@Override
protected Dialog onCreateDialog(int id) {
// TODO Auto-generated method stub
ProgressDialog dialog = new ProgressDialog(Rzsb.this);
dialog.setIndeterminate(true);
dialog.setCancelable(false);
switch (id) {
case 1:
dialog.setMessage("正在上传,请稍候……");
break;
}
return dialog;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
}