zoukankan      html  css  js  c++  java
  • 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);
    		}
    
    	}
    }
    
  • 相关阅读:
    抑郁症:2019年11月9日
    NOIP2018考前抱佛脚——图论基础复习
    NOIP2018考前抱佛脚——搜索复习
    NOIP2018考前抱佛脚——数据结构基础及STL实现
    题解 P2920 【[USACO08NOV]时间管理Time Management】
    agc030C Coloring Torus
    agc036B Do Not Duplicate
    agc034C Tests
    AFO
    agc005D ~K Perm Counting
  • 原文地址:https://www.cnblogs.com/cuijinlong/p/7489003.html
Copyright © 2011-2022 走看看