接送机,录音修改,改派订单,接送机订单,人脸识别异常记录部分
New file |
| | |
| | | package com.stylefeng.guns.modular.system.controller.specialTrain; |
| | | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.stylefeng.guns.core.base.controller.BaseController; |
| | | import com.stylefeng.guns.core.common.constant.factory.PageFactory; |
| | | import com.stylefeng.guns.core.shiro.ShiroKit; |
| | | import com.stylefeng.guns.core.util.SinataUtil; |
| | | import com.stylefeng.guns.core.util.ToolUtil; |
| | | import com.stylefeng.guns.modular.system.dao.OrderCancelMapper; |
| | | import com.stylefeng.guns.modular.system.model.*; |
| | | import com.stylefeng.guns.modular.system.service.ITDriverService; |
| | | import com.stylefeng.guns.modular.system.service.ITOrderPositionService; |
| | | import com.stylefeng.guns.modular.system.service.ITOrderTransferService; |
| | | import com.stylefeng.guns.modular.system.service.ITServerCarmodelService; |
| | | import com.stylefeng.guns.modular.system.util.HttpRequestUtil; |
| | | import com.stylefeng.guns.modular.system.util.PushMinistryOfTransportUtil; |
| | | import com.stylefeng.guns.modular.system.util.PushURL; |
| | | import com.stylefeng.guns.modular.system.util.ResultUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Controller; |
| | | import org.springframework.ui.Model; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.BufferedReader; |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | | import java.io.InputStreamReader; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * 接送机订单控制器 |
| | | * |
| | | * @author fengshuonan |
| | | * @Date 2020-09-02 17:28:59 |
| | | */ |
| | | @Controller |
| | | @RequestMapping("/tOrderTransfer") |
| | | public class TOrderTransferController extends BaseController { |
| | | |
| | | private String PREFIX = "/system/tOrderTransfer/"; |
| | | |
| | | @Autowired |
| | | private ITOrderTransferService tOrderTransferService; |
| | | |
| | | @Autowired |
| | | private ITServerCarmodelService tServerCarmodelService; |
| | | |
| | | @Autowired |
| | | private ITOrderPositionService tOrderPositionService; |
| | | |
| | | @Autowired |
| | | private ITDriverService tDriverService; |
| | | |
| | | @Autowired |
| | | private PushMinistryOfTransportUtil pushMinistryOfTransportUtil; |
| | | |
| | | @Resource |
| | | private OrderCancelMapper orderCancelMapper; |
| | | |
| | | @Value("${pushMinistryOfTransport}") |
| | | private boolean pushMinistryOfTransport; |
| | | |
| | | @Value("${filePath}") |
| | | private String filePath; |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 跳转到接送机订单首页 |
| | | */ |
| | | @RequestMapping("") |
| | | public String index(Model model) { |
| | | //服务接送机车型 |
| | | List<TServerCarmodel> carmodelList = tServerCarmodelService.selectList(new EntityWrapper<TServerCarmodel>().eq("type", 1).eq("state", 1)); |
| | | model.addAttribute("carmodelList",carmodelList); |
| | | return PREFIX + "tOrderTransfer.html"; |
| | | } |
| | | |
| | | /** |
| | | * 跳转到修改接送机订单 |
| | | */ |
| | | @RequestMapping("/tOrderTransfer_orderDetail/{tOrderTransferId}") |
| | | public String tOrderTransferUpdate(@PathVariable Integer tOrderTransferId, Model model) { |
| | | Map<String, Object> item = tOrderTransferService.getTransferOrderDetailById(tOrderTransferId); |
| | | model.addAttribute("item",item); |
| | | return PREFIX + "tOrderTransfer_orderDetail.html"; |
| | | } |
| | | |
| | | /** |
| | | * 跳转到出租车订单轨迹页面 |
| | | */ |
| | | @RequestMapping("/tOrderTransfer_trajectory/{tOrderTransferId}") |
| | | public String tOrderTaxi_trajectory(@PathVariable Integer tOrderTransferId, Model model) { |
| | | model.addAttribute("tOrderTransferId",tOrderTransferId); |
| | | return PREFIX + "tOrderTransfer_trajectory.html"; |
| | | } |
| | | |
| | | /** |
| | | * 获取接送机订单列表 |
| | | */ |
| | | @RequestMapping(value = "/list") |
| | | @ResponseBody |
| | | public Object list(String insertTime, |
| | | String orderNum, |
| | | Integer orderSource, |
| | | String userName, |
| | | String userPhone, |
| | | String passengers, |
| | | String passengersPhone, |
| | | Integer serverCarModelId, |
| | | String driver, |
| | | Integer state) { |
| | | String beginTime = null; |
| | | String endTime = null; |
| | | if (SinataUtil.isNotEmpty(insertTime)){ |
| | | String[] timeArray = insertTime.split(" - "); |
| | | beginTime = timeArray[0]; |
| | | endTime = timeArray[1]; |
| | | } |
| | | Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(); |
| | | page.setRecords(tOrderTransferService.getTransferOrderList(page,beginTime,endTime,ShiroKit.getUser().getRoleType(),ShiroKit.getUser().getObjectId(),orderNum,orderSource,userName,userPhone,passengers,passengersPhone,serverCarModelId,driver,state)); |
| | | return super.packForBT(page); |
| | | } |
| | | |
| | | private ResultUtil resultUtil; |
| | | |
| | | /** |
| | | * 获取订单轨迹 |
| | | * @param orderDetailId |
| | | * @return |
| | | */ |
| | | @ResponseBody |
| | | @RequestMapping(value = "/getOrderTrack", method = RequestMethod.POST) |
| | | public ResultUtil getOrderTrack(String orderDetailId){ |
| | | if(ToolUtil.isNotEmpty(orderDetailId)){ |
| | | try { |
| | | // List<TOrderPosition> list = tOrderPositionService.selectList(new EntityWrapper<TOrderPosition>().eq("orderType", 1).eq("orderId", orderDetailId).orderBy("insertTime")); |
| | | /*if(list.size() == 0){ |
| | | return ResultUtil.error("该订单没有运行轨迹"); |
| | | }*/ |
| | | //将数据存储到文件中 |
| | | File file = new File(filePath + orderDetailId + "_1.txt"); |
| | | if(!file.exists()){ |
| | | return ResultUtil.success(new ArrayList<>()); |
| | | } |
| | | //读取文件(字符流) |
| | | BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8")); |
| | | //循环取出数据 |
| | | String str = null; |
| | | StringBuffer sb = new StringBuffer(); |
| | | while ((str = in.readLine()) != null) { |
| | | sb.append(str); |
| | | } |
| | | List<TOrderPosition> list = JSONArray.parseArray(sb.toString(), TOrderPosition.class); |
| | | resultUtil = ResultUtil.success(list); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | resultUtil = ResultUtil.runErr(); |
| | | } |
| | | }else { |
| | | resultUtil = ResultUtil.paranErr(); |
| | | } |
| | | return resultUtil; |
| | | } |
| | | |
| | | /** |
| | | * 取消接送机订单 |
| | | */ |
| | | @RequestMapping(value = "/cancel") |
| | | @ResponseBody |
| | | public Object cancel(@RequestParam Integer tOrderTransferId) { |
| | | TOrderTransfer tOrderTransfer = tOrderTransferService.selectById(tOrderTransferId); |
| | | |
| | | //修改之前司机状态 -- 空闲 |
| | | if(null != tOrderTransfer.getDriverId()){ |
| | | TDriver driver = tDriverService.selectById(tOrderTransfer.getDriverId()); |
| | | driver.setState(2); |
| | | tDriverService.updateById(driver); |
| | | } |
| | | |
| | | tOrderTransfer.setState(10); |
| | | tOrderTransferService.updateById(tOrderTransfer); |
| | | |
| | | OrderCancel orderCancel = new OrderCancel(); |
| | | orderCancel.setOrderId(tOrderTransferId); |
| | | orderCancel.setOrderType(1); |
| | | orderCancel.setReason("平台取消订单"); |
| | | orderCancel.setRemark("平台取消订单"); |
| | | orderCancel.setUserType(2); |
| | | orderCancel.setState(2); |
| | | orderCancel.setInsertTime(new Date()); |
| | | orderCancelMapper.insert(orderCancel); |
| | | |
| | | //增加推送 |
| | | Map<String,String> map = new HashMap<>(); |
| | | map.put("id", tOrderTransfer.getId().toString()); |
| | | map.put("orderType", "1"); |
| | | String result = HttpRequestUtil.postRequest(PushURL.cancel_order_url, map); |
| | | System.out.println("接送机取消:【orderId="+tOrderTransfer.getId().toString()+"】,调用接口:"+result); |
| | | |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | if(pushMinistryOfTransport){//上传数据 |
| | | pushMinistryOfTransportUtil.orderCancel(tOrderTransferId); |
| | | } |
| | | } |
| | | }).start(); |
| | | |
| | | return SUCCESS_TIP; |
| | | } |
| | | |
| | | /** |
| | | * 删除接送机订单 |
| | | */ |
| | | @RequestMapping(value = "/delete") |
| | | @ResponseBody |
| | | public Object delete(@RequestParam Integer tOrderTransferId) { |
| | | TOrderTransfer tOrderTransfer = tOrderTransferService.selectById(tOrderTransferId); |
| | | tOrderTransfer.setIsDelete(2); |
| | | tOrderTransferService.updateById(tOrderTransfer); |
| | | return SUCCESS_TIP; |
| | | } |
| | | } |
| | |
| | | loginFailures.put(username, f); |
| | | } |
| | | |
| | | if(f > 5 && (System.currentTimeMillis() - t) <= (30 * 60 * 1000)){ |
| | | model.addAttribute("tips", "登录次数过多,请等30分钟再试!"); |
| | | return "/login.html"; |
| | | } |
| | | // if(f > 5 && (System.currentTimeMillis() - t) <= (30 * 60 * 1000)){ |
| | | // model.addAttribute("tips", "登录次数过多,请等30分钟再试!"); |
| | | // return "/login.html"; |
| | | // } |
| | | //验证验证码是否正确 |
| | | if (KaptchaUtil.getKaptchaOnOff()) { |
| | | String kaptcha = super.getPara("kaptcha").trim(); |
New file |
| | |
| | | package com.stylefeng.guns.modular.system.dao; |
| | | |
| | | import com.baomidou.mybatisplus.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.stylefeng.guns.modular.system.model.TCarModel; |
| | | import com.stylefeng.guns.modular.system.model.TDriverFacialFail; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * <p> |
| | | * 人脸识别失败记录表 Mapper 接口 |
| | | * </p> |
| | | * |
| | | * @author 吕雪 |
| | | * @since 2020-06-05 |
| | | */ |
| | | public interface TDriverFacialFailMapper extends BaseMapper<TDriverFacialFail> { |
| | | |
| | | } |
| | |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单-专车 Mapper 接口 |
| | | * 订单-接送机 Mapper 接口 |
| | | * </p> |
| | | * |
| | | * @author 吕雪 |
| | | * @since 2020-09-02 |
| | | */ |
| | | public interface TOrderTransferMapper extends BaseMapper<TOrderTransfer> { |
| | | /** |
| | | * 根据条件查询专车订单列表 |
| | | * @return |
| | | */ |
| | | List<Map<String,Object>> getTransferOrderList(@Param("page") Page<Map<String, Object>> page, |
| | | @Param("beginTime") String beginTime, |
| | | @Param("endTime") String endTime, |
| | | @Param("roleType") Integer roleType, |
| | | @Param("nowUserId") Integer nowUserId, |
| | | @Param("orderNum") String orderNum, |
| | | @Param("orderSource") Integer orderSource, |
| | | @Param("userName") String userName, |
| | | @Param("userPhone") String userPhone, |
| | | @Param("passengers") String passengers, |
| | | @Param("passengersPhone") String passengersPhone, |
| | | @Param("serverCarModelId") Integer serverCarModelId, |
| | | @Param("driver") String driver, |
| | | @Param("state") Integer state); |
| | | |
| | | /** |
| | | * 根据专车订单ID获取专车订单详情 |
| | | * @param orderId |
| | | * @return |
| | | */ |
| | | Map<String,Object> getTransferOrderDetailById(@Param("orderId") Integer orderId); |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.stylefeng.guns.modular.system.dao.TDriverFacialFailMapper"> |
| | | |
| | | <!-- 通用查询映射结果 --> |
| | | <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.TDriverFacialFail"> |
| | | <id column="id" property="id" /> |
| | | <result column="driverId" property="driverId" /> |
| | | <result column="city" property="city" /> |
| | | <result column="cityCode" property="cityCode" /> |
| | | <result column="facialPicture" property="facialPicture" /> |
| | | <result column="createTime" property="createTime" /> |
| | | <result column="isDelete" property="isDelete" /> |
| | | </resultMap> |
| | | |
| | | <!-- 通用查询结果列 --> |
| | | <sql id="Base_Column_List"> |
| | | id, driverId, city, cityCode, facialPicture, createTime, isDelete |
| | | </sql> |
| | | |
| | | </mapper> |
| | |
| | | <sql id="Base_Column_List"> |
| | | id, type, userId, driverId, carId, orderNum, placementLon, placementLat, placementAddress, startLon, startLat, endLon, startAddress, endLat, endAddress, boardingLon, boardingLat, boardingAddress, boardingTime, getoffLon, getoffLat, getoffAddress, getoffTime, mileage, payManner, payType, orderMoney, startMoney, mileageMoney, durationMoney, longDistanceMoney, parkMoney, roadTollMoney, redPacketMoney, couponMoney, redPacketId, couponId, discount, discountMoney, activityId, companyId, payMoney, substitute, passengers, passengersPhone, state, insertTime, travelTime, snatchOrderTime, setOutTime, arriveTime, startServiceTime, endServiceTime, orderType, orderSource, invoiceId, isReassign, reassignNotice, trackId, isDelete, oldState, telX, bindId, serverCarModelId |
| | | </sql> |
| | | <!--根据条件查询专车订单列表--> |
| | | <select id="getTransferOrderList" resultType="map" parameterType="com.baomidou.mybatisplus.plugins.Page"> |
| | | SELECT * FROM (SELECT ui.nickName as userName,ui.phone as userPhone,CONCAT(di.`name`,'-',di.phone) as driver,CONCAT(cb.`name`,'-',ci.carLicensePlate) as car, |
| | | sc.`name` as serverCarModel,ot.* FROM t_order_transfer as ot |
| | | LEFT JOIN t_user as ui on ui.id = ot.userId |
| | | LEFT JOIN t_driver as di on di.id = ot.driverId |
| | | LEFT JOIN t_car as ci on ci.id= ot.carId |
| | | LEFT JOIN t_car_brand as cb on cb.id = ci.carBrandId |
| | | LEFT JOIN t_server_carmodel as sc on sc.id = ot.serverCarModelId |
| | | ) as o |
| | | <where> |
| | | o.isDelete = 1 and o.type = 7 |
| | | <if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''"> |
| | | AND (o.insertTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59')) |
| | | </if> |
| | | <if test="orderNum != null and orderNum != ''"> |
| | | and o.orderNum LIKE CONCAT('%',#{orderNum},'%') |
| | | </if> |
| | | <if test="orderSource != null and orderSource != ''"> |
| | | and o.orderSource = #{orderSource} |
| | | </if> |
| | | <if test="userName != null and userName != ''"> |
| | | and o.userName LIKE CONCAT('%',#{userName},'%') |
| | | </if> |
| | | <if test="userPhone != null and userPhone != ''"> |
| | | and o.userPhone LIKE CONCAT('%',#{userPhone},'%') |
| | | </if> |
| | | <if test="passengers != null and passengers != ''"> |
| | | and o.passengers LIKE CONCAT('%',#{passengers},'%') |
| | | </if> |
| | | <if test="passengersPhone != null and passengersPhone != ''"> |
| | | and o.passengersPhone LIKE CONCAT('%',#{passengersPhone},'%') |
| | | </if> |
| | | <if test="serverCarModelId != null and serverCarModelId != ''"> |
| | | and o.serverCarModelId = #{serverCarModelId} |
| | | </if> |
| | | <if test="driver != null and driver != ''"> |
| | | and o.driver LIKE CONCAT('%',#{driver},'%') |
| | | </if> |
| | | <if test="state != null and state != ''"> |
| | | and o.state = #{state} |
| | | </if> |
| | | <if test="roleType != null and roleType != '' and roleType == 2"> |
| | | and (o.companyId = #{nowUserId} or FIND_IN_SET(o.companyId,(SELECT GROUP_CONCAT(id) as ids FROM t_company where superiorId = #{nowUserId} GROUP BY superiorId))) |
| | | </if> |
| | | <if test="roleType != null and roleType != '' and roleType == 3"> |
| | | and o.companyId = #{nowUserId} |
| | | </if> |
| | | </where> |
| | | order by o.id desc |
| | | </select> |
| | | |
| | | <!--根据专车订单ID获取专车订单详情--> |
| | | <select id="getTransferOrderDetailById" resultType="map"> |
| | | SELECT |
| | | DATE_FORMAT(ot.insertTime,'%Y-%m-%d %H:%i') as insertTimeStr, |
| | | DATE_FORMAT(ot.travelTime,'%Y-%m-%d %H:%i') as travelTimeStr, |
| | | DATE_FORMAT(ot.boardingTime,'%Y-%m-%d %H:%i') as boardingTimeStr, |
| | | DATE_FORMAT(ot.getoffTime,'%Y-%m-%d %H:%i') as getoffTimeStr, |
| | | case when ot.orderSource = 1 then 'APP下单' |
| | | when ot.orderSource = 2 then '扫码下单' |
| | | when ot.orderSource = 3 then '小程序下单' |
| | | when ot.orderSource = 4 then '司机下单' |
| | | when ot.orderSource = 5 then '调度下单' else '' end orderSourceStr, |
| | | ui.nickName as userName,ui.phone as userPhone, |
| | | case when ot.payType = 1 then '微信' |
| | | when ot.payType = 2 then '支付宝' |
| | | when ot.payType = 3 then '余额' else '' end as payTypeStr, |
| | | sc.`name` as serverCarModel, |
| | | case when income1.type = 1 then income1.money else 0 end as platIncome, |
| | | case when income1.type = 2 then income1.money else 0 end as companyIncome, |
| | | case when income1.type = 3 then income1.money else 0 end as franchiseeIncome, |
| | | IFNULL(income2.money,0) as driverIncome, |
| | | CONCAT(di.`name`,'-',di.phone) as driver, |
| | | CONCAT(cb.`name`,'-',ci.carLicensePlate) as car, |
| | | cc.`name` as companyName,ot.* |
| | | FROM t_order_transfer as ot |
| | | LEFT JOIN t_user as ui on ui.id = ot.userId |
| | | LEFT JOIN t_driver as di on di.id = ot.driverId |
| | | LEFT JOIN t_car as ci on ci.id= ot.carId |
| | | LEFT JOIN t_car_brand as cb on cb.id = ci.carBrandId |
| | | LEFT JOIN t_company as cc on cc.id = ot.companyId |
| | | LEFT JOIN t_server_carmodel as sc on sc.id = ot.serverCarModelId |
| | | LEFT JOIN (SELECT ii.money,ii.incomeId,cc.type FROM t_income as ii |
| | | LEFT JOIN t_company as cc on ii.objectId = cc.id |
| | | where ii.userType = 1 and ii.type = 2 and ii.orderType = 7 GROUP BY ii.incomeId) as income1 on income1.incomeId = ot.id |
| | | LEFT JOIN (SELECT * FROM t_income where userType = 2 and type = 2 and orderType = 7 GROUP BY incomeId) as income2 on income2.incomeId = ot.id |
| | | where ot.id = #{orderId} |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | */ |
| | | private Integer addObjectId; |
| | | |
| | | /** |
| | | * 人脸识别失败次数 5次进行下线 |
| | | */ |
| | | private Integer failCount; |
| | | |
| | | /** |
| | | * 是否需要进行人脸识别 1=是 0=否 |
| | | */ |
| | | private Integer isNeedFacial; |
| | | |
| | | /** |
| | | * 上次人脸识别时间 |
| | | */ |
| | | private Date lastFacialTime; |
| | | |
| | | public Integer getFailCount() { |
| | | return failCount; |
| | | } |
| | | |
| | | public void setFailCount(Integer failCount) { |
| | | this.failCount = failCount; |
| | | } |
| | | |
| | | public Integer getIsNeedFacial() { |
| | | return isNeedFacial; |
| | | } |
| | | |
| | | public void setIsNeedFacial(Integer isNeedFacial) { |
| | | this.isNeedFacial = isNeedFacial; |
| | | } |
| | | |
| | | public Date getLastFacialTime() { |
| | | return lastFacialTime; |
| | | } |
| | | |
| | | public void setLastFacialTime(Date lastFacialTime) { |
| | | this.lastFacialTime = lastFacialTime; |
| | | } |
| | | |
| | | public BigDecimal getBalance() { |
| | | return balance; |
| | | } |
New file |
| | |
| | | package com.stylefeng.guns.modular.system.model; |
| | | |
| | | import com.baomidou.mybatisplus.activerecord.Model; |
| | | import com.baomidou.mybatisplus.annotations.TableId; |
| | | import com.baomidou.mybatisplus.annotations.TableName; |
| | | import com.baomidou.mybatisplus.enums.IdType; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * <p> |
| | | * 司机人脸识别失败记录 |
| | | * </p> |
| | | * |
| | | * @author 吕雪 |
| | | * @since 2020-06-05 |
| | | */ |
| | | @TableName("t_driver_facial_fail") |
| | | public class TDriverFacialFail extends Model<TDriverFacialFail> { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 主键id |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | /** |
| | | * 司机id |
| | | */ |
| | | private Integer driverId; |
| | | |
| | | /** |
| | | * 所属城市 |
| | | */ |
| | | private String city; |
| | | /** |
| | | * 城市code |
| | | */ |
| | | private String cityCode; |
| | | /** |
| | | * 识别失败图片 |
| | | */ |
| | | private String facialPicture; |
| | | /** |
| | | * 识别时间 |
| | | */ |
| | | private String createTime; |
| | | /** |
| | | * 是否删除 1=否 2=是 |
| | | */ |
| | | private String isDelete; |
| | | |
| | | public Integer getId() { |
| | | return id; |
| | | } |
| | | |
| | | public void setId(Integer id) { |
| | | this.id = id; |
| | | } |
| | | |
| | | public Integer getDriverId() { |
| | | return driverId; |
| | | } |
| | | |
| | | public void setDriverId(Integer driverId) { |
| | | this.driverId = driverId; |
| | | } |
| | | |
| | | public String getCity() { |
| | | return city; |
| | | } |
| | | |
| | | public void setCity(String city) { |
| | | this.city = city; |
| | | } |
| | | |
| | | public String getCityCode() { |
| | | return cityCode; |
| | | } |
| | | |
| | | public void setCityCode(String cityCode) { |
| | | this.cityCode = cityCode; |
| | | } |
| | | |
| | | public String getFacialPicture() { |
| | | return facialPicture; |
| | | } |
| | | |
| | | public void setFacialPicture(String facialPicture) { |
| | | this.facialPicture = facialPicture; |
| | | } |
| | | |
| | | public String getCreateTime() { |
| | | return createTime; |
| | | } |
| | | |
| | | public void setCreateTime(String createTime) { |
| | | this.createTime = createTime; |
| | | } |
| | | |
| | | public String getIsDelete() { |
| | | return isDelete; |
| | | } |
| | | |
| | | public void setIsDelete(String isDelete) { |
| | | this.isDelete = isDelete; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "TDriverFacialFail{" + |
| | | "id=" + id + |
| | | ", driverId=" + driverId + |
| | | ", city='" + city + '\'' + |
| | | ", cityCode='" + cityCode + '\'' + |
| | | ", facialPicture='" + facialPicture + '\'' + |
| | | ", createTime='" + createTime + '\'' + |
| | | ", isDelete='" + isDelete + '\'' + |
| | | '}'; |
| | | } |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | | return this.id; |
| | | } |
| | | } |
| | |
| | | package com.stylefeng.guns.modular.system.model; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import com.baomidou.mybatisplus.activerecord.Model; |
| | | import com.baomidou.mybatisplus.annotations.TableName; |
| | |
| | | /** |
| | | * 用车时长(天) |
| | | */ |
| | | private Integer carTime; |
| | | private BigDecimal carTime; |
| | | /** |
| | | * 服务车型id |
| | | */ |
| | |
| | | this.traveltime = traveltime; |
| | | } |
| | | |
| | | public Integer getCarTime() { |
| | | public BigDecimal getCarTime() { |
| | | return carTime; |
| | | } |
| | | |
| | | public void setCarTime(Integer carTime) { |
| | | public void setCarTime(BigDecimal carTime) { |
| | | this.carTime = carTime; |
| | | } |
| | | |
| | |
| | | * 移动小号绑定关系id |
| | | */ |
| | | private String bindId; |
| | | /** |
| | | * 行程录音 |
| | | */ |
| | | private String routeRecord; |
| | | /** |
| | | * 录音时间 |
| | | */ |
| | | private Date recordTime; |
| | | |
| | | public Date getRecordTime() { |
| | | return recordTime; |
| | | } |
| | | |
| | | public void setRecordTime(Date recordTime) { |
| | | this.recordTime = recordTime; |
| | | } |
| | | public String getRouteRecord() { |
| | | return routeRecord; |
| | | } |
| | | |
| | | public void setRouteRecord(String routeRecord) { |
| | | this.routeRecord = routeRecord; |
| | | } |
| | | public Integer getOldState() { |
| | | return oldState; |
| | | } |
| | |
| | | */ |
| | | private Integer serverCarModelId; |
| | | |
| | | /** |
| | | * 行程录音 |
| | | */ |
| | | private String routeRecord; |
| | | /** |
| | | * 录音时间 |
| | | */ |
| | | private Date recordTime; |
| | | |
| | | public Date getRecordTime() { |
| | | return recordTime; |
| | | } |
| | | |
| | | public void setRecordTime(Date recordTime) { |
| | | this.recordTime = recordTime; |
| | | } |
| | | public String getRouteRecord() { |
| | | return routeRecord; |
| | | } |
| | | |
| | | public void setRouteRecord(String routeRecord) { |
| | | this.routeRecord = routeRecord; |
| | | } |
| | | |
| | | public Integer getId() { |
| | | return id; |
| | |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "TOrderPrivateCar{" + |
| | | return "TOrderTransfer{" + |
| | | "id=" + id + |
| | | ", type=" + type + |
| | | ", userId=" + userId + |
| | |
| | | * 专车车型ID 关联t_server_carmodel表 |
| | | */ |
| | | private Integer serverCarModelId; |
| | | /** |
| | | * 行程录音 |
| | | */ |
| | | private String routeRecord; |
| | | |
| | | /** |
| | | * 录音时间 |
| | | */ |
| | | private Date recordTime; |
| | | |
| | | public Date getRecordTime() { |
| | | return recordTime; |
| | | } |
| | | |
| | | public void setRecordTime(Date recordTime) { |
| | | this.recordTime = recordTime; |
| | | } |
| | | |
| | | public String getRouteRecord() { |
| | | return routeRecord; |
| | | } |
| | | |
| | | public void setRouteRecord(String routeRecord) { |
| | | this.routeRecord = routeRecord; |
| | | } |
| | | |
| | | public Integer getId() { |
| | | return id; |
| | |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "TOrderPrivateCar{" + |
| | | return "TOrderTransfer{" + |
| | | "id=" + id + |
| | | ", type=" + type + |
| | | ", userId=" + userId + |
New file |
| | |
| | | package com.stylefeng.guns.modular.system.service; |
| | | |
| | | import com.baomidou.mybatisplus.service.IService; |
| | | import com.stylefeng.guns.modular.system.model.TDriverFacialFail; |
| | | |
| | | /** |
| | | * <p> |
| | | * 人脸识别失败记录表 服务类 |
| | | * </p> |
| | | * |
| | | * @author 吕雪 |
| | | * @since 2020-06-05 |
| | | */ |
| | | public interface ITDriverFacialFailService extends IService<TDriverFacialFail> { |
| | | |
| | | } |
| | |
| | | package com.stylefeng.guns.modular.system.service; |
| | | |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.baomidou.mybatisplus.service.IService; |
| | | import com.stylefeng.guns.modular.system.model.TOrderPrivateCar; |
| | | import com.stylefeng.guns.modular.system.model.TOrderTransfer; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | public interface ITOrderTransferService extends IService<TOrderTransfer> { |
| | | |
| | | /** |
| | | * 根据条件查询专车订单列表 |
| | | * @return |
| | | */ |
| | | List<Map<String,Object>> getTransferOrderList(@Param("page") Page<Map<String, Object>> page, |
| | | @Param("beginTime") String beginTime, |
| | | @Param("endTime") String endTime, |
| | | @Param("roleType") Integer roleType, |
| | | @Param("nowUserId") Integer nowUserId, |
| | | @Param("orderNum") String orderNum, |
| | | @Param("orderSource") Integer orderSource, |
| | | @Param("userName") String userName, |
| | | @Param("userPhone") String userPhone, |
| | | @Param("passengers") String passengers, |
| | | @Param("passengersPhone") String passengersPhone, |
| | | @Param("serverCarModelId") Integer serverCarModelId, |
| | | @Param("driver") String driver, |
| | | @Param("state") Integer state); |
| | | |
| | | /** |
| | | * 根据专车订单ID获取专车订单详情 |
| | | * @param orderId |
| | | * @return |
| | | */ |
| | | Map<String,Object> getTransferOrderDetailById(@Param("orderId") Integer orderId); |
| | | } |
New file |
| | |
| | | package com.stylefeng.guns.modular.system.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.stylefeng.guns.modular.system.dao.TDriverFacialFailMapper; |
| | | import com.stylefeng.guns.modular.system.model.TDriverFacialFail; |
| | | import com.stylefeng.guns.modular.system.service.ITDriverFacialFailService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * <p> |
| | | * 人脸识别失败记录表 服务实现类 |
| | | * </p> |
| | | * |
| | | * @author 吕雪 |
| | | * @since 2020-06-05 |
| | | */ |
| | | @Service |
| | | public class TDriverFacialFailServiceImpl extends ServiceImpl<TDriverFacialFailMapper, TDriverFacialFail> implements ITDriverFacialFailService { |
| | | |
| | | } |
| | |
| | | package com.stylefeng.guns.modular.system.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.stylefeng.guns.modular.system.dao.TOrderTransferMapper; |
| | | import com.stylefeng.guns.modular.system.model.TOrderTransfer; |
| | | import com.stylefeng.guns.modular.system.service.ITOrderTransferService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | @Service |
| | | public class TOrderTransferServiceImpl extends ServiceImpl<TOrderTransferMapper, TOrderTransfer> implements ITOrderTransferService { |
| | | @Override |
| | | public List<Map<String, Object>> getTransferOrderList(Page<Map<String, Object>> page, String beginTime, String endTime, Integer roleType, Integer nowUserId, String orderNum, Integer orderSource, String userName, String userPhone, String passengers, String passengersPhone, Integer serverCarModelId, String driver, Integer state) { |
| | | return this.baseMapper.getTransferOrderList(page, beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> getTransferOrderDetailById(Integer orderId) { |
| | | return this.baseMapper.getTransferOrderDetailById(orderId); |
| | | } |
| | | } |
| | |
| | | <#NameCon id="name" name="名称" /> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#button name="搜索" icon="fa-search" clickFun="TCharteredService.search()"/> |
| | | <#button name="重置" icon="fa-trash" clickFun="TCharteredService.resetSearch()" space="true"/> |
| | | <#button name="搜索" icon="fa-search" clickFun="TCarModel.search()"/> |
| | | <#button name="重置" icon="fa-trash" clickFun="TCarModel.resetSearch()" space="true"/> |
| | | </div> |
| | | </div> |
| | | <div class="hidden-xs" id="TCarModelTableToolbar" role="group"> |
| | | @if(shiro.hasPermission("/tCarModel/add")){ |
| | | <#button name="添加" icon="fa-plus" clickFun="TCharteredService.openAddTCarModel()"/> |
| | | <#button name="添加" icon="fa-plus" clickFun="TCarModel.openAddTCarModel()"/> |
| | | @} |
| | | @if(shiro.hasPermission("/tCarModel/update")){ |
| | | <#button name="编辑" icon="fa-edit" clickFun="TCharteredService.openTCarModelDetail()" space="true"/> |
| | | <#button name="编辑" icon="fa-edit" clickFun="TCarModel.openTCarModelDetail()" space="true"/> |
| | | @} |
| | | @if(shiro.hasPermission("/tCarModel/delete")){ |
| | | <#button name="删除" icon="fa-remove" clickFun="TCharteredService.delete()" space="true"/> |
| | | <#button name="删除" icon="fa-remove" clickFun="TCarModel.delete()" space="true"/> |
| | | @} |
| | | </div> |
| | | <#table id="TCarModelTable"/> |
New file |
| | |
| | | @layout("/common/_container.html"){ |
| | | <div class="row"> |
| | | <div class="col-sm-12"> |
| | | <div class="ibox float-e-margins"> |
| | | <div class="ibox-title"> |
| | | <h5>车辆类型管理</h5> |
| | | </div> |
| | | <div class="ibox-content"> |
| | | <div class="row row-lg"> |
| | | <div class="col-sm-12"> |
| | | <div class="row"> |
| | | <div class="col-sm-3"> |
| | | <#TimeCon id="createTime" name="添加时间" isTime="false"/> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#NameCon id="phone" name="手机号"/> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#NameCon id="name" name="名称" /> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#button name="搜索" icon="fa-search" clickFun="TDriverFacialFail.search()"/> |
| | | <#button name="重置" icon="fa-trash" clickFun="TDriverFacialFail.resetSearch()" space="true"/> |
| | | </div> |
| | | </div> |
| | | <div class="hidden-xs" id="TDriverFacialFailTableToolbar" role="group"> |
| | | @if(shiro.hasPermission("/tDriverFacialFail/deleteBatch")){ |
| | | <#button name="批量删除" icon="fa-remove" clickFun="TDriverFacialFail.deleteBatch()" space="true"/> |
| | | @} |
| | | </div> |
| | | <#table id="TDriverFacialFailTable"/> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <script src="${ctxPath}/static/modular/system/tDriverFacialFail/tDriverFacialFail.js"></script> |
| | | <script> |
| | | laydate.render({ |
| | | elem: '#createTime' |
| | | ,range: true |
| | | }); |
| | | </script> |
| | | @} |
New file |
| | |
| | | @layout("/common/_container.html"){ |
| | | <div class="ibox float-e-margins"> |
| | | <div class="ibox-content"> |
| | | <div class="form-horizontal" id="driverFacialFailInfoForm"> |
| | | <div class="row"> |
| | | <div class="col-sm-11"> |
| | | <#input id="name" name="类型名称" /> |
| | | <#select id="seat" name="座位数:"> |
| | | <option value="5">5座</option> |
| | | <option value="7">7座</option> |
| | | </#select> |
| | | <#select id="brandId" name="所属车辆品牌:" > |
| | | <option value="">选择所属车辆品牌</option> |
| | | @for(obj in brandList){ |
| | | <option value="${obj.id}">${obj.name}</option> |
| | | @} |
| | | </#select> |
| | | <div class="form-group"> |
| | | <label class="col-sm-3 control-label">备注:</label> |
| | | <div class="col-sm-9"> |
| | | <textarea type="text/plain" class="form-control" name="remark" id="remark" style="width:100%;height:150px;"></textarea> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row btn-group-m-t"> |
| | | <div class="col-sm-10 col-sm-offset-5"> |
| | | <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TDriverFacialFailInfoDlg.addSubmit()"/> |
| | | <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TDriverFacialFailInfoDlg.close()"/> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | <script src="${ctxPath}/static/modular/system/tDriverFacialFail/tDriverFacialFail_info.js"></script> |
| | | @} |
New file |
| | |
| | | @layout("/common/_container.html"){ |
| | | <div class="ibox float-e-margins"> |
| | | <div class="ibox-content"> |
| | | <div class="form-horizontal" id="driverFacialFailInfoForm"> |
| | | <input type="hidden" id="id" name="id" value="${item.id}"> |
| | | <div class="row"> |
| | | <div class="col-sm-11"> |
| | | <#input id="name" name="类型名称" value="${item.name}"/> |
| | | <#select id="seat" name="座位数:"> |
| | | <option value="5" ${5 == item.seat ? 'selected=selected' : ''}>5座</option> |
| | | <option value="7" ${7 == item.seat ? 'selected=selected' : ''}>7座</option> |
| | | </#select> |
| | | <#select id="brandId" name="所属车辆品牌:" > |
| | | <option value="">选择所属车辆品牌</option> |
| | | @for(obj in brandList){ |
| | | <option value="${obj.id}" ${obj.id == item.brandId ? 'selected=selected' : ''}>${obj.name}</option> |
| | | @} |
| | | </#select> |
| | | <div class="form-group"> |
| | | <label class="col-sm-3 control-label">备注:</label> |
| | | <div class="col-sm-9"> |
| | | <textarea type="text/plain" class="form-control" name="remark" id="remark" style="width:100%;height:150px;">${item.remark}</textarea> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row btn-group-m-t"> |
| | | <div class="col-sm-10 col-sm-offset-5"> |
| | | <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TDriverFacialFailInfoDlg.editSubmit()"/> |
| | | <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TDriverFacialFailInfoDlg.close()"/> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | <script src="${ctxPath}/static/modular/system/tDriverFacialFail/tDriverFacialFail_info.js"></script> |
| | | @} |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row" style="margin-top: 30px;"> |
| | | <div class="col-sm-1"> |
| | | <h2 class="h3Class" style="font-weight: 700;">行程录音</h2> |
| | | </div> |
| | | <div class="col-sm-10"> |
| | | <audio id="audio" src="http://www.w3capi.com/upload/audio/audio_example.mp3" controls muted data-enabled="false"> |
| | | <!-- <source src="${item.routeRecord}" type="audio/mpeg">--> |
| | | </audio> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | </div> |
| | |
| | | </#SelectCon> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#button name="搜索" icon="fa-search" clickFun="TOrderPrivateCar.search()"/> |
| | | <#button name="重置" icon="fa-trash" clickFun="TOrderPrivateCar.resetSearch()" space="true"/> |
| | | <#button name="搜索" icon="fa-search" clickFun="TOrderTransfer.search()"/> |
| | | <#button name="重置" icon="fa-trash" clickFun="TOrderTransfer.resetSearch()" space="true"/> |
| | | </div> |
| | | </div> |
| | | <div class="hidden-xs" id="TOrderPrivateCarTableToolbar" role="group"> |
| | | @if(shiro.hasPermission("/tOrderPrivateCar/orderDetail")){ |
| | | <#button name="订单详情" icon="fa-plus" clickFun="TOrderPrivateCar.orderDetail()"/> |
| | | <#button name="订单详情" icon="fa-plus" clickFun="TOrderTransfer.orderDetail()"/> |
| | | @} |
| | | @if(shiro.hasPermission("/tOrderPrivateCar/cancelOrder")){ |
| | | <#button name="取消订单" icon="fa-edit" clickFun="TOrderPrivateCar.cancelOrder()" space="true"/> |
| | | <#button name="取消订单" icon="fa-edit" clickFun="TOrderTransfer.cancelOrder()" space="true"/> |
| | | @} |
| | | @if(shiro.hasPermission("/tOrderPrivateCar/orderTrack")){ |
| | | <#button name="订单轨迹" icon="fa-edit" clickFun="TOrderPrivateCar.trajectory()" space="true"/> |
| | | <#button name="订单轨迹" icon="fa-edit" clickFun="TOrderTransfer.trajectory()" space="true"/> |
| | | @} |
| | | @if(shiro.hasPermission("/tOrderPrivateCar/deleteOrder")){ |
| | | <#button name="删除记录" icon="fa-remove" clickFun="TOrderPrivateCar.deleteOrder()" space="true"/> |
| | | <#button name="删除记录" icon="fa-remove" clickFun="TOrderTransfer.deleteOrder()" space="true"/> |
| | | @} |
| | | </div> |
| | | <#table id="TOrderPrivateCarTable"/> |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row" style="margin-top: 30px;"> |
| | | <div class="col-sm-1"> |
| | | <h2 class="h3Class" style="font-weight: 700;">行程录音</h2> |
| | | </div> |
| | | <div class="col-sm-10"> |
| | | <audio id="audio" src="http://www.w3capi.com/upload/audio/audio_example.mp3" controls muted data-enabled="false"> |
| | | <!-- <source src="${item.routeRecord}" type="audio/mpeg">--> |
| | | </audio> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
New file |
| | |
| | | @layout("/common/_container.html"){ |
| | | <div class="row"> |
| | | <div class="col-sm-12"> |
| | | <div class="ibox float-e-margins"> |
| | | <div class="ibox-title"> |
| | | <h5>接送机订单管理</h5> |
| | | </div> |
| | | <div class="ibox-content"> |
| | | <div class="row row-lg"> |
| | | <div class="col-sm-12"> |
| | | <div class="row"> |
| | | <div class="col-sm-3"> |
| | | <#TimeCon id="insertTime" name="订单时间" isTime="false"/> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#NameCon id="orderNum" name="订单编号" /> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#SelectCon id="orderSource" name="订单来源" > |
| | | <option value="">全部</option> |
| | | <option value="1">APP下单</option> |
| | | <option value="2">扫码下单</option> |
| | | <option value="3">小程序下单</option> |
| | | <option value="4">司机下单</option> |
| | | <option value="5">调度下单</option> |
| | | </#SelectCon> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#NameCon id="userName" name="下单用户昵称" /> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#NameCon id="userPhone" name="下单用户手机" /> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#NameCon id="passengers" name="乘车用户姓名" /> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#NameCon id="passengersPhone" name="乘车用户手机" /> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#SelectCon id="serverCarModelId" name="车型" > |
| | | <option value="">全部</option> |
| | | @for(obj in carmodelList){ |
| | | <option value="${obj.id}">${obj.name}</option> |
| | | @} |
| | | </#SelectCon> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#NameCon id="driver" name="接单司机" /> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#SelectCon id="state" name="状态" > |
| | | <option value="">全部</option> |
| | | <option value="1">待接单</option> |
| | | <option value="2">待出发</option> |
| | | <option value="3">待到达预约地点</option> |
| | | <option value="4">待乘客上车</option> |
| | | <option value="5">服务中</option> |
| | | <option value="6">完成服务</option> |
| | | <option value="7">待支付</option> |
| | | <option value="8">待评价</option> |
| | | <option value="9">已完成</option> |
| | | <option value="10">已取消</option> |
| | | <option value="11">改派中</option> |
| | | <option value="12">取消待支付</option> |
| | | </#SelectCon> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#button name="搜索" icon="fa-search" clickFun="TOrderTransfer.search()"/> |
| | | <#button name="重置" icon="fa-trash" clickFun="TOrderTransfer.resetSearch()" space="true"/> |
| | | </div> |
| | | </div> |
| | | <div class="hidden-xs" id="TOrderTransferTableToolbar" role="group"> |
| | | @if(shiro.hasPermission("/tOrderTransfer/orderDetail")){ |
| | | <#button name="订单详情" icon="fa-plus" clickFun="TOrderTransfer.orderDetail()"/> |
| | | @} |
| | | @if(shiro.hasPermission("/tOrderTransfer/cancelOrder")){ |
| | | <#button name="取消订单" icon="fa-edit" clickFun="TOrderTransfer.cancelOrder()" space="true"/> |
| | | @} |
| | | @if(shiro.hasPermission("/tOrderTransfer/orderTrack")){ |
| | | <#button name="订单轨迹" icon="fa-edit" clickFun="TOrderTransfer.trajectory()" space="true"/> |
| | | @} |
| | | @if(shiro.hasPermission("/tOrderTransfer/deleteOrder")){ |
| | | <#button name="删除记录" icon="fa-remove" clickFun="TOrderTransfer.deleteOrder()" space="true"/> |
| | | @} |
| | | </div> |
| | | <#table id="TOrderTransferTable"/> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <script src="${ctxPath}/static/modular/system/tOrderTransfer/tOrderTransfer.js"></script> |
| | | <script> |
| | | laydate.render({ |
| | | elem: '#insertTime' |
| | | ,range: true |
| | | }); |
| | | </script> |
| | | @} |
New file |
| | |
| | | @layout("/common/_container.html"){ |
| | | <div class="ibox float-e-margins"> |
| | | <div class="ibox-content"> |
| | | <div class="form-horizontal"> |
| | | |
| | | <div class="row"> |
| | | <div class="col-sm-6 b-r"> |
| | | <#input id="id" name="主键id" underline="true"/> |
| | | <#input id="type" name="类型(1=普通订单,2=摆渡订单)" underline="true"/> |
| | | <#input id="userId" name="用户id" underline="true"/> |
| | | <#input id="driverId" name="接单司机ID" underline="true"/> |
| | | <#input id="carId" name="车辆id" underline="true"/> |
| | | <#input id="orderNum" name="订单号" underline="true"/> |
| | | <#input id="placementLon" name="下单地点经度" underline="true"/> |
| | | <#input id="placementLat" name="下单地点纬度" underline="true"/> |
| | | <#input id="placementAddress" name="下单地点" underline="true"/> |
| | | <#input id="startLon" name="出发地经度值" underline="true"/> |
| | | <#input id="startLat" name="出发地纬度值" underline="true"/> |
| | | <#input id="endLon" name="目的地经度" underline="true"/> |
| | | <#input id="startAddress" name="出发地地点" underline="true"/> |
| | | <#input id="endLat" name="目的地纬度" underline="true"/> |
| | | <#input id="endAddress" name="目的地地点" underline="true"/> |
| | | <#input id="boardingLon" name="上车点经度" underline="true"/> |
| | | <#input id="boardingLat" name="上车点纬度" underline="true"/> |
| | | <#input id="boardingAddress" name="上车点" underline="true"/> |
| | | <#input id="boardingTime" name="上车时间" underline="true"/> |
| | | <#input id="getoffLon" name="下车点经度" underline="true"/> |
| | | <#input id="getoffLat" name="下车点纬度" underline="true"/> |
| | | <#input id="getoffAddress" name="下车地点" underline="true"/> |
| | | <#input id="getoffTime" name="下车时间" underline="true"/> |
| | | <#input id="mileage" name="行驶里程数(米)" underline="true"/> |
| | | <#input id="payManner" name="支付方式(1=未来平台支付,2=其他方式支付)" underline="true"/> |
| | | <#input id="payType" name="支付方式(1=微信,2=支付宝,3=其他)" underline="true"/> |
| | | <#input id="orderMoney" name="订单金额" underline="true"/> |
| | | <#input id="startMoney" name="起步价" underline="true"/> |
| | | <#input id="mileageMoney" name="里程费" underline="true"/> |
| | | <#input id="durationMoney" name="时长费" underline="true"/> |
| | | <#input id="longDistanceMoney" name="远途费" underline="true"/> |
| | | <#input id="parkMoney" name="停车费"/> |
| | | </div> |
| | | |
| | | <div class="col-sm-6"> |
| | | <#input id="roadTollMoney" name="过路费" underline="true"/> |
| | | <#input id="redPacketMoney" name="红包抵扣金额" underline="true"/> |
| | | <#input id="couponMoney" name="优惠券抵扣金额" underline="true"/> |
| | | <#input id="redPacketId" name="红包记录id" underline="true"/> |
| | | <#input id="couponId" name="优惠券id" underline="true"/> |
| | | <#input id="discount" name="折扣" underline="true"/> |
| | | <#input id="discountMoney" name="折扣优惠金额" underline="true"/> |
| | | <#input id="activityId" name="折扣活动id" underline="true"/> |
| | | <#input id="companyId" name="公司id" underline="true"/> |
| | | <#input id="payMoney" name="支付金额" underline="true"/> |
| | | <#input id="substitute" name="是否是代下单(0:否,1:是)" underline="true"/> |
| | | <#input id="passengers" name="乘车人" underline="true"/> |
| | | <#input id="passengersPhone" name="乘车人电话" underline="true"/> |
| | | <#input id="state" name="状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)" underline="true"/> |
| | | <#input id="insertTime" name="下单时间" underline="true"/> |
| | | <#input id="travelTime" name="出行时间" underline="true"/> |
| | | <#input id="snatchOrderTime" name="抢单时间" underline="true"/> |
| | | <#input id="setOutTime" name="司机点出发时间" underline="true"/> |
| | | <#input id="arriveTime" name="司机到达预约地点时间" underline="true"/> |
| | | <#input id="startServiceTime" name="开始服务时间" underline="true"/> |
| | | <#input id="endServiceTime" name="结束服务时间" underline="true"/> |
| | | <#input id="orderType" name="订单类型(1=普通,2=预约)" underline="true"/> |
| | | <#input id="orderSource" name="下单方式(1:APP下单,2:扫码下单,3:小程序下单,4:司机下单,5:调度下单)" underline="true"/> |
| | | <#input id="invoiceId" name="发票id" underline="true"/> |
| | | <#input id="isReassign" name="是否是改派单(1=否,2=是)" underline="true"/> |
| | | <#input id="reassignNotice" name="改派通知(0=没有改派,1=改派中,2=已改派)" underline="true"/> |
| | | <#input id="trackId" name="高德猎鹰上的轨迹id" underline="true"/> |
| | | <#input id="isDelete" name="是否删除 1=否 2=是" underline="true"/> |
| | | <#input id="oldState" name="状态(改派前订单状态)" underline="true"/> |
| | | <#input id="telX" name="移动小号" underline="true"/> |
| | | <#input id="bindId" name="移动小号绑定关系id" underline="true"/> |
| | | <#input id="serverCarModelId" name="接送机车型ID 关联t_server_carmodel表" underline="true"/> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row btn-group-m-t"> |
| | | <div class="col-sm-10"> |
| | | <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TOrderTransferInfoDlg.addSubmit()"/> |
| | | <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TOrderTransferInfoDlg.close()"/> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | <script src="${ctxPath}/static/modular/system/tOrderTransfer/tOrderTransfer_info.js"></script> |
| | | @} |
New file |
| | |
| | | @layout("/common/_container.html"){ |
| | | <style type="text/css"> |
| | | html, body, #container { |
| | | height: 100%; |
| | | width: 100%; |
| | | } |
| | | |
| | | .input-card .btn{ |
| | | margin-right: 1.2rem; |
| | | width: 9rem; |
| | | } |
| | | |
| | | .input-card .btn:last-child{ |
| | | margin-right: 0; |
| | | } |
| | | </style> |
| | | <div class="ibox float-e-margins"> |
| | | <div class="ibox-content"> |
| | | <div class="form-horizontal"> |
| | | <input type="hidden" id="id" name="id" value="${item.id}"> |
| | | <div class="row" style="margin-top: 30px;"> |
| | | <div class="col-sm-4"> |
| | | <h2 class="h3Class" style="font-weight: 700;">订单详情</h2> |
| | | </div> |
| | | </div> |
| | | <div class="row"> |
| | | <div class="col-sm-6 b-r"> |
| | | <#label id="insertTimeStr" name="下单时间" value="${item.insertTimeStr}"/> |
| | | <#label id="orderSourceStr" name="订单来源" value="${item.orderSourceStr}"/> |
| | | <#label id="userName" name="下单用户昵称" value="${item.userName}"/> |
| | | <#label id="passengers" name="乘车用户昵称" value="${item.passengers}"/> |
| | | <#label id="placementAddress" name="起点" value="${item.startAddress}"/> |
| | | <#label id="serverCarModel" name="选择车型" value="${item.serverCarModel}"/> |
| | | <#label id="car" name="接单车辆" value="${item.car}"/> |
| | | <#label id="boardingAddress" name="上车地点" value="${item.boardingAddress}"/> |
| | | <#label id="getoffAddress" name="下车地点" value="${item.getoffAddress}"/> |
| | | </div> |
| | | |
| | | <div class="col-sm-6"> |
| | | <#label id="orderNum" name="订单编号" value="${item.orderNum}"/> |
| | | <#label id="travelTimeStr" name="乘车时间" value="${item.travelTimeStr}"/> |
| | | <#label id="userPhone" name="下单用户手机号" value="${item.userPhone}"/> |
| | | <#label id="passengersPhone" name="乘车用户手机号" value="${item.passengersPhone}"/> |
| | | <#label id="endAddress" name="终点" value="${item.endAddress}"/> |
| | | <#label id="driver" name="接单司机" value="${item.driver}"/> |
| | | <#label id="companyName" name="车辆所属机构" value="${item.companyName}"/> |
| | | <#label id="boardingTimeStr" name="上车时间" value="${item.boardingTimeStr}"/> |
| | | <#label id="getoffTimeStr" name="下车时间" value="${item.getoffTimeStr}"/> |
| | | </div> |
| | | </div> |
| | | <div class="row" style="margin-top: 30px;"> |
| | | <div class="col-sm-4"> |
| | | <h2 class="h3Class" style="font-weight: 700;">费用明细</h2> |
| | | </div> |
| | | </div> |
| | | <div class="row"> |
| | | @if(isNotEmpty(item.orderMoney) && item.orderMoney > 0){ |
| | | <div class="col-sm-6 b-r"> |
| | | <#label id="orderMoney" name="订单总价" value="${item.orderMoney}元"/> |
| | | <#label id="travelMoney" name="行程费" value="${item.travelMoney}元"/> |
| | | <#label id="parkMoney" name="停车费" value="${item.parkMoney}元"/> |
| | | <#label id="roadTollMoney" name="过路费" value="${item.roadTollMoney}元"/> |
| | | <#label id="tipMoney" name="小费" value="${item.tipMoney}元"/> |
| | | |
| | | @if(isNotEmpty(item.payMoney)){ |
| | | <#label id="payMoney" name="实际支付费用" value="${item.payMoney}元"/> |
| | | @}else{ |
| | | <#label id="payMoney" name="实际支付费用" value="0.00元"/> |
| | | @} |
| | | |
| | | <#label id="payTypeStr" name="支付方式" value="${item.payTypeStr}"/> |
| | | <#label id="couponMoney" name="优惠券抵扣费用" value="${item.couponMoney}元"/> |
| | | <#label id="redPacketMoney" name="红包抵扣金额" value="${item.redPacketMoney}元"/> |
| | | </div> |
| | | <div class="col-sm-6"> |
| | | <#label id="platIncome" name="平台收益" value="${item.platIncome}元"/> |
| | | <#label id="companyIncome" name="分公司收益" value="${item.companyIncome}元"/> |
| | | <#label id="franchiseeIncome" name="加盟商收益" value="${item.franchiseeIncome}元"/> |
| | | <#label id="driverIncome" name="司机收益" value="${item.driverIncome}元"/> |
| | | </div> |
| | | @}else{ |
| | | <h4 style="margin-left: 10%">暂无费用明细</h4> |
| | | @} |
| | | </div> |
| | | <div class="row" style="margin-top: 30px;"> |
| | | <div class="col-sm-4"> |
| | | <h2 class="h3Class" style="font-weight: 700;">线路轨迹</h2> |
| | | </div> |
| | | </div> |
| | | <div class="row"> |
| | | <div class="col-sm-10"> |
| | | <div class="form-horizontal" id="container" style="margin-left: 50px;width: 100%; height: 500px;"></div> |
| | | <div class="input-card" style="margin-left: 50px;"> |
| | | <h4>轨迹回放控制</h4> |
| | | <div class="input-item"> |
| | | <input type="button" class="btn" value="开始动画" id="start" onclick="startAnimation()"/> |
| | | <input type="button" class="btn" value="暂停动画" id="pause" onclick="pauseAnimation()"/> |
| | | <input type="button" class="btn" value="继续动画" id="resume" onclick="resumeAnimation()"/> |
| | | <input type="button" class="btn" value="停止动画" id="stop" onclick="stopAnimation()"/> |
| | | </div> |
| | | <div class="input-item"> |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row" style="margin-top: 30px;"> |
| | | <div class="col-sm-1"> |
| | | <h2 class="h3Class" style="font-weight: 700;">行程录音</h2> |
| | | </div> |
| | | <div class="col-sm-10"> |
| | | <audio id="audio" src="http://www.w3capi.com/upload/audio/audio_example.mp3" controls muted data-enabled="false"> |
| | | <!-- <source src="${item.routeRecord}" type="audio/mpeg">--> |
| | | </audio> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script> |
| | | <script src="https://webapi.amap.com/maps?v=1.4.8&key=e17d799b2506d05faf7f88320a266803"></script> |
| | | <script src="https://cache.amap.com/lbs/static/addToolbar.js"></script> |
| | | <script src="${ctxPath}/static/modular/system/tOrderTransfer/tOrderTransfer_info.js"></script> |
| | | <script> |
| | | $(function (){ |
| | | var myAudio = document.getElementById('audio'); |
| | | console.log(myAudio.dataset.enabled); |
| | | if (myAudio.dataset.enabled === 'false') { |
| | | console.log('audio is disabled'); |
| | | myAudio.pause(); |
| | | } |
| | | }) |
| | | </script> |
| | | @} |
New file |
| | |
| | | @layout("/common/_container.html"){ |
| | | <style type="text/css"> |
| | | html, body, #container { |
| | | height: 100%; |
| | | width: 100%; |
| | | } |
| | | |
| | | .input-card .btn{ |
| | | margin-right: 1.2rem; |
| | | width: 9rem; |
| | | } |
| | | |
| | | .input-card .btn:last-child{ |
| | | margin-right: 0; |
| | | } |
| | | </style> |
| | | <div class="ibox float-e-margins"> |
| | | <div class="ibox-content"> |
| | | <div class="form-horizontal"> |
| | | <input type="hidden" id="id" name="id" value="${tOrderTransferId}"> |
| | | <div class="row" style="margin-top: 30px;"> |
| | | <div class="col-sm-4"> |
| | | <h2 class="h3Class" style="font-weight: 700;">线路轨迹</h2> |
| | | </div> |
| | | </div> |
| | | <div class="row" style="margin-top: 30px;"> |
| | | <div class="col-sm-10"> |
| | | <div class="form-horizontal" id="container" style="margin-left: 50px;width: 100%; height: 500px;"></div> |
| | | <div class="input-card" style="margin-left: 50px;"> |
| | | <h4>轨迹回放控制</h4> |
| | | <div class="input-item"> |
| | | <input type="button" class="btn" value="开始动画" id="start" onclick="startAnimation()"/> |
| | | <input type="button" class="btn" value="暂停动画" id="pause" onclick="pauseAnimation()"/> |
| | | <input type="button" class="btn" value="继续动画" id="resume" onclick="resumeAnimation()"/> |
| | | <input type="button" class="btn" value="停止动画" id="stop" onclick="stopAnimation()"/> |
| | | </div> |
| | | <div class="input-item"> |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | <script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script> |
| | | <script src="https://webapi.amap.com/maps?v=1.4.8&key=e17d799b2506d05faf7f88320a266803"></script> |
| | | <script src="https://cache.amap.com/lbs/static/addToolbar.js"></script> |
| | | <script src="${ctxPath}/static/modular/system/tOrderTransfer/tOrderTransfer_info.js"></script> |
| | | @} |
New file |
| | |
| | | /** |
| | | * 接送机订单管理初始化 |
| | | */ |
| | | var TOrderTransfer = { |
| | | id: "TOrderTransferTable", //表格id |
| | | seItem: null, //选中的条目 |
| | | table: null, |
| | | layerIndex: -1 |
| | | }; |
| | | |
| | | /** |
| | | * 初始化表格的列 |
| | | */ |
| | | TOrderTransfer.initColumn = function () { |
| | | return [ |
| | | {field: 'selectItem', radio: true}, |
| | | {title: '主键id', field: 'id', visible: false, align: 'center', valign: 'middle'}, |
| | | {title: '下单时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle',width:'8%', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.insertTime != '' && row.insertTime != null) { |
| | | var time = row.insertTime.replace(" ",'<br>'); |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.insertTime + '" onfocus="TUser.tooltip()">' + time + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '订单编号', field: 'orderNum', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.orderNum != '' && row.orderNum != null) { |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.orderNum + '" onfocus="TUser.tooltip()">' + row.orderNum + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '订单来源', field: 'orderSource', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.orderSource != '' && row.orderSource != null) { |
| | | if (row.orderSource == 1){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="APP下单" onfocus="TUser.tooltip()">APP下单</p>'] |
| | | } else if (row.orderSource == 2){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="扫码下单" onfocus="TUser.tooltip()">扫码下单</p>'] |
| | | } else if (row.orderSource == 3){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="小程序下单" onfocus="TUser.tooltip()">小程序下单</p>'] |
| | | } else if (row.orderSource == 4){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="司机下单" onfocus="TUser.tooltip()">司机下单</p>'] |
| | | } else if (row.orderSource == 5){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="调度下单" onfocus="TUser.tooltip()">调度下单</p>'] |
| | | } |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '乘车时间', field: 'travelTime', visible: true, align: 'center', valign: 'middle',width:'10%', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.travelTime != '' && row.travelTime != null) { |
| | | var time = row.travelTime.replace(" ",'<br>'); |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.travelTime + '" onfocus="TUser.tooltip()">' + time + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '用户id', field: 'userId', visible: false, align: 'center', valign: 'middle'}, |
| | | {title: '下单用<br/>户昵称', field: 'userName', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.userName != '' && row.userName != null) { |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.userName + '" onfocus="TUser.tooltip()">' + row.userName + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '下单用<br/>户手机', field: 'userPhone', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.userPhone != '' && row.userPhone != null) { |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.userPhone + '" onfocus="TUser.tooltip()">' + row.userPhone + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '乘车用<br/>户姓名', field: 'passengers', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.passengers != '' && row.passengers != null) { |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.passengers + '" onfocus="TUser.tooltip()">' + row.passengers + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '乘车用<br/>户手机', field: 'passengersPhone', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.passengersPhone != '' && row.passengersPhone != null) { |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.passengersPhone + '" onfocus="TUser.tooltip()">' + row.passengersPhone + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '起点', field: 'startAddress', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.startAddress != '' && row.startAddress != null) { |
| | | var str = row.startAddress; |
| | | var str1 = ""; |
| | | var arr = ""; |
| | | for(var i=0,len=str.length/15;i<len;i++) { |
| | | str1 = str.substr(0,15); |
| | | str = str.replace(str1,''); |
| | | arr += str1 + "<br>"; |
| | | } |
| | | arr = arr.substring(0,arr.length-4); |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.startAddress + '" onfocus="TUser.tooltip()">' + arr + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '终点', field: 'endAddress', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.endAddress != '' && row.endAddress != null) { |
| | | var str = row.endAddress; |
| | | var str1 = ""; |
| | | var arr = ""; |
| | | for(var i=0,len=str.length/15;i<len;i++) { |
| | | str1 = str.substr(0,15); |
| | | str = str.replace(str1,''); |
| | | arr += str1 + "<br>"; |
| | | } |
| | | arr = arr.substring(0,arr.length-4); |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.endAddress + '" onfocus="TUser.tooltip()">' + arr + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '选择车型', field: 'serverCarModel', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.serverCarModel != '' && row.serverCarModel != null) { |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.serverCarModel + '" onfocus="TUser.tooltip()">' + row.serverCarModel + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '接单司机', field: 'driver', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.driver != '' && row.driver != null) { |
| | | var driverName1 = row.driver.replace("-","<br>"); |
| | | var driverName2 = row.driver.replace("-"," "); |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + driverName2 + '" onfocus="TUser.tooltip()">' + driverName1 + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '接单车辆', field: 'car', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.car != '' && row.car != null) { |
| | | var car1 = row.car.replace("-","<br>"); |
| | | var car2 = row.car.replace("-"," "); |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + car2 + '" onfocus="TUser.tooltip()">' + car1 + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '订单金额', field: 'orderMoney', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.orderMoney != '' && row.orderMoney != null) { |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.orderMoney + '" onfocus="TUser.tooltip()">' + row.orderMoney + '</p>'] |
| | | } |
| | | return btn; |
| | | } |
| | | }, |
| | | {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | var btn = ""; |
| | | if(row.state != '' && row.state != null) { |
| | | if (row.state == 1){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="待接单" onfocus="TUser.tooltip()">待接单</p>'] |
| | | } else if (row.state == 2){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="待出发" onfocus="TUser.tooltip()">待出发</p>'] |
| | | } else if (row.state == 3){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="待到达预约地点" onfocus="TUser.tooltip()">待到达预约地点</p>'] |
| | | } else if (row.state == 4){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="待乘客上车" onfocus="TUser.tooltip()">待乘客上车</p>'] |
| | | } else if (row.state == 5){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="服务中" onfocus="TUser.tooltip()">服务中</p>'] |
| | | } else if (row.state == 6){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="完成服务" onfocus="TUser.tooltip()">完成服务</p>'] |
| | | } else if (row.state == 7){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="待支付" onfocus="TUser.tooltip()">待支付</p>'] |
| | | } else if (row.state == 8){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="待评价" onfocus="TUser.tooltip()">待评价</p>'] |
| | | } else if (row.state == 9){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="已完成" onfocus="TUser.tooltip()">已完成</p>'] |
| | | } else if (row.state == 10){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="已取消" onfocus="TUser.tooltip()">已取消</p>'] |
| | | } else if (row.state == 11){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="改派中" onfocus="TUser.tooltip()">改派中</p>'] |
| | | } else if (row.state == 12){ |
| | | btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="取消待支付" onfocus="TUser.tooltip()">取消待支付</p>'] |
| | | } |
| | | } |
| | | return btn; |
| | | } |
| | | } |
| | | ]; |
| | | }; |
| | | |
| | | /** |
| | | * 检查是否选中 |
| | | */ |
| | | TOrderTransfer.check = function () { |
| | | var selected = $('#' + this.id).bootstrapTable('getSelections'); |
| | | if(selected.length == 0){ |
| | | Feng.info("请先选中表格中的某一记录!"); |
| | | return false; |
| | | }else{ |
| | | TOrderTransfer.seItem = selected[0]; |
| | | return true; |
| | | } |
| | | }; |
| | | |
| | | /** |
| | | * 打开查看接送机订单详情 |
| | | */ |
| | | TOrderTransfer.orderDetail = function () { |
| | | if (this.check()) { |
| | | var index = layer.open({ |
| | | type: 2, |
| | | title: '接送机订单详情', |
| | | area: ['100%', '100%'], //宽高 |
| | | fix: false, //不固定 |
| | | maxmin: true, |
| | | content: Feng.ctxPath + '/tOrderTransfer/tOrderTransfer_orderDetail/' + TOrderTransfer.seItem.id |
| | | }); |
| | | this.layerIndex = index; |
| | | } |
| | | }; |
| | | |
| | | /** |
| | | * 取消订单 |
| | | */ |
| | | TOrderTransfer.cancelOrder = function(){ |
| | | if (this.check()) { |
| | | var nickname = TOrderTransfer.seItem.orderNum; |
| | | if (nickname == "" || nickname == null || nickname == undefined) { |
| | | nickname = "该订单"; |
| | | } else { |
| | | nickname = "【" + nickname + "】"; |
| | | } |
| | | if (TOrderTransfer.seItem.state == 7 || TOrderTransfer.seItem.state == 8 || TOrderTransfer.seItem.state == 9 || TOrderTransfer.seItem.state == 10 ) { |
| | | swal("取消失败", "【待评价】【已完成】【已取消】状态下不能执行此操作", "warning"); |
| | | return; |
| | | } |
| | | swal({ |
| | | title: "您是否确认取消订单" + nickname + "?", |
| | | text: "请谨慎操作,取消后数据无法恢复!", |
| | | type: "warning", |
| | | showCancelButton: true, |
| | | confirmButtonColor: "#DD6B55", |
| | | confirmButtonText: "取消订单", |
| | | closeOnConfirm: false |
| | | }, function () { |
| | | var ajax = new $ax(Feng.ctxPath + "/tOrderTransfer/cancel", function (data) { |
| | | layer.msg("加载中...",{ |
| | | icon:16, |
| | | time:-1 |
| | | }); |
| | | swal("取消订单成功", "您已经成功取消了" + nickname + "。", "success"); |
| | | TOrderTransfer.table.refresh(); |
| | | layer.closeAll() |
| | | }, function (data) { |
| | | swal("取消订单失败", data.responseJSON.message + "!", "warning"); |
| | | layer.closeAll() |
| | | }); |
| | | ajax.set("tOrderTransferId", TOrderTransfer.seItem.id); |
| | | ajax.start(); |
| | | }); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 订单轨迹 |
| | | */ |
| | | TOrderTransfer.trajectory = function(){ |
| | | if (this.check()) { |
| | | var index = layer.open({ |
| | | type: 2, |
| | | title: '接送机订单轨迹', |
| | | area: ['100%', '100%'], //宽高 |
| | | fix: false, //不固定 |
| | | maxmin: true, |
| | | content: Feng.ctxPath + '/tOrderTransfer/tOrderTransfer_trajectory/' + TOrderTransfer.seItem.id |
| | | }); |
| | | this.layerIndex = index; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 删除接送机订单 |
| | | */ |
| | | TOrderTransfer.deleteOrder = function () { |
| | | if (this.check()) { |
| | | var orderNum = TOrderTransfer.seItem.orderNum; |
| | | if (orderNum == "" || orderNum == null || orderNum == undefined) { |
| | | orderNum = "该订单"; |
| | | } else { |
| | | orderNum = "【" + orderNum + "】"; |
| | | } |
| | | if (TOrderTransfer.seItem.state != 10) { |
| | | swal("删除失败", "【已取消】状态下才能执行此操作", "warning"); |
| | | return; |
| | | } |
| | | swal({ |
| | | title: "您是否确认删除" + orderNum + "?", |
| | | text: "请谨慎操作,删除后数据无法恢复!", |
| | | type: "warning", |
| | | showCancelButton: true, |
| | | confirmButtonColor: "#DD6B55", |
| | | confirmButtonText: "删除", |
| | | closeOnConfirm: false |
| | | }, function () { |
| | | var ajax = new $ax(Feng.ctxPath + "/tOrderTransfer/delete", function (data) { |
| | | swal("删除成功", "您已经删除了" + orderNum + "。", "success"); |
| | | TOrderTransfer.table.refresh(); |
| | | }, function (data) { |
| | | swal("删除失败", data.responseJSON.message + "!", "warning"); |
| | | }); |
| | | ajax.set("tOrderTransferId", TOrderTransfer.seItem.id); |
| | | ajax.start(); |
| | | }); |
| | | } |
| | | }; |
| | | |
| | | /** |
| | | * 查询接送机订单列表 |
| | | */ |
| | | TOrderTransfer.search = function () { |
| | | var queryData = {}; |
| | | queryData['insertTime'] = $("#insertTime").val(); |
| | | queryData['orderNum'] = $("#orderNum").val(); |
| | | queryData['orderSource'] = $("#orderSource").val(); |
| | | queryData['userName'] = $("#userName").val(); |
| | | queryData['userPhone'] = $("#userPhone").val(); |
| | | queryData['passengers'] = $("#passengers").val(); |
| | | queryData['passengersPhone'] = $("#passengersPhone").val(); |
| | | queryData['serverCarModelId'] = $("#serverCarModelId").val(); |
| | | queryData['driver'] = $("#driver").val(); |
| | | queryData['state'] = $("#state").val(); |
| | | TOrderTransfer.table.refresh({query: queryData}); |
| | | }; |
| | | |
| | | TOrderTransfer.resetSearch = function () { |
| | | $("#insertTime").val(""); |
| | | $("#orderNum").val(""); |
| | | $("#orderSource").val(""); |
| | | $("#userName").val(""); |
| | | $("#userPhone").val(""); |
| | | $("#passengers").val(""); |
| | | $("#passengersPhone").val(""); |
| | | $("#serverCarModelId").val(""); |
| | | $("#driver").val(""); |
| | | $("#state").val(""); |
| | | TOrderTransfer.search(); |
| | | }; |
| | | |
| | | $(function () { |
| | | var defaultColunms = TOrderTransfer.initColumn(); |
| | | var table = new BSTable(TOrderTransfer.id, "/tOrderTransfer/list", defaultColunms); |
| | | table.setPaginationType("server"); |
| | | TOrderTransfer.table = table.init(); |
| | | }); |
New file |
| | |
| | | /** |
| | | * 初始化专车订单详情对话框 |
| | | */ |
| | | var TOrderTransferInfoDlg = { |
| | | tOrderTransferInfoData : {} |
| | | }; |
| | | |
| | | /** |
| | | * 清除数据 |
| | | */ |
| | | TOrderTransferInfoDlg.clearData = function() { |
| | | this.tOrderTransferInfoData = {}; |
| | | } |
| | | |
| | | /** |
| | | * 设置对话框中的数据 |
| | | * |
| | | * @param key 数据的名称 |
| | | * @param val 数据的具体值 |
| | | */ |
| | | TOrderTransferInfoDlg.set = function(key, val) { |
| | | this.tOrderTransferInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * 设置对话框中的数据 |
| | | * |
| | | * @param key 数据的名称 |
| | | * @param val 数据的具体值 |
| | | */ |
| | | TOrderTransferInfoDlg.get = function(key) { |
| | | return $("#" + key).val(); |
| | | } |
| | | |
| | | /** |
| | | * 关闭此对话框 |
| | | */ |
| | | TOrderTransferInfoDlg.close = function() { |
| | | parent.layer.close(window.parent.TOrderTransfer.layerIndex); |
| | | } |
| | | |
| | | /** |
| | | * 收集数据 |
| | | */ |
| | | TOrderTransferInfoDlg.collectData = function() { |
| | | this |
| | | .set('id') |
| | | .set('type') |
| | | .set('userId') |
| | | .set('driverId') |
| | | .set('carId') |
| | | .set('orderNum') |
| | | .set('placementLon') |
| | | .set('placementLat') |
| | | .set('placementAddress') |
| | | .set('startLon') |
| | | .set('startLat') |
| | | .set('endLon') |
| | | .set('startAddress') |
| | | .set('endLat') |
| | | .set('endAddress') |
| | | .set('boardingLon') |
| | | .set('boardingLat') |
| | | .set('boardingAddress') |
| | | .set('boardingTime') |
| | | .set('getoffLon') |
| | | .set('getoffLat') |
| | | .set('getoffAddress') |
| | | .set('getoffTime') |
| | | .set('mileage') |
| | | .set('payManner') |
| | | .set('payType') |
| | | .set('orderMoney') |
| | | .set('startMoney') |
| | | .set('mileageMoney') |
| | | .set('durationMoney') |
| | | .set('longDistanceMoney') |
| | | .set('parkMoney') |
| | | .set('roadTollMoney') |
| | | .set('redPacketMoney') |
| | | .set('couponMoney') |
| | | .set('redPacketId') |
| | | .set('couponId') |
| | | .set('discount') |
| | | .set('discountMoney') |
| | | .set('activityId') |
| | | .set('companyId') |
| | | .set('payMoney') |
| | | .set('substitute') |
| | | .set('passengers') |
| | | .set('passengersPhone') |
| | | .set('state') |
| | | .set('insertTime') |
| | | .set('travelTime') |
| | | .set('snatchOrderTime') |
| | | .set('setOutTime') |
| | | .set('arriveTime') |
| | | .set('startServiceTime') |
| | | .set('endServiceTime') |
| | | .set('orderType') |
| | | .set('orderSource') |
| | | .set('invoiceId') |
| | | .set('isReassign') |
| | | .set('reassignNotice') |
| | | .set('trackId') |
| | | .set('isDelete') |
| | | .set('oldState') |
| | | .set('telX') |
| | | .set('bindId') |
| | | .set('serverCarModelId'); |
| | | } |
| | | |
| | | /** |
| | | * 提交添加 |
| | | */ |
| | | TOrderTransferInfoDlg.addSubmit = function() { |
| | | |
| | | this.clearData(); |
| | | this.collectData(); |
| | | |
| | | //提交信息 |
| | | var ajax = new $ax(Feng.ctxPath + "/tOrderTransfer/add", function(data){ |
| | | Feng.success("添加成功!"); |
| | | window.parent.TOrderTransfer.table.refresh(); |
| | | TOrderTransferInfoDlg.close(); |
| | | },function(data){ |
| | | Feng.error("添加失败!" + data.responseJSON.message + "!"); |
| | | }); |
| | | ajax.set(this.tOrderTransferInfoData); |
| | | ajax.start(); |
| | | } |
| | | |
| | | /** |
| | | * 提交修改 |
| | | */ |
| | | TOrderTransferInfoDlg.editSubmit = function() { |
| | | |
| | | this.clearData(); |
| | | this.collectData(); |
| | | |
| | | //提交信息 |
| | | var ajax = new $ax(Feng.ctxPath + "/tOrderTransfer/update", function(data){ |
| | | Feng.success("修改成功!"); |
| | | window.parent.TOrderTransfer.table.refresh(); |
| | | TOrderTransferInfoDlg.close(); |
| | | },function(data){ |
| | | Feng.error("修改失败!" + data.responseJSON.message + "!"); |
| | | }); |
| | | ajax.set(this.tOrderTransferInfoData); |
| | | ajax.start(); |
| | | } |
| | | |
| | | var map = new AMap.Map("container", { |
| | | resizeEnable: true, |
| | | zoom: 14 |
| | | }); |
| | | $(function() { |
| | | getTrajectory(); |
| | | }); |
| | | |
| | | function getTrajectory() { |
| | | $.ajax({ |
| | | url: Feng.ctxPath + '/tOrderTransfer/getOrderTrack', |
| | | type: 'POST', |
| | | data:{ |
| | | orderDetailId: $("#id").val() |
| | | }, |
| | | success: function (res) { |
| | | if(res.status == 200){ |
| | | var data = res.data; |
| | | if(data.length > 0){ |
| | | orderTrack(data); |
| | | }/*else{ |
| | | Feng.error("当前订单没有轨迹"); |
| | | }*/ |
| | | }else{ |
| | | Feng.error(res.msg); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | var marker, lineArr = []; |
| | | |
| | | function orderTrack(data) { |
| | | for(var i in data){ |
| | | var waypoints = []; |
| | | var lon = parseFloat(data[i].lon); |
| | | var lat = parseFloat(data[i].lat); |
| | | waypoints.push(lon); |
| | | waypoints.push(lat); |
| | | lineArr.push(waypoints); |
| | | } |
| | | |
| | | marker = new AMap.Marker({ |
| | | map: map, |
| | | position: lineArr[0], |
| | | icon: "https://webapi.amap.com/images/car.png", |
| | | offset: new AMap.Pixel(-26, -13), |
| | | autoRotation: true, |
| | | angle:-90, |
| | | }); |
| | | |
| | | // 绘制轨迹 |
| | | var polyline = new AMap.Polyline({ |
| | | map: map, |
| | | path: lineArr, |
| | | showDir:true, |
| | | strokeColor: "#28F", //线颜色 |
| | | // strokeOpacity: 1, //线透明度 |
| | | strokeWeight: 6, //线宽 |
| | | // strokeStyle: "solid" //线样式 |
| | | }); |
| | | |
| | | var passedPolyline = new AMap.Polyline({ |
| | | map: map, |
| | | // path: lineArr, |
| | | strokeColor: "#AF5", //线颜色 |
| | | // strokeOpacity: 1, //线透明度 |
| | | strokeWeight: 6, //线宽 |
| | | // strokeStyle: "solid" //线样式 |
| | | }); |
| | | |
| | | |
| | | marker.on('moving', function (e) { |
| | | passedPolyline.setPath(e.passedPath); |
| | | }); |
| | | |
| | | map.setFitView(); |
| | | } |
| | | |
| | | |
| | | function startAnimation () { |
| | | marker.moveAlong(lineArr, 200); |
| | | } |
| | | |
| | | function pauseAnimation () { |
| | | marker.pauseMove(); |
| | | } |
| | | |
| | | function resumeAnimation () { |
| | | marker.resumeMove(); |
| | | } |
| | | |
| | | function stopAnimation () { |
| | | marker.stopMove(); |
| | | } |