• JAVA直接跳转到HTML5页面


    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() : "未知") + " 
    任务单号:" + 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() : "未知") + " 
    任务单号:"
    												+ 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+7入门经典 -1 简介
    优化算法动画演示Alec Radford's animations for optimization algorithms
    如何写科技论文How to write a technical paper
    开始学习深度学习和循环神经网络Some starting points for deep learning and RNNs
    用500行Julia代码开始深度学习之旅 Beginning deep learning with 500 lines of Julia
    用10张图来看机器学习Machine learning in 10 pictures
    ICLR 2013 International Conference on Learning Representations深度学习论文papers
    ICLR 2014 International Conference on Learning Representations深度学习论文papers
    卷积神经网络CNN(Convolutional Neural Networks)没有原理只有实现
    卷积神经网络Convolutional Neural Networks
  • 原文地址:https://www.cnblogs.com/cuijinlong/p/7489003.html
Copyright © 2020-2023  润新知