码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA直接跳转到HTML5页面

时间:2017-09-07 13:23:56      阅读:608      评论:0      收藏:0      [点我收藏+]

标签:etc   imei   sep   const   tle   推送   title   mode   .post   

package net.joystart.taskagent.controller;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.SignatureException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.Callable;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.Transactional;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

import net.joystart.City.entity.ServiceCity;
import net.joystart.City.service.ICityService;
import net.joystart.baojia.sign.ZCloudSignConfig;
import net.joystart.carManager.entity.CarManager;
import net.joystart.carManager.service.ICarManagerLogService;
import net.joystart.carManager.service.ICarManagerService;
import net.joystart.common.controller.BaseController;
import net.joystart.common.efence.EfenceBaseType;
import net.joystart.common.efence.EfenceBaseType.EfenceState;
import net.joystart.common.efence.EfenceBuilder;
import net.joystart.common.util.ConstantUtil;
import net.joystart.common.util.HttpRequestUtil;
import net.joystart.common.util.JSONProcesser;
import net.joystart.common.util.MessageResult;
import net.joystart.common.util.PostMsgHttpContent;
import net.joystart.common.util.StringUtil;
import net.joystart.common.util.VehicleControlUtil;
import net.joystart.common.util.baiDu.BaiDuAPIUtil;
import net.joystart.common.util.baiDu.BaiDuAPIUtil.Position;
import net.joystart.common.util.date.UtilTimeFormatter;
import net.joystart.common.util.log.Log4jTask;
import net.joystart.common.util.security.EncryptionUtil;
import net.joystart.common.util.tencent.TengXunAPIUtil;
import net.joystart.customer.entity.Customer;
import net.joystart.customer.entity.MessageTemplate;
import net.joystart.customer.service.ICustomerService;
import net.joystart.customer.service.IMessageTemplateService;
import net.joystart.data.DataBaseUtil;
import net.joystart.device.entity.QueryResult;
import net.joystart.device.service.IVehicleDevice;
import net.joystart.device.service.impl.VehicleDevice;
import net.joystart.fault.service.IFaultReportService;
import net.joystart.mapCoordinates.entity.ReturnForInterface;
import net.joystart.order.controller.OrderController;
import net.joystart.order.entity.DrivingTrack;
import net.joystart.order.entity.InstantOrder;
import net.joystart.order.entity.Order;
import net.joystart.order.service.IOrderService;
import net.joystart.task.vehicleTask.entity.TaskInfo;
import net.joystart.taskagent.controller.entity.TaskToken;
import net.joystart.vehicle.dao.VehicleMapper;
import net.joystart.vehicle.entity.CarState;
import net.joystart.vehicle.entity.Parkinglot;
import net.joystart.vehicle.entity.Vehicle;
import net.joystart.vehicle.entity.VehicleSite;
import net.joystart.vehicle.enums.VehicleStatus;
import net.joystart.vehicle.service.IOperationService;
import net.joystart.vehicle.service.IParkinglotService;
import net.joystart.vehicle.service.IVehicleService;
import net.joystart.vehicle.service.impl.VehicleLock;
import net.joystart.vehicleInterface.controller.VehicleUnLock;
import net.joystart.vehicleInterface.enums.TaskType;
import net.joystart.vehicleInterface.service.IVehicleUnLockService;
import net.joystart.vehicleTask.service.IVehicleTaskService;
import net.joystart.virtualData.AutoAddVirtualData;

/**
 * 第三方任务代理
 * 
 * @author lidc@bagechuxing.cn
 * @create 2017/07/19
 */
@Controller
@Scope("prototype")
@RequestMapping("/agent")
public class AgentController extends BaseController {

	private int AGENT_COMPANY = 1;
	private String AGENT_COMPANY_NAME = "e代驾";
	private final int EXPIRES_IN = 3600;

	@Resource
	IVehicleService vehicleService;

	@Resource
	IVehicleUnLockService vehicleUnLockService;

	@Resource
	ICustomerService customerService;

	@Resource
	ICarManagerService carManagerService;

	@Resource
	ICarManagerLogService carManagerLogService;

	@Resource
	private IFaultReportService faultReportService;

	@Resource
	private IMessageTemplateService messageTemplateService;

	@Resource
	AutoAddVirtualData autoAddVirtualData;

	@Resource
	ICityService cityService;

	@Resource
	IVehicleTaskService vehicleTaskService;

	@Resource
	IParkinglotService parkinglotService;

	@Resource
	IOrderService orderService;

	@Resource
	IOperationService ControlService;

	@Resource
	VehicleMapper vehicleMapper;

	@Resource
	RedisTemplate<String, Object> redisTemplate;

	final Logger logger = LoggerFactory.getLogger(VehicleUnLock.class);

	/***
	 * 合作伙伴ID
	 */
	private String agentId = "CH0110000223";

	/***
	 * 合作伙伴ID
	 */
	private String chanleId = "31";

	/***
	 * 合作伙伴Key
	 */
	private String agentKey = "a";

	private String agentHost = "https://baoyang.d.edaijia.cn/api/third/2/";

	/**
	 * 获取渠道下所有的商户列表
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/getbusinesslist")
	public void getBusinessList(HttpServletRequest request, HttpServletResponse response) {
		String url = agentHost + "business/listAll";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String ret = HttpRequestUtil.doGetJson(url, getSendParam(params));
		this.out(response, ret);
	}

	/**
	 * 获取商户的账号余额
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/getbalance")
	public void getBalance(HttpServletRequest request, HttpServletResponse response) {
		String url = agentHost + "business/balance";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		params.put("customerId", request.getParameter("chanleId"));
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String ret = HttpRequestUtil.doGetJson(url, getSendParam(params));
		this.out(response, ret);
	}

	/**
	 * 获取服务支持城市列表
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/getcitylist")
	public void getCityList(HttpServletRequest request, HttpServletResponse response) {
		String url = agentHost + "queryCityList";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String ret = HttpRequestUtil.doGetJson(url, getSendParam(params));
		this.out(response, ret);
	}

	/**
	 * 根据CODE获取城市信息
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/getcity")
	public void getCity(HttpServletRequest request, HttpServletResponse response) {
		String url = agentHost + "queryCity";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		params.put("code", request.getParameter("code"));
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String ret = HttpRequestUtil.doGetJson(url, getSendParam(params));
		this.out(response, ret);
	}

	/**
	 * 预估金额
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/predict")
	public void getPredict(HttpServletRequest request, HttpServletResponse response) {
		String url = agentHost + "price";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		params.put("code", request.getParameter("code"));
		params.put("startLng", request.getParameter("startLng"));
		params.put("startLat", request.getParameter("startLat"));
		params.put("endLng", request.getParameter("endLng"));
		params.put("endLat", request.getParameter("endLat"));
		params.put("bookingTime", request.getParameter("bookingTime")); // String(yyyyMMddHHmmss)
		params.put("customerId", request.getParameter("customerId"));
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String ret = HttpRequestUtil.doGetJson(url, getSendParam(params));
		this.out(response, ret);
	}

	/**
	 * 下单接口
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/createorder")
	public void createOrder(HttpServletRequest request, HttpServletResponse response) {
		String customerId = "CH0110000223";
		String taskId = request.getParameter("taskid");
		MessageResult message = createOrderByTaskId(Integer.valueOf(taskId), customerId);
		this.out(response, message);
	}

	/**
	 * 取消订单接口
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/cancelorder")
	public void cancelOrder(HttpServletRequest request, HttpServletResponse response) {
		String url = agentHost + "order/cancel";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		params.put("orderId", request.getParameter("orderId"));
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String result = HttpRequestUtil.doPostJson(url, getSendParam(params));
		HashMap<String, Object> retObj = JSON.parseObject(result, HashMap.class);
		String code = retObj.get("code").toString();
		String message = retObj.get("message").toString();
		// 下单成功
		if (code == "0") {
			String orderNo = retObj.get("data").toString();
		}
		// 下单失败
		else {

		}
		this.out(response, retObj);
	}

	/**
	 * 获取订单详情
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/orderdetail")
	public void getOrderDetail(HttpServletRequest request, HttpServletResponse response) {
		String url = agentHost + "order/detail";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		params.put("orderId", request.getParameter("orderId"));
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String ret = HttpRequestUtil.doGetJson(url, getSendParam(params));
		this.out(response, ret);
	}

	/**
	 * 获取订单轨迹
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/ordertrack")
	public void getOrderTrack(HttpServletRequest request, HttpServletResponse response) {
		String url = agentHost + "order/recordList";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		params.put("orderId", request.getParameter("orderId"));
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String ret = HttpRequestUtil.doGetJson(url, getSendParam(params));
		this.out(response, ret);
	}

	/**
	 * 获取司机代驾轨迹
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/ordertrace")
	public void getOrderTrace(HttpServletRequest request, HttpServletResponse response) {
		String url = agentHost + "order/trace";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		params.put("orderId", request.getParameter("orderId"));
		params.put("type", request.getParameter("type"));
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String ret = HttpRequestUtil.doGetJson(url, getSendParam(params));
		this.out(response, ret);
	}

	/**
	 * 获取司机信息
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/getdriverinfo")
	public void getDriverInfo(HttpServletRequest request, HttpServletResponse response) {
		String url = agentHost + "order/driverInfo";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		params.put("orderId", request.getParameter("orderId"));
		params.put("type", request.getParameter("type"));
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String result = HttpRequestUtil.doGetJson(url, getSendParam(params));
		JSONObject retObj = JSON.parseObject(result, JSONObject.class);
		String code = retObj.get("code").toString();
		String message = retObj.get("message").toString();
		if (code == "0") {
			JSONObject driver = retObj.getJSONObject("data");
		} else {

		}
		this.out(response, retObj);
	}

	/**
	 * 获取目的人收车验证码
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/getverifycode")
	public void getVerifyCode(HttpServletRequest request, HttpServletResponse response) {
		MessageResult message = new MessageResult();
		String orderId = request.getParameter("orderId");
		String type = request.getParameter("type");
		String code = getVerifyCode(orderId, type);
		if (code != null) {
			message.setCode("0");
			message.setData(code);
			message.setMessage("success");
		} else {
			message.setCode("1");
			message.setData(null);
			message.setMessage("failure");
		}
		this.out(response, message);
	}

	/***
	 * 获取收车验证码
	 * 
	 * @param orderId
	 * @param type
	 * @return
	 */
	public String getVerifyCode(String orderId, String type) {
		String url = agentHost + "order/verifyCode";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		params.put("orderId", orderId);
		params.put("type", type);
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String result = HttpRequestUtil.doGetJson(url, getSendParam(params));
		HashMap<String, Object> retObj = JSON.parseObject(result, HashMap.class);
		String code = retObj.get("code").toString();
		String message = retObj.get("message").toString();
		// String message = retObj.get("message").toString();
		if (code.equals("0")) {
			String VerifyCode = retObj.get("data").toString();
			return VerifyCode;
		} else {
			return null;
		}

	}

	/**
	 * 获取历史订单
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/getorderlist")
	public void getOrderList(HttpServletRequest request, HttpServletResponse response) {
		String url = agentHost + "order/queryList";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		params.put("startDate", request.getParameter("startDate"));
		params.put("endDate", request.getParameter("endDate"));
		params.put("pageSize", request.getParameter("pageSize"));
		params.put("currentPage", request.getParameter("currentPage"));
		params.put("mobile", request.getParameter("mobile"));
		params.put("createMobile", request.getParameter("createMobile"));
		params.put("customerId", request.getParameter("customerId"));
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String result = HttpRequestUtil.doGetJson(url, getSendParam(params));
		JSONObject retObj = JSON.parseObject(result, JSONObject.class);
		String code = retObj.get("code").toString();
		String message = retObj.get("message").toString();
		if (code == "0") {
			JSONObject orderList = retObj.getJSONObject("data");
			this.out(response, orderList);
		} else {
			this.out(response, retObj);
		}
	}

	/**
	 * 获取车辆信息照片
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/getcarphotos")
	public void getCarPhotos(HttpServletRequest request, HttpServletResponse response) {
		String url = agentHost + "order/getCarPhotos";
		Map<String, String> params = new HashMap<>();
		params.put("orderId", request.getParameter("orderId"));
		params.put("channel", chanleId);
		params.put("daijiaType", request.getParameter("daijiaType"));
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String result = HttpRequestUtil.doGetJson(url, getSendParam(params));
		JSONObject retObj = JSON.parseObject(result, JSONObject.class);
		String code = retObj.get("code").toString();
		String message = retObj.get("message").toString();
		if (code == "0") {
			JSONObject orderList = retObj.getJSONObject("data");
			this.out(response, orderList);
		} else {
			this.out(response, retObj);
		}
	}

	/**
	 * 根据车辆Token登陆
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/logintoken")
	public void logintoken(HttpServletRequest request, HttpServletResponse response) {
		logger.info("=======================跳转成功================================");
		MessageResult message = new MessageResult();
		String token = request.getParameter("token");
		/*String sql = "SELECT * FROM t_base_task_token WHERE token=‘" + token
				+ "‘ AND DATE_ADD(createTime,INTERVAL expiresIn MINUTE)>NOW()";*/
		TaskToken taskToken =vehicleService.getTaskToken(token);
		//List<Map<String, Object>> result = DataBaseUtil.query(sql);
		if (taskToken == null) {
			message.setCode("10001");
			message.setMessage("错误的授权信息");
			message.setData(token);
			this.out(response, message);
			return;
		}
		String orderId = taskToken.getOrderid().toString();
		logger.info("=======================跳转成功orderId=" + orderId + "================================");
		String taskId = taskToken.getTaskid().toString();
		logger.info("=======================跳转成功taskId=" + taskId + "================================");
		String loginUUID = taskToken.getLoginuuid();
		logger.info("=======================跳转成功loginUUID=" + loginUUID + "================================");
		
		TaskInfo taskInfo = vehicleUnLockService.selectByPrimaryKey(Integer.parseInt(taskId));
		String verifyCode = getVerifyCode(taskInfo.getOutorderid(), "1");
		Order order = orderService.selectByPrimaryKey(Integer.valueOf(orderId));
		if (order != null && (order.getOrderstatus() == 0 || order.getOrderstatus() == 10)) {
			Integer customerId = order.getCustomerid();
			Customer cus = customerService.selectByPrimaryKey(customerId);
			if (cus != null) {
				request.getSession().setAttribute("customer", cus);
			}
			request.getSession().setAttribute("orderid", orderId);
			request.getSession().setAttribute("taskid", taskId);
			request.getSession().setAttribute("loginuuid", loginUUID);
			request.getSession().setAttribute("token", token);
			request.getSession().setAttribute("verifyCode", verifyCode);
			try {
				response.sendRedirect(request.getContextPath() + "/jsp/agent/vehiclecontrol.jsp");
			} catch (IOException e) {
				e.printStackTrace();
			}
		} else {
			message.setCode("11001");
			message.setMessage("订单不存在或已经过期");
			message.setData(token);
			this.out(response, message);
		}
	}

	/**
	 * 车辆控制接口
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/control")
	public void control(HttpServletRequest request, HttpServletResponse response) {
		MessageResult message = new MessageResult();
		String orderId = request.getParameter("orderid");
		String taskid = request.getParameter("taskid");
		String token = request.getParameter("token");
		String type = request.getParameter("type");
		TaskInfo taskInfo = vehicleUnLockService.selectByPrimaryKey(Integer.parseInt(taskid));
		Order order = orderService.selectByPrimaryKey(Integer.valueOf(orderId));
		if (StringUtils.isBlank(token)) {
			message.setCode("10001");
			message.setMessage("禁止访问");
			message.setData(orderId);
			this.out(response, message);
			return;
		} else if (checkToken(token) == false) {
			message.setCode("10002");
			message.setMessage("未授权访问");
			message.setData(orderId);
			this.out(response, message);
			return;
		}
		if (order == null) {
			message.setCode("1");
			message.setMessage("订单不存在");
			message.setData(orderId);
			this.out(response, message);
			return;
		}
		if (taskInfo.getTaskstatus()==4 || taskInfo.getTaskstatus()==5){
			message.setCode("1");
			message.setMessage("任务已完成不能控制车辆");
			message.setData(taskInfo.getId());
			this.out(response, message);
			return;
		}

		/*
		 * if (order.getOrderstatus() != 0 && order.getOrderstatus() != 10) {
		 * message.setCode("2"); message.setMessage("订单编号无效");
		 * message.setData(orderId); this.out(response, message); return; }
		 */
		// 订单未取车,更新为已取车

		// 通过订单ID获取车辆的SN和Code
		IVehicleDevice vehicleDevice = new VehicleDevice(vehicleMapper.selectByPrimaryKey(order.getVehicleid()));
		int result = 0;
		switch (type) {
		case "0":
			result = vehicleDevice.speak();
			break;
		case "1":
			if (order.getOrderstatus() == 0) {//开锁成功后才更新订单状态
				order.setChargingstartdate(new Date());
				order.setOrderstatus(10);
				orderService.updateByPrimaryKeySelective(order);
			}
			result = vehicleDevice.turnOnAndOpen();
			taskInfo.setTaskstatus(2);// 开锁成功后更新任务状态
			vehicleUnLockService.updateTaskInfoId(taskInfo);
			List<Integer> list = this.vehicleUnLockService.selectByPrimaryKeyVehidInt(taskInfo.getVehicleid());
			if (list != null && list.size() > 0) {//开锁成功后删除车位关系完成任务会从新绑定车位关系
				 vehicleUnLockService.deleteByPrimaryKeyForEach(list);
			}
			break;
		case "2":
			result = vehicleDevice.shutDown();
			break;
		default:
			break;
		}

		message.setCode("0");
		message.setMessage("操作成功");
		message.setData(result);
		this.out(response, message);
		return;
	}

	/**
	 * 获取车辆信息
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/getvehicleinfo")
	public void getvehicleinfo(HttpServletRequest request, HttpServletResponse response) {
		MessageResult message = new MessageResult();
		String orderId = request.getParameter("orderId");
		String token = request.getParameter("token");
		String type = request.getParameter("type");
		Order order = orderService.selectByPrimaryKey(Integer.valueOf(orderId));
		if (order == null) {
			message.setCode("1");
			message.setMessage("订单不存在");
			message.setData(orderId);
			this.out(response, message);
			return;
		}
		// 通过订单ID获取车辆的SN和Code
		IVehicleDevice vehicleDevice = new VehicleDevice(vehicleMapper.selectByPrimaryKey(order.getVehicleid()));
		QueryResult qr = vehicleDevice.queryInfo();
		CarState carSate = qr.getCarState();
		this.out(response, carSate);
	}

	/**
	 * 更改订单状态主动通知接口
	 * 
	 * @param request
	 * @param response
	 */
	@RequestMapping("/changeorder")
	public void changeOrder(HttpServletRequest request, HttpServletResponse response) {
		logger.info("============================E代驾回调成功==========================================");
		Date now = new Date();
		MessageResult message = new MessageResult();
		String channel = request.getParameter("channel");
		logger.info(
				"============================E代驾回调成功:channel" + channel + "==========================================");
		String orderId = request.getParameter("orderId");
		logger.info(
				"============================E代驾回调成功:orderId" + orderId + "==========================================");
		String status = request.getParameter("status"); // 订单状态 Int 是 状态值参考订单详情
		logger.info(
				"============================E代驾回调成功:status" + status + "==========================================");
		String driverNo = request.getParameter("driverNo"); // 司机工号 String
															// ,司机抢单后或者客服派单后不为空
		if (StringUtils.isNotEmpty(driverNo)) {
			logger.info("============================E代驾回调成功:driverNo" + driverNo
					+ "==========================================");
		} else {
			logger.info("============================E代驾回调成功:driverNo" + null
					+ "==========================================");
		}
		String sign = request.getParameter("sign"); // 签名 String 是
		logger.info("============================E代驾回调成功:sign" + sign + "==========================================");

		Map<String, String> params = new HashMap<>();
		params.put("channel", channel);
		params.put("orderId", orderId);
		params.put("status", status);
		params.put("driverNo", driverNo);

		String vsign = getSign(params, agentKey);
		logger.info("============================E代驾回调成功:" + vsign + "==========================================");

		/************
		 * 订单状态说明 0 已下单 2 资金已冻结 5 订单取消 用户取消、司机取消、坐席取消或者客服取消 6 等待司机接单 4 司机已接单
		 * 调用司机抢单模式的时候通知,调用派单模式则跳过此状态 7 司机已开启订单 8 司机已就位 11 司机开车中 12 司机到达目的地 50
		 * 已收车 55 订单已完成
		 ************/
		if (!vsign.equals(sign)) {
			logger.info("============================E代驾回调成功验证不一致==========================================");
			message.setCode("1");
			message.setMessage("签名错误");
			message.setData(vsign);
			this.out(response, message);
			return;
		}
		/***** 根据订单号订单号获取任务编号 ********/
		TaskInfo taskInfo = vehicleTaskService.selectByOutOrderId(orderId);
		if (taskInfo == null) {
			message.setCode("3");
			message.setMessage("订单不存在");
			message.setData(orderId);
			this.out(response, message);
			return;
		}

		/*** 获取司机信息,发送短信 *****/
		if (status.equals("6") || status.equals("4") || status.equals("7")) {
			String verifyCode = getVerifyCode(taskInfo.getOutorderid(), "1");// 获取验证码
																				// add
																				// cjl
			taskInfo.setOrderkey(verifyCode);
			String url = agentHost + "order/driverInfo";
			Map<String, String> sendParams = new HashMap<>();
			sendParams.put("channel", chanleId);
			sendParams.put("orderId", orderId);
			sign = getSign(sendParams, agentKey);
			sendParams.put("sign", sign);
			String result = HttpRequestUtil.doGetJson(url, getSendParam(sendParams));
			GsonBuilder gb = new GsonBuilder();
			Gson g = gb.create();
			Map<Object, Object> map1 = g.fromJson(result, new TypeToken<Map<Object, Object>>() {
			}.getType());
			String code = map1.get("code").toString();
			Double codeInt = Double.parseDouble(code);
			if (codeInt.intValue() == 0) {
				String data = g.toJson(map1.get("data"));
				Map<Object, Object> map2 = g.fromJson(data, new TypeToken<Map<Object, Object>>() {
				}.getType());
				String driverId = "";
				String driverPhone = "";
				String name = "";
				String pictureSmall = "";
				String pictureMiddle = "";
				String pictureLarge = "";
				String idCard = "";
				if (map2.get("driverId") != null) {
					driverId = map2.get("driverId").toString();
				}
				if (map2.get("driverPhone") != null) {
					driverPhone = map2.get("driverPhone").toString();
				}
				if (map2.get("name") != null) {
					name = map2.get("name").toString();
				}
				if (map2.get("newLevel") != null) {
					Double newLeveld = Double.parseDouble(map2.get("newLevel").toString());
					Integer newLevel = newLeveld.intValue();
				}
				if (map2.get("pictureSmall") != null) {
					pictureSmall = map2.get("pictureSmall").toString();
				}
				if (map2.get("pictureMiddle") != null) {
					pictureMiddle = map2.get("pictureMiddle").toString();
				}
				if (map2.get("pictureLarge") != null) {
					pictureLarge = map2.get("pictureLarge").toString();
				}
				if (map2.get("year") != null) {
					Double yeard = Double.parseDouble(map2.get("year").toString());
					Integer year = yeard.intValue();
				}
				if (map2.get("idCard") != null) {
					idCard = map2.get("idCard").toString();
				}

				//
				if (StringUtils.isBlank(driverPhone)) {
					message.setCode("2");
					message.setMessage("无法获取司机信息");
					message.setData(orderId);
					this.out(response, message);
					return;
				} else {
					CarManager carManager = this.carManagerService.selectByMobile(driverPhone);
					if (carManager == null) {
						carManager = new CarManager();
						carManager.setUsername(driverPhone);
						carManager.setName(name);
						carManager.setDrivinglicensephoto(pictureSmall);
						carManager.setMobile(driverPhone);
						if (map2.get("driverId") != null) {
							carManager.setRemark("e代驾司机:" + driverId + ",身份证:" + idCard);
						} else {
							carManager.setRemark("e代驾司机:" + null + ",身份证:" + idCard);
						}
						carManager.setIdphoto(idCard);
						try {
							carManager.setPassword(EncryptionUtil.md5(ConstantUtil.CAR_MANAGER_INITPWD));
						} catch (Exception e1) {
							e1.printStackTrace();
						}
						carManager.setWorkstatus(ConstantUtil.WORKSTATUS);
						carManager.setTaskstatus(ConstantUtil.TASKSTATUS);
						carManager.setCreatedate(now);
						carManager.setSex(0);
						carManager.setIdphoto("e代驾人员");
						carManager.setHoldingidphoto("e代驾人员");
						carManager.setDrivinglicensephoto("e代驾人员");
						this.carManagerService.insertManager(carManager);

						// 获取司机ID
						carManager = this.carManagerService.selectByMobile(driverPhone);
					}

					Customer cus = new Customer();
					cus.setUsername(driverPhone);
					cus.setName(name);
					cus.setIdcardno(idCard);
					cus.setIsValidateIdCard(new Byte("1"));
					cus.setIsValidateDrivingLicence(new Byte("1"));
					cus.setIsCompany(new Byte("1"));
					cus.setCompanyID(152);// 后续在该暂时没有想到取E代驾企业的方法
					cus.setCompanyName(AGENT_COMPANY_NAME);
					cus.setAuditstatus(new Byte("1"));
					cus.setIscanorder(new Byte("1"));
					cus.setMobile(driverPhone);
					cus.setSourcechannelid(1);
					cus.setCreatedate(new Date());
					cus.setDepartmentid(223);//E代驾使用部门ID
					try {
						cus.setPassword(EncryptionUtil.md5(ConstantUtil.CAR_MANAGER_INITPWD));
					} catch (Exception e) {
						e.printStackTrace();
					}
					Customer tempCus = customerService.isExistCustomer(cus);

					// 如果用户不存在,注册新用户
					if (tempCus == null) {
						// 获取注册模板的信息
						MessageTemplate mTemplate = messageTemplateService
								.selectTitleAndContentByIdentification(ConstantUtil.M_REGISTER_SUCCESS);
						net.joystart.customer.entity.Message mes = null;
						if (mTemplate != null) {
							// 添加站内信
							mes = new net.joystart.customer.entity.Message();
							mes.setTitle(mTemplate.getTitle());
							mes.setContent(mTemplate.getContent());
							mes.setSenddate(new Date());
							mes.setReadstatus(new Byte("0"));
							mes.setIsdelete(new Byte("0"));
							mes.setCreatedate(new Date());
						}
						cus = customerService.Register(cus, mes);
					} else {
						cus.setId(tempCus.getId());
					}

					// 更新用户UUID
					UUID uuid = UUID.randomUUID();
					cus.setLoginUUID(uuid.toString());
					customerService.updaeCustomer(cus);

					message = acceptTask(taskInfo.getId().toString(), carManager, cus);
					this.out(response, message);

					return;
				}
			} else {
				message.setCode("2");
				message.setMessage("无法获取司机信息");
				message.setData(orderId);
				this.out(response, message);
				return;
			}

		} else if (status.equals("5")) {
			if (cancelOrderByTask(taskInfo.getId())) {
				message.setCode("0");
				message.setMessage("success");
				this.out(response, message);
				return;
			} else {
				message.setCode("4");
				message.setMessage("取消订单失败");
				message.setData(orderId);
				this.out(response, message);
				return;
			}
		} else if (status.equals("50")) // 已收车
		{
			message.setCode("0");
			message.setMessage("success");
			this.out(response, message);
			return;
		} else if (status.equals("55")) // 已完成
		{
			message.setCode("0");
			message.setMessage("success");
			this.out(response, message);
			return;
		} else {
			message.setCode("0");
			message.setMessage("success");
			this.out(response, message);
			return;
		}

	}

	/**
	 * 领取任务
	 * 
	 * @param request
	 * @param response
	 */
	public MessageResult acceptTask(String taskId, CarManager carManager, Customer cus) {

		MessageResult message = new MessageResult();

		try {

			if (taskId == null) {
				message.setCode(ConstantUtil.M_EXCEPTION);
				message.setMessage("参数taskId不能为空");
				return message;
			}

			if (vehicleTaskService.IsCanAcceptTask(Integer.valueOf(taskId))) {
				message.setCode(ConstantUtil.M_EXCEPTION);
				message.setMessage("当前车辆已被用户下单,请联系管理人员删除此任务");
				return message;
			}

			TaskInfo taskInfo = vehicleTaskService.selectByPrimaryKey(Integer.valueOf(taskId));
			if (taskInfo.getTaskstatus() != 0 && taskInfo.getTaskuserid() != null) {
				message.setCode(ConstantUtil.M_EXCEPTION);
				message.setMessage("这个任务已经分配给了其他人");
				return message;
			}

			// 判断是充电,且有调度
			if (taskInfo.getTaskimg() != null && taskInfo.getTaskimg().intValue() == 0
					&& taskInfo.getDispatchType().intValue() == 3) {
				taskInfo.setTaskimg(5);
			}

			VehicleLock lock = new VehicleLock(taskInfo.getVehicleid().toString());
			String ret = lock.wrap(new Callable<String>() {
				@Override
				public String call() {
					String uuid = cus.getLoginUUID();
					MessageResult result = new MessageResult();
					InstantOrder instantOrder = new InstantOrder();
					instantOrder.setCustomerId(cus.getId());
					instantOrder.setVehicleId(taskInfo.getVehicleid());
					instantOrder.setIsEnterprise(new Byte("1"));
					instantOrder.setLoginUUID(uuid);
					String token = StringUtil.getRandomString(8, ConstantUtil.REDPACKET_NUMBER_SEEDSOURCE);
					/*** 生成随机控制密码 ***/
					try {
						token = EncryptionUtil.md5(token + uuid);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

					// 订单来源代驾
					instantOrder.setSourceType(4);

					// 插入订单
					result = orderService.insertInstantOrder(instantOrder);
					HashMap<String, Object> orderMap = new HashMap<String, Object>();
					// dataMap.put("orderId", orderId);
					if (result != null) {
						orderMap = (HashMap<String, Object>) result.getData();
					}
					// IVehicleService vehicleService;
					String orderId = orderMap.get("orderId").toString();

					taskInfo.setAllocationtime(new Date());
					taskInfo.setTaskstatus(1);
					taskInfo.setTaskuserid(carManager.getId());
					taskInfo.setOrderid(Integer.valueOf(orderId)); // 设置订单关联任务
					// taskInfo.setOrderkey(orderLoginCode);
					taskInfo.setExpires(EXPIRES_IN);
					vehicleTaskService.acceptTask(taskInfo);

					int taskType = taskInfo.getTasktype();
					String temp = "充电";
					if (0 == taskType) {
						temp = "充电";
					} else if (1 == taskType) {
						temp = "调度";
					} else if (2 == taskType) {
						temp = "整备";
					} else if (3 == taskType) {
						temp = "调度充电";
					} else if (4 == taskType) {
						temp = "加油";
					}
					Vehicle vh = vehicleService.selectByPrimaryKey(taskInfo.getVehicleid());

					// 插入登录信息
					/*String sql = "insert into `t_base_task_token`(orderid,taskid,loginUUID,token,expiresIn,createTime) values("
							+ orderId + "," + taskId.toString() + ",‘" + cus.getLoginUUID() + "‘,‘" + token + "‘,"
							+ EXPIRES_IN + ",‘" + new Date() + "‘)";*/
					//DataBaseUtil.query(sql);
					TaskToken taskToken = new TaskToken();
					taskToken.setCreatetime(new Date());
					taskToken.setOrderid(Integer.parseInt(orderId));
					taskToken.setTaskid(Integer.parseInt(taskId));
					taskToken.setLoginuuid(cus.getLoginUUID());
					taskToken.setToken(token);
					taskToken.setExpiresin(EXPIRES_IN);
					vehicleService.insertSelectiveTaskToken(taskToken);
					
					carManagerLogService.insertLog(carManager.getId(), "接受" + temp + "任务 车牌号:"
							+ (vh != null ? vh.getPlatenumber() : "未知") + " \r\n任务单号:" + taskInfo.getTaskNo());

					/*********************
					 * 发送短信任务链接给代驾人员
					 ******************/
					String taskurl = "http://t.bagechuxing.cn/l/" + token;
					PostMsgHttpContent.sendMessage("13401149982", "您成功领取了任务,点击以下链接完成任务 " + taskurl);
					return "SUCCESS";
				}

			});

			if ("SUCCESS".equals(ret)) {
				message.setCode(ConstantUtil.M_SUCCESS);
				message.setMessage("接受任务成功");
			} else {
				message.setCode(ConstantUtil.M_SYSTEM_ERROR);
				message.setMessage("系统异常");
			}

			return message;

		} catch (Exception e) {
			e.printStackTrace();
			message.setCode(ConstantUtil.M_SYSTEM_ERROR);
			message.setMessage("系统异常");
			return message;
		}
	}

	/***
	 * 根据任务生成e代驾订单
	 * 
	 * @param taskid
	 */
	public MessageResult createOrderByTaskId(Integer taskId, String customerId) {
		MessageResult message = new MessageResult();
		if (vehicleTaskService.IsCanAcceptTask(taskId)) {
			message.setCode(ConstantUtil.M_EXCEPTION);
			message.setMessage("当前车辆已被用户下单,请联系管理人员删除此任务");
			return message;
		}

		TaskInfo taskInfo = vehicleTaskService.selectByPrimaryKey(taskId);
		if (taskInfo.getTaskstatus() != 0 && taskInfo.getTaskuserid() != null) {
			message.setCode(ConstantUtil.M_EXCEPTION);
			message.setMessage("这个任务已经分配给了其他人");
			return message;
		}

		Integer vehicleId = taskInfo.getVehicleid();
		Vehicle vehicle = vehicleService.selectByPrimaryKey(vehicleId);

		Integer parkId = vehicle.getParkid();
		Parkinglot parkinglot = parkinglotService.selectParkinglotByPrimaryKey(parkId);
		if (parkinglot == null) {
			message.setCode(ConstantUtil.M_EXCEPTION);
			message.setMessage("该车未在任何车场");
			return message;
		}
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.MINUTE, +31);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

		String url = agentHost + "order/create";
		Map<String, String> params = new HashMap<>();
		params.put("channel", chanleId);
		params.put("customerId", customerId);
		params.put("type", "1"); // 订单类型 Int 是 1-取送车
		params.put("mode", "1"); // 订单成单模式 1-司机抢单(订单所在城市预约开启时生效,否则为客服派单) 0-客服派单
		params.put("createMobile", parkinglot.getTelephone()); // 下单人手机号 String
																// 是 手机号
		params.put("mobile", parkinglot.getTelephone()); // 车主手机号 String 是 手机号
		params.put("username", "巴歌出行"); // 车主姓名 String 是
		params.put("pickupContactName", "巴歌出行"); // 取车地址联系人姓名 String 是 最多20个字符
		params.put("pickupContactPhone", parkinglot.getTelephone()); // 取车地址联系人手机号
																		// String
																		// 是 手机号
		params.put("pickupAddress", parkinglot.getAddress()); // 取车地址 String 是
																// 最多100个字符
		params.put("pickupAddressLng", parkinglot.getLongitude()); // 取车地址经度
																	// Double 是
		params.put("pickupAddressLat", parkinglot.getLatitude()); // 取车地址纬度
																	// Double 是
		params.put("returnContactName", "巴歌出行"); // 还车地址联系人姓名 String 是 最多20个字符
		params.put("returnContactPhone", "13401149982"); // 还车地址联系人手机号
															// String
															// 是 手机号

		List<DrivingTrack> listTack = null;
		listTack = vehicleService.getAllCarsPoint(vehicle.getSn());
		if (listTack != null && listTack.size() > 0) {
			DrivingTrack dt = new DrivingTrack();
			dt = listTack.get(0);
			params.put("returnAddressLng", dt.getLongitude().toString()); // 还车地址经度
			// Double
			// 是
			params.put("returnAddressLat", dt.getLatitude().toString()); // 还车地址纬度
			// Double
			// 是
		}
		String returnAddress = BaiDuAPIUtil.getDetailByGPS(
				Double.parseDouble(params.get("returnAddressLng").toString()),
				Double.parseDouble(params.get("returnAddressLat").toString()));
		GsonBuilder gb = new GsonBuilder();
		Gson g = gb.create();
		Map<Object, Object> mapOne = g.fromJson(returnAddress, new TypeToken<Map<Object, Object>>() {
		}.getType());
		Map<Object, Object> mapTwo = (Map<Object, Object>) mapOne.get("result");

		String strOne = mapTwo.get("formatted_address").toString();
		params.put("returnAddress", strOne); // 还车地址 String 是
												// 最多100个字符

		params.put("bookingTime", sdf.format(cal.getTime())); // 预约时间 String
																// (yyyyMMddHHmmss)
																// 是
																// 必须比当前时间晚至少半个小时
		params.put("carNo", vehicle.getPlatenumber()); // 车牌号 String 是
		params.put("carBrandName", vehicle.getCarname()); // 车辆品牌名称 String 否
															// 最多50个字符
		params.put("carSeriesName", vehicle.getCarname()); // 车辆品牌名称 String 否
															// 最多50个字符
		String sign = getSign(params, agentKey);
		params.put("sign", sign);
		String result = HttpRequestUtil.doPostJson(url, getSendParam(params));
		logger.info("e代驾下单接口调用:" + params + ",返回结果:" + result);

		HashMap<String, Object> retObj = JSON.parseObject(result, HashMap.class);
		String code = retObj.get("code").toString();
		String msg = retObj.get("message").toString();

		/**** 更新外部订单号 *****/
		if (code.equals("0")) {
			String orderNo = retObj.get("data").toString();
			/*
			 * String verifyCode = getVerifyCode(orderNo, "1"); if (verifyCode
			 * == null) { message.setCode(ConstantUtil.M_EXCEPTION);
			 * message.setMessage("获取验证码失败"); return message; } else {
			 * taskInfo.setOrderkey(verifyCode);
			 * taskInfo.setOutorderid(orderNo);
			 * vehicleTaskService.acceptTask(taskInfo);
			 * message.setCode(ConstantUtil.M_SUCCESS);
			 * message.setMessage("SUCCESS"); message.setData(orderNo); return
			 * message; }
			 */
			taskInfo.setOutorderid(orderNo);
			taskInfo.setEdFlag(1);//推送成功
			taskInfo.setEdCreateDate(new Date());
			vehicleTaskService.acceptTask(taskInfo);
			logger.info("=================" + retObj.get("data").toString() + "====================");
			message.setCode(ConstantUtil.M_SUCCESS);
			message.setMessage("推送成功");
			return message;
		} else {
			message.setCode(ConstantUtil.M_EXCEPTION);
			message.setMessage("推送失败");
			return message;
		}
	}

	/***
	 * 取消订单接口
	 */
	private boolean cancelOrderByTask(Integer taskId) {
		try {
			TaskInfo taskInfo = vehicleTaskService.selectByPrimaryKey(taskId);
			if (taskInfo != null) {
				taskInfo.setIsdelete(1);
				vehicleTaskService.cancle(taskId);
				Integer orderId = taskInfo.getOrderid();
				if (orderId != null) {
					Order o = orderService.selectByPrimaryKey(orderId);
					Order order = new Order();
					order.setId(new Integer(orderId));
					order.setOrderstatus(40);
					orderService.updateByPrimaryKeySelective(order);
					redisTemplate.opsForHash().delete(ConstantUtil.ORDER_CACHE_KEY, o.getOrderno());
					Vehicle vehicle = new Vehicle(o.getVehicleid(), VehicleStatus.CANRENT.getValue());
					vehicleService.updateByPrimaryKeySelective(vehicle);
				}
				return true;
			} else {
				return false;
			}
		} catch (Exception ex) {
			Log4jTask.addLog("结束订单报错", System.currentTimeMillis(), Log4jTask.ERROR, OrderController.class.getName(),
					ex);
			return false;
		}
	}

	/**
	 * @author 完成任务商任务完成接口
	 */
	@Transactional
	@RequestMapping("/finishTask")
	public void taskfinish(HttpServletResponse response, HttpServletRequest request) {
		MessageResult messageResult = new MessageResult();
		String taskid = request.getParameter("taskid");
		String imgUrl = request.getParameter("imgUrl");
		String imgUrlTwo = request.getParameter("imgUrlTwo");
		String accidentType = request.getParameter("accidentType");
		String parkid = request.getParameter("parkid");
		String branchid = request.getParameter("branchid");

		// 整备id插入整备信息表
		String reorgids = request.getParameter("reorgids");
		logger.info("=================任务ID" + taskid + "=================================");
		logger.info("=================完成状态" + accidentType + "===========================");
		logger.info("=================车场ID" + parkid + "=================================");
		logger.info("=================网点" + branchid + "=================================");
		logger.info("=================整备" + reorgids + "=================================");
		try {
			VehicleSite vs = new VehicleSite();
			TaskInfo taskInfo = vehicleUnLockService.selectByPrimaryKey(Integer.parseInt(taskid));
			taskInfo.setAccidentType(Integer.parseInt(accidentType));
			Integer orderId = taskInfo.getOrderid();
			Order order = orderService.selectByPrimaryKey(orderId);
			int result = 0;

			// 结束订单信息
			if (order != null) {
				Integer customerId = order.getCustomerid();
				result = ControlService.vehicleControl(customerId, orderId, 3, null, null, "2",2);
			}

			if (StringUtils.isEmpty(parkid) && StringUtils.isEmpty(branchid)) {
				Vehicle vh = vehicleService.selectByPrimaryKey(taskInfo.getVehicleid());
				int siteid = selectSiteid(vh.getSn());
				if (siteid != 0) {
					vs.setId(siteid);
				} else {
					Map<String, Object> params = new HashMap<String, Object>();
					HashMap<String, Object> dataMap = new HashMap<>();
					List<Position> list = VehicleControlUtil.getVehicleLocationBaiDuAndCarLifeFromSn(vh.getSn());
					Position position = list.get(0);
					ServiceCity city = null;

					// 通过坐标获取城市信息
					city = this.cityService.getBaiduServiceCityByGPS(position.getX(), position.getY());
					params.put("cityId", city.getId());

					Parkinglot parkinglot = parkinglotService.findParkinglotCanCharging(params, position.getX(),
							position.getY());
					if (parkinglot == null) {
						messageResult.setData(dataMap);
						messageResult.setCode(ConstantUtil.M_EXCEPTION);
						messageResult.setMessage("车辆在允许的还车区域内");
						this.out(response, messageResult);
						return;
					}

					if (parkinglot.getParktype() != null) {
						EfenceBaseType efenceType;
						try {
							efenceType = EfenceBuilder.BuildEfence(parkinglot.getParktype(),
									parkinglot.getCoordinatepoints());
							EfenceState efenceState = efenceType.GetEfenceState(Double.parseDouble(position.getX()),
									Double.parseDouble(position.getY()));
							if (EfenceState.In.equals(efenceState)) {
								parkid = String.valueOf(parkinglot.getCountyid());
								branchid = String.valueOf(parkinglot.getId());
							}
						} catch (Exception e) {
							messageResult.setCode(ConstantUtil.M_EXCEPTION);
							messageResult.setMessage("获取站点围栏信息错误");
							this.out(response, messageResult);
							return;
						}
					}

					if (StringUtils.isBlank(branchid)) {
						messageResult.setCode(ConstantUtil.M_EXCEPTION);
						messageResult.setMessage("车辆未在允许的还车区域内");
						this.out(response, messageResult);
						return;
					}
				}
			}

			VehicleLock lock = new VehicleLock(taskInfo.getVehicleid().toString());
			String branchId = branchid;
			String parkId = parkid;
			String ret = lock.wrap(new Callable<String>() {
				@Override
				public String call() {

					if (taskInfo != null && taskInfo.getTaskstatus() != 1 && taskInfo.getTaskstatus() != 0) {
						if (taskInfo.getTaskstatus() == 4) {
							logger.info("当前任务已完成,请刷新 " + taskInfo.getId());
							return ConstantUtil.M_PARAMTER_NULL;
						} else {
							if (branchId != null && !"".equals(branchId)) {
								List<VehicleSite> list = vehicleUnLockService
										.getVehicleSiteLists(Integer.parseInt(branchId));
								if (list.size() == 0) {
									logger.info("该网点暂无车位" + taskInfo.getId());
									return ConstantUtil.M_SITENO;
								}
							} else {
								if (parkId != null && !"".equals(parkId)) {
									List<VehicleSite> list = vehicleUnLockService
											.getVehicleSiteList(Integer.parseInt(parkId));
									if (list.size() == 0) {
										logger.info("该网点暂无车位" + taskInfo.getId());
										return ConstantUtil.M_SITENO;
									}
								}
							}
							Calendar now = Calendar.getInstance(); // 获取当前系统时间
							Calendar calendar = Calendar.getInstance();
							calendar.setTime(taskInfo.getAllocationtime());
							long timeOne = now.getTimeInMillis();
							long timeTwo = calendar.getTimeInMillis();
							boolean flag = true;

							// 校验超时日期是否小于一分钟 add cjl
							if (taskInfo.getChargingtime() != null) { // 充电任务
								Long min = UtilTimeFormatter.seconds(new Date(), taskInfo.getAllocationtime(),
										taskInfo.getChargingtime(), taskInfo.getCountdown());
								if (min != null && min < 60) {
									flag = false;
								}
							} else {
								Long min = UtilTimeFormatter.seconds(new Date(), taskInfo.getAllocationtime(), null,
										taskInfo.getCountdown());
								if (min != null && min < 60) {
									flag = false;
								}
							}
							if (flag) {
								if (taskInfo.getAllocationtime() != null && taskInfo.getTasktype() == 0) {
									if (taskInfo.getChargingtime() != null
											&& taskInfo.getChargingtime().toString().equals("0.5")) {// 充电时间为半个小时
										int minute = new Long((timeOne - timeTwo) / (1000 * 60)).intValue();// 转化minute搜索
										if (taskInfo.getCountdown() != null
												&& (minute - 30) > taskInfo.getCountdown()) {
											taskInfo.setTimeout(minute - taskInfo.getCountdown() - 30);
										}
									} else if (taskInfo.getChargingtime() != null
											&& taskInfo.getChargingtime().toString().equals("1")) {// 充电时间为一个小时
										int minute = new Long((timeOne - timeTwo) / (1000 * 60)).intValue();// 转化minute搜索
										if (taskInfo.getCountdown() != null
												&& (minute - 60) > taskInfo.getCountdown()) {
											taskInfo.setTimeout(minute - taskInfo.getCountdown() - 60);
										}
									} else if (taskInfo.getChargingtime() != null
											&& taskInfo.getChargingtime().toString().equals("1.5")) {// 一个半小时
										int minute = new Long((timeOne - timeTwo) / (1000 * 60)).intValue();// 转化minute搜索
										if (taskInfo.getCountdown() != null
												&& (minute - 90) > taskInfo.getCountdown()) {
											taskInfo.setTimeout(minute - taskInfo.getCountdown() - 90);
										}
									} else if (taskInfo.getChargingtime() != null
											&& taskInfo.getChargingtime().toString().equals("2")) {// 俩个小时
										int minute = new Long((timeOne - timeTwo) / (1000 * 60)).intValue();// 转化minute搜索
										if (taskInfo.getCountdown() != null
												&& (minute - 120) > taskInfo.getCountdown()) {
											taskInfo.setTimeout(minute - taskInfo.getCountdown() - 120);
										}
									} else if (taskInfo.getChargingtime() == null
											|| taskInfo.getChargingtime().toString().equals("")) {
										int minute = new Long((timeOne - timeTwo) / (1000 * 60)).intValue();// 转化minute搜索
										if (taskInfo.getCountdown() != null && minute > taskInfo.getCountdown()) {
											taskInfo.setTimeout(minute - taskInfo.getCountdown());
										}
									}
								} else {
									int minute = new Long((timeOne - timeTwo) / (1000 * 60)).intValue();// 转化minute搜索
									if (taskInfo.getCountdown() != null && minute > taskInfo.getCountdown()) {
										taskInfo.setTimeout(minute - taskInfo.getCountdown());
									}
								}
							} else {
								taskInfo.setTimeout(0);// 小于1分钟
							}
							if (accidentType != null && !accidentType.equals("")) {
								taskInfo.setAccidentType(Integer.parseInt(accidentType));
							}
							taskInfo.setAccomplishtime(new Date());
							int res = vehicleUnLockService.updateByPrimaryKeySelective(reorgids, taskInfo, imgUrl,
									imgUrlTwo, parkId, branchId, vs);

							if (res == 1) {
								Vehicle vh = vehicleService.selectByPrimaryKey(taskInfo.getVehicleid());
								carManagerLogService.insertLog(taskInfo.getTaskuserid(),
										TaskType.valueOf(taskInfo.getTasktype()).getName() + " 任务完成 车牌号:"
												+ (vh != null ? vh.getPlatenumber() : "未知") + " \r\n任务单号:"
												+ taskInfo.getTaskNo());
								logger.info("任务完成" + taskInfo.getId());
								return ConstantUtil.M_SUCCESS;
							} else {
								logger.info("任务完成失败了,请稍后再试" + taskInfo.getId());
								return String.valueOf(res);
							}
						}
					} else {
						logger.info("请操作开锁功能" + taskInfo.getId());
						return ConstantUtil.M_PARAMTER_NULL;
					}
				}
			});

			if (ret.equals(ConstantUtil.M_SUCCESS)) {
				messageResult.setData(taskInfo.getOrderkey());
				messageResult.setCode(ConstantUtil.M_SUCCESS);
				messageResult.setMessage("任务完成成功");
				this.out(response, messageResult);
			} else {
				messageResult.setData("0");
				messageResult.setCode(ret);
				messageResult.setMessage("任务完成失败");
				this.out(response, messageResult);
			}
		} catch (Exception ex) {
			messageResult.setData("");
			messageResult.setCode(ConstantUtil.M_EXCEPTION);
			messageResult.setMessage("任务完成失败");
			this.out(response, messageResult);
			ex.printStackTrace();
		}
	}

	/***
	 * 根据任务生成e代驾订单(静态方法供外部调用)
	 * 
	 * @param taskid
	 */
	public static MessageResult createOrderByTask(Integer taskId, String customerId) {
		AgentController agent = new AgentController();
		return agent.createOrderByTaskId(taskId, customerId);
	}

	/***
	 * 选择站点
	 * 
	 * @param sn
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public int selectSiteid(String sn) {
		int result = 0;
		int parkId = 0;
		int branchId = 0;
		Integer siteID = 0;
		String str = VehicleControlUtil.getGpsInfoFromSn(sn); // 获取原始GPS坐标 ADD
																// CJL
		if (str != null && !"".equals(str)) {
			Map<Object, Object> m = JSONProcesser.parseDataToMap(str);
			if ((double) m.get("result") == 1 && m.get("cars") != null
					&& ((List<Map<Object, Object>>) m.get("cars")).size() > 0) {
				List<Map<Object, Object>> listdetail = (List<Map<Object, Object>>) m.get("cars");
				if (listdetail != null && listdetail.size() > 0) {
					Map<Object, Object> map = listdetail.get(0);
					String lat = map.get("latitude").toString();
					String lon = map.get("longitude").toString();
					List<Parkinglot> parkList = getEfenceByGPS(Double.parseDouble(lon), Double.parseDouble(lat), 1);
					if (parkList == null || parkList.size() == 0) {
						// 车辆不在任何还车区域内
						return result;
					} else {
						int type = 0; // 0车场 1网点
						// 调用接口判断车辆是否在还车区域内,如果在返回网点或车场的id
						for (int i = 0; i < parkList.size(); i++) {
							Parkinglot parkinglot = parkList.get(i);
							if (parkinglot.getParktype() != null) {
								EfenceBaseType efenceType;
								try {
									efenceType = EfenceBuilder.BuildEfence(parkinglot.getParktype(),
											parkinglot.getCoordinatepoints());
									EfenceState efenceState = efenceType.GetEfenceState(Double.parseDouble(lon),
											Double.parseDouble(lat));
									if (EfenceState.In.equals(efenceState)) {
										parkId = parkinglot.getCountyid();
										branchId = parkinglot.getId();
										type = parkinglot.getStatus();
										break;
									}
								} catch (Exception e) {
									// TODO Auto-generated catch block
									// e.printStackTrace();
								}
							}
						}

						// 如果等于0 说明所有区域都不符合还车条件
						if (parkId == 0 && branchId == 0) {
							return result;
						}

						// 根据返回的车场或网点id,查找是否有车位可以进行还车
						if (type == 0) {
							// 如果是车场
							siteID = this.vehicleUnLockService.selectSiteIDByID(parkId);
							branchId = 0;
							if (siteID == null) {
								return 0;
							}
							return siteID;
						} else {
							// 如果是网点
							siteID = this.vehicleUnLockService.selectSiteIDByBranchID(branchId);
							if (siteID == null) {
								return 0;
							}
							return siteID;
						}
					}
				}
				return result;
			}
			return result;
		}
		return result;
	}

	/***
	 * 通过当前车辆GPS点获取可以使用的车场或网点还车范围信息
	 * 
	 * @param lng
	 * @param lat
	 * @param Type
	 * @return
	 */
	public List<Parkinglot> getEfenceByGPS(double lng, double lat, int Type) {
		ReturnForInterface rfi = new ReturnForInterface();

		String resutl = TengXunAPIUtil.getDetailByGPS(lng, lat, Type);
		if (!StringUtils.isBlank(resutl)) {
			// 将地图返回json转化为实体
			net.joystart.mapCoordinates.entity.ReturnResult RR = (net.joystart.mapCoordinates.entity.ReturnResult) JSONProcesser
					.jsonProcesser(resutl, net.joystart.mapCoordinates.entity.ReturnResult.class);

			if (RR != null) {
				// 获取城市的名称
				String CityName = RR.getResult().getAddress_component().getCity();
				// 获取城市名称的前2个字
				String smallCityName = "";
				if (!StringUtils.isBlank(resutl) && !StringUtils.isBlank(CityName)) {
					smallCityName = CityName.substring(0, 2);
				}

				// 根据2个城市名字筛选获取所有城市对应的id
				Map<String, Object> params = new HashMap<String, Object>();
				params.put("fullname", "%" + CityName + "%");
				params.put("name", "%" + smallCityName + "%");

				// 获取当前时间的小时和分钟
				Calendar calendar_as = Calendar.getInstance();

				Date dtnow = new Date();
				SimpleDateFormat sdf = new SimpleDateFormat("HHmm");

				String curtime = sdf.format(dtnow);

				params.put("minsec", Integer.valueOf(curtime));

				return vehicleUnLockService.selectEfenceByCity(params);
			}
		}

		return null;
	}

	/***
	 * 生成e代驾签名
	 * 
	 * @param params
	 * @param md5_key
	 * @return
	 */
	public boolean checkToken(String token) {
		String sql = "SELECT * FROM t_base_task_token WHERE token=‘" + token + "‘";
		List<Map<String, Object>> result = DataBaseUtil.query(sql);
		if (result == null || result.size() == 0) {
			return false;
		}
		return true;
	}

	/***
	 * 生成e代驾签名
	 * 
	 * @param params
	 * @param md5_key
	 * @return
	 */
	public String getSign(Map<String, String> params, String md5_key) {
		Map<String, String> sParaNew = paraFiltere(params);
		String preSignStr = createLinkString(sParaNew);
		String tmp = sign(preSignStr);
		return sign(tmp + md5_key);
	}

	/**
	 * 除去数组中的空值和签名参数
	 * 
	 * @param sArray
	 *            签名参数组
	 * @return 去掉空值与签名参数后的新签名参数组
	 */
	public Map<String, String> paraFilter(Map<String, String> sArray) {

		Map<String, String> result = new HashMap<String, String>();

		if (sArray == null || sArray.size() <= 0) {
			return result;
		}

		for (String key : sArray.keySet()) {
			String value = sArray.get(key);
			if (value == null || value.equals("") || key.equalsIgnoreCase("sign") || key.equalsIgnoreCase("msg")) {
				continue;
			}
			result.put(key, value);
		}

		return result;
	}

	/**
	 * 除去数组中的空值和签名参数
	 * 
	 * @param sArray
	 *            签名参数组
	 * @return 去掉空值与签名参数后的新签名参数组
	 */
	public Map<String, String> paraFiltere(Map<String, String> sArray) {

		Map<String, String> result = new HashMap<String, String>();

		if (sArray == null || sArray.size() <= 0) {
			return result;
		}

		for (String key : sArray.keySet()) {
			String value = sArray.get(key);
			if (value == null || value.equals("") || key.equalsIgnoreCase("sign") || key.equalsIgnoreCase("msg")) {
				result.put(key, "");
				continue;
			}
			result.put(key, value);
		}

		return result;
	}

	/**
	 * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
	 * 
	 * @param params
	 *            需要排序并参与字符拼接的参数组
	 * @return 拼接后字符串
	 */
	public String createLinkString(Map<String, String> params) {

		List<String> keys = new ArrayList<String>(params.keySet());
		Collections.sort(keys);
		String prestr = "";
		for (int i = 0; i < keys.size(); i++) {
			String key = keys.get(i);
			String value = params.get(key);
			prestr = prestr + key + "=" + value;
		}
		return prestr;
	}

	/**
	 * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
	 * 
	 * @param params
	 *            需要排序并参与字符拼接的参数组
	 * @return 拼接后字符串
	 */
	public String getSendParam(Map<String, String> params) {

		List<String> keys = new ArrayList<String>(params.keySet());
		Collections.sort(keys);
		String prestr = "";
		for (int i = 0; i < keys.size(); i++) {
			String key = keys.get(i);
			String value = params.get(key);
			if (i == keys.size() - 1) {
				prestr = prestr + key + "=" + value;
			} else {
				prestr = prestr + key + "=" + value + "&";
			}
		}
		return prestr;
	}

	/**
	 * 签名字符串
	 * 
	 * @param text
	 *            需要签名的字符串
	 * @param key
	 *            密钥
	 * @param input_charset
	 *            编码格式
	 * @return 签名结果
	 */
	public String sign(String text) {
		return DigestUtils.md5Hex(getContentBytes(text));
	}

	/**
	 * @param content
	 * @param charset
	 * @return
	 * @throws SignatureException
	 * @throws UnsupportedEncodingException
	 */
	private byte[] getContentBytes(String content) {
		try {
			return content.getBytes(ZCloudSignConfig.charset);
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,");
		}
	}

	/**
	 * 故障完成逻辑 add cjl
	 */
	@RequestMapping("/faultFinishTask")
	public void faultFinishTask(HttpServletResponse response, HttpServletRequest request) {
		MessageResult messageResult = new MessageResult();
		String taskid = request.getParameter("taskid");
		if (!taskid.equals("null")) {
			TaskInfo taskInfo = vehicleUnLockService.selectByPrimaryKey(Integer.parseInt(taskid));
			List<Integer> list = this.vehicleUnLockService.selectByPrimaryKeyVehidInt(taskInfo.getVehicleid());
			if (list != null && list.size() > 0) {//防止车位绑定重复 因为故障完成不需要开锁操作无法删除车位关系
				 vehicleUnLockService.deleteByPrimaryKeyForEach(list);
			}
			Order order = orderService.selectByPrimaryKey(taskInfo.getOrderid());
			order.setOrderstatus(10);
			order.setId(taskInfo.getOrderid());
			orderService.updateByPrimaryKeySelectiveStaus(order);//故障完成无需开锁,所以订单状体强制改成10
			// 结束订单信息
			if (taskInfo.getOrderid() != null) {
				int result = ControlService.vehicleControl(order.getCustomerid(), order.getId(), 3, null, null, "2",1);
			}
			Vehicle vehicle = vehicleService.selectByPrimaryKey(taskInfo.getVehicleid());
			int recReport = vehicleUnLockService.getFaultReportCount(vehicle.getPlatenumber());
			if (recReport > 0) {
				messageResult.setCode(ConstantUtil.M_EXCEPTION);
				messageResult.setMessage("有未处理完的故障报修,请处理后再上报");
				this.out(response, messageResult);
				return;
			} else {
				taskInfo.setTaskstatus(5);
				int res = vehicleUnLockService.updateTaskInfo(taskInfo);
				if (res != 0) {
					MessageTemplate mTemplate = messageTemplateService
							.selectTitleAndContentByIdentification(ConstantUtil.E_FAULTREPORT);
					Parkinglot parkinglot = vehicleService.selectByPrimaryKeyParkinglot(vehicle.getParkid());
					CarManager carManager =carManagerService.selectByPrimaryKey(taskInfo.getTaskuserid());
					String content = mTemplate.getContent().replaceAll("【plateNumber】", vehicle.getPlatenumber());
					content = content.replaceAll("【name】", carManager.getName());
					content = content.replaceAll("【phone】", carManager.getUsername());
					if(mTemplate!=null)
					{
					  PostMsgHttpContent.sendMessage(parkinglot.getTelephone(),content);
					  logger.info("<----------------故障完成发短信:短信发送成功" + "---------------------->");
					}
					else
					{
					  logger.info("<----------------故障完成发短信:短信模板为空" + "---------------------->"); 
					}
					
					carManagerLogService.insertLog(taskInfo.getTaskuserid(), "上报故障,车牌号:" + vehicle.getPlatenumber());// +
					// "
					// 故障ID:"
					// +
					// faultReport.getId()
					messageResult.setCode(ConstantUtil.M_SUCCESS);
					messageResult.setMessage("故障上报成功");
					this.out(response, messageResult);
				} else {
					messageResult.setCode(ConstantUtil.M_EXCEPTION);
					messageResult.setMessage("故障上报失败了,请稍后再试");
					this.out(response, messageResult);
				}
			}
		} else {
			messageResult.setCode(ConstantUtil.M_PARAMTER_NULL);
			messageResult.setMessage("无任务信息");
			this.out(response, messageResult);
		}

	}
}

 

JAVA直接跳转到HTML5页面

标签:etc   imei   sep   const   tle   推送   title   mode   .post   

原文地址:http://www.cnblogs.com/cuijinlong/p/7489003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!