From 2fa574ff399acc86528ebe8dd916e6866a3b7df7 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 01 三月 2023 18:01:24 +0800
Subject: [PATCH] 订单管理详情,优推管理

---
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TYouTuiMapper.java                         |   16 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TUserToCouponMapper.xml            |   22 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TYouTuiMapper.xml                  |   23 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCancelOrderServiceImpl.java      |   22 
 management/guns-admin/src/main/webapp/static/modular/system/tOrder/tCancelOrder.js                                   |   17 
 management/guns-admin/src/main/webapp/static/modular/system/tCoupon/tCoupon_info.js                                  |   68 +
 management/guns-admin/src/main/webapp/static/modular/system/tYouTui/tYouTui.js                                       |  166 ++++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TYouTuiServiceImpl.java           |   20 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java                    |   15 
 management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrderException.js                                |   19 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TUserToCouponMapper.java                   |   18 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java            |   63 +
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TUserToCouponServiceImpl.java     |   20 
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderExceptionDetail.html                          |  190 +++++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java       |   18 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TYouTui.java                             |  176 ++++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCouponController.java      |   29 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrder.java                              |   11 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TCancelOrderMapper.xml             |   15 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITUserToCouponService.java             |   16 
 management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrderExceptionDetailCancelOrder.js               |  137 +++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TYouTuiController.java      |  157 ++++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITYouTuiService.java                   |   16 
 management/guns-admin/src/main/webapp/static/modular/system/tYouTui/tYouTui_info.js                                  |  160 ++++
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_add.html                                   |   23 
 management/guns-admin/src/main/webapp/static/modular/system/tCoupon/tCoupon.js                                       |   40 
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderDetail.html                                   |  186 ++++
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tCancelOrder/tCancelOrderDetail.html                       |  212 +++++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCancelOrderController.java |   18 
 management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrder.js                                         |   17 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TCancelOrderMapper.java                    |    8 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITCancelOrderService.java              |   14 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TUserToCoupon.java                       |  152 ++++
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tYouTui/tYouTui.html                                       |   53 +
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tYouTui/tYouTui_add.html                                   |   79 ++
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tYouTui/tYouTui_edit.html                                  |   34 
 36 files changed, 2,223 insertions(+), 27 deletions(-)

diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCancelOrderController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCancelOrderController.java
index 0ead608..f1cc996 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCancelOrderController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCancelOrderController.java
@@ -68,6 +68,15 @@
     }
 
     /**
+     * 跳转详情页面
+     */
+    @RequestMapping("/cancelOrderDetail")
+    public String cancelOrderDetail(Integer cancelOrderId, Model model) {
+        tCancelOrderService.cancelOrderDetail(cancelOrderId,model);
+        return PREFIX + "tCancelOrderDetail.html";
+    }
+
+    /**
      * 获取列表
      */
     @RequestMapping(value = "/list")
@@ -91,6 +100,15 @@
                             String driverName) {
         return tCancelOrderService.getCancelOrderList(createTime, code, source, userName, userPhone, state, driverName);
     }
+    /**
+     * 获取取消订单列表(订单异常详情页面使用)
+     */
+    @ApiOperation(value = "获取取消订单列表(订单异常详情页面使用)")
+    @RequestMapping(value = "/userCancelOrderList")
+    @ResponseBody
+    public Object userCancelOrderList(Integer userId,Integer orderId) {
+        return tCancelOrderService.userCancelOrderList(userId,orderId);
+    }
 
     /**
      * 新增
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCouponController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCouponController.java
index b0d0eac..3d745de 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCouponController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCouponController.java
@@ -6,9 +6,11 @@
 import com.stylefeng.guns.core.util.DateUtil;
 import com.stylefeng.guns.modular.system.controller.req.CouponSendReq;
 import com.stylefeng.guns.modular.system.enums.CouponStatusEnum;
+import com.stylefeng.guns.modular.system.model.TAgent;
 import com.stylefeng.guns.modular.system.model.TUserToCoupon;
 import com.stylefeng.guns.modular.system.service.ITUserToCouponService;
 import io.swagger.annotations.ApiOperation;
+import org.apache.poi.hdf.extractor.TC;
 import org.springframework.stereotype.Controller;
 import org.springframework.util.Assert;
 import org.springframework.util.CollectionUtils;
@@ -146,6 +148,33 @@
     }
 
     /**
+     * 修改优惠券状态
+     */
+    @RequestMapping(value = "/update-status")
+    @ResponseBody
+    public Object updateStatus(Integer id,Integer status) {
+        TCoupon tCoupon = tCouponService.selectById(id);
+
+        // 查询已启用的新人券数量
+        int count = tCouponService.selectCount(new EntityWrapper<TCoupon>().eq("coupon_state", 1)
+                .eq("coupon_type",2));
+
+        // 判断是否为新人券,新人券只可启用一条记录
+        if(count > 0 && 2 == tCoupon.getCouponType() && 2 == status){
+            return new SuccessTip(500,"已有启动的新人券!");
+        }
+
+        if(1 == status){
+            tCoupon.setCouponState(2);
+        }
+        if(2 == status){
+            tCoupon.setCouponState(1);
+        }
+        tCouponService.updateById(tCoupon);
+        return SUCCESS_TIP;
+    }
+
+    /**
      * 修改
      */
     @RequestMapping(value = "/update")
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java
index 32062da..8fb8b15 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java
@@ -122,6 +122,24 @@
     }
 
     /**
+     * 跳转详情页面
+     */
+    @RequestMapping("/orderDetail")
+    public String orderDetail(Integer orderId, Model model) {
+        tOrderService.orderDetail(orderId,model);
+        return PREFIX + "tOrderDetail.html";
+    }
+
+    /**
+     * 跳转异常详情页面
+     */
+    @RequestMapping("/orderExceptionDetail")
+    public String orderExceptionDetail(Integer orderId, Model model) {
+        tOrderService.orderExceptionDetail(orderId,model);
+        return PREFIX + "tOrderExceptionDetail.html";
+    }
+
+    /**
      * 获取列表
      */
     @ApiOperation(value = "用户获取订单列表")
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TYouTuiController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TYouTuiController.java
new file mode 100644
index 0000000..98c1b9c
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TYouTuiController.java
@@ -0,0 +1,157 @@
+package com.stylefeng.guns.modular.system.controller.general;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.base.tips.SuccessTip;
+import com.stylefeng.guns.core.util.DateUtil;
+import com.stylefeng.guns.modular.system.model.TAgent;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.stylefeng.guns.core.log.LogObjectHolder;
+import org.springframework.web.bind.annotation.RequestParam;
+import com.stylefeng.guns.modular.system.model.TYouTui;
+import com.stylefeng.guns.modular.system.service.ITYouTuiService;
+
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * 控制器
+ *
+ * @author fengshuonan
+ * @Date 2023-03-01 16:17:43
+ */
+@Controller
+@RequestMapping("/tYouTui")
+public class TYouTuiController extends BaseController {
+
+    private String PREFIX = "/system/tYouTui/";
+
+    @Autowired
+    private ITYouTuiService tYouTuiService;
+
+    /**
+     * 跳转到首页
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "tYouTui.html";
+    }
+
+    /**
+     * 跳转到添加
+     */
+    @RequestMapping("/tYouTui_add")
+    public String tYouTuiAdd() {
+        return PREFIX + "tYouTui_add.html";
+    }
+
+    /**
+     * 跳转到修改
+     */
+    @RequestMapping("/tYouTui_update/{tYouTuiId}")
+    public String tYouTuiUpdate(@PathVariable Integer tYouTuiId, Model model) {
+        TYouTui tYouTui = tYouTuiService.selectById(tYouTuiId);
+        model.addAttribute("item",tYouTui);
+        LogObjectHolder.me().set(tYouTui);
+        return PREFIX + "tYouTui_edit.html";
+    }
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping(value = "/list")
+    @ResponseBody
+    public Object list(String createTime,Integer type) {
+        EntityWrapper<TYouTui> wrapper = new EntityWrapper<>();
+
+        if(Objects.nonNull(type)){
+            wrapper.eq("type",type);
+        }
+
+        // 开始,结束时间
+        if(StringUtils.hasLength(createTime)){
+            String[] split = createTime.split(" - ");
+            Date startTime = DateUtil.getDate_str4(split[0]);
+            Date endTime = DateUtil.getDate_str4(split[1]);
+            wrapper.between("createTime",startTime,endTime);
+        }
+        return tYouTuiService.selectList(wrapper);
+    }
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping(value = "/list-back")
+    @ResponseBody
+    public Object listBack(String condition) {
+        return tYouTuiService.selectList(null);
+    }
+
+    /**
+     * 新增
+     */
+    @RequestMapping(value = "/add")
+    @ResponseBody
+    public Object add(TYouTui tYouTui) {
+        tYouTui.setContent(tYouTui.getServiceContent());
+        tYouTuiService.insert(tYouTui);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping(value = "/delete")
+    @ResponseBody
+    public Object delete(@RequestParam Integer tYouTuiId) {
+        TYouTui tYouTui = tYouTuiService.selectById(tYouTuiId);
+        if(1 == tYouTui.getStatus()){
+            return new SuccessTip(500,"启用下的优推不可删除!");
+        }
+
+        tYouTuiService.deleteById(tYouTuiId);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 修改用户状态
+     */
+    @RequestMapping(value = "/update-status")
+    @ResponseBody
+    public Object updateStatus(Integer id,Integer status) {
+        TYouTui tYouTui = tYouTuiService.selectById(id);
+        if(1 == status){
+            tYouTui.setStatus(2);
+        }
+        if(2 == status){
+            tYouTui.setStatus(1);
+        }
+        tYouTuiService.updateById(tYouTui);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping(value = "/update")
+    @ResponseBody
+    public Object update(TYouTui tYouTui) {
+        tYouTuiService.updateById(tYouTui);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 详情
+     */
+    @RequestMapping(value = "/detail/{tYouTuiId}")
+    @ResponseBody
+    public Object detail(@PathVariable("tYouTuiId") Integer tYouTuiId) {
+        return tYouTuiService.selectById(tYouTuiId);
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TCancelOrderMapper.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TCancelOrderMapper.java
index a26731a..b4ef7d7 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TCancelOrderMapper.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TCancelOrderMapper.java
@@ -34,4 +34,12 @@
     List<TOrderResp> getCancelOrderList(@Param("startTime") String startTime, @Param("endTime")String endTime, @Param("code") String code,
                                         @Param("source") Integer source, @Param("userName")String userName, @Param("userPhone")String userPhone,
                                         @Param("state")Integer state, @Param("driverName")String driverName);
+
+    /**
+     * 订单异常详情页面的取消记录列表
+     * @param userId
+     * @param orderId
+     * @return
+     */
+    List<TOrderResp> userCancelOrderList(@Param("userId") Integer userId,@Param("orderId") Integer orderId);
 }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TUserToCouponMapper.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TUserToCouponMapper.java
new file mode 100644
index 0000000..2f3614a
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TUserToCouponMapper.java
@@ -0,0 +1,18 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.stylefeng.guns.modular.system.model.TUserToCoupon;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 用户优惠券中间表 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-02-28
+ */
+@Mapper
+public interface TUserToCouponMapper extends BaseMapper<TUserToCoupon> {
+
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TYouTuiMapper.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TYouTuiMapper.java
new file mode 100644
index 0000000..a5eef6e
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TYouTuiMapper.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.stylefeng.guns.modular.system.model.TYouTui;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 优推 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-03-01
+ */
+public interface TYouTuiMapper extends BaseMapper<TYouTui> {
+
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TCancelOrderMapper.xml b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TCancelOrderMapper.xml
index 07a3a5a..6d11c18 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TCancelOrderMapper.xml
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TCancelOrderMapper.xml
@@ -55,5 +55,20 @@
         </where>
         ORDER BY co.createTime
     </select>
+    <select id="userCancelOrderList" resultType="com.stylefeng.guns.modular.system.controller.resp.TOrderResp">
+        select co.createTime,o.code,o.startAddress,o.endAddress
+        from t_cancel_order co
+        left join t_order o  on co.orderId = o.id
+        <where>
+            <if test="userId != null">
+                AND co.userId = #{userId}
+            </if>
+            <if test="orderId != null">
+                AND co.orderId = #{orderId}
+            </if>
+            AND co.userType = 1
+        </where>
+        ORDER BY co.createTime DESC
+    </select>
 
 </mapper>
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TUserToCouponMapper.xml b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TUserToCouponMapper.xml
new file mode 100644
index 0000000..9032559
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TUserToCouponMapper.xml
@@ -0,0 +1,22 @@
+<?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.TUserToCouponMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.TUserToCoupon">
+        <id column="id" property="id" />
+        <result column="userId" property="userId" />
+        <result column="couponId" property="couponId" />
+        <result column="couponTotal" property="couponTotal" />
+        <result column="validCount" property="validCount" />
+        <result column="expireTime" property="expireTime" />
+        <result column="createTime" property="createTime" />
+        <result column="status" property="status" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, userId, couponId, couponTotal, validCount, expireTime, createTime, status
+    </sql>
+
+</mapper>
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TYouTuiMapper.xml b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TYouTuiMapper.xml
new file mode 100644
index 0000000..4e2ef0c
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TYouTuiMapper.xml
@@ -0,0 +1,23 @@
+<?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.TYouTuiMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.TYouTui">
+        <id column="id" property="id" />
+        <result column="name" property="name" />
+        <result column="type" property="type" />
+        <result column="number" property="number" />
+        <result column="integral" property="integral" />
+        <result column="effectiveTime" property="effectiveTime" />
+        <result column="content" property="content" />
+        <result column="status" property="status" />
+        <result column="createTime" property="createTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, name, type, number, integral, effectiveTime, content, status, createTime
+    </sql>
+
+</mapper>
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrder.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrder.java
index 4825eed..6f06c4e 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrder.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrder.java
@@ -177,6 +177,17 @@
     @ApiModelProperty(value = "恶劣天气超出费")
     private BigDecimal overBadWeatherPrice;
 
+    @ApiModelProperty(value = "折扣优惠金额")
+    private BigDecimal discountAmount;
+
+    public BigDecimal getDiscountAmount() {
+        return discountAmount;
+    }
+
+    public void setDiscountAmount(BigDecimal discountAmount) {
+        this.discountAmount = discountAmount;
+    }
+
     public Double getStartDistance() {
         return startDistance;
     }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TUserToCoupon.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TUserToCoupon.java
new file mode 100644
index 0000000..bb3e385
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TUserToCoupon.java
@@ -0,0 +1,152 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.enums.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 用户优惠券中间表
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-02-28
+ */
+@TableName("t_user_to_coupon")
+public class TUserToCoupon extends Model<TUserToCoupon> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 用户id
+     */
+    private Integer userId;
+    /**
+     * 优惠券id
+     */
+    private Integer couponId;
+    /**
+     * 领取总数量
+     */
+    private Integer couponTotal;
+    /**
+     * 有效数量
+     */
+    private Integer validCount;
+    /**
+     * 过期时间
+     */
+    private Date expireTime;
+    /**
+     * 创建时间-领取时间
+     */
+    private Date createTime;
+    /**
+     * 状态 1正常 2冻结 3删除
+     */
+    private Integer status;
+
+    /**
+     * 过期数量
+     */
+    private Integer expireCount;
+
+    public Integer getExpireCount() {
+        return expireCount;
+    }
+
+    public void setExpireCount(Integer expireCount) {
+        this.expireCount = expireCount;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getCouponId() {
+        return couponId;
+    }
+
+    public void setCouponId(Integer couponId) {
+        this.couponId = couponId;
+    }
+
+    public Integer getCouponTotal() {
+        return couponTotal;
+    }
+
+    public void setCouponTotal(Integer couponTotal) {
+        this.couponTotal = couponTotal;
+    }
+
+    public Integer getValidCount() {
+        return validCount;
+    }
+
+    public void setValidCount(Integer validCount) {
+        this.validCount = validCount;
+    }
+
+    public Date getExpireTime() {
+        return expireTime;
+    }
+
+    public void setExpireTime(Date expireTime) {
+        this.expireTime = expireTime;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "TUserToCoupon{" +
+        "id=" + id +
+        ", userId=" + userId +
+        ", couponId=" + couponId +
+        ", couponTotal=" + couponTotal +
+        ", validCount=" + validCount +
+        ", expireTime=" + expireTime +
+        ", createTime=" + createTime +
+        ", status=" + status +
+        "}";
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TYouTui.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TYouTui.java
new file mode 100644
index 0000000..3378d21
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TYouTui.java
@@ -0,0 +1,176 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.enums.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableName;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 优推
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-03-01
+ */
+@TableName("t_you_tui")
+public class TYouTui extends Model<TYouTui> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 优推类型(1=次数,2=小时)
+     */
+    private Integer type;
+    /**
+     * 优推值
+     */
+    private Integer number;
+    /**
+     * 所需积分
+     */
+    private Integer integral;
+    /**
+     * 有效天数
+     */
+    private Integer effectiveTime;
+    /**
+     * 服务内容
+     */
+    private String content;
+    /**
+     * 状态(1=正常,2=冻结,3=删除)
+     */
+    private Integer status;
+    /**
+     * 添加时间
+     */
+    private Date createTime;
+    @ApiModelProperty(value = "优推距离")
+    private Integer distance;
+
+    @TableField(exist = false)
+    private String serviceContent;
+
+    public String getServiceContent() {
+        return serviceContent;
+    }
+
+    public void setServiceContent(String serviceContent) {
+        this.serviceContent = serviceContent;
+    }
+
+    public Integer getDistance() {
+        return distance;
+    }
+
+    public void setDistance(Integer distance) {
+        this.distance = distance;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public Integer getIntegral() {
+        return integral;
+    }
+
+    public void setIntegral(Integer integral) {
+        this.integral = integral;
+    }
+
+    public Integer getEffectiveTime() {
+        return effectiveTime;
+    }
+
+    public void setEffectiveTime(Integer effectiveTime) {
+        this.effectiveTime = effectiveTime;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "TYouTui{" +
+        "id=" + id +
+        ", name=" + name +
+        ", type=" + type +
+        ", number=" + number +
+        ", integral=" + integral +
+        ", effectiveTime=" + effectiveTime +
+        ", content=" + content +
+        ", status=" + status +
+        ", createTime=" + createTime +
+        "}";
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITCancelOrderService.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITCancelOrderService.java
index ea763d0..24da899 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITCancelOrderService.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITCancelOrderService.java
@@ -3,6 +3,7 @@
 import com.stylefeng.guns.modular.system.controller.resp.TOrderResp;
 import com.stylefeng.guns.modular.system.model.TCancelOrder;
 import com.baomidou.mybatisplus.service.IService;
+import org.springframework.ui.Model;
 
 import java.util.List;
 
@@ -30,4 +31,17 @@
      */
     List<TOrderResp> getCancelOrderList(String createTime, String code, Integer source, String userName, String userPhone, Integer state, String driverName);
 
+    /**
+     * 跳转详情页面
+     * @param cancelOrderId
+     * @param model
+     */
+    void cancelOrderDetail(Integer cancelOrderId, Model model);
+
+    /**
+     *
+     * @param userId
+     * @return
+     */
+    List<TOrderResp> userCancelOrderList(Integer userId,Integer orderId);
 }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java
index 0d6137e..a8306be 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderService.java
@@ -4,6 +4,7 @@
 import com.stylefeng.guns.modular.system.controller.resp.TOrderResp;
 import com.stylefeng.guns.modular.system.model.TOrder;
 import com.baomidou.mybatisplus.service.IService;
+import org.springframework.ui.Model;
 
 import java.util.List;
 
@@ -29,4 +30,18 @@
      * @return
      */
     List<TOrderResp> getOrderList(String createTime, String code, Integer source, String userName, String userPhone, Integer state, String driverName,Integer isException);
+
+    /**
+     * 跳转详情页面
+     * @param orderId
+     * @param model
+     */
+    void orderDetail(Integer orderId, Model model);
+
+    /**
+     * 跳转异常详情页面
+     * @param orderId
+     * @param model
+     */
+    void orderExceptionDetail(Integer orderId, Model model);
 }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITUserToCouponService.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITUserToCouponService.java
new file mode 100644
index 0000000..ae02f6b
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITUserToCouponService.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.stylefeng.guns.modular.system.model.TUserToCoupon;
+import com.baomidou.mybatisplus.service.IService;
+
+/**
+ * <p>
+ * 用户优惠券中间表 服务类
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-02-28
+ */
+public interface ITUserToCouponService extends IService<TUserToCoupon> {
+
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITYouTuiService.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITYouTuiService.java
new file mode 100644
index 0000000..6693957
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITYouTuiService.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.stylefeng.guns.modular.system.model.TYouTui;
+import com.baomidou.mybatisplus.service.IService;
+
+/**
+ * <p>
+ * 优推 服务类
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-03-01
+ */
+public interface ITYouTuiService extends IService<TYouTui> {
+
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCancelOrderServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCancelOrderServiceImpl.java
index 3dc40f4..ac11d5a 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCancelOrderServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCancelOrderServiceImpl.java
@@ -5,10 +5,13 @@
 import com.stylefeng.guns.modular.system.dao.TCancelOrderMapper;
 import com.stylefeng.guns.modular.system.service.ITCancelOrderService;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.service.ITOrderService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.ui.Model;
 import org.springframework.util.StringUtils;
 
+import java.text.SimpleDateFormat;
 import java.util.List;
 
 /**
@@ -24,6 +27,8 @@
 
     @Autowired
     private TCancelOrderMapper tCancelOrderMapper;
+    @Autowired
+    private ITOrderService tOrderService;
 
     @Override
     public List<TOrderResp> getCancelOrderList(String createTime, String code, Integer source, String userName, String userPhone, Integer state, String driverName) {
@@ -37,4 +42,21 @@
         }
         return tCancelOrderMapper.getCancelOrderList(startTime,endTime,code,source,userName,userPhone,state,driverName);
     }
+
+    @Override
+    public void cancelOrderDetail(Integer cancelOrderId, Model model) {
+
+        // 查询取消订单记录
+        TCancelOrder tCancelOrder = tCancelOrderMapper.selectById(cancelOrderId);
+
+        model.addAttribute("cancelTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tCancelOrder.getCreateTime()));
+        model.addAttribute("cause",tCancelOrder.getCause());
+
+        tOrderService.orderDetail(tCancelOrder.getOrderId(),model);
+    }
+
+    @Override
+    public List<TOrderResp> userCancelOrderList(Integer userId,Integer orderId) {
+        return tCancelOrderMapper.userCancelOrderList(userId,orderId);
+    }
 }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
index 955b9d1..0cb939b 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
@@ -3,16 +3,25 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.stylefeng.guns.core.util.DateUtil;
 import com.stylefeng.guns.modular.system.controller.resp.TOrderResp;
+import com.stylefeng.guns.modular.system.dao.TAppUserMapper;
+import com.stylefeng.guns.modular.system.dao.TBranchOfficeMapper;
+import com.stylefeng.guns.modular.system.dao.TDriverMapper;
+import com.stylefeng.guns.modular.system.model.TAppUser;
+import com.stylefeng.guns.modular.system.model.TBranchOffice;
+import com.stylefeng.guns.modular.system.model.TDriver;
 import com.stylefeng.guns.modular.system.model.TOrder;
 import com.stylefeng.guns.modular.system.dao.TOrderMapper;
 import com.stylefeng.guns.modular.system.service.ITOrderService;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.ui.Model;
 import org.springframework.util.StringUtils;
 
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * <p>
@@ -27,6 +36,12 @@
 
     @Autowired
     private TOrderMapper tOrderMapper;
+    @Autowired
+    private TAppUserMapper tAppUserMapper;
+    @Autowired
+    private TDriverMapper tDriverMapper;
+    @Autowired
+    private TBranchOfficeMapper tBranchOfficeMapper;
 
     @Override
     public List<TOrderResp> getOrderList(String createTime, String code, Integer source, String userName, String userPhone, Integer state, String driverName,Integer isException) {
@@ -40,4 +55,52 @@
         }
         return tOrderMapper.getOrderList(startTime,endTime,code,source,userName,userPhone,state,driverName,isException);
     }
+
+    @Override
+    public void orderDetail(Integer orderId, Model model) {
+        // 订单信息
+        TOrder tOrder = tOrderMapper.selectById(orderId);
+        model.addAttribute("createTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tOrder.getCreateTime()));//下单时间
+        model.addAttribute("code",tOrder.getCode());//订单编号
+        model.addAttribute("source",tOrder.getSource());//订单来源
+        model.addAttribute("startAddress",tOrder.getStartAddress());//起点
+        model.addAttribute("endAddress",tOrder.getEndAddress());//终点
+        model.addAttribute("startTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tOrder.getStartTime()));//乘车时间
+        model.addAttribute("boardingTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tOrder.getBoardingTime()));//上车时间
+        model.addAttribute("getoffTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tOrder.getGetoffTime()));//下车时间
+        model.addAttribute("startPrice",tOrder.getStartPrice());//起步价
+        model.addAttribute("overDrivePrice",tOrder.getOverDrivePrice());//里程费
+        model.addAttribute("waitTimePrice",tOrder.getWaitTimePrice());//等待费
+        model.addAttribute("badWeatherPrice",tOrder.getBadWeatherPrice());//恶劣天气费用
+        model.addAttribute("orderMoney",tOrder.getOrderMoney());//实际费用
+        model.addAttribute("payMoney",tOrder.getPayMoney());//实际支付费用
+        model.addAttribute("discountedPrice",tOrder.getDiscountedPrice());//优惠券抵扣费用
+        model.addAttribute("payType",tOrder.getPayType());//支付方式
+        model.addAttribute("discountAmount",tOrder.getDiscountAmount());//折扣金额
+        model.addAttribute("userId",tOrder.getUserId());//用户id
+
+        // 查询用户
+        TAppUser tAppUser = tAppUserMapper.selectById(tOrder.getUserId());
+        model.addAttribute("userName",tAppUser.getNickname());
+        model.addAttribute("userPhone",tAppUser.getPhone());
+
+        // 查询司机
+        TDriver tDriver = tDriverMapper.selectById(tOrder.getDriverId());
+        model.addAttribute("driverName",tDriver.getName());
+
+        // 查询司机所属分公司
+        TBranchOffice tBranchOffice = tBranchOfficeMapper.selectById(tDriver.getBranchOfficeId());
+        if(Objects.nonNull(tBranchOffice)){
+            model.addAttribute("branchOfficeName",tBranchOffice.getPrincipal());
+        }else {
+            model.addAttribute("branchOfficeName","");
+        }
+
+    }
+
+    @Override
+    public void orderExceptionDetail(Integer orderId, Model model) {
+        this.orderDetail(orderId,model);
+        model.addAttribute("orderId",orderId);
+    }
 }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TUserToCouponServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TUserToCouponServiceImpl.java
new file mode 100644
index 0000000..57f4690
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TUserToCouponServiceImpl.java
@@ -0,0 +1,20 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.stylefeng.guns.modular.system.model.TUserToCoupon;
+import com.stylefeng.guns.modular.system.dao.TUserToCouponMapper;
+import com.stylefeng.guns.modular.system.service.ITUserToCouponService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 用户优惠券中间表 服务实现类
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-02-28
+ */
+@Service
+public class TUserToCouponServiceImpl extends ServiceImpl<TUserToCouponMapper, TUserToCoupon> implements ITUserToCouponService {
+
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TYouTuiServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TYouTuiServiceImpl.java
new file mode 100644
index 0000000..3398614
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TYouTuiServiceImpl.java
@@ -0,0 +1,20 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.stylefeng.guns.modular.system.model.TYouTui;
+import com.stylefeng.guns.modular.system.dao.TYouTuiMapper;
+import com.stylefeng.guns.modular.system.service.ITYouTuiService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 优推 服务实现类
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-03-01
+ */
+@Service
+public class TYouTuiServiceImpl extends ServiceImpl<TYouTuiMapper, TYouTui> implements ITYouTuiService {
+
+}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tCancelOrder/tCancelOrderDetail.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tCancelOrder/tCancelOrderDetail.html
new file mode 100644
index 0000000..3d35322
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tCancelOrder/tCancelOrderDetail.html
@@ -0,0 +1,212 @@
+@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">
+
+                        <hr/>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div style="background-color: gray;height: 35px;line-height: 35px">
+                                <label style="color: #0C0C0C">订单详情</label>
+                            </div>
+                        </div>
+                        <hr/>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >下单时间:</label>
+                                <label>${createTime}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >订单编号:</label>
+                                <label>${code}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >订单来源:</label>
+                                @if(source==1){
+                                <label>小程序</label>
+                                @}
+                                @if(source==2){
+                                <label>APP</label>
+                                @}
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >乘车时间:</label>
+                                <label>${startTime}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group" style="color: green" >
+                            <div class="initialLevel col-sm-3 control-label form-group" >
+                                <label class="control-label">下单用户昵称:</label>
+                                <label>${userName}</label>
+                            </div>
+                            <div class="initialLevel col-sm-2 control-label form-group" >
+                                <label class="control-label">下单用户手机号:</label>
+                                <label>${userPhone}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group" >
+                                <label class="control-label">起点:</label>
+                                <label>${startAddress}</label>
+                            </div>
+                            <div class="initialLevel col-sm-2 control-label form-group" >
+                                <label class="control-label">终点:</label>
+                                <label>${endAddress}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group" style="color: red" >
+                            <div class="initialLevel col-sm-3 control-label form-group" >
+                                <label class="control-label">接单司机:</label>
+                                <label>${driverName}</label>
+                            </div>
+                            <div class="initialLevel col-sm-2 control-label form-group" >
+                                <label class="control-label">所属机构:</label>
+                                <label>${branchOfficeName}</label>
+                            </div>
+                        </div>
+
+                        <hr/>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div style="background-color: gray;height: 35px;line-height: 35px">
+                                <label style="color: #0C0C0C">上下地点</label>
+                            </div>
+                        </div>
+                        <hr/>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >上车地点:</label>
+                                <label>${startAddress}</label>
+                            </div>
+                            <div class="initialLevel col-sm-2 control-label form-group" >
+                                <label class="control-label">上车时间:</label>
+                                <label>${boardingTime}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >下车地点:</label>
+                                <label>${endAddress}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >下车时间:</label>
+                                <label>${getoffTime}</label>
+                            </div>
+                        </div>
+
+                        <hr/>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div style="background-color: gray;height: 35px;line-height: 35px">
+                                <label style="color: #0C0C0C">取消信息</label>
+                            </div>
+                        </div>
+                        <hr/>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >取消时间:</label>
+                                <label>${cancelTime}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >取消原因:</label>
+                                <div  style="margin-left: 70px" >
+                                    <textarea id="cause" style="width: 681px; height: 249px;" readonly>${cause}</textarea>
+                                </div>
+                            </div>
+                        </div>
+
+                        <hr/>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div style="background-color: gray;height: 35px;line-height: 35px">
+                                <label style="color: #0C0C0C">费用明细</label>
+                            </div>
+                        </div>
+                        <hr/>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >起步价:</label>
+                                <label>${startPrice}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >等待费:</label>
+                                <label>${waitTimePrice}</label>
+                            </div>
+                        </div>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >里程费:</label>
+                                <label>${overDrivePrice}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >恶劣天气:</label>
+                                <label>${badWeatherPrice}</label>
+                            </div>
+                        </div>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >实际费用:</label>
+                                <label>${orderMoney}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >实际支付费用:</label>
+                                <label>${payMoney}</label>
+                            </div>
+                        </div>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >优惠券抵扣费用:</label>
+                                <label>${discountedPrice}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >支付方式:</label>
+                                @if(payType==1){
+                                <label>微信支付</label>
+                                @}
+                                @if(payType==2){
+                                <label>余额支付</label>
+                                @}
+                                @if(payType==3){
+                                <label>线下收款</label>
+                                @}
+                            </div>
+                        </div>
+
+                        <div class="hidden-xs" id="TDriverTableToolbar" role="group"  style="text-align: center">
+                            <#button name="取消" icon="fa-plus" clickFun="TCancelOrderInfoDlg.close()" />
+                        </div>
+
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tOrder/tOrder.js"></script>
+<script src="${ctxPath}/static/modular/system/tOrder/tOrder_info.js"></script>
+<script src="${ctxPath}/static/modular/system/tOrder/tCancelOrder.js"></script>
+<script src="${ctxPath}/static/modular/system/tCancelOrder/tCancelOrder_info.js"></script>
+<script type="text/javascript">
+    laydate.render({
+        elem: '#createTime',
+        type: 'date',
+        range: true
+    });
+</script>
+@}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_add.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_add.html
index 9487e9f..f0d130d 100644
--- a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_add.html
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_add.html
@@ -1,14 +1,14 @@
 @layout("/common/_container.html"){
 <div class="ibox float-e-margins">
     <div class="ibox-content">
-        <div class="form-horizontal">
+        <div class="form-horizontal" id="couponInfoForm">
 
             <div class="row">
                 <div class="col-sm-12">
                     <div class="form-group">
                         <label class="col-sm-3 control-label">优惠券名称:</label>
                         <div class="col-sm-6">
-                            <input class="form-control" id="couponName" name="couponName" type="text">
+                            <input class="form-control" id="couponName" name="couponName" type="text" required>
                         </div>
                     </div>
                     <div class="hr-line-dashed"></div>
@@ -17,9 +17,10 @@
                 <div class="col-sm-12">
                     <div class="form-group">
                         <label class="col-sm-3 control-label">优惠券类型:</label>
-                        <select class="input-group col-sm-6" id="couponType" style="width: 180px;height: 33px" name="couponType">
+                        <select class="input-group col-sm-6" id="couponType" name="couponType" required>
+                            <option value="">请选择优惠券类型</option>
                             <option value="1">活动券</option>
-                            <option value="2">优惠券</option>
+                            <option value="2">新人券</option>
                         </select>
                     </div>
                     <div class="hr-line-dashed"></div>
@@ -28,7 +29,8 @@
                 <div class="col-sm-12">
                     <div class="form-group">
                         <label class="col-sm-3 control-label">服务类类型:</label>
-                        <select class="input-group col-sm-6" id="couponServiceType" style="width: 180px;height: 33px" name="couponType">
+                        <select class="input-group col-sm-6" id="couponServiceType" name="couponServiceType" required>
+                            <option value="">请选择服务类型</option>
                             <option value="1">通用型</option>
                         </select>
                     </div>
@@ -39,7 +41,7 @@
                     <div class="form-group">
                         <label class="col-sm-3 control-label">优惠券数量:</label>
                         <div class="col-sm-6">
-                            <input class="form-control" id="couponCount" name="couponCount" type="text">
+                            <input class="form-control" id="couponCount" name="couponCount" type="text" required>
                         </div>
                     </div>
                     <div class="hr-line-dashed"></div>
@@ -49,7 +51,7 @@
                     <div class="form-group">
                         <label class="col-sm-3 control-label">条件金额:订单满</label>
                         <div class="col-sm-6">
-                            <input class="form-control" id="couponConditionalAmount" name="couponConditionalAmount" type="text">
+                            <input class="form-control" id="couponConditionalAmount" name="couponConditionalAmount" type="text" required>
                         </div>
                         <label class="col-sm-2 control-label">可使用</label>
                     </div>
@@ -60,7 +62,7 @@
                     <div class="form-group">
                         <label class="col-sm-3 control-label">优惠金额:</label>
                         <div class="col-sm-6">
-                            <input class="form-control" id="couponPreferentialAmount" name="couponPreferentialAmount" type="text">
+                            <input class="form-control" id="couponPreferentialAmount" name="couponPreferentialAmount" type="text" required>
                         </div>
                     </div>
                     <div class="hr-line-dashed"></div>
@@ -70,7 +72,7 @@
                     <div class="form-group">
                         <label class="col-sm-3 control-label">有效期:</label>
                         <div class="col-sm-6">
-                            <input class="form-control" id="couponValidity" name="couponValidity" type="text">
+                            <input class="form-control" id="couponValidity" name="couponValidity" type="text" required>
                         </div>
                         <label class="col-sm-1 control-label">天</label>
                     </div>
@@ -87,6 +89,7 @@
                     </div>
                     <div class="hr-line-dashed"></div>
                 </div>
+
             </div>
 
             <div class="row btn-group-m-t">
@@ -100,4 +103,6 @@
     </div>
 </div>
 <script src="${ctxPath}/static/modular/system/tCoupon/tCoupon_info.js"></script>
+<script type="text/javascript">
+</script>
 @}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderDetail.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderDetail.html
new file mode 100644
index 0000000..137a268
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderDetail.html
@@ -0,0 +1,186 @@
+@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">
+
+                        <hr/>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div style="background-color: gray;height: 35px;line-height: 35px">
+                                <label style="color: #0C0C0C">订单详情</label>
+                            </div>
+                        </div>
+                        <hr/>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >下单时间:</label>
+                                <label>${createTime}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >订单编号:</label>
+                                <label>${code}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >订单来源:</label>
+                                @if(source==1){
+                                <label>小程序</label>
+                                @}
+                                @if(source==2){
+                                <label>APP</label>
+                                @}
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >乘车时间:</label>
+                                <label>${startTime}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group" style="color:green;" >
+                            <div class="initialLevel col-sm-3 control-label form-group" >
+                                <label class="control-label">下单用户昵称:</label>
+                                <label>${userName}</label>
+                            </div>
+                            <div class="initialLevel col-sm-2 control-label form-group" >
+                                <label class="control-label">下单用户手机号:</label>
+                                <label>${userPhone}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group" >
+                                <label class="control-label">起点:</label>
+                                <label>${startAddress}</label>
+                            </div>
+                            <div class="initialLevel col-sm-2 control-label form-group" >
+                                <label class="control-label">终点:</label>
+                                <label>${endAddress}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group" style="color:red;" >
+                            <div class="initialLevel col-sm-3 control-label form-group" >
+                                <label class="control-label">接单司机:</label>
+                                <label>${driverName}</label>
+                            </div>
+                            <div class="initialLevel col-sm-2 control-label form-group" >
+                                <label class="control-label">所属机构:</label>
+                                <label>${branchOfficeName}</label>
+                            </div>
+                        </div>
+
+                        <hr/>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div style="background-color: gray;height: 35px;line-height: 35px">
+                                <label style="color: #0C0C0C">上下地点</label>
+                            </div>
+                        </div>
+                        <hr/>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >上车地点:</label>
+                                <label>${startAddress}</label>
+                            </div>
+                            <div class="initialLevel col-sm-2 control-label form-group" >
+                                <label class="control-label">上车时间:</label>
+                                <label>${boardingTime}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >下车地点:</label>
+                                <label>${endAddress}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >下车时间:</label>
+                                <label>${getoffTime}</label>
+                            </div>
+                        </div>
+
+                        <hr/>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div style="background-color: gray;height: 35px;line-height: 35px">
+                                <label style="color: #0C0C0C">费用明细</label>
+                            </div>
+                        </div>
+                        <hr/>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >起步价:</label>
+                                <label>${startPrice}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >等待费:</label>
+                                <label>${waitTimePrice}</label>
+                            </div>
+                        </div>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >里程费:</label>
+                                <label>${overDrivePrice}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >恶劣天气:</label>
+                                <label>${badWeatherPrice}</label>
+                            </div>
+                        </div>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >实际费用:</label>
+                                <label>${orderMoney}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >实际支付费用:</label>
+                                <label>${payMoney}</label>
+                            </div>
+                        </div>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >优惠券抵扣费用:</label>
+                                <label>${discountedPrice}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >支付方式:</label>
+                                @if(payType==1){
+                                <label>微信支付</label>
+                                @}
+                                @if(payType==2){
+                                <label>余额支付</label>
+                                @}
+                                @if(payType==3){
+                                <label>线下收款</label>
+                                @}
+                            </div>
+                        </div>
+
+                        <div class="hidden-xs" id="TDriverTableToolbar" role="group"  style="text-align: center">
+                            <#button name="取消" icon="fa-plus" clickFun="TOrderInfoDlg.close()" />
+                        </div>
+
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tOrder/tOrder.js"></script>
+<script src="${ctxPath}/static/modular/system/tOrder/tOrder_info.js"></script>
+<script type="text/javascript">
+    laydate.render({
+        elem: '#createTime',
+        type: 'date',
+        range: true
+    });
+</script>
+@}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderExceptionDetail.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderExceptionDetail.html
new file mode 100644
index 0000000..7d16ff4
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderExceptionDetail.html
@@ -0,0 +1,190 @@
+@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">
+
+                        <input hidden id="userId" value="${userId}">
+                        <input hidden id="orderId" value="${orderId}">
+
+                        <hr/>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div style="background-color: gray;height: 35px;line-height: 35px">
+                                <label style="color: #0C0C0C">订单详情</label>
+                            </div>
+                        </div>
+                        <hr/>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >下单时间:</label>
+                                <label>${createTime}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >订单编号:</label>
+                                <label>${code}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >订单来源:</label>
+                                @if(source==1){
+                                <label>小程序</label>
+                                @}
+                                @if(source==2){
+                                <label>APP</label>
+                                @}
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >乘车时间:</label>
+                                <label>${startTime}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group" style="color: green" >
+                            <div class="initialLevel col-sm-3 control-label form-group" >
+                                <label class="control-label">下单用户昵称:</label>
+                                <label>${userName}</label>
+                            </div>
+                            <div class="initialLevel col-sm-2 control-label form-group" >
+                                <label class="control-label">下单用户手机号:</label>
+                                <label>${userPhone}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group" >
+                                <label class="control-label">起点:</label>
+                                <label>${startAddress}</label>
+                            </div>
+                            <div class="initialLevel col-sm-2 control-label form-group" >
+                                <label class="control-label">终点:</label>
+                                <label>${endAddress}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group" style="color: red" >
+                            <div class="initialLevel col-sm-3 control-label form-group" >
+                                <label class="control-label">接单司机:</label>
+                                <label>${driverName}</label>
+                            </div>
+                            <div class="initialLevel col-sm-2 control-label form-group" >
+                                <label class="control-label">所属机构:</label>
+                                <label>${branchOfficeName}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >上车地点:</label>
+                                <label>${startAddress}</label>
+                            </div>
+                        </div>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >下车地点:</label>
+                                <label>${endAddress}</label>
+                            </div>
+                        </div>
+
+                        <hr/>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div style="background-color: gray;height: 35px;line-height: 35px">
+                                <label style="color: #0C0C0C">费用明细</label>
+                            </div>
+                        </div>
+                        <hr/>
+
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >起步价:</label>
+                                <label>${startPrice}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >等待费:</label>
+                                <label>${waitTimePrice}</label>
+                            </div>
+                        </div>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >里程费:</label>
+                                <label>${overDrivePrice}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >恶劣天气:</label>
+                                <label>${badWeatherPrice}</label>
+                            </div>
+                        </div>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >实际费用:</label>
+                                <label>${orderMoney}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >实际支付费用:</label>
+                                <label>${payMoney}</label>
+                            </div>
+                        </div>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div class="initialLevel col-sm-2 control-label form-group"  >
+                                <label class="control-label" >优惠券抵扣费用:</label>
+                                <label>${discountedPrice}</label>
+                            </div>
+                            <div class="initialLevel col-sm-3 control-label form-group"  >
+                                <label class="control-label" >支付方式:</label>
+                                @if(payType==1){
+                                <label>微信支付</label>
+                                @}
+                                @if(payType==2){
+                                <label>余额支付</label>
+                                @}
+                                @if(payType==3){
+                                <label>线下收款</label>
+                                @}
+                            </div>
+                        </div>
+
+                        <hr/>
+                        <div class="initialLevel col-sm-12 control-label form-group"  >
+                            <div style="background-color: gray;height: 35px;line-height: 35px">
+                                <label style="color: #0C0C0C">取消记录</label>
+                            </div>
+                        </div>
+                        <hr/>
+
+                        <#table id="TOrderExceptionDetailCancelOrderTable"/>
+
+                        <div class="hidden-xs" id="TDriverTableToolbar" role="group"  style="text-align: center">
+                            <#button name="取消" icon="fa-plus" clickFun="TOrderInfoDlg.closeException()" />
+                        </div>
+
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tOrder/tOrderException.js"></script>
+<script src="${ctxPath}/static/modular/system/tOrder/tOrderExceptionDetailCancelOrder.js"></script>
+<script src="${ctxPath}/static/modular/system/tOrder/tOrder_info.js"></script>
+<script type="text/javascript">
+    $(function (){
+        var queryData = {};
+        queryData['userId'] = $("#userId").val();
+        queryData['orderId'] = $("#orderId").val();
+        TOrderExceptionDetailCancelOrder.table.refresh({query: queryData});
+    })
+    laydate.render({
+        elem: '#createTime',
+        type: 'date',
+        range: true
+    });
+</script>
+@}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tYouTui/tYouTui.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tYouTui/tYouTui.html
new file mode 100644
index 0000000..ec6a562
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tYouTui/tYouTui.html
@@ -0,0 +1,53 @@
+@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="发布时间" />
+                            </div>
+                            <div class="col-sm-2">
+                                <select class="input-group" id="type" style="width: 180px;height: 33px" name="type">
+                                    <option value="">服务类类型</option>
+                                    <option value="1">次数</option>
+                                    <option value="2">小时</option>
+                                </select>
+                            </div>
+                            <div class="col-sm-3">
+                                <#button name="搜索" icon="fa-search" clickFun="TYouTui.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TYouTui.resetSearch()"/>
+                            </div>
+                        </div>
+                        <div class="hidden-xs" id="TYouTuiTableToolbar" role="group">
+                            @if(shiro.hasPermission("/tYouTui/add")){
+                                <#button name="添加" icon="fa-plus" clickFun="TYouTui.openAddTYouTui()"/>
+                            @}
+                            @if(shiro.hasPermission("/tYouTui/update")){
+                                <#button name="修改" icon="fa-edit" clickFun="TYouTui.openTYouTuiDetail()" space="true"/>
+                            @}
+                            @if(shiro.hasPermission("/tYouTui/delete")){
+                                <#button name="删除" icon="fa-remove" clickFun="TYouTui.delete()" space="true"/>
+                            @}
+                        </div>
+                        <#table id="TYouTuiTable"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tYouTui/tYouTui.js"></script>
+<script type="text/javascript">
+    laydate.render({
+        elem: '#createTime',
+        type: 'date',
+        range: true
+    });
+</script>
+@}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tYouTui/tYouTui_add.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tYouTui/tYouTui_add.html
new file mode 100644
index 0000000..1179a3f
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tYouTui/tYouTui_add.html
@@ -0,0 +1,79 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="youTuiInfoForm">
+
+            <div class="row" style="text-align: left">
+                <div class="col-sm-12">
+                    <input hidden id="areaId" value="areaId">
+                    <div class="initialLevel col-sm-12 control-label form-group" style="text-align: center">
+                        <div class="initialLevel col-sm-6 control-label form-group"  >
+                            <span style="color:red">*</span>
+                            <label class="control-label" >优推名称:</label>
+                            <input id="name" name="name" type="text" placeholder="最多20个字" maxlength="20" style="height: 30px" required>
+                        </div>
+                    </div>
+                    <div class="initialLevel col-sm-12 control-label form-group">
+                        <div class="initialLevel col-sm-6 control-label form-group" style="flex: auto" >
+                            <span style="color:red">*</span>
+                            <label class="control-label" >优推类型:</label>
+                            <input id="number" name="number" type="number" placeholder="请输入0以上的数字" min="0" style="height: 30px" required>
+                            <select id="type" name="type" style="height: 30px" required>
+                                <option value="">请选择类型</option>
+                                <option value="1">次数</option>
+                                <option value="2">小时</option>
+                            </select>
+                        </div>
+                    </div>
+
+                    <div class="initialLevel col-sm-12 control-label form-group">
+                        <div class="initialLevel col-sm-6 control-label form-group"  >
+                            <span style="color:red">*</span>
+                            <label class="control-label" >兑换条件:</label>
+                            <input id="integral" name="integral" type="number" max="9999" placeholder="最多4位数" style="height: 30px" required>
+                            <label>积分</label>
+                        </div>
+                    </div>
+
+                    <div class="initialLevel col-sm-12 control-label form-group">
+                        <div class="initialLevel col-sm-6 control-label form-group"  >
+                            <span style="color:red">*</span>
+                            <label class="control-label" >优推距离:</label>
+                            <input id="distance" name="distance" type="number" placeholder="最多2000米" max="2000" style="height: 30px" required>
+                            <label>米</label>
+                        </div>
+                    </div>
+
+                    <div class="initialLevel col-sm-12 control-label form-group">
+                        <div class="initialLevel col-sm-6 control-label form-group"  >
+                            <span style="color:red">*</span>
+                            <label class="control-label" >有效期:</label>
+                            <input id="effectiveTime" name="effectiveTime" maxlength="4" placeholder="最多4位数" type="number" style="height: 30px" required>
+                            <label>天</label>
+                        </div>
+                    </div>
+
+                    <div class="initialLevel col-sm-12 control-label form-group">
+                        <div class="initialLevel col-sm-6 control-label form-group"  >
+                            <span style="color:red">*</span>
+                            <label class="control-label" >服务内容:</label>
+                            <textarea id="serviceContent" name="serviceContent" placeholder="请输入" style="height: 80px" required></textarea>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+
+            <div class="row btn-group-m-t">
+                <div class="col-sm-10" style="text-align: center">
+                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TYouTuiInfoDlg.addSubmit()"/>
+                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TYouTuiInfoDlg.close()"/>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tYouTui/tYouTui_info.js"></script>
+@}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tYouTui/tYouTui_edit.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tYouTui/tYouTui_edit.html
new file mode 100644
index 0000000..d92f6b2
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tYouTui/tYouTui_edit.html
@@ -0,0 +1,34 @@
+@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="主键" value="${item.id}" underline="true"/>
+                            <#input id="name" name="名称" value="${item.name}" underline="true"/>
+                            <#input id="type" name="优推类型(1=次数,2=小时)" value="${item.type}" underline="true"/>
+                            <#input id="number" name="优推值" value="${item.number}" underline="true"/>
+                            <#input id="integral" name="所需积分" value="${item.integral}" />
+                </div>
+
+                <div class="col-sm-6">
+                            <#input id="effectiveTime" name="有效天数" value="${item.effectiveTime}" underline="true"/>
+                            <#input id="content" name="服务内容" value="${item.content}" underline="true"/>
+                            <#input id="status" name="状态(1=正常,2=冻结,3=删除)" value="${item.status}" underline="true"/>
+                            <#input id="createTime" name="添加时间" value="${item.createTime}" />
+                </div>
+            </div>
+
+            <div class="row btn-group-m-t">
+                <div class="col-sm-10">
+                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TYouTuiInfoDlg.editSubmit()"/>
+                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TYouTuiInfoDlg.close()"/>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tYouTui/tYouTui_info.js"></script>
+@}
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tCoupon/tCoupon.js b/management/guns-admin/src/main/webapp/static/modular/system/tCoupon/tCoupon.js
index 01dae4c..3b17e48 100644
--- a/management/guns-admin/src/main/webapp/static/modular/system/tCoupon/tCoupon.js
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tCoupon/tCoupon.js
@@ -64,10 +64,10 @@
             {title: '操作', visible: true, align: 'center', valign: 'middle',width:150,
                 formatter: function (value, row) {
                     if (row.couponState === 1){
-                        return '<a href="#" onclick="TCoupon.stop('+row.id+','+row.couponState+')" style="color:red">停用</a>' +'&nbsp;' +
+                        return '<a href="#" onclick="TCoupon.updateStatus('+row.id+','+row.couponState+')" style="color:red">停用</a>' +'&nbsp;' +
                             '<a href="#" onclick="TCoupon.delete('+row.id+')" style="color:red">删除</a>'
                     }else if (row.couponState === 2){
-                        return '<a href="#" onclick="TCoupon.start('+row.id+','+row.couponState+')" style="color:green">启用</a>' +'&nbsp;' +
+                        return '<a href="#" onclick="TCoupon.updateStatus('+row.id+','+row.couponState+')" style="color:green">启用</a>' +'&nbsp;' +
                             '<a href="#" onclick="TCoupon.delete('+row.id+')" style="color:red">删除</a>'
                     }
                 }
@@ -124,17 +124,33 @@
 /**
  * 删除
  */
-TCoupon.delete = function () {
-    if (this.check()) {
-        var ajax = new $ax(Feng.ctxPath + "/tCoupon/delete", function (data) {
-            Feng.success("删除成功!");
+TCoupon.delete = function (id) {
+    var ajax = new $ax(Feng.ctxPath + "/tCoupon/delete", function (data) {
+        Feng.success("删除成功!");
+        TCoupon.table.refresh();
+    }, function (data) {
+        Feng.error("删除失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set("tCouponId",id);
+    ajax.start();
+};
+
+/**
+ * 提交启用冻结
+ */
+TCoupon.updateStatus = function (id,couponState) {
+    var ajax = new $ax(Feng.ctxPath + "/tCoupon/update-status?id="+id+'&status='+couponState, function (data) {
+        if(500 == data.code){
+            Feng.error(data.message);
+            return;
+        }else {
+            Feng.success("修改成功!");
             TCoupon.table.refresh();
-        }, function (data) {
-            Feng.error("删除失败!" + data.responseJSON.message + "!");
-        });
-        ajax.set("tCouponId",this.seItem.id);
-        ajax.start();
-    }
+        }
+    }, function (data) {
+        Feng.error("修改失败!" + data.message + "!");
+    });
+    ajax.start();
 };
 
 /**
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tCoupon/tCoupon_info.js b/management/guns-admin/src/main/webapp/static/modular/system/tCoupon/tCoupon_info.js
index 5fc5939..635bcba 100644
--- a/management/guns-admin/src/main/webapp/static/modular/system/tCoupon/tCoupon_info.js
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tCoupon/tCoupon_info.js
@@ -2,7 +2,67 @@
  * 初始化详情对话框
  */
 var TCouponInfoDlg = {
-    tCouponInfoData : {}
+    tCouponInfoData : {},
+    validateFields: {
+        couponName: {
+            validators: {
+                notEmpty: {
+                    message: '优惠券名称不能为空'
+                }
+            }
+        },
+        couponType: {
+            validators: {
+                notEmpty: {
+                    message: '优惠券类型不能为空'
+                }
+            }
+        },
+        couponServiceType: {
+            validators: {
+                notEmpty: {
+                    message: '服务类类型不能为空'
+                }
+            }
+        },
+        couponCount: {
+            validators: {
+                notEmpty: {
+                    message: '优惠券数量不能为空'
+                }
+            }
+        },
+        couponConditionalAmount: {
+            validators: {
+                notEmpty: {
+                    message: '条件金额不能为空'
+                }
+            }
+        },
+        couponPreferentialAmount: {
+            validators: {
+                notEmpty: {
+                    message: '优惠金额不能为空'
+                }
+            }
+        },
+        couponValidity: {
+            validators: {
+                notEmpty: {
+                    message: '有效期不能为空'
+                }
+            }
+        },
+    }
+};
+
+/**
+ * 验证数据是否为空
+ */
+TCouponInfoDlg.validate = function () {
+    $('#couponInfoForm').data("bootstrapValidator").resetForm();
+    $('#couponInfoForm').bootstrapValidator('validate');
+    return $("#couponInfoForm").data('bootstrapValidator').isValid();
 };
 
 /**
@@ -65,6 +125,10 @@
     this.clearData();
     this.collectData();
 
+    if(!this.validate()){
+        return ;
+    }
+
     //提交信息
     var ajax = new $ax(Feng.ctxPath + "/tCoupon/add", function(data){
         Feng.success("添加成功!");
@@ -98,5 +162,5 @@
 }
 
 $(function() {
-
+    Feng.initValidator("couponInfoForm", TCouponInfoDlg.validateFields);
 });
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tCancelOrder.js b/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tCancelOrder.js
index ac9cc8d..dc2e55e 100644
--- a/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tCancelOrder.js
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tCancelOrder.js
@@ -41,7 +41,7 @@
             {title: '取消时间', field: 'createTime', visible: true, align: 'center', valign: 'middle'},
         {title: '操作', visible: true, align: 'center', valign: 'middle',width:150,
             formatter: function (value, row) {
-                return '<a href="#" onclick="TCancelOrder.searchTDriverDetail('+row.id+')" style="color:green">详情</a>'
+                return '<a href="#" onclick="TCancelOrder.searchTCancelOrderDetail('+row.id+')" style="color:green">详情</a>'
             }
         }
     ];
@@ -94,6 +94,21 @@
 };
 
 /**
+ * 打开查看详情(使用中)
+ */
+TCancelOrder.searchTCancelOrderDetail = function (id) {
+    var index = layer.open({
+        type: 2,
+        title: '详情',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tCancelOrder/cancelOrderDetail?cancelOrderId=' + id
+    });
+    this.layerIndex = index;
+};
+
+/**
  * 删除
  */
 TCancelOrder.delete = function () {
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrder.js b/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrder.js
index 33033c4..165e28f 100644
--- a/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrder.js
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrder.js
@@ -81,7 +81,7 @@
         {title: '状态', field: 'status', visible: false, align: 'center', valign: 'middle'},
         {title: '操作', visible: true, align: 'center', valign: 'middle',width:150,
             formatter: function (value, row) {
-                return '<a href="#" onclick="TOrder.searchTDriverDetail('+row.id+')" style="color:green">详情</a>'
+                return '<a href="#" onclick="TOrder.searchTOrderDetail('+row.id+')" style="color:green">详情</a>'
             }
         }
     ];
@@ -134,6 +134,21 @@
 };
 
 /**
+ * 打开查看详情(使用中)
+ */
+TOrder.searchTOrderDetail = function (id) {
+    var index = layer.open({
+        type: 2,
+        title: '详情',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tOrder/orderDetail?orderId=' + id
+    });
+    this.layerIndex = index;
+};
+
+/**
  * 删除
  */
 TOrder.delete = function () {
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrderException.js b/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrderException.js
index e2ed33a..1765d0a 100644
--- a/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrderException.js
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrderException.js
@@ -82,10 +82,10 @@
         {title: '操作', visible: true, align: 'center', valign: 'middle',width:150,
             formatter: function (value, row) {
                 if (row.userStatus === 1){
-                    return '<a href="#" onclick="TOrderException.searchTDriverDetail('+row.id+')" style="color:green">详情</a>' +'&nbsp;' +
+                    return '<a href="#" onclick="TOrderException.searchTOrderExceptionDetail('+row.id+')" style="color:green">详情</a>' +'&nbsp;' +
                         '<a href="#" onclick="TOrderException.stop('+row.id+','+row.status+')" style="color:red">冻结</a>'
                 }else if (row.userStatus === 2){
-                    return '<a href="#" onclick="TOrderException.searchTDriverDetail('+row.id+')" style="color:green">详情</a>' +'&nbsp;' +
+                    return '<a href="#" onclick="TOrderException.searchTOrderExceptionDetail('+row.id+')" style="color:green">详情</a>' +'&nbsp;' +
                         '<a href="#" onclick="TOrderException.start('+row.id+','+row.status+')" style="color:green">启用</a>'
                 }
             }
@@ -140,6 +140,21 @@
 };
 
 /**
+ * 打开查看详情(使用中)
+ */
+TOrderException.searchTOrderExceptionDetail = function (id) {
+    var index = layer.open({
+        type: 2,
+        title: '详情',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tOrder/orderExceptionDetail?orderId=' + id
+    });
+    this.layerIndex = index;
+};
+
+/**
  * 删除
  */
 TOrderException.delete = function () {
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrderExceptionDetailCancelOrder.js b/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrderExceptionDetailCancelOrder.js
new file mode 100644
index 0000000..8fd43c5
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tOrder/tOrderExceptionDetailCancelOrder.js
@@ -0,0 +1,137 @@
+/**
+ * 管理初始化
+ */
+var TOrderExceptionDetailCancelOrder = {
+    id: "TOrderExceptionDetailCancelOrderTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+
+/**
+ * 初始化表格的列
+ */
+TOrderExceptionDetailCancelOrder.initColumn = function () {
+    return [
+        {field: 'selectItem', radio: true},
+            {title: '主键', field: 'id', visible: false, align: 'center', valign: 'middle'},
+
+        {title: '下单时间', field: 'placeTime', visible: false, align: 'center', valign: 'middle'},
+        {title: '取消时间', field: 'createTime', visible: true, align: 'center', valign: 'middle'},
+        {title: '订单编号', field: 'code', visible: true, align: 'center', valign: 'middle'},
+        {title: '订单来源', field: 'source', visible: false, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                if (row.source === 1){
+                    return '<span>小程序</span>'
+                }else if (row.source === 2){
+                    return '<span>司机创建</span>'
+                }
+            }},
+        {title: '下单用户昵称', field: 'userName', visible: false, align: 'center', valign: 'middle'},
+        {title: '下单用户手机', field: 'userPhone', visible: false, align: 'center', valign: 'middle'},
+        {title: '起点地址', field: 'startAddress', visible: true, align: 'center', valign: 'middle'},
+        {title: '终点地址', field: 'endAddress', visible: true, align: 'center', valign: 'middle'},
+        {title: '接单司机', field: 'driverName', visible: false, align: 'center', valign: 'middle'},
+
+        {title: '司机电话', field: 'driverPhone', visible: false, align: 'center', valign: 'middle'},
+        {title: '订单id', field: 'orderId', visible: false, align: 'center', valign: 'middle'},
+        {title: '用户类型(1=用户,2=司机)', field: 'userType', visible: false, align: 'center', valign: 'middle'},
+        {title: '用户id', field: 'userId', visible: false, align: 'center', valign: 'middle'},
+        {title: '转单原因', field: 'cause', visible: false, align: 'center', valign: 'middle'},
+        {title: '状态(1=正常,2=冻结,3=删除)', field: 'status', visible: false, align: 'center', valign: 'middle'},
+    ];
+};
+
+/**
+ * 检查是否选中
+ */
+TOrderExceptionDetailCancelOrder.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+        Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TOrderExceptionDetailCancelOrder.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 点击添加
+ */
+TOrderExceptionDetailCancelOrder.openAddTCancelOrder = function () {
+    var index = layer.open({
+        type: 2,
+        title: '添加',
+        area: ['800px', '420px'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tCancelOrder/tCancelOrder_add'
+    });
+    this.layerIndex = index;
+};
+
+/**
+ * 打开查看详情
+ */
+TOrderExceptionDetailCancelOrder.openTCancelOrderDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '详情',
+            area: ['800px', '420px'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tCancelOrder/tCancelOrder_update/' + TCancelOrder.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+/**
+ * 打开查看详情(使用中)
+ */
+TOrderExceptionDetailCancelOrder.searchTCancelOrderDetail = function (id) {
+    var index = layer.open({
+        type: 2,
+        title: '详情',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tCancelOrder/cancelOrderDetail?cancelOrderId=' + id
+    });
+    this.layerIndex = index;
+};
+
+/**
+ * 删除
+ */
+TOrderExceptionDetailCancelOrder.delete = function () {
+    if (this.check()) {
+        var ajax = new $ax(Feng.ctxPath + "/tCancelOrder/delete", function (data) {
+            Feng.success("删除成功!");
+            TCancelOrder.table.refresh();
+        }, function (data) {
+            Feng.error("删除失败!" + data.responseJSON.message + "!");
+        });
+        ajax.set("tCancelOrderId",this.seItem.id);
+        ajax.start();
+    }
+};
+
+/**
+ * 查询列表
+ */
+/*TOrderExceptionDetailCancelOrder.search = function () {
+    var queryData = {};
+    queryData['userId'] = $("#userId").val();
+    queryData['orderId'] = $("#orderId").val();
+    TOrderExceptionDetailCancelOrder.table.refresh({query: queryData});
+};*/
+
+$(function () {
+    var defaultColunms = TOrderExceptionDetailCancelOrder.initColumn();
+    var table = new BSTable(TOrderExceptionDetailCancelOrder.id, "/tCancelOrder/userCancelOrderList", defaultColunms);
+    table.setPaginationType("client");
+    TOrderExceptionDetailCancelOrder.table = table.init();
+});
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tYouTui/tYouTui.js b/management/guns-admin/src/main/webapp/static/modular/system/tYouTui/tYouTui.js
new file mode 100644
index 0000000..59da50f
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tYouTui/tYouTui.js
@@ -0,0 +1,166 @@
+/**
+ * 管理初始化
+ */
+var TYouTui = {
+    id: "TYouTuiTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+
+/**
+ * 初始化表格的列
+ */
+TYouTui.initColumn = function () {
+    return [
+        {field: 'selectItem', radio: true},
+            {title: '主键', field: 'id', visible: false, align: 'center', valign: 'middle'},
+        {title: '添加时间', field: 'createTime', visible: true, align: 'center', valign: 'middle'},
+        {title: '优推名称', field: 'name', visible: true, align: 'center', valign: 'middle'},
+        {title: '服务类型', field: 'type', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                if (row.type === 1){
+                    return row.number+'<span>次</span>'
+                }else if (row.type === 2){
+                    return row.number+'<span>小时</span>'
+                }
+            }
+        },
+        {title: '服务内容', field: 'content', visible: true, align: 'center', valign: 'middle'},
+        {title: '兑换积分数', field: 'integral', visible: true, align: 'center', valign: 'middle'},
+        {title: '优推值', field: 'number', visible: false, align: 'center', valign: 'middle'},
+        {title: '优推距离(米)', field: 'distance', visible: true, align: 'center', valign: 'middle'},
+        {title: '有效期', field: 'effectiveTime', visible: false, align: 'center', valign: 'middle'},
+        {title: '状态', field: 'status', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                if (row.status === 1){
+                    return '<span>正常</span>'
+                }else if (row.status === 2){
+                    return '<span>冻结</span>'
+                }else if (row.status === 3){
+                    return '<span>已删除</span>'
+                }
+            }
+        },
+        {title: '操作', visible: true, align: 'center', valign: 'middle',width:150,
+            formatter: function (value, row) {
+                if (row.status === 1){
+                    return '<a href="#" onclick="TYouTui.updateStatus('+row.id+','+row.status+')" style="color:red">冻结</a>' +'&nbsp;' +
+                        '<a href="#" onclick="TYouTui.delete('+row.id+')" style="color:red">删除</a>'
+                }else if (row.status === 2){
+                    return '<a href="#" onclick="TYouTui.updateStatus('+row.id+','+row.status+')" style="color:green">解冻</a>' +'&nbsp;' +
+                        '<a href="#" onclick="TYouTui.delete('+row.id+')" style="color:red">删除</a>'
+                }
+            }
+        }
+    ];
+};
+
+/**
+ * 检查是否选中
+ */
+TYouTui.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+        Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TYouTui.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 点击添加
+ */
+TYouTui.openAddTYouTui = function () {
+    var index = layer.open({
+        type: 2,
+        title: '添加',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tYouTui/tYouTui_add'
+    });
+    this.layerIndex = index;
+};
+
+/**
+ * 打开查看详情
+ */
+TYouTui.openTYouTuiDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '详情',
+            area: ['800px', '420px'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tYouTui/tYouTui_update/' + TYouTui.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+/**
+ * 删除
+ */
+TYouTui.delete = function (id) {
+    var ajax = new $ax(Feng.ctxPath + "/tYouTui/delete", function (data) {
+        if(500 == data.code){
+            Feng.error(data.message);
+            return;
+        }else {
+            Feng.success("删除成功!");
+            TYouTui.table.refresh();
+        }
+    }, function (data) {
+        Feng.error("删除失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set("tYouTuiId",id);
+    ajax.start();
+};
+
+/**
+ * 提交启用冻结
+ */
+TYouTui.updateStatus = function (id,status) {
+    var ajax = new $ax(Feng.ctxPath + "/tYouTui/update-status?id="+id+'&status='+status, function (data) {
+        if(500 == data.code){
+            Feng.error(data.message);
+            return;
+        }else {
+            Feng.success("修改成功!");
+            TYouTui.table.refresh();
+        }
+    }, function (data) {
+        Feng.error("修改失败!" + data.message + "!");
+    });
+    ajax.start();
+};
+
+/**
+ * 查询列表
+ */
+TYouTui.search = function () {
+    var queryData = {};
+    queryData['createTime'] = $("#createTime").val();
+    queryData['type'] = $("#type").val();
+    TYouTui.table.refresh({query: queryData});
+};
+
+/**
+ * 重置
+ */
+TYouTui.resetSearch = function (){
+    $("#createTime").val('');
+    $("#type").val('');
+    TYouTui.search();
+}
+
+$(function () {
+    var defaultColunms = TYouTui.initColumn();
+    var table = new BSTable(TYouTui.id, "/tYouTui/list", defaultColunms);
+    table.setPaginationType("client");
+    TYouTui.table = table.init();
+});
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tYouTui/tYouTui_info.js b/management/guns-admin/src/main/webapp/static/modular/system/tYouTui/tYouTui_info.js
new file mode 100644
index 0000000..bd32ace
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tYouTui/tYouTui_info.js
@@ -0,0 +1,160 @@
+/**
+ * 初始化详情对话框
+ */
+var TYouTuiInfoDlg = {
+    tYouTuiInfoData : {},
+    validateFields: {
+        name: {
+            validators: {
+                notEmpty: {
+                    message: '优推名称不能为空'
+                }
+            }
+        },
+        type: {
+            validators: {
+                notEmpty: {
+                    message: '优推类型不能为空'
+                }
+            }
+        },
+        integral: {
+            validators: {
+                notEmpty: {
+                    message: '兑换条件不能为空'
+                }
+            }
+        },
+        distance: {
+            validators: {
+                notEmpty: {
+                    message: '优推距离不能为空'
+                }
+            }
+        },
+        effectiveTime: {
+            validators: {
+                notEmpty: {
+                    message: '有效期不能为空'
+                }
+            }
+        },
+        serviceContent: {
+            validators: {
+                notEmpty: {
+                    message: '服务内容不能为空'
+                }
+            }
+        },
+    }
+};
+
+/**
+ * 验证数据是否为空
+ */
+TYouTuiInfoDlg.validate = function () {
+    $('#youTuiInfoForm').data("bootstrapValidator").resetForm();
+    $('#youTuiInfoForm').bootstrapValidator('validate');
+    return $("#youTuiInfoForm").data('bootstrapValidator').isValid();
+};
+
+/**
+ * 清除数据
+ */
+TYouTuiInfoDlg.clearData = function() {
+    this.tYouTuiInfoData = {};
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TYouTuiInfoDlg.set = function(key, val) {
+    this.tYouTuiInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
+    return this;
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TYouTuiInfoDlg.get = function(key) {
+    return $("#" + key).val();
+}
+
+/**
+ * 关闭此对话框
+ */
+TYouTuiInfoDlg.close = function() {
+    parent.layer.close(window.parent.TYouTui.layerIndex);
+}
+
+/**
+ * 收集数据
+ */
+TYouTuiInfoDlg.collectData = function() {
+    this
+    .set('id')
+    .set('name')
+    .set('type')
+    .set('number')
+    .set('integral')
+    .set('effectiveTime')
+    .set('content')
+    .set('status')
+    .set('distance')
+    .set('serviceContent')
+    .set('createTime');
+}
+
+/**
+ * 提交添加
+ */
+TYouTuiInfoDlg.addSubmit = function() {
+
+    this.clearData();
+    this.collectData();
+
+    if(!this.validate()){
+        return ;
+    }
+
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tYouTui/add", function(data){
+        Feng.success("添加成功!");
+        window.parent.TYouTui.table.refresh();
+        TYouTuiInfoDlg.close();
+    },function(data){
+        Feng.error("添加失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tYouTuiInfoData);
+    ajax.start();
+}
+
+/**
+ * 提交修改
+ */
+TYouTuiInfoDlg.editSubmit = function() {
+
+    this.clearData();
+    this.collectData();
+
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tYouTui/update", function(data){
+        Feng.success("修改成功!");
+        window.parent.TYouTui.table.refresh();
+        TYouTuiInfoDlg.close();
+    },function(data){
+        Feng.error("修改失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tYouTuiInfoData);
+    ajax.start();
+}
+
+$(function() {
+    Feng.initValidator("youTuiInfoForm", TYouTuiInfoDlg.validateFields);
+});

--
Gitblit v1.7.1