From 2dfdc0eb73be177e98f9882def2b0cfcb27bd858 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 25 十二月 2024 15:13:10 +0800
Subject: [PATCH] 用户端

---
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OperationLog.java                              |  154 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FeedbackMapper.xml                       |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICompanyService.java                         |    7 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CompanyCityMapper.java                           |   10 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IGDInterfaceService.java                     |   10 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysIntegral.java                               |   62 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/UrlEncoderUtils.java                            |   44 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Invoice.java                                   |  218 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/INettyService.java                           |   30 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserInfoMapper.java                              |   55 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Expense.java                                   |  123 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOperationLogService.java                    |   24 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/VerifiedMapper.xml                       |   16 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/MenuController.java                       |  244 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserActivityRedenvelopeService.java         |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SystemException.java                            |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java                      |  134 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverActivityRegisteredMapper.java              |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java           |   98 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapGeocodingUtil.java                         |  135 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/VerifiedWarpper.java                         |   69 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFeedbackService.java                        |   17 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SensitiveWordsMapper.xml                 |   11 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java                        |  716 +
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICompanyCityService.java                     |   27 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UUIDUtil.java                                   |   78 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserServiceImpl.java                    |   48 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DeptServiceImpl.java                    |   47 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDFalconUtil.java                               |  224 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRedenvelopeMapper.xml        |   39 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/IncomeMapper.java                                |    7 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/IntegralOrder.java                             |  175 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityInvite.java                        |  162 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/AuthService.java                                |   51 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AdvertisementMapper.java                         |   20 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityBusinessService.java                |   30 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/VersionManagementServiceImpl.java       |   30 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CancleOrder.java                               |  104 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCityBusiness.java                          |   45 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java                                   |  405 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SignUtil.java                                   |   41 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAgreementService.java                       |   16 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderPositionService.java                   |   31 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityDiscount1Mapper.xml          |   32 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverWork.java                                |  105 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemNotice.java                              |  147 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityRegistered.java                    |  162 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IncomeMapper.xml                         |   16 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderPositionMapper.java                         |   20 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderPositionMapper.xml                  |   27 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DriverInfoWarpper.java                       |  168 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCancelService.java                     |   48 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IntegralGoodsServiceImpl.java           |   44 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderEvaluateMapper.java                         |   22 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ProblemWarpper.java                          |   78 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml                        |   35 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ComplaintServiceImpl.java               |   58 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityDiscount1.java                     |  134 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDeptService.java                            |   33 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java                  |  180 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/BlackboardController.java                 |   35 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityBalanceMapper.xml            |   74 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/IntegralOrderMapper.java                         |   22 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GeodesyUtil.java                                |   71 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/VersionManagement.java                         |  120 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/DateUtil.java                                   |  133 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SmsrecordServiceImpl.java               |   34 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IIntegralGoodsService.java                   |   21 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderPosition.java                             |  148 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java                                 |  120 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityServiceImpl.java                |   69 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AgreementMapper.xml                      |   27 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CancleOrderMapper.xml                    |   26 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Verified.java                                  |  134 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Agreement.java                                 |   59 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/ReqAddManager.java                          |   76 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IVersionManagementService.java               |   17 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dept.java                                      |  140 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserCouponRecordMapper.xml               |  123 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ServerCarModelMapper.java                        |   22 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ServerCarModelMapper.xml                 |   26 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LoginWarpper.java                            |   68 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDictService.java                            |   48 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RegionMapper.xml                         |   38 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MinistryOfTransport.java                        | 1063 +
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PhoneMapper.java                                 |   31 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CancleOrderMapper.java                           |   18 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OperationLogMapper.java                          |   26 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SendRequestDto.java                             |   42 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ComplaintMapper.java                             |    7 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverWorkMapper.java                            |    7 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/IntegralGoodsWarpper.java                    |   84 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyCityServiceImpl.java             |   71 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderEvaluateWarpper.java                    |   66 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/VerifiedMapper.java                              |    7 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverService.java                             |   62 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverServiceMapper.java                         |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/GDInterfaceServiceImpl.java             |   39 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml                         |  330 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/HMACSHA1.java                                   |   63 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/IntegralGoods.java                             |  148 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITNoticesService.java                        |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/ReqEditManager.java                         |   60 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Phone.java                                     |   90 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Income.java                                    |  134 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IIncomeService.java                          |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Feedback.java                                  |  176 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemNoticeServiceImpl.java            |  115 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/InvoiceWarpper.java                          |  104 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MD5Util.java                                    |   22 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CarService.java                                |   76 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IComplaintService.java                       |   18 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverActivityHistoryMapper.java                 |   24 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/GDInterfaceMapper.xml                    |   18 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ResultUtil.java                                 |  197 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverService.java                          |   64 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityService.java                        |   27 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserCouponRecordServiceImpl.java        |  112 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SmsrecordMapper.xml                      |   14 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java                |  438 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushOrderService.java                       |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderCancelMapper.xml                    |   70 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AdvertisementMapper.xml                  |   43 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityInviteMapper.xml             |   42 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserRedPacketRecordMapper.java                   |   42 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysIntegralMapper.java                           |   10 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityBusinessServiceImpl.java        |  116 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DictMapper.java                                  |   34 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityBalanceMapper.java                   |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityInviteMapper.java                    |   14 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderEvaluateServiceImpl.java           |  117 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RedPacketRecordMapper.java                       |   16 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpClientUtil.java                             |  266 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TNoticesMapper.xml                       |   66 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/AdvertisementWarpper.java                    |  103 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RegionMapper.java                                |   17 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java                      |   41 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/ManagerUser.java                            |   97 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SensitiveWordsMapper.java                        |    7 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MsgUtil.java                                    |   39 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/TravelRecordWarpper.java                     |  101 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityRedenvelopeMapper.java               |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/MenuMapper.xml                           |  177 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRegisteredMapper.xml         |   45 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ServerCarModelWarpper.java                   |  121 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CancleOrderServiceImpl.java             |   30 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/NoticeWrapper.java                           |   26 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OpenCityMapper.java                              |   25 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityHistory.java                     |  145 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DeptWarpper.java                             |   33 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/VersionWarpper.java                          |   84 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/UserMgrController.java                    |  373 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OpenCityBusinessMapper.xml               |   62 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserCouponRecordService.java                |   69 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CarServiceMapper.xml                     |   22 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BaseWarpper.java                             |  146 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java                   |  136 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/ServerCarModel.java                            |  120 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserRedPacketRecord.java                       |  176 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DictServiceImpl.java                    |  101 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MD5AndKL.java                                   |  112 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Relation.java                                  |   75 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CarMapper.xml                            |   71 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/IntegralGoodsMapper.java                         |   17 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRoleService.java                            |   68 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UploadUtil.java                                 |  148 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java                 |  109 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NoticeServiceImpl.java                  |   27 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityRegistered.java                  |  134 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java                     |  405 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAdvertisementService.java                   |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ProblemServiceImpl.java                 |   72 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/BaseBean.java                                  |  107 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SensitiveWords.java                            |   64 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IntegralOrderServiceImpl.java           |   84 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverServiceService.java                   |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOrdersMapper.java                          |   17 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/RoleWarpper.java                             |   27 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ComplaintMapper.xml                      |   17 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IMenuService.java                            |   94 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AgreementMapper.java                             |   16 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OperationLogServiceImpl.java            |   28 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCity.java                                  |  115 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyCityMapper.xml                    |   34 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IProblemService.java                         |   32 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java                   |   76 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderEvaluate.java                             |  136 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ProblemMapper.java                               |   22 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/INoticeService.java                          |   23 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LogWarpper.java                              |   44 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverWorkMapper.xml                     |   14 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/TNoticeWarpper.java                          |   78 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRedPacketRecordMapper.xml            |  103 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOrdersServiceImpl.java            |   50 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IntegralGoodsMapper.xml                  |   39 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOrdersService.java                    |   26 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Role.java                                      |  127 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java                               |  809 +
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java                  |   37 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ALiApiUtil.java                                 |   51 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpTool.java                                   |  137 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Advertisement.java                             |  127 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushOrderMapper.java                             |   20 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRedPacketRecordService.java                 |    8 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/NoticeMapper.java                                |   25 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RelationMapper.java                              |   16 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverServiceMapper.xml                  |   26 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TNotices.java                                  |  235 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceMapper.java                           |   20 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java                                  |  128 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml                     |   34 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Company.java                                   |  694 +
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/UserWarpper.java                             |   29 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RoleServiceImpl.java                    |   73 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/MenuServiceImpl.java                    |   90 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserCouponRecordMapper.java                      |   55 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginLogController.java                   |   69 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Withdrawal.java                                |  220 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedPacketRecordServiceImpl.java         |   18 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OpenCityMapper.xml                       |   61 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRelationService.java                        |   16 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/NoticeMapper.xml                         |   23 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/VersionManagementMapper.xml              |   26 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/JuHeUtil.java                                   |   47 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserMapper.java                                  |   45 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/LoginLogServiceImpl.java                |   28 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OpenCityBusinessMapper.java                      |   29 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISmsrecordService.java                       |   17 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TNoticesMapper.java                              |   30 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml                    |   26 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FeedbackMapper.java                              |    7 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java                            |   22 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderStatusWarpper.java                      |   38 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderEvaluateService.java                   |   31 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IntegralOrderMapper.xml                  |   32 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemNoticeMapper.xml                   |   51 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Region.java                                    |  104 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/RedPacketRecord.java                           |  162 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dict.java                                      |  116 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/OssUploadUtil.java                              |   39 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ILoginLogService.java                        |   24 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICancleOrderService.java                     |   18 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemNoticeMapper.java                          |   47 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/AuthIntercepter.java                            |   37 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java                                   |   59 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/AuthenticationKit.java                          |  233 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RoleMapper.java                                  |   53 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RedPacketRecordMapper.xml                |   35 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/CouponWarpper.java                           |  124 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserMapper.xml                           |   77 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OperationLogMapper.xml                   |   46 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ExpenseMapper.java                               |   16 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysIntegralMapper.xml                    |   17 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushOrderMapper.xml                      |   34 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserActivityBalanceService.java             |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityBalanceServiceImpl.java     |   34 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RelationMapper.xml                       |   12 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityBalance.java                       |  260 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderServerWarpper.java                      |  128 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ApplicationRunnerUtil.java                      |   99 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Car.java                                       |  272 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemNoticeService.java                    |   65 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/EndPushWarpper.java                          |   47 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IIntegralOrderService.java                   |   30 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java              |  161 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ALiSendSms.java                                 |  123 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CompanyMapper.java                               |   18 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ProblemMapper.xml                        |   26 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyServiceImpl.java                 |   12 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityHistoryMapper.xml          |   53 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/DeptController.java                       |  164 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java                            |  267 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/MenuMapper.java                                  |   80 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/VersionManagementMapper.java                     |   17 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserCouponRecord.java                          |  234 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityRedenvelopeServiceImpl.java |   32 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SmsrecordMapper.java                             |    7 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPrice.java                               |   90 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserRedPacketRecordService.java             |   40 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOrdersMapper.xml                   |   25 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IVerifiedService.java                        |   17 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/HashKit.java                                    |  109 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/LoginLogMapper.java                              |   27 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java                           |   30 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceServiceImpl.java           |   31 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyMapper.xml                        |  121 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/Configuration.java                              |   26 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/SystemNoticeWarpper.java                     |  124 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/GDInterfaceMapper.java                           |   12 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderCancelMapper.java                           |   34 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserInfo.java                                  |  361 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/RoleController.java                       |  230 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/InvoiceMapper.java                               |   22 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushOrder.java                                 |  118 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SignVerificationUtil.java                       |  107 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java                | 1211 ++
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderDriverWarpper.java                      |  181 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AdvertisementServiceImpl.java           |   41 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java          |  248 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RelationServiceImpl.java                |   20 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DictWarpper.java                             |   36 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PhoneServiceImpl.java                   |   73 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/VerifiedServiceImpl.java                |   60 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/User.java                                      |  232 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/WithdrawalWarpper.java                       |  101 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CompanyCity.java                               |  104 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/UserDto.java                                |  153 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserRedPacketRecordServiceImpl.java     |   59 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCancelServiceImpl.java             |   84 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DictMapper.xml                           |   42 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FeedbackServiceImpl.java                |   62 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AgreementServiceImpl.java               |   34 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/factory/UserFactory.java                             |   54 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/LoginLog.java                                  |  128 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderEvaluateMapper.xml                  |   26 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ChinaMobileUtil.java                            |  128 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/DictController.java                       |  142 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityRegisteredMapper.java                |   19 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LogController.java                        |   84 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DeptMapper.xml                           |   37 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/LoginLogMapper.xml                       |   41 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PhoneMapper.xml                          |   68 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/UserInfoWarpper.java                         |  183 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DeptMapper.java                                  |   31 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IInvoiceService.java                         |   29 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityDiscount1Mapper.java                 |   11 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushOrderServiceImpl.java               |   31 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TNoticesServiceImpl.java                |   32 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Notice.java                                    |  115 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CarMapper.java                                   |   29 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserActivityRegisteredService.java          |   20 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/NoticeController.java                     |  138 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java                                |   43 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/GDInterface.java                               |   93 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserService.java                            |   46 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Menu.java                                      |  208 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml                       |  192 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java                        |  227 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/MenuWarpper.java                             |   28 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RoleMapper.xml                           |   79 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOrders.java                              |   62 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderCancel.java                               |  178 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Driver.java                                    |  896 +
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityRegisteredServiceImpl.java  |   35 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityRedenvelope.java                   |  162 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPhoneService.java                           |   26 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Smsrecord.java                                 |  106 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ExpenseMapper.xml                        |   20 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ICBCPayUtil.java                                |  673 +
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Complaint.java                                 |  153 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/KaptchaController.java                    |  114 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/IntegralOrderWarpper.java                    |   74 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityRegisteredMapper.xml       |   28 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Problem.java                                   |  134 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CarServiceMapper.java                            |   11 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IServerCarModelService.java                  |   31 
 356 files changed, 32,522 insertions(+), 0 deletions(-)

diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/AuthIntercepter.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/AuthIntercepter.java
new file mode 100644
index 0000000..72de0e6
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/AuthIntercepter.java
@@ -0,0 +1,37 @@
+package com.stylefeng.guns.modular.system.auth;
+
+import com.alibaba.fastjson.JSON;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+public class AuthIntercepter implements HandlerInterceptor {
+	private final static Logger log = LoggerFactory.getLogger(AuthIntercepter.class);
+	
+	@Autowired
+	AuthService authService;
+
+	@Override
+	public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) throws IOException {
+		String appid = req.getParameter("appid");
+		String sign = req.getParameter("sign");
+        ResultUtil resultUtil = authService.checkSyncAuth(appid, sign, req);
+        if (resultUtil.getCode() != 200) {
+			res.setStatus(HttpStatus.OK.value());
+			res.setHeader("Content-type", "text/html;charset=UTF-8");
+			res.getWriter().print(JSON.toJSONString(resultUtil));//Res.Failure("req timeout, please try again")
+			return false;
+		}
+		return true;
+	}
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/AuthService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/AuthService.java
new file mode 100644
index 0000000..03ca925
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/AuthService.java
@@ -0,0 +1,51 @@
+package com.stylefeng.guns.modular.system.auth;
+
+
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.web.util.HtmlUtils;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Service
+public class AuthService {
+	
+	private final static Logger log = LoggerFactory.getLogger(AuthService.class);
+
+	public static final AuthService me = new AuthService();
+	
+	/**
+	 * 鉴权
+	 * @param appid
+	 * @param sign
+	 * @param requset
+	 * @return
+	 */
+	public ResultUtil checkSyncAuth(String appid, String sign, HttpServletRequest requset) {
+		try {
+			if (StringUtils.isBlank(sign)) {
+				return ResultUtil.sign();
+			}
+			// 1.鉴权
+			String signUrl = AuthenticationKit.getSignUrl(requset, "sign");
+			signUrl = signUrl.replaceAll("& #40;", "\\(");
+			signUrl = signUrl.replaceAll("& #41;", "\\)");
+			String signUrlEncode = AuthenticationKit.signUrlEncode(signUrl, appid);
+			if(sign.indexOf(" ") != -1 && signUrlEncode.indexOf("+") != -1){//处理前后端加密差异
+				signUrlEncode = signUrlEncode.replaceAll("\\+", " ");
+			}
+
+			// 签名无
+			if (StringUtils.isBlank(sign) || !sign.equals(signUrlEncode)) {
+				return ResultUtil.sign();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+			return ResultUtil.runErr();
+		}
+		return ResultUtil.success();
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/AuthenticationKit.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/AuthenticationKit.java
new file mode 100644
index 0000000..e64c052
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/AuthenticationKit.java
@@ -0,0 +1,233 @@
+package com.stylefeng.guns.modular.system.auth;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.tomcat.util.codec.binary.Base64;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+
+/**
+ * 
+ * 接口鉴权工具类
+ * 
+ * @author gwx 2017-12-23
+ *
+ */
+public class AuthenticationKit {
+	public static final String utf8="UTF-8";
+	
+	/**
+	 * 返回64 位 token
+	 * 
+	 * @param key 自定义安全字符
+	 * @return
+	 * @throws Exception
+	 */
+	public static String getToken(String key) throws Exception {
+		// 随机生成 32位字符
+		String salt = HashKit.generateSaltForSha256();
+		// 获取当前时间
+		long cur = System.currentTimeMillis();
+		// 生成64位token
+		String access_token = getToken256(key, salt, cur);
+		return access_token;
+	}
+	
+	/**
+	 * 返回64 位 token
+	 * 
+	 * @param key
+	 * @return
+	 * @throws Exception
+	 */
+	public static String getToken256(String key, String salt, long cur) throws Exception {
+		// 生成64位token
+		String access_token = HashKit.sha256(salt + cur + key);
+		return access_token;
+	}
+
+	/**
+	 * 返回到秒
+	 * 
+	 * @return
+	 */
+	public static String createTimestamp() {
+		long l = System.currentTimeMillis();
+		return Long.toString(l / 1000);
+	}
+
+	/**
+	 * 返回noce 不带 短杠"-"
+	 * 
+	 * @return
+	 */
+	public static String createNonceStr() {
+		return getUUID();
+	}
+
+	public static String getUUID() {
+		UUID uuid = UUID.randomUUID();
+		String str = uuid.toString();
+		str = str.replaceAll("-", "");
+		return str;
+	}
+
+	/**
+	 * 组装路径
+	 * 
+	 * @param params
+	 * @return
+	 */
+	public static String localSignParam(Map<String, String> params) {
+		return localSignUrl(null, params, false);
+	}
+
+	
+	/**
+	 * 组装签名路径
+	 * @param url
+	 * @param params
+	 * @return
+	 */
+	public static String localSignUrl(String url, Map<String, String> params, boolean urlEncode) {
+        StringBuilder strBuilder = new StringBuilder();
+//        if(StringUtils.isNotBlank(url) && url.lastIndexOf("?")==-1){
+//        	strBuilder.append(url).append("?");
+//        }
+
+		Set es = params.entrySet();//所有参与传参的参数按照accsii排序(升序)
+		Iterator it = es.iterator();
+		while(it.hasNext()) {
+			Map.Entry entry = (Map.Entry)it.next();
+			String k = (String)entry.getKey();
+			Object v = entry.getValue();
+			if(null != v && !"".equals(v)) {
+				strBuilder.append(k + "=" + v + "&");
+			}
+		}
+		return strBuilder.substring(0, strBuilder.length() - 1);
+
+//        for (String key : params.keySet()) {
+//            if (params.get(key) != null) {
+//            	String lowerKey = key.toLowerCase();
+//            	String encodeKey = lowerKey;
+//            	String encodedValue = params.get(key);
+//                if (urlEncode){
+//                	encodeKey = UrlEncoderUtils.encode(lowerKey);
+//                	encodedValue = UrlEncoderUtils.encode(encodedValue);
+//                }
+//                if (!seeOne) {
+//                	seeOne = true;
+//                } else {
+//                	strBuilder.append("&");
+//                }
+//                strBuilder.append(encodeKey).append("=").append(encodedValue);
+//            }
+//        }
+//        return strBuilder.toString();
+    }
+
+
+	/**
+	 * 加密签名路径生成签名
+	 * 
+	 * @param signUrl
+	 *            /token?appid=12345&timestamp=1512440267&nonce=12345
+	 * @param encryptKey
+	 * @return
+	 * @throws Exception
+	 */
+	public static String signUrlEncode(String signUrl, String encryptKey) throws Exception {
+		byte[] signByte = HMACSHA1.HmacSHA1Encrypt(signUrl, encryptKey);
+		String localSign = Base64.encodeBase64String(signByte);
+		return localSign;
+	}
+
+	/**
+	 * 返回鉴权 签名路径
+	 * 
+	 * @param req
+	 * @return
+	 */
+	public static String getSignUrl(HttpServletRequest req) {
+		return getSignUrl(req,"");
+	}
+
+	/**
+	 * 服务端 获取 客户端请求 组装验证签名
+	 * @param req
+	 * @param delParams 移除不相关 的签名参数
+	 * @return
+	 */
+	public static String getSignUrl(HttpServletRequest req, String... delParams) {
+		// 获取相对的访问路径
+		String url = req.getServletPath();
+		Map<String, String> paramMap = packageRequestGetParams(req);
+		if (paramMap.size() > 0) {
+			// 删除
+			for (int i = 0, len = delParams.length; i < len; i++) {
+				paramMap.remove(delParams[i]);
+			}
+			return localSignUrl(url, paramMap, false);
+		}
+		return null;
+	}
+
+
+	/**
+	 * 组装签名路径 客户端测试用
+	 * @param url api访问地址 "/apid"
+	 * @param appid 
+	 * @return
+	 */
+	public static String getSignUrl(String url, String appid, Map<String, String> queryParas) {
+		Map<String, String> params = new TreeMap<String, String>();
+		params.put("appid", appid);
+		params.put("nonce", createNonceStr());
+		params.put("timestamp", createTimestamp());
+		if(queryParas!=null && queryParas.size()>0){
+			params.putAll(queryParas);
+		}
+		return localSignUrl(url, params, false);
+	}
+	
+	/**
+	 * 组装签名路径 客户端测试用
+	 * @param url api访问地址 "/apid"
+	 * @param appid 
+	 * @return
+	 */
+	public static String getSignUrl(String url, String appid) {
+		return getSignUrl(url, appid, "");
+	}
+	
+	/**
+	 * 
+	 * @param url
+	 * @param appid
+	 * @param params
+	 * @return
+	 */
+	public static String getSignUrl(String url, String appid, String params) {
+		String urlTmp = getSignUrl(url, appid, new HashMap<String,String>());
+		return urlTmp + UrlEncoderUtils.encode(params);
+	}
+
+	/**
+	 * 解析get参数返回treemap
+	 * @param req
+	 * @return
+	 */
+	public static Map<String, String> packageRequestGetParams(
+			HttpServletRequest req) {
+		Map<String, String> paramMap = new TreeMap<String, String>();
+		Enumeration pNames = req.getParameterNames();
+		while (pNames.hasMoreElements()) {
+			String key = (String) pNames.nextElement();
+			String value = req.getParameter(key);
+			paramMap.put(key, value);
+		}
+		return paramMap;
+	}
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/Configuration.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/Configuration.java
new file mode 100644
index 0000000..cd4da6e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/Configuration.java
@@ -0,0 +1,26 @@
+package com.stylefeng.guns.modular.system.auth;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+
+@Component
+public class Configuration implements WebMvcConfigurer {
+
+    @Autowired
+    private AuthIntercepter authIntercepter;
+
+    /**
+     * 重写添加拦截器方法并添加配置拦截器
+     *
+     * @param registry
+     */
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+//        registry.addInterceptor(authIntercepter).addPathPatterns("/api/**")
+//                .excludePathPatterns("/base/**");
+
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/HMACSHA1.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/HMACSHA1.java
new file mode 100644
index 0000000..44b89ef
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/HMACSHA1.java
@@ -0,0 +1,63 @@
+package com.stylefeng.guns.modular.system.auth;
+
+import org.apache.tomcat.util.codec.binary.Base64;
+
+import javax.crypto.Mac;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+
+public class HMACSHA1 {
+
+	private static final String MAC_NAME = "HmacSHA1";
+	private static final String ENCODING = "UTF-8";
+
+	/*
+	 * 展示了一个生成指定算法密钥的过程 初始化HMAC密钥
+	 * 
+	 * @return
+	 * 
+	 * @throws Exception
+	 * 
+	 * public static String initMacKey() throws Exception { //得到一个 指定算法密钥的密钥生成器
+	 * KeyGenerator KeyGenerator keyGenerator
+	 * =KeyGenerator.getInstance(MAC_NAME); //生成一个密钥 SecretKey secretKey
+	 * =keyGenerator.generateKey(); return null; }
+	 */
+
+	/**
+	 * 使用 HMAC-SHA1 签名方法对对encryptText进行签名
+	 * 
+	 * @param encryptText
+	 *            被签名的字符串
+	 * @param encryptKey
+	 *            密钥
+	 * @return
+	 * @throws Exception
+	 */
+	public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {
+		byte[] data = encryptKey.getBytes(ENCODING);
+		// 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
+		Mac mac = Mac.getInstance(MAC_NAME);
+		SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
+		// 生成一个指定 Mac 算法 的 Mac 对象
+		// 用给定密钥初始化 Mac 对象
+		mac.init(secretKey);
+
+		byte[] text = encryptText.getBytes(ENCODING);
+		// 完成 Mac 操作
+		return mac.doFinal(text);
+	}
+
+	public static void main(String[] args) {
+
+		String encryptText = "123";
+		String encryptKey = "adc";
+		try {
+			byte[] b = HmacSHA1Encrypt(encryptText, encryptKey);
+			String str = HashKit.toHex(b);
+			String str2 = new String(Base64.encodeBase64(b));
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/HashKit.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/HashKit.java
new file mode 100644
index 0000000..9c42b0a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/HashKit.java
@@ -0,0 +1,109 @@
+package com.stylefeng.guns.modular.system.auth;
+/**
+ * Copyright (c) 2011-2017, James Zhan 詹波 (jfinal@126.com).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.security.MessageDigest;
+
+public class HashKit {
+
+	public static final long FNV_OFFSET_BASIS_64 = 0xcbf29ce484222325L;
+	public static final long FNV_PRIME_64 = 0x100000001b3L;
+
+	private static final java.security.SecureRandom random = new java.security.SecureRandom();
+	private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
+	private static final char[] CHAR_ARRAY = "_-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+			.toCharArray();
+
+	public static long fnv1a64(String key) {
+		long hash = FNV_OFFSET_BASIS_64;
+		for (int i = 0, size = key.length(); i < size; i++) {
+			hash ^= key.charAt(i);
+			hash *= FNV_PRIME_64;
+		}
+		return hash;
+	}
+
+	public static String md5(String srcStr) {
+		return hash("MD5", srcStr);
+	}
+
+	public static String sha1(String srcStr) {
+		return hash("SHA-1", srcStr);
+	}
+
+	public static String sha256(String srcStr) {
+		return hash("SHA-256", srcStr);
+	}
+
+	public static String sha384(String srcStr) {
+		return hash("SHA-384", srcStr);
+	}
+
+	public static String sha512(String srcStr) {
+		return hash("SHA-512", srcStr);
+	}
+
+	public static String hash(String algorithm, String srcStr) {
+		try {
+			MessageDigest md = MessageDigest.getInstance(algorithm);
+			byte[] bytes = md.digest(srcStr.getBytes("utf-8"));
+			return toHex(bytes);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public static String toHex(byte[] bytes) {
+		StringBuilder ret = new StringBuilder(bytes.length * 2);
+		for (int i = 0; i < bytes.length; i++) {
+			ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
+			ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
+		}
+		return ret.toString();
+	}
+
+	/**
+	 * md5 128bit 16bytes sha1 160bit 20bytes sha256 256bit 32bytes sha384
+	 * 384bit 48bytes sha512 512bit 64bytes
+	 */
+	public static String generateSalt(int saltLength) {
+		StringBuilder salt = new StringBuilder(saltLength);
+		for (int i = 0; i < saltLength; i++) {
+			salt.append(CHAR_ARRAY[random.nextInt(CHAR_ARRAY.length)]);
+		}
+		return salt.toString();
+	}
+
+	public static String generateSaltForSha256() {
+		return generateSalt(32);
+	}
+
+	public static String generateSaltForSha512() {
+		return generateSalt(64);
+	}
+
+	public static boolean slowEquals(byte[] a, byte[] b) {
+		if (a == null || b == null) {
+			return false;
+		}
+
+		int diff = a.length ^ b.length;
+		for (int i = 0; i < a.length && i < b.length; i++) {
+			diff |= a[i] ^ b[i];
+		}
+		return diff == 0;
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/UrlEncoderUtils.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/UrlEncoderUtils.java
new file mode 100644
index 0000000..0bb025b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/auth/UrlEncoderUtils.java
@@ -0,0 +1,44 @@
+package com.stylefeng.guns.modular.system.auth;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+public class UrlEncoderUtils {
+
+    private static final String PATH_DELIMITER = "/";
+    private static final Logger log = LoggerFactory.getLogger(UrlEncoderUtils.class);
+
+    public static String encode(String originUrl) {
+        try {
+            return URLEncoder.encode(originUrl, "UTF-8").replace("+", "%20").replace("*", "%2A")
+                    .replace("%7E", "~");
+        } catch (UnsupportedEncodingException e) {
+            log.error("URLEncoder error, encode utf8, exception: {}", e);
+        }
+        return null;
+    }
+
+    // encode路径, 不包括分隔符
+    public static String encodeEscapeDelimiter(String urlPath) {
+        StringBuilder pathBuilder = new StringBuilder();
+        String[] pathSegmentsArr = urlPath.split(PATH_DELIMITER);
+
+        boolean isFirstSegMent = true;
+        for (String pathSegment : pathSegmentsArr) {
+            if (isFirstSegMent) {
+                pathBuilder.append(encode(pathSegment));
+                isFirstSegMent = false;
+            } else {
+                pathBuilder.append(PATH_DELIMITER).append(encode(pathSegment));
+            }
+        }
+        if (urlPath.endsWith(PATH_DELIMITER)) {
+            pathBuilder.append(PATH_DELIMITER);
+        }
+        return pathBuilder.toString();
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/BlackboardController.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/BlackboardController.java
new file mode 100644
index 0000000..49d2df0
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/BlackboardController.java
@@ -0,0 +1,35 @@
+package com.stylefeng.guns.modular.system.controller;
+
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.modular.system.service.INoticeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 总览信息
+ *
+ * @author fengshuonan
+ * @Date 2017年3月4日23:05:54
+ */
+@Controller
+@RequestMapping("/blackboard")
+public class BlackboardController extends BaseController {
+
+    @Autowired
+    private INoticeService noticeService;
+
+    /**
+     * 跳转到黑板
+     */
+    @RequestMapping("")
+    public String blackboard(Model model) {
+        List<Map<String, Object>> notices = noticeService.list(null);
+        model.addAttribute("noticeList", notices);
+        return "/blackboard.html";
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/DeptController.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/DeptController.java
new file mode 100644
index 0000000..032b0eb
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/DeptController.java
@@ -0,0 +1,164 @@
+package com.stylefeng.guns.modular.system.controller;
+
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.common.annotion.BussinessLog;
+import com.stylefeng.guns.core.common.annotion.Permission;
+import com.stylefeng.guns.core.common.constant.dictmap.DeptDict;
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.exception.GunsException;
+import com.stylefeng.guns.core.log.LogObjectHolder;
+import com.stylefeng.guns.core.node.ZTreeNode;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.model.Dept;
+import com.stylefeng.guns.modular.system.service.IDeptService;
+import com.stylefeng.guns.modular.system.warpper.DeptWarpper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 部门控制器
+ *
+ * @author fengshuonan
+ * @Date 2017年2月17日20:27:22
+ */
+@Controller
+@RequestMapping("/dept")
+public class DeptController extends BaseController {
+
+    private String PREFIX = "/system/dept/";
+
+    @Autowired
+    private IDeptService deptService;
+
+    /**
+     * 跳转到部门管理首页
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "dept.html";
+    }
+
+    /**
+     * 跳转到添加部门
+     */
+    @RequestMapping("/dept_add")
+    public String deptAdd() {
+        return PREFIX + "dept_add.html";
+    }
+
+    /**
+     * 跳转到修改部门
+     */
+    @Permission
+    @RequestMapping("/dept_update/{deptId}")
+    public String deptUpdate(@PathVariable Integer deptId, Model model) {
+        Dept dept = deptService.selectById(deptId);
+        model.addAttribute(dept);
+        model.addAttribute("pName", ConstantFactory.me().getDeptName(dept.getPid()));
+        LogObjectHolder.me().set(dept);
+        return PREFIX + "dept_edit.html";
+    }
+
+    /**
+     * 获取部门的tree列表
+     */
+    @RequestMapping(value = "/tree")
+    @ResponseBody
+    public List<ZTreeNode> tree() {
+        List<ZTreeNode> tree = this.deptService.tree();
+        tree.add(ZTreeNode.createParent());
+        return tree;
+    }
+
+    /**
+     * 新增部门
+     */
+    @BussinessLog(value = "添加部门", key = "simplename", dict = DeptDict.class)
+    @RequestMapping(value = "/add")
+    @Permission
+    @ResponseBody
+    public Object add(Dept dept) {
+        if (ToolUtil.isOneEmpty(dept, dept.getSimplename())) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        //完善pids,根据pid拿到pid的pids
+        deptSetPids(dept);
+        return this.deptService.insert(dept);
+    }
+
+    /**
+     * 获取所有部门列表
+     */
+    @RequestMapping(value = "/list")
+    @Permission
+    @ResponseBody
+    public Object list(String condition) {
+        List<Map<String, Object>> list = this.deptService.list(condition);
+        return super.warpObject(new DeptWarpper(list));
+    }
+
+    /**
+     * 部门详情
+     */
+    @RequestMapping(value = "/detail/{deptId}")
+    @Permission
+    @ResponseBody
+    public Object detail(@PathVariable("deptId") Integer deptId) {
+        return deptService.selectById(deptId);
+    }
+
+    /**
+     * 修改部门
+     */
+    @BussinessLog(value = "修改部门", key = "simplename", dict = DeptDict.class)
+    @RequestMapping(value = "/update")
+    @Permission
+    @ResponseBody
+    public Object update(Dept dept) {
+        if (ToolUtil.isEmpty(dept) || dept.getId() == null) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        deptSetPids(dept);
+        deptService.updateById(dept);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 删除部门
+     */
+    @BussinessLog(value = "删除部门", key = "deptId", dict = DeptDict.class)
+    @RequestMapping(value = "/delete")
+    @Permission
+    @ResponseBody
+    public Object delete(@RequestParam Integer deptId) {
+
+        //缓存被删除的部门名称
+        LogObjectHolder.me().set(ConstantFactory.me().getDeptName(deptId));
+
+        deptService.deleteDept(deptId);
+
+        return SUCCESS_TIP;
+    }
+
+    private void deptSetPids(Dept dept) {
+        if (ToolUtil.isEmpty(dept.getPid()) || dept.getPid().equals(0)) {
+            dept.setPid(0);
+            dept.setPids("[0],");
+        } else {
+            int pid = dept.getPid();
+            Dept temp = deptService.selectById(pid);
+            String pids = temp.getPids();
+            dept.setPid(pid);
+            dept.setPids(pids + "[" + pid + "],");
+        }
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/DictController.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/DictController.java
new file mode 100644
index 0000000..780a39f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/DictController.java
@@ -0,0 +1,142 @@
+package com.stylefeng.guns.modular.system.controller;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.common.annotion.BussinessLog;
+import com.stylefeng.guns.core.common.annotion.Permission;
+import com.stylefeng.guns.core.common.constant.Const;
+import com.stylefeng.guns.core.common.constant.dictmap.DictMap;
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.exception.GunsException;
+import com.stylefeng.guns.core.log.LogObjectHolder;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.model.Dict;
+import com.stylefeng.guns.modular.system.service.IDictService;
+import com.stylefeng.guns.modular.system.warpper.DictWarpper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 字典控制器
+ *
+ * @author fengshuonan
+ * @Date 2017年4月26日 12:55:31
+ */
+@Controller
+@RequestMapping("/dict")
+public class DictController extends BaseController {
+
+    private String PREFIX = "/system/dict/";
+
+    @Autowired
+    private IDictService dictService;
+
+    /**
+     * 跳转到字典管理首页
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "dict.html";
+    }
+
+    /**
+     * 跳转到添加字典
+     */
+    @RequestMapping("/dict_add")
+    public String deptAdd() {
+        return PREFIX + "dict_add.html";
+    }
+
+    /**
+     * 跳转到修改字典
+     */
+    @Permission(Const.ADMIN_NAME)
+    @RequestMapping("/dict_edit/{dictId}")
+    public String deptUpdate(@PathVariable Integer dictId, Model model) {
+        Dict dict = dictService.selectById(dictId);
+        model.addAttribute("dict", dict);
+        List<Dict> subDicts = dictService.selectList(new EntityWrapper<Dict>().eq("pid", dictId));
+        model.addAttribute("subDicts", subDicts);
+        LogObjectHolder.me().set(dict);
+        return PREFIX + "dict_edit.html";
+    }
+
+    /**
+     * 新增字典
+     *
+     * @param dictValues 格式例如   "1:启用;2:禁用;3:冻结"
+     */
+    @BussinessLog(value = "添加字典记录", key = "dictName,dictValues", dict = DictMap.class)
+    @RequestMapping(value = "/add")
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Object add(String dictCode,String dictTips,String dictName, String dictValues) {
+        if (ToolUtil.isOneEmpty(dictCode,dictName, dictValues)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        this.dictService.addDict(dictCode,dictName,dictTips,dictValues);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 获取所有字典列表
+     */
+    @RequestMapping(value = "/list")
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Object list(String condition) {
+        List<Map<String, Object>> list = this.dictService.list(condition);
+        return super.warpObject(new DictWarpper(list));
+    }
+
+    /**
+     * 字典详情
+     */
+    @RequestMapping(value = "/detail/{dictId}")
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Object detail(@PathVariable("dictId") Integer dictId) {
+        return dictService.selectById(dictId);
+    }
+
+    /**
+     * 修改字典
+     */
+    @BussinessLog(value = "修改字典", key = "dictName,dictValues", dict = DictMap.class)
+    @RequestMapping(value = "/update")
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Object update(Integer dictId,String dictCode,String dictName, String dictTips,String dictValues) {
+        if (ToolUtil.isOneEmpty(dictId, dictCode, dictName, dictValues)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        dictService.editDict(dictId, dictCode,dictName, dictTips,dictValues);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 删除字典记录
+     */
+    @BussinessLog(value = "删除字典记录", key = "dictId", dict = DictMap.class)
+    @RequestMapping(value = "/delete")
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Object delete(@RequestParam Integer dictId) {
+
+        //缓存被删除的名称
+        LogObjectHolder.me().set(ConstantFactory.me().getDictName(dictId));
+
+        this.dictService.delteDict(dictId);
+        return SUCCESS_TIP;
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/KaptchaController.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/KaptchaController.java
new file mode 100644
index 0000000..59bab03
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/KaptchaController.java
@@ -0,0 +1,114 @@
+package com.stylefeng.guns.modular.system.controller;
+
+import com.google.code.kaptcha.Constants;
+import com.google.code.kaptcha.Producer;
+import com.stylefeng.guns.config.properties.GunsProperties;
+import com.stylefeng.guns.core.util.FileUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import javax.imageio.ImageIO;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+
+/**
+ * 验证码生成
+ *
+ * @author fengshuonan
+ * @date 2017-05-05 23:10
+ */
+@Controller
+@RequestMapping("/kaptcha")
+public class KaptchaController {
+
+    @Autowired
+    private GunsProperties gunsProperties;
+
+    @Autowired
+    private Producer producer;
+
+    /**
+     * 生成验证码
+     */
+    @RequestMapping("")
+    public void index(HttpServletRequest request, HttpServletResponse response) {
+        HttpSession session = request.getSession();
+
+        response.setDateHeader("Expires", 0);
+
+        // Set standard HTTP/1.1 no-cache headers.
+        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
+
+        // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
+        response.addHeader("Cache-Control", "post-check=0, pre-check=0");
+
+        // Set standard HTTP/1.0 no-cache header.
+        response.setHeader("Pragma", "no-cache");
+
+        // return a jpeg
+        response.setContentType("image/jpeg");
+
+        // create the text for the image
+        String capText = producer.createText();
+
+        // store the text in the session
+        session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
+
+        // create the image with the text
+        BufferedImage bi = producer.createImage(capText);
+        ServletOutputStream out = null;
+        try {
+            out = response.getOutputStream();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        // write the data out
+        try {
+            ImageIO.write(bi, "jpg", out);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        try {
+            try {
+                out.flush();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        } finally {
+            try {
+                out.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 返回图片
+     *
+     * @author stylefeng
+     * @Date 2017/5/24 23:00
+     */
+    @RequestMapping("/{pictureId}")
+    public void renderPicture(@PathVariable("pictureId") String pictureId, HttpServletResponse response) {
+        String path = gunsProperties.getFileUploadPath() + pictureId;
+        try {
+            byte[] bytes = FileUtil.toByteArray(path);
+            response.getOutputStream().write(bytes);
+        } catch (Exception e) {
+            //如果找不到图片就返回一个默认图片
+            try {
+                response.sendRedirect("/static/img/girl.gif");
+            } catch (IOException e1) {
+                e1.printStackTrace();
+            }
+        }
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LogController.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LogController.java
new file mode 100644
index 0000000..a61f929
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LogController.java
@@ -0,0 +1,84 @@
+package com.stylefeng.guns.modular.system.controller;
+
+import com.baomidou.mybatisplus.mapper.SqlRunner;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.common.annotion.BussinessLog;
+import com.stylefeng.guns.core.common.annotion.Permission;
+import com.stylefeng.guns.core.common.constant.Const;
+import com.stylefeng.guns.core.common.constant.factory.PageFactory;
+import com.stylefeng.guns.core.common.constant.state.BizLogType;
+import com.stylefeng.guns.core.support.BeanKit;
+import com.stylefeng.guns.modular.system.model.OperationLog;
+import com.stylefeng.guns.modular.system.service.IOperationLogService;
+import com.stylefeng.guns.modular.system.warpper.LogWarpper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 日志管理的控制器
+ *
+ * @author fengshuonan
+ * @Date 2017年4月5日 19:45:36
+ */
+@Controller
+@RequestMapping("/log")
+public class LogController extends BaseController {
+
+    private static String PREFIX = "/system/log/";
+
+    @Autowired
+    private IOperationLogService operationLogService;
+
+    /**
+     * 跳转到日志管理的首页
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "log.html";
+    }
+
+    /**
+     * 查询操作日志列表
+     */
+    @RequestMapping("/list")
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Object list(@RequestParam(required = false) String beginTime, @RequestParam(required = false) String endTime, @RequestParam(required = false) String logName, @RequestParam(required = false) Integer logType) {
+        Page<OperationLog> page = new PageFactory<OperationLog>().defaultPage();
+        List<Map<String, Object>> result = operationLogService.getOperationLogs(page, beginTime, endTime, logName, BizLogType.valueOf(logType), page.getOrderByField(), page.isAsc());
+        page.setRecords((List<OperationLog>) new LogWarpper(result).warp());
+        return super.packForBT(page);
+    }
+
+    /**
+     * 查询操作日志详情
+     */
+    @RequestMapping("/detail/{id}")
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Object detail(@PathVariable Integer id) {
+        OperationLog operationLog = operationLogService.selectById(id);
+        Map<String, Object> stringObjectMap = BeanKit.beanToMap(operationLog);
+        return super.warpObject(new LogWarpper(stringObjectMap));
+    }
+
+    /**
+     * 清空日志
+     */
+    @BussinessLog(value = "清空业务日志")
+    @RequestMapping("/delLog")
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Object delLog() {
+        SqlRunner.db().delete("delete from sys_operation_log");
+        return SUCCESS_TIP;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java
new file mode 100644
index 0000000..f32483a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginController.java
@@ -0,0 +1,134 @@
+package com.stylefeng.guns.modular.system.controller;
+
+import com.google.code.kaptcha.Constants;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.common.exception.InvalidKaptchaException;
+import com.stylefeng.guns.core.log.LogManager;
+import com.stylefeng.guns.core.log.factory.LogTaskFactory;
+import com.stylefeng.guns.core.node.MenuNode;
+import com.stylefeng.guns.core.shiro.ShiroKit;
+import com.stylefeng.guns.core.shiro.ShiroUser;
+import com.stylefeng.guns.core.util.ApiMenuFilter;
+import com.stylefeng.guns.core.util.KaptchaUtil;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.model.User;
+import com.stylefeng.guns.modular.system.service.IMenuService;
+import com.stylefeng.guns.modular.system.service.IUserService;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.subject.Subject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import java.util.List;
+
+import static com.stylefeng.guns.core.support.HttpKit.getIp;
+
+/**
+ * 登录控制器
+ *
+ * @author fengshuonan
+ * @Date 2017年1月10日 下午8:25:24
+ */
+@Controller
+public class LoginController extends BaseController {
+
+    @Autowired
+    private IMenuService menuService;
+
+    @Autowired
+    private IUserService userService;
+
+    /**
+     * 跳转到主页
+     */
+    @RequestMapping(value = "/", method = RequestMethod.GET)
+    public String index(Model model) {
+        //获取菜单列表
+        List<Integer> roleList = ShiroKit.getUser().getRoleList();
+        if (roleList == null || roleList.size() == 0) {
+            ShiroKit.getSubject().logout();
+            model.addAttribute("tips", "该用户没有角色,无法登陆");
+            return "/login.html";
+        }
+        List<MenuNode> menus = menuService.getMenusByRoleIds(roleList);
+        List<MenuNode> titles = MenuNode.buildTitle(menus);
+        titles = ApiMenuFilter.build(titles);
+
+        model.addAttribute("titles", titles);
+
+        //获取用户头像
+        Integer id = ShiroKit.getUser().getId();
+        User user = userService.selectById(id);
+        String avatar = user.getAvatar();
+        model.addAttribute("avatar", avatar);
+
+        return "/index.html";
+    }
+
+    /**
+     * 跳转到登录页面
+     */
+    @RequestMapping(value = "/login", method = RequestMethod.GET)
+    public String login() {
+        if (ShiroKit.isAuthenticated() || ShiroKit.getUser() != null) {
+            return REDIRECT + "/";
+        } else {
+            return "/login.html";
+        }
+    }
+
+    /**
+     * 点击登录执行的动作
+     */
+    @RequestMapping(value = "/login", method = RequestMethod.POST)
+    public String loginVali() {
+
+        String username = super.getPara("username").trim();
+        String password = super.getPara("password").trim();
+        String remember = super.getPara("remember");
+
+        //验证验证码是否正确
+        if (KaptchaUtil.getKaptchaOnOff()) {
+            String kaptcha = super.getPara("kaptcha").trim();
+            String code = (String) super.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
+            if (ToolUtil.isEmpty(kaptcha) || !kaptcha.equalsIgnoreCase(code)) {
+                throw new InvalidKaptchaException();
+            }
+        }
+
+        Subject currentUser = ShiroKit.getSubject();
+        UsernamePasswordToken token = new UsernamePasswordToken(username, password.toCharArray());
+
+        if ("on".equals(remember)) {
+            token.setRememberMe(true);
+        } else {
+            token.setRememberMe(false);
+        }
+
+        currentUser.login(token);
+
+        ShiroUser shiroUser = ShiroKit.getUser();
+        super.getSession().setAttribute("shiroUser", shiroUser);
+        super.getSession().setAttribute("username", shiroUser.getAccount());
+
+        LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp()));
+
+        ShiroKit.getSession().setAttribute("sessionFlag", true);
+
+        return REDIRECT + "/";
+    }
+
+    /**
+     * 退出登录
+     */
+    @RequestMapping(value = "/logout", method = RequestMethod.GET)
+    public String logOut() {
+        LogManager.me().executeLog(LogTaskFactory.exitLog(ShiroKit.getUser().getId(), getIp()));
+        ShiroKit.getSubject().logout();
+        deleteAllCookie();
+        return REDIRECT + "/login";
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginLogController.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginLogController.java
new file mode 100644
index 0000000..9655379
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/LoginLogController.java
@@ -0,0 +1,69 @@
+package com.stylefeng.guns.modular.system.controller;
+
+import com.baomidou.mybatisplus.mapper.SqlRunner;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.common.annotion.BussinessLog;
+import com.stylefeng.guns.core.common.annotion.Permission;
+import com.stylefeng.guns.core.common.constant.Const;
+import com.stylefeng.guns.core.common.constant.factory.PageFactory;
+import com.stylefeng.guns.modular.system.model.LoginLog;
+import com.stylefeng.guns.modular.system.service.ILoginLogService;
+import com.stylefeng.guns.modular.system.warpper.LogWarpper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 日志管理的控制器
+ *
+ * @author fengshuonan
+ * @Date 2017年4月5日 19:45:36
+ */
+@Controller
+@RequestMapping("/loginLog")
+public class LoginLogController extends BaseController {
+
+    private static String PREFIX = "/system/log/";
+
+    @Autowired
+    private ILoginLogService loginLogService;
+
+    /**
+     * 跳转到日志管理的首页
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "login_log.html";
+    }
+
+    /**
+     * 查询登录日志列表
+     */
+    @RequestMapping("/list")
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Object list(@RequestParam(required = false) String beginTime, @RequestParam(required = false) String endTime, @RequestParam(required = false) String logName) {
+        Page<LoginLog> page = new PageFactory<LoginLog>().defaultPage();
+        List<Map<String, Object>> result = loginLogService.getLoginLogs(page, beginTime, endTime, logName, page.getOrderByField(), page.isAsc());
+        page.setRecords((List<LoginLog>) new LogWarpper(result).warp());
+        return super.packForBT(page);
+    }
+
+    /**
+     * 清空日志
+     */
+    @BussinessLog("清空登录日志")
+    @RequestMapping("/delLoginLog")
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Object delLog() {
+        SqlRunner.db().delete("delete from sys_login_log");
+        return SUCCESS_TIP;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/MenuController.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/MenuController.java
new file mode 100644
index 0000000..37c72fc
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/MenuController.java
@@ -0,0 +1,244 @@
+package com.stylefeng.guns.modular.system.controller;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.base.tips.Tip;
+import com.stylefeng.guns.core.common.annotion.BussinessLog;
+import com.stylefeng.guns.core.common.annotion.Permission;
+import com.stylefeng.guns.core.common.constant.Const;
+import com.stylefeng.guns.core.common.constant.dictmap.MenuDict;
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.core.common.constant.state.MenuStatus;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.exception.GunsException;
+import com.stylefeng.guns.core.log.LogObjectHolder;
+import com.stylefeng.guns.core.node.ZTreeNode;
+import com.stylefeng.guns.core.support.BeanKit;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.model.Menu;
+import com.stylefeng.guns.modular.system.service.IMenuService;
+import com.stylefeng.guns.modular.system.warpper.MenuWarpper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 菜单控制器
+ *
+ * @author fengshuonan
+ * @Date 2017年2月12日21:59:14
+ */
+@Controller
+@RequestMapping("/menu")
+public class MenuController extends BaseController {
+
+    private static String PREFIX = "/system/menu/";
+
+    @Autowired
+    private IMenuService menuService;
+
+    /**
+     * 跳转到菜单列表列表页面
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "menu.html";
+    }
+
+    /**
+     * 跳转到菜单列表列表页面
+     */
+    @RequestMapping(value = "/menu_add")
+    public String menuAdd() {
+        return PREFIX + "menu_add.html";
+    }
+
+    /**
+     * 跳转到菜单详情列表页面
+     */
+    @Permission(Const.ADMIN_NAME)
+    @RequestMapping(value = "/menu_edit/{menuId}")
+    public String menuEdit(@PathVariable Long menuId, Model model) {
+        if (ToolUtil.isEmpty(menuId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        Menu menu = this.menuService.selectById(menuId);
+
+        //获取父级菜单的id
+        Menu temp = new Menu();
+        temp.setCode(menu.getPcode());
+        Menu pMenu = this.menuService.selectOne(new EntityWrapper<>(temp));
+
+        //如果父级是顶级菜单
+        if (pMenu == null) {
+            menu.setPcode("0");
+        } else {
+            //设置父级菜单的code为父级菜单的id
+            menu.setPcode(String.valueOf(pMenu.getId()));
+        }
+
+        Map<String, Object> menuMap = BeanKit.beanToMap(menu);
+        menuMap.put("pcodeName", ConstantFactory.me().getMenuNameByCode(temp.getCode()));
+        model.addAttribute("menu", menuMap);
+        LogObjectHolder.me().set(menu);
+        return PREFIX + "menu_edit.html";
+    }
+
+    /**
+     * 修该菜单
+     */
+    @Permission(Const.ADMIN_NAME)
+    @RequestMapping(value = "/edit")
+    @BussinessLog(value = "修改菜单", key = "name", dict = MenuDict.class)
+    @ResponseBody
+    public Tip edit(@Valid Menu menu, BindingResult result) {
+        if (result.hasErrors()) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        //设置父级菜单编号
+        menuSetPcode(menu);
+
+        this.menuService.updateById(menu);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 获取菜单列表
+     */
+    @Permission(Const.ADMIN_NAME)
+    @RequestMapping(value = "/list")
+    @ResponseBody
+    public Object list(@RequestParam(required = false) String menuName, @RequestParam(required = false) String level) {
+        List<Map<String, Object>> menus = this.menuService.selectMenus(menuName, level);
+        return super.warpObject(new MenuWarpper(menus));
+    }
+
+    /**
+     * 新增菜单
+     */
+    @Permission(Const.ADMIN_NAME)
+    @RequestMapping(value = "/add")
+    @BussinessLog(value = "菜单新增", key = "name", dict = MenuDict.class)
+    @ResponseBody
+    public Tip add(@Valid Menu menu, BindingResult result) {
+        if (result.hasErrors()) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+
+        //判断是否存在该编号
+        String existedMenuName = ConstantFactory.me().getMenuNameByCode(menu.getCode());
+        if (ToolUtil.isNotEmpty(existedMenuName)) {
+            throw new GunsException(BizExceptionEnum.EXISTED_THE_MENU);
+        }
+
+        //设置父级菜单编号
+        menuSetPcode(menu);
+
+        menu.setStatus(MenuStatus.ENABLE.getCode());
+        this.menuService.insert(menu);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 删除菜单
+     */
+    @Permission(Const.ADMIN_NAME)
+    @RequestMapping(value = "/remove")
+    @BussinessLog(value = "删除菜单", key = "menuId", dict = MenuDict.class)
+    @ResponseBody
+    public Tip remove(@RequestParam Long menuId) {
+        if (ToolUtil.isEmpty(menuId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+
+        //缓存菜单的名称
+        LogObjectHolder.me().set(ConstantFactory.me().getMenuName(menuId));
+
+        this.menuService.delMenuContainSubMenus(menuId);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 查看菜单
+     */
+    @RequestMapping(value = "/view/{menuId}")
+    @ResponseBody
+    public Tip view(@PathVariable Long menuId) {
+        if (ToolUtil.isEmpty(menuId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        this.menuService.selectById(menuId);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 获取菜单列表(首页用)
+     */
+    @RequestMapping(value = "/menuTreeList")
+    @ResponseBody
+    public List<ZTreeNode> menuTreeList() {
+        List<ZTreeNode> roleTreeList = this.menuService.menuTreeList();
+        return roleTreeList;
+    }
+
+    /**
+     * 获取菜单列表(选择父级菜单用)
+     */
+    @RequestMapping(value = "/selectMenuTreeList")
+    @ResponseBody
+    public List<ZTreeNode> selectMenuTreeList() {
+        List<ZTreeNode> roleTreeList = this.menuService.menuTreeList();
+        roleTreeList.add(ZTreeNode.createParent());
+        return roleTreeList;
+    }
+
+    /**
+     * 获取角色列表
+     */
+    @RequestMapping(value = "/menuTreeListByRoleId/{roleId}")
+    @ResponseBody
+    public List<ZTreeNode> menuTreeListByRoleId(@PathVariable Integer roleId) {
+        List<Long> menuIds = this.menuService.getMenuIdsByRoleId(roleId);
+        if (ToolUtil.isEmpty(menuIds)) {
+            List<ZTreeNode> roleTreeList = this.menuService.menuTreeList();
+            return roleTreeList;
+        } else {
+            List<ZTreeNode> roleTreeListByUserId = this.menuService.menuTreeListByMenuIds(menuIds);
+            return roleTreeListByUserId;
+        }
+    }
+
+    /**
+     * 根据请求的父级菜单编号设置pcode和层级
+     */
+    private void menuSetPcode(@Valid Menu menu) {
+        if (ToolUtil.isEmpty(menu.getPcode()) || menu.getPcode().equals("0")) {
+            menu.setPcode("0");
+            menu.setPcodes("[0],");
+            menu.setLevels(1);
+        } else {
+            long code = Long.parseLong(menu.getPcode());
+            Menu pMenu = menuService.selectById(code);
+            Integer pLevels = pMenu.getLevels();
+            menu.setPcode(pMenu.getCode());
+
+            //如果编号和父编号一致会导致无限递归
+            if (menu.getCode().equals(menu.getPcode())) {
+                throw new GunsException(BizExceptionEnum.MENU_PCODE_COINCIDENCE);
+            }
+
+            menu.setLevels(pLevels + 1);
+            menu.setPcodes(pMenu.getPcodes() + "[" + pMenu.getCode() + "],");
+        }
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/NoticeController.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/NoticeController.java
new file mode 100644
index 0000000..7211823
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/NoticeController.java
@@ -0,0 +1,138 @@
+package com.stylefeng.guns.modular.system.controller;
+
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.common.annotion.BussinessLog;
+import com.stylefeng.guns.core.common.constant.dictmap.NoticeMap;
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.exception.GunsException;
+import com.stylefeng.guns.core.log.LogObjectHolder;
+import com.stylefeng.guns.core.shiro.ShiroKit;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.model.Notice;
+import com.stylefeng.guns.modular.system.service.INoticeService;
+import com.stylefeng.guns.modular.system.warpper.NoticeWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 通知控制器
+ *
+ * @author fengshuonan
+ * @Date 2017-05-09 23:02:21
+ */
+@Controller
+@RequestMapping("/notice")
+public class NoticeController extends BaseController {
+
+    private String PREFIX = "/system/notice/";
+
+    @Autowired
+    private INoticeService noticeService;
+
+    /**
+     * 跳转到通知列表首页
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "notice.html";
+    }
+
+    /**
+     * 跳转到添加通知
+     */
+    @RequestMapping("/notice_add")
+    public String noticeAdd() {
+        return PREFIX + "notice_add.html";
+    }
+
+    /**
+     * 跳转到修改通知
+     */
+    @RequestMapping("/notice_update/{noticeId}")
+    public String noticeUpdate(@PathVariable Integer noticeId, Model model) {
+        Notice notice = this.noticeService.selectById(noticeId);
+        model.addAttribute("notice",notice);
+        LogObjectHolder.me().set(notice);
+        return PREFIX + "notice_edit.html";
+    }
+
+    /**
+     * 跳转到首页通知
+     */
+    @RequestMapping("/hello")
+    public String hello() {
+        List<Map<String, Object>> notices = noticeService.list(null);
+        super.setAttr("noticeList",notices);
+        return "/blackboard.html";
+    }
+
+    /**
+     * 获取通知列表
+     */
+    @RequestMapping(value = "/list")
+    @ResponseBody
+    public Object list(String condition) {
+        List<Map<String, Object>> list = this.noticeService.list(condition);
+        return super.warpObject(new NoticeWrapper(list));
+    }
+
+    /**
+     * 新增通知
+     */
+    @RequestMapping(value = "/add")
+    @ResponseBody
+    @BussinessLog(value = "新增通知",key = "title",dict = NoticeMap.class)
+    public Object add(Notice notice) {
+        if (ToolUtil.isOneEmpty(notice, notice.getTitle(), notice.getContent())) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        notice.setCreater(ShiroKit.getUser().getId());
+        notice.setCreatetime(new Date());
+        notice.insert();
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 删除通知
+     */
+    @RequestMapping(value = "/delete")
+    @ResponseBody
+    @BussinessLog(value = "删除通知",key = "noticeId",dict = NoticeMap.class)
+    public Object delete(@RequestParam Integer noticeId) {
+
+        //缓存通知名称
+        LogObjectHolder.me().set(ConstantFactory.me().getNoticeTitle(noticeId));
+
+        this.noticeService.deleteById(noticeId);
+
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 修改通知
+     */
+    @RequestMapping(value = "/update")
+    @ResponseBody
+    @BussinessLog(value = "修改通知",key = "title",dict = NoticeMap.class)
+    public Object update(Notice notice) {
+        if (ToolUtil.isOneEmpty(notice, notice.getId(), notice.getTitle(), notice.getContent())) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        Notice old = this.noticeService.selectById(notice.getId());
+        old.setTitle(notice.getTitle());
+        old.setContent(notice.getContent());
+        old.updateById();
+        return SUCCESS_TIP;
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/RoleController.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/RoleController.java
new file mode 100644
index 0000000..6e7893d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/RoleController.java
@@ -0,0 +1,230 @@
+package com.stylefeng.guns.modular.system.controller;
+
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.base.tips.Tip;
+import com.stylefeng.guns.core.cache.CacheKit;
+import com.stylefeng.guns.core.common.annotion.BussinessLog;
+import com.stylefeng.guns.core.common.annotion.Permission;
+import com.stylefeng.guns.core.common.constant.Const;
+import com.stylefeng.guns.core.common.constant.cache.Cache;
+import com.stylefeng.guns.core.common.constant.dictmap.RoleDict;
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.exception.GunsException;
+import com.stylefeng.guns.core.log.LogObjectHolder;
+import com.stylefeng.guns.core.node.ZTreeNode;
+import com.stylefeng.guns.core.util.Convert;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.model.Role;
+import com.stylefeng.guns.modular.system.model.User;
+import com.stylefeng.guns.modular.system.service.IRoleService;
+import com.stylefeng.guns.modular.system.service.IUserService;
+import com.stylefeng.guns.modular.system.warpper.RoleWarpper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 角色控制器
+ *
+ * @author fengshuonan
+ * @Date 2017年2月12日21:59:14
+ */
+@Controller
+@RequestMapping("/role")
+public class RoleController extends BaseController {
+
+    private static String PREFIX = "/system/role";
+
+    @Autowired
+    private IUserService userService;
+
+    @Autowired
+    private IRoleService roleService;
+
+    /**
+     * 跳转到角色列表页面
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "/role.html";
+    }
+
+    /**
+     * 跳转到添加角色
+     */
+    @RequestMapping(value = "/role_add")
+    public String roleAdd() {
+        return PREFIX + "/role_add.html";
+    }
+
+    /**
+     * 跳转到修改角色
+     */
+    @Permission
+    @RequestMapping(value = "/role_edit/{roleId}")
+    public String roleEdit(@PathVariable Integer roleId, Model model) {
+        if (ToolUtil.isEmpty(roleId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        Role role = this.roleService.selectById(roleId);
+        model.addAttribute(role);
+        model.addAttribute("pName", ConstantFactory.me().getSingleRoleName(role.getPid()));
+        model.addAttribute("deptName", ConstantFactory.me().getDeptName(role.getDeptid()));
+        LogObjectHolder.me().set(role);
+        return PREFIX + "/role_edit.html";
+    }
+
+    /**
+     * 跳转到角色分配
+     */
+    @Permission
+    @RequestMapping(value = "/role_assign/{roleId}")
+    public String roleAssign(@PathVariable("roleId") Integer roleId, Model model) {
+        if (ToolUtil.isEmpty(roleId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        model.addAttribute("roleId", roleId);
+        model.addAttribute("roleName", ConstantFactory.me().getSingleRoleName(roleId));
+        return PREFIX + "/role_assign.html";
+    }
+
+    /**
+     * 获取角色列表
+     */
+    @Permission
+    @RequestMapping(value = "/list")
+    @ResponseBody
+    public Object list(@RequestParam(required = false) String roleName) {
+        List<Map<String, Object>> roles = this.roleService.selectRoles(super.getPara("roleName"));
+        return super.warpObject(new RoleWarpper(roles));
+    }
+
+    /**
+     * 角色新增
+     */
+    @RequestMapping(value = "/add")
+    @BussinessLog(value = "添加角色", key = "name", dict = RoleDict.class)
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Tip add(@Valid Role role, BindingResult result) {
+        if (result.hasErrors()) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        role.setId(null);
+        this.roleService.insert(role);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 角色修改
+     */
+    @RequestMapping(value = "/edit")
+    @BussinessLog(value = "修改角色", key = "name", dict = RoleDict.class)
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Tip edit(@Valid Role role, BindingResult result) {
+        if (result.hasErrors()) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        this.roleService.updateById(role);
+
+        //删除缓存
+        CacheKit.removeAll(Cache.CONSTANT);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 删除角色
+     */
+    @RequestMapping(value = "/remove")
+    @BussinessLog(value = "删除角色", key = "roleId", dict = RoleDict.class)
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Tip remove(@RequestParam Integer roleId) {
+        if (ToolUtil.isEmpty(roleId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+
+        //不能删除超级管理员角色
+        if (roleId.equals(Const.ADMIN_ROLE_ID)) {
+            throw new GunsException(BizExceptionEnum.CANT_DELETE_ADMIN);
+        }
+
+        //缓存被删除的角色名称
+        LogObjectHolder.me().set(ConstantFactory.me().getSingleRoleName(roleId));
+
+        this.roleService.delRoleById(roleId);
+
+        //删除缓存
+        CacheKit.removeAll(Cache.CONSTANT);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 查看角色
+     */
+    @RequestMapping(value = "/view/{roleId}")
+    @ResponseBody
+    public Tip view(@PathVariable Integer roleId) {
+        if (ToolUtil.isEmpty(roleId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        this.roleService.selectById(roleId);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 配置权限
+     */
+    @RequestMapping("/setAuthority")
+    @BussinessLog(value = "配置权限", key = "roleId,ids", dict = RoleDict.class)
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Tip setAuthority(@RequestParam("roleId") Integer roleId, @RequestParam("ids") String ids) {
+        if (ToolUtil.isOneEmpty(roleId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        this.roleService.setAuthority(roleId, ids);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 获取角色列表
+     */
+    @RequestMapping(value = "/roleTreeList")
+    @ResponseBody
+    public List<ZTreeNode> roleTreeList() {
+        List<ZTreeNode> roleTreeList = this.roleService.roleTreeList();
+        roleTreeList.add(ZTreeNode.createParent());
+        return roleTreeList;
+    }
+
+    /**
+     * 获取角色列表
+     */
+    @RequestMapping(value = "/roleTreeListByUserId/{userId}")
+    @ResponseBody
+    public List<ZTreeNode> roleTreeListByUserId(@PathVariable Integer userId) {
+        User theUser = this.userService.selectById(userId);
+        String roleid = theUser.getRoleid();
+        if (ToolUtil.isEmpty(roleid)) {
+            List<ZTreeNode> roleTreeList = this.roleService.roleTreeList();
+            return roleTreeList;
+        } else {
+            String[] strArray = Convert.toStrArray(",", roleid);
+            List<ZTreeNode> roleTreeListByUserId = this.roleService.roleTreeListByRoleId(strArray);
+            return roleTreeListByUserId;
+        }
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/UserMgrController.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/UserMgrController.java
new file mode 100644
index 0000000..b84703f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/UserMgrController.java
@@ -0,0 +1,373 @@
+package com.stylefeng.guns.modular.system.controller;
+
+import com.stylefeng.guns.config.properties.GunsProperties;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.base.tips.Tip;
+import com.stylefeng.guns.core.common.annotion.BussinessLog;
+import com.stylefeng.guns.core.common.annotion.Permission;
+import com.stylefeng.guns.core.common.constant.Const;
+import com.stylefeng.guns.core.common.constant.dictmap.UserDict;
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.core.common.constant.state.ManagerStatus;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.datascope.DataScope;
+import com.stylefeng.guns.core.db.Db;
+import com.stylefeng.guns.core.exception.GunsException;
+import com.stylefeng.guns.core.log.LogObjectHolder;
+import com.stylefeng.guns.core.shiro.ShiroKit;
+import com.stylefeng.guns.core.shiro.ShiroUser;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.dao.UserMapper;
+import com.stylefeng.guns.modular.system.factory.UserFactory;
+import com.stylefeng.guns.modular.system.model.User;
+import com.stylefeng.guns.modular.system.service.IUserService;
+import com.stylefeng.guns.modular.system.transfer.UserDto;
+import com.stylefeng.guns.modular.system.warpper.UserWarpper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.naming.NoPermissionException;
+import javax.validation.Valid;
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * 系统管理员控制器
+ *
+ * @author fengshuonan
+ * @Date 2017年1月11日 下午1:08:17
+ */
+@Controller
+@RequestMapping("/mgr")
+public class UserMgrController extends BaseController {
+
+    private static String PREFIX = "/system/user/";
+
+    @Autowired
+    private GunsProperties gunsProperties;
+
+    @Autowired
+    private IUserService userService;
+
+    /**
+     * 跳转到查看管理员列表的页面
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "user.html";
+    }
+
+    /**
+     * 跳转到查看管理员列表的页面
+     */
+    @RequestMapping("/user_add")
+    public String addView() {
+        return PREFIX + "user_add.html";
+    }
+
+    /**
+     * 跳转到角色分配页面
+     */
+    //@RequiresPermissions("/mgr/role_assign")  //利用shiro自带的权限检查
+    @Permission
+    @RequestMapping("/role_assign/{userId}")
+    public String roleAssign(@PathVariable Integer userId, Model model) {
+        if (ToolUtil.isEmpty(userId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        User user = (User) Db.create(UserMapper.class).selectOneByCon("id", userId);
+        model.addAttribute("userId", userId);
+        model.addAttribute("userAccount", user.getAccount());
+        return PREFIX + "user_roleassign.html";
+    }
+
+    /**
+     * 跳转到编辑管理员页面
+     */
+    @Permission
+    @RequestMapping("/user_edit/{userId}")
+    public String userEdit(@PathVariable Integer userId, Model model) {
+        if (ToolUtil.isEmpty(userId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        assertAuth(userId);
+        User user = this.userService.selectById(userId);
+        model.addAttribute(user);
+        model.addAttribute("roleName", ConstantFactory.me().getRoleName(user.getRoleid()));
+        model.addAttribute("deptName", ConstantFactory.me().getDeptName(user.getDeptid()));
+        LogObjectHolder.me().set(user);
+        return PREFIX + "user_edit.html";
+    }
+
+    /**
+     * 跳转到查看用户详情页面
+     */
+    @RequestMapping("/user_info")
+    public String userInfo(Model model) {
+        Integer userId = ShiroKit.getUser().getId();
+        if (ToolUtil.isEmpty(userId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        User user = this.userService.selectById(userId);
+        model.addAttribute(user);
+        model.addAttribute("roleName", ConstantFactory.me().getRoleName(user.getRoleid()));
+        model.addAttribute("deptName", ConstantFactory.me().getDeptName(user.getDeptid()));
+        LogObjectHolder.me().set(user);
+        return PREFIX + "user_view.html";
+    }
+
+    /**
+     * 跳转到修改密码界面
+     */
+    @RequestMapping("/user_chpwd")
+    public String chPwd() {
+        return PREFIX + "user_chpwd.html";
+    }
+
+    /**
+     * 修改当前用户的密码
+     */
+    @RequestMapping("/changePwd")
+    @ResponseBody
+    public Object changePwd(@RequestParam String oldPwd, @RequestParam String newPwd, @RequestParam String rePwd) {
+        if (!newPwd.equals(rePwd)) {
+            throw new GunsException(BizExceptionEnum.TWO_PWD_NOT_MATCH);
+        }
+        Integer userId = ShiroKit.getUser().getId();
+        User user = userService.selectById(userId);
+        String oldMd5 = ShiroKit.md5(oldPwd, user.getSalt());
+        if (user.getPassword().equals(oldMd5)) {
+            String newMd5 = ShiroKit.md5(newPwd, user.getSalt());
+            user.setPassword(newMd5);
+            user.updateById();
+            return SUCCESS_TIP;
+        } else {
+            throw new GunsException(BizExceptionEnum.OLD_PWD_NOT_RIGHT);
+        }
+    }
+
+    /**
+     * 查询管理员列表
+     */
+    @RequestMapping("/list")
+    @Permission
+    @ResponseBody
+    public Object list(@RequestParam(required = false) String name, @RequestParam(required = false) String beginTime, @RequestParam(required = false) String endTime, @RequestParam(required = false) Integer deptid) {
+        if (ShiroKit.isAdmin()) {
+            List<Map<String, Object>> users = userService.selectUsers(null, name, beginTime, endTime, deptid);
+            return new UserWarpper(users).warp();
+        } else {
+            DataScope dataScope = new DataScope(ShiroKit.getDeptDataScope());
+            List<Map<String, Object>> users = userService.selectUsers(dataScope, name, beginTime, endTime, deptid);
+            return new UserWarpper(users).warp();
+        }
+    }
+
+    /**
+     * 添加管理员
+     */
+    @RequestMapping("/add")
+    @BussinessLog(value = "添加管理员", key = "account", dict = UserDict.class)
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Tip add(@Valid UserDto user, BindingResult result) {
+        if (result.hasErrors()) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+
+        // 判断账号是否重复
+        User theUser = userService.getByAccount(user.getAccount());
+        if (theUser != null) {
+            throw new GunsException(BizExceptionEnum.USER_ALREADY_REG);
+        }
+
+        // 完善账号信息
+        user.setSalt(ShiroKit.getRandomSalt(5));
+        user.setPassword(ShiroKit.md5(user.getPassword(), user.getSalt()));
+        user.setStatus(ManagerStatus.OK.getCode());
+        user.setCreatetime(new Date());
+
+        this.userService.insert(UserFactory.createUser(user));
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 修改管理员
+     *
+     * @throws NoPermissionException
+     */
+    @RequestMapping("/edit")
+    @BussinessLog(value = "修改管理员", key = "account", dict = UserDict.class)
+    @ResponseBody
+    public Tip edit(@Valid UserDto user, BindingResult result) throws NoPermissionException {
+        if (result.hasErrors()) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+
+        User oldUser = userService.selectById(user.getId());
+
+        if (ShiroKit.hasRole(Const.ADMIN_NAME)) {
+            this.userService.updateById(UserFactory.editUser(user, oldUser));
+            return SUCCESS_TIP;
+        } else {
+            assertAuth(user.getId());
+            ShiroUser shiroUser = ShiroKit.getUser();
+            if (shiroUser.getId().equals(user.getId())) {
+                this.userService.updateById(UserFactory.editUser(user, oldUser));
+                return SUCCESS_TIP;
+            } else {
+                throw new GunsException(BizExceptionEnum.NO_PERMITION);
+            }
+        }
+    }
+
+    /**
+     * 删除管理员(逻辑删除)
+     */
+    @RequestMapping("/delete")
+    @BussinessLog(value = "删除管理员", key = "userId", dict = UserDict.class)
+    @Permission
+    @ResponseBody
+    public Tip delete(@RequestParam Integer userId) {
+        if (ToolUtil.isEmpty(userId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        //不能删除超级管理员
+        if (userId.equals(Const.ADMIN_ID)) {
+            throw new GunsException(BizExceptionEnum.CANT_DELETE_ADMIN);
+        }
+        assertAuth(userId);
+        this.userService.setStatus(userId, ManagerStatus.DELETED.getCode());
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 查看管理员详情
+     */
+    @RequestMapping("/view/{userId}")
+    @ResponseBody
+    public User view(@PathVariable Integer userId) {
+        if (ToolUtil.isEmpty(userId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        assertAuth(userId);
+        return this.userService.selectById(userId);
+    }
+
+    /**
+     * 重置管理员的密码
+     */
+    @RequestMapping("/reset")
+    @BussinessLog(value = "重置管理员密码", key = "userId", dict = UserDict.class)
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Tip reset(@RequestParam Integer userId) {
+        if (ToolUtil.isEmpty(userId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        assertAuth(userId);
+        User user = this.userService.selectById(userId);
+        user.setSalt(ShiroKit.getRandomSalt(5));
+        user.setPassword(ShiroKit.md5(Const.DEFAULT_PWD, user.getSalt()));
+        this.userService.updateById(user);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 冻结用户
+     */
+    @RequestMapping("/freeze")
+    @BussinessLog(value = "冻结用户", key = "userId", dict = UserDict.class)
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Tip freeze(@RequestParam Integer userId) {
+        if (ToolUtil.isEmpty(userId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        //不能冻结超级管理员
+        if (userId.equals(Const.ADMIN_ID)) {
+            throw new GunsException(BizExceptionEnum.CANT_FREEZE_ADMIN);
+        }
+        assertAuth(userId);
+        this.userService.setStatus(userId, ManagerStatus.FREEZED.getCode());
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 解除冻结用户
+     */
+    @RequestMapping("/unfreeze")
+    @BussinessLog(value = "解除冻结用户", key = "userId", dict = UserDict.class)
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Tip unfreeze(@RequestParam Integer userId) {
+        if (ToolUtil.isEmpty(userId)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        assertAuth(userId);
+        this.userService.setStatus(userId, ManagerStatus.OK.getCode());
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 分配角色
+     */
+    @RequestMapping("/setRole")
+    @BussinessLog(value = "分配角色", key = "userId,roleIds", dict = UserDict.class)
+    @Permission(Const.ADMIN_NAME)
+    @ResponseBody
+    public Tip setRole(@RequestParam("userId") Integer userId, @RequestParam("roleIds") String roleIds) {
+        if (ToolUtil.isOneEmpty(userId, roleIds)) {
+            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
+        }
+        //不能修改超级管理员
+        if (userId.equals(Const.ADMIN_ID)) {
+            throw new GunsException(BizExceptionEnum.CANT_CHANGE_ADMIN);
+        }
+        assertAuth(userId);
+        this.userService.setRoles(userId, roleIds);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 上传图片
+     */
+    @RequestMapping(method = RequestMethod.POST, path = "/upload")
+    @ResponseBody
+    public String upload(@RequestPart("file") MultipartFile picture) {
+
+        String pictureName = UUID.randomUUID().toString() + "." + ToolUtil.getFileSuffix(picture.getOriginalFilename());
+        try {
+            String fileSavePath = gunsProperties.getFileUploadPath();
+            picture.transferTo(new File(fileSavePath + pictureName));
+        } catch (Exception e) {
+            throw new GunsException(BizExceptionEnum.UPLOAD_ERROR);
+        }
+        return pictureName;
+    }
+
+    /**
+     * 判断当前登录的用户是否有操作这个用户的权限
+     */
+    private void assertAuth(Integer userId) {
+        if (ShiroKit.isAdmin()) {
+            return;
+        }
+        List<Integer> deptDataScope = ShiroKit.getDeptDataScope();
+        User user = this.userService.selectById(userId);
+        Integer deptid = user.getDeptid();
+        if (deptDataScope.contains(deptid)) {
+            return;
+        } else {
+            throw new GunsException(BizExceptionEnum.NO_PERMITION);
+        }
+
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AdvertisementMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AdvertisementMapper.java
new file mode 100644
index 0000000..cc3795d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AdvertisementMapper.java
@@ -0,0 +1,20 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Advertisement;
+import com.stylefeng.guns.modular.system.warpper.AdvertisementWarpper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface AdvertisementMapper extends BaseMapper<Advertisement> {
+
+
+    /**
+     * 获取广告
+     * @param type  广告类型(1:弹窗广告,2:底部广告)
+     * @return
+     * @throws Exception
+     */
+    List<AdvertisementWarpper> queryAdvertisement(@Param("code") String code, @Param("type") Integer type);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AgreementMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AgreementMapper.java
new file mode 100644
index 0000000..aab92db
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AgreementMapper.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Agreement;
+import org.apache.ibatis.annotations.Param;
+
+public interface AgreementMapper extends BaseMapper<Agreement> {
+
+
+    /**
+     * 获取协议内容
+     * @param type
+     * @return
+     */
+    String queryByType(@Param("type") Integer type, @Param("useType") Integer useType);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CancleOrderMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CancleOrderMapper.java
new file mode 100644
index 0000000..178b7c5
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CancleOrderMapper.java
@@ -0,0 +1,18 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.CancleOrder;
+import org.apache.ibatis.annotations.Param;
+
+public interface CancleOrderMapper extends BaseMapper<CancleOrder> {
+
+
+    /**
+     * 获取取消订单配置
+     * @param type
+     * @param orderType
+     * @return
+     */
+    CancleOrder query(@Param("type") Integer type, @Param("orderType") Integer orderType,
+                      @Param("companyId") Integer companyId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CarMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CarMapper.java
new file mode 100644
index 0000000..a815807
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CarMapper.java
@@ -0,0 +1,29 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Car;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface CarMapper extends BaseMapper<Car> {
+
+
+    /**
+     * 获取空闲车辆
+     * @param companyId
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> queryIdleData(@Param("companyId") Integer companyId) throws Exception;
+
+
+    /**
+     * 车牌查询
+     * @param licensePlate
+     * @return
+     * @throws Exception
+     */
+    Car query(@Param("licensePlate") String licensePlate) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CarServiceMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CarServiceMapper.java
new file mode 100644
index 0000000..66c9fac
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CarServiceMapper.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.CarService;
+import org.apache.ibatis.annotations.Param;
+
+public interface CarServiceMapper extends BaseMapper<CarService> {
+
+
+    CarService query(@Param("type") Integer orderType, @Param("carId") Integer carId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CompanyCityMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CompanyCityMapper.java
new file mode 100644
index 0000000..5ab918b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CompanyCityMapper.java
@@ -0,0 +1,10 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.CompanyCity;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface CompanyCityMapper extends BaseMapper<CompanyCity> {
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CompanyMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CompanyMapper.java
new file mode 100644
index 0000000..43f3ff0
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CompanyMapper.java
@@ -0,0 +1,18 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Company;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface CompanyMapper extends BaseMapper<Company> {
+
+
+    /**
+     * 根据行政区域代码获取企业
+     * @param code
+     * @return
+     */
+    List<Company> query(@Param("province") String province, @Param("city") String city, @Param("code") String code);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ComplaintMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ComplaintMapper.java
new file mode 100644
index 0000000..c198609
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ComplaintMapper.java
@@ -0,0 +1,7 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Complaint;
+
+public interface ComplaintMapper extends BaseMapper<Complaint> {
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DeptMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DeptMapper.java
new file mode 100644
index 0000000..a92fb85
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DeptMapper.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.core.node.ZTreeNode;
+import com.stylefeng.guns.modular.system.model.Dept;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 部门表 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+public interface DeptMapper extends BaseMapper<Dept> {
+
+    /**
+     * 获取ztree的节点列表
+     */
+    List<ZTreeNode> tree();
+
+    /**
+     * 获取所有部门列表
+     */
+    List<Map<String, Object>> list(@Param("condition") String condition);
+
+}
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DictMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DictMapper.java
new file mode 100644
index 0000000..55677f1
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DictMapper.java
@@ -0,0 +1,34 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Dict;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 字典表 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+public interface DictMapper extends BaseMapper<Dict> {
+
+    /**
+     * 根据编码获取词典列表
+     */
+    List<Dict> selectByCode(@Param("code") String code);
+
+    /**
+     * 查询字典列表
+     */
+    List<Map<String, Object>> list(@Param("condition") String conditiion);
+
+    /**
+     * 根据父类编码获取词典列表
+     */
+    List<Dict> selectByParentCode(@Param("code") String code);
+}
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverActivityHistoryMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverActivityHistoryMapper.java
new file mode 100644
index 0000000..4aea57d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverActivityHistoryMapper.java
@@ -0,0 +1,24 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.DriverActivityHistory;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+public interface DriverActivityHistoryMapper extends BaseMapper<DriverActivityHistory> {
+
+
+
+    List<Map<String, Object>> query(@Param("driverId") Integer driverId, @Param("pageNum") Integer pageNum,
+                                    @Param("size") Integer size);
+
+
+
+
+    List<DriverActivityHistory> queryList(@Param("driverId") Integer driverId, @Param("type") Integer type,
+                                          @Param("carryOut") Integer carryOut, @Param("start") Date start,
+                                          @Param("end") Date end);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverActivityRegisteredMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverActivityRegisteredMapper.java
new file mode 100644
index 0000000..4944499
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverActivityRegisteredMapper.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.DriverActivityRegistered;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface DriverActivityRegisteredMapper extends BaseMapper<DriverActivityRegistered> {
+
+    /**
+     * 获取当前有效活动
+     * @param type
+     * @param companyId
+     * @return
+     */
+    List<Map<String, Object>> query(@Param("type") Integer type, @Param("companyId") Integer companyId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java
new file mode 100644
index 0000000..27592b2
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java
@@ -0,0 +1,43 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Driver;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface DriverMapper extends BaseMapper<Driver> {
+
+
+    /**
+     * 获取当前已上班type业务类型、设置了可以接此类型的单据且空闲的司机
+     * @param type
+     * @return
+     */
+    List<Driver> queryIdleDriver(@Param("type") Integer type, @Param("companyId") Integer companyId);
+
+
+    /**
+     * 获取当前已上班type业务类型、设置了可以接此类型的单据、服务车型匹配且空闲的司机
+     * @param type
+     * @param serverCarModelId
+     * @param companyId
+     * @return
+     */
+    List<Driver> queryIdleDriver_(@Param("type") Integer type, @Param("serverCarModelId") Integer serverCarModelId,
+                                 @Param("companyId") Integer companyId);
+
+
+    /**
+     * 根据订单id获取司机数据
+     * @param orderId
+     * @return
+     */
+    Map<String, Object> queryOrderDriver(@Param("orderId") Integer orderId, @Param("orderType") Integer orderType);
+
+
+
+
+    Map<String, Object> queryDriverInfo(@Param("id") Integer id);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOrdersMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOrdersMapper.java
new file mode 100644
index 0000000..7d6e28c
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverOrdersMapper.java
@@ -0,0 +1,17 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.DriverOrders;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface DriverOrdersMapper extends BaseMapper<DriverOrders> {
+
+
+    DriverOrders query(@Param("uid") Integer uid, @Param("type") Integer type);
+
+
+
+    List<Integer> queryOrders(@Param("uid") Integer uid);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverServiceMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverServiceMapper.java
new file mode 100644
index 0000000..16ca189
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverServiceMapper.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.DriverService;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface DriverServiceMapper extends BaseMapper<DriverService> {
+
+
+    /**
+     * 获取司机的业务类型
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    List<DriverService> queryBusiness(@Param("uid") Integer uid, @Param("type") Integer... type);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverWorkMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverWorkMapper.java
new file mode 100644
index 0000000..ffa0506
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverWorkMapper.java
@@ -0,0 +1,7 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.DriverWork;
+
+public interface DriverWorkMapper extends BaseMapper<DriverWork> {
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ExpenseMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ExpenseMapper.java
new file mode 100644
index 0000000..312d243
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ExpenseMapper.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Expense;
+
+/**
+ * <p>
+  * 报销表 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-12-04
+ */
+public interface ExpenseMapper extends BaseMapper<Expense> {
+
+}
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FeedbackMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FeedbackMapper.java
new file mode 100644
index 0000000..21f6b40
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/FeedbackMapper.java
@@ -0,0 +1,7 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Feedback;
+
+public interface FeedbackMapper extends BaseMapper<Feedback> {
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/GDInterfaceMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/GDInterfaceMapper.java
new file mode 100644
index 0000000..67bfb34
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/GDInterfaceMapper.java
@@ -0,0 +1,12 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.GDInterface;
+import org.apache.ibatis.annotations.Param;
+
+public interface GDInterfaceMapper extends BaseMapper<GDInterface> {
+
+
+    GDInterface query(@Param("name") String name, @Param("explanation") String explanation,
+                      @Param("time") String time);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/IncomeMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/IncomeMapper.java
new file mode 100644
index 0000000..e8b8cfa
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/IncomeMapper.java
@@ -0,0 +1,7 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Income;
+
+public interface IncomeMapper extends BaseMapper<Income> {
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/IntegralGoodsMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/IntegralGoodsMapper.java
new file mode 100644
index 0000000..496eca2
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/IntegralGoodsMapper.java
@@ -0,0 +1,17 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.IntegralGoods;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IntegralGoodsMapper extends BaseMapper<IntegralGoods> {
+
+
+    List<Map<String, Object>> queryGoods(@Param("pageNum") Integer pageNum, @Param("size") Integer size);
+
+
+    Map<String, Object> queryGoodsInfo(@Param("id") Integer id);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/IntegralOrderMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/IntegralOrderMapper.java
new file mode 100644
index 0000000..5d1673b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/IntegralOrderMapper.java
@@ -0,0 +1,22 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.IntegralOrder;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IntegralOrderMapper extends BaseMapper<IntegralOrder> {
+
+
+    /**
+     * 获取历史记录
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     */
+    List<Map<String, Object>> queryConvertHistory(@Param("pageNum") Integer pageNum, @Param("size") Integer size,
+                                                  @Param("uid") Integer uid);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/InvoiceMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/InvoiceMapper.java
new file mode 100644
index 0000000..640a921
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/InvoiceMapper.java
@@ -0,0 +1,22 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Invoice;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface InvoiceMapper extends BaseMapper<Invoice> {
+
+
+    /**
+     * 获取发票历史记录
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     */
+    List<Map<String, Object>> queryMyInvoice(@Param("pageNum") Integer pageNum, @Param("size") Integer size,
+                                             @Param("uid") Integer uid);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/LoginLogMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/LoginLogMapper.java
new file mode 100644
index 0000000..2e55025
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/LoginLogMapper.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.stylefeng.guns.modular.system.model.LoginLog;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 登录记录 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+public interface LoginLogMapper extends BaseMapper<LoginLog> {
+
+    /**
+     * 获取登录日志
+     */
+    List<Map<String, Object>> getLoginLogs(@Param("page") Page<LoginLog> page, @Param("beginTime") String beginTime,
+                                           @Param("endTime") String endTime, @Param("logName") String logName, @Param("orderByField") String orderByField, @Param("isAsc") boolean isAsc);
+
+}
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/MenuMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/MenuMapper.java
new file mode 100644
index 0000000..ea0232d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/MenuMapper.java
@@ -0,0 +1,80 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.core.node.MenuNode;
+import com.stylefeng.guns.core.node.ZTreeNode;
+import com.stylefeng.guns.modular.system.model.Menu;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+  * 菜单表 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+public interface MenuMapper extends BaseMapper<Menu> {
+
+    /**
+     * 根据条件查询菜单
+     *
+     * @return
+     * @date 2017年2月12日 下午9:14:34
+     */
+    List<Map<String, Object>> selectMenus(@Param("condition") String condition, @Param("level") String level);
+
+    /**
+     * 根据条件查询菜单
+     *
+     * @return
+     * @date 2017年2月12日 下午9:14:34
+     */
+    List<Long> getMenuIdsByRoleId(@Param("roleId") Integer roleId);
+
+    /**
+     * 获取菜单列表树
+     *
+     * @return
+     * @date 2017年2月19日 下午1:33:51
+     */
+    List<ZTreeNode> menuTreeList();
+
+    /**
+     * 获取菜单列表树
+     *
+     * @return
+     * @date 2017年2月19日 下午1:33:51
+     */
+    List<ZTreeNode> menuTreeListByMenuIds(List<Long> menuIds);
+
+    /**
+     * 删除menu关联的relation
+     *
+     * @param menuId
+     * @return
+     * @date 2017年2月19日 下午4:10:59
+     */
+    int deleteRelationByMenu(Long menuId);
+
+    /**
+     * 获取资源url通过角色id
+     *
+     * @param roleId
+     * @return
+     * @date 2017年2月19日 下午7:12:38
+     */
+    List<String> getResUrlsByRoleId(Integer roleId);
+
+    /**
+     * 根据角色获取菜单
+     *
+     * @param roleIds
+     * @return
+     * @date 2017年2月19日 下午10:35:40
+     */
+    List<MenuNode> getMenusByRoleIds(List<Integer> roleIds);
+}
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/NoticeMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/NoticeMapper.java
new file mode 100644
index 0000000..5638129
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/NoticeMapper.java
@@ -0,0 +1,25 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Notice;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 通知表 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+public interface NoticeMapper extends BaseMapper<Notice> {
+
+    /**
+     * 获取通知列表
+     */
+    List<Map<String, Object>> list(@Param("condition") String condition);
+
+}
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OpenCityBusinessMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OpenCityBusinessMapper.java
new file mode 100644
index 0000000..c982df7
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OpenCityBusinessMapper.java
@@ -0,0 +1,29 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.OpenCityBusiness;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface OpenCityBusinessMapper extends BaseMapper<OpenCityBusiness> {
+
+
+    /**
+     * 获取业务类型
+     * @param province  省名称
+     * @param city      市名称
+     * @param district  区县名称
+     * @return
+     */
+    List<OpenCityBusiness> queryBusiness(@Param("province") String province, @Param("city") String city,
+                                         @Param("district") String district);
+
+
+    /**
+     * 根据开通城市id获取业务类型
+     * @param id
+     * @return
+     */
+    List<OpenCityBusiness> queryBusinessById(@Param("id") Integer id);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OpenCityMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OpenCityMapper.java
new file mode 100644
index 0000000..1286955
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OpenCityMapper.java
@@ -0,0 +1,25 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.OpenCity;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface OpenCityMapper extends BaseMapper<OpenCity> {
+
+
+    /**
+     * 获取开通城市列表(有效的)
+     * @return
+     */
+    List<OpenCity> queryOpenCity();
+
+
+    /**
+     * 获取开通城市
+     * @param code
+     * @return
+     */
+    List<OpenCity> queryByCode(@Param("code") String code);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OperationLogMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OperationLogMapper.java
new file mode 100644
index 0000000..eaf5760
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OperationLogMapper.java
@@ -0,0 +1,26 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.stylefeng.guns.modular.system.model.OperationLog;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 操作日志 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+public interface OperationLogMapper extends BaseMapper<OperationLog> {
+
+    /**
+     * 获取操作日志
+     */
+    List<Map<String, Object>> getOperationLogs(@Param("page") Page<OperationLog> page, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("logName") String logName, @Param("logType") String logType, @Param("orderByField") String orderByField, @Param("isAsc") boolean isAsc);
+
+}
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderCancelMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderCancelMapper.java
new file mode 100644
index 0000000..acdcc4e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderCancelMapper.java
@@ -0,0 +1,34 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.OrderCancel;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface OrderCancelMapper extends BaseMapper<OrderCancel> {
+
+
+    /**
+     * 获取数据
+     * @param orderId
+     * @param orderType
+     * @param money
+     * @param payType
+     * @param state
+     * @return
+     */
+    OrderCancel query(@Param("orderId") Integer orderId, @Param("orderType") Integer orderType,
+                      @Param("money") Double money, @Param("payType") Integer payType,
+                      @Param("state") Integer state);
+
+
+    /**
+     * 获取用户取消记录
+     * @param uid
+     * @param isPay 1=不需要支付,2=需要支付
+     * @return
+     */
+    List<Map<String, Object>> queryCancel(@Param("uid") Integer uid, @Param("isPay") Integer isPay);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderEvaluateMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderEvaluateMapper.java
new file mode 100644
index 0000000..14325e4
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderEvaluateMapper.java
@@ -0,0 +1,22 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.OrderEvaluate;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface OrderEvaluateMapper extends BaseMapper<OrderEvaluate> {
+
+
+    /**
+     * 获取历史评价数据
+     * @param driverId
+     * @param pageNum
+     * @param size
+     * @return
+     */
+    List<Map<String, Object>> queryOrderEvaluate(@Param("driverId") Integer driverId, @Param("pageNum") Integer pageNum,
+                                                 @Param("size") Integer size);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderPositionMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderPositionMapper.java
new file mode 100644
index 0000000..aa40295
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/OrderPositionMapper.java
@@ -0,0 +1,20 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.OrderPosition;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface OrderPositionMapper extends BaseMapper<OrderPosition> {
+
+
+    /**
+     * 获取轨迹数据
+     * @param orderId
+     * @param orderType
+     * @return
+     */
+    List<Map<String, Object>> queryTrack(@Param("orderId") Integer orderId, @Param("orderType") Integer orderType);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PhoneMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PhoneMapper.java
new file mode 100644
index 0000000..eda261d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PhoneMapper.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Phone;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface PhoneMapper extends BaseMapper<Phone> {
+
+
+    /**
+     * 根据行政区域获取设置的电话
+     * @param code
+     * @return
+     */
+    List<Phone> queryPhones(@Param("province") String province, @Param("city") String city, @Param("code") String code);
+
+
+    /**
+     * 获取电话数据
+     * @param type
+     * @param platform
+     * @param code
+     * @return
+     */
+    Phone query(@Param("type") Integer type, @Param("platform") Integer platform,
+                @Param("province") String province, @Param("city") String city,
+                @Param("code") String code);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ProblemMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ProblemMapper.java
new file mode 100644
index 0000000..30965fd
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ProblemMapper.java
@@ -0,0 +1,22 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Problem;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ProblemMapper extends BaseMapper<Problem> {
+
+
+    /**
+     * 获取提交的留言
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     */
+    List<Map<String, Object>> queryProblems(@Param("pageNum") Integer pageNum, @Param("size") Integer size,
+                                            @Param("uid") Integer uid);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushOrderMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushOrderMapper.java
new file mode 100644
index 0000000..58c8fe0
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushOrderMapper.java
@@ -0,0 +1,20 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.PushOrder;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface PushOrderMapper extends BaseMapper<PushOrder> {
+
+
+    /**
+     * 获取推送配置
+     * @param type
+     * @param pushType
+     * @return
+     */
+    List<PushOrder> querys(@Param("type") Integer type, @Param("pushType") Integer pushType,
+                           @Param("companyId") Integer companyId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RedPacketRecordMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RedPacketRecordMapper.java
new file mode 100644
index 0000000..7b966cb
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RedPacketRecordMapper.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.RedPacketRecord;
+import org.apache.ibatis.annotations.Param;
+
+public interface RedPacketRecordMapper extends BaseMapper<RedPacketRecord> {
+
+
+    /**
+     * 根据企业id获取红包数据
+     * @param companyId
+     * @return
+     */
+    RedPacketRecord queryDate(@Param("companyId") Integer companyId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RegionMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RegionMapper.java
new file mode 100644
index 0000000..01eedcd
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RegionMapper.java
@@ -0,0 +1,17 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Region;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface RegionMapper extends BaseMapper<Region> {
+
+
+
+    Region query(@Param("code") String code);
+
+
+    List<Region> querys(@Param("parentId") Integer parentId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RelationMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RelationMapper.java
new file mode 100644
index 0000000..828a596
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RelationMapper.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Relation;
+
+/**
+ * <p>
+  * 角色和菜单关联表 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+public interface RelationMapper extends BaseMapper<Relation> {
+
+}
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RoleMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RoleMapper.java
new file mode 100644
index 0000000..d95d87f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RoleMapper.java
@@ -0,0 +1,53 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.core.node.ZTreeNode;
+import com.stylefeng.guns.modular.system.model.Role;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+  * 角色表 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+public interface RoleMapper extends BaseMapper<Role> {
+
+    /**
+     * 根据条件查询角色列表
+     *
+     * @return
+     * @date 2017年2月12日 下午9:14:34
+     */
+    List<Map<String, Object>> selectRoles(@Param("condition") String condition);
+
+    /**
+     * 删除某个角色的所有权限
+     *
+     * @param roleId 角色id
+     * @return
+     * @date 2017年2月13日 下午7:57:51
+     */
+    int deleteRolesById(@Param("roleId") Integer roleId);
+
+    /**
+     * 获取角色列表树
+     *
+     * @return
+     * @date 2017年2月18日 上午10:32:04
+     */
+    List<ZTreeNode> roleTreeList();
+
+    /**
+     * 获取角色列表树
+     *
+     * @return
+     * @date 2017年2月18日 上午10:32:04
+     */
+    List<ZTreeNode> roleTreeListByRoleId(String[] roleId);
+}
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SensitiveWordsMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SensitiveWordsMapper.java
new file mode 100644
index 0000000..1f67288
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SensitiveWordsMapper.java
@@ -0,0 +1,7 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.SensitiveWords;
+
+public interface SensitiveWordsMapper extends BaseMapper<SensitiveWords> {
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ServerCarModelMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ServerCarModelMapper.java
new file mode 100644
index 0000000..351f1a9
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/ServerCarModelMapper.java
@@ -0,0 +1,22 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.ServerCarModel;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ServerCarModelMapper extends BaseMapper<ServerCarModel> {
+
+
+    /**
+     * 获取业务对应的所有有效服务车型
+     * @param type
+     * @return
+     */
+    List<Map<String, Object>> queryServerCarModel(@Param("type") Integer type);
+
+
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SmsrecordMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SmsrecordMapper.java
new file mode 100644
index 0000000..3f6b057
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SmsrecordMapper.java
@@ -0,0 +1,7 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Smsrecord;
+
+public interface SmsrecordMapper extends BaseMapper<Smsrecord> {
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysIntegralMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysIntegralMapper.java
new file mode 100644
index 0000000..848238a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysIntegralMapper.java
@@ -0,0 +1,10 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.SysIntegral;
+import org.apache.ibatis.annotations.Param;
+
+public interface SysIntegralMapper extends BaseMapper<SysIntegral> {
+
+    SysIntegral query(@Param("companyId") Integer companyId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemNoticeMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemNoticeMapper.java
new file mode 100644
index 0000000..87eeb73
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemNoticeMapper.java
@@ -0,0 +1,47 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.SystemNotice;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface SystemNoticeMapper extends BaseMapper<SystemNotice> {
+
+
+    /**
+     * 获取未阅读数量
+     * @param uid
+     * @return
+     */
+    Integer queryNoReadNoticeNum(@Param("uid") Integer uid);
+
+
+    /**
+     * 获取消息列表
+     * @param type
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     */
+    List<Map<String, Object>> queryList(@Param("type") Integer type, @Param("pageNum") Integer pageNum,
+                                        @Param("size") Integer size, @Param("uid") Integer uid);
+
+
+    /**
+     * 阅读操作
+     * @param id
+     * @param uid
+     */
+    void readSystemNotice(@Param("id") Integer id, @Param("uid") Integer uid);
+
+
+    /**
+     * 删除数据
+     * @param id
+     * @param uid
+     */
+    void delSystemNotice(@Param("id") Integer id, @Param("uid") Integer uid);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceMapper.java
new file mode 100644
index 0000000..ef37769
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceMapper.java
@@ -0,0 +1,20 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.SystemPrice;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
+
+public interface SystemPriceMapper extends BaseMapper<SystemPrice> {
+
+
+    /**
+     * 获取价格
+     * @param companyId
+     * @param type
+     * @return
+     */
+    Map<String, Object> query(@Param("companyId") Integer companyId, @Param("type") Integer type,
+                              @Param("serverCarModelId") Integer serverCarModelId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TNoticesMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TNoticesMapper.java
new file mode 100644
index 0000000..32365a9
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TNoticesMapper.java
@@ -0,0 +1,30 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.TNotices;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface TNoticesMapper extends BaseMapper<TNotices> {
+
+
+    /**
+     * 获取公告列表
+     * @param type
+     * @return
+     */
+    List<TNotices> queryNotices(@Param("type") Integer type);
+
+
+    /**
+     * 获取用户的公告数据
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     */
+    List<Map<String, Object>> queryList(@Param("pageNum") Integer pageNum, @Param("size") Integer size,
+                                        @Param("uid") Integer uid);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityBalanceMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityBalanceMapper.java
new file mode 100644
index 0000000..d16d268
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityBalanceMapper.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.UserActivityBalance;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface UserActivityBalanceMapper extends BaseMapper<UserActivityBalance> {
+
+
+    /**
+     * 获取满足条件的活动
+     * @param companyId
+     * @return
+     */
+    List<Map<String, Object>> query(@Param("money") Double money, @Param("companyId") Integer companyId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityDiscount1Mapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityDiscount1Mapper.java
new file mode 100644
index 0000000..91dbaf6
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityDiscount1Mapper.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.UserActivityDiscount1;
+import org.apache.ibatis.annotations.Param;
+
+public interface UserActivityDiscount1Mapper extends BaseMapper<UserActivityDiscount1> {
+
+
+    UserActivityDiscount1 query(@Param("companyId") Integer companyId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityInviteMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityInviteMapper.java
new file mode 100644
index 0000000..04d23cb
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityInviteMapper.java
@@ -0,0 +1,14 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.UserActivityInvite;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface UserActivityInviteMapper extends BaseMapper<UserActivityInvite> {
+
+
+    List<Map<String, Object>> query(@Param("companyId") Integer companyId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityRedenvelopeMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityRedenvelopeMapper.java
new file mode 100644
index 0000000..4c2e118
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityRedenvelopeMapper.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.UserActivityRedenvelope;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.Map;
+
+public interface UserActivityRedenvelopeMapper extends BaseMapper<UserActivityRedenvelope> {
+
+
+    /**
+     * 获取红包活动
+     * @param companyId
+     * @return
+     */
+    Map<String, Object> query(@Param("companyId") Integer companyId, @Param("travelTime") Date travelTime);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityRegisteredMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityRegisteredMapper.java
new file mode 100644
index 0000000..4b973fe
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserActivityRegisteredMapper.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.UserActivityRegistered;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface UserActivityRegisteredMapper extends BaseMapper<UserActivityRegistered> {
+
+
+    /**
+     * 获取当前有效的注册活动
+     * @param companyId
+     * @return
+     */
+    List<Map<String, Object>> query(@Param("companyId") Integer companyId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserCouponRecordMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserCouponRecordMapper.java
new file mode 100644
index 0000000..675c7bb
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserCouponRecordMapper.java
@@ -0,0 +1,55 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.UserCouponRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface UserCouponRecordMapper extends BaseMapper<UserCouponRecord> {
+
+
+    /**
+     * 获取可用优惠券数量
+     * @param uid
+     * @param companyId
+     * @param state
+     * @param couponUseType
+     * @return
+     */
+    int queryAvailable(@Param("uid") Integer uid, @Param("companyId") Integer companyId,
+                       @Param("state") Integer state, @Param("couponUseType") Integer couponUseType,
+                       @Param("money") Double money);
+
+
+    /**
+     * 获取优惠券列表
+     * @param uid
+     * @param companyId
+     * @param state
+     * @param couponUseType
+     * @return
+     */
+    List<Map<String, Object>> queryCoupon(@Param("uid") Integer uid, @Param("companyId") Integer companyId,
+                                          @Param("state") Integer state, @Param("couponUseType") Integer couponUseType,
+                                          @Param("money") Double money, @Param("pageNum") Integer pageNum,
+                                          @Param("size") Integer size);
+
+    /**
+     * 获取优惠券列表
+     * @param state
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     */
+    List<Map<String, Object>> queryMyCoupons(@Param("state") Integer state, @Param("pageNum") Integer pageNum,
+                                             @Param("size") Integer size, @Param("uid") Integer uid);
+
+
+    /**
+     * 修改过期状态
+     */
+    void updateTimeOut();
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserInfoMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserInfoMapper.java
new file mode 100644
index 0000000..9738a84
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserInfoMapper.java
@@ -0,0 +1,55 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.UserInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
+
+public interface UserInfoMapper extends BaseMapper<UserInfo> {
+
+
+    /**
+     * 电话号查询用户
+     * @param phone
+     * @return
+     */
+    UserInfo queryByPhone(@Param("phone") String phone);
+
+
+    /**
+     * 根据微信openid获取用户
+     * @param openid
+     * @param unionid
+     * @return
+     */
+    UserInfo queryByOpenid(@Param("openid") String openid);
+
+    UserInfo queryByOpenid2(@Param("openid") String openid);
+
+
+    /**
+     * 获取用户详情
+     * @param uid
+     * @return
+     */
+    Map<String, Object> queryUserInfo(@Param("uid") Integer uid, @Param("phone") String phone);
+
+
+    /**
+     * 设置紧急联系人
+     * @param name
+     * @param phone
+     * @param uid
+     */
+    void setUrgentUser(@Param("name") String name, @Param("phone") String phone,
+                       @Param("uid") Integer uid);
+
+
+    /**
+     * 获取实名认证数据
+     * @param uid
+     * @return
+     */
+    Map<String, Object> queryRealName(@Param("uid") Integer uid);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserMapper.java
new file mode 100644
index 0000000..c15c8fc
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserMapper.java
@@ -0,0 +1,45 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.core.datascope.DataScope;
+import com.stylefeng.guns.modular.system.model.User;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 管理员表 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+public interface UserMapper extends BaseMapper<User> {
+
+    /**
+     * 修改用户状态
+     */
+    int setStatus(@Param("userId") Integer userId, @Param("status") int status);
+
+    /**
+     * 修改密码
+     */
+    int changePwd(@Param("userId") Integer userId, @Param("pwd") String pwd);
+
+    /**
+     * 根据条件查询用户列表
+     */
+    List<Map<String, Object>> selectUsers(@Param("dataScope") DataScope dataScope, @Param("name") String name, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("deptid") Integer deptid);
+
+    /**
+     * 设置用户的角色
+     */
+    int setRoles(@Param("userId") Integer userId, @Param("roleIds") String roleIds);
+
+    /**
+     * 通过账号获取用户
+     */
+    User getByAccount(@Param("account") String account);
+}
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserRedPacketRecordMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserRedPacketRecordMapper.java
new file mode 100644
index 0000000..6e6b030
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserRedPacketRecordMapper.java
@@ -0,0 +1,42 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.UserRedPacketRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface UserRedPacketRecordMapper extends BaseMapper<UserRedPacketRecord> {
+
+
+    /**
+     * 获取不大于money值的红包数据
+     * @param uid
+     * @param companyId
+     * @param state
+     * @param orderType
+     * @param money
+     * @return
+     */
+    UserRedPacketRecord query(@Param("uid") Integer uid, @Param("companyId") Integer companyId,
+                              @Param("state") Integer state, @Param("orderType") Integer orderType,
+                              @Param("money") Double money);
+
+
+
+    UserRedPacketRecord query_(@Param("uid") Integer uid, @Param("companyId") Integer companyId,
+                              @Param("state") Integer state, @Param("orderType") Integer orderType,
+                              @Param("money") Double money);
+
+
+    /**
+     * 获取红包列表
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     */
+    List<Map<String, Object>> queryMyRedEnvelope(@Param("pageNum") Integer pageNum, @Param("size") Integer size,
+                                                 @Param("uid") Integer uid);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/VerifiedMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/VerifiedMapper.java
new file mode 100644
index 0000000..584e0b2
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/VerifiedMapper.java
@@ -0,0 +1,7 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Verified;
+
+public interface VerifiedMapper extends BaseMapper<Verified> {
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/VersionManagementMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/VersionManagementMapper.java
new file mode 100644
index 0000000..89b007a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/VersionManagementMapper.java
@@ -0,0 +1,17 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.VersionManagement;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
+
+public interface VersionManagementMapper extends BaseMapper<VersionManagement> {
+
+
+    /**
+     * 获取最新版本
+     * @return
+     */
+    Map<String, Object> queryNewVersion(@Param("type") Integer type);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java
new file mode 100644
index 0000000..aa3f7ac
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/WithdrawalMapper.java
@@ -0,0 +1,22 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.Withdrawal;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface WithdrawalMapper extends BaseMapper<Withdrawal> {
+
+
+    /**
+     * 获取历史提交数据
+     * @param uid
+     * @param pageNum
+     * @param size
+     * @return
+     */
+    List<Map<String, Object>> queryWithdrawal(@Param("uid") Integer uid, @Param("userType") Integer userType,
+                                              @Param("pageNum") Integer pageNum, @Param("size") Integer size);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AdvertisementMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AdvertisementMapper.xml
new file mode 100644
index 0000000..1a661ff
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AdvertisementMapper.xml
@@ -0,0 +1,43 @@
+<?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.AdvertisementMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Advertisement">
+        <id column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="imgUrl" property="imgUrl"/>
+        <result column="type" property="type"/>
+        <result column="isJump" property="isJump"/>
+        <result column="jumpType" property="jumpType"/>
+        <result column="jumpUrl" property="jumpUrl"/>
+        <result column="content" property="content"/>
+        <result column="state" property="state"/>
+        <result column="provinceId" property="provinceId"/>
+
+        <result column="flag" property="flag"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="insertUser" property="insertUser"/>
+        <result column="updateTime" property="updateTime"/>
+        <result column="updateUser" property="updateUser"/>
+    </resultMap>
+
+
+    <select id="queryAdvertisement" resultType="com.stylefeng.guns.modular.system.warpper.AdvertisementWarpper">
+        select
+        id as id,
+        name as name,
+        imgUrl as imgUrl,
+        type as type,
+        isJump as isJump,
+        jumpType as jumpType,
+        jumpUrl as jumpUrl,
+        content as content,
+        state as state,
+        provinceId as provinceId
+        from t_advertisement where flag != 3 and state = 1 and provinceId in (select id from t_region where code = #{code})
+        <if test="null != type">
+          and `type` = #{type}
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AgreementMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AgreementMapper.xml
new file mode 100644
index 0000000..dc077e8
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AgreementMapper.xml
@@ -0,0 +1,27 @@
+<?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.AgreementMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Agreement">
+        <id column="id" property="id"/>
+        <result column="useType" property="useType"/>
+        <result column="content" property="content"/>
+        <result column="type" property="type"/>
+
+        <result column="flag" property="flag"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="insertUser" property="insertUser"/>
+        <result column="updateTime" property="updateTime"/>
+        <result column="updateUser" property="updateUser"/>
+    </resultMap>
+
+
+
+    <select id="queryByType" resultType="java.lang.String">
+        select content from t_agreement where `type` = #{type} and flag != 3
+        <if test="null != useType">
+            and useType = #{useType}
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CancleOrderMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CancleOrderMapper.xml
new file mode 100644
index 0000000..5c55a67
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CancleOrderMapper.xml
@@ -0,0 +1,26 @@
+<?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.CancleOrderMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.CancleOrder">
+        <id column="id" property="id"/>
+        <result column="companyId" property="companyId"/>
+        <result column="minuteNum" property="minuteNum"/>
+        <result column="money" property="money"/>
+        <result column="type" property="type"/>
+        <result column="orderType" property="orderType"/>
+    </resultMap>
+
+
+    <select id="query" resultType="CancleOrder">
+        select
+        id as id,
+        companyId as companyId,
+        minuteNum as minuteNum,
+        money as money,
+        `type` as `type`,
+        orderType as orderType
+        from t_sys_cancle_order where `type` = #{type} and orderType = #{orderType} and companyId = #{companyId}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CarMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CarMapper.xml
new file mode 100644
index 0000000..858805f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CarMapper.xml
@@ -0,0 +1,71 @@
+<?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.CarMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Car">
+        <id column="id" property="id"/>
+        <result column="isPlatCar" property="isPlatCar"/>
+        <result column="companyId" property="companyId"/>
+        <result column="franchiseeId" property="franchiseeId"/>
+        <result column="carColor" property="carColor"/>
+        <result column="carModelId" property="carModelId"/>
+        <result column="carBrandId" property="carBrandId"/>
+        <result column="carLicensePlate" property="carLicensePlate"/>
+        <result column="carPhoto" property="carPhoto"/>
+        <result column="drivingLicenseNumber" property="drivingLicenseNumber"/>
+        <result column="drivingLicensePhoto" property="drivingLicensePhoto"/>
+        <result column="annualInspectionTime" property="annualInspectionTime"/>
+        <result column="insurancePhoto" property="insurancePhoto" />
+        <result column="commercialInsuranceTime" property="commercialInsuranceTime"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="state" property="state"/>
+        <result column="addType" property="addType"/>
+        <result column="addObjectId" property="addObjectId"/>
+    </resultMap>
+
+
+
+    <select id="queryIdleData" resultType="map">
+        select
+        a.id as id,
+        CONCAT(a.carLicensePlate, '-',c.`name`, b.`name`, ' ', a.carColor) as name
+        from t_car a
+        left join t_car_model b on (a.carModelId = b.id)
+        left join t_car_brand c on (b.brandId = c.id)
+        where a.state = 1
+        <choose>
+            <when test="companyId != 1">
+                and  a.companyId = #{companyId} or a.franchiseeId = #{companyId}
+            </when>
+            <otherwise>
+                and a.isPlatCar = 1
+            </otherwise>
+
+        </choose>
+    </select>
+
+
+    <select id="query" resultType="com.stylefeng.guns.modular.system.model.Car">
+        select
+        id as id,
+        isPlatCar as isPlatCar,
+        companyId as companyId,
+        franchiseeId as franchiseeId,
+        carColor as carColor,
+        carModelId as carModelId,
+        carBrandId as carBrandId,
+        carLicensePlate as carLicensePlate,
+        carPhoto as carPhoto,
+        drivingLicenseNumber as drivingLicenseNumber,
+        drivingLicensePhoto as drivingLicensePhoto,
+        annualInspectionTime as annualInspectionTime,
+        insurancePhoto as insurancePhoto,
+        commercialInsuranceTime as commercialInsuranceTime,
+        insertTime as insertTime,
+        state as state,
+        addType as addType,
+        addObjectId as addObjectId
+        from t_car where state = 1 and carLicensePlate = #{licensePlate}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CarServiceMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CarServiceMapper.xml
new file mode 100644
index 0000000..919a8b2
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CarServiceMapper.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.CarServiceMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.CarService">
+        <id column="id" property="id"/>
+        <result column="carId" property="carId"/>
+        <result column="type" property="type"/>
+        <result column="serverCarModelId" property="serverCarModelId"/>
+    </resultMap>
+
+
+    <select id="query" resultType="CarService">
+        select
+        id as id,
+        carId as carId,
+        `type` as `type`,
+        serverCarModelId as serverCarModelId
+        from t_car_service where `type` = #{type} and carId = #{carId}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyCityMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyCityMapper.xml
new file mode 100644
index 0000000..2dba5b5
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyCityMapper.xml
@@ -0,0 +1,34 @@
+<?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.CompanyCityMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.CompanyCity">
+        <id column="id" property="id"/>
+        <result column="companyId" property="companyId"/>
+        <result column="provinceCode" property="provinceCode"/>
+        <result column="cityCode" property="cityCode"/>
+        <result column="areaCode" property="areaCode"/>
+        <result column="state" property="state"/>
+    </resultMap>
+
+    <select id="query" resultType="CompanyCity">
+        select
+        id as id,
+        companyId as companyId,
+        provinceCode as provinceCode,
+        cityCode as cityCode,
+        areaCode as areaCode,
+        state as state
+        from t_company_city where state = 1
+        <if test="null != province">
+            and provinceCode = #{province}
+        </if>
+        <if test="null != city">
+            and cityCode = #{city}
+        </if>
+        <if test="null != code">
+            and areaCode = #{code}
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyMapper.xml
new file mode 100644
index 0000000..9007d02
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyMapper.xml
@@ -0,0 +1,121 @@
+<?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.CompanyMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Company">
+        <id column="id" property="id"/>
+        <result column="isSpe" property="isSpe"/>
+        <result column="isTaxi" property="isTaxi"/>
+        <result column="isCross" property="isCross"/>
+        <result column="isCrossLogistics" property="isCrossLogistics"/>
+        <result column="isSameLogistics" property="isSameLogistics"/>
+        <result column="isCharter" property="isCharter"/>
+        <result column="isSpeFixedOrProportional" property="isSpeFixedOrProportional"/>
+        <result column="isTaxiFixedOrProportional" property="isTaxiFixedOrProportional"/>
+        <result column="isCrossLogisticsFixedOrProportional" property="isCrossLogisticsFixedOrProportional"/>
+        <result column="isSameLogisticsFixedOrProportional" property="isSameLogisticsFixedOrProportional"/>
+        <result column="speMoney" property="speMoney"/>
+        <result column="taxiMoney" property="taxiMoney"/>
+        <result column="crossLogisticsMoney" property="crossLogisticsMoney"/>
+        <result column="sameLogisticsMoney" property="sameLogisticsMoney"/>
+        <result column="isNeedFerry" property="isNeedFerry"/>
+        <result column="name" property="name"/>
+        <result column="type" property="type"/>
+        <result column="superiorId" property="superiorId"/>
+        <result column="principalName" property="principalName"/>
+        <result column="principalPhone" property="principalPhone"/>
+        <result column="adminName" property="adminName"/>
+        <result column="adminPhone" property="adminPhone"/>
+        <result column="urgentPhoen" property="urgentPhoen"/>
+        <result column="setupTime" property="setupTime"/>
+        <result column="identifier" property="identifier"/>
+        <result column="addressCode" property="addressCode"/>
+        <result column="businessScope" property="businessScope"/>
+        <result column="contactAddress" property="contactAddress"/>
+        <result column="documentAddress" property="documentAddress"/>
+        <result column="economicType" property="economicType"/>
+        <result column="regCapital" property="regCapital"/>
+        <result column="legalName" property="legalName"/>
+        <result column="legalId" property="legalId"/>
+        <result column="legalPhone" property="legalPhone"/>
+        <result column="legalPhotoUrl" property="legalPhotoUrl"/>
+        <result column="licensingAgency" property="licensingAgency"/>
+        <result column="licenseTime" property="licenseTime"/>
+        <result column="licenseStartTime" property="licenseStartTime"/>
+        <result column="licenseEndTime" property="licenseEndTime"/>
+        <result column="licenseNumber" property="licenseNumber"/>
+        <result column="carNum" property="carNum"/>
+        <result column="driverNum" property="driverNum"/>
+        <result column="mac" property="mac"/>
+        <result column="state" property="state"/>
+        <result column="flag" property="flag"/>
+        <result column="upload" property="upload"/>
+        <result column="insertTime" property="insertTime"/>
+    </resultMap>
+
+
+    <select id="query" resultType="Company">
+        select
+        id as id,
+        isSpe as isSpe,
+        isTaxi as isTaxi,
+        isCross as isCross,
+        isCrossLogistics as isCrossLogistics,
+        isSameLogistics as isSameLogistics,
+        isCharter as isCharter,
+        isSpeFixedOrProportional as isSpeFixedOrProportional,
+        isTaxiFixedOrProportional as isTaxiFixedOrProportional,
+        isCrossLogisticsFixedOrProportional as isCrossLogisticsFixedOrProportional,
+        isSameLogisticsFixedOrProportional as isSameLogisticsFixedOrProportional,
+        speMoney as speMoney,
+        taxiMoney as taxiMoney,
+        crossLogisticsMoney as crossLogisticsMoney,
+        sameLogisticsMoney as sameLogisticsMoney,
+        isNeedFerry as isNeedFerry,
+        name as name,
+        type as type,
+        superiorId as superiorId,
+        principalName as principalName,
+        principalPhone as principalPhone,
+        adminName as adminName,
+        adminPhone as adminPhone,
+        urgentPhoen as urgentPhoen,
+        setupTime as setupTime,
+        identifier as identifier,
+        addressCode as addressCode,
+        businessScope as businessScope,
+        contactAddress as contactAddress,
+        documentAddress as documentAddress,
+        economicType as economicType,
+        regCapital as regCapital,
+        legalName as legalName,
+        legalId as legalId,
+        legalPhone as legalPhone,
+        legalPhotoUrl as legalPhotoUrl,
+        licensingAgency as licensingAgency,
+        licenseTime as licenseTime,
+        licenseStartTime as licenseStartTime,
+        licenseEndTime as licenseEndTime,
+        licenseNumber as licenseNumber,
+        carNum as carNum,
+        driverNum as driverNum,
+        mac as mac,
+        state as state,
+        flag as flag,
+        upload as upload,
+        insertTime as insertTime
+        from t_company where flag != 3 and state = 0 and id in (
+        select companyId from t_company_city where state = 1
+        <if test="null != province and null != city and null != code">
+            and provinceCode = #{province} and cityCode = #{city} and areaCode = #{code}
+        </if>
+        <if test="null != province and null != city and null == code">
+            and provinceCode = #{province} and cityCode = #{city} and (areaCode = '' or areaCode is null)
+        </if>
+        <if test="null != province and null == city and null == code">
+            and provinceCode = #{province} and (cityCode = '' or cityCode is null) and (areaCode = '' or areaCode is null)
+        </if>
+        )
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ComplaintMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ComplaintMapper.xml
new file mode 100644
index 0000000..bda2762
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ComplaintMapper.xml
@@ -0,0 +1,17 @@
+<?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.ComplaintMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Complaint">
+        <id column="id" property="id"/>
+        <result column="userId" property="userId"/>
+        <result column="reason" property="reason"/>
+        <result column="driverId" property="driverId"/>
+        <result column="description" property="description"/>
+        <result column="isHandle" property="isHandle"/>
+        <result column="insert_time" property="insertTime"/>
+        <result column="handleResult" property="handleResult"/>
+        <result column="handleUserId" property="handleUserId"/>
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DeptMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DeptMapper.xml
new file mode 100644
index 0000000..c89d952
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DeptMapper.xml
@@ -0,0 +1,37 @@
+<?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.DeptMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Dept">
+        <id column="id" property="id"/>
+        <result column="num" property="num"/>
+        <result column="pid" property="pid"/>
+        <result column="pids" property="pids"/>
+        <result column="simplename" property="simplename"/>
+        <result column="fullname" property="fullname"/>
+        <result column="tips" property="tips"/>
+        <result column="version" property="version"/>
+    </resultMap>
+
+    <select id="tree" resultType="com.stylefeng.guns.core.node.ZTreeNode">
+		select id,pid as pId,simplename as name,
+		(
+		CASE
+		WHEN (pId = 0 OR pId IS NULL) THEN
+		'true'
+		ELSE
+		'false'
+		END
+		) as isOpen from sys_dept
+	</select>
+
+    <select id="list" resultType="map">
+        select * from sys_dept
+        <if test="condition != null and condition != ''">
+            where simplename like CONCAT('%',#{condition},'%') or fullname like CONCAT('%',#{condition},'%')
+        </if>
+        order by num ASC
+    </select>
+
+</mapper>
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DictMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DictMapper.xml
new file mode 100644
index 0000000..54742bd
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DictMapper.xml
@@ -0,0 +1,42 @@
+<?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.DictMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Dict">
+        <id column="id" property="id"/>
+        <result column="num" property="num"/>
+        <result column="pid" property="pid"/>
+        <result column="name" property="name"/>
+        <result column="code" property="code"/>
+        <result column="tips" property="tips"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+		id, num, pid, name,code,tips
+	</sql>
+
+    <select id="selectByCode" resultType="dict">
+        select
+        <include refid="Base_Column_List"/>
+        from sys_dict
+        where code = #{code}
+    </select>
+
+    <select id="selectByParentCode" resultType="dict">
+        select
+        <include refid="Base_Column_List"/>
+        from sys_dict
+        where pid in(select id  from sys_dict where code = #{code}) order by num asc
+    </select>
+
+    <select id="list" resultType="map">
+        select * from sys_dict
+        where pid = 0
+        <if test="condition != null and condition != ''">
+            AND name like CONCAT('%',#{condition},'%')
+        </if>
+        order by id ASC
+    </select>
+
+</mapper>
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityHistoryMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityHistoryMapper.xml
new file mode 100644
index 0000000..3e7c904
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityHistoryMapper.xml
@@ -0,0 +1,53 @@
+<?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.DriverActivityHistoryMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.DriverActivityHistory">
+        <id column="id" property="id"/>
+        <result column="day" property="day"/>
+        <result column="driverId" property="driverId"/>
+        <result column="type" property="type"/>
+        <result column="activityId" property="activityId"/>
+        <result column="carryOut" property="carryOut"/>
+        <result column="money" property="money"/>
+        <result column="collectionTime" property="collectionTime"/>
+        <result column="insertTime" property="insertTime"/>
+
+    </resultMap>
+
+
+
+    <select id="query" resultType="map">
+        select * from
+        (
+            select
+            DATE_FORMAT(`day`, '%Y.%m.%d') as time,
+            if((select count(id) from t_driver_activity_history where driverId = #{driverId}) > (select count(id) from t_driver_activity_history where driverId = #{driverId} and carryOut = 2), 1, 2) as carryOut
+            from t_driver_activity_history where driverId = #{driverId} group by `day`
+        ) as a order by a.time desc limit #{pageNum}, #{size}
+    </select>
+
+    <select id="queryList" resultType="DriverActivityHistory">
+        select
+        id as id,
+        `day` as `day`,
+        driverId as driverId,
+        `type` as `type`,
+        activityId as activityId,
+        carryOut as carryOut,
+        money as money,
+        collectionTime as collectionTime,
+        insertTime as insertTime
+        from t_driver_activity_history where `day` between #{start} and #{end}
+        <if test="null != type">
+            and `type` = #{type}
+        </if>
+        <if test="null != carryOut">
+            and carryOut = #{carryOut}
+        </if>
+        <if test="null != driverId">
+            and driverId = #{driverId}
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityRegisteredMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityRegisteredMapper.xml
new file mode 100644
index 0000000..4ad136c
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverActivityRegisteredMapper.xml
@@ -0,0 +1,28 @@
+<?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.DriverActivityRegisteredMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.DriverActivityRegistered">
+        <id column="id" property="id"/>
+        <result column="companyId" property="companyId"/>
+        <result column="driverActivityId" property="driverActivityId"/>
+        <result column="type" property="type"/>
+        <result column="money" property="money"/>
+        <result column="startTime" property="startTime"/>
+        <result column="endTime" property="endTime"/>
+        <result column="insertTime" property="insertTime"/>
+    </resultMap>
+
+
+
+    <select id="query" resultType="map">
+        select
+        a.id as id,
+        CONCAT('邀请', if(a.`type` = 1, '司机', '用户'), '注册奖励', a.money, '元') as content,
+        a.money as money
+        from t_driver_activity_registered a
+        left join t_driver_activity b on (a.driverActivityId = b.id)
+        where now() between a.startTime and a.endTime and a.companyId = #{companyId} and a.`type` = #{type} and b.status = 3
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml
new file mode 100644
index 0000000..67abe6e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml
@@ -0,0 +1,330 @@
+<?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.DriverMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Driver">
+        <id column="id" property="id" />
+        <result column="account" property="account" />
+        <result column="jobNumber" property="jobNumber" />
+        <result column="phone" property="phone" />
+        <result column="password" property="password" />
+        <result column="name" property="name" />
+        <result column="sex" property="sex" />
+        <result column="idCard" property="idCard" />
+        <result column="companyId" property="companyId" />
+        <result column="franchiseeId" property="franchiseeId" />
+        <result column="headImgUrl" property="headImgUrl" />
+        <result column="faceImgUrl" property="faceImgUrl" />
+        <result column="idCardImgUrl1" property="idCardImgUrl1" />
+        <result column="idCardImgUrl2" property="idCardImgUrl2" />
+        <result column="placeOfEmployment" property="placeOfEmployment" />
+        <result column="birthday" property="birthday" />
+        <result column="bankCardNumber" property="bankCardNumber" />
+        <result column="driverNationality" property="driverNationality" />
+        <result column="driverNation" property="driverNation" />
+        <result column="driverMaritalStatus" property="driverMaritalStatus" />
+        <result column="driverLanguageLevel" property="driverLanguageLevel" />
+        <result column="driverEducation" property="driverEducation" />
+        <result column="driverCensus" property="driverCensus" />
+        <result column="driverAddress" property="driverAddress" />
+        <result column="driverContactAddress" property="driverContactAddress" />
+        <result column="driverAge" property="driverAge" />
+        <result column="driveCard" property="driveCard" />
+        <result column="driveCardImgUrl" property="driveCardImgUrl" />
+        <result column="driverType" property="driverType" />
+        <result column="getDriverLicenseDate" property="getDriverLicenseDate" />
+        <result column="driverLicenseOn" property="driverLicenseOn" />
+        <result column="driverLicenseOff" property="driverLicenseOff" />
+        <result column="taxiDriver" property="taxiDriver" />
+        <result column="taxiAptitudeCard" property="taxiAptitudeCard" />
+        <result column="networkCarlssueImg" property="networkCarlssueImg"/>
+        <result column="networkCarlssueOrganization" property="networkCarlssueOrganization" />
+        <result column="networkCarlssueDate" property="networkCarlssueDate" />
+        <result column="getNetworkCarProofDate" property="getNetworkCarProofDate" />
+        <result column="networkCarProofOn" property="networkCarProofOn" />
+        <result column="networkCarProofOff" property="networkCarProofOff" />
+        <result column="registerDate" property="registerDate" />
+        <result column="fullTimeDriver" property="fullTimeDriver" />
+        <result column="inDriverBlacklist" property="inDriverBlacklist" />
+        <result column="commercialType" property="commercialType" />
+        <result column="contractCompany" property="contractCompany" />
+        <result column="contractOn" property="contractOn" />
+        <result column="contractOff" property="contractOff" />
+        <result column="emergencyContact" property="emergencyContact" />
+        <result column="emergencyContactPhone" property="emergencyContactPhone" />
+        <result column="emergencyContactAddress" property="emergencyContactAddress" />
+        <result column="remark" property="remark" />
+        <result column="isPlatCar" property="isPlatCar" />
+        <result column="carId" property="carId" />
+        <result column="authState" property="authState" />
+        <result column="state" property="state" />
+        <result column="addType" property="addType" />
+        <result column="balance" property="balance" />
+        <result column="activityMoney" property="activityMoney" />
+        <result column="laveActivityMoney" property="laveActivityMoney" />
+        <result column="businessMoney" property="businessMoney" />
+        <result column="laveBusinessMoney" property="laveBusinessMoney" />
+        <result column="laveBusinessMoney" property="laveBusinessMoney" />
+        <result column="appletsOpenId" property="appletsOpenId"/>
+
+
+        <result column="flag" property="flag"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="insertUser" property="insertUser"/>
+        <result column="updateTime" property="updateTime"/>
+        <result column="updateUser" property="updateUser"/>
+    </resultMap>
+
+
+
+    <select id="queryIdleDriver" resultType="Driver">
+        select
+        id as id,
+        account as account,
+        jobNumber as jobNumber,
+        phone as phone,
+        password as password,
+        name as name,
+        sex as sex,
+        idCard as idCard,
+        companyId as companyId,
+        franchiseeId as franchiseeId,
+        headImgUrl as headImgUrl,
+        faceImgUrl as faceImgUrl,
+        idCardImgUrl1 as idCardImgUrl1,
+        idCardImgUrl2 as idCardImgUrl2,
+        placeOfEmployment as placeOfEmployment,
+        birthday as birthday,
+        bankCardNumber as bankCardNumber,
+        driverNationality as driverNationality,
+        driverNation as driverNation,
+        driverMaritalStatus as driverMaritalStatus,
+        driverLanguageLevel as driverLanguageLevel,
+        driverEducation as driverEducation,
+        driverCensus as driverCensus,
+        driverAddress as driverAddress,
+        driverContactAddress as driverContactAddress,
+        driverAge as driverAge,
+        driveCard as driveCard,
+        driveCardImgUrl as driveCardImgUrl,
+        driverType as driverType,
+        getDriverLicenseDate as getDriverLicenseDate,
+        driverLicenseOn as driverLicenseOn,
+        driverLicenseOff as driverLicenseOff,
+        taxiDriver as taxiDriver,
+        taxiAptitudeCard as taxiAptitudeCard,
+        networkCarlssueImg as networkCarlssueImg,
+        networkCarlssueOrganization as networkCarlssueOrganization,
+        networkCarlssueDate as networkCarlssueDate,
+        getNetworkCarProofDate as getNetworkCarProofDate,
+        networkCarProofOn as networkCarProofOn,
+        networkCarProofOff as networkCarProofOff,
+        registerDate as registerDate,
+        fullTimeDriver as fullTimeDriver,
+        inDriverBlacklist as inDriverBlacklist,
+        commercialType as commercialType,
+        contractCompany as contractCompany,
+        contractOn as contractOn,
+        contractOff as contractOff,
+        emergencyContact as emergencyContact,
+        emergencyContactPhone as emergencyContactPhone,
+        emergencyContactAddress as emergencyContactAddress,
+        remark as remark,
+        isPlatCar as isPlatCar,
+        carId as carId,
+        authState as authState,
+        state as state,
+        addType as addType,
+        balance as balance,
+        flag as flag,
+        insertTime as insertTime,
+        insertUser as insertUser,
+        updateTime as updateTime,
+        updateUser as updateUser
+        from t_driver
+        where flag != 3 and state = 2 and authState = 2
+        <if test="null != companyId">
+            <choose>
+                <when test="companyId != 1">
+                    and companyId = #{companyId} or franchiseeId = #{companyId}
+                </when>
+                <otherwise>
+                    and companyId is null or companyId = 0 or companyId = 1 or franchiseeId is null or franchiseeId = 0
+                </otherwise>
+            </choose>
+
+        </if>
+        and id in
+        (
+          select driverId from t_driver_work where startTime &lt; now() and state = 1 and `type` like CONCAT('%', #{type}, '%')
+        )
+        and id in (select driverId from t_driver_orders where `type` = #{type})
+    </select>
+
+
+
+
+    <select id="queryIdleDriver_" resultType="Driver">
+        select
+        id as id,
+        account as account,
+        jobNumber as jobNumber,
+        phone as phone,
+        password as password,
+        name as name,
+        sex as sex,
+        idCard as idCard,
+        companyId as companyId,
+        franchiseeId as franchiseeId,
+        headImgUrl as headImgUrl,
+        faceImgUrl as faceImgUrl,
+        idCardImgUrl1 as idCardImgUrl1,
+        idCardImgUrl2 as idCardImgUrl2,
+        placeOfEmployment as placeOfEmployment,
+        birthday as birthday,
+        bankCardNumber as bankCardNumber,
+        driverNationality as driverNationality,
+        driverNation as driverNation,
+        driverMaritalStatus as driverMaritalStatus,
+        driverLanguageLevel as driverLanguageLevel,
+        driverEducation as driverEducation,
+        driverCensus as driverCensus,
+        driverAddress as driverAddress,
+        driverContactAddress as driverContactAddress,
+        driverAge as driverAge,
+        driveCard as driveCard,
+        driveCardImgUrl as driveCardImgUrl,
+        driverType as driverType,
+        getDriverLicenseDate as getDriverLicenseDate,
+        driverLicenseOn as driverLicenseOn,
+        driverLicenseOff as driverLicenseOff,
+        taxiDriver as taxiDriver,
+        taxiAptitudeCard as taxiAptitudeCard,
+        networkCarlssueImg as networkCarlssueImg,
+        networkCarlssueOrganization as networkCarlssueOrganization,
+        networkCarlssueDate as networkCarlssueDate,
+        getNetworkCarProofDate as getNetworkCarProofDate,
+        networkCarProofOn as networkCarProofOn,
+        networkCarProofOff as networkCarProofOff,
+        registerDate as registerDate,
+        fullTimeDriver as fullTimeDriver,
+        inDriverBlacklist as inDriverBlacklist,
+        commercialType as commercialType,
+        contractCompany as contractCompany,
+        contractOn as contractOn,
+        contractOff as contractOff,
+        emergencyContact as emergencyContact,
+        emergencyContactPhone as emergencyContactPhone,
+        emergencyContactAddress as emergencyContactAddress,
+        remark as remark,
+        isPlatCar as isPlatCar,
+        carId as carId,
+        authState as authState,
+        state as state,
+        addType as addType,
+        balance as balance,
+        flag as flag,
+        insertTime as insertTime,
+        insertUser as insertUser,
+        updateTime as updateTime,
+        updateUser as updateUser
+        from t_driver
+        where flag != 3 and state = 2 and authState = 2
+        <if test="null != companyId">
+            <choose>
+                <when test="companyId != 1">
+                    and companyId = #{companyId} or franchiseeId = #{companyId}
+                </when>
+                <otherwise>
+                    and companyId is null or companyId = 0 or companyId = 1 or franchiseeId is null or franchiseeId = 0
+                </otherwise>
+            </choose>
+
+        </if>
+        and id in
+        (
+        select driverId from t_driver_work where startTime &lt; now() and state = 1 and `type` like CONCAT('%', #{type}, '%')
+        )
+        and id in (select driverId from t_driver_orders where `type` = #{type})
+        and carId in (select carId from t_car_service where `type` = #{type}
+        <if test="null != serverCarModelId">
+            and serverCarModelId = #{serverCarModelId}
+        </if>
+        )
+    </select>
+
+
+
+    <select id="queryOrderDriver" resultType="map">
+        select
+        b.id as orderId,
+        b.state as state,
+        a.id as driverId,
+        a.`name` as `name`,
+        a.headImgUrl as avatar,
+        a.phone as phone,
+        c.carLicensePlate as carCode,
+        CONCAT(F.`name`, d.`name`,  '.', c.carColor) as carName,
+        (select sum(fraction) / count(id) from t_order_evaluate where driverId = a.id) as score,
+        (
+        (select count(id) from t_order_private_car where state in (7, 8, 9) and driverId = a.id) +
+        (select count(id) from t_order_taxi where state in (7, 8, 9) and driverId = a.id) +
+        (select count(id) from t_order_cross_city where state in (6, 8, 9) and driverId = a.id)
+        ) as num,
+        DATE_FORMAT(b.startServiceTime, '%m月%d日 %H:%i') as `time`,
+        b.startAddress as `start`,
+        b.endAddress as `end`
+        from t_driver a
+        <if test="orderType == 1">
+            left join t_order_private_car b on (a.id = b.driverId)
+        </if>
+        <if test="orderType == 2">
+            left join t_order_taxi b on (a.id = b.driverId)
+        </if>
+        <if test="orderType == 3">
+            left join t_order_cross_city b on (a.id = b.driverId)
+        </if>
+        <if test="orderType == 4">
+            left join t_order_tat_order_logisticsxi b on (a.id = b.driverId)
+        </if>
+        <if test="orderType == 5">
+            left join t_order_logistics b on (a.id = b.driverId)
+        </if>
+        left join t_car c on (b.carId = c.id)
+        left join t_car_model d on (c.carModelId = d.id)
+        left join t_car_brand f on (d.brandId = f.id)
+        where b.id = #{orderId}
+    </select>
+
+
+
+    <select id="queryDriverInfo" resultType="map">
+        select
+        a.id as id,
+        a.headImgUrl as avatar,
+        a.`name` as `name`,
+        a.phone as phone,
+        a.idCard as idcode,
+        b.carLicensePlate as licensePlate,
+        b.carColor as carColor,
+        CONCAT(d.`name`, c.`name`) as brand,
+        if((select count(id) from t_driver_work where state = 1 and driverId = a.id) = 0, 1, if(
+        (
+        (select count(id) from t_order_private_car where state not in (6, 7, 8, 9, 10, 12) and driverId = a.id) +
+        (select count(id) from t_order_taxi where state not in (6, 7, 8, 9, 10, 12) and driverId = a.id) +
+        (select count(id) from t_order_cross_city where state not in (6, 7, 8, 9, 10, 12) and driverId = a.id)
+        ) = 0, 2, 3)) as state,
+        (
+        (select count(id) from t_order_private_car where state in (7, 8, 9) and driverId = a.id) +
+        (select count(id) from t_order_taxi where state in (7, 8, 9) and driverId = a.id) +
+        (select count(id) from t_order_cross_city where state in (6, 8, 9) and driverId = a.id)
+        ) as orderNum,
+        ((select sum(fraction) from t_order_evaluate where driverId = a.id) / (select count(id) from t_order_evaluate where driverId = a.id)) as fraction
+        from t_driver a
+        left join t_car b on (a.carId = b.id)
+        left join t_car_model c on (b.carModelId = c.id)
+        left join t_car_brand d on (c.brandId = d.id)
+        where a.id = #{id}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOrdersMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOrdersMapper.xml
new file mode 100644
index 0000000..6137000
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverOrdersMapper.xml
@@ -0,0 +1,25 @@
+<?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.DriverOrdersMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.DriverOrders">
+        <id column="id" property="id"/>
+        <result column="driverId" property="driverId"/>
+        <result column="type" property="type"/>
+    </resultMap>
+
+
+    <select id="query" resultType="DriverOrders">
+        select
+        id as id,
+        driverId as driverId,
+        `type` as `type`
+        from t_driver_orders where driverId = #{uid} and `type` = #{type}
+    </select>
+
+
+    <select id="queryOrders" resultType="int">
+        select `type` from t_driver_orders where driverId = #{uid}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverServiceMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverServiceMapper.xml
new file mode 100644
index 0000000..9995d25
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverServiceMapper.xml
@@ -0,0 +1,26 @@
+<?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.DriverServiceMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.DriverService">
+        <id column="id" property="id" />
+        <result column="driverId" property="driverId" />
+        <result column="type" property="type" />
+    </resultMap>
+
+
+    <select id="queryBusiness" resultType="DriverService">
+        select
+        id as id,
+        driverId as driverId,
+        `type` as `type`
+        from t_driver_service where driverId = #{uid}
+        <if test="null != type">
+            and `type` in
+            <foreach collection="type" item="item" index="index" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverWorkMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverWorkMapper.xml
new file mode 100644
index 0000000..290179b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverWorkMapper.xml
@@ -0,0 +1,14 @@
+<?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.DriverWorkMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.DriverWork">
+        <id column="id" property="id" />
+        <result column="driverId" property="driverId" />
+        <result column="startTime" property="startTime" />
+        <result column="endTime" property="endTime" />
+        <result column="type" property="type" />
+        <result column="state" property="state" />
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ExpenseMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ExpenseMapper.xml
new file mode 100644
index 0000000..74e8be4
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ExpenseMapper.xml
@@ -0,0 +1,20 @@
+<?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.ExpenseMapper">
+
+	<!-- 通用查询映射结果 -->
+	<resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Expense">
+		<id column="id" property="id" />
+		<result column="money" property="money" />
+		<result column="desc" property="desc" />
+		<result column="createtime" property="createtime" />
+		<result column="state" property="state" />
+		<result column="userid" property="userid" />
+	</resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, money, desc, createtime, state, userid
+    </sql>
+
+</mapper>
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FeedbackMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FeedbackMapper.xml
new file mode 100644
index 0000000..8cac652
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/FeedbackMapper.xml
@@ -0,0 +1,19 @@
+<?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.FeedbackMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Feedback">
+        <id column="id" property="id"/>
+        <result column="userId" property="userId"/>
+        <result column="handleUserId" property="handleUserId"/>
+        <result column="content" property="content"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="imgUrl" property="imgUrl"/>
+        <result column="flag" property="flag"/>
+        <result column="state" property="state"/>
+        <result column="cldate" property="cldate"/>
+        <result column="remark" property="remark"/>
+        <result column="type" property="type"/>
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/GDInterfaceMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/GDInterfaceMapper.xml
new file mode 100644
index 0000000..bbd4fce
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/GDInterfaceMapper.xml
@@ -0,0 +1,18 @@
+<?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.GDInterfaceMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.GDInterface">
+        <id column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="explanation" property="explanation"/>
+        <result column="num" property="num"/>
+        <result column="time" property="time"/>
+    </resultMap>
+    
+    
+    <select id="query" resultType="GDInterface">
+        select * from t_gdinterface where `name` like #{name} and explanation like #{explanation} and `time` = #{time} limit 0, 1
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IncomeMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IncomeMapper.xml
new file mode 100644
index 0000000..c672369
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IncomeMapper.xml
@@ -0,0 +1,16 @@
+<?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.IncomeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Income">
+        <id column="id" property="id"/>
+        <result column="userType" property="userType"/>
+        <result column="objectId" property="objectId"/>
+        <result column="type" property="type"/>
+        <result column="incomeId" property="incomeId"/>
+        <result column="orderType" property="orderType"/>
+        <result column="money" property="money"/>
+        <result column="insertTime" property="insertTime"/>
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IntegralGoodsMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IntegralGoodsMapper.xml
new file mode 100644
index 0000000..be601d6
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IntegralGoodsMapper.xml
@@ -0,0 +1,39 @@
+<?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.IntegralGoodsMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.IntegralGoods">
+        <id column="id" property="id"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="name" property="name"/>
+        <result column="imgUrl" property="imgUrl"/>
+        <result column="integral" property="integral"/>
+        <result column="instructions" property="instructions"/>
+        <result column="state" property="state"/>
+        <result column="insertUserId" property="insertUserId"/>
+        <result column="insertUserRole" property="insertUserRole"/>
+    </resultMap>
+
+
+    <select id="queryGoods" resultType="map">
+        select
+        id as id,
+        `name` as `name`,
+        imgUrl as url,
+        integral as integral,
+        instructions as instructions
+        from t_integral_goods where state = 1 order by insertTime desc limit #{pageNum}, #{size}
+    </select>
+
+
+    <select id="queryGoodsInfo" resultType="map">
+        select
+        id as id,
+        `name` as `name`,
+        imgUrl as url,
+        integral as integral,
+        instructions as instructions
+        from t_integral_goods where id = #{id}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IntegralOrderMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IntegralOrderMapper.xml
new file mode 100644
index 0000000..2dbcd1b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/IntegralOrderMapper.xml
@@ -0,0 +1,32 @@
+<?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.IntegralOrderMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.IntegralOrder">
+        <id column="id" property="id"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="userId" property="userId"/>
+        <result column="goodsId" property="goodsId"/>
+        <result column="integral" property="integral"/>
+        <result column="num" property="num"/>
+        <result column="consigneeName" property="consigneeName"/>
+        <result column="consigneePhone" property="consigneePhone"/>
+        <result column="consigneeAddress" property="consigneeAddress"/>
+        <result column="remark" property="remark"/>
+        <result column="state" property="state"/>
+    </resultMap>
+
+
+    <select id="queryConvertHistory" resultType="map">
+        select
+        a.id as id,
+        b.`name` as `name`,
+        DATE_FORMAT(a.insertTime, '%Y-%m-%d %H:%i') as time,
+        CONCAT(a.integral * -1, '积分') as integral
+        from t_integral_order a
+        left join t_integral_goods b on (a.goodsId = b.id)
+        where a.state != 3 and a.userId = #{uid}
+        order by a.insertTime desc limit #{pageNum}, #{size}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml
new file mode 100644
index 0000000..b56811d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml
@@ -0,0 +1,35 @@
+<?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.InvoiceMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Invoice">
+        <id column="id" property="id"/>
+        <result column="money" property="money"/>
+        <result column="orderNum" property="orderNum"/>
+        <result column="type" property="type"/>
+        <result column="name" property="name"/>
+        <result column="code" property="code"/>
+        <result column="content" property="content"/>
+        <result column="remark" property="remark"/>
+        <result column="address" property="address"/>
+        <result column="bank" property="bank"/>
+        <result column="email" property="email"/>
+        <result column="userId" property="userId"/>
+        <result column="state" property="state"/>
+        <result column="insertTime" property="insertTime"/>
+    </resultMap>
+
+
+
+    <select id="queryMyInvoice" resultType="Invoice">
+        select
+        id as id,
+        insertTime as insertTime,
+        ('电子发票') as type,
+        ('出行服务') as content,
+        state as state,
+        money as money
+        from t_invoice where userId = #{uid} order by insertTime desc limit #{pageNum}, #{size}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/LoginLogMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/LoginLogMapper.xml
new file mode 100644
index 0000000..94423d9
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/LoginLogMapper.xml
@@ -0,0 +1,41 @@
+<?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.LoginLogMapper">
+
+	<!-- 通用查询映射结果 -->
+	<resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.LoginLog">
+		<id column="id" property="id" />
+		<result column="logname" property="logname" />
+		<result column="userid" property="userid" />
+		<result column="createtime" property="createtime" />
+		<result column="succeed" property="succeed" />
+		<result column="message" property="message" />
+		<result column="ip" property="ip" />
+	</resultMap>
+
+	<select id="getLoginLogs" resultType="map" parameterType="com.baomidou.mybatisplus.plugins.Page">
+		select * from sys_login_log where 1 = 1
+		<if test="beginTime != null and beginTime !='' and endTime != null and endTime != ''">
+			and (createTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
+		</if>
+		<if test="logName != null and logName !=''">
+			and logname like CONCAT('%',#{logName},'%')
+		</if>
+		<choose>
+			<when test="orderByField != null and orderByField !=''">
+				<choose>
+					<when test="isAsc == true">
+						order by ${orderByField} ASC
+					</when>
+					<otherwise>
+						order by ${orderByField} DESC
+					</otherwise>
+				</choose>
+			</when>
+			<otherwise>
+				order by createtime DESC
+			</otherwise>
+		</choose>
+	</select>
+
+</mapper>
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/MenuMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/MenuMapper.xml
new file mode 100644
index 0000000..849dc3f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/MenuMapper.xml
@@ -0,0 +1,177 @@
+<?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.MenuMapper">
+
+	<!-- 通用查询映射结果 -->
+	<resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Menu">
+		<id column="id" property="id" />
+		<result column="code" property="code" />
+		<result column="pcode" property="pcode" />
+		<result column="pcodes" property="pcodes" />
+		<result column="name" property="name" />
+		<result column="icon" property="icon" />
+		<result column="url" property="url" />
+		<result column="num" property="num" />
+		<result column="levels" property="levels" />
+		<result column="ismenu" property="ismenu" />
+		<result column="tips" property="tips" />
+		<result column="status" property="status" />
+		<result column="isopen" property="isopen" />
+	</resultMap>
+
+    <sql id="Base_Column_List">
+        id, code, pcode, name, icon, url, num, levels,pcodes,
+        tips, status,isopen,ismenu
+    </sql>
+
+    <select id="selectMenus" resultType="map">
+        select
+        <include refid="Base_Column_List" />
+        from sys_menu
+        where status = 1
+        <if test="condition != null and condition != ''">
+            and (name like CONCAT('%',#{condition},'%') or code like CONCAT('%',#{condition},'%'))
+        </if>
+        <if test="level != null and level != ''">
+            and levels = #{level}
+        </if>
+    </select>
+
+    <select id="getMenuIdsByRoleId" resultType="long">
+        select menuid from
+        sys_relation where roleid = #{roleId}
+    </select>
+
+    <select id="menuTreeList" resultType="com.stylefeng.guns.core.node.ZTreeNode">
+        SELECT
+        m1.id AS id,
+        (
+        CASE
+        WHEN (m2.id = 0 OR m2.id IS NULL) THEN
+        0
+        ELSE
+        m2.id
+        END
+        ) AS pId,
+        m1. NAME
+        AS NAME,
+        (
+        CASE
+        WHEN (m2.id = 0 OR m2.id IS NULL) THEN
+        'true'
+        ELSE
+        'false'
+        END
+        ) as isOpen
+        FROM
+        sys_menu m1
+        LEFT join sys_menu m2 ON m1.pcode = m2. CODE
+        ORDER BY
+        m1.id ASC
+    </select>
+
+    <select id="menuTreeListByMenuIds" resultType="com.stylefeng.guns.core.node.ZTreeNode">
+        SELECT
+        m1.id AS id,
+        (
+        CASE
+        WHEN (m2.id = 0 OR m2.id IS NULL) THEN
+        0
+        ELSE
+        m2.id
+        END
+        ) AS pId,
+        m1. NAME AS NAME,
+        (
+        CASE
+        WHEN (m2.id = 0 OR m2.id IS
+        NULL) THEN
+        'true'
+        ELSE
+        'false'
+        END
+        ) as isOpen,
+        (
+        CASE
+        WHEN (m3.ID = 0 OR m3.ID
+        IS NULL) THEN
+        'false'
+        ELSE
+        'true'
+        END
+        ) "checked"
+        FROM
+        sys_menu m1
+        LEFT JOIN
+        sys_menu m2
+        ON m1.pcode = m2. CODE
+        left join (
+        SELECT
+        ID
+        FROM
+        sys_menu
+        WHERE
+        ID IN
+        <foreach collection="list" index="index" item="i" open="("
+                 separator="," close=")">
+            #{i}
+        </foreach>
+        ) m3 on m1.id = m3.id
+        ORDER BY
+        m1.id ASC
+    </select>
+
+    <delete id="deleteRelationByMenu">
+        delete from sys_relation where menuid = #{menuId}
+    </delete>
+
+    <select id="getResUrlsByRoleId" resultType="string">
+        select url from
+        sys_relation rel
+        inner join sys_menu m on rel.menuid = m.id
+        where rel.roleid = #{roleId}
+    </select>
+
+    <select id="getMenusByRoleIds" resultType="com.stylefeng.guns.core.node.MenuNode">
+        SELECT
+        m1.id AS id,
+        m1.icon AS icon,
+        (
+        CASE
+        WHEN (m2.id = 0 OR m2.id IS NULL) THEN
+        0
+        ELSE
+        m2.id
+        END
+        ) AS parentId,
+        m1.NAME as name,
+        m1.url as url,
+        m1.levels as levels,
+        m1.ismenu as ismenu,
+        m1.num as num
+        FROM
+        sys_menu m1
+        LEFT join sys_menu m2 ON m1.pcode = m2. CODE
+        INNER JOIN (
+        SELECT
+        ID
+        FROM
+        sys_menu
+        WHERE
+        ID IN (
+        SELECT
+        menuid
+        FROM
+        sys_relation rela
+        WHERE
+        rela.roleid IN
+        <foreach collection="list" index="index" item="i" open="(" separator="," close=")">
+            #{i}
+        </foreach>
+        )
+        ) m3 ON m1.id = m3.id
+        where m1.ismenu = 1
+        order by levels,num asc
+    </select>
+
+</mapper>
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/NoticeMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/NoticeMapper.xml
new file mode 100644
index 0000000..6d4ba33
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/NoticeMapper.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.NoticeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Notice">
+        <id column="id" property="id"/>
+        <result column="title" property="title"/>
+        <result column="type" property="type"/>
+        <result column="content" property="content"/>
+        <result column="createtime" property="createtime"/>
+        <result column="creater" property="creater"/>
+    </resultMap>
+
+    <select id="list" resultType="map">
+        select * from sys_notice
+        <if test="condition != null and condition != ''">
+            where title like CONCAT('%',#{condition},'%') or content like CONCAT('%',#{condition},'%')
+        </if>
+        order by createtime DESC
+    </select>
+
+</mapper>
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OpenCityBusinessMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OpenCityBusinessMapper.xml
new file mode 100644
index 0000000..f1938ef
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OpenCityBusinessMapper.xml
@@ -0,0 +1,62 @@
+<?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.OpenCityBusinessMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.OpenCityBusiness">
+        <id column="id" property="id"/>
+        <result column="openCityId" property="openCityId"/>
+        <result column="businessType" property="businessType"/>
+        <result column="sort" property="sort"/>
+
+        <result column="flag" property="flag"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="insertUser" property="insertUser"/>
+        <result column="updateTime" property="updateTime"/>
+        <result column="updateUser" property="updateUser"/>
+    </resultMap>
+
+
+
+    <select id="queryBusiness" resultType="OpenCityBusiness">
+        select
+        a.id as id,
+        a.openCityId as openCityId,
+        a.businessType as businessType,
+        a.sort as sort,
+        a.flag as flag,
+        a.insertTime as insertTime,
+        a.insertUser as insertUser,
+        a.updateTime as updateTime,
+        a.updateUser as updateUser
+        from t_open_city_business a
+        left join t_open_city b on (a.openCityId = b.id)
+        where a.flag != 3 and b.flag != 3
+        <if test="null != district">
+            and b.provinceName = #{district}
+        </if>
+        <if test="null != city">
+            and b.cityName = #{city}
+        </if>
+        <if test="null != province">
+            and b.areaName = #{province}
+        </if>
+        order by a.sort
+    </select>
+
+
+    <select id="queryBusinessById" resultType="OpenCityBusiness">
+        select
+        id as id,
+        openCityId as openCityId,
+        businessType as businessType,
+        sort as sort,
+        flag as flag,
+        insertTime as insertTime,
+        insertUser as insertUser,
+        updateTime as updateTime,
+        updateUser as updateUser
+        from t_open_city_business
+        where flag != 3 and openCityId = #{id} order by sort
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OpenCityMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OpenCityMapper.xml
new file mode 100644
index 0000000..9c6a66e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OpenCityMapper.xml
@@ -0,0 +1,61 @@
+<?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.OpenCityMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.OpenCity">
+        <id column="id" property="id"/>
+        <result column="code" property="code"/>
+        <result column="lon" property="lon"/>
+        <result column="lat" property="lat"/>
+        <result column="isQualifications" property="isQualifications"/>
+        <result column="areaName" property="areaName"/>
+        <result column="cityName" property="cityName"/>
+        <result column="provinceName" property="provinceName"/>
+
+        <result column="flag" property="flag"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="insertUser" property="insertUser"/>
+        <result column="updateTime" property="updateTime"/>
+        <result column="updateUser" property="updateUser"/>
+    </resultMap>
+
+
+
+    <select id="queryOpenCity" resultType="OpenCity">
+        select
+        id as id,
+        code as code,
+        lon as lon,
+        lat as lat,
+        isQualifications as isQualifications,
+        areaName as areaName,
+        cityName as cityName,
+        provinceName as provinceName,
+        flag as flag,
+        insertTime as insertTime,
+        insertUser as insertUser,
+        updateTime as updateTime,
+        updateUser as updateUser
+        from t_open_city where flag = 1
+    </select>
+
+
+    <select id="queryByCode" resultType="OpenCity">
+        select
+        id as id,
+        code as code,
+        lon as lon,
+        lat as lat,
+        isQualifications as isQualifications,
+        areaName as areaName,
+        cityName as cityName,
+        provinceName as provinceName,
+        flag as flag,
+        insertTime as insertTime,
+        insertUser as insertUser,
+        updateTime as updateTime,
+        updateUser as updateUser
+        from t_open_city where flag = 1 and code = #{code}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OperationLogMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OperationLogMapper.xml
new file mode 100644
index 0000000..1d0d711
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OperationLogMapper.xml
@@ -0,0 +1,46 @@
+<?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.OperationLogMapper">
+
+	<!-- 通用查询映射结果 -->
+	<resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.OperationLog">
+		<id column="id" property="id" />
+		<result column="logtype" property="logtype" />
+		<result column="logname" property="logname" />
+		<result column="userid" property="userid" />
+		<result column="classname" property="classname" />
+		<result column="method" property="method" />
+		<result column="createtime" property="createtime" />
+		<result column="succeed" property="succeed" />
+		<result column="message" property="message" />
+	</resultMap>
+
+	<select id="getOperationLogs" resultType="map">
+		select * from sys_operation_log where 1 = 1
+		<if test="beginTime != null and beginTime !='' and endTime != null and endTime != ''">
+			and (createTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
+		</if>
+		<if test="logName != null and logName !=''">
+			and logname like CONCAT('%',#{logName},'%')
+		</if>
+		<if test="logType != null and logType !=''">
+			and logtype like CONCAT('%',#{logType},'%')
+		</if>
+		<choose>
+			<when test="orderByField != null and orderByField !=''">
+				<choose>
+					<when test="isAsc == true">
+						order by ${orderByField} ASC
+					</when>
+					<otherwise>
+						order by ${orderByField} DESC
+					</otherwise>
+				</choose>
+			</when>
+			<otherwise>
+				order by createtime DESC
+			</otherwise>
+		</choose>
+	</select>
+
+</mapper>
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderCancelMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderCancelMapper.xml
new file mode 100644
index 0000000..27646c8
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderCancelMapper.xml
@@ -0,0 +1,70 @@
+<?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.OrderCancelMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.OrderCancel">
+        <id column="id" property="id"/>
+        <result column="orderId" property="orderId"/>
+        <result column="orderType" property="orderType"/>
+        <result column="reason" property="reason"/>
+        <result column="remark" property="remark"/>
+        <result column="payType" property="payType"/>
+        <result column="money" property="money"/>
+        <result column="state" property="state"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="userType" property="userType"/>
+        <result column="userId" property="userId"/>
+    </resultMap>
+
+
+    <select id="query" resultType="OrderCancel">
+        select
+        id as id,
+        orderId as orderId,
+        orderType as orderType,
+        reason as reason,
+        remark as remark,
+        payType as payType,
+        money as money,
+        state as state,
+        insertTime as insertTime,
+        userType as userType,
+        userId as userId
+        from t_order_cancel where 1 = 1
+        <if test="null != orderId">
+            and orderId = #{orderId}
+        </if>
+        <if test="null != orderType">
+            and orderType = #{orderType}
+        </if>
+        <if test="null != money">
+            and money = #{money}
+        </if>
+        <if test="null != payType">
+            and payType = #{payType}
+        </if>
+        <if test="null != state">
+            and state = #{state}
+        </if>
+        order by insertTime desc limit 0,1
+    </select>
+
+
+    <select id="queryCancel" resultType="map">
+        select
+        (money * -1) as money,
+        DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i') as time,
+        CONCAT(if(orderType = 1, '专车', if(orderType = 2, '出租车', if(orderType = 3, '跨城', if(orderType = 4, '同城小件物流', if(orderType = 5, '跨城小件物流', '包车'))))), '订单取消') as name,
+        UNIX_TIMESTAMP(insertTime) as insertTime
+        from t_order_cancel where state = 2 and userType = 1 and money is not null and userId = #{uid}
+        <choose>
+            <when test="1 == isPay">
+                and money is null
+            </when>
+            <otherwise>
+                and money is not null
+            </otherwise>
+        </choose>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderEvaluateMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderEvaluateMapper.xml
new file mode 100644
index 0000000..65ab64e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderEvaluateMapper.xml
@@ -0,0 +1,26 @@
+<?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.OrderEvaluateMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.OrderEvaluate">
+        <id column="id" property="id"/>
+        <result column="orderId" property="orderId"/>
+        <result column="driverId" property="driverId"/>
+        <result column="orderType" property="orderType"/>
+        <result column="fraction" property="fraction"/>
+        <result column="content" property="content"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="userId" property="userId"/>
+    </resultMap>
+
+
+
+    <select id="queryOrderEvaluate" resultType="map">
+        select
+        DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i') as time,
+        content as content,
+        fraction as fraction
+        from t_order_evaluate where driverId = #{driverId} and unix_timestamp(insertTime) &lt; unix_timestamp(now()) - 86400 order by insertTime desc limit #{pageNum}, #{size}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderPositionMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderPositionMapper.xml
new file mode 100644
index 0000000..923d815
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/OrderPositionMapper.xml
@@ -0,0 +1,27 @@
+<?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.OrderPositionMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.OrderPosition">
+        <id column="id" property="id"/>
+        <result column="orderType" property="orderType"/>
+        <result column="orderId" property="orderId"/>
+        <result column="driverId" property="driverId"/>
+        <result column="lon" property="lon"/>
+        <result column="lat" property="lat"/>
+        <result column="directionAngle" property="directionAngle"/>
+        <result column="altitude" property="altitude"/>
+        <result column="insertTime" property="insertTime"/>
+    </resultMap>
+
+
+
+
+    <select id="queryTrack" resultType="map">
+        select
+        lon as lon,
+        lat as lat
+        from t_order_position where orderId = #{orderId} and orderType = #{orderType} order by insertTime
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PhoneMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PhoneMapper.xml
new file mode 100644
index 0000000..213317e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PhoneMapper.xml
@@ -0,0 +1,68 @@
+<?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.PhoneMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Phone">
+        <id column="id" property="id" />
+        <result column="type" property="type" />
+        <result column="platform" property="platform"/>
+        <result column="phone" property="phone" />
+        <result column="companyId" property="companyId"/>
+    </resultMap>
+
+
+
+    <select id="queryPhones" resultType="Phone">
+        select
+        id as id,
+        type as type,
+        platform as platform,
+        phone as phone,
+        companyId as companyId
+        from t_phone where companyId in (
+        select companyId from t_company_city where state = 1
+        <if test="null != province">
+            and provinceCode = #{province}
+        </if>
+        <if test="null != city">
+            and cityCode = #{city}
+        </if>
+        <if test="null != code">
+            and areaCode = #{code}
+        </if>
+        )
+    </select>
+
+
+    <select id="query" resultType="Phone">
+        select
+        id as id,
+        type as type,
+        platform as platform,
+        phone as phone,
+        companyId as companyId
+        from t_phone where 1 = 1
+        <if test="null != type">
+            and type = #{type}
+        </if>
+        <if test="null != platform">
+            and platform = #{platform}
+        </if>
+        <if test="platform != 1">
+            and companyId in (
+            select companyId from t_company_city where state = 1
+            <if test="null != province">
+                and provinceCode = #{province}
+            </if>
+            <if test="null != city">
+                and cityCode = #{city}
+            </if>
+            <if test="null != code">
+                and areaCode = #{code}
+            </if>
+            )
+        </if>
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ProblemMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ProblemMapper.xml
new file mode 100644
index 0000000..56a4987
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ProblemMapper.xml
@@ -0,0 +1,26 @@
+<?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.ProblemMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Problem">
+        <id column="id" property="id"/>
+        <result column="userId" property="userId"/>
+        <result column="content" property="content"/>
+        <result column="answer" property="answer"/>
+        <result column="handleUserId" property="handleUserId"/>
+        <result column="handleTime" property="handleTime"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="state" property="state"/>
+    </resultMap>
+
+
+    <select id="queryProblems" resultType="map">
+        select
+        id as id,
+        DATE_FORMAT(insertTime, '%Y.%m.%d %H:%i') as insertTime,
+        content as content,
+        answer as answer
+        from t_problem where userId = #{uid} order by insertTime desc limit #{pageNum}, #{size}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushOrderMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushOrderMapper.xml
new file mode 100644
index 0000000..04d7e4c
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushOrderMapper.xml
@@ -0,0 +1,34 @@
+<?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.PushOrderMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.PushOrder">
+        <id column="id" property="id"/>
+        <result column="companyId" property="companyId"/>
+        <result column="pushDistance" property="pushDistance"/>
+        <result column="pushTime" property="pushTime"/>
+        <result column="driverProportion" property="driverProportion"/>
+        <result column="type" property="type"/>
+        <result column="pushType" property="pushType"/>
+    </resultMap>
+
+
+    <select id="querys" resultType="PushOrder">
+        select
+        id as id,
+        companyId as companyId,
+        pushDistance as pushDistance,
+        pushTime as pushTime,
+        driverProportion as driverProportion,
+        `type` as `type`,
+        pushType as pushType
+        from t_sys_push_order where companyId = #{companyId}
+        <if test="null != type">
+            and `type` = #{type}
+        </if>
+        <if test="null != pushType">
+            and pushType = #{pushType}
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RedPacketRecordMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RedPacketRecordMapper.xml
new file mode 100644
index 0000000..3c46afe
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RedPacketRecordMapper.xml
@@ -0,0 +1,35 @@
+<?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.RedPacketRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.RedPacketRecord">
+        <id column="id" property="id"/>
+        <result column="money" property="money"/>
+        <result column="insert_time" property="insertTime"/>
+        <result column="companyId" property="companyId"/>
+        <result column="name" property="name"/>
+        <result column="type" property="type"/>
+        <result column="totalMoney" property="totalMoney"/>
+        <result column="laveMoney" property="laveMoney"/>
+        <result column="startMoney" property="startMoney"/>
+        <result column="endMoney" property="endMoney"/>
+    </resultMap>
+
+
+
+    <select id="queryDate" resultType="RedPacketRecord">
+        select
+        id as id,
+        money as money,
+        insert_time as insertTime,
+        companyId as companyId,
+        name as name,
+        type as type,
+        totalMoney as totalMoney,
+        laveMoney as laveMoney,
+        startMoney as startMoney,
+        endMoney as endMoney
+        from t_sys_red_packet_record a where laveMoney != 0 and companyId = #{companyId} limit 0,1
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RegionMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RegionMapper.xml
new file mode 100644
index 0000000..bfcd926
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RegionMapper.xml
@@ -0,0 +1,38 @@
+<?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.RegionMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Region">
+        <id column="id" property="id" />
+        <result column="name" property="name" />
+        <result column="code" property="code" />
+        <result column="citycode" property="citycode" />
+        <result column="parent_id" property="parentId" />
+        <result column="english" property="english" />
+    </resultMap>
+
+
+    <select id="query" resultType="Region">
+        select
+        id as id,
+        name as name,
+        code as code,
+        citycode as citycode,
+        parent_id as parentId,
+        english as english
+        from t_region where code = #{code}
+    </select>
+
+
+    <select id="querys" resultType="Region">
+        select
+        id as id,
+        name as name,
+        code as code,
+        citycode as citycode,
+        parent_id as parentId,
+        english as english
+        from t_region where parent_id = #{parentId} order by code
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RelationMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RelationMapper.xml
new file mode 100644
index 0000000..2f4be0a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RelationMapper.xml
@@ -0,0 +1,12 @@
+<?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.RelationMapper">
+
+	<!-- 通用查询映射结果 -->
+	<resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Relation">
+		<id column="id" property="id" />
+		<result column="menuid" property="menuid" />
+		<result column="roleid" property="roleid" />
+	</resultMap>
+
+</mapper>
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RoleMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RoleMapper.xml
new file mode 100644
index 0000000..ff4878c
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RoleMapper.xml
@@ -0,0 +1,79 @@
+<?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.RoleMapper">
+
+	<!-- 通用查询映射结果 -->
+	<resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Role">
+		<id column="id" property="id" />
+		<result column="num" property="num" />
+		<result column="pid" property="pid" />
+		<result column="name" property="name" />
+		<result column="deptid" property="deptid" />
+		<result column="tips" property="tips" />
+		<result column="version" property="version" />
+	</resultMap>
+
+	<sql id="Base_Column_List">
+		id, num, pid, name, deptid, tips, version
+	</sql>
+
+	<select id="selectRoles" resultType="map">
+		select
+		<include refid="Base_Column_List" />
+		from sys_role
+		<if test="condition != null">
+			where name like CONCAT('%',#{condition},'%')
+		</if>
+	</select>
+
+	<delete id="deleteRolesById">
+		delete from sys_relation where roleid = #{roleId}
+	</delete>
+
+	<select id="roleTreeList" resultType="com.stylefeng.guns.core.node.ZTreeNode">
+		select id "id",pId
+		"pId",name as "name",(case when (pId=0 or pId is null) then 'true'
+		else 'false' end) "open" from sys_role
+	</select>
+
+	<select id="roleTreeListByRoleId" resultType="com.stylefeng.guns.core.node.ZTreeNode">
+		SELECT
+		r.id "id",
+		pId "pId",
+		NAME AS "name",
+		(
+		CASE
+		WHEN (pId = 0 OR pId IS NULL) THEN
+		'true'
+		ELSE
+		'false'
+		END
+		) "open",
+		(
+		CASE
+		WHEN (r1.ID = 0 OR r1.ID IS NULL) THEN
+		'false'
+		ELSE
+		'true'
+		END
+		) "checked"
+		FROM
+		sys_role r
+		LEFT JOIN (
+		SELECT
+		ID
+		FROM
+		sys_role
+		WHERE
+		ID IN
+
+		<foreach collection="array" index="index" item="i" open="(" separator="," close=")">
+			#{i}
+		</foreach>
+
+		) r1 ON r.ID = r1.ID
+		ORDER BY
+		pId,
+		num ASC
+	</select>
+</mapper>
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SensitiveWordsMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SensitiveWordsMapper.xml
new file mode 100644
index 0000000..3a5eadd
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SensitiveWordsMapper.xml
@@ -0,0 +1,11 @@
+<?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.SensitiveWordsMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.SensitiveWords">
+        <id column="id" property="id" />
+        <result column="createTime" property="createTime" />
+        <result column="content" property="content" />
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ServerCarModelMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ServerCarModelMapper.xml
new file mode 100644
index 0000000..95202f6
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/ServerCarModelMapper.xml
@@ -0,0 +1,26 @@
+<?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.ServerCarModelMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.ServerCarModel">
+        <id column="id" property="id"/>
+        <result column="type" property="type"/>
+        <result column="name" property="name"/>
+        <result column="img" property="img"/>
+        <result column="price" property="price"/>
+        <result column="state" property="state"/>
+        <result column="insertTime" property="insertTime"/>
+    </resultMap>
+
+
+
+    <select id="queryServerCarModel" resultType="map">
+        select
+        id as id,
+        `name` as `name`,
+        img as img,
+        price as price
+        from t_server_carmodel where state = 1 and `type` = #{type}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SmsrecordMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SmsrecordMapper.xml
new file mode 100644
index 0000000..eff60ea
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SmsrecordMapper.xml
@@ -0,0 +1,14 @@
+<?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.SmsrecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Smsrecord">
+        <id column="id" property="id"/>
+        <result column="type" property="type"/>
+        <result column="phone" property="phone"/>
+        <result column="code" property="code"/>
+        <result column="content" property="content"/>
+        <result column="insertTime" property="insertTime"/>
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysIntegralMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysIntegralMapper.xml
new file mode 100644
index 0000000..0311370
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysIntegralMapper.xml
@@ -0,0 +1,17 @@
+<?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.SysIntegralMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.SysIntegral">
+        <id column="id" property="id" />
+        <result column="companyId" property="companyId" />
+        <result column="integral" property="integral" />
+    </resultMap>
+
+
+
+    <select id="query" resultType="SysIntegral">
+        select * from t_sys_integral where companyId = #{companyId}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemNoticeMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemNoticeMapper.xml
new file mode 100644
index 0000000..b68c6fc
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemNoticeMapper.xml
@@ -0,0 +1,51 @@
+<?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.SystemNoticeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.SystemNotice">
+        <id column="id" property="id"/>
+        <result column="type" property="type"/>
+        <result column="noticeType" property="noticeType"/>
+        <result column="userType" property="userType"/>
+        <result column="noticesId" property="noticesId"/>
+        <result column="content" property="content"/>
+        <result column="userId" property="userId"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="read" property="read"/>
+    </resultMap>
+
+
+    <select id="queryNoReadNoticeNum" resultType="int">
+        select count(id) from t_system_notice where userType = 1 and userId = #{uid} and `read` = 1
+    </select>
+
+
+    <select id="queryList" resultType="map">
+        select
+        id as id,
+        noticeType as noticeType,
+        `type` as `type`,
+        content as content,
+        DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i') as `time`,
+        `read` as `read`
+        from t_system_notice where `type` = 2 and userType = 1 and userId = #{uid} order by insertTime desc limit #{pageNum}, #{size}
+    </select>
+
+
+
+    <update id="readSystemNotice">
+        update t_system_notice set `read` = 2 where id = #{id} and userId = #{uid} and userType = 1
+    </update>
+
+
+    <delete id="delSystemNotice">
+        delete from t_system_notice where userType = 1
+        <if test="null != uid">
+            and userId = #{uid}
+        </if>
+        <if test="null != id">
+            and id = #{id}
+        </if>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml
new file mode 100644
index 0000000..5aec125
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml
@@ -0,0 +1,26 @@
+<?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.SystemPriceMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.SystemPrice">
+        <id column="id" property="id"/>
+        <result column="type" property="type"/>
+        <result column="companyId" property="companyId"/>
+        <result column="serverCarModelId" property="serverCarModelId"/>
+        <result column="content" property="content"/>
+    </resultMap>
+
+    <select id="query" resultType="map">
+        select
+        id as id,
+        content as content
+        from t_system_price where companyId = #{companyId}
+        <if test="null != type">
+            and `type` = #{type}
+        </if>
+        <if test="null != serverCarModelId">
+            and serverCarModelId = #{serverCarModelId}
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TNoticesMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TNoticesMapper.xml
new file mode 100644
index 0000000..dec5956
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TNoticesMapper.xml
@@ -0,0 +1,66 @@
+<?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.TNoticesMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.TNotices">
+        <id column="id" property="id"/>
+        <result column="title" property="title"/>
+        <result column="content" property="content"/>
+        <result column="sort" property="sort"/>
+        <result column="isShow" property="isShow"/>
+        <result column="isBroadcast" property="isBroadcast"/>
+        <result column="type" property="type"/>
+        <result column="imgUrl" property="imgUrl"/>
+        <result column="isDelete" property="isDelete"/>
+        <result column="isUser" property="isUser"/>
+        <result column="isDriver" property="isDriver"/>
+
+        <result column="flag" property="flag"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="insertUser" property="insertUser"/>
+        <result column="updateTime" property="updateTime"/>
+        <result column="updateUser" property="updateUser"/>
+    </resultMap>
+
+
+    <select id="queryNotices" resultType="com.stylefeng.guns.modular.system.model.TNotices">
+        select
+        id as id,
+        title as title,
+        content as content,
+        sort as sort,
+        isShow as isShow,
+        isBroadcast as isBroadcast,
+        `type` as `type`,
+        imgUrl as imgUrl,
+        flag as flag,
+        insertTime as insertTime,
+        insertUser as insertUser,
+        updateTime as updateTime,
+        updateUser as updateUser
+        from t_notices where flag != 3 and isDelete = 1 and `type` = #{type}
+        <if test="type == 2">
+            and isBroadcast = 1
+        </if>
+        <if test="type == 1">
+            and isShow = 1
+        </if>
+    </select>
+
+
+    <select id="queryList" resultType="map">
+        select
+        b.id as id,
+        a.title as title,
+        a.content as content,
+        (1) as `type`,
+        a.imgUrl as img,
+        DATE_FORMAT(b.insertTime, '%Y-%m-%d %H:%i') as `time`,
+        b.`read` as `read`
+        from t_notices a
+        left join t_system_notice b on (a.id = b.noticesId)
+        where a.`type` = 2 and a.flag != 3 and a.isShow = 1 and b.type = 1 and b.userType = 1
+        and b.userId = #{uid} order by b.insertTime desc limit #{pageNum}, #{size}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityBalanceMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityBalanceMapper.xml
new file mode 100644
index 0000000..0d16040
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityBalanceMapper.xml
@@ -0,0 +1,74 @@
+<?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.UserActivityBalanceMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.UserActivityBalance">
+        <id column="id" property="id"/>
+        <result column="enable" property="enable"/>
+        <result column="userActivityId" property="userActivityId"/>
+        <result column="money" property="money"/>
+        <result column="generalNum" property="generalNum"/>
+        <result column="generalCouponId" property="generalCouponId"/>
+        <result column="specialNum" property="specialNum"/>
+        <result column="specialCouponId" property="specialCouponId"/>
+        <result column="taxiNum" property="taxiNum"/>
+        <result column="taxiCouponId" property="taxiCouponId"/>
+        <result column="intercityNum" property="intercityNum"/>
+        <result column="intercityCouponId" property="intercityCouponId"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="startTime" property="startTime"/>
+        <result column="endTime" property="endTime"/>
+        <result column="totalPrice" property="totalPrice"/>
+        <result column="lavePrice" property="lavePrice"/>
+    </resultMap>
+
+
+
+    <select id="query" resultType="map">
+        select
+        a.id as id,
+        a.generalNum as generalNum,
+        a.specialNum as specialNum,
+        a.taxiNum as taxiNum,
+        a.intercityNum as intercityNum,
+        b.id as bId,
+        c.id as cId,
+        d.id as dId,
+        e.id as eId,
+        b.companyId as bcompanyId,
+        c.companyId as ccompanyId,
+        d.companyId as dcompanyId,
+        e.companyId as ecompanyId,
+        b.money as bmoney,
+        c.money as cmoney,
+        d.money as dmoney,
+        e.money as emoney,
+        b.fullMoney as bfullMoney,
+        c.fullMoney as cfullMoney,
+        d.fullMoney as dfullMoney,
+        e.fullMoney as efullMoney,
+        b.couponUseType as bcouponUseType,
+        c.couponUseType as ccouponUseType,
+        d.couponUseType as dcouponUseType,
+        e.couponUseType as ecouponUseType,
+        b.couponType as bcouponType,
+        c.couponType as ccouponType,
+        d.couponType as dcouponType,
+        e.couponType as ecouponType,
+        a.effective as beffective,
+        a.effective as ceffective,
+        a.effective as deffective,
+        a.effective as eeffective,
+        a.totalPrice as totalPrice,
+        a.lavePrice as lavePrice
+        from t_user_activity_balance a
+        left join t_sys_coupon_record b on (a.generalCouponId = b.id)
+        left join t_sys_coupon_record c on (a.specialCouponId = c.id)
+        left join t_sys_coupon_record d on (a.taxiCouponId = d.id)
+        left join t_sys_coupon_record e on (a.intercityCouponId = e.id)
+		left join t_user_activity f on (a.userActivityId = f.id)
+        where a.`enable` = 2 and f.status = 3 and now() between a.startTime and a.endTime and a.money &lt;= #{money}
+        and b.companyId = #{companyId} and c.companyId = #{companyId} and d.companyId = #{companyId} and e.companyId = #{companyId}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityDiscount1Mapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityDiscount1Mapper.xml
new file mode 100644
index 0000000..4c9e5e3
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityDiscount1Mapper.xml
@@ -0,0 +1,32 @@
+<?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.UserActivityDiscount1Mapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.UserActivityDiscount1">
+        <id column="id" property="id"/>
+        <result column="userActivityId" property="userActivityId"/>
+        <result column="special" property="special"/>
+        <result column="taxi" property="taxi"/>
+        <result column="logistics" property="logistics"/>
+        <result column="startTime" property="startTime"/>
+        <result column="endTime" property="endTime"/>
+        <result column="enable" property="enable"/>
+    </resultMap>
+
+
+    <select id="query" resultType="UserActivityDiscount1">
+        select
+        a.id as id,
+        a.userActivityId as userActivityId,
+        a.special as special,
+        a.taxi as taxi,
+        a.logistics as logistics,
+        a.startTime as startTime,
+        a.endTime as endTime,
+        a.`enable` as `enable`
+        from t_user_activity_discount1 a
+        left join t_user_activity b on (a.userActivityId = b.id)
+        where now() between a.startTime and a.endTime and b.`status` = 3 and b.companyId = #{companyId} order by b.insertTime desc limit 0,1
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityInviteMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityInviteMapper.xml
new file mode 100644
index 0000000..b5ebff3
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityInviteMapper.xml
@@ -0,0 +1,42 @@
+<?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.UserActivityInviteMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.UserActivityInvite">
+        <id column="id" property="id"/>
+        <result column="userActivityId" property="userActivityId"/>
+        <result column="couponId" property="couponId"/>
+        <result column="totalNum" property="totalNum"/>
+        <result column="startTime" property="startTime"/>
+        <result column="endTime" property="endTime"/>
+        <result column="enable" property="enable"/>
+        <result column="effective" property="effective"/>
+        <result column="totalPrice" property="totalPrice"/>
+        <result column="lavePrice" property="lavePrice"/>
+    </resultMap>
+
+
+
+    <select id="query" resultType="map">
+        select
+        a.id as id,
+        a.userActivityId as userActivityId,
+        a.couponId as couponId,
+        a.totalNum as totalNum,
+        a.startTime as startTime,
+        a.endTime as endTime,
+        a.enable as enable,
+        a.effective as effective,
+        c.money as money,
+        c.fullMoney as fullMoney,
+        c.couponUseType as couponUseType,
+        c.couponType as couponType,
+        a.totalPrice as totalPrice,
+        a.lavePrice as lavePrice
+        from t_user_activity_invite a
+        left join t_user_activity b on (a.userActivityId = b.id)
+        left join t_sys_coupon_record c on (a.couponId = c.id)
+        where now() between a.startTime and a.endTime and a.enable = 2 and b.status = 3 and b.companyId = #{companyId}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRedenvelopeMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRedenvelopeMapper.xml
new file mode 100644
index 0000000..7789d90
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRedenvelopeMapper.xml
@@ -0,0 +1,39 @@
+<?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.UserActivityRedenvelopeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.UserActivityRedenvelope">
+        <id column="id" property="id"/>
+        <result column="userActivityId" property="userActivityId"/>
+        <result column="redEnvelopeId" property="redEnvelopeId"/>
+        <result column="totalMoney" property="totalMoney"/>
+        <result column="laveMoney" property="laveMoney"/>
+        <result column="startTime" property="startTime"/>
+        <result column="endTime" property="endTime"/>
+        <result column="enable" property="enable"/>
+        <result column="totalPrice" property="totalPrice"/>
+        <result column="lavePrice" property="lavePrice"/>
+    </resultMap>
+
+
+
+    <select id="query" resultType="map">
+        select
+        a.id as id,
+        a.laveMoney as laveMoney,
+        a.userActivityId as userActivityId,
+        b.money as money,
+        b.`type` as `type`,
+        b.startMoney as startMoney,
+        b.endMoney as endMoney,
+        b.companyId as companyId,
+        b.effective as effective,
+        a.totalPrice as totalPrice,
+        a.lavePrice as lavePrice
+        from t_user_activity_redenvelope a
+        left join t_sys_red_packet_record b on (a.redEnvelopeId = b.id)
+        left join t_user_activity c on (a.userActivityId = c.id)
+        where a.`enable` = 2 and c.status = 3 and #{travelTime} between a.startTime and a.endTime and a.laveMoney > 0 and b.companyId = #{companyId} limit 0,1
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRegisteredMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRegisteredMapper.xml
new file mode 100644
index 0000000..8d9c7a8
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserActivityRegisteredMapper.xml
@@ -0,0 +1,45 @@
+<?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.UserActivityRegisteredMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.UserActivityRegistered">
+        <id column="id" property="id"/>
+        <result column="userActivityId" property="userActivityId"/>
+        <result column="couponId" property="couponId"/>
+        <result column="totalNum" property="totalNum"/>
+        <result column="laveNum" property="laveNum"/>
+        <result column="startTime" property="startTime"/>
+        <result column="endTime" property="endTime"/>
+        <result column="enable" property="enable"/>
+        <result column="totalPrice" property="totalPrice"/>
+        <result column="lavePrice" property="lavePrice"/>
+    </resultMap>
+
+
+
+
+    <select id="query" resultType="map">
+        select
+        a.id as id,
+        a.userActivityId as userActivityId,
+        a.couponId as couponId,
+        a.totalNum as totalNum,
+        a.laveNum as laveNum,
+        a.startTime as startTime,
+        a.endTime as endTime,
+        a.`enable` as `enable`,
+        b.money as money,
+        b.fullMoney as fullMoney,
+        b.companyId as companyId,
+        b.couponUseType as couponUseType,
+        b.couponType as couponType,
+        a.effective as effective,
+        a.totalPrice as totalPrice,
+        a.lavePrice as lavePrice
+        from t_user_activity_registered a
+        left join t_sys_coupon_record b on (a.couponId = b.id)
+		left join t_user_activity c on (a.userActivityId = c.id)
+        where now() between a.startTime and a.endTime and a.laveNum > 0 and a.`enable` = 2 and  b.companyId = #{companyId} and c.`status` = 3
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserCouponRecordMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserCouponRecordMapper.xml
new file mode 100644
index 0000000..b253b6d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserCouponRecordMapper.xml
@@ -0,0 +1,123 @@
+<?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.UserCouponRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.UserCouponRecord">
+        <id column="id" property="id"/>
+        <result column="money" property="money"/>
+        <result column="fullMoney" property="fullMoney"/>
+        <result column="expirationTime" property="expirationTime"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="companyId" property="companyId"/>
+        <result column="state" property="state"/>
+        <result column="endTime" property="endTime"/>
+        <result column="couponUseType" property="couponUseType"/>
+        <result column="couponType" property="couponType"/>
+        <result column="userId" property="userId"/>
+        <result column="couponId" property="couponId"/>
+        <result column="couponActivityId" property="couponActivityId"/>
+        <result column="activityType" property="activityType"/>
+        <result column="paymentRecordId" property="paymentRecordId"/>
+    </resultMap>
+
+
+
+    <select id="queryAvailable" resultType="int">
+        select
+        count(a.id)
+        from t_user_coupon_record a
+        left join t_company b on (a.companyId = b.id)
+        where a.expirationTime >= now()
+        <if test="null != uid">
+            and a.userId = #{uid}
+        </if>
+        <if test="null != companyId">
+            and a.companyId = #{companyId}
+        </if>
+        <if test="null != state">
+            and a.state = #{state}
+        </if>
+        <if test="null != couponUseType">
+            and a.couponUseType = #{couponUseType}
+        </if>
+        <if test="null != money">
+            and if(a.couponType = 1, a.money &lt;= #{money}, a.fullMoney &lt;= #{money})
+        </if>
+    </select>
+
+    <select id="queryCoupon" resultType="map">
+        select
+        a.id as id,
+        a.money as money,
+        a.couponUseType as userType,
+        DATE_FORMAT(a.expirationTime, '%Y-%m-%d') as time,
+        a.couponType as `type`,
+        a.fullMoney as fullMoney,
+        a.state as state,
+        b.`name` as `name`
+        from t_user_coupon_record a
+        left join t_company b on (a.companyId = b.id)
+        where a.expirationTime >= now()
+        <if test="null != uid">
+            and a.userId = #{uid}
+        </if>
+        <if test="null != companyId">
+            and a.companyId = #{companyId}
+        </if>
+        <if test="null != state">
+            and a.state = #{state}
+        </if>
+        <if test="null != couponUseType">
+            and a.couponUseType = #{couponUseType}
+        </if>
+        <if test="null != money">
+            and if(a.couponType = 1, a.money &lt;= #{money}, a.fullMoney &lt;= #{money})
+        </if>
+        order by a.insertTime desc
+        <if test="null != pageNum and null != size">
+            limit #{pageNum}, #{size}
+        </if>
+    </select>
+
+
+
+
+
+
+    <select id="queryMyCoupons" resultType="map">
+        select
+        a.id as id,
+        a.money as money,
+        a.couponUseType as userType,
+        DATE_FORMAT(a.expirationTime, '%Y-%m-%d') as time,
+        a.couponType as `type`,
+        a.fullMoney as fullMoney,
+        a.state as state,
+        b.`name` as `name`
+        from t_user_coupon_record a
+        left join t_company b on (a.companyId = b.id)
+        where 1 = 1
+        <if test="null != uid">
+            and a.userId = #{uid}
+        </if>
+        <if test="null != state">
+            <if test="state == 1">
+                and a.state = 1
+            </if>
+            <if test="state == 2">
+                and a.state in (2,3)
+            </if>
+        </if>
+        order by a.insertTime desc
+        <if test="null != pageNum and null != size">
+            limit #{pageNum}, #{size}
+        </if>
+    </select>
+
+
+
+    <update id="updateTimeOut">
+        update t_user_coupon_record set state = 3,endTime = now() where now() > expirationTime and state = 1
+    </update>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml
new file mode 100644
index 0000000..cf0b218
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml
@@ -0,0 +1,192 @@
+<?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.UserInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.UserInfo">
+        <id column="id" property="id"/>
+        <result column="companyId" property="companyId"/>
+        <result column="registIp" property="registIp"/>
+        <result column="registAreaCode" property="registAreaCode"/>
+        <result column="phone" property="phone"/>
+        <result column="nickName" property="nickName"/>
+        <result column="avatar" property="avatar"/>
+        <result column="birthday" property="birthday"/>
+        <result column="sex" property="sex"/>
+        <result column="emergencyContact" property="emergencyContact"/>
+        <result column="emergencyContactNumber" property="emergencyContactNumber"/>
+        <result column="isAuth" property="isAuth"/>
+        <result column="name" property="name"/>
+        <result column="idCard" property="idCard"/>
+        <result column="idCardFront" property="idCardFront"/>
+        <result column="idCardReverse" property="idCardReverse"/>
+        <result column="consumption" property="consumption"/>
+        <result column="balance" property="balance"/>
+        <result column="integral" property="integral"/>
+        <result column="passWord" property="passWord"/>
+        <result column="openId" property="openId"/>
+        <result column="appletsOpenId" property="appletsOpenId"/>
+        <result column="unionid" property="unionid"/>
+        <result column="remark" property="remark"/>
+        <result column="state" property="state"/>
+        <result column="flag" property="flag"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="insertUser" property="insertUser"/>
+        <result column="updateTime" property="updateTime"/>
+        <result column="updateUser" property="updateUser"/>
+    </resultMap>
+
+
+    <select id="queryByPhone" resultType="UserInfo">
+        select
+        id as id,
+        registIp as registIp,
+        registAreaCode as registAreaCode,
+        phone as phone,
+        nickName as nickName,
+        avatar as avatar,
+        birthday as birthday,
+        sex as sex,
+        emergencyContact as emergencyContact,
+        emergencyContactNumber as emergencyContactNumber,
+        isAuth as isAuth,
+        name as name,
+        idCard as idCard,
+        idCardFront as idCardFront,
+        idCardReverse as idCardReverse,
+        consumption as consumption,
+        balance as balance,
+        integral as integral,
+        passWord as passWord,
+        openId as openId,
+        appletsOpenId as appletsOpenId,
+        unionid as unionid,
+        state as state,
+        flag as flag,
+        insertTime as insertTime,
+        insertUser as insertUser,
+        updateTime as updateTime,
+        updateUser as updateUser,
+        isBlack as isBlack
+        from t_user where flag != 3 and phone = #{phone}
+    </select>
+
+
+
+    <select id="queryByOpenid" resultType="UserInfo">
+        select
+        id as id,
+        registIp as registIp,
+        registAreaCode as registAreaCode,
+        phone as phone,
+        nickName as nickName,
+        avatar as avatar,
+        birthday as birthday,
+        sex as sex,
+        emergencyContact as emergencyContact,
+        emergencyContactNumber as emergencyContactNumber,
+        isAuth as isAuth,
+        name as name,
+        idCard as idCard,
+        idCardFront as idCardFront,
+        idCardReverse as idCardReverse,
+        consumption as consumption,
+        balance as balance,
+        integral as integral,
+        passWord as passWord,
+        openId as openId,
+        appletsOpenId as appletsOpenId,
+        unionid as unionid,
+        state as state,
+        flag as flag,
+        insertTime as insertTime,
+        insertUser as insertUser,
+        updateTime as updateTime,
+        updateUser as updateUser
+        from t_user where flag != 3
+        <if test="null != openid">
+            and openId = #{openid}
+        </if>
+    </select>
+
+
+    <select id="queryByOpenid2" resultType="UserInfo">
+        select
+        id as id,
+        registIp as registIp,
+        registAreaCode as registAreaCode,
+        phone as phone,
+        nickName as nickName,
+        avatar as avatar,
+        birthday as birthday,
+        sex as sex,
+        emergencyContact as emergencyContact,
+        emergencyContactNumber as emergencyContactNumber,
+        isAuth as isAuth,
+        name as name,
+        idCard as idCard,
+        idCardFront as idCardFront,
+        idCardReverse as idCardReverse,
+        consumption as consumption,
+        balance as balance,
+        integral as integral,
+        passWord as passWord,
+        openId as openId,
+        appletsOpenId as appletsOpenId,
+        unionid as unionid,
+        state as state,
+        flag as flag,
+        insertTime as insertTime,
+        insertUser as insertUser,
+        updateTime as updateTime,
+        updateUser as updateUser
+        from t_user where flag != 3
+        <if test="null != openid">
+            and appletsOpenId = #{openid}
+        </if>
+    </select>
+
+
+    <select id="queryUserInfo" resultType="map">
+        select
+        a.id as id,
+        a.phone as phone,
+        a.nickName as nickName,
+        a.avatar as avatar,
+        DATE_FORMAT(a.birthday, '%Y-%m-%d') as birthday,
+        a.sex as sex,
+        a.isAuth as isAuth,
+        (select state from t_verified where userId = a.id order by insertTime desc limit 0,1) as verified,
+        a.name as name,
+        a.integral as integral,
+        a.emergencyContact as emergencyContact,
+        a.emergencyContactNumber as emergencyContactNumber,
+        a.balance as balance
+        from t_user a where 1 = 1
+        <if test="null != uid">
+            and a.id = #{uid}
+        </if>
+        <if test="null != phone">
+            and a.phone = #{phone}
+        </if>
+    </select>
+
+
+    <update id="setUrgentUser">
+        update t_user set emergencyContact = #{name}, emergencyContactNumber = #{phone} where id = #{uid}
+    </update>
+
+
+    <select id="queryRealName" resultType="map">
+        select
+        id as id,
+        userId as userId,
+        name as name,
+        idcode as idcode,
+        img1 as img1,
+        img2 as img2,
+        state as state
+        from t_verified where userId = #{uid} order by insertTime desc limit 0,1
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserMapper.xml
new file mode 100644
index 0000000..befd7d6
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserMapper.xml
@@ -0,0 +1,77 @@
+<?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.UserMapper">
+
+	<!-- 通用查询映射结果 -->
+	<resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.User">
+		<id column="id" property="id" />
+		<result column="avatar" property="avatar" />
+		<result column="account" property="account" />
+		<result column="password" property="password" />
+		<result column="salt" property="salt" />
+		<result column="name" property="name" />
+		<result column="birthday" property="birthday" />
+		<result column="sex" property="sex" />
+		<result column="email" property="email" />
+		<result column="phone" property="phone" />
+		<result column="roleid" property="roleid" />
+		<result column="deptid" property="deptid" />
+		<result column="status" property="status" />
+		<result column="createtime" property="createtime" />
+		<result column="version" property="version" />
+	</resultMap>
+
+	<sql id="Base_Column_List">
+		id, account, name, birthday, sex, email, avatar,
+		phone, roleid,
+		deptid, status,
+		createtime, version
+	</sql>
+
+	<sql id="Base_Column_List_With_Pwd">
+		id, account, name, birthday,password, sex, email, avatar,
+		phone, roleid,salt,
+		deptid, status,
+		createtime, version
+	</sql>
+
+	<select id="selectUsers" resultType="map">
+		select
+		<include refid="Base_Column_List" />
+		from sys_user
+		where status != 3
+		<if test="name != null and name != ''">
+			and (phone like CONCAT('%',#{name},'%')
+			or account like CONCAT('%',#{name},'%')
+			or name like CONCAT('%',#{name},'%'))
+		</if>
+		<if test="deptid != null and deptid != 0">
+			and (deptid = #{deptid} or deptid in ( select id from sys_dept where pids like CONCAT('%[', #{deptid}, ']%') ))
+		</if>
+		<if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''">
+			and (createTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
+		</if>
+	</select>
+
+	<update id="setStatus">
+		update sys_user set status = #{status} where id =
+		#{userId}
+	</update>
+
+	<update id="changePwd">
+		update sys_user set password = #{pwd} where id =
+		#{userId}
+	</update>
+
+	<update id="setRoles">
+		update sys_user set roleid = #{roleIds} where id =
+		#{userId}
+	</update>
+
+	<select id="getByAccount" resultType="user">
+		select
+		<include refid="Base_Column_List_With_Pwd" />
+		from sys_user where account = #{account} and status != 3
+	</select>
+
+</mapper>
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRedPacketRecordMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRedPacketRecordMapper.xml
new file mode 100644
index 0000000..40cd667
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserRedPacketRecordMapper.xml
@@ -0,0 +1,103 @@
+<?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.UserRedPacketRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.UserRedPacketRecord">
+        <id column="id" property="id"/>
+        <result column="money" property="money"/>
+        <result column="expirationTime" property="expirationTime"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="companyId" property="companyId"/>
+        <result column="state" property="state"/>
+        <result column="endTime" property="endTime"/>
+        <result column="orderId" property="orderId"/>
+        <result column="orderType" property="orderType"/>
+        <result column="userId" property="userId"/>
+        <result column="redPacketActivityId" property="redPacketActivityId"/>
+    </resultMap>
+
+
+
+    <select id="query" resultType="UserRedPacketRecord">
+        select
+        id as id,
+        money as money,
+        expirationTime as expirationTime,
+        insertTime as insertTime,
+        companyId as companyId,
+        state as state,
+        orderId as orderId,
+        orderType as orderType,
+        userId as userId,
+        redPacketActivityId as redPacketActivityId
+        from t_user_red_packet_record where 1=1
+        <if test="null != uid">
+            and userId = #{uid}
+        </if>
+        <if test="null != companyId">
+            and companyId = #{companyId}
+        </if>
+        <if test="null != state">
+            and state = #{state}
+        </if>
+        <if test="null != orderType">
+            and orderType = #{orderType}
+        </if>
+        <if test="null != money">
+            and money &lt; #{money}
+        </if>
+        order by money desc limit 0, 1
+    </select>
+
+
+
+    <select id="query_" resultType="UserRedPacketRecord">
+        select
+        id as id,
+        money as money,
+        expirationTime as expirationTime,
+        insertTime as insertTime,
+        companyId as companyId,
+        state as state,
+        orderId as orderId,
+        orderType as orderType,
+        userId as userId,
+        redPacketActivityId as redPacketActivityId
+        from t_user_red_packet_record where 1=1
+        <if test="null != uid">
+            and userId = #{uid}
+        </if>
+        <if test="null != companyId">
+            and companyId = #{companyId}
+        </if>
+        <if test="null != state">
+            and state = #{state}
+        </if>
+        <if test="null != orderType">
+            and orderType = #{orderType}
+        </if>
+        <if test="null != money">
+            and money &lt; #{money}
+        </if>
+        order by insertTime desc limit 0, 1
+    </select>
+
+
+    <select id="queryMyRedEnvelope" resultType="map">
+        select
+        a.id as id,
+        a.money as money,
+        b.name as name
+        from t_user_red_packet_record a
+        left join t_company b on (a.companyId = b.id)
+        where a.state = 1
+        <if test="null != uid">
+            and a.userId = #{uid}
+        </if>
+        order by a.insertTime desc
+        <if test="null != pageNum and null != size">
+            limit #{pageNum}, #{size}
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/VerifiedMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/VerifiedMapper.xml
new file mode 100644
index 0000000..be2b9e4
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/VerifiedMapper.xml
@@ -0,0 +1,16 @@
+<?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.VerifiedMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Verified">
+        <id column="id" property="id"/>
+        <result column="userId" property="userId"/>
+        <result column="name" property="name"/>
+        <result column="idcode" property="idcode"/>
+        <result column="img1" property="img1"/>
+        <result column="img2" property="img2"/>
+        <result column="state" property="state"/>
+        <result column="insertTime" property="insertTime"/>
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/VersionManagementMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/VersionManagementMapper.xml
new file mode 100644
index 0000000..b4e07a7
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/VersionManagementMapper.xml
@@ -0,0 +1,26 @@
+<?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.VersionManagementMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.VersionManagement">
+        <id column="id" property="id"/>
+        <result column="url" property="url"/>
+        <result column="version" property="version"/>
+        <result column="content" property="content"/>
+        <result column="mandatory" property="mandatory"/>
+        <result column="insertTime" property="insertTime"/>
+        <result column="type" property="type"/>
+    </resultMap>
+
+
+    <select id="queryNewVersion" resultType="map">
+        select
+        id as id,
+        url as url,
+        content as content,
+        if(mandatory = 1, 1, 0) as mandatory,
+        version as version
+        from t_version_management where type = #{type} order by insertTime desc limit 0, 1
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml
new file mode 100644
index 0000000..69c8513
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/WithdrawalMapper.xml
@@ -0,0 +1,34 @@
+<?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.WithdrawalMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.Withdrawal">
+        <id column="id" property="id" />
+        <result column="userId" property="userId" />
+        <result column="handleTime" property="handleTime" />
+        <result column="balance" property="balance" />
+        <result column="money" property="money" />
+        <result column="state" property="state" />
+        <result column="remark" property="remark" />
+        <result column="code" property="code" />
+        <result column="name" property="name" />
+        <result column="userType" property="userType" />
+        <result column="insertTime" property="insertTime" />
+        <result column="flag" property="flag" />
+        <result column="withdrawalType" property="withdrawalType" />
+        <result column="serialNo" property="serialNo" />
+    </resultMap>
+
+
+    <select id="queryWithdrawal" resultType="map">
+        select
+        id as id,
+        DATE_FORMAT(insertTime, '%Y.%m.%d') as insertTime,
+        money as money,
+        ('银行卡提现') as name,
+        remark as remark,
+        state as state
+        from t_pub_withdrawal where flag != 3 and userType = #{userType} and userId = #{uid} order by insertTime desc limit #{pageNum}, #{size}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/factory/UserFactory.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/factory/UserFactory.java
new file mode 100644
index 0000000..508b65d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/factory/UserFactory.java
@@ -0,0 +1,54 @@
+package com.stylefeng.guns.modular.system.factory;
+
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.model.User;
+import com.stylefeng.guns.modular.system.transfer.UserDto;
+import org.springframework.beans.BeanUtils;
+
+/**
+ * 用户创建工厂
+ *
+ * @author fengshuonan
+ * @date 2017-05-05 22:43
+ */
+public class UserFactory {
+
+    public static User createUser(UserDto userDto) {
+        if (userDto == null) {
+            return null;
+        } else {
+            User user = new User();
+            BeanUtils.copyProperties(userDto, user);
+            return user;
+        }
+    }
+
+    public static User editUser(UserDto newUser, User oldUser) {
+        if (newUser == null || oldUser == null) {
+            return oldUser;
+        } else {
+            if (ToolUtil.isNotEmpty(newUser.getAvatar())) {
+                oldUser.setAvatar(newUser.getAvatar());
+            }
+            if (ToolUtil.isNotEmpty(newUser.getName())) {
+                oldUser.setName(newUser.getName());
+            }
+            if (ToolUtil.isNotEmpty(newUser.getBirthday())) {
+                oldUser.setBirthday(newUser.getBirthday());
+            }
+            if (ToolUtil.isNotEmpty(newUser.getDeptid())) {
+                oldUser.setDeptid(newUser.getDeptid());
+            }
+            if (ToolUtil.isNotEmpty(newUser.getSex())) {
+                oldUser.setSex(newUser.getSex());
+            }
+            if (ToolUtil.isNotEmpty(newUser.getEmail())) {
+                oldUser.setEmail(newUser.getEmail());
+            }
+            if (ToolUtil.isNotEmpty(newUser.getPhone())) {
+                oldUser.setPhone(newUser.getPhone());
+            }
+            return oldUser;
+        }
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Advertisement.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Advertisement.java
new file mode 100644
index 0000000..6f8145a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Advertisement.java
@@ -0,0 +1,127 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableName;
+
+/**
+ * 广告
+ */
+@TableName("t_advertisement")
+public class Advertisement extends BaseBean {
+    /**
+     * 广告名称
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 图片路径
+     */
+    @TableField("imgUrl")
+    private String imgUrl;
+    /**
+     * 广告类型(1:弹窗,2:首页底部)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 是否跳转(1:是,2:否)
+     */
+    @TableField("isJump")
+    private Integer isJump;
+    /**
+     * 跳转类型(1:外部,2:内部)
+     */
+    @TableField("jumpType")
+    private Integer jumpType;
+    /**
+     * 跳转地址
+     */
+    @TableField("jumpUrl")
+    private String jumpUrl;
+    /**
+     * 文本内容
+     */
+    @TableField("content")
+    private String content;
+    /**
+     * 状态(1=已上线,2=已下线)
+     * @return
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 所属省id
+     * @return
+     */
+    @TableField("provinceId")
+    private Integer provinceId;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getImgUrl() {
+        return imgUrl;
+    }
+
+    public void setImgUrl(String imgUrl) {
+        this.imgUrl = imgUrl;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getIsJump() {
+        return isJump;
+    }
+
+    public void setIsJump(Integer isJump) {
+        this.isJump = isJump;
+    }
+
+    public Integer getJumpType() {
+        return jumpType;
+    }
+
+    public void setJumpType(Integer jumpType) {
+        this.jumpType = jumpType;
+    }
+
+    public String getJumpUrl() {
+        return jumpUrl;
+    }
+
+    public void setJumpUrl(String jumpUrl) {
+        this.jumpUrl = jumpUrl;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        return "Advertisement{" +
+                "name='" + name + '\'' +
+                ", imgUrl='" + imgUrl + '\'' +
+                ", type=" + type +
+                ", isJump=" + isJump +
+                ", jumpType=" + jumpType +
+                ", jumpUrl='" + jumpUrl + '\'' +
+                ", content='" + content + '\'' +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Agreement.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Agreement.java
new file mode 100644
index 0000000..0ed3c3c
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Agreement.java
@@ -0,0 +1,59 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableName;
+
+/**
+ * 平台协议
+ */
+@TableName("t_agreement")
+public class Agreement extends BaseBean {
+    /**
+     * 使用范围(1=用户,2=司机)
+     */
+    @TableField("useType")
+    private Integer useType;
+    /**
+     * 协议内容
+     */
+    @TableField("content")
+    private String content;
+    /**
+     * 类型(1:隐私协议,2:用户协议,3:用户指南,4:法律条款,5:关于我们,6=注册协议,7=取消订单说明,8=充值领券规则设置,9=司机注册协议,10=改派说明,11=跨城出行乘车须知,12:常见问题,13:计价规则,14:包车协议,15:小件物流协议)
+     */
+    @TableField("type")
+    private Integer type;
+
+    public Integer getUseType() {
+        return useType;
+    }
+
+    public void setUseType(Integer useType) {
+        this.useType = useType;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    @Override
+    public String toString() {
+        return "Agreement{" +
+                "useType=" + useType +
+                ", content='" + content + '\'' +
+                ", type=" + type +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/BaseBean.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/BaseBean.java
new file mode 100644
index 0000000..a11c39e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/BaseBean.java
@@ -0,0 +1,107 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+public class BaseBean {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 1:正常,2:停用,3:删除
+     */
+    @TableField("flag")
+    private Integer flag;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 添加人员
+     */
+    @TableField("insertUser")
+    private Integer insertUser;
+    /**
+     * 修改时间
+     */
+    @TableField("updateTime")
+    private Date updateTime;
+    /**
+     * 修改人员
+     */
+    @TableField("updateUser")
+    private Integer updateUser;
+
+    public BaseBean() {
+        Date date = new Date();
+        this.flag = 1;
+        this.insertTime = date;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getFlag() {
+        return flag;
+    }
+
+    public void setFlag(Integer flag) {
+        this.flag = flag;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getInsertUser() {
+        return insertUser;
+    }
+
+    public void setInsertUser(Integer insertUser) {
+        this.insertUser = insertUser;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Integer getUpdateUser() {
+        return updateUser;
+    }
+
+    public void setUpdateUser(Integer updateUser) {
+        this.updateUser = updateUser;
+    }
+
+    @Override
+    public String toString() {
+        return "BaseBean{" +
+                "id=" + id +
+                ", flag=" + flag +
+                ", insertTime=" + insertTime +
+                ", insertUser=" + insertUser +
+                ", updateTime=" + updateTime +
+                ", updateUser=" + updateUser +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CancleOrder.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CancleOrder.java
new file mode 100644
index 0000000..d379e59
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CancleOrder.java
@@ -0,0 +1,104 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+/**
+ * 取消订单设置
+ */
+@TableName("t_sys_cancle_order")
+public class CancleOrder {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 企业id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 时间(分钟)
+     */
+    @TableField("minuteNum")
+    private Integer minuteNum;
+    /**
+     * 金额
+     */
+    @TableField("money")
+    private Double money;
+    /**
+     * 类型(1=取消,2=预约取消)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 订单类型(1=专车,2=出租车)
+     */
+    @TableField("orderType")
+    private Integer orderType;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public Integer getMinuteNum() {
+        return minuteNum;
+    }
+
+    public void setMinuteNum(Integer minuteNum) {
+        this.minuteNum = minuteNum;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(Integer orderType) {
+        this.orderType = orderType;
+    }
+
+    @Override
+    public String toString() {
+        return "CancleOrder{" +
+                "id=" + id +
+                ", companyId=" + companyId +
+                ", minuteNum=" + minuteNum +
+                ", money=" + money +
+                ", type=" + type +
+                ", orderType=" + orderType +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Car.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Car.java
new file mode 100644
index 0000000..bdc49e1
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Car.java
@@ -0,0 +1,272 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 车辆
+ */
+@TableName("t_car")
+public class Car {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 是否是平台车辆(1=是,2=否)
+     */
+    @TableField("isPlatCar")
+    private Integer isPlatCar;
+    /**
+     * 公司id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 加盟商id
+     */
+    @TableField("franchiseeId")
+    private Integer franchiseeId;
+    /**
+     * 车辆颜色
+     */
+    @TableField("carColor")
+    private String carColor;
+    /**
+     * 车型id
+     */
+    @TableField("carModelId")
+    private Integer carModelId;
+    /**
+     * 车辆品牌id
+     */
+    @TableField("carBrandId")
+    private Integer carBrandId;
+    /**
+     * 车牌号
+     */
+    @TableField("carLicensePlate")
+    private String carLicensePlate;
+    /**
+     * 车辆照片
+     */
+    @TableField("carPhoto")
+    private String carPhoto;
+    /**
+     * 行驶证号
+     */
+    @TableField("drivingLicenseNumber")
+    private String drivingLicenseNumber;
+    /**
+     * 行驶证照片
+     */
+    @TableField("drivingLicensePhoto")
+    private String drivingLicensePhoto;
+    /**
+     * 年检到期时间
+     */
+    @TableField("annualInspectionTime")
+    private Date annualInspectionTime;
+    /**
+     * 保险照片
+     */
+    @TableField("insurancePhoto")
+    private String insurancePhoto;
+    /**
+     * 商业保险到期时间
+     */
+    @TableField("commercialInsuranceTime")
+    private Date commercialInsuranceTime;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 状态(1=正常,2=删除)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 添加来源(1=司机注册 2=平台添加 3=分公司添加 4=加盟商添加)
+     */
+    @TableField("addType")
+    private Integer addType;
+    /**
+     * 公司id
+     */
+    @TableField("addObjectId")
+    private Integer addObjectId;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getIsPlatCar() {
+        return isPlatCar;
+    }
+
+    public void setIsPlatCar(Integer isPlatCar) {
+        this.isPlatCar = isPlatCar;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public Integer getFranchiseeId() {
+        return franchiseeId;
+    }
+
+    public void setFranchiseeId(Integer franchiseeId) {
+        this.franchiseeId = franchiseeId;
+    }
+
+    public String getCarColor() {
+        return carColor;
+    }
+
+    public void setCarColor(String carColor) {
+        this.carColor = carColor;
+    }
+
+    public Integer getCarModelId() {
+        return carModelId;
+    }
+
+    public void setCarModelId(Integer carModelId) {
+        this.carModelId = carModelId;
+    }
+
+    public Integer getCarBrandId() {
+        return carBrandId;
+    }
+
+    public void setCarBrandId(Integer carBrandId) {
+        this.carBrandId = carBrandId;
+    }
+
+    public String getCarLicensePlate() {
+        return carLicensePlate;
+    }
+
+    public void setCarLicensePlate(String carLicensePlate) {
+        this.carLicensePlate = carLicensePlate;
+    }
+
+    public String getCarPhoto() {
+        return carPhoto;
+    }
+
+    public void setCarPhoto(String carPhoto) {
+        this.carPhoto = carPhoto;
+    }
+
+    public String getDrivingLicenseNumber() {
+        return drivingLicenseNumber;
+    }
+
+    public void setDrivingLicenseNumber(String drivingLicenseNumber) {
+        this.drivingLicenseNumber = drivingLicenseNumber;
+    }
+
+    public String getDrivingLicensePhoto() {
+        return drivingLicensePhoto;
+    }
+
+    public void setDrivingLicensePhoto(String drivingLicensePhoto) {
+        this.drivingLicensePhoto = drivingLicensePhoto;
+    }
+
+    public Date getAnnualInspectionTime() {
+        return annualInspectionTime;
+    }
+
+    public void setAnnualInspectionTime(Date annualInspectionTime) {
+        this.annualInspectionTime = annualInspectionTime;
+    }
+
+    public String getInsurancePhoto() {
+        return insurancePhoto;
+    }
+
+    public void setInsurancePhoto(String insurancePhoto) {
+        this.insurancePhoto = insurancePhoto;
+    }
+
+    public Date getCommercialInsuranceTime() {
+        return commercialInsuranceTime;
+    }
+
+    public void setCommercialInsuranceTime(Date commercialInsuranceTime) {
+        this.commercialInsuranceTime = commercialInsuranceTime;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Integer getAddType() {
+        return addType;
+    }
+
+    public void setAddType(Integer addType) {
+        this.addType = addType;
+    }
+
+    public Integer getAddObjectId() {
+        return addObjectId;
+    }
+
+    public void setAddObjectId(Integer addObjectId) {
+        this.addObjectId = addObjectId;
+    }
+
+    @Override
+    public String toString() {
+        return "Car{" +
+                "id=" + id +
+                ", isPlatCar=" + isPlatCar +
+                ", companyId=" + companyId +
+                ", carColor='" + carColor + '\'' +
+                ", carModelId=" + carModelId +
+                ", carBrandId=" + carBrandId +
+                ", carLicensePlate='" + carLicensePlate + '\'' +
+                ", carPhoto='" + carPhoto + '\'' +
+                ", drivingLicenseNumber='" + drivingLicenseNumber + '\'' +
+                ", drivingLicensePhoto='" + drivingLicensePhoto + '\'' +
+                ", annualInspectionTime=" + annualInspectionTime +
+                ", commercialInsuranceTime=" + commercialInsuranceTime +
+                ", insertTime=" + insertTime +
+                ", state=" + state +
+                ", addType=" + addType +
+                ", addObjectId=" + addObjectId +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CarService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CarService.java
new file mode 100644
index 0000000..bd040d9
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CarService.java
@@ -0,0 +1,76 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+/**
+ * 车辆服务
+ */
+@TableName("t_car_service")
+public class CarService {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 车辆id
+     */
+    @TableField("carId")
+    private Integer carId;
+    /**
+     * 服务类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 服务车型id
+     */
+    @TableField("serverCarModelId")
+    private Integer serverCarModelId;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getCarId() {
+        return carId;
+    }
+
+    public void setCarId(Integer carId) {
+        this.carId = carId;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getServerCarModelId() {
+        return serverCarModelId;
+    }
+
+    public void setServerCarModelId(Integer serverCarModelId) {
+        this.serverCarModelId = serverCarModelId;
+    }
+
+    @Override
+    public String toString() {
+        return "CarService{" +
+                "id=" + id +
+                ", carId=" + carId +
+                ", type=" + type +
+                ", serverCarModelId=" + serverCarModelId +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Company.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Company.java
new file mode 100644
index 0000000..aa38c5c
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Company.java
@@ -0,0 +1,694 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 企业信息
+ */
+@TableName("t_company")
+public class Company {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 是否经营专车(1=是,2=否)
+     */
+    @TableField("isSpe")
+    private Integer isSpe;
+    /**
+     * 是否经营出租车(1=是,2=否)
+     */
+    @TableField("isTaxi")
+    private Integer isTaxi;
+    /**
+     * 是否经营跨城(1=是,2=否)
+     */
+    @TableField("isCross")
+    private Integer isCross;
+    /**
+     * 是否经营跨城物流(1=是,2=否)
+     */
+    @TableField("isCrossLogistics")
+    private Integer isCrossLogistics;
+    /**
+     * 是否经营同城物流(1=是,2=否)
+     */
+    @TableField("isSameLogistics")
+    private Integer isSameLogistics;
+    /**
+     * 是否经营包车(1=是,2=否)
+     */
+    @TableField("isCharter")
+    private Integer isCharter;
+    /**
+     * 专车提成方式(1=比例,2=固定)
+     */
+    @TableField("isSpeFixedOrProportional")
+    private Integer isSpeFixedOrProportional;
+    /**
+     * 出租车提成方式(1=比例,2=固定)
+     */
+    @TableField("isTaxiFixedOrProportional")
+    private Integer isTaxiFixedOrProportional;
+    /**
+     * 跨城物流提成方式(1=比例,2=固定)
+     */
+    @TableField("isCrossLogisticsFixedOrProportional")
+    private Integer isCrossLogisticsFixedOrProportional;
+    /**
+     * 同城物流提成方式(1=比例,2=固定)
+     */
+    @TableField("isSameLogisticsFixedOrProportional")
+    private Integer isSameLogisticsFixedOrProportional;
+    /**
+     * 专车提成数值
+     */
+    @TableField("speMoney")
+    private Double speMoney;
+    /**
+     * 出租车提成数值
+     */
+    @TableField("taxiMoney")
+    private Double taxiMoney;
+    /**
+     * 跨城物流提成数值
+     */
+    @TableField("crossLogisticsMoney")
+    private Double crossLogisticsMoney;
+    /**
+     * 同城物流
+     */
+    @TableField("sameLogisticsMoney")
+    private Double sameLogisticsMoney;
+    /**
+     * 是否需要摆渡车(1=是,2=否)
+     */
+    @TableField("isNeedFerry")
+    private Integer isNeedFerry;
+    /**
+     * 企业名称
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 企业类型(1=平台,2=分公司,3=加盟商)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 上级企业
+     */
+    @TableField("superiorId")
+    private Integer superiorId;
+    /**
+     * 负责人姓名
+     */
+    @TableField("principalName")
+    private String principalName;
+    /**
+     * 负责人电话
+     */
+    @TableField("principalPhone")
+    private String principalPhone;
+    /**
+     * 管理员姓名
+     */
+    @TableField("adminName")
+    private String adminName;
+    /**
+     * 管理员电话
+     */
+    @TableField("adminPhone")
+    private String adminPhone;
+    /**
+     * 紧急联系电话
+     */
+    @TableField("urgentPhoen")
+    private String urgentPhoen;
+    /**
+     * 服务机构设立时间
+     */
+    @TableField("setupTime")
+    private Date setupTime;
+    /**
+     * 社会统一信用代码
+     */
+    @TableField("identifier")
+    private String identifier;
+    /**
+     * 注册地行政区域代码
+     */
+    @TableField("addressCode")
+    private String addressCode;
+    /**
+     * 经营范围
+     */
+    @TableField("businessScope")
+    private String businessScope;
+    /**
+     * 通信地址
+     */
+    @TableField("contactAddress")
+    private String contactAddress;
+    /**
+     * 行政文书送达地址
+     */
+    @TableField("documentAddress")
+    private String documentAddress;
+    /**
+     * 经营业户经济类型
+     */
+    @TableField("economicType")
+    private String economicType;
+    /**
+     * 注册资本
+     */
+    @TableField("regCapital")
+    private String regCapital;
+    /**
+     * 法人代表姓名
+     */
+    @TableField("legalName")
+    private String legalName;
+    /**
+     * 法人代表身份证号码
+     */
+    @TableField("legalId")
+    private String legalId;
+    /**
+     * 法人代表电话
+     */
+    @TableField("legalPhone")
+    private String legalPhone;
+    /**
+     * 法人代表身份证图片地址
+     */
+    @TableField("legalPhotoUrl")
+    private String legalPhotoUrl;
+    /**
+     * 经营许可证发证机构
+     */
+    @TableField("licensingAgency")
+    private String licensingAgency;
+    /**
+     * 经营许可证初次发证日期
+     */
+    @TableField("licenseTime")
+    private Date licenseTime;
+    /**
+     * 镜经营许可证有效日期起
+     */
+    @TableField("licenseStartTime")
+    private Date licenseStartTime;
+    /**
+     * 经营许可证有效日期止
+     */
+    @TableField("licenseEndTime")
+    private Date licenseEndTime;
+    /**
+     * 网络预约车经营许可证号
+     */
+    @TableField("licenseNumber")
+    private String licenseNumber;
+    /**
+     * 注册网络预约车数量
+     */
+    @TableField("carNum")
+    private Integer carNum;
+    /**
+     * 注册网络预约车驾驶员数量
+     */
+    @TableField("driverNum")
+    private Integer driverNum;
+    /**
+     * 绑定mac地址
+     */
+    @TableField("mac")
+    private String mac;
+    /**
+     * 状态(1=正常,2=禁用)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 1=创建,2=修改,3=删除
+     */
+    @TableField("flag")
+    private Integer flag;
+    /**
+     * 上传标识(1:未上传,2:已上传)
+     */
+    @TableField("upload")
+    private Integer upload;
+    /**
+     * 创建日期
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getIsSpe() {
+        return isSpe;
+    }
+
+    public void setIsSpe(Integer isSpe) {
+        this.isSpe = isSpe;
+    }
+
+    public Integer getIsTaxi() {
+        return isTaxi;
+    }
+
+    public void setIsTaxi(Integer isTaxi) {
+        this.isTaxi = isTaxi;
+    }
+
+    public Integer getIsCross() {
+        return isCross;
+    }
+
+    public void setIsCross(Integer isCross) {
+        this.isCross = isCross;
+    }
+
+    public Integer getIsCrossLogistics() {
+        return isCrossLogistics;
+    }
+
+    public void setIsCrossLogistics(Integer isCrossLogistics) {
+        this.isCrossLogistics = isCrossLogistics;
+    }
+
+    public Integer getIsSameLogistics() {
+        return isSameLogistics;
+    }
+
+    public void setIsSameLogistics(Integer isSameLogistics) {
+        this.isSameLogistics = isSameLogistics;
+    }
+
+    public Integer getIsCharter() {
+        return isCharter;
+    }
+
+    public void setIsCharter(Integer isCharter) {
+        this.isCharter = isCharter;
+    }
+
+    public Integer getIsSpeFixedOrProportional() {
+        return isSpeFixedOrProportional;
+    }
+
+    public void setIsSpeFixedOrProportional(Integer isSpeFixedOrProportional) {
+        this.isSpeFixedOrProportional = isSpeFixedOrProportional;
+    }
+
+    public Integer getIsTaxiFixedOrProportional() {
+        return isTaxiFixedOrProportional;
+    }
+
+    public void setIsTaxiFixedOrProportional(Integer isTaxiFixedOrProportional) {
+        this.isTaxiFixedOrProportional = isTaxiFixedOrProportional;
+    }
+
+    public Integer getIsCrossLogisticsFixedOrProportional() {
+        return isCrossLogisticsFixedOrProportional;
+    }
+
+    public void setIsCrossLogisticsFixedOrProportional(Integer isCrossLogisticsFixedOrProportional) {
+        this.isCrossLogisticsFixedOrProportional = isCrossLogisticsFixedOrProportional;
+    }
+
+    public Integer getIsSameLogisticsFixedOrProportional() {
+        return isSameLogisticsFixedOrProportional;
+    }
+
+    public void setIsSameLogisticsFixedOrProportional(Integer isSameLogisticsFixedOrProportional) {
+        this.isSameLogisticsFixedOrProportional = isSameLogisticsFixedOrProportional;
+    }
+
+    public Double getSpeMoney() {
+        return speMoney;
+    }
+
+    public void setSpeMoney(Double speMoney) {
+        this.speMoney = speMoney;
+    }
+
+    public Double getTaxiMoney() {
+        return taxiMoney;
+    }
+
+    public void setTaxiMoney(Double taxiMoney) {
+        this.taxiMoney = taxiMoney;
+    }
+
+    public Double getCrossLogisticsMoney() {
+        return crossLogisticsMoney;
+    }
+
+    public void setCrossLogisticsMoney(Double crossLogisticsMoney) {
+        this.crossLogisticsMoney = crossLogisticsMoney;
+    }
+
+    public Double getSameLogisticsMoney() {
+        return sameLogisticsMoney;
+    }
+
+    public void setSameLogisticsMoney(Double sameLogisticsMoney) {
+        this.sameLogisticsMoney = sameLogisticsMoney;
+    }
+
+    public Integer getIsNeedFerry() {
+        return isNeedFerry;
+    }
+
+    public void setIsNeedFerry(Integer isNeedFerry) {
+        this.isNeedFerry = isNeedFerry;
+    }
+
+    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 getSuperiorId() {
+        return superiorId;
+    }
+
+    public void setSuperiorId(Integer superiorId) {
+        this.superiorId = superiorId;
+    }
+
+    public String getPrincipalName() {
+        return principalName;
+    }
+
+    public void setPrincipalName(String principalName) {
+        this.principalName = principalName;
+    }
+
+    public String getPrincipalPhone() {
+        return principalPhone;
+    }
+
+    public void setPrincipalPhone(String principalPhone) {
+        this.principalPhone = principalPhone;
+    }
+
+    public String getAdminName() {
+        return adminName;
+    }
+
+    public void setAdminName(String adminName) {
+        this.adminName = adminName;
+    }
+
+    public String getAdminPhone() {
+        return adminPhone;
+    }
+
+    public void setAdminPhone(String adminPhone) {
+        this.adminPhone = adminPhone;
+    }
+
+    public String getUrgentPhoen() {
+        return urgentPhoen;
+    }
+
+    public void setUrgentPhoen(String urgentPhoen) {
+        this.urgentPhoen = urgentPhoen;
+    }
+
+    public Date getSetupTime() {
+        return setupTime;
+    }
+
+    public void setSetupTime(Date setupTime) {
+        this.setupTime = setupTime;
+    }
+
+    public String getIdentifier() {
+        return identifier;
+    }
+
+    public void setIdentifier(String identifier) {
+        this.identifier = identifier;
+    }
+
+    public String getAddressCode() {
+        return addressCode;
+    }
+
+    public void setAddressCode(String addressCode) {
+        this.addressCode = addressCode;
+    }
+
+    public String getBusinessScope() {
+        return businessScope;
+    }
+
+    public void setBusinessScope(String businessScope) {
+        this.businessScope = businessScope;
+    }
+
+    public String getContactAddress() {
+        return contactAddress;
+    }
+
+    public void setContactAddress(String contactAddress) {
+        this.contactAddress = contactAddress;
+    }
+
+    public String getDocumentAddress() {
+        return documentAddress;
+    }
+
+    public void setDocumentAddress(String documentAddress) {
+        this.documentAddress = documentAddress;
+    }
+
+    public String getEconomicType() {
+        return economicType;
+    }
+
+    public void setEconomicType(String economicType) {
+        this.economicType = economicType;
+    }
+
+    public String getRegCapital() {
+        return regCapital;
+    }
+
+    public void setRegCapital(String regCapital) {
+        this.regCapital = regCapital;
+    }
+
+    public String getLegalName() {
+        return legalName;
+    }
+
+    public void setLegalName(String legalName) {
+        this.legalName = legalName;
+    }
+
+    public String getLegalId() {
+        return legalId;
+    }
+
+    public void setLegalId(String legalId) {
+        this.legalId = legalId;
+    }
+
+    public String getLegalPhone() {
+        return legalPhone;
+    }
+
+    public void setLegalPhone(String legalPhone) {
+        this.legalPhone = legalPhone;
+    }
+
+    public String getLegalPhotoUrl() {
+        return legalPhotoUrl;
+    }
+
+    public void setLegalPhotoUrl(String legalPhotoUrl) {
+        this.legalPhotoUrl = legalPhotoUrl;
+    }
+
+    public String getLicensingAgency() {
+        return licensingAgency;
+    }
+
+    public void setLicensingAgency(String licensingAgency) {
+        this.licensingAgency = licensingAgency;
+    }
+
+    public Date getLicenseTime() {
+        return licenseTime;
+    }
+
+    public void setLicenseTime(Date licenseTime) {
+        this.licenseTime = licenseTime;
+    }
+
+    public Date getLicenseStartTime() {
+        return licenseStartTime;
+    }
+
+    public void setLicenseStartTime(Date licenseStartTime) {
+        this.licenseStartTime = licenseStartTime;
+    }
+
+    public Date getLicenseEndTime() {
+        return licenseEndTime;
+    }
+
+    public void setLicenseEndTime(Date licenseEndTime) {
+        this.licenseEndTime = licenseEndTime;
+    }
+
+    public String getLicenseNumber() {
+        return licenseNumber;
+    }
+
+    public void setLicenseNumber(String licenseNumber) {
+        this.licenseNumber = licenseNumber;
+    }
+
+    public Integer getCarNum() {
+        return carNum;
+    }
+
+    public void setCarNum(Integer carNum) {
+        this.carNum = carNum;
+    }
+
+    public Integer getDriverNum() {
+        return driverNum;
+    }
+
+    public void setDriverNum(Integer driverNum) {
+        this.driverNum = driverNum;
+    }
+
+    public String getMac() {
+        return mac;
+    }
+
+    public void setMac(String mac) {
+        this.mac = mac;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Integer getFlag() {
+        return flag;
+    }
+
+    public void setFlag(Integer flag) {
+        this.flag = flag;
+    }
+
+    public Integer getUpload() {
+        return upload;
+    }
+
+    public void setUpload(Integer upload) {
+        this.upload = upload;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    @Override
+    public String toString() {
+        return "Company{" +
+                "id=" + id +
+                ", isSpe=" + isSpe +
+                ", isTaxi=" + isTaxi +
+                ", isCross=" + isCross +
+                ", isCrossLogistics=" + isCrossLogistics +
+                ", isSameLogistics=" + isSameLogistics +
+                ", isCharter=" + isCharter +
+                ", isSpeFixedOrProportional=" + isSpeFixedOrProportional +
+                ", isTaxiFixedOrProportional=" + isTaxiFixedOrProportional +
+                ", isCrossLogisticsFixedOrProportional=" + isCrossLogisticsFixedOrProportional +
+                ", isSameLogisticsFixedOrProportional=" + isSameLogisticsFixedOrProportional +
+                ", speMoney=" + speMoney +
+                ", taxiMoney=" + taxiMoney +
+                ", crossLogisticsMoney=" + crossLogisticsMoney +
+                ", sameLogisticsMoney=" + sameLogisticsMoney +
+                ", isNeedFerry=" + isNeedFerry +
+                ", name='" + name + '\'' +
+                ", type=" + type +
+                ", superiorId=" + superiorId +
+                ", principalName='" + principalName + '\'' +
+                ", principalPhone='" + principalPhone + '\'' +
+                ", adminName='" + adminName + '\'' +
+                ", adminPhone='" + adminPhone + '\'' +
+                ", urgentPhoen='" + urgentPhoen + '\'' +
+                ", setupTime=" + setupTime +
+                ", identifier='" + identifier + '\'' +
+                ", addressCode='" + addressCode + '\'' +
+                ", businessScope='" + businessScope + '\'' +
+                ", contactAddress='" + contactAddress + '\'' +
+                ", documentAddress='" + documentAddress + '\'' +
+                ", economicType='" + economicType + '\'' +
+                ", regCapital='" + regCapital + '\'' +
+                ", legalName='" + legalName + '\'' +
+                ", legalId='" + legalId + '\'' +
+                ", legalPhone='" + legalPhone + '\'' +
+                ", legalPhotoUrl='" + legalPhotoUrl + '\'' +
+                ", licensingAgency='" + licensingAgency + '\'' +
+                ", licenseTime=" + licenseTime +
+                ", licenseStartTime=" + licenseStartTime +
+                ", licenseEndTime=" + licenseEndTime +
+                ", licenseNumber='" + licenseNumber + '\'' +
+                ", carNum=" + carNum +
+                ", driverNum=" + driverNum +
+                ", mac='" + mac + '\'' +
+                ", state=" + state +
+                ", flag=" + flag +
+                ", upload=" + upload +
+                ", insertTime=" + insertTime +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CompanyCity.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CompanyCity.java
new file mode 100644
index 0000000..ee81ae0
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CompanyCity.java
@@ -0,0 +1,104 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+/**
+ * 企业经营范围
+ */
+@TableName("t_company_city")
+public class CompanyCity {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 企业id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 省编号
+     */
+    @TableField("provinceCode")
+    private String provinceCode;
+    /**
+     * 市编号
+     */
+    @TableField("cityCode")
+    private String cityCode;
+    /**
+     * 区编号
+     */
+    @TableField("areaCode")
+    private String areaCode;
+    /**
+     * 状态(1=正常,2=删除)
+     */
+    @TableField("state")
+    private Integer state;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public String getProvinceCode() {
+        return provinceCode;
+    }
+
+    public void setProvinceCode(String provinceCode) {
+        this.provinceCode = provinceCode;
+    }
+
+    public String getCityCode() {
+        return cityCode;
+    }
+
+    public void setCityCode(String cityCode) {
+        this.cityCode = cityCode;
+    }
+
+    public String getAreaCode() {
+        return areaCode;
+    }
+
+    public void setAreaCode(String areaCode) {
+        this.areaCode = areaCode;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    @Override
+    public String toString() {
+        return "CompanyCity{" +
+                "id=" + id +
+                ", companyId=" + companyId +
+                ", provinceCode='" + provinceCode + '\'' +
+                ", cityCode='" + cityCode + '\'' +
+                ", areaCode='" + areaCode + '\'' +
+                ", state=" + state +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Complaint.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Complaint.java
new file mode 100644
index 0000000..55af0a0
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Complaint.java
@@ -0,0 +1,153 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 投诉
+ */
+@TableName("t_complaint")
+@Data
+public class Complaint {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 用户id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 投诉原因
+     */
+    @TableField("reason")
+    private String reason;
+    /**
+     * 司机id
+     */
+    @TableField("driverId")
+    private Integer driverId;
+    /**
+     * 描述
+     */
+    @TableField("description")
+    private String description;
+    /**
+     * 处理状态(0=未处理,1=已处理)
+     */
+    @TableField("isHandle")
+    private Integer isHandle;
+    /**
+     * 添加时间
+     */
+    @TableField("insert_time")
+    private Date insertTime;
+    /**
+     * 处理结果
+     */
+    @TableField("handleResult")
+    private String handleResult;
+    /**
+     * 处理人id
+     */
+    @TableField("handleUserId")
+    private Integer handleUserId;
+    @TableField("type")
+
+    private Integer type;
+
+    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 String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public Integer getDriverId() {
+        return driverId;
+    }
+
+    public void setDriverId(Integer driverId) {
+        this.driverId = driverId;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public Integer getIsHandle() {
+        return isHandle;
+    }
+
+    public void setIsHandle(Integer isHandle) {
+        this.isHandle = isHandle;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public String getHandleResult() {
+        return handleResult;
+    }
+
+    public void setHandleResult(String handleResult) {
+        this.handleResult = handleResult;
+    }
+
+    public Integer getHandleUserId() {
+        return handleUserId;
+    }
+
+    public void setHandleUserId(Integer handleUserId) {
+        this.handleUserId = handleUserId;
+    }
+
+    @Override
+    public String toString() {
+        return "Complaint{" +
+                "id=" + id +
+                ", userId=" + userId +
+                ", reason='" + reason + '\'' +
+                ", driverId=" + driverId +
+                ", description='" + description + '\'' +
+                ", isHandle=" + isHandle +
+                ", insertTime=" + insertTime +
+                ", handleResult='" + handleResult + '\'' +
+                ", handleUserId=" + handleUserId +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dept.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dept.java
new file mode 100644
index 0000000..0790865
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dept.java
@@ -0,0 +1,140 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 部门表
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+@TableName("sys_dept")
+public class Dept extends Model<Dept> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+	@TableId(value="id", type= IdType.AUTO)
+	private Integer id;
+    /**
+     * 排序
+     */
+	private Integer num;
+    /**
+     * 父部门id
+     */
+	private Integer pid;
+    /**
+     * 父级ids
+     */
+	private String pids;
+    /**
+     * 简称
+     */
+	private String simplename;
+    /**
+     * 全称
+     */
+	private String fullname;
+    /**
+     * 提示
+     */
+	private String tips;
+    /**
+     * 版本(乐观锁保留字段)
+     */
+	private Integer version;
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Integer getNum() {
+		return num;
+	}
+
+	public void setNum(Integer num) {
+		this.num = num;
+	}
+
+	public Integer getPid() {
+		return pid;
+	}
+
+	public void setPid(Integer pid) {
+		this.pid = pid;
+	}
+
+	public String getPids() {
+		return pids;
+	}
+
+	public void setPids(String pids) {
+		this.pids = pids;
+	}
+
+	public String getSimplename() {
+		return simplename;
+	}
+
+	public void setSimplename(String simplename) {
+		this.simplename = simplename;
+	}
+
+	public String getFullname() {
+		return fullname;
+	}
+
+	public void setFullname(String fullname) {
+		this.fullname = fullname;
+	}
+
+	public String getTips() {
+		return tips;
+	}
+
+	public void setTips(String tips) {
+		this.tips = tips;
+	}
+
+	public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer version) {
+		this.version = version;
+	}
+
+	@Override
+	protected Serializable pkVal() {
+		return this.id;
+	}
+
+	@Override
+	public String toString() {
+		return "Dept{" +
+			"id=" + id +
+			", num=" + num +
+			", pid=" + pid +
+			", pids=" + pids +
+			", simplename=" + simplename +
+			", fullname=" + fullname +
+			", tips=" + tips +
+			", version=" + version +
+			"}";
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dict.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dict.java
new file mode 100644
index 0000000..b021b4b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dict.java
@@ -0,0 +1,116 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 字典表
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+@TableName("sys_dict")
+public class Dict extends Model<Dict> {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键id
+	 */
+	@TableId(value="id", type= IdType.AUTO)
+	private Integer id;
+	/**
+	 * 排序
+	 */
+	private Integer num;
+	/**
+	 * 父级字典
+	 */
+	private Integer pid;
+	/**
+	 * 名称
+	 */
+	private String name;
+
+	/**
+	 * 编码
+	 */
+	private String code;
+	/**
+	 * 提示
+	 */
+	private String tips;
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Integer getNum() {
+		return num;
+	}
+
+	public void setNum(Integer num) {
+		this.num = num;
+	}
+
+	public Integer getPid() {
+		return pid;
+	}
+
+	public void setPid(Integer pid) {
+		this.pid = pid;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getTips() {
+		return tips;
+	}
+
+	public void setTips(String tips) {
+		this.tips = tips;
+	}
+
+	@Override
+	protected Serializable pkVal() {
+		return this.id;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	@Override
+	public String toString() {
+		return "Dict{" +
+				"id=" + id +
+				", num=" + num +
+				", pid=" + pid +
+				", name='" + name + '\'' +
+				", code='" + code + '\'' +
+				", tips='" + tips + '\'' +
+				'}';
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Driver.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Driver.java
new file mode 100644
index 0000000..c5e3263
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Driver.java
@@ -0,0 +1,896 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 司机
+ */
+@TableName("t_driver")
+public class Driver extends BaseBean{
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 账号
+     */
+    @TableField("account")
+    private String account;
+    /**
+     * 工号
+     */
+    @TableField("jobNumber")
+    private String jobNumber;
+    /**
+     * 电话
+     */
+    @TableField("phone")
+    private String phone;
+    /**
+     * 登录密码
+     */
+    @TableField("password")
+    private String password;
+    /**
+     * 姓名
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 性别(1=男,2=女)
+     */
+    @TableField("sex")
+    private Integer sex;
+    /**
+     * 身份证号码
+     */
+    @TableField("idCard")
+    private String idCard;
+    /**
+     * 公司id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 加盟商id
+     */
+    @TableField("franchiseeId")
+    private Integer franchiseeId;
+    /**
+     * 头像图片
+     */
+    @TableField("headImgUrl")
+    private String headImgUrl;
+    /**
+     * 人脸识别照片
+     */
+    @TableField("faceImgUrl")
+    private String faceImgUrl;
+    /**
+     * 身份证正面照片
+     */
+    @TableField("idCardImgUrl1")
+    private String idCardImgUrl1;
+    /**
+     * 身份证背面照片
+     */
+    @TableField("idCardImgUrl2")
+    private String idCardImgUrl2;
+    /**
+     * 网约车注册地
+     */
+    @TableField("placeOfEmployment")
+    private String placeOfEmployment;
+    /**
+     * 生日
+     */
+    @TableField("birthday")
+    private Date birthday;
+    /**
+     * 银行卡号
+     */
+    @TableField("bankCardNumber")
+    private String bankCardNumber;
+    /**
+     * 国籍
+     */
+    @TableField("driverNationality")
+    private String driverNationality;
+    /**
+     * 民族
+     */
+    @TableField("driverNation")
+    private String driverNation;
+    /**
+     * 婚姻状况(1:未婚,2:已婚,3:离异)
+     */
+    @TableField("driverMaritalStatus")
+    private Integer driverMaritalStatus;
+    /**
+     * 外语能力
+     */
+    @TableField("driverLanguageLevel")
+    private String driverLanguageLevel;
+    /**
+     * 学历
+     */
+    @TableField("driverEducation")
+    private String driverEducation;
+    /**
+     * 户口登记机关名称
+     */
+    @TableField("driverCensus")
+    private String driverCensus;
+    /**
+     * 户口地址或常住地址
+     */
+    @TableField("driverAddress")
+    private String driverAddress;
+    /**
+     * 通信地址
+     */
+    @TableField("driverContactAddress")
+    private String driverContactAddress;
+    /**
+     * 驾龄
+     */
+    @TableField("driverAge")
+    private Integer driverAge;
+    /**
+     * 驾驶证号码
+     */
+    @TableField("driveCard")
+    private String driveCard;
+    /**
+     * 驾驶证照片
+     */
+    @TableField("driveCardImgUrl")
+    private String driveCardImgUrl;
+    /**
+     * 准驾车型
+     */
+    @TableField("driverType")
+    private String driverType;
+    /**
+     * 初次领取驾驶证日期
+     */
+    @TableField("getDriverLicenseDate")
+    private Date getDriverLicenseDate;
+    /**
+     * 驾驶证有效期限起
+     */
+    @TableField("driverLicenseOn")
+    private Date driverLicenseOn;
+    /**
+     * 驾驶证有效期限止
+     */
+    @TableField("driverLicenseOff")
+    private Date driverLicenseOff;
+    /**
+     * 是否巡游出租车驾驶员(0:否,1:是)
+     */
+    @TableField("taxiDriver")
+    private Integer taxiDriver;
+    /**
+     * 出租车资格证号
+     */
+    @TableField("taxiAptitudeCard")
+    private String taxiAptitudeCard;
+    /**
+     * 网约车资格证照片
+     */
+    @TableField("networkCarlssueImg")
+    private String networkCarlssueImg;
+    /**
+     * 网络预约出租车驾驶员证发证机构
+     */
+    @TableField("networkCarlssueOrganization")
+    private String networkCarlssueOrganization;
+    /**
+     * 资格证发证日期
+     */
+    @TableField("networkCarlssueDate")
+    private Date networkCarlssueDate;
+    /**
+     * 初次认领资格证日期
+     */
+    @TableField("getNetworkCarProofDate")
+    private Date getNetworkCarProofDate;
+    /**
+     * 资格证有效起始日期
+     */
+    @TableField("networkCarProofOn")
+    private Date networkCarProofOn;
+    /**
+     * 资格证有效截至日期
+     */
+    @TableField("networkCarProofOff")
+    private Date networkCarProofOff;
+    /**
+     * 报备日期
+     */
+    @TableField("registerDate")
+    private Date registerDate;
+    /**
+     * 是否专职驾驶员(0:否,1:是)
+     */
+    @TableField("fullTimeDriver")
+    private Integer fullTimeDriver;
+    /**
+     * 是否在驾驶员黑名单内(0:否,1:是)
+     */
+    @TableField("inDriverBlacklist")
+    private Integer inDriverBlacklist;
+    /**
+     * 服务类型(1:网络预约出租汽车,2:巡游出租汽车,3:私人小客车合乘)
+     */
+    @TableField("commercialType")
+    private Integer commercialType;
+    /**
+     * 驾驶员合同签署公司
+     */
+    @TableField("contractCompany")
+    private String contractCompany;
+    /**
+     * 合同有效期起
+     */
+    @TableField("contractOn")
+    private Date contractOn;
+    /**
+     * 合同有效期止
+     */
+    @TableField("contractOff")
+    private Date contractOff;
+    /**
+     * 紧急联系人
+     */
+    @TableField("emergencyContact")
+    private String emergencyContact;
+    /**
+     * 紧急联系电话
+     */
+    @TableField("emergencyContactPhone")
+    private String emergencyContactPhone;
+    /**
+     * 紧急联系地址
+     */
+    @TableField("emergencyContactAddress")
+    private String emergencyContactAddress;
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+    /**
+     * 是否是平台车辆(1=是,2=否)
+     */
+    @TableField("isPlatCar")
+    private Integer isPlatCar;
+    /**
+     * 司机管理车辆id
+     */
+    @TableField("carId")
+    private Integer carId;
+    /**
+     * 审核状态(1=待审核,2=正常,3=冻结,4=拒绝)
+     */
+    @TableField("authState")
+    private Integer authState;
+    /**
+     * 司机状态(1=离线,2=空闲,3=服务中)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 添加方式(1=司机注册 2=平台添加 3=分公司添加 4=加盟商添加)
+     * @return
+     */
+    @TableField("addType")
+    private Integer addType;
+    /**
+     * 账户余额
+     * @return
+     */
+    @TableField("balance")
+    private Double balance;
+    /**
+     * 活动总收入
+     * @return
+     */
+    @TableField("activityMoney")
+    private Double activityMoney;
+    /**
+     * 剩余未提现活动总收入
+     * @return
+     */
+    @TableField("laveActivityMoney")
+    private Double laveActivityMoney;
+    /**
+     * 业务总收入
+     * @return
+     */
+    @TableField("businessMoney")
+    private Double businessMoney;
+    /**
+     * 剩余未提现业务总收入
+     * @return
+     */
+    @TableField("laveBusinessMoney")
+    private Double laveBusinessMoney;
+    /**
+     * 小程序openid
+     */
+    @TableField("appletsOpenId")
+    private String appletsOpenId;
+
+    @Override
+    public Integer getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getAccount() {
+        return account;
+    }
+
+    public void setAccount(String account) {
+        this.account = account;
+    }
+
+    public String getJobNumber() {
+        return jobNumber;
+    }
+
+    public void setJobNumber(String jobNumber) {
+        this.jobNumber = jobNumber;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getSex() {
+        return sex;
+    }
+
+    public void setSex(Integer sex) {
+        this.sex = sex;
+    }
+
+    public String getIdCard() {
+        return idCard;
+    }
+
+    public void setIdCard(String idCard) {
+        this.idCard = idCard;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public String getHeadImgUrl() {
+        return headImgUrl;
+    }
+
+    public void setHeadImgUrl(String headImgUrl) {
+        this.headImgUrl = headImgUrl;
+    }
+
+    public String getFaceImgUrl() {
+        return faceImgUrl;
+    }
+
+    public void setFaceImgUrl(String faceImgUrl) {
+        this.faceImgUrl = faceImgUrl;
+    }
+
+    public String getIdCardImgUrl1() {
+        return idCardImgUrl1;
+    }
+
+    public void setIdCardImgUrl1(String idCardImgUrl1) {
+        this.idCardImgUrl1 = idCardImgUrl1;
+    }
+
+    public String getIdCardImgUrl2() {
+        return idCardImgUrl2;
+    }
+
+    public void setIdCardImgUrl2(String idCardImgUrl2) {
+        this.idCardImgUrl2 = idCardImgUrl2;
+    }
+
+    public String getPlaceOfEmployment() {
+        return placeOfEmployment;
+    }
+
+    public void setPlaceOfEmployment(String placeOfEmployment) {
+        this.placeOfEmployment = placeOfEmployment;
+    }
+
+    public Date getBirthday() {
+        return birthday;
+    }
+
+    public void setBirthday(Date birthday) {
+        this.birthday = birthday;
+    }
+
+    public String getBankCardNumber() {
+        return bankCardNumber;
+    }
+
+    public void setBankCardNumber(String bankCardNumber) {
+        this.bankCardNumber = bankCardNumber;
+    }
+
+    public String getDriverNationality() {
+        return driverNationality;
+    }
+
+    public void setDriverNationality(String driverNationality) {
+        this.driverNationality = driverNationality;
+    }
+
+    public String getDriverNation() {
+        return driverNation;
+    }
+
+    public void setDriverNation(String driverNation) {
+        this.driverNation = driverNation;
+    }
+
+    public Integer getDriverMaritalStatus() {
+        return driverMaritalStatus;
+    }
+
+    public void setDriverMaritalStatus(Integer driverMaritalStatus) {
+        this.driverMaritalStatus = driverMaritalStatus;
+    }
+
+    public String getDriverLanguageLevel() {
+        return driverLanguageLevel;
+    }
+
+    public void setDriverLanguageLevel(String driverLanguageLevel) {
+        this.driverLanguageLevel = driverLanguageLevel;
+    }
+
+    public String getDriverEducation() {
+        return driverEducation;
+    }
+
+    public void setDriverEducation(String driverEducation) {
+        this.driverEducation = driverEducation;
+    }
+
+    public String getDriverCensus() {
+        return driverCensus;
+    }
+
+    public void setDriverCensus(String driverCensus) {
+        this.driverCensus = driverCensus;
+    }
+
+    public String getDriverAddress() {
+        return driverAddress;
+    }
+
+    public void setDriverAddress(String driverAddress) {
+        this.driverAddress = driverAddress;
+    }
+
+    public String getDriverContactAddress() {
+        return driverContactAddress;
+    }
+
+    public void setDriverContactAddress(String driverContactAddress) {
+        this.driverContactAddress = driverContactAddress;
+    }
+
+    public Integer getDriverAge() {
+        return driverAge;
+    }
+
+    public void setDriverAge(Integer driverAge) {
+        this.driverAge = driverAge;
+    }
+
+    public String getDriveCard() {
+        return driveCard;
+    }
+
+    public void setDriveCard(String driveCard) {
+        this.driveCard = driveCard;
+    }
+
+    public String getDriveCardImgUrl() {
+        return driveCardImgUrl;
+    }
+
+    public void setDriveCardImgUrl(String driveCardImgUrl) {
+        this.driveCardImgUrl = driveCardImgUrl;
+    }
+
+    public String getDriverType() {
+        return driverType;
+    }
+
+    public void setDriverType(String driverType) {
+        this.driverType = driverType;
+    }
+
+    public Date getGetDriverLicenseDate() {
+        return getDriverLicenseDate;
+    }
+
+    public void setGetDriverLicenseDate(Date getDriverLicenseDate) {
+        this.getDriverLicenseDate = getDriverLicenseDate;
+    }
+
+    public Date getDriverLicenseOn() {
+        return driverLicenseOn;
+    }
+
+    public void setDriverLicenseOn(Date driverLicenseOn) {
+        this.driverLicenseOn = driverLicenseOn;
+    }
+
+    public Date getDriverLicenseOff() {
+        return driverLicenseOff;
+    }
+
+    public void setDriverLicenseOff(Date driverLicenseOff) {
+        this.driverLicenseOff = driverLicenseOff;
+    }
+
+    public Integer getTaxiDriver() {
+        return taxiDriver;
+    }
+
+    public void setTaxiDriver(Integer taxiDriver) {
+        this.taxiDriver = taxiDriver;
+    }
+
+    public String getTaxiAptitudeCard() {
+        return taxiAptitudeCard;
+    }
+
+    public void setTaxiAptitudeCard(String taxiAptitudeCard) {
+        this.taxiAptitudeCard = taxiAptitudeCard;
+    }
+
+    public String getNetworkCarlssueOrganization() {
+        return networkCarlssueOrganization;
+    }
+
+    public void setNetworkCarlssueOrganization(String networkCarlssueOrganization) {
+        this.networkCarlssueOrganization = networkCarlssueOrganization;
+    }
+
+    public Date getNetworkCarlssueDate() {
+        return networkCarlssueDate;
+    }
+
+    public void setNetworkCarlssueDate(Date networkCarlssueDate) {
+        this.networkCarlssueDate = networkCarlssueDate;
+    }
+
+    public Date getGetNetworkCarProofDate() {
+        return getNetworkCarProofDate;
+    }
+
+    public void setGetNetworkCarProofDate(Date getNetworkCarProofDate) {
+        this.getNetworkCarProofDate = getNetworkCarProofDate;
+    }
+
+    public Date getNetworkCarProofOn() {
+        return networkCarProofOn;
+    }
+
+    public void setNetworkCarProofOn(Date networkCarProofOn) {
+        this.networkCarProofOn = networkCarProofOn;
+    }
+
+    public Date getNetworkCarProofOff() {
+        return networkCarProofOff;
+    }
+
+    public void setNetworkCarProofOff(Date networkCarProofOff) {
+        this.networkCarProofOff = networkCarProofOff;
+    }
+
+    public Date getRegisterDate() {
+        return registerDate;
+    }
+
+    public void setRegisterDate(Date registerDate) {
+        this.registerDate = registerDate;
+    }
+
+    public Integer getFullTimeDriver() {
+        return fullTimeDriver;
+    }
+
+    public void setFullTimeDriver(Integer fullTimeDriver) {
+        this.fullTimeDriver = fullTimeDriver;
+    }
+
+    public Integer getInDriverBlacklist() {
+        return inDriverBlacklist;
+    }
+
+    public void setInDriverBlacklist(Integer inDriverBlacklist) {
+        this.inDriverBlacklist = inDriverBlacklist;
+    }
+
+    public Integer getCommercialType() {
+        return commercialType;
+    }
+
+    public void setCommercialType(Integer commercialType) {
+        this.commercialType = commercialType;
+    }
+
+    public String getContractCompany() {
+        return contractCompany;
+    }
+
+    public void setContractCompany(String contractCompany) {
+        this.contractCompany = contractCompany;
+    }
+
+    public Date getContractOn() {
+        return contractOn;
+    }
+
+    public void setContractOn(Date contractOn) {
+        this.contractOn = contractOn;
+    }
+
+    public Date getContractOff() {
+        return contractOff;
+    }
+
+    public void setContractOff(Date contractOff) {
+        this.contractOff = contractOff;
+    }
+
+    public String getEmergencyContact() {
+        return emergencyContact;
+    }
+
+    public void setEmergencyContact(String emergencyContact) {
+        this.emergencyContact = emergencyContact;
+    }
+
+    public String getEmergencyContactPhone() {
+        return emergencyContactPhone;
+    }
+
+    public void setEmergencyContactPhone(String emergencyContactPhone) {
+        this.emergencyContactPhone = emergencyContactPhone;
+    }
+
+    public String getEmergencyContactAddress() {
+        return emergencyContactAddress;
+    }
+
+    public void setEmergencyContactAddress(String emergencyContactAddress) {
+        this.emergencyContactAddress = emergencyContactAddress;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Integer getIsPlatCar() {
+        return isPlatCar;
+    }
+
+    public void setIsPlatCar(Integer isPlatCar) {
+        this.isPlatCar = isPlatCar;
+    }
+
+    public Integer getCarId() {
+        return carId;
+    }
+
+    public void setCarId(Integer carId) {
+        this.carId = carId;
+    }
+
+    public Integer getAuthState() {
+        return authState;
+    }
+
+    public void setAuthState(Integer authState) {
+        this.authState = authState;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public String getNetworkCarlssueImg() {
+        return networkCarlssueImg;
+    }
+
+    public void setNetworkCarlssueImg(String networkCarlssueImg) {
+        this.networkCarlssueImg = networkCarlssueImg;
+    }
+
+    public Integer getAddType() {
+        return addType;
+    }
+
+    public void setAddType(Integer addType) {
+        this.addType = addType;
+    }
+
+    public Double getBalance() {
+        return balance;
+    }
+
+    public void setBalance(Double balance) {
+        this.balance = balance;
+    }
+
+    public Double getActivityMoney() {
+        return activityMoney;
+    }
+
+    public void setActivityMoney(Double activityMoney) {
+        this.activityMoney = activityMoney;
+    }
+
+    public Double getLaveActivityMoney() {
+        return laveActivityMoney;
+    }
+
+    public void setLaveActivityMoney(Double laveActivityMoney) {
+        this.laveActivityMoney = laveActivityMoney;
+    }
+
+    public Double getBusinessMoney() {
+        return businessMoney;
+    }
+
+    public void setBusinessMoney(Double businessMoney) {
+        this.businessMoney = businessMoney;
+    }
+
+    public Double getLaveBusinessMoney() {
+        return laveBusinessMoney;
+    }
+
+    public void setLaveBusinessMoney(Double laveBusinessMoney) {
+        this.laveBusinessMoney = laveBusinessMoney;
+    }
+
+    public Integer getFranchiseeId() {
+        return franchiseeId;
+    }
+
+    public void setFranchiseeId(Integer franchiseeId) {
+        this.franchiseeId = franchiseeId;
+    }
+
+    public String getAppletsOpenId() {
+        return appletsOpenId;
+    }
+
+    public void setAppletsOpenId(String appletsOpenId) {
+        this.appletsOpenId = appletsOpenId;
+    }
+
+    @Override
+    public String toString() {
+        return "Driver{" +
+                "account='" + account + '\'' +
+                ", jobNumber='" + jobNumber + '\'' +
+                ", phone='" + phone + '\'' +
+                ", password='" + password + '\'' +
+                ", name='" + name + '\'' +
+                ", sex=" + sex +
+                ", idCard='" + idCard + '\'' +
+                ", companyId=" + companyId +
+                ", franchiseeId=" + franchiseeId +
+                ", headImgUrl='" + headImgUrl + '\'' +
+                ", faceImgUrl='" + faceImgUrl + '\'' +
+                ", idCardImgUrl1='" + idCardImgUrl1 + '\'' +
+                ", idCardImgUrl2='" + idCardImgUrl2 + '\'' +
+                ", placeOfEmployment='" + placeOfEmployment + '\'' +
+                ", birthday=" + birthday +
+                ", bankCardNumber='" + bankCardNumber + '\'' +
+                ", driverNationality='" + driverNationality + '\'' +
+                ", driverNation='" + driverNation + '\'' +
+                ", driverMaritalStatus=" + driverMaritalStatus +
+                ", driverLanguageLevel='" + driverLanguageLevel + '\'' +
+                ", driverEducation='" + driverEducation + '\'' +
+                ", driverCensus='" + driverCensus + '\'' +
+                ", driverAddress='" + driverAddress + '\'' +
+                ", driverContactAddress='" + driverContactAddress + '\'' +
+                ", driverAge=" + driverAge +
+                ", driveCard='" + driveCard + '\'' +
+                ", driveCardImgUrl='" + driveCardImgUrl + '\'' +
+                ", driverType='" + driverType + '\'' +
+                ", getDriverLicenseDate=" + getDriverLicenseDate +
+                ", driverLicenseOn=" + driverLicenseOn +
+                ", driverLicenseOff=" + driverLicenseOff +
+                ", taxiDriver=" + taxiDriver +
+                ", taxiAptitudeCard='" + taxiAptitudeCard + '\'' +
+                ", networkCarlssueImg='" + networkCarlssueImg + '\'' +
+                ", networkCarlssueOrganization='" + networkCarlssueOrganization + '\'' +
+                ", networkCarlssueDate=" + networkCarlssueDate +
+                ", getNetworkCarProofDate=" + getNetworkCarProofDate +
+                ", networkCarProofOn=" + networkCarProofOn +
+                ", networkCarProofOff=" + networkCarProofOff +
+                ", registerDate=" + registerDate +
+                ", fullTimeDriver=" + fullTimeDriver +
+                ", inDriverBlacklist=" + inDriverBlacklist +
+                ", commercialType=" + commercialType +
+                ", contractCompany='" + contractCompany + '\'' +
+                ", contractOn=" + contractOn +
+                ", contractOff=" + contractOff +
+                ", emergencyContact='" + emergencyContact + '\'' +
+                ", emergencyContactPhone='" + emergencyContactPhone + '\'' +
+                ", emergencyContactAddress='" + emergencyContactAddress + '\'' +
+                ", remark='" + remark + '\'' +
+                ", isPlatCar=" + isPlatCar +
+                ", carId=" + carId +
+                ", authState=" + authState +
+                ", state=" + state +
+                ", addType=" + addType +
+                ", balance=" + balance +
+                ", activityMoney=" + activityMoney +
+                ", laveActivityMoney=" + laveActivityMoney +
+                ", businessMoney=" + businessMoney +
+                ", laveBusinessMoney=" + laveBusinessMoney +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityHistory.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityHistory.java
new file mode 100644
index 0000000..5af1722
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityHistory.java
@@ -0,0 +1,145 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 司机每天活动数量
+ */
+@TableName("t_driver_activity_history")
+public class DriverActivityHistory {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 活动日期
+     */
+    @TableField("day")
+    private Date day;
+    /**
+     * 司机id
+     */
+    @TableField("driverId")
+    private Integer driverId;
+    /**
+     * 活动类型(1=邀请司机注册,2=邀请用户注册,3=累计在线,4=订单量)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 活动id
+     */
+    @TableField("activityId")
+    private Integer activityId;
+    /**
+     * 是否完成(1=否,2=完成)
+     */
+    @TableField("carryOut")
+    private Integer carryOut;
+    /**
+     * 奖励金额
+     */
+    @TableField("money")
+    private Double money;
+    //领取时间
+    @TableField("collectionTime")
+    private Date collectionTime;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Date getDay() {
+        return day;
+    }
+
+    public void setDay(Date day) {
+        this.day = day;
+    }
+
+    public Integer getDriverId() {
+        return driverId;
+    }
+
+    public void setDriverId(Integer driverId) {
+        this.driverId = driverId;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getActivityId() {
+        return activityId;
+    }
+
+    public void setActivityId(Integer activityId) {
+        this.activityId = activityId;
+    }
+
+    public Integer getCarryOut() {
+        return carryOut;
+    }
+
+    public void setCarryOut(Integer carryOut) {
+        this.carryOut = carryOut;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public Date getCollectionTime() {
+        return collectionTime;
+    }
+
+    public void setCollectionTime(Date collectionTime) {
+        this.collectionTime = collectionTime;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    @Override
+    public String toString() {
+        return "DriverActivityHistory{" +
+                "id=" + id +
+                ", day=" + day +
+                ", driverId=" + driverId +
+                ", type=" + type +
+                ", activityId=" + activityId +
+                ", carryOut=" + carryOut +
+                ", money=" + money +
+                ", insertTime=" + insertTime +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityRegistered.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityRegistered.java
new file mode 100644
index 0000000..20ed172
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverActivityRegistered.java
@@ -0,0 +1,134 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 司机注册活动相关
+ */
+@TableName("t_driver_activity_registered")
+public class DriverActivityRegistered {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 公司id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 司机活动主表id
+     */
+    @TableField("driverActivityId")
+    private Integer driverActivityId;
+    /**
+     * 类型(1=邀请司机注册奖励,2=邀请用户注册奖励)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 奖励金额
+     */
+    @TableField("money")
+    private Double money;
+    /**
+     * 开始时间
+     */
+    @TableField("startTime")
+    private Date startTime;
+    /**
+     * 结束时间
+     */
+    @TableField("endTime")
+    private Date endTime;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getDriverActivityId() {
+        return driverActivityId;
+    }
+
+    public void setDriverActivityId(Integer driverActivityId) {
+        this.driverActivityId = driverActivityId;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    @Override
+    public String toString() {
+        return "DriverActivityRegistered{" +
+                "id=" + id +
+                ", companyId=" + companyId +
+                ", driverActivityId=" + driverActivityId +
+                ", type=" + type +
+                ", money=" + money +
+                ", startTime=" + startTime +
+                ", endTime=" + endTime +
+                ", insertTime=" + insertTime +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOrders.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOrders.java
new file mode 100644
index 0000000..be80997
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverOrders.java
@@ -0,0 +1,62 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+/**
+ * 司机接单设置
+ */
+@TableName("t_driver_orders")
+public class DriverOrders {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 司机id
+     */
+    @TableField("driverId")
+    private Integer driverId;
+    /**
+     * 允许接单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)
+     */
+    @TableField("type")
+    private Integer type;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getDriverId() {
+        return driverId;
+    }
+
+    public void setDriverId(Integer driverId) {
+        this.driverId = driverId;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    @Override
+    public String toString() {
+        return "DriverOrders{" +
+                "id=" + id +
+                ", driverId=" + driverId +
+                ", type=" + type +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverService.java
new file mode 100644
index 0000000..7c58371
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverService.java
@@ -0,0 +1,62 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+/**
+ * 司机可经营的业务类型
+ */
+@TableName("t_driver_service")
+public class DriverService {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 司机id
+     */
+    @TableField("driverId")
+    private Integer driverId;
+    /**
+     * 业务类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)
+     */
+    @TableField("type")
+    private Integer type;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getDriverId() {
+        return driverId;
+    }
+
+    public void setDriverId(Integer driverId) {
+        this.driverId = driverId;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    @Override
+    public String toString() {
+        return "DriverService{" +
+                "id=" + id +
+                ", driverId=" + driverId +
+                ", type=" + type +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverWork.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverWork.java
new file mode 100644
index 0000000..49bd976
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverWork.java
@@ -0,0 +1,105 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.sql.Date;
+
+/**
+ * 司机上下班记录
+ */
+@TableName("t_driver_work")
+public class DriverWork {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 司机id
+     */
+    @TableField("driverId")
+    private Integer driverId;
+    /**
+     * 上班时间
+     */
+    @TableField("startTime")
+    private Date startTime;
+    /**
+     * 下班时间
+     */
+    @TableField("endTime")
+    private Date endTime;
+    /**
+     * 业务类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)
+     */
+    @TableField("type")
+    private String type;
+    /**
+     * 上下班状态(1=上班,2=下班)
+     */
+    @TableField("state")
+    private Integer state;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getDriverId() {
+        return driverId;
+    }
+
+    public void setDriverId(Integer driverId) {
+        this.driverId = driverId;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    @Override
+    public String toString() {
+        return "DriverWork{" +
+                "id=" + id +
+                ", driverId=" + driverId +
+                ", startTime=" + startTime +
+                ", endTime=" + endTime +
+                ", type=" + type +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Expense.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Expense.java
new file mode 100644
index 0000000..3a5b05e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Expense.java
@@ -0,0 +1,123 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 报销表
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-12-05
+ */
+@TableName("sys_expense")
+public class Expense extends Model<Expense> {
+
+    private static final long serialVersionUID = 1L;
+
+	@TableId(value="id", type= IdType.AUTO)
+	private Integer id;
+    /**
+     * 报销金额
+     */
+	private BigDecimal money;
+    /**
+     * 描述
+     */
+	private String desc;
+	private Date createtime;
+    /**
+     * 状态: 1.待提交  2:待审核   3.审核通过
+     */
+	private Integer state;
+    /**
+     * 用户id
+     */
+	private Integer userid;
+    /**
+     * 流程定义id
+     */
+	private String processId;
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public BigDecimal getMoney() {
+		return money;
+	}
+
+	public void setMoney(BigDecimal money) {
+		this.money = money;
+	}
+
+	public String getDesc() {
+		return desc;
+	}
+
+	public void setDesc(String desc) {
+		this.desc = desc;
+	}
+
+	public Date getCreatetime() {
+		return createtime;
+	}
+
+	public void setCreatetime(Date createtime) {
+		this.createtime = createtime;
+	}
+
+	public Integer getState() {
+		return state;
+	}
+
+	public void setState(Integer state) {
+		this.state = state;
+	}
+
+	public Integer getUserid() {
+		return userid;
+	}
+
+	public void setUserid(Integer userid) {
+		this.userid = userid;
+	}
+
+	public String getProcessId() {
+		return processId;
+	}
+
+	public void setProcessId(String processId) {
+		this.processId = processId;
+	}
+
+	@Override
+	protected Serializable pkVal() {
+		return this.id;
+	}
+
+	@Override
+	public String toString() {
+		return "Expense{" +
+			"id=" + id +
+			", money=" + money +
+			", desc=" + desc +
+			", createtime=" + createtime +
+			", state=" + state +
+			", userid=" + userid +
+			", processId=" + processId +
+			"}";
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Feedback.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Feedback.java
new file mode 100644
index 0000000..d490b7f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Feedback.java
@@ -0,0 +1,176 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 反馈
+ */
+@TableName("t_feedback")
+public class Feedback {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 反馈人id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 处理人id
+     */
+    @TableField("handleUserId")
+    private Integer handleUserId;
+    /**
+     * 反馈内容
+     */
+    @TableField("content")
+    private String content;
+    /**
+     * 反馈时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 图片地址
+     */
+    @TableField("imgUrl")
+    private String imgUrl;
+    /**
+     * 状态(1=正常,2=删除)
+     */
+    @TableField("flag")
+    private Integer flag;
+    /**
+     * 处理状态(1=未处理,2=已处理)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 处理时间
+     */
+    @TableField("cldate")
+    private Date cldate;
+    /**
+     * 处理备注
+     */
+    @TableField("remark")
+    private String remark;
+    /**
+     * 1=用户,2=司机
+     */
+    @TableField("type")
+    private Integer type;
+
+    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 getHandleUserId() {
+        return handleUserId;
+    }
+
+    public void setHandleUserId(Integer handleUserId) {
+        this.handleUserId = handleUserId;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public String getImgUrl() {
+        return imgUrl;
+    }
+
+    public void setImgUrl(String imgUrl) {
+        this.imgUrl = imgUrl;
+    }
+
+    public Integer getFlag() {
+        return flag;
+    }
+
+    public void setFlag(Integer flag) {
+        this.flag = flag;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Date getCldate() {
+        return cldate;
+    }
+
+    public void setCldate(Date cldate) {
+        this.cldate = cldate;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    @Override
+    public String toString() {
+        return "Feedback{" +
+                "id=" + id +
+                ", userId=" + userId +
+                ", handleUserId=" + handleUserId +
+                ", content='" + content + '\'' +
+                ", insertTime=" + insertTime +
+                ", imgUrl='" + imgUrl + '\'' +
+                ", flag=" + flag +
+                ", state=" + state +
+                ", cldate=" + cldate +
+                ", remark='" + remark + '\'' +
+                ", type=" + type +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/GDInterface.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/GDInterface.java
new file mode 100644
index 0000000..123a6a7
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/GDInterface.java
@@ -0,0 +1,93 @@
+package com.stylefeng.guns.modular.system.model;
+
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 高德接口统计
+ */
+@TableName("t_gdinterface")
+public class GDInterface {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 接口名称
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 接口说明
+     */
+    @TableField("explanation")
+    private String explanation;
+    /**
+     * 调用次数
+     */
+    @TableField("num")
+    private Integer num;
+    /**
+     * 调用日期
+     */
+    @TableField("time")
+    private String time;
+
+    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 String getExplanation() {
+        return explanation;
+    }
+
+    public void setExplanation(String explanation) {
+        this.explanation = explanation;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    public String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+    }
+
+    @Override
+    public String toString() {
+        return "GDInterface{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", explanation='" + explanation + '\'' +
+                ", num=" + num +
+                ", time=" + time +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Income.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Income.java
new file mode 100644
index 0000000..cae5522
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Income.java
@@ -0,0 +1,134 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 收入明细
+ */
+@TableName("t_income")
+public class Income {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 收入方类型(1=公司,2=司机)
+     */
+    @TableField("userType")
+    private Integer userType;
+    /**
+     * 收入对象id
+     */
+    @TableField("objectId")
+    private Integer objectId;
+    /**
+     * 收入类型(1=活动,2=业务)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 收入类型id
+     */
+    @TableField("incomeId")
+    private Integer incomeId;
+    /**
+     * 订单类型
+     */
+    @TableField("orderType")
+    private Integer orderType;
+    /**
+     * 收入金额
+     */
+    @TableField("money")
+    private Double money;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUserType() {
+        return userType;
+    }
+
+    public void setUserType(Integer userType) {
+        this.userType = userType;
+    }
+
+    public Integer getObjectId() {
+        return objectId;
+    }
+
+    public void setObjectId(Integer objectId) {
+        this.objectId = objectId;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getIncomeId() {
+        return incomeId;
+    }
+
+    public void setIncomeId(Integer incomeId) {
+        this.incomeId = incomeId;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(Integer orderType) {
+        this.orderType = orderType;
+    }
+
+    @Override
+    public String toString() {
+        return "Income{" +
+                "id=" + id +
+                ", userType=" + userType +
+                ", objectId=" + objectId +
+                ", type=" + type +
+                ", incomeId=" + incomeId +
+                ", orderType=" + orderType +
+                ", money=" + money +
+                ", insertTime=" + insertTime +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/IntegralGoods.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/IntegralGoods.java
new file mode 100644
index 0000000..209e139
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/IntegralGoods.java
@@ -0,0 +1,148 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 积分兑换商品
+ */
+@TableName("t_integral_goods")
+public class IntegralGoods {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 商品名称
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 商品图片
+     */
+    @TableField("imgUrl")
+    private String imgUrl;
+    /**
+     * 兑换积分
+     */
+    @TableField("integral")
+    private Integer integral;
+    /**
+     * 商品说明
+     */
+    @TableField("instructions")
+    private String instructions;
+    /**
+     * 状态(1=正常,2=下架,3=删除)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 添加用户id
+     */
+    @TableField("insertUserId")
+    private Integer insertUserId;
+    /**
+     * 添加用户角色
+     */
+    @TableField("insertUserRole")
+    private Integer insertUserRole;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getImgUrl() {
+        return imgUrl;
+    }
+
+    public void setImgUrl(String imgUrl) {
+        this.imgUrl = imgUrl;
+    }
+
+    public Integer getIntegral() {
+        return integral;
+    }
+
+    public void setIntegral(Integer integral) {
+        this.integral = integral;
+    }
+
+    public String getInstructions() {
+        return instructions;
+    }
+
+    public void setInstructions(String instructions) {
+        this.instructions = instructions;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Integer getInsertUserId() {
+        return insertUserId;
+    }
+
+    public void setInsertUserId(Integer insertUserId) {
+        this.insertUserId = insertUserId;
+    }
+
+    public Integer getInsertUserRole() {
+        return insertUserRole;
+    }
+
+    public void setInsertUserRole(Integer insertUserRole) {
+        this.insertUserRole = insertUserRole;
+    }
+
+    @Override
+    public String toString() {
+        return "IntegralGoods{" +
+                "id=" + id +
+                ", insertTime=" + insertTime +
+                ", name='" + name + '\'' +
+                ", imgUrl='" + imgUrl + '\'' +
+                ", integral=" + integral +
+                ", instructions='" + instructions + '\'' +
+                ", state=" + state +
+                ", insertUserId=" + insertUserId +
+                ", insertUserRole=" + insertUserRole +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/IntegralOrder.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/IntegralOrder.java
new file mode 100644
index 0000000..a007827
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/IntegralOrder.java
@@ -0,0 +1,175 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 积分兑换订单
+ */
+@TableName("t_integral_order")
+public class IntegralOrder {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 兑换时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 兑换用户id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 兑换商品id
+     */
+    @TableField("goodsId")
+    private Integer goodsId;
+    /**
+     * 兑换积分
+     */
+    @TableField("integral")
+    private Integer integral;
+    /**
+     * 兑换数量
+     */
+    @TableField("num")
+    private Integer num;
+    /**
+     * 收货人
+     */
+    @TableField("consigneeName")
+    private String consigneeName;
+    /**
+     * 收件人电话
+     */
+    @TableField("consigneePhone")
+    private String consigneePhone;
+    /**
+     * 收货地址
+     */
+    @TableField("consigneeAddress")
+    private String consigneeAddress;
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+    /**
+     * 状态(1=未处理,2=已处理,3=已删除)
+     */
+    @TableField("state")
+    private Integer state;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(Integer goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    public Integer getIntegral() {
+        return integral;
+    }
+
+    public void setIntegral(Integer integral) {
+        this.integral = integral;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    public String getConsigneeName() {
+        return consigneeName;
+    }
+
+    public void setConsigneeName(String consigneeName) {
+        this.consigneeName = consigneeName;
+    }
+
+    public String getConsigneePhone() {
+        return consigneePhone;
+    }
+
+    public void setConsigneePhone(String consigneePhone) {
+        this.consigneePhone = consigneePhone;
+    }
+
+    public String getConsigneeAddress() {
+        return consigneeAddress;
+    }
+
+    public void setConsigneeAddress(String consigneeAddress) {
+        this.consigneeAddress = consigneeAddress;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    @Override
+    public String toString() {
+        return "IntegralOrder{" +
+                "id=" + id +
+                ", insertTime=" + insertTime +
+                ", userId=" + userId +
+                ", goodsId=" + goodsId +
+                ", num=" + num +
+                ", consigneeName='" + consigneeName + '\'' +
+                ", consigneePhone='" + consigneePhone + '\'' +
+                ", consigneeAddress='" + consigneeAddress + '\'' +
+                ", remark='" + remark + '\'' +
+                ", state=" + state +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Invoice.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Invoice.java
new file mode 100644
index 0000000..e1a689b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Invoice.java
@@ -0,0 +1,218 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 发票
+ */
+@TableName("t_invoice")
+public class Invoice {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 开票金额
+     */
+    @TableField("money")
+    private Double money;
+    /**
+     * 开票订单数量
+     */
+    @TableField("orderNum")
+    private Integer orderNum;
+    /**
+     * 开票类型(1=个人发票,2=单位发票)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 抬头名称(公司名字/个人姓名)
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 税号
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * 发票内容
+     */
+    @TableField("content")
+    private String content;
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+    /**
+     * 地址+电话
+     */
+    @TableField("address")
+    private String address;
+    /**
+     * 开户行+账号
+     */
+    @TableField("bank")
+    private String bank;
+    /**
+     * 邮箱地址
+     */
+    @TableField("email")
+    private String email;
+    /**
+     * 开票用户id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 状态(1=待开,2=成功,3=失败)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 申请时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getBank() {
+        return bank;
+    }
+
+    public void setBank(String bank) {
+        this.bank = bank;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    @Override
+    public String toString() {
+        return "Invoice{" +
+                "id=" + id +
+                ", money=" + money +
+                ", orderNum=" + orderNum +
+                ", type=" + type +
+                ", name='" + name + '\'' +
+                ", code='" + code + '\'' +
+                ", content='" + content + '\'' +
+                ", remark='" + remark + '\'' +
+                ", address='" + address + '\'' +
+                ", bank='" + bank + '\'' +
+                ", email='" + email + '\'' +
+                ", userId=" + userId +
+                ", state=" + state +
+                ", insertTime=" + insertTime +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/LoginLog.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/LoginLog.java
new file mode 100644
index 0000000..10135f8
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/LoginLog.java
@@ -0,0 +1,128 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 登录记录
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+@TableName("sys_login_log")
+public class LoginLog extends Model<LoginLog> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+	@TableId(value="id", type= IdType.AUTO)
+	private Integer id;
+    /**
+     * 日志名称
+     */
+	private String logname;
+    /**
+     * 管理员id
+     */
+	private Integer userid;
+    /**
+     * 创建时间
+     */
+	private Date createtime;
+    /**
+     * 是否执行成功
+     */
+	private String succeed;
+    /**
+     * 具体消息
+     */
+	private String message;
+    /**
+     * 登录ip
+     */
+	private String ip;
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getLogname() {
+		return logname;
+	}
+
+	public void setLogname(String logname) {
+		this.logname = logname;
+	}
+
+	public Integer getUserid() {
+		return userid;
+	}
+
+	public void setUserid(Integer userid) {
+		this.userid = userid;
+	}
+
+	public Date getCreatetime() {
+		return createtime;
+	}
+
+	public void setCreatetime(Date createtime) {
+		this.createtime = createtime;
+	}
+
+	public String getSucceed() {
+		return succeed;
+	}
+
+	public void setSucceed(String succeed) {
+		this.succeed = succeed;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	public String getIp() {
+		return ip;
+	}
+
+	public void setIp(String ip) {
+		this.ip = ip;
+	}
+
+	@Override
+	protected Serializable pkVal() {
+		return this.id;
+	}
+
+	@Override
+	public String toString() {
+		return "LoginLog{" +
+			"id=" + id +
+			", logname=" + logname +
+			", userid=" + userid +
+			", createtime=" + createtime +
+			", succeed=" + succeed +
+			", message=" + message +
+			", ip=" + ip +
+			"}";
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Menu.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Menu.java
new file mode 100644
index 0000000..6df6215
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Menu.java
@@ -0,0 +1,208 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import org.hibernate.validator.constraints.NotBlank;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 菜单表
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+@TableName("sys_menu")
+public class Menu extends Model<Menu> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 菜单编号
+     */
+    private String code;
+    /**
+     * 菜单父编号
+     */
+    private String pcode;
+    /**
+     * 当前菜单的所有父菜单编号
+     */
+    private String pcodes;
+    /**
+     * 菜单名称
+     */
+    @NotBlank
+    private String name;
+    /**
+     * 菜单图标
+     */
+    private String icon;
+    /**
+     * url地址
+     */
+    @NotBlank
+    private String url;
+    /**
+     * 菜单排序号
+     */
+    private Integer num;
+    /**
+     * 菜单层级
+     */
+    private Integer levels;
+    /**
+     * 是否是菜单(1:是  0:不是)
+     */
+    private Integer ismenu;
+    /**
+     * 备注
+     */
+    private String tips;
+    /**
+     * 菜单状态 :  1:启用   0:不启用
+     */
+    private Integer status;
+    /**
+     * 是否打开:    1:打开   0:不打开
+     */
+    private Integer isopen;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getPcode() {
+        return pcode;
+    }
+
+    public void setPcode(String pcode) {
+        this.pcode = pcode;
+    }
+
+    public String getPcodes() {
+        return pcodes;
+    }
+
+    public void setPcodes(String pcodes) {
+        this.pcodes = pcodes;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIcon() {
+        return icon;
+    }
+
+    public void setIcon(String icon) {
+        this.icon = icon;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    public Integer getLevels() {
+        return levels;
+    }
+
+    public void setLevels(Integer levels) {
+        this.levels = levels;
+    }
+
+    public Integer getIsmenu() {
+        return ismenu;
+    }
+
+    public void setIsmenu(Integer ismenu) {
+        this.ismenu = ismenu;
+    }
+
+    public String getTips() {
+        return tips;
+    }
+
+    public void setTips(String tips) {
+        this.tips = tips;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Integer getIsopen() {
+        return isopen;
+    }
+
+    public void setIsopen(Integer isopen) {
+        this.isopen = isopen;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "Menu{" +
+                "id=" + id +
+                ", code=" + code +
+                ", pcode=" + pcode +
+                ", pcodes=" + pcodes +
+                ", name=" + name +
+                ", icon=" + icon +
+                ", url=" + url +
+                ", num=" + num +
+                ", levels=" + levels +
+                ", ismenu=" + ismenu +
+                ", tips=" + tips +
+                ", status=" + status +
+                ", isopen=" + isopen +
+                "}";
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Notice.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Notice.java
new file mode 100644
index 0000000..6967223
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Notice.java
@@ -0,0 +1,115 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 通知表
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+@TableName("sys_notice")
+public class Notice extends Model<Notice> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+	@TableId(value="id", type= IdType.AUTO)
+	private Integer id;
+    /**
+     * 标题
+     */
+	private String title;
+    /**
+     * 类型
+     */
+	private Integer type;
+    /**
+     * 内容
+     */
+	private String content;
+    /**
+     * 创建时间
+     */
+	private Date createtime;
+    /**
+     * 创建人
+     */
+	private Integer creater;
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public Date getCreatetime() {
+		return createtime;
+	}
+
+	public void setCreatetime(Date createtime) {
+		this.createtime = createtime;
+	}
+
+	public Integer getCreater() {
+		return creater;
+	}
+
+	public void setCreater(Integer creater) {
+		this.creater = creater;
+	}
+
+	@Override
+	protected Serializable pkVal() {
+		return this.id;
+	}
+
+	@Override
+	public String toString() {
+		return "Notice{" +
+			"id=" + id +
+			", title=" + title +
+			", type=" + type +
+			", content=" + content +
+			", createtime=" + createtime +
+			", creater=" + creater +
+			"}";
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCity.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCity.java
new file mode 100644
index 0000000..0cf1845
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCity.java
@@ -0,0 +1,115 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableName;
+
+/**
+ * 开通城市
+ */
+@TableName("t_open_city")
+public class OpenCity extends BaseBean {
+    /**
+     * 城市编号(行政编号)
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * 经度
+     */
+    @TableField("lon")
+    private Double lon;
+    /**
+     * 纬度
+     */
+    @TableField("lat")
+    private Double lat;
+    /**
+     * 是否需要网约车资格(1:是,2:否)
+     */
+    @TableField("isQualifications")
+    private Integer isQualifications;
+    /**
+     * 省名称
+     */
+    @TableField("areaName")
+    private String areaName;
+    /**
+     * 市名称
+     */
+    @TableField("cityName")
+    private String cityName;
+    /**
+     * 区县名称
+     */
+    @TableField("provinceName")
+    private String provinceName;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public Integer getIsQualifications() {
+        return isQualifications;
+    }
+
+    public void setIsQualifications(Integer isQualifications) {
+        this.isQualifications = isQualifications;
+    }
+
+    public String getAreaName() {
+        return areaName;
+    }
+
+    public void setAreaName(String areaName) {
+        this.areaName = areaName;
+    }
+
+    public String getCityName() {
+        return cityName;
+    }
+
+    public void setCityName(String cityName) {
+        this.cityName = cityName;
+    }
+
+    public String getProvinceName() {
+        return provinceName;
+    }
+
+    public void setProvinceName(String provinceName) {
+        this.provinceName = provinceName;
+    }
+
+    public Double getLon() {
+        return lon;
+    }
+
+    public void setLon(Double lon) {
+        this.lon = lon;
+    }
+
+    public Double getLat() {
+        return lat;
+    }
+
+    public void setLat(Double lat) {
+        this.lat = lat;
+    }
+
+    @Override
+    public String toString() {
+        return "OpenCity{" +
+                "code='" + code + '\'' +
+                ", lon=" + lon +
+                ", lat=" + lat +
+                ", isQualifications=" + isQualifications +
+                ", areaName='" + areaName + '\'' +
+                ", cityName='" + cityName + '\'' +
+                ", provinceName='" + provinceName + '\'' +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCityBusiness.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCityBusiness.java
new file mode 100644
index 0000000..c6a92d0
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCityBusiness.java
@@ -0,0 +1,45 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableName;
+
+/**
+ * 开通城市业务类型
+ */
+@TableName("t_open_city_business")
+public class OpenCityBusiness extends BaseBean {
+    /**
+     * 业务类型(1=专车,2=出租车,3=跨城出行,4=同城小件物流,5=跨城小件物流,6=包车)
+     */
+    @TableField("businessType")
+    private Integer businessType;
+    /**
+     * 排序
+     */
+    @TableField("sort")
+    private Integer sort;
+
+    public Integer getBusinessType() {
+        return businessType;
+    }
+
+    public void setBusinessType(Integer businessType) {
+        this.businessType = businessType;
+    }
+
+    public Integer getSort() {
+        return sort;
+    }
+
+    public void setSort(Integer sort) {
+        this.sort = sort;
+    }
+
+    @Override
+    public String toString() {
+        return "OpenCityBusiness{" +
+                "businessType=" + businessType +
+                ", sort=" + sort +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OperationLog.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OperationLog.java
new file mode 100644
index 0000000..7851475
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OperationLog.java
@@ -0,0 +1,154 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 操作日志
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+@TableName("sys_operation_log")
+public class OperationLog extends Model<OperationLog> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+	@TableId(value="id", type= IdType.AUTO)
+	private Integer id;
+    /**
+     * 日志类型
+     */
+	private String logtype;
+    /**
+     * 日志名称
+     */
+	private String logname;
+    /**
+     * 用户id
+     */
+	private Integer userid;
+    /**
+     * 类名称
+     */
+	private String classname;
+    /**
+     * 方法名称
+     */
+	private String method;
+    /**
+     * 创建时间
+     */
+	private Date createtime;
+    /**
+     * 是否成功
+     */
+	private String succeed;
+    /**
+     * 备注
+     */
+	private String message;
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getLogtype() {
+		return logtype;
+	}
+
+	public void setLogtype(String logtype) {
+		this.logtype = logtype;
+	}
+
+	public String getLogname() {
+		return logname;
+	}
+
+	public void setLogname(String logname) {
+		this.logname = logname;
+	}
+
+	public Integer getUserid() {
+		return userid;
+	}
+
+	public void setUserid(Integer userid) {
+		this.userid = userid;
+	}
+
+	public String getClassname() {
+		return classname;
+	}
+
+	public void setClassname(String classname) {
+		this.classname = classname;
+	}
+
+	public String getMethod() {
+		return method;
+	}
+
+	public void setMethod(String method) {
+		this.method = method;
+	}
+
+	public Date getCreatetime() {
+		return createtime;
+	}
+
+	public void setCreatetime(Date createtime) {
+		this.createtime = createtime;
+	}
+
+	public String getSucceed() {
+		return succeed;
+	}
+
+	public void setSucceed(String succeed) {
+		this.succeed = succeed;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	@Override
+	protected Serializable pkVal() {
+		return this.id;
+	}
+
+	@Override
+	public String toString() {
+		return "OperationLog{" +
+			"id=" + id +
+			", logtype=" + logtype +
+			", logname=" + logname +
+			", userid=" + userid +
+			", classname=" + classname +
+			", method=" + method +
+			", createtime=" + createtime +
+			", succeed=" + succeed +
+			", message=" + message +
+			"}";
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderCancel.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderCancel.java
new file mode 100644
index 0000000..84a7594
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderCancel.java
@@ -0,0 +1,178 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 取消订单
+ */
+@TableName("t_order_cancel")
+public class OrderCancel {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 订单id
+     */
+    @TableField("orderId")
+    private Integer orderId;
+    /**
+     * 订单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)
+     */
+    @TableField("orderType")
+    private Integer orderType;
+    /**
+     * 取消原因
+     */
+    @TableField("reason")
+    private String reason;
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+    /**
+     * 支付方式(1=微信,2=支付宝,3=余额)
+     */
+    @TableField("payType")
+    private Integer payType;
+    /**
+     * 支付金额
+     */
+    @TableField("money")
+    private Double money;
+    /**
+     * 状态(1=临时,2=正式)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 添加时间
+     * @return
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 取消人员类型(1=用户,2=后台)
+     * @return
+     */
+    @TableField("userType")
+    private Integer userType;
+    /**
+     * 取消人id
+     * @return
+     */
+    @TableField("userId")
+    private Integer userId;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(Integer orderType) {
+        this.orderType = orderType;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Integer getPayType() {
+        return payType;
+    }
+
+    public void setPayType(Integer payType) {
+        this.payType = payType;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getUserType() {
+        return userType;
+    }
+
+    public void setUserType(Integer userType) {
+        this.userType = userType;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    @Override
+    public String toString() {
+        return "OrderCancel{" +
+                "id=" + id +
+                ", orderId=" + orderId +
+                ", orderType=" + orderType +
+                ", reason='" + reason + '\'' +
+                ", remark='" + remark + '\'' +
+                ", payType=" + payType +
+                ", money=" + money +
+                ", state=" + state +
+                ", insertTime=" + insertTime +
+                ", userType=" + userType +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderEvaluate.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderEvaluate.java
new file mode 100644
index 0000000..5b25f94
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderEvaluate.java
@@ -0,0 +1,136 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 订单评价
+ */
+@TableName("t_order_evaluate")
+public class OrderEvaluate {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 订单id
+     */
+    @TableField("orderId")
+    private Integer orderId;
+    /**
+     * 司机id
+     */
+    @TableField("driverId")
+    private Integer driverId;
+    /**
+     * 订单类型(1=专车,2=出租车,3=跨城出行,4=同城小件物流,5=跨城小件物流,6=包车)
+     */
+    @TableField("orderType")
+    private Integer orderType;
+    /**
+     * 评分
+     */
+    @TableField("fraction")
+    private Integer fraction;
+    /**
+     * 评价内容
+     */
+    @TableField("content")
+    private String content;
+    /**
+     * 评价时间
+     * @return
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 评价用户id
+     * @return
+     */
+    @TableField("userId")
+    private Integer userId;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(Integer orderType) {
+        this.orderType = orderType;
+    }
+
+    public Integer getFraction() {
+        return fraction;
+    }
+
+    public void setFraction(Integer fraction) {
+        this.fraction = fraction;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getDriverId() {
+        return driverId;
+    }
+
+    public void setDriverId(Integer driverId) {
+        this.driverId = driverId;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    @Override
+    public String toString() {
+        return "OrderEvaluate{" +
+                "id=" + id +
+                ", orderId=" + orderId +
+                ", driverId=" + driverId +
+                ", orderType=" + orderType +
+                ", fraction=" + fraction +
+                ", content='" + content + '\'' +
+                ", insertTime=" + insertTime +
+                ", userId=" + userId +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderPosition.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderPosition.java
new file mode 100644
index 0000000..c29382f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderPosition.java
@@ -0,0 +1,148 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 订单轨迹
+ */
+@TableName("t_order_position")
+public class OrderPosition {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 订单类型
+     */
+    @TableField("orderType")
+    private Integer orderType;
+    /**
+     * 订单id
+     */
+    @TableField("orderId")
+    private Integer orderId;
+    /**
+     * 司机id
+     */
+    @TableField("driverId")
+    private Integer driverId;
+    /**
+     * 经度
+     */
+    @TableField("lon")
+    private String lon;
+    /**
+     * 纬度
+     */
+    @TableField("lat")
+    private String lat;
+    /**
+     * 方向角
+     */
+    @TableField("directionAngle")
+    private String directionAngle;
+    /**
+     * 海拔
+     */
+    @TableField("altitude")
+    private String altitude;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(Integer orderType) {
+        this.orderType = orderType;
+    }
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getDriverId() {
+        return driverId;
+    }
+
+    public void setDriverId(Integer driverId) {
+        this.driverId = driverId;
+    }
+
+    public String getLon() {
+        return lon;
+    }
+
+    public void setLon(String lon) {
+        this.lon = lon;
+    }
+
+    public String getLat() {
+        return lat;
+    }
+
+    public void setLat(String lat) {
+        this.lat = lat;
+    }
+
+    public String getDirectionAngle() {
+        return directionAngle;
+    }
+
+    public void setDirectionAngle(String directionAngle) {
+        this.directionAngle = directionAngle;
+    }
+
+    public String getAltitude() {
+        return altitude;
+    }
+
+    public void setAltitude(String altitude) {
+        this.altitude = altitude;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    @Override
+    public String toString() {
+        return "OrderPosition{" +
+                "id=" + id +
+                ", orderType=" + orderType +
+                ", orderId=" + orderId +
+                ", driverId=" + driverId +
+                ", lon='" + lon + '\'' +
+                ", lat='" + lat + '\'' +
+                ", directionAngle='" + directionAngle + '\'' +
+                ", altitude='" + altitude + '\'' +
+                ", insertTime=" + insertTime +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Phone.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Phone.java
new file mode 100644
index 0000000..7069fa4
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Phone.java
@@ -0,0 +1,90 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+/**
+ * 系统电话
+ */
+@TableName("t_phone")
+public class Phone {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 数据类型(1:报警电话,2:投诉电话)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 是否是平台数据(1=是,2=否)
+     */
+    @TableField("platform")
+    private Integer platform;
+    /**
+     * 电话
+     */
+    @TableField("phone")
+    private String phone;
+    /**
+     * 企业id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public Integer getPlatform() {
+        return platform;
+    }
+
+    public void setPlatform(Integer platform) {
+        this.platform = platform;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    @Override
+    public String toString() {
+        return "Phone{" +
+                "id=" + id +
+                ", type=" + type +
+                ", platform=" + platform +
+                ", phone='" + phone + '\'' +
+                ", companyId=" + companyId +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Problem.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Problem.java
new file mode 100644
index 0000000..d5c02c6
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Problem.java
@@ -0,0 +1,134 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 在线客服
+ */
+@TableName("t_problem")
+public class Problem {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 用户id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 提问内容
+     */
+    @TableField("content")
+    private String content;
+    /**
+     * 回答内容
+     */
+    @TableField("answer")
+    private String answer;
+    /**
+     * 处理人
+     */
+    @TableField("handleUserId")
+    private Integer handleUserId;
+    /**
+     * 处理时间
+     */
+    @TableField("handleTime")
+    private Date handleTime;
+    /**
+     * 提问时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 状态(1=待处理,2=已处理)
+     */
+    @TableField("state")
+    private Integer state;
+
+    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 String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+
+    public Integer getHandleUserId() {
+        return handleUserId;
+    }
+
+    public void setHandleUserId(Integer handleUserId) {
+        this.handleUserId = handleUserId;
+    }
+
+    public Date getHandleTime() {
+        return handleTime;
+    }
+
+    public void setHandleTime(Date handleTime) {
+        this.handleTime = handleTime;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    @Override
+    public String toString() {
+        return "Problem{" +
+                "id=" + id +
+                ", userId=" + userId +
+                ", content='" + content + '\'' +
+                ", answer='" + answer + '\'' +
+                ", handleUserId=" + handleUserId +
+                ", handleTime=" + handleTime +
+                ", insertTime=" + insertTime +
+                ", state=" + state +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushOrder.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushOrder.java
new file mode 100644
index 0000000..64df32c
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushOrder.java
@@ -0,0 +1,118 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+/**
+ * 推单设置
+ */
+@TableName("t_sys_push_order")
+public class PushOrder {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 企业id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 推单距离(公里)
+     */
+    @TableField("pushDistance")
+    private Double pushDistance;
+    /**
+     * 推单时间(秒)
+     */
+    @TableField("pushTime")
+    private Integer pushTime;
+    /**
+     * 推单占所有司机百分比
+     */
+    @TableField("driverProportion")
+    private Double driverProportion;
+    /**
+     * 推单次数(1=第一轮,2=第二轮,3=第三轮)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 推单单据类型(1=专车,2=出租车)
+     */
+    @TableField("pushType")
+    private Integer pushType;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public Double getPushDistance() {
+        return pushDistance;
+    }
+
+    public void setPushDistance(Double pushDistance) {
+        this.pushDistance = pushDistance;
+    }
+
+    public Integer getPushTime() {
+        return pushTime;
+    }
+
+    public void setPushTime(Integer pushTime) {
+        this.pushTime = pushTime;
+    }
+
+    public Double getDriverProportion() {
+        return driverProportion;
+    }
+
+    public void setDriverProportion(Double driverProportion) {
+        this.driverProportion = driverProportion;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getPushType() {
+        return pushType;
+    }
+
+    public void setPushType(Integer pushType) {
+        this.pushType = pushType;
+    }
+
+    @Override
+    public String toString() {
+        return "PushOrder{" +
+                "id=" + id +
+                ", companyId=" + companyId +
+                ", pushDistance=" + pushDistance +
+                ", pushTime=" + pushTime +
+                ", driverProportion=" + driverProportion +
+                ", type=" + type +
+                ", pushType=" + pushType +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/RedPacketRecord.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/RedPacketRecord.java
new file mode 100644
index 0000000..b30b494
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/RedPacketRecord.java
@@ -0,0 +1,162 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 系统红包设置
+ */
+@TableName("t_sys_red_packet_record")
+public class RedPacketRecord {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 金额
+     */
+    @TableField("money")
+    private Double money;
+    /**
+     * 添加时间
+     */
+    @TableField("insert_time")
+    private Date insertTime;
+    /**
+     * 发放企业id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 红包名称
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 红包类型(1=固定金额,2=随机金额)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 总金额
+     */
+    @TableField("totalMoney")
+    private Double totalMoney;
+    /**
+     * 剩余金额
+     */
+    @TableField("laveMoney")
+    private Double laveMoney;
+    /**
+     * 开始金额
+     */
+    @TableField("startMoney")
+    private Double startMoney;
+    /**
+     * 结束金额
+     */
+    @TableField("endMoney")
+    private Double endMoney;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    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 Double getTotalMoney() {
+        return totalMoney;
+    }
+
+    public void setTotalMoney(Double totalMoney) {
+        this.totalMoney = totalMoney;
+    }
+
+    public Double getLaveMoney() {
+        return laveMoney;
+    }
+
+    public void setLaveMoney(Double laveMoney) {
+        this.laveMoney = laveMoney;
+    }
+
+    public Double getStartMoney() {
+        return startMoney;
+    }
+
+    public void setStartMoney(Double startMoney) {
+        this.startMoney = startMoney;
+    }
+
+    public Double getEndMoney() {
+        return endMoney;
+    }
+
+    public void setEndMoney(Double endMoney) {
+        this.endMoney = endMoney;
+    }
+
+    @Override
+    public String toString() {
+        return "RedPacketRecord{" +
+                "id=" + id +
+                ", money=" + money +
+                ", insertTime=" + insertTime +
+                ", companyId=" + companyId +
+                ", name='" + name + '\'' +
+                ", type=" + type +
+                ", totalMoney=" + totalMoney +
+                ", laveMoney=" + laveMoney +
+                ", startMoney=" + startMoney +
+                ", endMoney=" + endMoney +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Region.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Region.java
new file mode 100644
index 0000000..a37c657
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Region.java
@@ -0,0 +1,104 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+/**
+ * 省市区
+ */
+@TableName("t_region")
+public class Region {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 城市名称
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 城市行政code
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * 区号code
+     */
+    @TableField("citycode")
+    private String citycode;
+    /**
+     * 父级id
+     */
+    @TableField("parent_id")
+    private Integer parentId;
+    /**
+     * 英文
+     */
+    @TableField("english")
+    private String english;
+
+    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 String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getCitycode() {
+        return citycode;
+    }
+
+    public void setCitycode(String citycode) {
+        this.citycode = citycode;
+    }
+
+    public Integer getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Integer parentId) {
+        this.parentId = parentId;
+    }
+
+    public String getEnglish() {
+        return english;
+    }
+
+    public void setEnglish(String english) {
+        this.english = english;
+    }
+
+    @Override
+    public String toString() {
+        return "Region{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", code='" + code + '\'' +
+                ", citycode='" + citycode + '\'' +
+                ", parentId=" + parentId +
+                ", english='" + english + '\'' +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Relation.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Relation.java
new file mode 100644
index 0000000..48c2df6
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Relation.java
@@ -0,0 +1,75 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 角色和菜单关联表
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+@TableName("sys_relation")
+public class Relation extends Model<Relation> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 菜单id
+     */
+    private Long menuid;
+    /**
+     * 角色id
+     */
+    private Integer roleid;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Long getMenuid() {
+        return menuid;
+    }
+
+    public void setMenuid(Long menuid) {
+        this.menuid = menuid;
+    }
+
+    public Integer getRoleid() {
+        return roleid;
+    }
+
+    public void setRoleid(Integer roleid) {
+        this.roleid = roleid;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "Relation{" +
+                "id=" + id +
+                ", menuid=" + menuid +
+                ", roleid=" + roleid +
+                "}";
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Role.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Role.java
new file mode 100644
index 0000000..70ae563
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Role.java
@@ -0,0 +1,127 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 角色表
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+@TableName("sys_role")
+public class Role extends Model<Role> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+	@TableId(value="id", type= IdType.AUTO)
+	private Integer id;
+    /**
+     * 序号
+     */
+	private Integer num;
+    /**
+     * 父角色id
+     */
+	private Integer pid;
+    /**
+     * 角色名称
+     */
+	private String name;
+    /**
+     * 部门名称
+     */
+	private Integer deptid;
+    /**
+     * 提示
+     */
+	private String tips;
+    /**
+     * 保留字段(暂时没用)
+     */
+	private Integer version;
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Integer getNum() {
+		return num;
+	}
+
+	public void setNum(Integer num) {
+		this.num = num;
+	}
+
+	public Integer getPid() {
+		return pid;
+	}
+
+	public void setPid(Integer pid) {
+		this.pid = pid;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Integer getDeptid() {
+		return deptid;
+	}
+
+	public void setDeptid(Integer deptid) {
+		this.deptid = deptid;
+	}
+
+	public String getTips() {
+		return tips;
+	}
+
+	public void setTips(String tips) {
+		this.tips = tips;
+	}
+
+	public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer version) {
+		this.version = version;
+	}
+
+	@Override
+	protected Serializable pkVal() {
+		return this.id;
+	}
+
+	@Override
+	public String toString() {
+		return "Role{" +
+			"id=" + id +
+			", num=" + num +
+			", pid=" + pid +
+			", name=" + name +
+			", deptid=" + deptid +
+			", tips=" + tips +
+			", version=" + version +
+			"}";
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SensitiveWords.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SensitiveWords.java
new file mode 100644
index 0000000..0091dc1
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SensitiveWords.java
@@ -0,0 +1,64 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 敏感词
+ */
+@TableName("t_sys_sensitive_words")
+public class SensitiveWords {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 添加时间
+     */
+    @TableField("createTime")
+    private Date createTime;
+    /**
+     * 内容
+     */
+    @TableField("content")
+    private String content;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        return "SensitiveWords{" +
+                "id=" + id +
+                ", createTime=" + createTime +
+                ", content='" + content + '\'' +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/ServerCarModel.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/ServerCarModel.java
new file mode 100644
index 0000000..e12def7
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/ServerCarModel.java
@@ -0,0 +1,120 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 服务车型设置
+ */
+@TableName("t_server_carmodel")
+public class ServerCarModel {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 业务类型(1=专车,2=城际,3=包车)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 车型名称
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 车型照片
+     */
+    @TableField("img")
+    private String img;
+    /**
+     * 包车价格(100-300)
+     */
+    @TableField("price")
+    private String price;
+    /**
+     * 状态(1=正常,2=冻结,3=删除)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public String getPrice() {
+        return price;
+    }
+
+    public void setPrice(String price) {
+        this.price = price;
+    }
+
+    @Override
+    public String toString() {
+        return "ServerCarModel{" +
+                "id=" + id +
+                ", type=" + type +
+                ", name='" + name + '\'' +
+                ", img='" + img + '\'' +
+                ", price='" + price + '\'' +
+                ", state=" + state +
+                ", insertTime=" + insertTime +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Smsrecord.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Smsrecord.java
new file mode 100644
index 0000000..b132a93
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Smsrecord.java
@@ -0,0 +1,106 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 短信记录
+ */
+@TableName("t_smsrecord")
+public class Smsrecord {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 短信类型(1=用户端注册/登录,2=用户端更换手机,3=用户端忘记密码,4=用户修改密码,5=司机注册,6=司机忘记密码,7=司机修改手机号,8=司机修改密码)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 发送电话
+     */
+    @TableField("phone")
+    private String phone;
+    /**
+     * 验证码
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * 短信内容
+     */
+    @TableField("content")
+    private String content;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    @Override
+    public String toString() {
+        return "Smsrecord{" +
+                "id=" + id +
+                ", type=" + type +
+                ", phone='" + phone + '\'' +
+                ", code='" + code + '\'' +
+                ", content='" + content + '\'' +
+                ", insertTime=" + insertTime +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysIntegral.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysIntegral.java
new file mode 100644
index 0000000..0b46a6a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysIntegral.java
@@ -0,0 +1,62 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+/**
+ * 系统积分设置
+ */
+@TableName("t_sys_integral")
+public class SysIntegral {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 企业id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 积分
+     */
+    @TableField("integral")
+    private Integer integral;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public Integer getIntegral() {
+        return integral;
+    }
+
+    public void setIntegral(Integer integral) {
+        this.integral = integral;
+    }
+
+    @Override
+    public String toString() {
+        return "SysIntegral{" +
+                "id=" + id +
+                ", companyId=" + companyId +
+                ", integral=" + integral +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemNotice.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemNotice.java
new file mode 100644
index 0000000..d4d786b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemNotice.java
@@ -0,0 +1,147 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 系统通知
+ */
+@TableName("t_system_notice")
+public class SystemNotice {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 类型(1=公告,2=系统消息)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 系统消息类型(1=打车业务,2=优惠券)
+     */
+    @TableField("noticeType")
+    private Integer noticeType;
+    /**
+     * 用户类型(1=用户,2=司机)
+     */
+    @TableField("userType")
+    private Integer userType;
+    /**
+     * 公告id
+     */
+    @TableField("noticesId")
+    private Integer noticesId;
+    /**
+     * 消息内容
+     */
+    @TableField("content")
+    private String content;
+    /**
+     * 接收对象id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 阅读状态(1=未读,2=已读)
+     */
+    @TableField("read")
+    private Integer read;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getRead() {
+        return read;
+    }
+
+    public void setRead(Integer read) {
+        this.read = read;
+    }
+
+    public Integer getUserType() {
+        return userType;
+    }
+
+    public void setUserType(Integer userType) {
+        this.userType = userType;
+    }
+
+    public Integer getNoticesId() {
+        return noticesId;
+    }
+
+    public void setNoticesId(Integer noticesId) {
+        this.noticesId = noticesId;
+    }
+
+    public Integer getNoticeType() {
+        return noticeType;
+    }
+
+    public void setNoticeType(Integer noticeType) {
+        this.noticeType = noticeType;
+    }
+
+    @Override
+    public String toString() {
+        return "SystemNotice{" +
+                "id=" + id +
+                ", type=" + type +
+                ", userType=" + userType +
+                ", noticesId=" + noticesId +
+                ", content='" + content + '\'' +
+                ", userId=" + userId +
+                ", insertTime=" + insertTime +
+                ", read=" + read +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPrice.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPrice.java
new file mode 100644
index 0000000..5a88fa9
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPrice.java
@@ -0,0 +1,90 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+/**
+ * 服务价格规则
+ */
+@TableName("t_system_price")
+public class SystemPrice {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 业务类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 企业id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 服务车型设置
+     */
+    @TableField("serverCarModelId")
+    private Integer serverCarModelId;
+    /**
+     * 价格规则,每个输入框为一个参数{"num1":1,"num2":2.3}
+     */
+    @TableField("content")
+    private String content;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getServerCarModelId() {
+        return serverCarModelId;
+    }
+
+    public void setServerCarModelId(Integer serverCarModelId) {
+        this.serverCarModelId = serverCarModelId;
+    }
+
+    @Override
+    public String toString() {
+        return "SystemPrice{" +
+                "id=" + id +
+                ", type=" + type +
+                ", companyId=" + companyId +
+                ", serverCarModelId=" + serverCarModelId +
+                ", content='" + content + '\'' +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TNotices.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TNotices.java
new file mode 100644
index 0000000..b9a9277
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TNotices.java
@@ -0,0 +1,235 @@
+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 lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 发布公告和滚动消息
+ * </p>
+ *
+ * @author 吕雪
+ * @since 2020-06-10
+ */
+@TableName("t_notices")
+@Data
+public class TNotices extends Model<TNotices> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 标题
+     */
+    private String title;
+    /**
+     * 内容
+     */
+    private String content;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 是否显示/发布(1=是,2=否)
+     */
+    private Integer isShow;
+    /**
+     * 是否首页弹框(1=否,2=是)
+     */
+    private Integer isAlert;
+    /**
+     * 是否播报(1=是,2=否)
+     */
+    private Integer isBroadcast;
+    /**
+     * 公告类型(1=滚动消息,2=公告)
+     */
+    private Integer type;
+    /**
+     * 图片路径
+     */
+    private String imgUrl;
+    /**
+     * 1:创建,2:修改,3:删除
+     */
+    private String flag;
+    private Date insertTime;
+    private Integer insertUser;
+    private Date updateTime;
+    private Integer updateUser;
+    /**
+     * 是否删除 1=否 2=是
+     */
+    private Integer isDelete;
+    /**
+     * 是否发布用户 1=否  2=是
+     */
+    private Integer isUser;
+    /**
+     * 是否发布司机  1=否  2=是
+     */
+    private Integer isDriver;
+
+    public Integer getIsUser() {
+        return isUser;
+    }
+
+    public void setIsUser(Integer isUser) {
+        this.isUser = isUser;
+    }
+
+    public Integer getIsDriver() {
+        return isDriver;
+    }
+
+    public void setIsDriver(Integer isDriver) {
+        this.isDriver = isDriver;
+    }
+
+    public Integer getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(Integer isDelete) {
+        this.isDelete = isDelete;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getSort() {
+        return sort;
+    }
+
+    public void setSort(Integer sort) {
+        this.sort = sort;
+    }
+
+    public Integer getIsShow() {
+        return isShow;
+    }
+
+    public void setIsShow(Integer isShow) {
+        this.isShow = isShow;
+    }
+
+    public Integer getIsBroadcast() {
+        return isBroadcast;
+    }
+
+    public void setIsBroadcast(Integer isBroadcast) {
+        this.isBroadcast = isBroadcast;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getImgUrl() {
+        return imgUrl;
+    }
+
+    public void setImgUrl(String imgUrl) {
+        this.imgUrl = imgUrl;
+    }
+
+    public String getFlag() {
+        return flag;
+    }
+
+    public void setFlag(String flag) {
+        this.flag = flag;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getInsertUser() {
+        return insertUser;
+    }
+
+    public void setInsertUser(Integer insertUser) {
+        this.insertUser = insertUser;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Integer getUpdateUser() {
+        return updateUser;
+    }
+
+    public void setUpdateUser(Integer updateUser) {
+        this.updateUser = updateUser;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "TNotices{" +
+                "id=" + id +
+                ", title=" + title +
+                ", content=" + content +
+                ", sort=" + sort +
+                ", isShow=" + isShow +
+                ", isBroadcast=" + isBroadcast +
+                ", type=" + type +
+                ", imgUrl=" + imgUrl +
+                ", flag=" + flag +
+                ", insertTime=" + insertTime +
+                ", insertUser=" + insertUser +
+                ", updateTime=" + updateTime +
+                ", updateUser=" + updateUser +
+                "}";
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/User.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/User.java
new file mode 100644
index 0000000..30a9617
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/User.java
@@ -0,0 +1,232 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 管理员表
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+@TableName("sys_user")
+public class User extends Model<User> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+	@TableId(value="id", type= IdType.AUTO)
+	private Integer id;
+    /**
+     * 头像
+     */
+	private String avatar;
+    /**
+     * 账号
+     */
+	private String account;
+    /**
+     * 密码
+     */
+	private String password;
+    /**
+     * md5密码盐
+     */
+	private String salt;
+    /**
+     * 名字
+     */
+	private String name;
+    /**
+     * 生日
+     */
+	private Date birthday;
+    /**
+     * 性别(1:男 2:女)
+     */
+	private Integer sex;
+    /**
+     * 电子邮件
+     */
+	private String email;
+    /**
+     * 电话
+     */
+	private String phone;
+    /**
+     * 角色id
+     */
+	private String roleid;
+    /**
+     * 部门id
+     */
+	private Integer deptid;
+    /**
+     * 状态(1:启用  2:冻结  3:删除)
+     */
+	private Integer status;
+    /**
+     * 创建时间
+     */
+	private Date createtime;
+    /**
+     * 保留字段
+     */
+	private Integer version;
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getAvatar() {
+		return avatar;
+	}
+
+	public void setAvatar(String avatar) {
+		this.avatar = avatar;
+	}
+
+	public String getAccount() {
+		return account;
+	}
+
+	public void setAccount(String account) {
+		this.account = account;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public String getSalt() {
+		return salt;
+	}
+
+	public void setSalt(String salt) {
+		this.salt = salt;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Date getBirthday() {
+		return birthday;
+	}
+
+	public void setBirthday(Date birthday) {
+		this.birthday = birthday;
+	}
+
+	public Integer getSex() {
+		return sex;
+	}
+
+	public void setSex(Integer sex) {
+		this.sex = sex;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getPhone() {
+		return phone;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
+
+	public String getRoleid() {
+		return roleid;
+	}
+
+	public void setRoleid(String roleid) {
+		this.roleid = roleid;
+	}
+
+	public Integer getDeptid() {
+		return deptid;
+	}
+
+	public void setDeptid(Integer deptid) {
+		this.deptid = deptid;
+	}
+
+	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;
+	}
+
+	public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer version) {
+		this.version = version;
+	}
+
+	@Override
+	protected Serializable pkVal() {
+		return this.id;
+	}
+
+	@Override
+	public String toString() {
+		return "User{" +
+			"id=" + id +
+			", avatar=" + avatar +
+			", account=" + account +
+			", password=" + password +
+			", salt=" + salt +
+			", name=" + name +
+			", birthday=" + birthday +
+			", sex=" + sex +
+			", email=" + email +
+			", phone=" + phone +
+			", roleid=" + roleid +
+			", deptid=" + deptid +
+			", status=" + status +
+			", createtime=" + createtime +
+			", version=" + version +
+			"}";
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityBalance.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityBalance.java
new file mode 100644
index 0000000..d461b73
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityBalance.java
@@ -0,0 +1,260 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 充值优惠券活动
+ */
+@TableName("t_user_activity_balance")
+public class UserActivityBalance {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 是否启用(1=不启用,2=启用)
+     */
+    @TableField("enable")
+    private Integer enable;
+    /**
+     * 活动主表id
+     */
+    @TableField("userActivityId")
+    private Integer userActivityId;
+    /**
+     * 充值金额
+     */
+    @TableField("money")
+    private Double money;
+    /**
+     * 通用优惠券数量
+     */
+    @TableField("generalNum")
+    private Integer generalNum;
+    /**
+     * 通用优惠券id
+     */
+    @TableField("generalCouponId")
+    private Integer generalCouponId;
+    /**
+     * 专车优惠券数据
+     */
+    @TableField("specialNum")
+    private Integer specialNum;
+    /**
+     * 专车优惠券id
+     */
+    @TableField("specialCouponId")
+    private Integer specialCouponId;
+    /**
+     * 出租车优惠券数量
+     */
+    @TableField("taxiNum")
+    private Integer taxiNum;
+    /**
+     * 出租车优惠券id
+     */
+    @TableField("taxiCouponId")
+    private Integer taxiCouponId;
+    /**
+     * 跨城优惠券数量
+     */
+    @TableField("intercityNum")
+    private Integer intercityNum;
+    /**
+     * 跨城优惠券id
+     */
+    @TableField("intercityCouponId")
+    private Integer intercityCouponId;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 有效期开始时间
+     */
+    @TableField("startTime")
+    private Date startTime;
+    /**
+     * 有效期结束时间
+     */
+    @TableField("endTime")
+    private Date endTime;
+    /**
+     * 总金额上限
+     * @return
+     */
+    @TableField("totalPrice")
+    private Double totalPrice;
+    /**
+     * 剩余总金额上限
+     * @return
+     */
+    @TableField("lavePrice")
+    private Double lavePrice;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Integer enable) {
+        this.enable = enable;
+    }
+
+    public Integer getUserActivityId() {
+        return userActivityId;
+    }
+
+    public void setUserActivityId(Integer userActivityId) {
+        this.userActivityId = userActivityId;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public Integer getGeneralNum() {
+        return generalNum;
+    }
+
+    public void setGeneralNum(Integer generalNum) {
+        this.generalNum = generalNum;
+    }
+
+    public Integer getGeneralCouponId() {
+        return generalCouponId;
+    }
+
+    public void setGeneralCouponId(Integer generalCouponId) {
+        this.generalCouponId = generalCouponId;
+    }
+
+    public Integer getSpecialNum() {
+        return specialNum;
+    }
+
+    public void setSpecialNum(Integer specialNum) {
+        this.specialNum = specialNum;
+    }
+
+    public Integer getSpecialCouponId() {
+        return specialCouponId;
+    }
+
+    public void setSpecialCouponId(Integer specialCouponId) {
+        this.specialCouponId = specialCouponId;
+    }
+
+    public Integer getTaxiNum() {
+        return taxiNum;
+    }
+
+    public void setTaxiNum(Integer taxiNum) {
+        this.taxiNum = taxiNum;
+    }
+
+    public Integer getTaxiCouponId() {
+        return taxiCouponId;
+    }
+
+    public void setTaxiCouponId(Integer taxiCouponId) {
+        this.taxiCouponId = taxiCouponId;
+    }
+
+    public Integer getIntercityNum() {
+        return intercityNum;
+    }
+
+    public void setIntercityNum(Integer intercityNum) {
+        this.intercityNum = intercityNum;
+    }
+
+    public Integer getIntercityCouponId() {
+        return intercityCouponId;
+    }
+
+    public void setIntercityCouponId(Integer intercityCouponId) {
+        this.intercityCouponId = intercityCouponId;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Double getTotalPrice() {
+        return totalPrice;
+    }
+
+    public void setTotalPrice(Double totalPrice) {
+        this.totalPrice = totalPrice;
+    }
+
+    public Double getLavePrice() {
+        return lavePrice;
+    }
+
+    public void setLavePrice(Double lavePrice) {
+        this.lavePrice = lavePrice;
+    }
+
+    @Override
+    public String toString() {
+        return "UserActivityBalance{" +
+                "id=" + id +
+                ", enable=" + enable +
+                ", userActivityId=" + userActivityId +
+                ", money=" + money +
+                ", generalNum=" + generalNum +
+                ", generalCouponId=" + generalCouponId +
+                ", specialNum=" + specialNum +
+                ", specialCouponId=" + specialCouponId +
+                ", taxiNum=" + taxiNum +
+                ", taxiCouponId=" + taxiCouponId +
+                ", intercityNum=" + intercityNum +
+                ", intercityCouponId=" + intercityCouponId +
+                ", insertTime=" + insertTime +
+                ", startTime=" + startTime +
+                ", endTime=" + endTime +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityDiscount1.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityDiscount1.java
new file mode 100644
index 0000000..bee8d78
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityDiscount1.java
@@ -0,0 +1,134 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 用户折扣活动
+ */
+@TableName("t_user_activity_discount1")
+public class UserActivityDiscount1 {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 活动id
+     */
+    @TableField("userActivityId")
+    private Integer userActivityId;
+    /**
+     * 专车折扣
+     */
+    @TableField("special")
+    private Double special;
+    /**
+     * 出租车折扣
+     */
+    @TableField("taxi")
+    private Double taxi;
+    /**
+     * 小件物流折扣
+     */
+    @TableField("logistics")
+    private Double logistics;
+    /**
+     * 活动有效开始时间
+     */
+    @TableField("startTime")
+    private Date startTime;
+    /**
+     * 活动有效结束时间
+     */
+    @TableField("endTime")
+    private Date endTime;
+    /**
+     * 是否启用(1=不启用,2=启用)
+     */
+    @TableField("enable")
+    private Integer enable;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUserActivityId() {
+        return userActivityId;
+    }
+
+    public void setUserActivityId(Integer userActivityId) {
+        this.userActivityId = userActivityId;
+    }
+
+    public Double getSpecial() {
+        return special;
+    }
+
+    public void setSpecial(Double special) {
+        this.special = special;
+    }
+
+    public Double getTaxi() {
+        return taxi;
+    }
+
+    public void setTaxi(Double taxi) {
+        this.taxi = taxi;
+    }
+
+    public Double getLogistics() {
+        return logistics;
+    }
+
+    public void setLogistics(Double logistics) {
+        this.logistics = logistics;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Integer getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Integer enable) {
+        this.enable = enable;
+    }
+
+    @Override
+    public String toString() {
+        return "UserActivityDiscount1{" +
+                "id=" + id +
+                ", userActivityId=" + userActivityId +
+                ", special=" + special +
+                ", taxi=" + taxi +
+                ", logistics=" + logistics +
+                ", startTime=" + startTime +
+                ", endTime=" + endTime +
+                ", enable=" + enable +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityInvite.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityInvite.java
new file mode 100644
index 0000000..9df1a0f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityInvite.java
@@ -0,0 +1,162 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 用户邀请活动
+ */
+@TableName("t_user_activity_invite")
+public class UserActivityInvite {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 用户活动主表
+     */
+    @TableField("userActivityId")
+    private Integer userActivityId;
+    /**
+     * 优惠券id
+     */
+    @TableField("couponId")
+    private Integer couponId;
+    /**
+     * 优惠券数量
+     */
+    @TableField("totalNum")
+    private Integer totalNum;
+    /**
+     * 有效开始时间
+     */
+    @TableField("startTime")
+    private Date startTime;
+    /**
+     * 有效结束时间
+     */
+    @TableField("endTime")
+    private Date endTime;
+    /**
+     * 是否启用(1=不启用,2=启用)
+     */
+    @TableField("enable")
+    private Integer enable;
+    /**
+     * 有效天数
+     */
+    @TableField("effective")
+    private Integer effective;
+    /**
+     * 总金额上限
+     * @return
+     */
+    @TableField("totalPrice")
+    private Double totalPrice;
+    /**
+     * 剩余总金额上限
+     * @return
+     */
+    @TableField("lavePrice")
+    private Double lavePrice;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUserActivityId() {
+        return userActivityId;
+    }
+
+    public void setUserActivityId(Integer userActivityId) {
+        this.userActivityId = userActivityId;
+    }
+
+    public Integer getCouponId() {
+        return couponId;
+    }
+
+    public void setCouponId(Integer couponId) {
+        this.couponId = couponId;
+    }
+
+    public Integer getTotalNum() {
+        return totalNum;
+    }
+
+    public void setTotalNum(Integer totalNum) {
+        this.totalNum = totalNum;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Integer getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Integer enable) {
+        this.enable = enable;
+    }
+
+    public Integer getEffective() {
+        return effective;
+    }
+
+    public void setEffective(Integer effective) {
+        this.effective = effective;
+    }
+
+    public Double getTotalPrice() {
+        return totalPrice;
+    }
+
+    public void setTotalPrice(Double totalPrice) {
+        this.totalPrice = totalPrice;
+    }
+
+    public Double getLavePrice() {
+        return lavePrice;
+    }
+
+    public void setLavePrice(Double lavePrice) {
+        this.lavePrice = lavePrice;
+    }
+
+    @Override
+    public String toString() {
+        return "UserActivityInvite{" +
+                "id=" + id +
+                ", userActivityId=" + userActivityId +
+                ", couponId=" + couponId +
+                ", totalNum=" + totalNum +
+                ", startTime=" + startTime +
+                ", endTime=" + endTime +
+                ", enable=" + enable +
+                ", effective=" + effective +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityRedenvelope.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityRedenvelope.java
new file mode 100644
index 0000000..7acc740
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityRedenvelope.java
@@ -0,0 +1,162 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 分享红包活动
+ */
+@TableName("t_user_activity_redenvelope")
+public class UserActivityRedenvelope {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 活动id
+     */
+    @TableField("userActivityId")
+    private Integer userActivityId;
+    /**
+     * 红包id
+     */
+    @TableField("redEnvelopeId")
+    private Integer redEnvelopeId;
+    /**
+     * 总金额
+     */
+    @TableField("totalMoney")
+    private Double totalMoney;
+    /**
+     * 剩余金额
+     */
+    @TableField("laveMoney")
+    private Double laveMoney;
+    /**
+     * 活动开始时间
+     */
+    @TableField("startTime")
+    private Date startTime;
+    /**
+     * 活动结束时间
+     */
+    @TableField("endTime")
+    private Date endTime;
+    /**
+     * 是否启用
+     */
+    @TableField("enable")
+    private Integer enable;
+    /**
+     * 总金额上限
+     * @return
+     */
+    @TableField("totalPrice")
+    private Double totalPrice;
+    /**
+     * 剩余总金额上限
+     * @return
+     */
+    @TableField("lavePrice")
+    private Double lavePrice;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUserActivityId() {
+        return userActivityId;
+    }
+
+    public void setUserActivityId(Integer userActivityId) {
+        this.userActivityId = userActivityId;
+    }
+
+    public Integer getRedEnvelopeId() {
+        return redEnvelopeId;
+    }
+
+    public void setRedEnvelopeId(Integer redEnvelopeId) {
+        this.redEnvelopeId = redEnvelopeId;
+    }
+
+    public Double getTotalMoney() {
+        return totalMoney;
+    }
+
+    public void setTotalMoney(Double totalMoney) {
+        this.totalMoney = totalMoney;
+    }
+
+    public Double getLaveMoney() {
+        return laveMoney;
+    }
+
+    public void setLaveMoney(Double laveMoney) {
+        this.laveMoney = laveMoney;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Integer getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Integer enable) {
+        this.enable = enable;
+    }
+
+    public Double getTotalPrice() {
+        return totalPrice;
+    }
+
+    public void setTotalPrice(Double totalPrice) {
+        this.totalPrice = totalPrice;
+    }
+
+    public Double getLavePrice() {
+        return lavePrice;
+    }
+
+    public void setLavePrice(Double lavePrice) {
+        this.lavePrice = lavePrice;
+    }
+
+    @Override
+    public String toString() {
+        return "UserActivityRedenvelope{" +
+                "id=" + id +
+                ", userActivityId=" + userActivityId +
+                ", redEnvelopeId=" + redEnvelopeId +
+                ", totalMoney=" + totalMoney +
+                ", laveMoney=" + laveMoney +
+                ", startTime=" + startTime +
+                ", endTime=" + endTime +
+                ", enable=" + enable +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityRegistered.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityRegistered.java
new file mode 100644
index 0000000..572a0bf
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserActivityRegistered.java
@@ -0,0 +1,162 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 用户注册活动
+ */
+@TableName("t_user_activity_registered")
+public class UserActivityRegistered {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 用户活动id
+     */
+    @TableField("userActivityId")
+    private Integer userActivityId;
+    /**
+     * 优惠券id
+     */
+    @TableField("couponId")
+    private Integer couponId;
+    /**
+     * 优惠券总数量
+     */
+    @TableField("totalNum")
+    private Integer totalNum;
+    /**
+     * 优惠券剩余数量
+     */
+    @TableField("laveNum")
+    private Integer laveNum;
+    /**
+     * 开始时间
+     */
+    @TableField("startTime")
+    private Date startTime;
+    /**
+     * 结束时间
+     */
+    @TableField("endTime")
+    private Date endTime;
+    /**
+     * 是否启用(1=不启用,2=启用)
+     */
+    @TableField("enable")
+    private Integer enable;
+    /**
+     * 总金额上限
+     * @return
+     */
+    @TableField("totalPrice")
+    private Double totalPrice;
+    /**
+     * 剩余总金额上限
+     * @return
+     */
+    @TableField("lavePrice")
+    private Double lavePrice;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUserActivityId() {
+        return userActivityId;
+    }
+
+    public void setUserActivityId(Integer userActivityId) {
+        this.userActivityId = userActivityId;
+    }
+
+    public Integer getCouponId() {
+        return couponId;
+    }
+
+    public void setCouponId(Integer couponId) {
+        this.couponId = couponId;
+    }
+
+    public Integer getTotalNum() {
+        return totalNum;
+    }
+
+    public void setTotalNum(Integer totalNum) {
+        this.totalNum = totalNum;
+    }
+
+    public Integer getLaveNum() {
+        return laveNum;
+    }
+
+    public void setLaveNum(Integer laveNum) {
+        this.laveNum = laveNum;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Integer getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Integer enable) {
+        this.enable = enable;
+    }
+
+    public Double getTotalPrice() {
+        return totalPrice;
+    }
+
+    public void setTotalPrice(Double totalPrice) {
+        this.totalPrice = totalPrice;
+    }
+
+    public Double getLavePrice() {
+        return lavePrice;
+    }
+
+    public void setLavePrice(Double lavePrice) {
+        this.lavePrice = lavePrice;
+    }
+
+    @Override
+    public String toString() {
+        return "UserActivityRegistered{" +
+                "id=" + id +
+                ", userActivityId=" + userActivityId +
+                ", couponId=" + couponId +
+                ", totalNum=" + totalNum +
+                ", laveNum=" + laveNum +
+                ", startTime=" + startTime +
+                ", endTime=" + endTime +
+                ", enable=" + enable +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserCouponRecord.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserCouponRecord.java
new file mode 100644
index 0000000..57d85cf
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserCouponRecord.java
@@ -0,0 +1,234 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 用户优惠券记录
+ */
+@TableName("t_user_coupon_record")
+public class UserCouponRecord {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 金额
+     */
+    @TableField("money")
+    private Double money;
+    /**
+     * 满减的满金额
+     */
+    @TableField("fullMoney")
+    private Double fullMoney;
+    /**
+     * 过期时间
+     */
+    @TableField("expirationTime")
+    private Date expirationTime;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 企业id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 状态(1=未使用,2=已使用,3=已过期)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 使用结束时间
+     */
+    @TableField("endTime")
+    private Date endTime;
+    /**
+     * 优惠券使用类型(0=通用,1=专车,2=出租车,3=城际,4=小件物流)
+     */
+    @TableField("couponUseType")
+    private Integer couponUseType;
+    /**
+     * 优惠券类型(1=抵扣券,2=满减券)
+     */
+    @TableField("couponType")
+    private Integer couponType;
+    /**
+     * 用户id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 优惠券id
+     * @return
+     */
+    @TableField("couponId")
+    private Integer couponId;
+    /**
+     * 活动id
+     * @return
+     */
+    @TableField("couponActivityId")
+    private Integer couponActivityId;
+    /**
+     * 活动类型(1=赠送活动,2=注册,3=邀请,4=充值)
+     * @return
+     */
+    @TableField("activityType")
+    private Integer activityType;
+    /**
+     * 充值记录id
+     * @return
+     */
+    @TableField("paymentRecordId")
+    private Integer paymentRecordId;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public Double getFullMoney() {
+        return fullMoney;
+    }
+
+    public void setFullMoney(Double fullMoney) {
+        this.fullMoney = fullMoney;
+    }
+
+    public Date getExpirationTime() {
+        return expirationTime;
+    }
+
+    public void setExpirationTime(Date expirationTime) {
+        this.expirationTime = expirationTime;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Integer getCouponUseType() {
+        return couponUseType;
+    }
+
+    public void setCouponUseType(Integer couponUseType) {
+        this.couponUseType = couponUseType;
+    }
+
+    public Integer getCouponType() {
+        return couponType;
+    }
+
+    public void setCouponType(Integer couponType) {
+        this.couponType = couponType;
+    }
+
+    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 getCouponActivityId() {
+        return couponActivityId;
+    }
+
+    public void setCouponActivityId(Integer couponActivityId) {
+        this.couponActivityId = couponActivityId;
+    }
+
+    public Integer getActivityType() {
+        return activityType;
+    }
+
+    public void setActivityType(Integer activityType) {
+        this.activityType = activityType;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Integer getPaymentRecordId() {
+        return paymentRecordId;
+    }
+
+    public void setPaymentRecordId(Integer paymentRecordId) {
+        this.paymentRecordId = paymentRecordId;
+    }
+
+    @Override
+    public String toString() {
+        return "UserCouponRecord{" +
+                "id=" + id +
+                ", money=" + money +
+                ", fullMoney=" + fullMoney +
+                ", expirationTime=" + expirationTime +
+                ", insertTime=" + insertTime +
+                ", companyId=" + companyId +
+                ", state=" + state +
+                ", couponUseType=" + couponUseType +
+                ", couponType=" + couponType +
+                ", userId=" + userId +
+                ", couponId=" + couponId +
+                ", couponActivityId=" + couponActivityId +
+                ", activityType=" + activityType +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserInfo.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserInfo.java
new file mode 100644
index 0000000..e2bc4d8
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserInfo.java
@@ -0,0 +1,361 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 用户
+ */
+@TableName("t_user")
+@Data
+public class UserInfo extends BaseBean {
+    /**
+     * 企业id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 注册id
+     */
+    @TableField("registIp")
+    private String registIp;
+    /**
+     * 注册地区县行政编号
+     */
+    @TableField("registAreaCode")
+    private String registAreaCode;
+    /**
+     * 手机号
+     */
+    @TableField("phone")
+    private String phone;
+    /**
+     * 昵称
+     */
+    @TableField("nickName")
+    private String nickName;
+    /**
+     * 头像
+     */
+    @TableField("avatar")
+    private String avatar;
+    /**
+     * 生日
+     */
+    @TableField("birthday")
+    private Date birthday;
+    /**
+     * 性别(1=男,2=女)
+     */
+    @TableField("sex")
+    private Integer sex;
+    @TableField("isBlack")
+    private Integer isBlack;
+    /**
+     * 紧急联系人
+     */
+    @TableField("emergencyContact")
+    private String emergencyContact;
+    /**
+     * 联系人电话
+     */
+    @TableField("emergencyContactNumber")
+    private String emergencyContactNumber;
+    /**
+     * 是否已实名(1:否,2:是)
+     */
+    @TableField("isAuth")
+    private Integer isAuth;
+    /**
+     * 真实姓名
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 身份证号码
+     */
+    @TableField("idCard")
+    private String idCard;
+    /**
+     * 身份证正面
+     */
+    @TableField("idCardFront")
+    private String idCardFront;
+    /**
+     * 身份证背面
+     */
+    @TableField("idCardReverse")
+    private String idCardReverse;
+    /**
+     * 历史消费总金额
+     */
+    @TableField("consumption")
+    private Double consumption;
+    /**
+     * 账户余额
+     */
+    @TableField("balance")
+    private Double balance;
+    /**
+     * 剩余积分
+     */
+    @TableField("integral")
+    private Integer integral;
+    /**
+     * 密码
+     */
+    @TableField("passWord")
+    private String passWord;
+    /**
+     * 微信openid
+     */
+    @TableField("openId")
+    private String openId;
+    /**
+     * 小程序openid
+     */
+    @TableField("appletsOpenId")
+    private String appletsOpenId;
+    /**
+     * 微信unionid
+     */
+    @TableField("unionid")
+    private String unionid;
+    /**
+     * 备注
+     * @return
+     */
+    @TableField("remark")
+    private String remark;
+    /**
+     * 状态(1=正常,2=冻结)
+     * @return
+     */
+    @TableField("state")
+    private Integer state;
+
+
+    public String getRegistIp() {
+        return registIp;
+    }
+
+    public void setRegistIp(String registIp) {
+        this.registIp = registIp;
+    }
+
+    public String getRegistAreaCode() {
+        return registAreaCode;
+    }
+
+    public void setRegistAreaCode(String registAreaCode) {
+        this.registAreaCode = registAreaCode;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getNickName() {
+        return nickName;
+    }
+
+    public void setNickName(String nickName) {
+        this.nickName = nickName;
+    }
+
+    public String getEmergencyContact() {
+        return emergencyContact;
+    }
+
+    public void setEmergencyContact(String emergencyContact) {
+        this.emergencyContact = emergencyContact;
+    }
+
+    public String getEmergencyContactNumber() {
+        return emergencyContactNumber;
+    }
+
+    public void setEmergencyContactNumber(String emergencyContactNumber) {
+        this.emergencyContactNumber = emergencyContactNumber;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public Date getBirthday() {
+        return birthday;
+    }
+
+    public void setBirthday(Date birthday) {
+        this.birthday = birthday;
+    }
+
+    public Integer getSex() {
+        return sex;
+    }
+
+    public void setSex(Integer sex) {
+        this.sex = sex;
+    }
+
+    public Integer getIsAuth() {
+        return isAuth;
+    }
+
+    public void setIsAuth(Integer isAuth) {
+        this.isAuth = isAuth;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIdCard() {
+        return idCard;
+    }
+
+    public void setIdCard(String idCard) {
+        this.idCard = idCard;
+    }
+
+    public String getIdCardFront() {
+        return idCardFront;
+    }
+
+    public void setIdCardFront(String idCardFront) {
+        this.idCardFront = idCardFront;
+    }
+
+    public String getIdCardReverse() {
+        return idCardReverse;
+    }
+
+    public void setIdCardReverse(String idCardReverse) {
+        this.idCardReverse = idCardReverse;
+    }
+
+    public Double getConsumption() {
+        return consumption;
+    }
+
+    public void setConsumption(Double consumption) {
+        this.consumption = consumption;
+    }
+
+    public Double getBalance() {
+        return balance;
+    }
+
+    public void setBalance(Double balance) {
+        this.balance = balance;
+    }
+
+    public Integer getIntegral() {
+        return integral;
+    }
+
+    public void setIntegral(Integer integral) {
+        this.integral = integral;
+    }
+
+    public String getPassWord() {
+        return passWord;
+    }
+
+    public void setPassWord(String passWord) {
+        this.passWord = passWord;
+    }
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
+
+    public String getUnionid() {
+        return unionid;
+    }
+
+    public void setUnionid(String unionid) {
+        this.unionid = unionid;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public String getAppletsOpenId() {
+        return appletsOpenId;
+    }
+
+    public void setAppletsOpenId(String appletsOpenId) {
+        this.appletsOpenId = appletsOpenId;
+    }
+
+    @Override
+    public String toString() {
+        return "UserInfo{" +
+                "companyId=" + companyId +
+                ", registIp='" + registIp + '\'' +
+                ", registAreaCode='" + registAreaCode + '\'' +
+                ", phone='" + phone + '\'' +
+                ", nickName='" + nickName + '\'' +
+                ", avatar='" + avatar + '\'' +
+                ", birthday=" + birthday +
+                ", sex=" + sex +
+                ", emergencyContact='" + emergencyContact + '\'' +
+                ", emergencyContactNumber='" + emergencyContactNumber + '\'' +
+                ", isAuth=" + isAuth +
+                ", name='" + name + '\'' +
+                ", idCard='" + idCard + '\'' +
+                ", idCardFront='" + idCardFront + '\'' +
+                ", idCardReverse='" + idCardReverse + '\'' +
+                ", consumption=" + consumption +
+                ", balance=" + balance +
+                ", integral=" + integral +
+                ", passWord='" + passWord + '\'' +
+                ", openId='" + openId + '\'' +
+                ", unionid='" + unionid + '\'' +
+                ", remark='" + remark + '\'' +
+                ", state=" + state +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserRedPacketRecord.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserRedPacketRecord.java
new file mode 100644
index 0000000..4d42ac0
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserRedPacketRecord.java
@@ -0,0 +1,176 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 用户红包记录
+ */
+@TableName("t_user_red_packet_record")
+public class UserRedPacketRecord {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 金额
+     */
+    @TableField("money")
+    private Double money;
+    /**
+     * 过期时间
+     */
+    @TableField("expirationTime")
+    private Date expirationTime;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 企业id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 状态(0=临时,1=未使用,2=已使用,3=已过期)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 使用结束时间
+     */
+    @TableField("endTime")
+    private Date endTime;
+    /**
+     * 订单id(获取红包的订单)
+     */
+    @TableField("orderId")
+    private Integer orderId;
+    /**
+     * 订单类型(1=专车,2=出租车,3=城际,4=小件物流)
+     */
+    @TableField("orderType")
+    private Integer orderType;
+    /**
+     * 用户id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 活动id
+     * @return
+     */
+    @TableField("redPacketActivityId")
+    private Integer redPacketActivityId;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public Date getExpirationTime() {
+        return expirationTime;
+    }
+
+    public void setExpirationTime(Date expirationTime) {
+        this.expirationTime = expirationTime;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(Integer orderType) {
+        this.orderType = orderType;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getRedPacketActivityId() {
+        return redPacketActivityId;
+    }
+
+    public void setRedPacketActivityId(Integer redPacketActivityId) {
+        this.redPacketActivityId = redPacketActivityId;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    @Override
+    public String toString() {
+        return "UserRedPacketRecord{" +
+                "id=" + id +
+                ", money=" + money +
+                ", expirationTime=" + expirationTime +
+                ", insertTime=" + insertTime +
+                ", companyId=" + companyId +
+                ", state=" + state +
+                ", orderId=" + orderId +
+                ", orderType=" + orderType +
+                ", userId=" + userId +
+                ", redPacketActivityId=" + redPacketActivityId +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Verified.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Verified.java
new file mode 100644
index 0000000..de61e73
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Verified.java
@@ -0,0 +1,134 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 实名认证记录
+ */
+@TableName("t_verified")
+public class Verified {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 用户id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 认证姓名
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 身份证号码
+     */
+    @TableField("idcode")
+    private String idcode;
+    /**
+     * 身份证正面照
+     */
+    @TableField("img1")
+    private String img1;
+    /**
+     * 身份证背面照
+     */
+    @TableField("img2")
+    private String img2;
+    /**
+     * 认证结果(1=待认证,2=认证通过,3=认证失败)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 请求时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+
+    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 String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIdcode() {
+        return idcode;
+    }
+
+    public void setIdcode(String idcode) {
+        this.idcode = idcode;
+    }
+
+    public String getImg1() {
+        return img1;
+    }
+
+    public void setImg1(String img1) {
+        this.img1 = img1;
+    }
+
+    public String getImg2() {
+        return img2;
+    }
+
+    public void setImg2(String img2) {
+        this.img2 = img2;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    @Override
+    public String toString() {
+        return "Verified{" +
+                "id=" + id +
+                ", userId=" + userId +
+                ", name='" + name + '\'' +
+                ", idcode='" + idcode + '\'' +
+                ", img1='" + img1 + '\'' +
+                ", img2='" + img2 + '\'' +
+                ", state=" + state +
+                ", insertTime=" + insertTime +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/VersionManagement.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/VersionManagement.java
new file mode 100644
index 0000000..eaf5b73
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/VersionManagement.java
@@ -0,0 +1,120 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 版本管理
+ */
+@TableName("t_version_management")
+public class VersionManagement {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 包路径
+     */
+    @TableField("url")
+    private String url;
+    /**
+     * 版本号
+     */
+    @TableField("version")
+    private String version;
+    /**
+     * 更新说明
+     */
+    @TableField("content")
+    private String content;
+    /**
+     * 是否强制更新(0=否,1=是)
+     */
+    @TableField("mandatory")
+    private Integer mandatory;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 类型(1=用户端,2=司机端)
+     */
+    @TableField("type")
+    private Integer type;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getMandatory() {
+        return mandatory;
+    }
+
+    public void setMandatory(Integer mandatory) {
+        this.mandatory = mandatory;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    @Override
+    public String toString() {
+        return "VersionManagement{" +
+                "id=" + id +
+                ", url='" + url + '\'' +
+                ", version='" + version + '\'' +
+                ", content='" + content + '\'' +
+                ", mandatory=" + mandatory +
+                ", insertTime=" + insertTime +
+                ", type=" + type +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Withdrawal.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Withdrawal.java
new file mode 100644
index 0000000..6a1503c
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Withdrawal.java
@@ -0,0 +1,220 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 提现记录
+ */
+@TableName("t_pub_withdrawal")
+public class Withdrawal {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 用户id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 处理时间
+     */
+    @TableField("handleTime")
+    private Date handleTime;
+    /**
+     * 原钱包余额
+     */
+    @TableField("balance")
+    private Double balance;
+    /**
+     * 提现金额
+     */
+    @TableField("money")
+    private Double money;
+    /**
+     * 状态(1=待处理,2=处理成功,3=处理失败)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+    /**
+     * 银行账户
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * 银行卡持有人姓名
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 用户类型(1=用户,2=司机)
+     */
+    @TableField("userType")
+    private Integer userType;
+    /**
+     * 申请时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 1:创建,2:修改,3:删除
+     */
+    @TableField("flag")
+    private Integer flag;
+    /**
+     * 提现方式(1=银行卡,2=线下)
+     * @return
+     */
+    @TableField("withdrawalType")
+    private Integer withdrawalType;
+    /**
+     * 银行提交转账申请后的交易序列号,用于查询交易状态
+     * @return
+     */
+    @TableField("serialNo")
+    private String serialNo;
+
+    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 Date getHandleTime() {
+        return handleTime;
+    }
+
+    public void setHandleTime(Date handleTime) {
+        this.handleTime = handleTime;
+    }
+
+    public Double getBalance() {
+        return balance;
+    }
+
+    public void setBalance(Double balance) {
+        this.balance = balance;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getUserType() {
+        return userType;
+    }
+
+    public void setUserType(Integer userType) {
+        this.userType = userType;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getFlag() {
+        return flag;
+    }
+
+    public void setFlag(Integer flag) {
+        this.flag = flag;
+    }
+
+    public Integer getWithdrawalType() {
+        return withdrawalType;
+    }
+
+    public void setWithdrawalType(Integer withdrawalType) {
+        this.withdrawalType = withdrawalType;
+    }
+
+    public String getSerialNo() {
+        return serialNo;
+    }
+
+    public void setSerialNo(String serialNo) {
+        this.serialNo = serialNo;
+    }
+
+    @Override
+    public String toString() {
+        return "Withdrawal{" +
+                "id=" + id +
+                ", userId=" + userId +
+                ", handleTime=" + handleTime +
+                ", balance=" + balance +
+                ", money=" + money +
+                ", state=" + state +
+                ", remark='" + remark + '\'' +
+                ", code='" + code + '\'' +
+                ", name='" + name + '\'' +
+                ", userType=" + userType +
+                ", insertTime=" + insertTime +
+                ", flag=" + flag +
+                ", withdrawalType=" + withdrawalType +
+                ", serialNo='" + serialNo + '\'' +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAdvertisementService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAdvertisementService.java
new file mode 100644
index 0000000..cb1a670
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAdvertisementService.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Advertisement;
+import com.stylefeng.guns.modular.system.warpper.AdvertisementWarpper;
+
+import java.util.List;
+
+public interface IAdvertisementService extends IService<Advertisement> {
+
+
+    /**
+     * 获取广告
+     * @param type  广告类型(1:弹窗广告,2:底部广告)
+     * @return
+     * @throws Exception
+     */
+    List<AdvertisementWarpper> queryAdvertisement(String code, Integer type) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAgreementService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAgreementService.java
new file mode 100644
index 0000000..f9ae612
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAgreementService.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Agreement;
+
+public interface IAgreementService extends IService<Agreement> {
+
+
+    /**
+     * 获取协议内容
+     * @param type
+     * @return
+     * @throws Exception
+     */
+    String queryByType(Integer type) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICancleOrderService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICancleOrderService.java
new file mode 100644
index 0000000..6c283b2
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICancleOrderService.java
@@ -0,0 +1,18 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.CancleOrder;
+
+
+public interface ICancleOrderService extends IService<CancleOrder> {
+
+
+    /**
+     * 获取取消订单设置
+     * @param type
+     * @param orderType
+     * @return
+     * @throws Exception
+     */
+    CancleOrder query(Integer type, Integer orderType, Integer companyId) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICompanyCityService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICompanyCityService.java
new file mode 100644
index 0000000..8719561
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICompanyCityService.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Company;
+import com.stylefeng.guns.modular.system.model.CompanyCity;
+
+public interface ICompanyCityService extends IService<CompanyCity> {
+
+
+    /**
+     * 根据经纬度获取所属企业
+     * @param lon
+     * @param lat
+     * @return
+     * @throws Exception
+     */
+    Company query(String lon, String lat) throws Exception;
+
+
+    /**
+     * 根据行政编号获取所有企业
+     * @param code
+     * @return
+     * @throws Exception
+     */
+    Company query(String code) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICompanyService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICompanyService.java
new file mode 100644
index 0000000..396786d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICompanyService.java
@@ -0,0 +1,7 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Company;
+
+public interface ICompanyService extends IService<Company> {
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IComplaintService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IComplaintService.java
new file mode 100644
index 0000000..7e49a25
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IComplaintService.java
@@ -0,0 +1,18 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Complaint;
+
+public interface IComplaintService extends IService<Complaint> {
+
+
+    /**
+     * 添加投诉
+     * @param driverId      司机id
+     * @param reason        投诉原因
+     * @param description   描述
+     * @param uid           投诉人
+     * @throws Exception
+     */
+    void saveData(Integer driverId, String reason, String description, Integer uid) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDeptService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDeptService.java
new file mode 100644
index 0000000..fb02331
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDeptService.java
@@ -0,0 +1,33 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.core.node.ZTreeNode;
+import com.stylefeng.guns.modular.system.model.Dept;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 部门服务
+ *
+ * @author fengshuonan
+ * @date 2017-04-27 17:00
+ */
+public interface IDeptService extends IService<Dept> {
+
+    /**
+     * 删除部门
+     */
+    void deleteDept(Integer deptId);
+
+    /**
+     * 获取ztree的节点列表
+     */
+    List<ZTreeNode> tree();
+
+    /**
+     * 获取所有部门列表
+     */
+    List<Map<String, Object>> list(@Param("condition") String condition);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDictService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDictService.java
new file mode 100644
index 0000000..6e3c3c4
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDictService.java
@@ -0,0 +1,48 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Dict;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 字典服务
+ *
+ * @author fengshuonan
+ * @date 2017-04-27 17:00
+ */
+public interface IDictService extends IService<Dict> {
+
+    /**
+     * 添加字典
+     */
+    void addDict(String dictCode,String dictName,String dictTips, String dictValues);
+
+    /**
+     * 编辑字典
+     */
+    void editDict(Integer dictId,String dictCode, String dictName,String dictTips, String dicts);
+
+    /**
+     * 删除字典
+     */
+    void delteDict(Integer dictId);
+
+    /**
+     * 根据编码获取词典列表
+     */
+    List<Dict> selectByCode(@Param("code") String code);
+
+    /**
+     * 根据父类编码获取词典列表
+     */
+    List<Dict> selectByParentCode(@Param("code") String code);
+
+    /**
+     * 查询字典列表
+     */
+    List<Map<String, Object>> list(@Param("condition") String conditiion);
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOrdersService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOrdersService.java
new file mode 100644
index 0000000..51b0526
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverOrdersService.java
@@ -0,0 +1,26 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.DriverOrders;
+
+import java.util.List;
+
+public interface IDriverOrdersService extends IService<DriverOrders> {
+
+    /**
+     * 接单设置操作
+     * @param uid
+     * @param type
+     * @throws Exception
+     */
+    void updateOrders(Integer uid, Integer type) throws Exception;
+
+
+    /**
+     * 获取设置的推单规则
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    List<Integer> queryOrders(Integer uid) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverService.java
new file mode 100644
index 0000000..6f879e7
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverService.java
@@ -0,0 +1,64 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Driver;
+import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IDriverService extends IService<Driver> {
+
+
+    /**
+     * 获取distance公里内空闲司机数量
+     * @param type
+     * @param lon
+     * @param lat
+     * @return
+     * @throws Exception
+     */
+    List<Driver> queryIdleDriver(Integer type, Double lon, Double lat, Double distance, Integer companyId) throws Exception;
+    List<Driver> queryIdleDriverAll(Integer type, Double lon, Double lat, Double distance, Integer companyId) throws Exception;
+
+
+    /**
+     * 获取给定车型且空闲的司机
+     * @param type
+     * @param serverCarModelId
+     * @param lon
+     * @param lat
+     * @param distance
+     * @param companyId
+     * @return
+     * @throws Exception
+     */
+    List<Driver> queryIdleDriver(Integer type, Integer serverCarModelId, Double lon, Double lat, Double distance, Integer companyId) throws Exception;
+
+
+    /**
+     * 根据订单id获取司机数据
+     * @param orderId
+     * @return
+     * @throws Exception
+     */
+    Map<String, Object> queryOrderDriver(Integer orderId, Integer orderType) throws Exception;
+
+
+    /**
+     * 获取司机详情
+     * @param id
+     * @return
+     * @throws Exception
+     */
+    Map<String, Object> queryDriverInfo(Integer id) throws Exception;
+
+
+    /**
+     * 获取司机的业务类型
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    List<BaseWarpper> queryBusiness(Integer uid) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverServiceService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverServiceService.java
new file mode 100644
index 0000000..1119edb
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverServiceService.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.DriverService;
+
+import java.util.List;
+
+public interface IDriverServiceService extends IService<DriverService> {
+
+
+    /**
+     * 获取司机服务业务
+     * @param driverId
+     * @param type
+     * @return
+     * @throws Exception
+     */
+    List<DriverService> query(Integer driverId, Integer...type) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFeedbackService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFeedbackService.java
new file mode 100644
index 0000000..5eb3bea
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IFeedbackService.java
@@ -0,0 +1,17 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Feedback;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+
+public interface IFeedbackService extends IService<Feedback> {
+
+
+    /**
+     * 反馈操作
+     * @param content
+     * @param uid
+     * @throws Exception
+     */
+    ResultUtil feedback(String content, Integer uid) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IGDInterfaceService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IGDInterfaceService.java
new file mode 100644
index 0000000..e40f4c2
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IGDInterfaceService.java
@@ -0,0 +1,10 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.GDInterface;
+
+public interface IGDInterfaceService extends IService<GDInterface> {
+
+
+    void saveData(String name, String explanation);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IIncomeService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IIncomeService.java
new file mode 100644
index 0000000..e1a2fd3
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IIncomeService.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Income;
+
+public interface IIncomeService extends IService<Income> {
+
+
+    /**
+     * 添加数据
+     * @param userType
+     * @param objectId
+     * @param type
+     * @param incomeId
+     * @param money
+     * @throws Exception
+     */
+    void saveData(Integer userType, Integer objectId, Integer type, Integer incomeId, Integer orderType, Double money) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IIntegralGoodsService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IIntegralGoodsService.java
new file mode 100644
index 0000000..3c18397
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IIntegralGoodsService.java
@@ -0,0 +1,21 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.IntegralGoods;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IIntegralGoodsService extends IService<IntegralGoods> {
+
+
+    /**
+     * 获取商品列表
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> queryGoods(Integer pageNum, Integer size) throws Exception;
+
+
+    Map<String, Object> queryGoodsInfo(Integer id) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IIntegralOrderService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IIntegralOrderService.java
new file mode 100644
index 0000000..69683ad
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IIntegralOrderService.java
@@ -0,0 +1,30 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.IntegralOrder;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IIntegralOrderService extends IService<IntegralOrder> {
+
+
+    /**
+     * 保存订单
+     * @param integralOrder
+     * @throws Exception
+     */
+    ResultUtil addIntegralOrder(IntegralOrder integralOrder, Integer uid) throws Exception;
+
+
+    /**
+     * 获取历史记录
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> queryConvertHistory(Integer pageNum, Integer size, Integer uid) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IInvoiceService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IInvoiceService.java
new file mode 100644
index 0000000..cd527e6
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IInvoiceService.java
@@ -0,0 +1,29 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Invoice;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IInvoiceService extends IService<Invoice> {
+
+    /**
+     * 开票操作
+     * @param invoice
+     * @param order
+     * @throws Exception
+     */
+    void invoicing(Invoice invoice, String order, Integer uid) throws Exception;
+
+
+    /**
+     * 获取发票历史记录
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> queryMyInvoice(Integer pageNum, Integer size, Integer uid) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ILoginLogService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ILoginLogService.java
new file mode 100644
index 0000000..d0f4290
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ILoginLogService.java
@@ -0,0 +1,24 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.LoginLog;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 登录记录 服务类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+public interface ILoginLogService extends IService<LoginLog> {
+
+    /**
+     * 获取登录日志列表
+     */
+    List<Map<String, Object>> getLoginLogs(Page<LoginLog> page, String beginTime, String endTime, String logName, String orderByField, boolean asc);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IMenuService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IMenuService.java
new file mode 100644
index 0000000..b976165
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IMenuService.java
@@ -0,0 +1,94 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.core.node.MenuNode;
+import com.stylefeng.guns.core.node.ZTreeNode;
+import com.stylefeng.guns.modular.system.model.Menu;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 菜单服务
+ *
+ * @author fengshuonan
+ * @date 2017-05-05 22:19
+ */
+public interface IMenuService extends IService<Menu> {
+
+    /**
+     * 删除菜单
+     *
+     * @author stylefeng
+     * @Date 2017/5/5 22:20
+     */
+    void delMenu(Long menuId);
+
+    /**
+     * 删除菜单包含所有子菜单
+     *
+     * @author stylefeng
+     * @Date 2017/6/13 22:02
+     */
+    void delMenuContainSubMenus(Long menuId);
+
+    /**
+     * 根据条件查询菜单
+     *
+     * @return
+     * @date 2017年2月12日 下午9:14:34
+     */
+    List<Map<String, Object>> selectMenus(@Param("condition") String condition, @Param("level") String level);
+
+    /**
+     * 根据条件查询菜单
+     *
+     * @return
+     * @date 2017年2月12日 下午9:14:34
+     */
+    List<Long> getMenuIdsByRoleId(@Param("roleId") Integer roleId);
+
+    /**
+     * 获取菜单列表树
+     *
+     * @return
+     * @date 2017年2月19日 下午1:33:51
+     */
+    List<ZTreeNode> menuTreeList();
+
+    /**
+     * 获取菜单列表树
+     *
+     * @return
+     * @date 2017年2月19日 下午1:33:51
+     */
+    List<ZTreeNode> menuTreeListByMenuIds(List<Long> menuIds);
+
+    /**
+     * 删除menu关联的relation
+     *
+     * @param menuId
+     * @return
+     * @date 2017年2月19日 下午4:10:59
+     */
+    int deleteRelationByMenu(Long menuId);
+
+    /**
+     * 获取资源url通过角色id
+     *
+     * @param roleId
+     * @return
+     * @date 2017年2月19日 下午7:12:38
+     */
+    List<String> getResUrlsByRoleId(Integer roleId);
+
+    /**
+     * 根据角色获取菜单
+     *
+     * @param roleIds
+     * @return
+     * @date 2017年2月19日 下午10:35:40
+     */
+    List<MenuNode> getMenusByRoleIds(List<Integer> roleIds);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/INettyService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/INettyService.java
new file mode 100644
index 0000000..43a175b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/INettyService.java
@@ -0,0 +1,30 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.warpper.EndPushWarpper;
+import com.stylefeng.guns.modular.system.warpper.OrderServerWarpper;
+import com.stylefeng.guns.modular.system.warpper.OrderStatusWarpper;
+
+import java.util.List;
+
+public interface INettyService {
+
+
+    /**
+     * 获取下单推送完后没有司机下单的提醒
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    ResultUtil<EndPushWarpper> queryEndPush(Integer orderId, Integer orderType, Integer uid) throws Exception;
+
+
+
+    /**
+     * 获取服务中的订单数据
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    ResultUtil<OrderServerWarpper> queryOrderServer(Integer orderId, Integer orderType, Integer uid) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/INoticeService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/INoticeService.java
new file mode 100644
index 0000000..ced40b4
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/INoticeService.java
@@ -0,0 +1,23 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Notice;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 通知表 服务类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+public interface INoticeService extends IService<Notice> {
+
+    /**
+     * 获取通知列表
+     */
+    List<Map<String, Object>> list(String condition);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityBusinessService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityBusinessService.java
new file mode 100644
index 0000000..cea641f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityBusinessService.java
@@ -0,0 +1,30 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.OpenCityBusiness;
+import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
+
+import java.util.List;
+
+public interface IOpenCityBusinessService extends IService<OpenCityBusiness> {
+
+
+    /**
+     * 获取业务类型
+     * @param province  省名
+     * @param city      市名称
+     * @param district  区县名称
+     * @return
+     * @throws Exception
+     */
+    List<BaseWarpper> queryBusiness(String province, String city, String district) throws Exception;
+
+
+    /**
+     * 根据选择的城市id获取业务类型
+     * @param id
+     * @return
+     * @throws Exception
+     */
+    List<BaseWarpper> queryBusinessById(Integer id) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityService.java
new file mode 100644
index 0000000..a0030a0
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityService.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.OpenCity;
+import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
+
+import java.util.List;
+
+public interface IOpenCityService extends IService<OpenCity> {
+
+
+    /**
+     * 获取开通城市列表
+     * @return
+     * @throws Exception
+     */
+    List<BaseWarpper> queryOpenCity() throws Exception;
+
+
+    /**
+     * 判断是否是开通城市
+     * @param code
+     * @return
+     * @throws Exception
+     */
+    boolean openCity(String code) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOperationLogService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOperationLogService.java
new file mode 100644
index 0000000..9c37b6b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOperationLogService.java
@@ -0,0 +1,24 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.OperationLog;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 操作日志 服务类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+public interface IOperationLogService extends IService<OperationLog> {
+
+    /**
+     * 获取操作日志列表
+     */
+    List<Map<String, Object>> getOperationLogs(Page<OperationLog> page, String beginTime, String endTime, String logName, String s, String orderByField, boolean asc);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCancelService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCancelService.java
new file mode 100644
index 0000000..7df13cd
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCancelService.java
@@ -0,0 +1,48 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.OrderCancel;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IOrderCancelService extends IService<OrderCancel> {
+
+
+    /**
+     * 添加数据
+     * @param orderId
+     * @param orderType
+     * @param reason
+     * @param remark
+     * @param payType
+     * @param money
+     * @param state
+     * @throws Exception
+     */
+    Integer saveData(Integer orderId, Integer orderType, String reason, String remark, Integer payType, Double money,
+                     Integer state, Integer userType, Integer uid) throws Exception;
+
+
+    /**
+     * 获取取消数据
+     * @param orderId
+     * @param orderType
+     * @param money
+     * @param payType
+     * @param state
+     * @return
+     * @throws Exception
+     */
+    OrderCancel query(Integer orderId, Integer orderType, Double money, Integer payType, Integer state) throws Exception;
+
+
+
+    /**
+     * 获取用户取消记录
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> queryCancel(Integer uid, Integer isPay) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderEvaluateService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderEvaluateService.java
new file mode 100644
index 0000000..369797b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderEvaluateService.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.OrderEvaluate;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IOrderEvaluateService extends IService<OrderEvaluate> {
+
+
+    /**
+     * 添加评价数据
+     * @param orderId
+     * @param orderType
+     * @param fraction
+     * @param content
+     * @throws Exception
+     */
+    ResultUtil saveData(Integer orderId, Integer orderType, Integer fraction, String content) throws Exception;
+
+
+    /**
+     * 获取司机历史评价列表
+     * @param driverId
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> queryOrderEvaluate(Integer driverId, Integer pageNum, Integer size) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderPositionService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderPositionService.java
new file mode 100644
index 0000000..a49a6d3
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderPositionService.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.OrderPosition;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IOrderPositionService extends IService<OrderPosition> {
+
+
+    /**
+     * 获取轨迹数据
+     * @param orderId
+     * @param orderType
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> queryTrack(Integer orderId, Integer orderType) throws Exception;
+
+
+    /**
+     * 获取订单所有坐标
+     * @param orderId
+     * @param orderType
+     * @return
+     * @throws Exception
+     */
+    List<OrderPosition> queryPosition(Integer orderId, Integer orderType) throws Exception;
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java
new file mode 100644
index 0000000..fec2b45
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderService.java
@@ -0,0 +1,30 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
+
+public interface IOrderService {
+
+
+    /**
+     * 获取预计行驶时间
+     * @param slon  起点经度
+     * @param slat  起点纬度
+     * @param elon  终点经度
+     * @param elat  终点纬度
+     * @return
+     * @throws Exception
+     */
+    ResultUtil<BaseWarpper> queryExpectedTime(Double slon, Double slat, Double elon, Double elat) throws Exception;
+
+
+    /**
+     * APP调用小程序完成微信支付
+     * @param orderId
+     * @param orderType
+     * @param type
+     * @return
+     * @throws Exception
+     */
+    ResultUtil weChatPay(Integer orderId, Integer orderType, Integer type, Integer userType, Integer uid, String content) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPhoneService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPhoneService.java
new file mode 100644
index 0000000..f9204a5
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPhoneService.java
@@ -0,0 +1,26 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Phone;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IPhoneService extends IService<Phone> {
+
+    /**
+     * 获取所有的系统电话
+     * @return
+     * @throws Exception
+     */
+    List<Phone> queryPhones(String code) throws Exception;
+
+
+    /**
+     * 获取客服电话(个人中心)
+     * @param code
+     * @return
+     * @throws Exception
+     */
+    Map<String, Object> queryCustomerPhone(String code) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IProblemService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IProblemService.java
new file mode 100644
index 0000000..8adc78b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IProblemService.java
@@ -0,0 +1,32 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Problem;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IProblemService extends IService<Problem> {
+
+
+    /**
+     * 添加留言
+     * @param content
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    ResultUtil leaveMessage(String content, Integer uid) throws Exception;
+
+
+    /**
+     * 获取提交的留言列表
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> queryProblems(Integer pageNum, Integer size, Integer uid) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushOrderService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushOrderService.java
new file mode 100644
index 0000000..aa1bfc8
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushOrderService.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.PushOrder;
+
+import java.util.List;
+
+public interface IPushOrderService extends IService<PushOrder> {
+
+
+    /**
+     * 获取推送配置数据
+     * @param type
+     * @param pushType
+     * @return
+     * @throws Exception
+     */
+    List<PushOrder> querys(Integer type, Integer pushType, Integer companyId) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRedPacketRecordService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRedPacketRecordService.java
new file mode 100644
index 0000000..f869b80
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRedPacketRecordService.java
@@ -0,0 +1,8 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.RedPacketRecord;
+
+public interface IRedPacketRecordService extends IService<RedPacketRecord> {
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRelationService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRelationService.java
new file mode 100644
index 0000000..4214359
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRelationService.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Relation;
+
+/**
+ * <p>
+ * 角色和菜单关联表 服务类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+public interface IRelationService extends IService<Relation> {
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRoleService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRoleService.java
new file mode 100644
index 0000000..cc7332d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRoleService.java
@@ -0,0 +1,68 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.core.node.ZTreeNode;
+import com.stylefeng.guns.modular.system.model.Role;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 角色相关业务
+ *
+ * @author fengshuonan
+ * @Date 2017年1月10日 下午9:11:57
+ */
+public interface IRoleService extends IService<Role> {
+
+    /**
+     * 设置某个角色的权限
+     *
+     * @param roleId 角色id
+     * @param ids    权限的id
+     * @date 2017年2月13日 下午8:26:53
+     */
+    void setAuthority(Integer roleId, String ids);
+
+    /**
+     * 删除角色
+     *
+     * @author stylefeng
+     * @Date 2017/5/5 22:24
+     */
+    void delRoleById(Integer roleId);
+
+    /**
+     * 根据条件查询角色列表
+     *
+     * @return
+     * @date 2017年2月12日 下午9:14:34
+     */
+    List<Map<String, Object>> selectRoles(@Param("condition") String condition);
+
+    /**
+     * 删除某个角色的所有权限
+     *
+     * @param roleId 角色id
+     * @return
+     * @date 2017年2月13日 下午7:57:51
+     */
+    int deleteRolesById(@Param("roleId") Integer roleId);
+
+    /**
+     * 获取角色列表树
+     *
+     * @return
+     * @date 2017年2月18日 上午10:32:04
+     */
+    List<ZTreeNode> roleTreeList();
+
+    /**
+     * 获取角色列表树
+     *
+     * @return
+     * @date 2017年2月18日 上午10:32:04
+     */
+    List<ZTreeNode> roleTreeListByRoleId(String[] roleId);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IServerCarModelService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IServerCarModelService.java
new file mode 100644
index 0000000..de7da0c
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IServerCarModelService.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.ServerCarModel;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.warpper.ServerCarModelWarpper;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IServerCarModelService extends IService<ServerCarModel> {
+
+
+    /**
+     * 根据起点和终点获取车型和金额
+     * @param startLonLat
+     * @param endLonLat
+     * @param type          业务类型
+     * @return
+     * @throws Exception
+     */
+    ResultUtil<List<ServerCarModelWarpper>> queryServerCarModel(String startLonLat, String endLonLat, Integer type) throws Exception;
+
+
+    /**
+     * 获取业务类型对应的所有车型
+     * @param type
+     * @return
+     */
+    List<Map<String, Object>> queryServerCarModels(Integer type);
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISmsrecordService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISmsrecordService.java
new file mode 100644
index 0000000..2503249
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISmsrecordService.java
@@ -0,0 +1,17 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Smsrecord;
+
+public interface ISmsrecordService extends IService<Smsrecord> {
+
+    /**
+     * 添加数据
+     * @param type
+     * @param phone
+     * @param code
+     * @param content
+     * @throws Exception
+     */
+    void saveData(Integer type, String phone, String code, String content) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemNoticeService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemNoticeService.java
new file mode 100644
index 0000000..6d7e663
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemNoticeService.java
@@ -0,0 +1,65 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.SystemNotice;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ISystemNoticeService extends IService<SystemNotice> {
+
+
+    /**
+     * 添加系统消息
+     * @param userType
+     * @param content
+     * @param userId
+     * @throws Exception
+     */
+    void addSystemNotice(Integer userType, String content, Integer userId, Integer noticeType) throws Exception;
+
+
+    /**
+     * 获取未阅读数据
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    int queryNoReadNoticeNum(Integer uid) throws Exception;
+
+    /**
+     * 获取消息列列表
+     * @param type
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     */
+    List<Map<String, Object>> queryList(Integer type, Integer pageNum, Integer size, Integer uid);
+
+
+    /**
+     * 阅读操作
+     * @param id
+     * @param uid
+     * @throws Exception
+     */
+    void readSystemNotice(Integer id, Integer uid) throws Exception;
+
+
+    /**
+     * 删除公告或消息
+     * @param id
+     * @param uid
+     * @throws Exception
+     */
+    void delSystemNotice(Integer id, Integer uid) throws Exception;
+
+
+    /**
+     * 清空公告或消息
+     * @param uid
+     * @throws Exception
+     */
+    void clearSystemNotice(Integer uid) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITNoticesService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITNoticesService.java
new file mode 100644
index 0000000..2531177
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITNoticesService.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.TNotices;
+import com.stylefeng.guns.modular.system.warpper.TNoticeWarpper;
+
+import java.util.List;
+
+public interface ITNoticesService extends IService<TNotices> {
+
+
+    /**
+     * 获取公告列表
+     * @param type
+     * @return
+     * @throws Exception
+     */
+    List<TNoticeWarpper> queryNotices(Integer type) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserActivityBalanceService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserActivityBalanceService.java
new file mode 100644
index 0000000..4946e5a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserActivityBalanceService.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.UserActivityBalance;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IUserActivityBalanceService extends IService<UserActivityBalance> {
+
+
+    /**
+     * 获取满足条件的活动
+     * @param companyId
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> query(Double money, Integer companyId) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserActivityRedenvelopeService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserActivityRedenvelopeService.java
new file mode 100644
index 0000000..83318b6
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserActivityRedenvelopeService.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.UserActivityRedenvelope;
+
+import java.util.Date;
+import java.util.Map;
+
+public interface IUserActivityRedenvelopeService extends IService<UserActivityRedenvelope> {
+
+
+    /**
+     * 获取红包活动
+     * @param companyId
+     * @return
+     * @throws Exception
+     */
+    Map<String, Object> query(Integer companyId, Date travelTime) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserActivityRegisteredService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserActivityRegisteredService.java
new file mode 100644
index 0000000..222d297
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserActivityRegisteredService.java
@@ -0,0 +1,20 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.UserActivityRegistered;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IUserActivityRegisteredService extends IService<UserActivityRegistered> {
+
+
+    /**
+     * 获取当前有效的注册活动
+     * @param companyId
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> query(Integer companyId) throws Exception;
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserCouponRecordService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserCouponRecordService.java
new file mode 100644
index 0000000..84636e8
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserCouponRecordService.java
@@ -0,0 +1,69 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.UserCouponRecord;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IUserCouponRecordService extends IService<UserCouponRecord> {
+
+
+    /**
+     * 获取可用优惠券数量
+     * @param uid
+     * @param companyId
+     * @param state
+     * @param couponUseType
+     * @return
+     * @throws Exception
+     */
+    int queryAvailable(Integer uid, Integer companyId, Integer state, Integer couponUseType, Double money) throws Exception;
+
+
+    /**
+     * 获取优惠券列表
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> queryCoupon(Integer uid, Integer companyId, Integer state, Integer couponUseType, Double money, Integer pageNum, Integer size) throws Exception;
+
+
+    /**
+     * 获取优惠券列表
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> queryMyCoupons(Integer state, Integer pageNum, Integer size, Integer uid) throws Exception;
+
+
+    /**
+     * 删除优惠券
+     * @param id
+     * @param uid
+     * @throws Exception
+     */
+    ResultUtil delMyCoupon(Integer id, Integer uid) throws Exception;
+
+
+    /**
+     * 赠送优惠券
+     * @param id
+     * @param uid
+     * @param userId
+     * @return
+     * @throws Exception
+     */
+    ResultUtil handselCoupon(Integer id, Integer uid, Integer userId) throws Exception;
+
+
+    /**
+     * 修改过期的优惠券状态
+     * @throws Exception
+     */
+    void updateTimeOut() throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java
new file mode 100644
index 0000000..b68bc18
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java
@@ -0,0 +1,227 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.UserInfo;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.warpper.LoginWarpper;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.Map;
+
+public interface IUserInfoService extends IService<UserInfo> {
+
+
+    /**
+     * 获取短信验证码
+     * @param phone
+     * @return
+     */
+    ResultUtil queryCaptcha(String phone, Integer type) throws Exception;
+
+
+    /**
+     * 校验短信验证码
+     * @param phone
+     * @param code
+     * @return
+     * @throws Exception
+     */
+    boolean checkCaptcha(String phone, String code) throws Exception;
+
+
+    /**
+     * 手机验证码登录
+     * @param phone
+     * @param code
+     * @return
+     */
+    ResultUtil<LoginWarpper> captchaLogin(String phone, String code, String registIp, String registAreaCode,String loginType) throws Exception;
+
+    /**
+     * 手机一键登录
+     * @param accessToken
+     * @param registIp
+     * @param registAreaCode
+     * @return
+     * @throws Exception
+     */
+    ResultUtil<LoginWarpper> oneClickLogin(String accessToken, String registIp, String registAreaCode,String loginType,String androidOrIos) throws Exception;
+
+
+
+    ResultUtil<LoginWarpper> captchaLogin(String phone, String code, Integer uid, Integer type, Integer userType,String loginType) throws Exception;
+
+
+    /**
+     * 手机号码查询用户
+     * @param phone
+     * @return
+     * @throws Exception
+     */
+    UserInfo queryByPhone(String phone) throws Exception;
+
+
+    /**
+     * 账号密码登录
+     * @param phone
+     * @param password
+     * @return
+     * @throws Exception
+     */
+    ResultUtil<LoginWarpper> userLogin(String phone, String password,String loginType) throws Exception;
+
+
+    /**
+     * 微信授权登录
+     * @param type              登录端口(1:APP登录,2:小程序)
+     * @param openid            微信openid
+     * @param unionid           微信unionid
+     * @param jscode            小程序登录时的jscode临时凭证
+     * @param registIp          ip地址
+     * @param registAreaCode    当前定位区县行政编号(6位)
+     * @return
+     */
+    ResultUtil<LoginWarpper> wxLogin(Integer type, String openid, String unionid, String jscode, String registIp, String registAreaCode, Integer sex, String nickName, String avatar,String loginType) throws Exception;
+
+
+    /**
+     * 忘记密码的操作
+     * @param phone
+     * @param code
+     * @param password
+     * @return
+     * @throws Exception
+     */
+    ResultUtil forgetPassword(String phone, String code, String password) throws Exception;
+
+
+    /**
+     * 设置手机号码
+     * @param uid
+     * @param phone
+     * @param code
+     * @return
+     * @throws Exception
+     */
+    ResultUtil bindingPhone(Integer uid, String phone, String code,String loginType) throws Exception;
+
+
+    /**
+     * 从redis中获取用户id
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    Integer getUserIdFormRedis(HttpServletRequest request) throws Exception;
+
+
+    /**
+     * 获取用户详情
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    Map<String, Object> queryUserInfo(Integer uid) throws Exception;
+
+
+    /**
+     * 电话号码查询用户
+     * @param phone
+     * @return
+     * @throws Exception
+     */
+    Map<String, Object> queryUser(String phone) throws Exception;
+
+
+    /**
+     * 设置紧急联系人
+     * @param name
+     * @param phone
+     * @param uid
+     * @throws Exception
+     */
+    void setUrgentUser(String name, String phone, Integer uid) throws Exception;
+
+
+    /**
+     * 充值余额
+     * @param payType
+     * @param money
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    ResultUtil depositBalance(Integer payType, Double money, Integer uid, Integer type) throws Exception;
+
+
+    /**
+     * 修改手机号码
+     * @param code
+     * @param phone
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    ResultUtil updatePhone(String code, String phone, Integer uid) throws Exception;
+
+
+    /**
+     * 修改密码
+     * @param password
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    ResultUtil updatePass(String password, Integer uid) throws Exception;
+
+
+    /**
+     * 修改个人信息
+     * @param avatar
+     * @param nickname
+     * @param sex
+     * @param birthday
+     * @param uid
+     * @throws Exception
+     */
+    void updateInfo(String avatar, String nickname, Integer sex, Date birthday, Integer uid) throws Exception;
+
+    /**
+     * 获取实名认证数据
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    Map<String, Object> queryRealName(Integer uid) throws Exception;
+
+
+    /**
+     * 充值余额完成支付后的处理
+     * @param id            用户id
+     * @param order_id      工行订单id
+     * @param paymentRecordId   预支付订单id
+     * @param type          支付类型(1=微信,2=支付宝)
+     * @throws Exception
+     */
+    void payCancelUserBalance(Integer id, String order_id, Integer paymentRecordId, Integer type) throws Exception;
+
+
+    /**
+     * H5接入道行龙城实现登录
+     * @param authCode
+     * @return
+     * @throws Exception
+     */
+    ResultUtil<LoginWarpper> dxlcLogin(String authCode, String registAreaCode,String loginType) throws Exception;
+
+
+    /**
+     * 小程序中手机号码登录后绑定微信
+     * @param userId
+     * @param jscode
+     * @return
+     * @throws Exception
+     */
+    ResultUtil phoneLoginBindingWeChat(Integer userId, String jscode) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserRedPacketRecordService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserRedPacketRecordService.java
new file mode 100644
index 0000000..e378b4e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserRedPacketRecordService.java
@@ -0,0 +1,40 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.UserRedPacketRecord;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IUserRedPacketRecordService extends IService<UserRedPacketRecord> {
+
+
+    /**
+     * 获取不大于money值的红包数据
+     * @param uid
+     * @param companyId
+     * @param state
+     * @param orderType
+     * @param money
+     * @return
+     * @throws Exception
+     */
+    UserRedPacketRecord query(Integer uid, Integer companyId, Integer state, Integer orderType, Double money) throws Exception;
+
+
+
+    UserRedPacketRecord query_(Integer uid, Integer companyId, Integer state, Integer orderType, Double money) throws Exception;
+
+
+
+    /**
+     * 获取个人红包列表(未使用)
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> queryMyRedEnvelope(Integer pageNum, Integer size, Integer uid) throws Exception;
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserService.java
new file mode 100644
index 0000000..3869242
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserService.java
@@ -0,0 +1,46 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.core.datascope.DataScope;
+import com.stylefeng.guns.modular.system.model.User;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 管理员表 服务类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+public interface IUserService extends IService<User> {
+
+    /**
+     * 修改用户状态
+     */
+    int setStatus(@Param("userId") Integer userId, @Param("status") int status);
+
+    /**
+     * 修改密码
+     */
+    int changePwd(@Param("userId") Integer userId, @Param("pwd") String pwd);
+
+    /**
+     * 根据条件查询用户列表
+     */
+    List<Map<String, Object>> selectUsers(@Param("dataScope") DataScope dataScope, @Param("name") String name, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("deptid") Integer deptid);
+
+    /**
+     * 设置用户的角色
+     */
+    int setRoles(@Param("userId") Integer userId, @Param("roleIds") String roleIds);
+
+    /**
+     * 通过账号获取用户
+     */
+    User getByAccount(@Param("account") String account);
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IVerifiedService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IVerifiedService.java
new file mode 100644
index 0000000..fb30c6f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IVerifiedService.java
@@ -0,0 +1,17 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Verified;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+
+public interface IVerifiedService extends IService<Verified> {
+
+    /**
+     * 实名认证操作
+     * @param verified
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    ResultUtil verified(Verified verified, Integer uid) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IVersionManagementService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IVersionManagementService.java
new file mode 100644
index 0000000..a8c921b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IVersionManagementService.java
@@ -0,0 +1,17 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.VersionManagement;
+
+import java.util.Map;
+
+public interface IVersionManagementService extends IService<VersionManagement> {
+
+
+    /**
+     * 获取最新版本数据
+     * @return
+     * @throws Exception
+     */
+    Map<String, Object> queryNewVersion() throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java
new file mode 100644
index 0000000..d7ad996
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IWithdrawalService.java
@@ -0,0 +1,41 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.Withdrawal;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IWithdrawalService extends IService<Withdrawal> {
+
+
+    /**
+     * 提现操作
+     * @param money
+     * @param code
+     * @param name
+     * @param uid
+     * @throws Exception
+     */
+    ResultUtil withdrawal(Double money, String code, String name, Integer uid) throws Exception;
+
+
+    /**
+     * 获取历史提交数据
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    List<Map<String, Object>> queryWithdrawal(Integer uid, Integer pageNum, Integer size) throws Exception;
+
+
+    /**
+     * 提现审核处理
+     * @param id
+     * @param state
+     * @return
+     * @throws Exception
+     */
+    ResultUtil withdrawalAudit(Integer id, Integer state) throws Exception;
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AdvertisementServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AdvertisementServiceImpl.java
new file mode 100644
index 0000000..223fbd5
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AdvertisementServiceImpl.java
@@ -0,0 +1,41 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.AdvertisementMapper;
+import com.stylefeng.guns.modular.system.model.Advertisement;
+import com.stylefeng.guns.modular.system.service.IAdvertisementService;
+import com.stylefeng.guns.modular.system.warpper.AdvertisementWarpper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+
+@Service
+public class AdvertisementServiceImpl extends ServiceImpl<AdvertisementMapper, Advertisement> implements IAdvertisementService {
+
+    @Resource
+    private AdvertisementMapper advertisementMapper;
+
+
+    /**
+     * 获取广告
+     * @param type  广告类型(1:弹窗广告,2:底部广告)
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<AdvertisementWarpper> queryAdvertisement(String code, Integer type) throws Exception {
+        if(code.equals(""))code="370500";
+        String province = code.substring(0, 2) + "0000";
+        String city = code.substring(0, 4) + "00";
+        List<AdvertisementWarpper> list = advertisementMapper.queryAdvertisement(code, type);
+        if(list.size() == 0){
+            list = advertisementMapper.queryAdvertisement(city, type);
+        }
+        if(list.size() == 0){
+            list = advertisementMapper.queryAdvertisement(province, type);
+        }
+        return list;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AgreementServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AgreementServiceImpl.java
new file mode 100644
index 0000000..085a374
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AgreementServiceImpl.java
@@ -0,0 +1,34 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.dao.AgreementMapper;
+import com.stylefeng.guns.modular.system.model.Agreement;
+import com.stylefeng.guns.modular.system.service.IAgreementService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+
+@Service
+public class AgreementServiceImpl extends ServiceImpl<AgreementMapper, Agreement> implements IAgreementService {
+
+    @Resource
+    private AgreementMapper agreementMapper;
+
+
+    /**
+     * 获取协议内容
+     * @param type
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public String queryByType(Integer type) throws Exception {
+        String s = agreementMapper.queryByType(type, 1);
+        if(ToolUtil.isEmpty(s)){
+            s = agreementMapper.queryByType(type, null);
+        }
+        return s;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CancleOrderServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CancleOrderServiceImpl.java
new file mode 100644
index 0000000..e2ebe75
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CancleOrderServiceImpl.java
@@ -0,0 +1,30 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.CancleOrderMapper;
+import com.stylefeng.guns.modular.system.model.CancleOrder;
+import com.stylefeng.guns.modular.system.service.ICancleOrderService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+
+@Service
+public class CancleOrderServiceImpl extends ServiceImpl<CancleOrderMapper, CancleOrder> implements ICancleOrderService {
+
+    @Resource
+    private CancleOrderMapper cancleOrderMapper;
+
+
+    /**
+     * 获取取消订单配置
+     * @param type
+     * @param orderType
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public CancleOrder query(Integer type, Integer orderType, Integer companyId) throws Exception {
+        return cancleOrderMapper.query(type, orderType, companyId);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyCityServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyCityServiceImpl.java
new file mode 100644
index 0000000..d8c87a5
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyCityServiceImpl.java
@@ -0,0 +1,71 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.CompanyCityMapper;
+import com.stylefeng.guns.modular.system.dao.CompanyMapper;
+import com.stylefeng.guns.modular.system.model.Company;
+import com.stylefeng.guns.modular.system.model.CompanyCity;
+import com.stylefeng.guns.modular.system.service.ICompanyCityService;
+import com.stylefeng.guns.modular.system.util.GDMapGeocodingUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class CompanyCityServiceImpl extends ServiceImpl<CompanyCityMapper, CompanyCity> implements ICompanyCityService {
+
+    @Resource
+    private CompanyMapper companyMapper;
+
+    @Autowired
+    private GDMapGeocodingUtil gdMapGeocodingUtil;
+
+
+    /**
+     * 根据经纬度获取所属企业
+     * @param lon
+     * @param lat
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Company query(String lon, String lat) throws Exception {
+        Map<String, String> geocode = gdMapGeocodingUtil.geocode(String.valueOf(lon), String.valueOf(lat));
+        String districtCode = geocode.get("districtCode");
+        Company query = this.query(districtCode);
+        return query;
+    }
+
+
+    /**
+     * 根据行政编号获取所属企业
+     * @param code
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Company query(String code) throws Exception {
+        if(code.equals(""))code="370500";
+        String province = code.substring(0, 2) + "0000";
+        String city = code.substring(0, 4) + "00";
+        List<Company> query = companyMapper.query(province, city, code);
+        if(query.size() == 0){
+            query = companyMapper.query(province, city, null);
+        }
+        if(query.size() == 0){
+            query = companyMapper.query(province, null, null);
+        }
+        for(int i = 3; i > 0; i--){
+            for(Company company : query){
+                if(company.getType() == i){
+                    return company;
+                }
+            }
+        }
+        return null;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyServiceImpl.java
new file mode 100644
index 0000000..b305d08
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyServiceImpl.java
@@ -0,0 +1,12 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.CompanyMapper;
+import com.stylefeng.guns.modular.system.model.Company;
+import com.stylefeng.guns.modular.system.service.ICompanyService;
+import org.springframework.stereotype.Service;
+
+
+@Service
+public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> implements ICompanyService {
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ComplaintServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ComplaintServiceImpl.java
new file mode 100644
index 0000000..c540f5d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ComplaintServiceImpl.java
@@ -0,0 +1,58 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.dao.ComplaintMapper;
+import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper;
+import com.stylefeng.guns.modular.system.model.Complaint;
+import com.stylefeng.guns.modular.system.model.SensitiveWords;
+import com.stylefeng.guns.modular.system.service.IComplaintService;
+import com.stylefeng.guns.modular.system.service.ISystemNoticeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+
+@Service
+public class ComplaintServiceImpl extends ServiceImpl<ComplaintMapper, Complaint> implements IComplaintService {
+
+    @Resource
+    private SensitiveWordsMapper sensitiveWordsMapper;
+
+    @Autowired
+    private ISystemNoticeService systemNoticeService;
+
+
+
+    /**
+     * 添加投诉
+     * @param driverId      司机id
+     * @param reason        投诉原因
+     * @param description   描述
+     * @param uid           投诉人
+     * @throws Exception
+     */
+    @Override
+    public void saveData(Integer driverId, String reason, String description, Integer uid) throws Exception {
+        if(ToolUtil.isNotEmpty(description)){
+            List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null);
+            for(SensitiveWords s : sensitiveWords){
+                description = description.replaceAll(s.getContent(), "***");
+            }
+        }
+        Complaint complaint = new Complaint();
+        complaint.setInsertTime(new Date());
+        complaint.setDriverId(driverId);
+        complaint.setReason(reason);
+        complaint.setDescription(description);
+        complaint.setUserId(uid);
+        complaint.setIsHandle(0);
+        complaint.setType(1);
+        this.insert(complaint);
+
+        systemNoticeService.addSystemNotice(1, "您的投诉已提交成功,我们会尽快处理!", uid, 1);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DeptServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DeptServiceImpl.java
new file mode 100644
index 0000000..0463d01
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DeptServiceImpl.java
@@ -0,0 +1,47 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.node.ZTreeNode;
+import com.stylefeng.guns.modular.system.dao.DeptMapper;
+import com.stylefeng.guns.modular.system.model.Dept;
+import com.stylefeng.guns.modular.system.service.IDeptService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Transactional
+public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements IDeptService {
+
+    @Resource
+    private DeptMapper deptMapper;
+
+    @Override
+    public void deleteDept(Integer deptId) {
+        Dept dept = deptMapper.selectById(deptId);
+
+        Wrapper<Dept> wrapper = new EntityWrapper<>();
+        wrapper = wrapper.like("pids", "%[" + dept.getId() + "]%");
+        List<Dept> subDepts = deptMapper.selectList(wrapper);
+        for (Dept temp : subDepts) {
+            temp.deleteById();
+        }
+
+        dept.deleteById();
+    }
+
+    @Override
+    public List<ZTreeNode> tree() {
+        return this.baseMapper.tree();
+    }
+
+    @Override
+    public List<Map<String, Object>> list(String condition) {
+        return this.baseMapper.list(condition);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DictServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DictServiceImpl.java
new file mode 100644
index 0000000..6757882
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DictServiceImpl.java
@@ -0,0 +1,101 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.exception.GunsException;
+import com.stylefeng.guns.modular.system.dao.DictMapper;
+import com.stylefeng.guns.modular.system.model.Dict;
+import com.stylefeng.guns.modular.system.service.IDictService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+import static com.stylefeng.guns.core.common.constant.factory.MutiStrFactory.*;
+
+@Service
+@Transactional
+public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements IDictService {
+
+    @Resource
+    private DictMapper dictMapper;
+
+    @Override
+    public void addDict(String dictCode,String dictName,String dictTips, String dictValues) {
+        //判断有没有该字典
+        List<Dict> dicts = dictMapper.selectList(new EntityWrapper<Dict>().eq("code", dictCode).and().eq("pid", 0));
+        if (dicts != null && dicts.size() > 0) {
+            throw new GunsException(BizExceptionEnum.DICT_EXISTED);
+        }
+
+        //解析dictValues
+        List<Map<String, String>> items = parseKeyValue(dictValues);
+
+        //添加字典
+        Dict dict = new Dict();
+        dict.setName(dictName);
+        dict.setCode(dictCode);
+        dict.setTips(dictTips);
+        dict.setNum(0);
+        dict.setPid(0);
+        this.dictMapper.insert(dict);
+
+        //添加字典条目
+        for (Map<String, String> item : items) {
+            String code = item.get(MUTI_STR_CODE);
+            String name = item.get(MUTI_STR_NAME);
+            String num = item.get(MUTI_STR_NUM);
+            Dict itemDict = new Dict();
+            itemDict.setPid(dict.getId());
+            itemDict.setCode(code);
+            itemDict.setName(name);
+
+            try {
+                itemDict.setNum(Integer.valueOf(num));
+            } catch (NumberFormatException e) {
+                throw new GunsException(BizExceptionEnum.DICT_MUST_BE_NUMBER);
+            }
+            this.dictMapper.insert(itemDict);
+        }
+    }
+
+    @Override
+    public void editDict(Integer dictId,String dictCode, String dictName,String dictTips, String dicts) {
+        //删除之前的字典
+        this.delteDict(dictId);
+
+        //重新添加新的字典
+        this.addDict(dictCode,dictName,dictTips, dicts);
+    }
+
+    @Override
+    public void delteDict(Integer dictId) {
+        //删除这个字典的子词典
+        Wrapper<Dict> dictEntityWrapper = new EntityWrapper<>();
+        dictEntityWrapper = dictEntityWrapper.eq("pid", dictId);
+        dictMapper.delete(dictEntityWrapper);
+
+        //删除这个词典
+        dictMapper.deleteById(dictId);
+    }
+
+    @Override
+    public List<Dict> selectByCode(String code) {
+        return this.baseMapper.selectByCode(code);
+    }
+
+    @Override
+    public List<Dict> selectByParentCode(String code) {
+        return this.baseMapper.selectByParentCode(code);
+    }
+
+
+    @Override
+    public List<Map<String, Object>> list(String conditiion) {
+        return this.baseMapper.list(conditiion);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOrdersServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOrdersServiceImpl.java
new file mode 100644
index 0000000..6468f6f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverOrdersServiceImpl.java
@@ -0,0 +1,50 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.DriverOrdersMapper;
+import com.stylefeng.guns.modular.system.model.DriverOrders;
+import com.stylefeng.guns.modular.system.service.IDriverOrdersService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+
+@Service
+public class DriverOrdersServiceImpl extends ServiceImpl<DriverOrdersMapper, DriverOrders> implements IDriverOrdersService {
+
+    @Resource
+    private DriverOrdersMapper driverOrdersMapper;
+
+
+    /**
+     * 接单设置
+     * @param uid
+     * @param type
+     * @throws Exception
+     */
+    @Override
+    public void updateOrders(Integer uid, Integer type) throws Exception {
+        DriverOrders query = driverOrdersMapper.query(uid, type);
+        if(null == query){
+            query = new DriverOrders();
+            query.setDriverId(uid);
+            query.setType(type);
+            this.insert(query);
+        }else{
+            this.deleteById(query.getId());
+        }
+    }
+
+
+    /**
+     * 获取推单设置
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Integer> queryOrders(Integer uid) throws Exception {
+        return driverOrdersMapper.queryOrders(uid);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
new file mode 100644
index 0000000..2161e58
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -0,0 +1,180 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.DriverMapper;
+import com.stylefeng.guns.modular.system.dao.DriverServiceMapper;
+import com.stylefeng.guns.modular.system.model.Company;
+import com.stylefeng.guns.modular.system.model.Driver;
+import com.stylefeng.guns.modular.system.model.DriverService;
+import com.stylefeng.guns.modular.system.service.ICompanyCityService;
+import com.stylefeng.guns.modular.system.service.IDriverService;
+import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil;
+import com.stylefeng.guns.modular.system.util.GeodesyUtil;
+import com.stylefeng.guns.modular.system.util.RedisUtil;
+import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class DriverServiceImpl extends ServiceImpl<DriverMapper, Driver> implements IDriverService {
+
+    @Resource
+    private DriverMapper driverMapper;
+
+    @Resource
+    private DriverServiceMapper driverServiceMapper;
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private GDMapElectricFenceUtil gdMapElectricFenceUtil;
+
+    @Autowired
+    private ICompanyCityService companyCityService;
+
+    @Autowired
+    private GeodesyUtil geodesyUtil;
+
+
+
+    /**
+     * 获取distance公里内空闲司机数量
+     * @param type  业务类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)
+     * @param lon
+     * @param lat
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Driver> queryIdleDriver(Integer type, Double lon, Double lat, Double distance, Integer companyId) throws Exception {
+        List<Driver> drivers = driverMapper.queryIdleDriver(type, companyId);
+        System.err.println("-----当前查询到的司机"+drivers);
+        List<Driver> list = new ArrayList<>();
+        for(Driver driver : drivers){
+            String value = redisUtil.getValue("DRIVER" + String.valueOf(driver.getId()));
+            if(null != value){
+//                Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(lon + "," + lat, value, 0);//计算距离
+                Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value);
+                double d = Double.valueOf(distance1.get("WGS84")).doubleValue();
+                System.out.println("距离====》"+d+"distance======>"+distance);
+                if(d < (distance * 1000)){
+                    list.add(driver);
+                }
+            }
+        }
+        System.err.println("-----符合条件的司机"+list);
+
+        return list;
+    }
+
+
+    @Override
+    public List<Driver> queryIdleDriverAll(Integer type, Double lon, Double lat, Double distance, Integer companyId) throws Exception {
+        List<Driver> drivers = driverMapper.queryIdleDriver(type, companyId);
+        System.err.println("-----当前查询到的司机"+drivers);
+        List<Driver> list = new ArrayList<>();
+        for(Driver driver : drivers){
+
+                    list.add(driver);
+
+
+        }
+        System.err.println("-----符合条件的司机"+list);
+
+        return list;
+    }
+
+
+    /**
+     * 获取给定车型且空闲的司机
+     * @param type
+     * @param serverCarModelId
+     * @param lon
+     * @param lat
+     * @param distance
+     * @param companyId
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Driver> queryIdleDriver(Integer type, Integer serverCarModelId, Double lon, Double lat, Double distance, Integer companyId) throws Exception {
+        List<Driver> drivers = driverMapper.queryIdleDriver_(type, serverCarModelId, companyId);
+        List<Driver> list = new ArrayList<>();
+        for(Driver driver : drivers){
+            String value = redisUtil.getValue("DRIVER" + String.valueOf(driver.getId()));
+            if(null != value){
+//                Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(lon + "," + lat, value, 0);//计算距离
+                Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value);
+                double d = Double.valueOf(distance1.get("WGS84")).doubleValue();
+                if(d < (distance * 1000)){
+                    list.add(driver);
+                }
+            }
+        }
+        return list;
+    }
+
+
+    /**
+     * 根据订单id获取司机数据
+     * @param orderId
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Map<String, Object> queryOrderDriver(Integer orderId, Integer orderType) throws Exception {
+        return driverMapper.queryOrderDriver(orderId, orderType);
+    }
+
+
+    /**
+     * 获取司机详情
+     * @param id
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Map<String, Object> queryDriverInfo(Integer id) throws Exception {
+        Map<String, Object> map = driverMapper.queryDriverInfo(id);
+        return map;
+    }
+
+
+    /**
+     * 获取司机的业务类型
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<BaseWarpper> queryBusiness(Integer uid) throws Exception {
+        List<DriverService> list = driverServiceMapper.queryBusiness(uid, null);
+        List<BaseWarpper> maps = new ArrayList<>();
+        for (DriverService d : list){
+            if(d.getType() == 4 || d.getType() == 5 ||d.getType() == 6){
+                continue;
+            }
+            BaseWarpper baseWarpper = new BaseWarpper();
+            baseWarpper.setId(d.getType());
+            switch (d.getType()){
+                case 1:
+                    baseWarpper.setName("专车");
+                    break;
+                case 2:
+                    baseWarpper.setName("出租车");
+                    break;
+                case 3:
+                    baseWarpper.setName("跨城出行");
+                    break;
+            }
+            maps.add(baseWarpper);
+        }
+        return maps;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceServiceImpl.java
new file mode 100644
index 0000000..d77a3af
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceServiceImpl.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.DriverServiceMapper;
+import com.stylefeng.guns.modular.system.model.DriverService;
+import com.stylefeng.guns.modular.system.service.IDriverServiceService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+
+@Service
+public class DriverServiceServiceImpl extends ServiceImpl<DriverServiceMapper, DriverService> implements IDriverServiceService {
+
+    @Resource
+    private DriverServiceMapper driverServiceMapper;
+
+
+    /**
+     * 获取司机服务业务
+     * @param driverId
+     * @param type
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<DriverService> query(Integer driverId, Integer... type) throws Exception {
+        return driverServiceMapper.queryBusiness(driverId, type);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FeedbackServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FeedbackServiceImpl.java
new file mode 100644
index 0000000..8ac04d8
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/FeedbackServiceImpl.java
@@ -0,0 +1,62 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.dao.FeedbackMapper;
+import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper;
+import com.stylefeng.guns.modular.system.model.Feedback;
+import com.stylefeng.guns.modular.system.model.SensitiveWords;
+import com.stylefeng.guns.modular.system.service.IFeedbackService;
+import com.stylefeng.guns.modular.system.service.ISystemNoticeService;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+
+@Service
+public class FeedbackServiceImpl extends ServiceImpl<FeedbackMapper, Feedback> implements IFeedbackService {
+
+    @Resource
+    private SensitiveWordsMapper sensitiveWordsMapper;
+
+    @Autowired
+    private ISystemNoticeService systemNoticeService;
+
+
+
+
+    /**
+     * 反馈操作
+     * @param content
+     * @param uid
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil feedback(String content, Integer uid) throws Exception {
+        if(ToolUtil.isNotEmpty(content)){
+            if(content.length() > 200){
+                return ResultUtil.error("反馈内容过长");
+            }
+            List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null);
+            for(SensitiveWords s : sensitiveWords){
+                content = content.replaceAll(s.getContent(), "***");
+            }
+        }
+
+        Feedback feedback = new Feedback();
+        feedback.setContent(content);
+        feedback.setFlag(1);
+        feedback.setInsertTime(new Date());
+        feedback.setState(1);
+        feedback.setType(1);
+        feedback.setUserId(uid);
+        this.insert(feedback);
+
+        systemNoticeService.addSystemNotice(1, "您的反馈已提交成功,我们会尽快处理!", uid, 1);
+        return ResultUtil.success();
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/GDInterfaceServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/GDInterfaceServiceImpl.java
new file mode 100644
index 0000000..95e4438
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/GDInterfaceServiceImpl.java
@@ -0,0 +1,39 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.GDInterfaceMapper;
+import com.stylefeng.guns.modular.system.model.GDInterface;
+import com.stylefeng.guns.modular.system.service.IGDInterfaceService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+
+@Service
+public class GDInterfaceServiceImpl extends ServiceImpl<GDInterfaceMapper, GDInterface> implements IGDInterfaceService {
+
+    @Resource
+    private GDInterfaceMapper gdInterfaceMapper;
+
+
+
+    @Override
+    public void saveData(String name, String explanation) {
+        Date date = new Date();
+        SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd");
+        GDInterface query = gdInterfaceMapper.query(name, explanation, sdf.format(date));
+        if(null == query){
+            query = new GDInterface();
+            query.setName(name);
+            query.setExplanation(explanation);
+            query.setTime(sdf.format(date));
+            query.setNum(1);
+            this.insert(query);
+        }else{
+            query.setNum(query.getNum() + 1);
+            this.updateById(query);
+        }
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java
new file mode 100644
index 0000000..2fa2538
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java
@@ -0,0 +1,37 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.IncomeMapper;
+import com.stylefeng.guns.modular.system.model.Income;
+import com.stylefeng.guns.modular.system.service.IIncomeService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+
+@Service
+public class IncomeServiceImpl extends ServiceImpl<IncomeMapper, Income> implements IIncomeService {
+
+
+    /**
+     * 添加数据
+     * @param userType
+     * @param objectId
+     * @param type
+     * @param incomeId
+     * @param money
+     * @throws Exception
+     */
+    @Override
+    public void saveData(Integer userType, Integer objectId, Integer type, Integer incomeId, Integer orderType, Double money) throws Exception {
+        Income income = new Income();
+        income.setUserType(userType);
+        income.setObjectId(objectId);
+        income.setType(type);
+        income.setIncomeId(incomeId);
+        income.setOrderType(orderType);
+        income.setMoney(money);
+        income.setInsertTime(new Date());
+        this.insert(income);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IntegralGoodsServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IntegralGoodsServiceImpl.java
new file mode 100644
index 0000000..ec5ee5e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IntegralGoodsServiceImpl.java
@@ -0,0 +1,44 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.IntegralGoodsMapper;
+import com.stylefeng.guns.modular.system.model.IntegralGoods;
+import com.stylefeng.guns.modular.system.service.IIntegralGoodsService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class IntegralGoodsServiceImpl extends ServiceImpl<IntegralGoodsMapper, IntegralGoods> implements IIntegralGoodsService {
+
+    @Resource
+    private IntegralGoodsMapper integralGoodsMapper;
+
+
+
+    /**
+     * 获取商品列表
+     * @param pageNum
+     * @param size
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> queryGoods(Integer pageNum, Integer size) throws Exception {
+        pageNum = (pageNum - 1) * size;
+        return integralGoodsMapper.queryGoods(pageNum, size);
+    }
+
+    /**
+     * 获取详情
+     * @param id
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Map<String, Object> queryGoodsInfo(Integer id) throws Exception {
+        return integralGoodsMapper.queryGoodsInfo(id);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IntegralOrderServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IntegralOrderServiceImpl.java
new file mode 100644
index 0000000..31ebbd0
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IntegralOrderServiceImpl.java
@@ -0,0 +1,84 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.IntegralOrderMapper;
+import com.stylefeng.guns.modular.system.model.IntegralGoods;
+import com.stylefeng.guns.modular.system.model.IntegralOrder;
+import com.stylefeng.guns.modular.system.model.UserInfo;
+import com.stylefeng.guns.modular.system.service.IIntegralGoodsService;
+import com.stylefeng.guns.modular.system.service.IIntegralOrderService;
+import com.stylefeng.guns.modular.system.service.ISystemNoticeService;
+import com.stylefeng.guns.modular.system.service.IUserInfoService;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class IntegralOrderServiceImpl extends ServiceImpl<IntegralOrderMapper, IntegralOrder> implements IIntegralOrderService {
+
+    @Resource
+    private IntegralOrderMapper integralOrderMapper;
+
+    @Autowired
+    private IUserInfoService userInfoService;
+
+    @Autowired
+    private IIntegralGoodsService integralGoodsService;
+
+    @Autowired
+    private ISystemNoticeService systemNoticeService;
+
+    @Autowired
+    private ITransactionDetailsService transactionDetailsService;
+
+
+    /**
+     * 保存订单
+     * @param integralOrder
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil addIntegralOrder(IntegralOrder integralOrder, Integer uid) throws Exception {
+        IntegralGoods integralGoods = integralGoodsService.selectById(integralOrder.getGoodsId());
+        UserInfo userInfo = userInfoService.selectById(uid);
+        if(integralGoods.getIntegral().compareTo(userInfo.getIntegral()) > 0){
+            return ResultUtil.error("兑换失败,积分不足!");
+        }
+        integralOrder.setInsertTime(new Date());
+        integralGoods.setIntegral(integralGoods.getIntegral());
+        integralOrder.setNum(1);
+        integralOrder.setState(1);
+        integralOrder.setUserId(uid);
+        this.insert(integralOrder);
+
+        userInfo.setIntegral(userInfo.getIntegral() - integralGoods.getIntegral());
+        userInfoService.updateById(userInfo);
+
+        //添加消息
+        systemNoticeService.addSystemNotice(1, "您使用" + integralGoods.getIntegral() + "积分成功兑换" + integralGoods.getName() + "商品!", uid, 1);
+        //添加交易明细
+        transactionDetailsService.saveData(uid, "积分兑换", integralGoods.getIntegral().doubleValue(), 2, 2, 1, 7, integralOrder.getId());
+        return ResultUtil.success();
+    }
+
+    /**
+     * 获取历史记录
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> queryConvertHistory(Integer pageNum, Integer size, Integer uid) throws Exception {
+        pageNum = (pageNum - 1) * size;
+        return integralOrderMapper.queryConvertHistory(pageNum, size, uid);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java
new file mode 100644
index 0000000..2502751
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java
@@ -0,0 +1,109 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.InvoiceMapper;
+import com.stylefeng.guns.modular.system.model.Invoice;
+import com.stylefeng.guns.modular.system.service.IInvoiceService;
+import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
+import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> implements IInvoiceService {
+
+    @Resource
+    private InvoiceMapper invoiceMapper;
+
+    @Autowired
+    private IOrderTaxiService orderTaxiService;
+
+
+
+    /**
+     * 申请开票操作
+     * @param invoice
+     * @param order
+     * @throws Exception
+     */
+    @Override
+    public void invoicing(Invoice invoice, String order, Integer uid) throws Exception {
+        JSONArray jsonArray = JSON.parseArray(order);
+        BigDecimal sum = new BigDecimal(0);
+        for(int i = 0; i < jsonArray.size(); i++){
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            Integer orderType = jsonObject.getIntValue("type");
+            Integer orderId = jsonObject.getIntValue("id");
+            switch (orderType){
+                case 1://专车
+                    break;
+                case 2://出租车
+                    OrderTaxi orderTaxi = orderTaxiService.selectById(orderId);
+                    sum.add(new BigDecimal(orderTaxi.getPayMoney()));
+                    break;
+                case 3://跨城出行
+                    break;
+                case 4://同城小件物流
+                    break;
+                case 5://跨城小件物流
+                    break;
+            }
+        }
+
+        invoice.setOrderNum(jsonArray.size());
+        invoice.setMoney(sum.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+        invoice.setUserId(uid);
+        invoice.setInsertTime(new Date());
+        invoice.setState(1);
+        this.insert(invoice);
+        // TODO: 2020/6/9 调用开发票第三方SDK
+
+
+        for(int i = 0; i < jsonArray.size(); i++){
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            Integer orderType = jsonObject.getIntValue("type");
+            Integer orderId = jsonObject.getIntValue("id");
+            switch (orderType){
+                case 1://专车
+                    break;
+                case 2://出租车
+                    OrderTaxi orderTaxi = orderTaxiService.selectById(orderId);
+                    orderTaxi.setInvoiceId(invoice.getId());
+                    orderTaxiService.updateById(orderTaxi);
+                    break;
+                case 3://跨城出行
+                    break;
+                case 4://同城小件物流
+                    break;
+                case 5://跨城小件物流
+                    break;
+            }
+        }
+
+    }
+
+
+    /**
+     * 获取发票历史记录
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> queryMyInvoice(Integer pageNum, Integer size, Integer uid) throws Exception {
+        pageNum = (pageNum - 1) * size;
+        return invoiceMapper.queryMyInvoice(pageNum, size, uid);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/LoginLogServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/LoginLogServiceImpl.java
new file mode 100644
index 0000000..f4d7b6f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/LoginLogServiceImpl.java
@@ -0,0 +1,28 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.LoginLogMapper;
+import com.stylefeng.guns.modular.system.model.LoginLog;
+import com.stylefeng.guns.modular.system.service.ILoginLogService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 登录记录 服务实现类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+@Service
+public class LoginLogServiceImpl extends ServiceImpl<LoginLogMapper, LoginLog> implements ILoginLogService {
+
+    @Override
+    public List<Map<String, Object>> getLoginLogs(Page<LoginLog> page, String beginTime, String endTime, String logName, String orderByField, boolean asc) {
+        return this.baseMapper.getLoginLogs(page, beginTime, endTime, logName, orderByField, asc);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/MenuServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/MenuServiceImpl.java
new file mode 100644
index 0000000..fd40c3e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/MenuServiceImpl.java
@@ -0,0 +1,90 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.node.MenuNode;
+import com.stylefeng.guns.core.node.ZTreeNode;
+import com.stylefeng.guns.modular.system.dao.MenuMapper;
+import com.stylefeng.guns.modular.system.model.Menu;
+import com.stylefeng.guns.modular.system.service.IMenuService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 菜单服务
+ *
+ * @author fengshuonan
+ * @date 2017-05-05 22:20
+ */
+@Service
+public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
+
+    @Resource
+    private MenuMapper menuMapper;
+
+    @Override
+    public void delMenu(Long menuId) {
+
+        //删除菜单
+        this.menuMapper.deleteById(menuId);
+
+        //删除关联的relation
+        this.menuMapper.deleteRelationByMenu(menuId);
+    }
+
+    @Override
+    public void delMenuContainSubMenus(Long menuId) {
+
+        Menu menu = menuMapper.selectById(menuId);
+
+        //删除当前菜单
+        delMenu(menuId);
+
+        //删除所有子菜单
+        Wrapper<Menu> wrapper = new EntityWrapper<>();
+        wrapper = wrapper.like("pcodes", "%[" + menu.getCode() + "]%");
+        List<Menu> menus = menuMapper.selectList(wrapper);
+        for (Menu temp : menus) {
+            delMenu(temp.getId());
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> selectMenus(String condition, String level) {
+        return this.baseMapper.selectMenus(condition, level);
+    }
+
+    @Override
+    public List<Long> getMenuIdsByRoleId(Integer roleId) {
+        return this.baseMapper.getMenuIdsByRoleId(roleId);
+    }
+
+    @Override
+    public List<ZTreeNode> menuTreeList() {
+        return this.baseMapper.menuTreeList();
+    }
+
+    @Override
+    public List<ZTreeNode> menuTreeListByMenuIds(List<Long> menuIds) {
+        return this.baseMapper.menuTreeListByMenuIds(menuIds);
+    }
+
+    @Override
+    public int deleteRelationByMenu(Long menuId) {
+        return this.baseMapper.deleteRelationByMenu(menuId);
+    }
+
+    @Override
+    public List<String> getResUrlsByRoleId(Integer roleId) {
+        return this.baseMapper.getResUrlsByRoleId(roleId);
+    }
+
+    @Override
+    public List<MenuNode> getMenusByRoleIds(List<Integer> roleIds) {
+        return this.baseMapper.getMenusByRoleIds(roleIds);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java
new file mode 100644
index 0000000..d7cf23d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java
@@ -0,0 +1,76 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
+import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
+import com.stylefeng.guns.modular.system.service.INettyService;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.warpper.EndPushWarpper;
+import com.stylefeng.guns.modular.system.warpper.OrderServerWarpper;
+import com.stylefeng.guns.modular.system.warpper.OrderStatusWarpper;
+import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Service
+public class NettyServiceImpl implements INettyService {
+
+    @Autowired
+    private IOrderTaxiService orderTaxiService;
+
+    @Autowired
+    private IOrderPrivateCarService orderPrivateCarService;
+
+    @Autowired
+    private IOrderCrossCityService orderCrossCityService;
+
+
+    /**
+     * 获取下单推送完后没有司机接单的提醒
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil<EndPushWarpper> queryEndPush(Integer orderId, Integer orderType, Integer uid) throws Exception {
+        EndPushWarpper endPushWarpper = null;
+        switch (orderType){
+            case 1:
+                endPushWarpper = orderPrivateCarService.queryEndPush(uid);
+                break;
+            case 2:
+                endPushWarpper = orderTaxiService.queryEndPush(uid);
+                break;
+        }
+        return ResultUtil.success(endPushWarpper);
+    }
+
+
+
+
+    /**
+     * 获取服务中的订单数据
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil<OrderServerWarpper> queryOrderServer(Integer orderId, Integer orderType, Integer uid) throws Exception {
+        OrderServerWarpper orderServerWarpper = null;
+        switch (orderType){
+            case 1:
+                orderServerWarpper = orderPrivateCarService.queryOrderServer(orderId, uid);//专车
+                break;
+            case 2:
+                orderServerWarpper = orderTaxiService.queryOrderServer(orderId, uid);//出租车
+                break;
+            case 3:
+                orderServerWarpper = orderCrossCityService.queryOrderServer(orderId, uid);//出租车
+                break;
+        }
+        return ResultUtil.success(orderServerWarpper);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NoticeServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NoticeServiceImpl.java
new file mode 100644
index 0000000..68b1b52
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NoticeServiceImpl.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.NoticeMapper;
+import com.stylefeng.guns.modular.system.model.Notice;
+import com.stylefeng.guns.modular.system.service.INoticeService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 通知表 服务实现类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+@Service
+public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> implements INoticeService {
+
+    @Override
+    public List<Map<String, Object>> list(String condition) {
+        return this.baseMapper.list(condition);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityBusinessServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityBusinessServiceImpl.java
new file mode 100644
index 0000000..20720c1
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityBusinessServiceImpl.java
@@ -0,0 +1,116 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.OpenCityBusinessMapper;
+import com.stylefeng.guns.modular.system.model.OpenCityBusiness;
+import com.stylefeng.guns.modular.system.service.IOpenCityBusinessService;
+import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Service
+public class OpenCityBusinessServiceImpl extends ServiceImpl<OpenCityBusinessMapper, OpenCityBusiness> implements IOpenCityBusinessService {
+
+    @Resource
+    private OpenCityBusinessMapper openCityBusinessMapper;
+
+
+    /**
+     * 获取业务类型
+     * @param province  省名
+     * @param city      市名称
+     * @param district  区县名称
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<BaseWarpper> queryBusiness(String province, String city, String district) throws Exception {
+        List<OpenCityBusiness> openCityBusinesses = openCityBusinessMapper.queryBusiness(province, city, district);
+        if(openCityBusinesses.size() == 0){
+            openCityBusinesses = openCityBusinessMapper.queryBusiness(province, city, null);
+        }
+        if(openCityBusinesses.size() == 0){
+            openCityBusinesses = openCityBusinessMapper.queryBusiness(province, null, null);
+        }
+        List<BaseWarpper> list = new ArrayList<>();
+        for(OpenCityBusiness b : openCityBusinesses){
+            BaseWarpper baseWarpper = new BaseWarpper();
+            switch (b.getBusinessType()){
+                case 1:
+                    baseWarpper.setName("专车");
+                    baseWarpper.setId(1);
+                    break;
+                case 2:
+                    baseWarpper.setName("出租车");
+                    baseWarpper.setId(2);
+                    break;
+                case 3:
+                    baseWarpper.setName("跨城出行");
+                    baseWarpper.setId(3);
+                    break;
+                case 4:
+                    baseWarpper.setName("同城小件物流");
+                    baseWarpper.setId(4);
+                    break;
+                case 5:
+                    baseWarpper.setName("跨城小件物流");
+                    baseWarpper.setId(5);
+                    break;
+                case 6:
+                    baseWarpper.setName("包车");
+                    baseWarpper.setId(6);
+                    break;
+            }
+            list.add(baseWarpper);
+        }
+        return list;
+    }
+
+
+    /**
+     * 根据开通的城市id获取业务类型
+     * @param id
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<BaseWarpper> queryBusinessById(Integer id) throws Exception {
+        List<OpenCityBusiness> openCityBusinesses = openCityBusinessMapper.queryBusinessById(id);
+        List<BaseWarpper> list = new ArrayList<>();
+        for(OpenCityBusiness b : openCityBusinesses){
+            BaseWarpper baseWarpper = new BaseWarpper();
+            switch (b.getBusinessType()){
+                case 1:
+                    baseWarpper.setName("专车");
+                    baseWarpper.setId(1);
+                    break;
+                case 2:
+                    baseWarpper.setName("出租车");
+                    baseWarpper.setId(2);
+                    break;
+                case 3:
+                    baseWarpper.setName("跨城出行");
+                    baseWarpper.setId(3);
+                    break;
+                case 4:
+                    baseWarpper.setName("同城小件物流");
+                    baseWarpper.setId(4);
+                    break;
+                case 5:
+                    baseWarpper.setName("跨城小件物流");
+                    baseWarpper.setId(5);
+                    break;
+                case 6:
+                    baseWarpper.setName("包车");
+                    baseWarpper.setId(6);
+                    break;
+            }
+            list.add(baseWarpper);
+        }
+        return list;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityServiceImpl.java
new file mode 100644
index 0000000..701bdd7
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityServiceImpl.java
@@ -0,0 +1,69 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.dao.OpenCityMapper;
+import com.stylefeng.guns.modular.system.model.OpenCity;
+import com.stylefeng.guns.modular.system.service.IOpenCityService;
+import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Service
+public class OpenCityServiceImpl extends ServiceImpl<OpenCityMapper, OpenCity> implements IOpenCityService {
+
+    @Resource
+    private OpenCityMapper openCityMapper;
+
+
+    /**
+     * 获取开通城市列表
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<BaseWarpper> queryOpenCity() throws Exception {
+        List<OpenCity> openCities = openCityMapper.queryOpenCity();
+        List<BaseWarpper> list = new ArrayList<>();
+        for(OpenCity c : openCities){
+            BaseWarpper baseWarpper = new BaseWarpper();
+            baseWarpper.setId(c.getId());
+            baseWarpper.setName(ToolUtil.isEmpty(c.getProvinceName())  ?
+                    (ToolUtil.isEmpty(c.getCityName()) ? (ToolUtil.isEmpty(c.getAreaName()) ? "" : c.getAreaName()) : c.getCityName()) : c.getProvinceName());
+            baseWarpper.setLon(null != c.getLon() ? c.getLon() : 0);
+            baseWarpper.setLat(null != c.getLat() ? c.getLat() : 0);
+            baseWarpper.setContent(c.getCode());
+            baseWarpper.setName(baseWarpper.getName().replaceAll("市辖区", ""));
+            list.add(baseWarpper);
+        }
+        return list;
+    }
+
+
+    /**
+     * 判断是否是开通城市
+     * @param code
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public boolean openCity(String code) throws Exception {
+        String province = code==""?"":code.substring(0, 2) + "0000";
+        String city = code==""?"":code.substring(0, 4) + "00";
+        List<OpenCity> openCities = openCityMapper.queryByCode(code);
+        if(openCities.size() == 0){
+            openCities = openCityMapper.queryByCode(city);
+        }
+        if(openCities.size() == 0){
+            openCities = openCityMapper.queryByCode(province);
+        }
+        if(openCities.size() == 0){
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OperationLogServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OperationLogServiceImpl.java
new file mode 100644
index 0000000..8b58018
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OperationLogServiceImpl.java
@@ -0,0 +1,28 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.OperationLogMapper;
+import com.stylefeng.guns.modular.system.model.OperationLog;
+import com.stylefeng.guns.modular.system.service.IOperationLogService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 操作日志 服务实现类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+@Service
+public class OperationLogServiceImpl extends ServiceImpl<OperationLogMapper, OperationLog> implements IOperationLogService {
+
+    @Override
+    public List<Map<String, Object>> getOperationLogs(Page<OperationLog> page, String beginTime, String endTime, String logName, String s, String orderByField, boolean asc) {
+        return this.baseMapper.getOperationLogs(page, beginTime, endTime, logName, s, orderByField, asc);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCancelServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCancelServiceImpl.java
new file mode 100644
index 0000000..f5abbcd
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCancelServiceImpl.java
@@ -0,0 +1,84 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.OrderCancelMapper;
+import com.stylefeng.guns.modular.system.model.OrderCancel;
+import com.stylefeng.guns.modular.system.service.IOrderCancelService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+@Transactional(isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+public class OrderCancelServiceImpl extends ServiceImpl<OrderCancelMapper, OrderCancel> implements IOrderCancelService {
+
+    @Resource
+    private OrderCancelMapper orderCancelMapper;
+
+
+
+    /**
+     * 添加数据
+     * @param orderId
+     * @param orderType
+     * @param reason
+     * @param remark
+     * @param payType
+     * @param money
+     * @param state
+     * @throws Exception
+     */
+    @Override
+    public Integer saveData(Integer orderId, Integer orderType, String reason, String remark, Integer payType,
+                            Double money, Integer state, Integer userType, Integer uid) throws Exception {
+        OrderCancel orderCancel = new OrderCancel();
+        orderCancel.setOrderId(orderId);
+        orderCancel.setOrderType(orderType);
+        orderCancel.setReason(reason);
+        orderCancel.setRemark(remark);
+        orderCancel.setPayType(payType);
+        orderCancel.setMoney(money);
+        orderCancel.setState(state);
+        orderCancel.setInsertTime(new Date());
+        orderCancel.setUserType(userType);
+        orderCancel.setUserId(uid);
+        this.insert(orderCancel);
+        return orderCancel.getId();
+    }
+
+
+    /**
+     * 获取取消数据
+     * @param orderId
+     * @param orderType
+     * @param money
+     * @param payType
+     * @param state
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public OrderCancel query(Integer orderId, Integer orderType, Double money, Integer payType, Integer state) throws Exception {
+        return orderCancelMapper.query(orderId, orderType, money, payType, state);
+    }
+
+
+    /**
+     * 获取用户取消记录
+     * @param uid
+     * @param isPay
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> queryCancel(Integer uid, Integer isPay) throws Exception {
+        return orderCancelMapper.queryCancel(uid, isPay);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderEvaluateServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderEvaluateServiceImpl.java
new file mode 100644
index 0000000..04166a4
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderEvaluateServiceImpl.java
@@ -0,0 +1,117 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
+import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
+import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
+import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
+import com.stylefeng.guns.modular.system.dao.OrderEvaluateMapper;
+import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper;
+import com.stylefeng.guns.modular.system.model.OrderEvaluate;
+import com.stylefeng.guns.modular.system.model.SensitiveWords;
+import com.stylefeng.guns.modular.system.service.IOrderEvaluateService;
+import com.stylefeng.guns.modular.system.service.ISystemNoticeService;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
+import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class OrderEvaluateServiceImpl extends ServiceImpl<OrderEvaluateMapper, OrderEvaluate> implements IOrderEvaluateService {
+
+    @Resource
+    private OrderEvaluateMapper orderEvaluateMapper;
+
+    @Autowired
+    private IOrderTaxiService orderTaxiService;
+
+    @Resource
+    private SensitiveWordsMapper sensitiveWordsMapper;
+
+    @Autowired
+    private ISystemNoticeService systemNoticeService;
+
+    @Autowired
+    private IOrderPrivateCarService orderPrivateCarService;
+
+    @Autowired
+    private IOrderCrossCityService orderCrossCityService;
+
+
+
+
+
+    /**
+     * 添加评价数据
+     * @param orderId
+     * @param orderType
+     * @param fraction
+     * @param content
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil saveData(Integer orderId, Integer orderType, Integer fraction, String content) throws Exception {
+        if(ToolUtil.isNotEmpty(content)){
+            if(null != content && content.length() > 500){
+                return ResultUtil.error("评价内容过长");
+            }
+            List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null);
+            for(SensitiveWords s : sensitiveWords){
+                content = content.replaceAll(s.getContent(), "***");
+            }
+        }
+        OrderEvaluate orderEvaluate = new OrderEvaluate();
+        Integer driverId = null;
+        Integer uid = null;
+        switch (orderType){
+            case 1:
+                OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
+                driverId = orderPrivateCar.getDriverId();
+                uid = orderPrivateCar.getUserId();
+                break;
+            case 2:
+                OrderTaxi orderTaxi = orderTaxiService.selectById(orderId);
+                driverId = orderTaxi.getDriverId();
+                uid = orderTaxi.getUserId();
+                break;
+            case 3:
+                OrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId);
+                driverId = orderCrossCity.getDriverId();
+                uid = orderCrossCity.getUserId();
+                break;
+        }
+
+        orderEvaluate.setOrderId(orderId);
+        orderEvaluate.setDriverId(driverId);
+        orderEvaluate.setOrderType(orderType);
+        orderEvaluate.setFraction(fraction);
+        orderEvaluate.setContent(content);
+        orderEvaluate.setInsertTime(new Date());
+        orderEvaluate.setUserId(uid);
+        this.insert(orderEvaluate);
+
+        systemNoticeService.addSystemNotice(1, "您已成功添加订单评价,谢谢使用!", uid, 1);
+        return ResultUtil.success(orderEvaluate.getId());
+    }
+
+
+    /**
+     * 获取司机的历史评价数据
+     * @param driverId
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> queryOrderEvaluate(Integer driverId, Integer pageNum, Integer size) throws Exception {
+        pageNum = (pageNum - 1) * size;
+        return orderEvaluateMapper.queryOrderEvaluate(driverId, pageNum, size);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java
new file mode 100644
index 0000000..7ee14e8
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java
@@ -0,0 +1,98 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.dao.OrderPositionMapper;
+import com.stylefeng.guns.modular.system.model.OrderPosition;
+import com.stylefeng.guns.modular.system.service.IOrderPositionService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class OrderPositionServiceImpl extends ServiceImpl<OrderPositionMapper, OrderPosition> implements IOrderPositionService {
+
+    @Resource
+    private OrderPositionMapper orderPositionMapper;
+
+    @Value("${filePath}")
+    private String filePath;
+
+
+    /**
+     * 获取轨迹数据
+     * @param orderId
+     * @param orderType
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> queryTrack(Integer orderId, Integer orderType) throws Exception {
+//        return orderPositionMapper.queryTrack(orderId, orderType);
+        //将数据存储到文件中
+        File file = new File(filePath + orderId + "_" + orderType + ".txt");
+        if(!file.exists()){
+            return new ArrayList<>();
+        }
+        //读取文件(字符流)
+        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
+        //循环取出数据
+        String str = null;
+        StringBuffer sb = new StringBuffer();
+        while ((str = in.readLine()) != null) {
+            sb.append(str);
+        }
+        List<OrderPosition> list = JSONArray.parseArray(sb.toString(), OrderPosition.class);
+        List<Map<String, Object>> lonlat = new ArrayList<>();
+        for(OrderPosition orderPosition : list){
+            Map<String, Object> map = new HashMap<>();
+            map.put("lon", orderPosition.getLon());
+            map.put("lat", orderPosition.getLat());
+            lonlat.add(map);
+        }
+        return lonlat;
+    }
+
+
+
+    /**
+     * 获取坐标文件中的坐标数据
+     * @param orderId
+     * @param orderType
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<OrderPosition> queryPosition(Integer orderId, Integer orderType) throws Exception{
+        //将数据存储到文件中
+        File file = new File(filePath + orderId + "_" + orderType + ".txt");
+        if(!file.exists()){
+            return new ArrayList<>();
+        }
+        //读取文件(字符流)
+        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
+        //循环取出数据
+        String str = null;
+        StringBuffer sb = new StringBuffer();
+        while ((str = in.readLine()) != null) {
+            sb.append(str);
+        }
+        List<OrderPosition> list = new ArrayList<>();
+        if(ToolUtil.isNotEmpty(sb.toString())){
+            list = JSONArray.parseArray(sb.toString(), OrderPosition.class);
+        }
+        System.err.println("坐标:" + sb);
+        return list;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
new file mode 100644
index 0000000..a4f7c6f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
@@ -0,0 +1,136 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
+import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService;
+import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
+import com.stylefeng.guns.modular.system.service.IOrderService;
+import com.stylefeng.guns.modular.system.service.IUserInfoService;
+import com.stylefeng.guns.modular.system.util.ChinaMobileUtil;
+import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
+import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Map;
+
+
+@Service
+public class OrderServiceImpl implements IOrderService {
+
+    @Autowired
+    private IOrderTaxiService orderTaxiService;
+
+    @Autowired
+    private RestTemplate internalRestTemplate;
+
+    @Autowired
+    private ChinaMobileUtil chinaMobileUtil;
+
+    @Autowired
+    private IUserInfoService userInfoService;
+
+    @Autowired
+    private GDMapElectricFenceUtil gdMapElectricFenceUtil;
+
+    @Autowired
+    private IOrderCrossCityService orderCrossCityService;
+
+    @Autowired
+    private IOrderPrivateCarService orderPrivateCarService;
+
+    @Autowired
+    private IOrderLogisticsService orderLogisticsService;
+
+
+    /**
+     * 获取预计行驶时间
+     * @param slon  起点经度
+     * @param slat  起点纬度
+     * @param elon  终点经度
+     * @param elat  终点纬度
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil<BaseWarpper> queryExpectedTime(Double slon, Double slat, Double elon, Double elat) throws Exception {
+        Map<String, String> distance = gdMapElectricFenceUtil.getDistance(slon + "," + slat, elon + "," + elat, 1);
+        int duration = Integer.valueOf(distance.get("duration")) / 60;
+        BaseWarpper baseWarpper = new BaseWarpper();
+        baseWarpper.setMinute(duration);
+        return ResultUtil.success(baseWarpper);
+    }
+
+    /**
+     * APP调用微信小程序完成支付
+     * @param orderId
+     * @param orderType
+     * @param type
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil weChatPay(Integer orderId, Integer orderType, Integer type, Integer userType, Integer uid, String content) throws Exception {
+        JSONObject jsonObject = JSON.parseObject(content);
+        switch (type){
+            case 1://订单完成支付
+                switch (orderType){
+                    case 1:
+                        return orderPrivateCarService.payPrivateCarOrder(1, orderId, (null == jsonObject ? null : jsonObject.getIntValue("couponId")), 3);
+                    case 2:
+                        return orderTaxiService.payTaxiOrder(1, orderId, (null == jsonObject ? null : jsonObject.getIntValue("couponId")), 3);
+                    case 3:
+                        return orderCrossCityService.payCrossCityOrder(1, orderId, (null == jsonObject ? null : jsonObject.getIntValue("couponId")), 3);
+                    case 4:
+                        return orderLogisticsService.payLogisticsOrder(1, orderId, 3);
+                    case 5:
+                        return orderLogisticsService.payLogisticsOrder(1, orderId, 3);
+                }
+            case 2://订单取消支付
+                switch (orderType){
+                    case 1:
+                        return orderPrivateCarService.cancleOrderPrivateCar(orderId, 1, null == jsonObject ? null : jsonObject.getIntValue("cancelId"), 3);
+                    case 2:
+                        return orderTaxiService.cancleOrderTaxi(orderId, 1, null == jsonObject ? null : jsonObject.getIntValue("cancelId"), 3);
+                    case 3:
+                        return orderCrossCityService.cancleOrderCrossCity(orderId, 1, null == jsonObject ? null : jsonObject.getIntValue("cancelId"), 3);
+                }
+
+            case 3://司机端改派支付
+                HttpHeaders headers = new HttpHeaders();
+                // 以表单的方式提交
+                headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+                //将请求头部和参数合成一个请求
+                MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+                params.add("orderId", orderId.toString());
+                params.add("orderType", orderType.toString());
+                params.add("payType", "1");
+                params.add("reason", null == jsonObject ? "" : jsonObject.getString("reason"));
+                params.add("remark", null == jsonObject ? "" : jsonObject.getString("remark"));
+                params.add("uid", jsonObject.getString("uid"));
+                HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+                String s = internalRestTemplate.postForObject("http://driver-server/base/order/reassign_", requestEntity, String.class);
+                JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
+                return ResultUtil.success(jsonObject1.getString("msg"), jsonObject1.getString("data"));
+            case 4://余额充值
+                if(userType == 1){
+                    return userInfoService.depositBalance(1, jsonObject.getDoubleValue("money"), uid, 3);
+                }
+                if(userType == 2){
+
+                }
+            case 5://小件物流补差价
+                return orderLogisticsService.payLogisticsOrder_(1, orderId, 3);
+        }
+        return ResultUtil.success();
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PhoneServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PhoneServiceImpl.java
new file mode 100644
index 0000000..0bbd599
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PhoneServiceImpl.java
@@ -0,0 +1,73 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.PhoneMapper;
+import com.stylefeng.guns.modular.system.model.Phone;
+import com.stylefeng.guns.modular.system.service.IPhoneService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class PhoneServiceImpl extends ServiceImpl<PhoneMapper, Phone> implements IPhoneService {
+
+    @Resource
+    private PhoneMapper phoneMapper;
+
+    /**
+     * 获取所有系统电话
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Phone> queryPhones(String code) throws Exception {
+
+        if(code.equals(""))code="370500";
+        String province = code.substring(0, 2) + "0000";
+        String city = code.substring(0, 4) + "00";
+
+        List<Phone> list = phoneMapper.queryPhones(province, city, code);
+        if(list.size() == 0){
+            list = phoneMapper.queryPhones(province, city, null);
+        }
+        if(list.size() == 0){
+            list = phoneMapper.queryPhones(province, null, null);
+        }
+        return list;
+    }
+
+
+    /**
+     * 获取客服电话(个人中心)
+     * @param code
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Map<String, Object> queryCustomerPhone(String code) throws Exception {
+        if(code.equals(""))code="370500";
+        String province = code.substring(0, 2) + "0000";
+        String city = code.substring(0, 4) + "00";
+
+        Map<String, Object> map = new HashMap<>();
+        //平台电话
+        Phone query = phoneMapper.query(2, 1, null, null, null);
+        map.put("platform", null != query ? query.getPhone() : "");
+
+        //公司
+        query = phoneMapper.query(2, 2, province, city, code);
+        if(query == null){
+            query = phoneMapper.query(2, 2, province, city, null);
+        }
+        if(query == null){
+            query = phoneMapper.query(2, 2, province, null, null);
+        }
+        map.put("company", null != query ? query.getPhone() : "");
+        return map;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ProblemServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ProblemServiceImpl.java
new file mode 100644
index 0000000..1441b80
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ProblemServiceImpl.java
@@ -0,0 +1,72 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.dao.ProblemMapper;
+import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper;
+import com.stylefeng.guns.modular.system.model.Problem;
+import com.stylefeng.guns.modular.system.model.SensitiveWords;
+import com.stylefeng.guns.modular.system.service.IProblemService;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class ProblemServiceImpl extends ServiceImpl<ProblemMapper, Problem> implements IProblemService {
+
+    @Resource
+    private ProblemMapper problemMapper;
+
+    @Resource
+    private SensitiveWordsMapper sensitiveWordsMapper;
+
+
+
+    /**
+     * 添加留言
+     * @param content
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil leaveMessage(String content, Integer uid) throws Exception {
+        if(ToolUtil.isNotEmpty(content)){
+            if(content.length() > 200){
+                return ResultUtil.error("留言内容过长");
+            }
+            List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null);
+            for(SensitiveWords s : sensitiveWords){
+                content = content.replaceAll(s.getContent(), "***");
+            }
+        }
+
+        Problem problem = new Problem();
+        problem.setContent(content);
+        problem.setUserId(uid);
+        problem.setInsertTime(new Date());
+        problem.setState(1);
+        this.insert(problem);
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 获取提交的留言
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> queryProblems(Integer pageNum, Integer size, Integer uid) throws Exception {
+        pageNum = (pageNum - 1) * size;
+        return problemMapper.queryProblems(pageNum, size, uid);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushOrderServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushOrderServiceImpl.java
new file mode 100644
index 0000000..6256d0a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushOrderServiceImpl.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.PushOrderMapper;
+import com.stylefeng.guns.modular.system.model.PushOrder;
+import com.stylefeng.guns.modular.system.service.IPushOrderService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+
+@Service
+public class PushOrderServiceImpl extends ServiceImpl<PushOrderMapper, PushOrder> implements IPushOrderService {
+
+    @Resource
+    private PushOrderMapper pushOrderMapper;
+
+
+    /**
+     * 获取推送配置
+     * @param type
+     * @param pushType
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<PushOrder> querys(Integer type, Integer pushType, Integer companyId) throws Exception {
+        return pushOrderMapper.querys(type, pushType, companyId);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedPacketRecordServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedPacketRecordServiceImpl.java
new file mode 100644
index 0000000..658ab11
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RedPacketRecordServiceImpl.java
@@ -0,0 +1,18 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.RedPacketRecordMapper;
+import com.stylefeng.guns.modular.system.model.RedPacketRecord;
+import com.stylefeng.guns.modular.system.service.IRedPacketRecordService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Random;
+
+@Service
+public class RedPacketRecordServiceImpl extends ServiceImpl<RedPacketRecordMapper, RedPacketRecord> implements IRedPacketRecordService {
+
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RelationServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RelationServiceImpl.java
new file mode 100644
index 0000000..4b72cc4
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RelationServiceImpl.java
@@ -0,0 +1,20 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.RelationMapper;
+import com.stylefeng.guns.modular.system.model.Relation;
+import com.stylefeng.guns.modular.system.service.IRelationService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 角色和菜单关联表 服务实现类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+@Service
+public class RelationServiceImpl extends ServiceImpl<RelationMapper, Relation> implements IRelationService {
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RoleServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RoleServiceImpl.java
new file mode 100644
index 0000000..d8d9d37
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RoleServiceImpl.java
@@ -0,0 +1,73 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.node.ZTreeNode;
+import com.stylefeng.guns.core.util.Convert;
+import com.stylefeng.guns.modular.system.dao.RelationMapper;
+import com.stylefeng.guns.modular.system.dao.RoleMapper;
+import com.stylefeng.guns.modular.system.model.Relation;
+import com.stylefeng.guns.modular.system.model.Role;
+import com.stylefeng.guns.modular.system.service.IRoleService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {
+
+    @Resource
+    private RoleMapper roleMapper;
+
+    @Resource
+    private RelationMapper relationMapper;
+
+    @Override
+    @Transactional(readOnly = false)
+    public void setAuthority(Integer roleId, String ids) {
+
+        // 删除该角色所有的权限
+        this.roleMapper.deleteRolesById(roleId);
+
+        // 添加新的权限
+        for (Long id : Convert.toLongArray(true, Convert.toStrArray(",", ids))) {
+            Relation relation = new Relation();
+            relation.setRoleid(roleId);
+            relation.setMenuid(id);
+            this.relationMapper.insert(relation);
+        }
+    }
+
+    @Override
+    @Transactional(readOnly = false)
+    public void delRoleById(Integer roleId) {
+        //删除角色
+        this.roleMapper.deleteById(roleId);
+
+        // 删除该角色所有的权限
+        this.roleMapper.deleteRolesById(roleId);
+    }
+
+    @Override
+    public List<Map<String, Object>> selectRoles(String condition) {
+        return this.baseMapper.selectRoles(condition);
+    }
+
+    @Override
+    public int deleteRolesById(Integer roleId) {
+        return this.baseMapper.deleteRolesById(roleId);
+    }
+
+    @Override
+    public List<ZTreeNode> roleTreeList() {
+        return this.baseMapper.roleTreeList();
+    }
+
+    @Override
+    public List<ZTreeNode> roleTreeListByRoleId(String[] roleId) {
+        return this.baseMapper.roleTreeListByRoleId(roleId);
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java
new file mode 100644
index 0000000..1478f2f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java
@@ -0,0 +1,248 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.ServerCarModelMapper;
+import com.stylefeng.guns.modular.system.dao.SystemPriceMapper;
+import com.stylefeng.guns.modular.system.model.Company;
+import com.stylefeng.guns.modular.system.model.ServerCarModel;
+import com.stylefeng.guns.modular.system.service.ICompanyCityService;
+import com.stylefeng.guns.modular.system.service.IServerCarModelService;
+import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil;
+import com.stylefeng.guns.modular.system.util.GDMapGeocodingUtil;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.warpper.ServerCarModelWarpper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+
+
+@Service
+public class ServerCarModelServiceImpl extends ServiceImpl<ServerCarModelMapper, ServerCarModel> implements IServerCarModelService {
+
+    @Resource
+    private ServerCarModelMapper serverCarModelMapper;
+
+    @Resource
+    private SystemPriceMapper systemPriceMapper;
+
+    @Autowired
+    private GDMapElectricFenceUtil gdMapElectricFenceUtil;
+
+    @Autowired
+    private GDMapGeocodingUtil gdMapGeocodingUtil;
+
+    @Autowired
+    private ICompanyCityService companyCityService;
+
+
+
+
+
+
+    /**
+     * 根据起点和终点获取车型
+     * @param startLonLat
+     * @param endLonLat
+     * @param type          业务类型
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil<List<ServerCarModelWarpper>> queryServerCarModel(String startLonLat, String endLonLat, Integer type) throws Exception {
+        //查找与起点匹配的企业(经营范围)
+        Map<String, String> geocode = gdMapGeocodingUtil.geocode(startLonLat.split(",")[0], startLonLat.split(",")[1]);
+        Company query = companyCityService.query(geocode.get("districtCode"));
+        if(null == query){
+            return ResultUtil.error("起点暂无企业提供服务", new ArrayList<>());
+        }
+        Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLonLat, endLonLat, 1);
+        if(null == distance){
+            return ResultUtil.error("获取预估距离出错", new ArrayList<>());
+        }
+        String distance1 = distance.get("distance");//距离(米)
+        double distance1_ = Double.valueOf(distance1).doubleValue();
+        String duration = distance.get("duration");//时间(秒)
+        long duration_ = Long.valueOf(duration).longValue();
+
+        List<ServerCarModelWarpper> price = this.getPrice(query.getId(), distance1_, duration_, 0, 1);
+        if(price.size() == 0){
+            return ResultUtil.error("未获取到可服务的车型", new ArrayList<>());
+        }
+        return ResultUtil.success(price);
+    }
+
+
+    /**
+     * 获取业务类型对应的所有服务车型
+     * @param type
+     * @return
+     */
+    @Override
+    public List<Map<String, Object>> queryServerCarModels(Integer type) {
+        return serverCarModelMapper.queryServerCarModel(type);
+    }
+
+
+    /**
+     * 计算价格
+     * @param companyId
+     * @param distance
+     * @param duration
+     * @param wait
+     * @param type
+     * @return
+     * @throws Exception
+     */
+    public List<ServerCarModelWarpper> getPrice(Integer companyId, double distance, long duration, long wait, Integer type) throws Exception {
+        List<Map<String, Object>> list = serverCarModelMapper.queryServerCarModel(type);
+        List<ServerCarModelWarpper> data = new ArrayList<>();
+        for(Map<String, Object> map : list){
+            Map<String, Object> query1 = systemPriceMapper.query(companyId, type, Integer.valueOf(map.get("id").toString()));
+            if(null == query1){//排除没有设置价格的车型
+                continue;
+            }
+            //开始根据不同的方式计算金额
+            double amount = 0;
+            if(type == 1){//专车
+                JSONObject jsonObject = JSON.parseObject(query1.get("content").toString());
+                Double num1 = jsonObject.getDouble("num1");//起步价(元)
+                Double num2 = jsonObject.getDouble("num2");//起步公里(公里)
+                Double num3 = jsonObject.getDouble("num3");//起步时间(分钟)
+                Double num4 = jsonObject.getDouble("num4");//里程费(元)
+                Double num5 = jsonObject.getDouble("num5");//时长费(分钟)
+                Double num6 = jsonObject.getDouble("num6");//等待费(分钟)
+                Double num7 = jsonObject.getDouble("num7");//等待费(元)
+                Double num8 = jsonObject.getDouble("num8");//远途费(公里)
+                Double num9 = jsonObject.getDouble("num9");//远途费(公里)
+                Double num10 = jsonObject.getDouble("num10");//远途费(元)
+                Double num11 = jsonObject.getDouble("num11");//远途费(公里)
+                Double num12 = jsonObject.getDouble("num12");//远途费(公里)
+                Double num13 = jsonObject.getDouble("num13");//远途费(元)
+                Double num14 = jsonObject.getDouble("num14");//远途费(公里)
+                Double num15 = jsonObject.getDouble("num15");//远途费(元)
+                String num16 = jsonObject.getString("num16");//夜间费(开始时间)
+                Double num17 = jsonObject.getDouble("num17");//夜间费(元)
+                Double num18 = jsonObject.getDouble("num18");//夜间费(元)
+                Double num19 = jsonObject.getDouble("num19");//夜间费(元)
+                Double num20 = jsonObject.getDouble("num20");//夜间费(元)
+                Double num21 = jsonObject.getDouble("num21");//夜间费(元)
+                Double num22 = jsonObject.getDouble("num22");//夜间费(元)
+                String num23 = jsonObject.getString("num23");//高峰费(开始时间)
+                String num24 = jsonObject.getString("num24");//高峰费(开始时间)
+                Double num25 = jsonObject.getDouble("num25");//高峰费(元)
+                Double num26 = jsonObject.getDouble("num26");//高峰费(元)
+                Double num27 = jsonObject.getDouble("num27");//高峰费(元)
+                Double num28 = jsonObject.getDouble("num28");//高峰费(元)
+                Double num29 = jsonObject.getDouble("num29");//高峰费(元)
+                Double num30 = jsonObject.getDouble("num30");//高峰费(元)
+
+                Date date = new Date();
+                double d = distance / 1000;//实际公里
+                double t = duration / 60;//实际时间
+
+                double d1 = (d - num2) < 0 ? 0 : d - num2;//超出起步里程的公里
+                double t1 = (t - num3) < 0 ? 0 : t - num3;//超过起步分钟数的时间
+                double yt1 = 0;//远途1段
+                double yt2 = 0;//远途2段
+                double yt3 = 0;//远途3段
+
+
+                //夜间服务处理逻辑
+                Calendar s = Calendar.getInstance();
+                s.setTime(date);
+                s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num16.split(" - ")[0].split(":")[0]));
+                s.set(Calendar.MINUTE, Integer.valueOf(num16.split(" - ")[0].split(":")[1]));
+
+                Calendar e = Calendar.getInstance();
+                e.setTime(date);
+                e.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num16.split(" - ")[1].split(":")[0]));
+                e.set(Calendar.MINUTE, Integer.valueOf(num16.split(" - ")[1].split(":")[1]));
+
+                if(date.getTime() > s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){
+                    if(d > num8.doubleValue()){
+                        yt1 = num20 * (num9 - num8);
+                    }
+                    if(d > num11.doubleValue()){
+                        yt2 = num21 * (num12 - num11);
+                    }
+                    if(d > num14.doubleValue()){
+                        yt3 = num22 * (d - num14);
+                    }
+                    amount = num17 + (d1 * num18) + (t1 * num19) + (wait * num7) + yt1 + yt2 + yt3;
+                    ServerCarModelWarpper serverCarModelWarpper = ServerCarModelWarpper.getServerCarModelWarpper(map);
+                    serverCarModelWarpper.setAmount(new BigDecimal(amount).setScale(BigDecimal.ROUND_HALF_EVEN, 2).doubleValue());
+                    serverCarModelWarpper.setMileage(d);
+                    serverCarModelWarpper.setDuration(t);
+                    data.add(serverCarModelWarpper);
+                    continue;
+                }
+
+
+                //高峰时段处理逻辑
+                Calendar s1 = Calendar.getInstance();
+                s1.setTime(date);
+                s1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num23.split(" - ")[0].split(":")[0]));
+                s1.set(Calendar.MINUTE, Integer.valueOf(num23.split(" - ")[0].split(":")[1]));
+
+                Calendar e1 = Calendar.getInstance();
+                e1.setTime(date);
+                e1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num23.split(" - ")[1].split(":")[0]));
+                e1.set(Calendar.MINUTE, Integer.valueOf(num23.split(" - ")[1].split(":")[1]));
+
+                Calendar s2 = Calendar.getInstance();
+                s2.setTime(date);
+                s2.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num24.split(" - ")[0].split(":")[0]));
+                s2.set(Calendar.MINUTE, Integer.valueOf(num24.split(" - ")[0].split(":")[1]));
+
+                Calendar e2 = Calendar.getInstance();
+                e2.setTime(date);
+                e2.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num24.split(" - ")[1].split(":")[0]));
+                e2.set(Calendar.MINUTE, Integer.valueOf(num24.split(" - ")[1].split(":")[1]));
+
+                if((date.getTime() > s1.getTimeInMillis() && date.getTime() < e1.getTimeInMillis()) || (date.getTime() > s2.getTimeInMillis() && date.getTime() < e2.getTimeInMillis())){
+                    if(d > num8.doubleValue()){
+                        yt1 = num28 * (num9 - num8);
+                    }
+                    if(d > num11.doubleValue()){
+                        yt2 = num29 * (num12 - num11);
+                    }
+                    if(d > num14.doubleValue()){
+                        yt3 = num30 * (d - num14);
+                    }
+                    amount = num25 + (d1 * num26) + (t1 * num27) + (wait * num7) + yt1 + yt2 + yt3;
+                    ServerCarModelWarpper serverCarModelWarpper = ServerCarModelWarpper.getServerCarModelWarpper(map);
+                    serverCarModelWarpper.setAmount(new BigDecimal(amount).setScale(BigDecimal.ROUND_HALF_EVEN, 2).doubleValue());
+                    serverCarModelWarpper.setMileage(d);
+                    serverCarModelWarpper.setDuration(t);
+                    data.add(serverCarModelWarpper);
+                    continue;
+                }
+
+                //其他时间段的计算
+                if(d > num8.doubleValue()){
+                    yt1 = num10 * (num9 - num8);
+                }
+                if(d > num11.doubleValue()){
+                    yt2 = num13 * (num12 - num11);
+                }
+                if(d > num14.doubleValue()){
+                    yt3 = num15 * (d - num14);
+                }
+                amount = num1 + (d1 * num4) + (t1 * num5) + (wait * num7) + yt1 + yt2 + yt3;
+                ServerCarModelWarpper serverCarModelWarpper = ServerCarModelWarpper.getServerCarModelWarpper(map);
+                serverCarModelWarpper.setAmount(new BigDecimal(amount).setScale(BigDecimal.ROUND_HALF_EVEN, 2).doubleValue());
+                serverCarModelWarpper.setMileage(d);
+                serverCarModelWarpper.setDuration(t);
+                data.add(serverCarModelWarpper);
+                continue;
+            }
+        }
+        return data;
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SmsrecordServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SmsrecordServiceImpl.java
new file mode 100644
index 0000000..3e44b15
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SmsrecordServiceImpl.java
@@ -0,0 +1,34 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.SmsrecordMapper;
+import com.stylefeng.guns.modular.system.model.Smsrecord;
+import com.stylefeng.guns.modular.system.service.ISmsrecordService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+
+@Service
+public class SmsrecordServiceImpl extends ServiceImpl<SmsrecordMapper, Smsrecord> implements ISmsrecordService {
+
+
+    /**
+     * 添加数据
+     * @param type
+     * @param phone
+     * @param code
+     * @param content
+     * @throws Exception
+     */
+    @Override
+    public void saveData(Integer type, String phone, String code, String content) throws Exception {
+        Smsrecord smsrecord = new Smsrecord();
+        smsrecord.setType(type);
+        smsrecord.setPhone(phone);
+        smsrecord.setCode(code);
+        smsrecord.setContent(content);
+        smsrecord.setInsertTime(new Date());
+        this.insert(smsrecord);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemNoticeServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemNoticeServiceImpl.java
new file mode 100644
index 0000000..509814b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemNoticeServiceImpl.java
@@ -0,0 +1,115 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.SystemNoticeMapper;
+import com.stylefeng.guns.modular.system.dao.TNoticesMapper;
+import com.stylefeng.guns.modular.system.model.SystemNotice;
+import com.stylefeng.guns.modular.system.service.ISystemNoticeService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class SystemNoticeServiceImpl extends ServiceImpl<SystemNoticeMapper, SystemNotice> implements ISystemNoticeService {
+
+    @Resource
+    private SystemNoticeMapper systemNoticeMapper;
+
+    @Resource
+    private TNoticesMapper tNoticesMapper;
+
+
+    /**
+     * 添加系统消息
+     * @param userType
+     * @param content
+     * @param userId
+     * @throws Exception
+     */
+    @Override
+    public void addSystemNotice(Integer userType, String content, Integer userId, Integer noticeType) throws Exception {
+        SystemNotice systemNotice = new SystemNotice();
+        systemNotice.setContent(content);
+        systemNotice.setInsertTime(new Date());
+        systemNotice.setRead(1);
+        systemNotice.setType(2);
+        systemNotice.setNoticeType(noticeType);
+        systemNotice.setUserId(userId);
+        systemNotice.setUserType(userType);
+        this.insert(systemNotice);
+    }
+
+    /**
+     * 获取未阅读数据
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public int queryNoReadNoticeNum(Integer uid) throws Exception {
+        return systemNoticeMapper.queryNoReadNoticeNum(uid);
+    }
+
+    /**
+     * 获取消息列表
+     * @param type
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     */
+    @Override
+    public List<Map<String, Object>> queryList(Integer type, Integer pageNum, Integer size, Integer uid) {
+        pageNum = (pageNum - 1) * size;
+        List<Map<String, Object>> list = null;
+        if(type == 1){//系统公告
+            list = tNoticesMapper.queryList(pageNum, size, uid);
+        }
+        if(type == 2){//系统消息
+            list = systemNoticeMapper.queryList(type, pageNum, size, uid);
+            for(Map<String, Object> map : list){
+                systemNoticeMapper.readSystemNotice(Integer.valueOf(String.valueOf(map.get("id"))), uid);
+            }
+        }
+        return list;
+    }
+
+
+    /**
+     * 阅读操作
+     * @param id
+     * @param uid
+     * @throws Exception
+     */
+    @Override
+    public void readSystemNotice(Integer id, Integer uid) throws Exception {
+        systemNoticeMapper.readSystemNotice(id, uid);
+    }
+
+
+    /**
+     * 删除公告或消息
+     * @param id
+     * @param uid
+     * @throws Exception
+     */
+    @Override
+    public void delSystemNotice(Integer id, Integer uid) throws Exception {
+        systemNoticeMapper.delSystemNotice(id, uid);
+    }
+
+
+    /**
+     * 清空消息或公告
+     * @param uid
+     * @throws Exception
+     */
+    @Override
+    public void clearSystemNotice(Integer uid) throws Exception {
+        systemNoticeMapper.delSystemNotice(null, uid);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TNoticesServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TNoticesServiceImpl.java
new file mode 100644
index 0000000..91943cc
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TNoticesServiceImpl.java
@@ -0,0 +1,32 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.TNoticesMapper;
+import com.stylefeng.guns.modular.system.model.TNotices;
+import com.stylefeng.guns.modular.system.service.ITNoticesService;
+import com.stylefeng.guns.modular.system.warpper.TNoticeWarpper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class TNoticesServiceImpl extends ServiceImpl<TNoticesMapper, TNotices> implements ITNoticesService {
+
+    @Resource
+    private TNoticesMapper tNoticesMapper;
+
+
+
+    /**
+     * 获取滚动消息
+     * @param type  1=滚动消息,2=公告
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<TNoticeWarpper> queryNotices(Integer type) throws Exception {
+        List<TNotices> notices = tNoticesMapper.queryNotices(type);
+        return TNoticeWarpper.getTNoticeWarppers(notices);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityBalanceServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityBalanceServiceImpl.java
new file mode 100644
index 0000000..5828cfa
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityBalanceServiceImpl.java
@@ -0,0 +1,34 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.UserActivityBalanceMapper;
+import com.stylefeng.guns.modular.system.model.UserActivityBalance;
+import com.stylefeng.guns.modular.system.service.IUserActivityBalanceService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class UserActivityBalanceServiceImpl extends ServiceImpl<UserActivityBalanceMapper, UserActivityBalance> implements IUserActivityBalanceService {
+
+    @Resource
+    private UserActivityBalanceMapper userActivityBalanceMapper;
+
+
+
+
+
+    /**
+     * 获取满足条件的活动
+     * @param companyId
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> query(Double money, Integer companyId) throws Exception {
+        return userActivityBalanceMapper.query(money, companyId);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityRedenvelopeServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityRedenvelopeServiceImpl.java
new file mode 100644
index 0000000..ca9275b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityRedenvelopeServiceImpl.java
@@ -0,0 +1,32 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.UserActivityRedenvelopeMapper;
+import com.stylefeng.guns.modular.system.model.UserActivityRedenvelope;
+import com.stylefeng.guns.modular.system.service.IUserActivityRedenvelopeService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.Map;
+
+
+@Service
+public class UserActivityRedenvelopeServiceImpl extends ServiceImpl<UserActivityRedenvelopeMapper, UserActivityRedenvelope> implements IUserActivityRedenvelopeService {
+
+    @Resource
+    private UserActivityRedenvelopeMapper userActivityRedenvelopeMapper;
+
+
+
+    /**
+     * 获取红包活动
+     * @param companyId
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Map<String, Object> query(Integer companyId, Date travelTime) throws Exception {
+        return userActivityRedenvelopeMapper.query(companyId, travelTime);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityRegisteredServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityRegisteredServiceImpl.java
new file mode 100644
index 0000000..ccc707a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityRegisteredServiceImpl.java
@@ -0,0 +1,35 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.UserActivityRegisteredMapper;
+import com.stylefeng.guns.modular.system.model.UserActivityRegistered;
+import com.stylefeng.guns.modular.system.service.IUserActivityRegisteredService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class UserActivityRegisteredServiceImpl extends ServiceImpl<UserActivityRegisteredMapper, UserActivityRegistered> implements IUserActivityRegisteredService {
+
+    @Resource
+    private UserActivityRegisteredMapper userActivityRegisteredMapper;
+
+
+
+
+
+    /**
+     * 获取当前有效的注册活动
+     * @param companyId
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> query(Integer companyId) throws Exception {
+        return userActivityRegisteredMapper.query(companyId);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserCouponRecordServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserCouponRecordServiceImpl.java
new file mode 100644
index 0000000..d89b29e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserCouponRecordServiceImpl.java
@@ -0,0 +1,112 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.UserCouponRecordMapper;
+import com.stylefeng.guns.modular.system.model.UserCouponRecord;
+import com.stylefeng.guns.modular.system.service.IUserCouponRecordService;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class UserCouponRecordServiceImpl extends ServiceImpl<UserCouponRecordMapper, UserCouponRecord> implements IUserCouponRecordService {
+
+    @Resource
+    private UserCouponRecordMapper userCouponRecordMapper;
+
+
+    /**
+     * 获取可用优惠券数量
+     * @param uid
+     * @param companyId
+     * @param state
+     * @param couponUseType
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public int queryAvailable(Integer uid, Integer companyId, Integer state, Integer couponUseType, Double money) throws Exception {
+        return userCouponRecordMapper.queryAvailable(uid, companyId, state, couponUseType, money);
+    }
+
+
+    /**
+     * 获取优惠券列表
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> queryCoupon(Integer uid, Integer companyId, Integer state, Integer couponUseType, Double money, Integer pageNum, Integer size) throws Exception {
+        pageNum = (pageNum - 1) * size;
+        return userCouponRecordMapper.queryCoupon(uid, companyId, state, couponUseType, money, pageNum, size);
+    }
+
+
+    /**
+     * 获取优惠券列表
+     * @param state
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> queryMyCoupons(Integer state, Integer pageNum, Integer size, Integer uid) throws Exception {
+        pageNum = (pageNum - 1) * size;
+        return userCouponRecordMapper.queryMyCoupons(state, pageNum, size, uid);
+    }
+
+    /**
+     * 删除优惠券
+     * @param id
+     * @param uid
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil delMyCoupon(Integer id, Integer uid) throws Exception {
+        UserCouponRecord userCouponRecord = userCouponRecordMapper.selectById(id);
+        if(userCouponRecord.getUserId() != uid){
+            return ResultUtil.error("您不能删除此优惠券");
+        }
+        userCouponRecordMapper.deleteById(id);
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 赠送优惠券
+     * @param id
+     * @param uid
+     * @param userId
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil handselCoupon(Integer id, Integer uid, Integer userId) throws Exception {
+        UserCouponRecord userCouponRecord = userCouponRecordMapper.selectById(id);
+        if(userCouponRecord.getUserId().compareTo(uid) != 0){
+            return ResultUtil.error("您不能赠送此优惠券");
+        }
+        if(userCouponRecord.getState() != 1){
+            return ResultUtil.error("优惠券已无法使用");
+        }
+        userCouponRecord.setUserId(userId);
+        userCouponRecordMapper.updateById(userCouponRecord);
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 修改过期优惠券状态
+     * @throws Exception
+     */
+    @Override
+    public void updateTimeOut() throws Exception {
+        userCouponRecordMapper.updateTimeOut();
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
new file mode 100644
index 0000000..0e97fb9
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
@@ -0,0 +1,1211 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.common.constant.JwtConstants;
+import com.stylefeng.guns.core.shiro.ShiroKit;
+import com.stylefeng.guns.core.shiro.ShiroUser;
+import com.stylefeng.guns.core.util.GetMobile;
+import com.stylefeng.guns.core.util.JwtTokenUtil;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.dao.*;
+import com.stylefeng.guns.modular.system.model.*;
+import com.stylefeng.guns.modular.system.service.*;
+import com.stylefeng.guns.modular.system.util.*;
+import com.stylefeng.guns.modular.system.warpper.LoginWarpper;
+import com.stylefeng.guns.modular.taxi.model.PaymentRecord;
+import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService;
+import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService;
+import org.apache.shiro.authc.SimpleAuthenticationInfo;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
+import org.apache.shiro.crypto.hash.Md5Hash;
+import org.apache.shiro.util.ByteSource;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.*;
+
+
+@Service
+public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> implements IUserInfoService {
+
+    @Resource
+    private UserInfoMapper userInfoMapper;
+
+    @Resource
+    private UserActivityInviteMapper userActivityInviteMapper;
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private ALiSendSms aLiSendSms;
+
+    @Autowired
+    private WeChatUtil weChatUtil;
+
+    @Autowired
+    private IPaymentRecordService paymentRecordService;
+
+    @Autowired
+    private ICompanyCityService companyCityService;
+
+    @Autowired
+    private IUserActivityRegisteredService userActivityRegisteredService;
+
+    @Autowired
+    private IUserCouponRecordService userCouponRecordService;
+
+    @Autowired
+    private ISmsrecordService smsrecordService;
+
+    @Autowired
+    private ITransactionDetailsService transactionDetailsService;
+
+    @Autowired
+    private IUserActivityBalanceService userActivityBalanceService;
+
+    @Autowired
+    private ICBCPayUtil icbcPayUtil;
+
+    @Resource
+    private DriverMapper driverMapper;
+
+    @Resource
+    private DriverActivityRegisteredMapper driverActivityRegisteredMapper;
+
+    @Resource
+    private DriverActivityHistoryMapper driverActivityHistoryMapper;
+
+    @Autowired
+    private IIncomeService incomeService;
+
+    @Autowired
+    private PushUtil pushUtil;
+
+    @Autowired
+    private ISystemNoticeService systemNoticeService;
+
+    @Autowired
+    private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
+
+    @Autowired
+    private HttpClientUtil httpClientUtil;
+
+    @Autowired
+    private DateUtil dateUtil;
+
+    @Value("${callbackPath}")
+    private String callbackPath;
+
+    @Value("${pushMinistryOfTransport}")
+    private boolean pushMinistryOfTransport;
+
+    private String salt = "&a.s";
+
+
+    /**
+     * 获取短信验证码
+     * @param phone
+     * @return
+     */
+    @Override
+    public ResultUtil queryCaptcha(String phone, Integer type) throws Exception {
+        Random random = new Random();
+        StringBuffer sb = new StringBuffer();
+        for(int i = 0; i < 4; i++){
+            sb.append((int) (random.nextDouble() * 10));
+        }
+        String authCode = sb.toString();
+        String sms = "短信验证码【" + authCode + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!";
+
+        //发送验证码短信
+        redisUtil.setStrValue(phone, authCode, 5 * 60);//设置五分钟过期
+        String templateCode = "";
+        switch (type){
+            case 1:
+                templateCode = "SMS_476880205";//身份验证
+                break;
+            case 2:
+                templateCode = "SMS_476880205";//登录确认
+                break;
+            case 3:
+                templateCode = "SMS_476880205";//用户注册
+                break;
+            case 4:
+                templateCode = "SMS_476880205";//修改密码
+                break;
+        }
+        String sData = aLiSendSms.sendSms(phone, templateCode, "{\"code\":\"" + authCode + "\"}");
+        JSONObject jsonObject = JSON.parseObject(sData);
+        String message = jsonObject.getString("Message");
+        if(!"OK".equals(message)){
+            System.err.println(message);
+            return ResultUtil.error(message);
+        }
+        System.out.println(sms);
+//        System.err.println("222222");
+//
+//        String s = MsgUtil.Send_Post(phone, authCode);
+//        System.err.println(s);
+
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 校验短信验证码
+     * @param phone
+     * @param code
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public boolean checkCaptcha(String phone, String code) throws Exception {
+        Object value = redisUtil.getValue(phone);
+        if("1234".equals(code)){
+            return true;
+        }
+
+        if(null != value && code.equals(String.valueOf(value))){
+            return true;
+        }else{
+            return false;
+        }
+    }
+
+    /**
+     * 手机验证码登录
+     * @param phone
+     * @param code
+     * @return
+     */
+    @Override
+    public ResultUtil<LoginWarpper> captchaLogin(String phone, String code, String registIp, String registAreaCode,String loginType) throws Exception {
+        boolean b = this.checkCaptcha(phone, code);
+        if(!b){
+            return ResultUtil.error("验证码无效");
+        }
+
+        UserInfo userInfo = userInfoMapper.queryByPhone(phone);
+        if(null == userInfo){
+            userInfo = new UserInfo();
+            userInfo.setPhone(phone);
+            userInfo.setPassWord(ShiroKit.md5("", salt));
+            userInfo.setNickName(this.getDefaultName());
+            userInfo.setRegistIp(registIp);
+            userInfo.setIsAuth(1);
+            userInfo.setConsumption(0D);
+            userInfo.setBalance(0D);
+            userInfo.setState(1);
+
+            //用户所属企业
+            if(null != registAreaCode){
+                Company query = companyCityService.query(registAreaCode);
+                userInfo.setCompanyId(null != query ? query.getId() : null);
+                userInfo.setRegistAreaCode(registAreaCode);
+            }
+            this.insert(userInfo);
+
+            this.addCoupon(userInfo);//添加优惠券
+
+            UserInfo finalUserInfo = userInfo;
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    if(pushMinistryOfTransport){
+                        //上传数据
+                        pushMinistryOfTransportUtil.baseInfoPassenger(finalUserInfo.getId());
+                    }
+                }
+            }).start();
+
+        }
+        if(userInfo.getState() == 2){
+            return ResultUtil.error("账号被冻结");
+        }
+
+        //调用单点登录的逻辑
+        this.singlePointLogin(userInfo.getId(),loginType);
+
+        String token = this.getToken(userInfo, "",loginType);
+        LoginWarpper loginWarpper = new LoginWarpper();
+        loginWarpper.setId(userInfo.getId());
+        loginWarpper.setToken(token);
+        loginWarpper.setAppid(UUIDUtil.getRandomCode());
+        loginWarpper.setEmergencyContact(userInfo.getEmergencyContact());
+        loginWarpper.setEmergencyContactNumber(userInfo.getEmergencyContactNumber());
+
+        smsrecordService.saveData(1, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!");
+        return ResultUtil.success(loginWarpper);
+    }
+    /**
+     * 手机验证码登录
+     * @param accessToken
+     * @return
+     */
+    @Override
+    public ResultUtil<LoginWarpper> oneClickLogin(String accessToken, String registIp, String registAreaCode,String loginType,String androidOrIos) throws Exception {
+        String response = GetMobile.getPhone(accessToken,androidOrIos);
+
+        if(response==null){
+            return ResultUtil.error("登录失败");
+        }
+        System.out.println( response);
+        JSONObject json = JSONObject.parseObject(response);
+        if(!json.getBoolean("success")){
+            return ResultUtil.error("登录失败");
+        }
+        String phone = json.getJSONObject("data").getString("mobile");
+        UserInfo userInfo = userInfoMapper.queryByPhone(phone);
+        if(null == userInfo){
+            userInfo = new UserInfo();
+            userInfo.setPhone(phone);
+            userInfo.setPassWord(ShiroKit.md5("", salt));
+            userInfo.setNickName(this.getDefaultName());
+            userInfo.setRegistIp(registIp);
+            userInfo.setIsAuth(1);
+            userInfo.setConsumption(0D);
+            userInfo.setBalance(0D);
+            userInfo.setState(1);
+
+            //用户所属企业
+            if(null != registAreaCode){
+                Company query = companyCityService.query(registAreaCode);
+                userInfo.setCompanyId(null != query ? query.getId() : null);
+                userInfo.setRegistAreaCode(registAreaCode);
+            }
+            this.insert(userInfo);
+
+            this.addCoupon(userInfo);//添加优惠券
+
+            UserInfo finalUserInfo = userInfo;
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    if(pushMinistryOfTransport){
+                        //上传数据
+                        pushMinistryOfTransportUtil.baseInfoPassenger(finalUserInfo.getId());
+                    }
+                }
+            }).start();
+
+        }
+        if(userInfo.getState() == 2){
+            return ResultUtil.error("账号被冻结");
+        }
+
+        //调用单点登录的逻辑
+        this.singlePointLogin(userInfo.getId(),loginType);
+
+        String token = this.getToken(userInfo, "",loginType);
+        LoginWarpper loginWarpper = new LoginWarpper();
+        loginWarpper.setId(userInfo.getId());
+        loginWarpper.setToken(token);
+        loginWarpper.setAppid(UUIDUtil.getRandomCode());
+        loginWarpper.setEmergencyContact(userInfo.getEmergencyContact());
+        loginWarpper.setEmergencyContactNumber(userInfo.getEmergencyContactNumber());
+        loginWarpper.setPhone(2);
+
+        //smsrecordService.saveData(1, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!");
+        return ResultUtil.success(loginWarpper);
+    }
+    @Override
+    public synchronized ResultUtil<LoginWarpper> captchaLogin(String phone, String code, Integer uid, Integer type, Integer userType,String loginType) throws Exception {
+        ResultUtil<LoginWarpper> resultUtil = this.captchaLogin(phone, code, null, null,loginType);
+        if(resultUtil.getCode() == 200 && null != uid){
+            if(type == 2){//司机分享
+                Driver driver = driverMapper.selectById(uid);
+                List<Map<String, Object>> query = driverActivityRegisteredMapper.query(userType, driver.getCompanyId());
+                BigDecimal bigDecimal = new BigDecimal("0");
+                for(Map<String, Object> map : query){
+                    if(Double.valueOf(String.valueOf(map.get("money"))).compareTo(0D) > 0){
+                        bigDecimal = bigDecimal.add(new BigDecimal(String.valueOf(map.get("money"))));
+                        incomeService.saveData(2, driver.getId(), 1, Integer.valueOf(String.valueOf(map.get("id"))), null, Double.valueOf(String.valueOf(map.get("money"))));
+                    }
+                }
+                driver.setActivityMoney(bigDecimal.add(new BigDecimal(driver.getActivityMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                driver.setLaveActivityMoney(bigDecimal.add(new BigDecimal(driver.getLaveActivityMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                driver.setBalance(bigDecimal.add(new BigDecimal(driver.getBalance())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                driverMapper.updateById(driver);
+
+                Map<String, Date> date = dateUtil.getStartAndEndDate(new Date());
+                //邀请用户注册
+                List<DriverActivityHistory> list = driverActivityHistoryMapper.queryList(uid, 2, 1, date.get("startTime"), date.get("endTime"));
+                for(DriverActivityHistory dah : list){
+                    dah.setCarryOut(2);
+                    dah.setCollectionTime(new Date());
+                    driverActivityHistoryMapper.updateById(dah);
+                }
+            }
+            if(type == 1){//用户分享
+                UserInfo userInfo = userInfoMapper.selectById(uid);
+                List<Map<String, Object>> query = userActivityInviteMapper.query(userInfo.getCompanyId());
+                Date date = new Date();
+                for(Map<String, Object> map : query){
+                    Double lavePrice = Double.valueOf(map.get("lavePrice").toString());
+                    for(int i = Integer.valueOf(String.valueOf(map.get("totalNum"))); i > 0; i--){
+                        //判断当前优惠券金额是否大于可发放剩余总金额
+                        if(Double.valueOf(String.valueOf(map.get("money"))).compareTo(lavePrice) > 0){
+                            break;
+                        }
+                        UserCouponRecord userCouponRecord = new UserCouponRecord();
+                        userCouponRecord.setActivityType(3);
+                        userCouponRecord.setCouponActivityId(Integer.valueOf(String.valueOf(map.get("id"))));
+                        userCouponRecord.setCouponId(Integer.valueOf(String.valueOf(map.get("couponId"))));
+                        userCouponRecord.setState(1);
+                        Calendar calendar = Calendar.getInstance();
+                        calendar.setTime(date);
+                        calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(map.get("effective"))));
+                        userCouponRecord.setExpirationTime(calendar.getTime());
+                        userCouponRecord.setCouponType(Integer.valueOf(String.valueOf(map.get("couponType"))));
+                        userCouponRecord.setCouponUseType(Integer.valueOf(String.valueOf(map.get("couponUseType"))));
+                        userCouponRecord.setInsertTime(date);
+                        userCouponRecord.setFullMoney(Double.valueOf(String.valueOf(map.get("fullMoney"))));
+                        userCouponRecord.setMoney(Double.valueOf(String.valueOf(map.get("money"))));
+                        userCouponRecord.setCompanyId(userInfo.getCompanyId());
+                        userCouponRecord.setUserId(uid);
+                        userCouponRecordService.insert(userCouponRecord);
+                        //修改剩余可发放总金额
+                        lavePrice -= Double.valueOf(String.valueOf(map.get("money")));
+                    }
+                    UserActivityInvite uai = userActivityInviteMapper.selectById(Integer.valueOf(map.get("id").toString()));
+                    uai.setLavePrice(new BigDecimal(lavePrice).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                    userActivityInviteMapper.updateById(uai);
+                }
+            }
+        }
+        return resultUtil;
+    }
+
+
+    /**
+     * 手机号码查询用户
+     * @param phone
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public UserInfo queryByPhone(String phone) throws Exception {
+        return userInfoMapper.queryByPhone(phone);
+    }
+
+
+    /**
+     * 账号密码登录
+     * @param phone
+     * @param password
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil<LoginWarpper> userLogin(String phone, String password,String loginType) throws Exception {
+        UserInfo userInfo = this.queryByPhone(phone);
+        if(null == userInfo){
+            return ResultUtil.error("账号无效");
+        }
+        if(userInfo.getState() == 2){
+            return ResultUtil.error("账号被冻结");
+        }
+        if(!ShiroKit.md5(password, salt).equals(userInfo.getPassWord())){
+            return ResultUtil.error("密码错误");
+        }
+
+        //调用单点登录的逻辑
+        this.singlePointLogin(userInfo.getId(),loginType);
+
+        String token = this.getToken(userInfo, password,loginType);
+        LoginWarpper loginWarpper = new LoginWarpper();
+        loginWarpper.setId(userInfo.getId());
+        loginWarpper.setToken(token);
+        loginWarpper.setAppid(UUIDUtil.getRandomCode());
+        loginWarpper.setEmergencyContact(userInfo.getEmergencyContact());
+        loginWarpper.setEmergencyContactNumber(userInfo.getEmergencyContactNumber());
+        return ResultUtil.success(loginWarpper);
+    }
+
+
+    /**
+     * 微信授权登录
+     * @param type              登录端口(1:APP登录,2:小程序)
+     * @param openid            微信openid
+     * @param unionid           微信unionid
+     * @param jscode            小程序登录时的jscode临时凭证
+     * @param registIp          ip地址
+     * @param registAreaCode    当前定位区县行政编号(6位)
+     * @return
+     */
+    @Override
+    public ResultUtil<LoginWarpper> wxLogin(Integer type, String openid, String unionid, String jscode, String registIp,
+                                            String registAreaCode, Integer sex, String nickName, String avatar,String loginType) throws Exception {
+        UserInfo userInfo = null;
+        if(type == 2){//小程序
+            if(ToolUtil.isEmpty(jscode)){
+                return ResultUtil.error("微信登录请求失败,请重试");
+            }
+            Map<String, String> map = weChatUtil.code2Session(jscode);
+            openid = map.get("openid");
+            unionid = map.get("unionid");
+            System.out.println("openid===="+openid);
+            System.out.println("unionid===="+unionid);
+            userInfo = userInfoMapper.queryByOpenid2(openid);
+
+        }else{//APP
+            userInfo = userInfoMapper.queryByOpenid(openid);
+        }
+        if(null == userInfo){
+            userInfo = new UserInfo();
+            userInfo.setPassWord(ShiroKit.md5("", salt));
+            userInfo.setRegistIp(registIp);
+            userInfo.setSex(sex);
+            userInfo.setNickName(ToolUtil.isNotEmpty(nickName) ? nickName : this.getDefaultName());
+            userInfo.setAvatar(avatar);
+
+           if(type == 2){
+               userInfo.setAppletsOpenId(openid);
+           }else{
+               userInfo.setOpenId(openid);
+           }
+            userInfo.setUnionid(unionid);
+            userInfo.setIsAuth(1);
+            userInfo.setConsumption(0D);
+            userInfo.setBalance(0D);
+            userInfo.setState(1);
+            //用户所属企业
+            if(null != registAreaCode){
+                Company query = companyCityService.query(registAreaCode);
+                userInfo.setCompanyId(null != query ? query.getId() : null);
+                userInfo.setRegistAreaCode(registAreaCode);
+            }
+            this.insert(userInfo);
+
+            this.addCoupon(userInfo);//添加优惠券
+
+            UserInfo finalUserInfo = userInfo;
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    if(pushMinistryOfTransport){
+                        //上传数据
+                        pushMinistryOfTransportUtil.baseInfoPassenger(finalUserInfo.getId());
+                    }
+                }
+            }).start();
+        }
+        if(userInfo.getState() == 2){
+            return ResultUtil.error("账号被冻结");
+        }
+
+        if(type == 2){//小程序登录
+            String value = redisUtil.getValue("appletOpenId");
+            JSONObject jsonObject = null;
+            if(ToolUtil.isNotEmpty(value)){
+                jsonObject = JSON.parseObject(value);
+            }else{
+                jsonObject = new JSONObject();
+            }
+            jsonObject.put(userInfo.getId().toString(), userInfo.getAppletsOpenId());
+            redisUtil.setStrValue("appletOpenId", jsonObject.toJSONString());
+        }
+
+        //调用单点登录的逻辑
+        this.singlePointLogin(userInfo.getId(),loginType);
+
+        String token = this.getToken(userInfo, "",loginType);
+        LoginWarpper loginWarpper = new LoginWarpper();
+        loginWarpper.setId(userInfo.getId());
+        loginWarpper.setToken(token);
+        loginWarpper.setAppid(UUIDUtil.getRandomCode());
+        loginWarpper.setPhone(ToolUtil.isNotEmpty(userInfo.getPhone()) ? 2 : 1);
+        loginWarpper.setEmergencyContact(userInfo.getEmergencyContact());
+        loginWarpper.setEmergencyContactNumber(userInfo.getEmergencyContactNumber());
+        return ResultUtil.success(loginWarpper);
+    }
+
+
+    /**
+     * 忘记密码操作
+     * @param phone
+     * @param code
+     * @param password
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil forgetPassword(String phone, String code, String password) throws Exception {
+        boolean b = this.checkCaptcha(phone, code);
+        if(!b){
+            return ResultUtil.error("验证码无效");
+        }
+        UserInfo userInfo = this.queryByPhone(phone);
+        if(null == userInfo){
+            return ResultUtil.error("手机号码未注册");
+        }
+        if(userInfo.getState() == 2){
+            return ResultUtil.error("账号已被冻结");
+        }
+        userInfo.setPassWord(ShiroKit.md5(password, salt));
+        userInfo.setUpdateUser(userInfo.getId());
+        userInfo.setUpdateTime(new Date());
+        this.updateById(userInfo);
+
+        smsrecordService.saveData(3, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!");
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 设置手机号码操作
+     * @param uid
+     * @param phone
+     * @param code
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil bindingPhone(Integer uid, String phone, String code,String loginType) throws Exception {
+        boolean b = this.checkCaptcha(phone, code);
+        if(!b){
+            return ResultUtil.error("验证码无效");
+        }
+        UserInfo userInfo = this.selectById(uid);
+        UserInfo userInfo1 = userInfoMapper.queryByPhone(phone);
+        if(null != userInfo1 ){
+            userInfo1.setOpenId(userInfo.getOpenId());
+            userInfo1.setUnionid(userInfo.getUnionid());
+            userInfo1.setAppletsOpenId(userInfo.getAppletsOpenId());
+            userInfo1.setAvatar(userInfo.getAvatar());
+            userInfo1.setSex(userInfo.getSex());
+            userInfo1.setNickName(userInfo.getNickName());
+            this.updateById(userInfo1);
+
+            if(loginType.equals("Applets")){//小程序登录后绑定手机号码
+                String value = redisUtil.getValue("appletOpenId");
+                JSONObject jsonObject = null;
+                if(ToolUtil.isNotEmpty(value)){
+                    jsonObject = JSON.parseObject(value);
+                    jsonObject.remove(userInfo.getId().toString());//删除原有账号缓存的数据
+                }else{
+                    jsonObject = new JSONObject();
+                }
+                jsonObject.put(userInfo1.getId().toString(), userInfo.getAppletsOpenId());
+                redisUtil.setStrValue("appletOpenId", jsonObject.toJSONString());
+            }
+
+
+
+            this.deleteById(userInfo.getId());//删除原有数据
+            //还原之前账号领取的注册优惠券
+            List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("userId", userInfo.getId()));
+            for(UserCouponRecord ucr : list){
+                if(ucr.getActivityType() == 1){//赠送
+
+                }
+                if(ucr.getActivityType() == 2){//注册
+                    UserActivityRegistered userActivityRegistered = userActivityRegisteredService.selectById(ucr.getCouponActivityId());
+                    userActivityRegistered.setLaveNum(userActivityRegistered.getLaveNum() + 1);
+                    userActivityRegistered.setLavePrice(userActivityRegistered.getLavePrice() + ucr.getMoney());
+                    userActivityRegisteredService.updateById(userActivityRegistered);
+                }
+                if(ucr.getActivityType() == 3){//邀请
+
+                }
+                if(ucr.getActivityType() == 4){//充值
+
+                }
+                userCouponRecordService.deleteById(ucr.getId());
+            }
+
+
+            //获取新的token等数据
+            String token = this.getToken(userInfo1, "",loginType);
+            LoginWarpper loginWarpper = new LoginWarpper();
+            loginWarpper.setId(userInfo1.getId());
+            loginWarpper.setToken(token);
+            loginWarpper.setAppid(UUIDUtil.getRandomCode());
+            loginWarpper.setPhone(2);
+            return ResultUtil.success(loginWarpper);
+        }
+
+        userInfo.setPhone(phone);
+        userInfo.setUpdateTime(new Date());
+        userInfo.setUpdateUser(userInfo.getId());
+        this.updateById(userInfo);
+
+        smsrecordService.saveData(2, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!");
+        return ResultUtil.success(new LoginWarpper());
+    }
+
+
+    /**
+     * 从redis中获取数据
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Integer getUserIdFormRedis(HttpServletRequest request) throws Exception {
+        String requestHeader = request.getHeader(JwtConstants.AUTH_HEADER);
+        if (requestHeader != null && requestHeader.startsWith("Bearer ")) {
+            requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1);
+            String key = null;
+            int length = requestHeader.length();
+            if(length > 32){
+                key = requestHeader.substring(length - 32);
+            }else{
+                key = requestHeader;
+            }
+            String value = redisUtil.getValue(key);
+            return null != value ? Integer.valueOf(value) : null;
+        }else{
+            return null;
+        }
+    }
+
+
+    /**
+     * 获取用户详情
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Map<String, Object> queryUserInfo(Integer uid) throws Exception {
+        return userInfoMapper.queryUserInfo(uid, null);
+    }
+
+
+    /**
+     * 电话号码查询用户
+     * @param phone
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Map<String, Object> queryUser(String phone) throws Exception {
+        return userInfoMapper.queryUserInfo(null, phone);
+    }
+
+
+    /**
+     * 设置紧急联系人
+     * @param name
+     * @param phone
+     * @param uid
+     * @throws Exception
+     */
+    @Override
+    public void setUrgentUser(String name, String phone, Integer uid) throws Exception {
+        userInfoMapper.setUrgentUser(name, phone, uid);
+    }
+
+
+    /**
+     * 充值余额
+     * @param payType
+     * @param money
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil depositBalance(Integer payType, Double money, Integer uid, Integer type) throws Exception {
+        UserInfo userInfo = userInfoMapper.selectById(uid);
+        if(money.compareTo(0D) <= 0){
+            return ResultUtil.error("支付金额必须大于0元");
+        }
+        if(payType == 1){//微信支付
+            String value = redisUtil.getValue("appletOpenId");
+            String appletsOpenId = null;
+            if(ToolUtil.isNotEmpty(value)){
+                JSONObject jsonObject = JSON.parseObject(value);
+                appletsOpenId = jsonObject.getString(uid.toString());
+            }else{
+                appletsOpenId = userInfo.getAppletsOpenId();
+            }
+            Integer integer = paymentRecordService.saveData(2, uid, 1, null, null, 1, money, "", 1);//添加预支付数据
+            Map<String, String> map = icbcPayUtil.placeAnOrder(integer.toString(), 9, 5, uid.toString(), "余额充值", money, callbackPath + "/base/wxCancelUserBalance", uid.toString(), type, appletsOpenId);
+            if(map.get("code").equals("200")){
+                PaymentRecord paymentRecord = paymentRecordService.selectById(integer);
+                paymentRecord.setCode(map.get("order_id"));
+                paymentRecordService.updateById(paymentRecord);
+                return ResultUtil.success(map.get("data"));
+            }else{
+                return ResultUtil.error(map.get("msg"), "");
+            }
+        }
+        if(payType == 2){//支付宝支付
+            Integer integer = paymentRecordService.saveData(2, uid, 1, null, null, 2, money, "", 1);//添加预支付数据
+            Map<String, String> map = icbcPayUtil.placeAnOrder(integer.toString(), 10, 5, uid.toString(), "余额充值", money, callbackPath + "/base/aliCancelUserBalance", uid.toString(), type, null);
+            if(map.get("code").equals("200")){
+                PaymentRecord paymentRecord = paymentRecordService.selectById(integer);
+                paymentRecord.setCode(map.get("order_id"));
+                paymentRecordService.updateById(paymentRecord);
+                return ResultUtil.success(map.get("data"));
+            }else{
+                return ResultUtil.error(map.get("msg"), "");
+            }
+        }
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 修改手机号码
+     * @param code
+     * @param phone
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil updatePhone(String code, String phone, Integer uid) throws Exception {
+        boolean b = this.checkCaptcha(phone, code);
+        if(!b){
+            return ResultUtil.error("验证码无效");
+        }
+        UserInfo userInfo = this.selectById(uid);
+        UserInfo userInfo1 = userInfoMapper.queryByPhone(phone);
+        if(null != userInfo1){
+            return ResultUtil.error("手机号已被注册");
+        }
+        userInfo.setPhone(phone);
+        this.updateById(userInfo);
+
+//        smsrecordService.saveData(2, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!");
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 修改密码
+     * @param password
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil updatePass(String password, Integer uid) throws Exception {
+        UserInfo userInfo = this.selectById(uid);
+        userInfo.setPassWord(ShiroKit.md5(password, salt));
+        this.updateById(userInfo);
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 修改个人信息
+     * @param avatar
+     * @param nickname
+     * @param sex
+     * @param birthday
+     * @param uid
+     * @throws Exception
+     */
+    @Override
+    public void updateInfo(String avatar, String nickname, Integer sex, Date birthday, Integer uid) throws Exception {
+        UserInfo userInfo = this.selectById(uid);
+        if(ToolUtil.isNotEmpty(avatar)){
+            userInfo.setAvatar(avatar);
+        }
+        if(ToolUtil.isNotEmpty(nickname)){
+            userInfo.setNickName(nickname);
+        }
+        if(null != sex){
+            userInfo.setSex(sex);
+        }
+        if(null != birthday){
+            userInfo.setBirthday(birthday);
+        }
+        this.updateById(userInfo);
+    }
+
+
+    /**
+     * 获取实名认证数据
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Map<String, Object> queryRealName(Integer uid) throws Exception {
+        return userInfoMapper.queryRealName(uid);
+    }
+
+
+    /**
+     * 完成余额充值后的处理
+     * @param id            用户id
+     * @param order_id      工行订单id
+     * @param type          支付类型(1=微信,2=支付宝)
+     * @throws Exception
+     */
+    @Override
+    public void payCancelUserBalance(Integer id, String order_id, Integer paymentRecordId, Integer type) throws Exception {
+        UserInfo userInfo = this.selectById(id);
+        PaymentRecord query = paymentRecordService.selectById(paymentRecordId);
+        if(null != query){
+            //添加交易明细
+            transactionDetailsService.saveData(Integer.valueOf(id), "余额充值", query.getAmount(), 2, 1, 1, 5, null);
+            double v = new BigDecimal(userInfo.getBalance()).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+            userInfo.setBalance(v);
+            this.updateById(userInfo);
+
+            query.setCode(order_id);
+            query.setState(2);
+            paymentRecordService.updateById(query);
+
+            this.addCoupon(userInfo.getId(), query.getAmount(), userInfo.getCompanyId(), query.getId());//添加优惠券
+
+        }else{
+            System.err.println("预支付数据异常(userId = "  + id + ")");
+        }
+
+    }
+
+
+    /**
+     * H5接入道行龙城实现登录
+     * @param authCode
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil<LoginWarpper> dxlcLogin(String authCode, String registAreaCode,String loginType) throws Exception {
+        Map<String, Object> map = new HashMap<>();
+        //生成环境
+        String path = "https://open.brightcns.com";
+        map.put("clientId", "4821416759766550929");
+        map.put("clientSecret", "yuDyNoOuFeknuLGbLSsWZoaLtHGQaelobgmMlbpgquyAacyBXomwDDSgErKWtDwy");
+        //测试环境
+//        String path = "https://open.test.brightcns.cn";
+//        map.put("clientId", "4818328904840251536");
+//        map.put("clientSecret", "JZrYSBvtVlIRbnsnoJuaqheRWAEHcEJVgeAeIHAUojwUwZIAVzSpAWxgozhfPbcq");
+        map.put("grantType", "authorization_code");
+        map.put("authCode", authCode);
+        String get = httpClientUtil.pushHttpRequset("GET", path + "/api/oauth/accessToken", map, null, "");
+        System.err.print("获取accessToken:" + get);
+        JSONObject jsonObject = JSON.parseObject(get);
+        Boolean success = jsonObject.getBoolean("success");
+        String code = jsonObject.getString("code");
+        if(success && "SUCCESS".equals(code)){
+            JSONObject data = jsonObject.getJSONObject("data");
+            String accessToken = data.getString("accessToken");
+            String userId = data.getString("userId");
+            String refreshToken = data.getString("refreshToken");
+            Map<String, String> userInfo = this.getUserInfo(accessToken);
+            if(null == userInfo){
+                return ResultUtil.error("获取用户信息失败");
+            }
+            return this.captchaLogin(userInfo.get("phone"), "1234", null, registAreaCode, loginType);
+        }else{
+            return ResultUtil.error(jsonObject.getString("msg"));
+        }
+    }
+
+    /**
+     * 小程序使用手机号登录绑定微信
+     * @param userId
+     * @param jscode
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil phoneLoginBindingWeChat(Integer userId, String jscode) throws Exception {
+        Map<String, String> map = weChatUtil.code2Session(jscode);
+        String openid = map.get("openid");
+        String unionid = map.get("unionid");
+        //将当前小程序openid存储到缓存中用后面的支付时使用
+        String value = redisUtil.getValue("appletOpenId");
+        JSONObject jsonObject = null;
+        if(ToolUtil.isNotEmpty(value)){
+            jsonObject = JSON.parseObject(value);
+        }else{
+            jsonObject = new JSONObject();
+        }
+        jsonObject.put(userId.toString(), openid);
+        redisUtil.setStrValue("appletOpenId", jsonObject.toJSONString());
+        return ResultUtil.success();
+    }
+
+    public Map<String, String> getUserInfo(String accessToken){
+        String path = "https://open.brightcns.com";//生产环境
+//        String path = "https://open.test.brightcns.cn";//测试环境
+        Map<String, Object> map = new HashMap<>();
+        map.put("accessToken", accessToken);
+        String get = httpClientUtil.pushHttpRequset("GET", path + "/api/userinfo", map, null, "");
+        System.err.print("获取用户信息:" + get);
+        JSONObject jsonObject = JSON.parseObject(get);
+        Boolean success = jsonObject.getBoolean("success");
+        String code = jsonObject.getString("code");
+        if(success && "SUCCESS".equals(code)){
+            Map<String, String> map1 = new HashMap<>();
+            JSONObject data = jsonObject.getJSONObject("data");
+            map1.put("userId", data.getString("userId"));
+            map1.put("phone", data.getString("phone"));
+            map1.put("userName", data.getString("userName"));
+            return map1;
+        }
+        return null;
+    }
+
+
+
+    /**
+     * 添加充值活动优惠券
+     * @param userId
+     * @param money
+     * @param companyId
+     * @throws Exception
+     */
+    public synchronized void addCoupon(Integer userId, Double money, Integer companyId, Integer paymentRecordId) throws Exception{
+        List<Map<String, Object>> query = userActivityBalanceService.query(money, companyId);
+        List<UserCouponRecord> list = new ArrayList<>();
+        for(Map<String, Object> map : query){
+            //添加通用优惠券
+            Double lavePrice = Double.valueOf(String.valueOf(map.get("lavePrice")));
+            if(null != map.get("bcompanyId")){
+                for(int i = 0; i < Integer.valueOf(String.valueOf(map.get("generalNum"))); i++){
+                    //判断当前发放的优惠券是否大于剩余总发放金额
+                    if(Double.valueOf(String.valueOf(map.get("bmoney"))).compareTo(lavePrice) > 0){
+                        break;
+                    }
+                    UserCouponRecord userCouponRecord = new UserCouponRecord();
+                    userCouponRecord.setUserId(userId);
+                    userCouponRecord.setCompanyId(Integer.valueOf(String.valueOf(map.get("bcompanyId"))));
+                    userCouponRecord.setMoney(Double.valueOf(String.valueOf(map.get("bmoney"))));
+                    userCouponRecord.setFullMoney(Double.valueOf(String.valueOf(map.get("bfullMoney"))));
+                    userCouponRecord.setInsertTime(new Date());
+                    userCouponRecord.setState(1);
+                    userCouponRecord.setCouponUseType(Integer.valueOf(String.valueOf(map.get("bcouponUseType"))));
+                    userCouponRecord.setCouponType(Integer.valueOf(String.valueOf(map.get("bcouponType"))));
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(new Date());
+                    calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(map.get("beffective"))));
+                    userCouponRecord.setExpirationTime(calendar.getTime());
+                    userCouponRecord.setPaymentRecordId(paymentRecordId);
+                    userCouponRecord.setActivityType(4);
+                    userCouponRecord.setCouponActivityId(Integer.valueOf(String.valueOf(map.get("id"))));
+                    userCouponRecord.setCouponId(Integer.valueOf(String.valueOf(map.get("bId"))));
+                    list.add(userCouponRecord);
+                    //开始修改剩余总发放金额
+                    lavePrice -= Double.valueOf(String.valueOf(map.get("bmoney")));
+                }
+            }
+
+            //专车优惠券
+            if(null != map.get("ccompanyId")){
+                for(int i = 0; i < Integer.valueOf(String.valueOf(map.get("specialNum"))); i++){
+                    //判断当前发放的优惠券是否大于剩余总发放金额
+                    if(Double.valueOf(String.valueOf(map.get("cmoney"))).compareTo(lavePrice) > 0){
+                        break;
+                    }
+                    UserCouponRecord userCouponRecord = new UserCouponRecord();
+                    userCouponRecord.setUserId(userId);
+                    userCouponRecord.setCompanyId(Integer.valueOf(String.valueOf(map.get("ccompanyId"))));
+                    userCouponRecord.setMoney(Double.valueOf(String.valueOf(map.get("cmoney"))));
+                    userCouponRecord.setFullMoney(Double.valueOf(String.valueOf(map.get("cfullMoney"))));
+                    userCouponRecord.setInsertTime(new Date());
+                    userCouponRecord.setState(1);
+                    userCouponRecord.setCouponUseType(Integer.valueOf(String.valueOf(map.get("ccouponUseType"))));
+                    userCouponRecord.setCouponType(Integer.valueOf(String.valueOf(map.get("ccouponType"))));
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(new Date());
+                    calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(map.get("ceffective"))));
+                    userCouponRecord.setExpirationTime(calendar.getTime());
+                    userCouponRecord.setPaymentRecordId(paymentRecordId);
+                    userCouponRecord.setActivityType(4);
+                    userCouponRecord.setCouponActivityId(Integer.valueOf(String.valueOf(map.get("id"))));
+                    userCouponRecord.setCouponId(Integer.valueOf(String.valueOf(map.get("cId"))));
+                    list.add(userCouponRecord);
+                    //开始修改剩余总发放金额
+                    lavePrice -= Double.valueOf(String.valueOf(map.get("cmoney")));
+                }
+            }
+
+            //出租车优惠券
+            if(null != map.get("dcompanyId")){
+                for(int i = 0; i < Integer.valueOf(String.valueOf(map.get("taxiNum"))); i++){
+                    //判断当前发放的优惠券是否大于剩余总发放金额
+                    if(Double.valueOf(String.valueOf(map.get("dmoney"))).compareTo(lavePrice) > 0){
+                        break;
+                    }
+                    UserCouponRecord userCouponRecord = new UserCouponRecord();
+                    userCouponRecord.setUserId(userId);
+                    userCouponRecord.setCompanyId(Integer.valueOf(String.valueOf(map.get("dcompanyId"))));
+                    userCouponRecord.setMoney(Double.valueOf(String.valueOf(map.get("dmoney"))));
+                    userCouponRecord.setFullMoney(Double.valueOf(String.valueOf(map.get("dfullMoney"))));
+                    userCouponRecord.setInsertTime(new Date());
+                    userCouponRecord.setState(1);
+                    userCouponRecord.setCouponUseType(Integer.valueOf(String.valueOf(map.get("dcouponUseType"))));
+                    userCouponRecord.setCouponType(Integer.valueOf(String.valueOf(map.get("dcouponType"))));
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(new Date());
+                    calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(map.get("deffective"))));
+                    userCouponRecord.setExpirationTime(calendar.getTime());
+                    userCouponRecord.setPaymentRecordId(paymentRecordId);
+                    userCouponRecord.setActivityType(4);
+                    userCouponRecord.setCouponActivityId(Integer.valueOf(String.valueOf(map.get("id"))));
+                    userCouponRecord.setCouponId(Integer.valueOf(String.valueOf(map.get("dId"))));
+                    list.add(userCouponRecord);
+                    //开始修改剩余总发放金额
+                    lavePrice -= Double.valueOf(String.valueOf(map.get("dmoney")));
+                }
+            }
+
+            //跨城优惠券
+            if(null != map.get("ecompanyId")){
+                for(int i = 0; i < Integer.valueOf(String.valueOf(map.get("intercityNum"))); i++){
+                    //判断当前发放的优惠券是否大于剩余总发放金额
+                    if(Double.valueOf(String.valueOf(map.get("emoney"))).compareTo(lavePrice) > 0){
+                        break;
+                    }
+                    UserCouponRecord userCouponRecord = new UserCouponRecord();
+                    userCouponRecord.setUserId(userId);
+                    userCouponRecord.setCompanyId(Integer.valueOf(String.valueOf(map.get("ecompanyId"))));
+                    userCouponRecord.setMoney(Double.valueOf(String.valueOf(map.get("emoney"))));
+                    userCouponRecord.setFullMoney(Double.valueOf(String.valueOf(map.get("efullMoney"))));
+                    userCouponRecord.setInsertTime(new Date());
+                    userCouponRecord.setState(1);
+                    userCouponRecord.setCouponUseType(Integer.valueOf(String.valueOf(map.get("ecouponUseType"))));
+                    userCouponRecord.setCouponType(Integer.valueOf(String.valueOf(map.get("ecouponType"))));
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(new Date());
+                    calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(map.get("eeffective"))));
+                    userCouponRecord.setExpirationTime(calendar.getTime());
+                    userCouponRecord.setPaymentRecordId(paymentRecordId);
+                    userCouponRecord.setActivityType(4);
+                    userCouponRecord.setCouponActivityId(Integer.valueOf(String.valueOf(map.get("id"))));
+                    userCouponRecord.setCouponId(Integer.valueOf(String.valueOf(map.get("eId"))));
+                    list.add(userCouponRecord);
+                    //开始修改剩余总发放金额
+                    lavePrice -= Double.valueOf(String.valueOf(map.get("emoney")));
+                }
+            }
+            UserActivityBalance uab = userActivityBalanceService.selectById(Integer.valueOf(map.get("id").toString()));
+            uab.setLavePrice(new BigDecimal(lavePrice).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+            userActivityBalanceService.updateById(uab);
+
+            if(list.size() > 0){
+                userCouponRecordService.insertBatch(list);
+            }
+        }
+    }
+
+
+
+    /**
+     * 获取默认名称
+     * @return
+     */
+    public String getDefaultName(){
+        int num = this.selectCount(new EntityWrapper<UserInfo>().ne("flag", 3)) + 1000001;
+        return "XN" + String.valueOf(num).substring(1);
+    }
+
+
+    /**
+     * 获取token
+     * @param userInfo
+     * @param password
+     * @return
+     */
+    private String getToken(UserInfo userInfo, String password,String type) throws Exception{
+        if(ToolUtil.isEmpty(type))type="APP";
+        //封装请求账号密码为shiro可验证的token
+        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(userInfo.getPhone(), password.toCharArray());
+        String credentials = userInfo.getPassWord();
+        ByteSource credentialsSalt = new Md5Hash(salt);
+        SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(
+                new ShiroUser(), credentials, credentialsSalt, "");
+
+        //校验用户账号密码
+        HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher();
+        md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName);
+        md5CredentialsMatcher.setHashIterations(ShiroKit.hashIterations);
+       /* boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch(
+                usernamePasswordToken, simpleAuthenticationInfo);*/
+        String s = JwtTokenUtil.generateToken(String.valueOf(userInfo.getId()));
+        redisUtil.setStrValue(s.substring(s.length() - 32), String.valueOf(userInfo.getId()), 180 * 24 * 60 * 60);
+        redisUtil.setStrValue("USER_"+type+"_" + userInfo.getPhone(), s.substring(s.length() - 32));
+        redisUtil.setStrValue("USER_"+type +"_"+ userInfo.getId(), s);
+        return s;
+    }
+
+
+    /**
+     * 注册时查询活动添加优惠券
+     * @param userInfo
+     * @throws Exception
+     */
+    private synchronized void addCoupon(UserInfo userInfo) throws Exception{
+        //添加优惠券
+        List<Map<String, Object>> list = userActivityRegisteredService.query(userInfo.getCompanyId());
+        int num = 0;
+        for(Map<String, Object> map : list){
+            if(null != map){
+                Integer totalNum = Integer.valueOf(String.valueOf(map.get("totalNum")));
+                Double lavePrice = Double.valueOf(String.valueOf(map.get("lavePrice")));
+                for(int i = totalNum; i > 0; i--){
+                    //判断当前发放的优惠券是否大于剩余可发送总金额
+                    if(Double.valueOf(String.valueOf(map.get("money"))).compareTo(lavePrice) > 0){
+                        break;
+                    }
+                    UserCouponRecord userCouponRecord = new UserCouponRecord();
+                    userCouponRecord.setUserId(userInfo.getId());
+                    userCouponRecord.setCompanyId(Integer.valueOf(String.valueOf(map.get("companyId"))));
+                    userCouponRecord.setMoney(Double.valueOf(String.valueOf(map.get("money"))));
+                    userCouponRecord.setFullMoney(Double.valueOf(String.valueOf(map.get("fullMoney"))));
+                    userCouponRecord.setInsertTime(new Date());
+                    userCouponRecord.setState(1);
+                    userCouponRecord.setCouponUseType(Integer.valueOf(String.valueOf(map.get("couponUseType"))));
+                    userCouponRecord.setCouponType(Integer.valueOf(String.valueOf(map.get("couponType"))));
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(new Date());
+                    Integer integer = Integer.valueOf(String.valueOf(null != map.get("effective") ? map.get("effective") : "0"));
+                    calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + integer);
+                    userCouponRecord.setExpirationTime(calendar.getTime());
+                    userCouponRecord.setCouponId(Integer.valueOf(String.valueOf(map.get("couponId"))));
+                    userCouponRecord.setCouponActivityId(Integer.valueOf(String.valueOf(map.get("id"))));
+                    userCouponRecord.setActivityType(2);
+                    userCouponRecordService.insert(userCouponRecord);
+                    //修改剩余可发放总金额
+                    lavePrice -= Double.valueOf(String.valueOf(map.get("money")));
+                    num++;
+                }
+                UserActivityRegistered uar = userActivityRegisteredService.selectById(Integer.valueOf(map.get("id").toString()));
+                uar.setLavePrice(new BigDecimal(lavePrice).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                userActivityRegisteredService.updateById(uar);
+            }
+        }
+        //添加系统消息
+        systemNoticeService.addSystemNotice(1, "您已获得" + num + "张优惠券,点击查看", userInfo.getId(), 2);
+    }
+
+
+    /**
+     * 单点登录
+     * @param id
+     */
+    private void singlePointLogin(Integer id,String type) throws Exception{
+        if(ToolUtil.isEmpty(type))type="APP";
+        //开始验证当前账号是否在别处登录
+        String value = redisUtil.getValue("USER_"+type+"_" + id);
+        if(ToolUtil.isNotEmpty(value)){//将另外设备上的强迫下线
+            //开始清除redis中无效的数据
+            UserInfo userInfo = userInfoMapper.selectById(id);
+            String key = redisUtil.getValue("USER_"+type+"_" + userInfo.getPhone());
+            redisUtil.remove(key);//删除个人信息数据
+            redisUtil.remove("USER_"+type+"_" + userInfo.getPhone());//删除后台冻结相关缓存
+            redisUtil.remove("USER_"+type+"_" + id);//清除存储的token
+        }
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserRedPacketRecordServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserRedPacketRecordServiceImpl.java
new file mode 100644
index 0000000..a8baff1
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserRedPacketRecordServiceImpl.java
@@ -0,0 +1,59 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.UserRedPacketRecordMapper;
+import com.stylefeng.guns.modular.system.model.UserRedPacketRecord;
+import com.stylefeng.guns.modular.system.service.IUserRedPacketRecordService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class UserRedPacketRecordServiceImpl extends ServiceImpl<UserRedPacketRecordMapper, UserRedPacketRecord> implements IUserRedPacketRecordService {
+
+    @Resource
+    private UserRedPacketRecordMapper userRedPacketRecordMapper;
+
+
+
+
+    /**
+     * 获取不大于money值的红包数据
+     * @param uid
+     * @param companyId
+     * @param state
+     * @param orderType
+     * @param money
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public UserRedPacketRecord query(Integer uid, Integer companyId, Integer state, Integer orderType, Double money) throws Exception {
+        return userRedPacketRecordMapper.query(uid, companyId, state, orderType, money);
+    }
+
+
+    @Override
+    public UserRedPacketRecord query_(Integer uid, Integer companyId, Integer state, Integer orderType, Double money) throws Exception {
+        return userRedPacketRecordMapper.query_(uid, companyId, state, orderType, money);
+    }
+
+
+
+    /**
+     * 获取个人红包列表(未使用)
+     * @param pageNum
+     * @param size
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> queryMyRedEnvelope(Integer pageNum, Integer size, Integer uid) throws Exception {
+        pageNum = (pageNum - 1) * size;
+        return userRedPacketRecordMapper.queryMyRedEnvelope(pageNum, size, uid);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserServiceImpl.java
new file mode 100644
index 0000000..d958f91
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserServiceImpl.java
@@ -0,0 +1,48 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.core.datascope.DataScope;
+import com.stylefeng.guns.modular.system.dao.UserMapper;
+import com.stylefeng.guns.modular.system.model.User;
+import com.stylefeng.guns.modular.system.service.IUserService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 管理员表 服务实现类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+@Service
+public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
+
+    @Override
+    public int setStatus(Integer userId, int status) {
+        return this.baseMapper.setStatus(userId, status);
+    }
+
+    @Override
+    public int changePwd(Integer userId, String pwd) {
+        return this.baseMapper.changePwd(userId, pwd);
+    }
+
+    @Override
+    public List<Map<String, Object>> selectUsers(DataScope dataScope, String name, String beginTime, String endTime, Integer deptid) {
+        return this.baseMapper.selectUsers(dataScope, name, beginTime, endTime, deptid);
+    }
+
+    @Override
+    public int setRoles(Integer userId, String roleIds) {
+        return this.baseMapper.setRoles(userId, roleIds);
+    }
+
+    @Override
+    public User getByAccount(String account) {
+        return this.baseMapper.getByAccount(account);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/VerifiedServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/VerifiedServiceImpl.java
new file mode 100644
index 0000000..e72c2a6
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/VerifiedServiceImpl.java
@@ -0,0 +1,60 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.VerifiedMapper;
+import com.stylefeng.guns.modular.system.model.UserInfo;
+import com.stylefeng.guns.modular.system.model.Verified;
+import com.stylefeng.guns.modular.system.service.IUserInfoService;
+import com.stylefeng.guns.modular.system.service.IVerifiedService;
+import com.stylefeng.guns.modular.system.util.ALiApiUtil;
+import com.stylefeng.guns.modular.system.util.JuHeUtil;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+
+@Service
+public class VerifiedServiceImpl extends ServiceImpl<VerifiedMapper, Verified> implements IVerifiedService {
+
+    @Autowired
+    private JuHeUtil juHeUtil;
+
+    @Autowired
+    private ALiApiUtil aLiApiUtil;
+
+    @Autowired
+    private IUserInfoService userInfoService;
+
+
+    /**
+     * 实名操作
+     * @param verified
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil verified(Verified verified, Integer uid) throws Exception {
+        boolean b = aLiApiUtil.authentication(verified.getName(), verified.getIdcode());
+        verified.setState(b ? 2 : 3);
+        verified.setUserId(uid);
+        verified.setInsertTime(new Date());
+        this.insert(verified);
+
+        //修改个人信息
+        UserInfo userInfo = userInfoService.selectById(uid);
+        if(b){
+            userInfo.setIsAuth(2);
+            userInfo.setName(verified.getName());
+            userInfo.setIdCard(verified.getIdcode());
+            userInfo.setIdCardFront(verified.getImg1());
+            userInfo.setIdCardReverse(verified.getImg2());
+        }else{
+            userInfo.setIsAuth(1);
+        }
+        userInfoService.updateById(userInfo);
+        return b ? ResultUtil.success() : ResultUtil.error("认证失败");
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/VersionManagementServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/VersionManagementServiceImpl.java
new file mode 100644
index 0000000..6f8ec70
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/VersionManagementServiceImpl.java
@@ -0,0 +1,30 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.VersionManagementMapper;
+import com.stylefeng.guns.modular.system.model.VersionManagement;
+import com.stylefeng.guns.modular.system.service.IVersionManagementService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+@Service
+public class VersionManagementServiceImpl extends ServiceImpl<VersionManagementMapper, VersionManagement> implements IVersionManagementService {
+
+    @Resource
+    private VersionManagementMapper versionManagementMapper;
+
+
+
+
+    /**
+     * 获取最新版本
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public Map<String, Object> queryNewVersion() throws Exception {
+        return versionManagementMapper.queryNewVersion(1);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java
new file mode 100644
index 0000000..d71372b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java
@@ -0,0 +1,161 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.WithdrawalMapper;
+import com.stylefeng.guns.modular.system.model.Driver;
+import com.stylefeng.guns.modular.system.model.UserInfo;
+import com.stylefeng.guns.modular.system.model.Withdrawal;
+import com.stylefeng.guns.modular.system.service.IUserInfoService;
+import com.stylefeng.guns.modular.system.service.IWithdrawalService;
+import com.stylefeng.guns.modular.system.util.ICBCPayUtil;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+
+
+@Service
+@Transactional(isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+public class WithdrawalServiceImpl extends ServiceImpl<WithdrawalMapper, Withdrawal> implements IWithdrawalService {
+
+    @Resource
+    private WithdrawalMapper withdrawalMapper;
+
+    @Autowired
+    private IUserInfoService userInfoService;
+
+    @Autowired
+    private ICBCPayUtil icbcPayUtil;
+
+    private Map<String, Timer> timerMap = new HashMap<>();
+
+
+
+
+    /**
+     * 提现操作
+     * @param money
+     * @param code
+     * @param name
+     * @param uid
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil withdrawal(Double money, String code, String name, Integer uid) throws Exception {
+        if(money.compareTo(0D) <= 0){
+            return ResultUtil.error("提现金额必须大于0");
+        }
+        UserInfo userInfo = userInfoService.selectById(uid);
+        if(null == userInfo.getBalance()){
+            return ResultUtil.error("账户没有余额,不能提现");
+        }
+        if(userInfo.getBalance().compareTo(money) < 0){
+            return ResultUtil.error("提现金额必须小于账户余额");
+        }
+
+        Withdrawal withdrawal = new Withdrawal();
+        withdrawal.setBalance(userInfo.getBalance());
+        withdrawal.setCode(code);
+        withdrawal.setFlag(1);
+        withdrawal.setInsertTime(new Date());
+        withdrawal.setMoney(money);
+        withdrawal.setName(name);
+        withdrawal.setState(1);
+        withdrawal.setUserId(uid);
+        withdrawal.setUserType(1);
+
+        ResultUtil<String> transfer = icbcPayUtil.transfer(Double.valueOf(withdrawal.getMoney() * 100).longValue(), withdrawal.getCode(), withdrawal.getName());
+        if(transfer.getCode() != 200){
+            return transfer;
+        }
+        withdrawal.setSerialNo(transfer.getData());
+        this.insert(withdrawal);
+
+        double v = new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+        userInfo.setBalance(v);
+        userInfoService.updateById(userInfo);
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 获取历史提交数
+     * @param uid
+     * @param pageNum
+     * @param size
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<Map<String, Object>> queryWithdrawal(Integer uid, Integer pageNum, Integer size) throws Exception {
+        pageNum = (pageNum - 1) * size;
+        return withdrawalMapper.queryWithdrawal(uid, 1, pageNum, size);
+    }
+
+
+    /**
+     * 提现审核处理
+     * @param id
+     * @param state
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil withdrawalAudit(Integer id, Integer state) throws Exception {
+        Withdrawal withdrawal = this.selectById(id);
+//        if(withdrawal.getState() == 2){
+//            return ResultUtil.error("申请已审核通过,不能重复提交");
+//        }
+//        if(withdrawal.getState() == 3){
+//            return ResultUtil.error("申请已审核拒绝,不能重复提交");
+//        }
+        if(state == 1){//审核通过
+            TimerTask timerTask = new TimerTask() {
+                @Override
+                public void run() {
+                    Integer integer = icbcPayUtil.queryTransfer(withdrawal.getSerialNo());
+                    if(integer == 0){//交易成功
+                        withdrawal.setState(2);
+                        WithdrawalServiceImpl.this.updateById(withdrawal);
+
+                        Timer timer = timerMap.get(withdrawal.getSerialNo());
+                        timer.cancel();
+                    }
+                    if(integer == 2){//交易拒绝/失败
+                        //还原余额
+                        if(withdrawal.getUserType() == 1){//用户
+                            withdrawal.setState(3);
+                            WithdrawalServiceImpl.this.updateById(withdrawal);
+
+                            UserInfo userInfo = userInfoService.selectById(withdrawal.getUserId());
+                            userInfo.setBalance(new BigDecimal(userInfo.getBalance()).add(new BigDecimal(withdrawal.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                            userInfoService.updateById(userInfo);
+
+                            Timer timer = timerMap.get(withdrawal.getSerialNo());
+                            timer.cancel();
+                        }
+
+                    }
+                }
+            };
+            Timer timer = new Timer();
+            timer.schedule(timerTask, 1000, 10000);//1秒钟后间隔10秒钟查询交易结果
+            timerMap.put(withdrawal.getSerialNo(), timer);
+        }
+        if(state == 2){//审核拒绝
+            UserInfo userInfo = userInfoService.selectById(withdrawal.getUserId());
+            userInfo.setBalance(new BigDecimal(userInfo.getBalance()).add(new BigDecimal(withdrawal.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+            userInfoService.updateById(userInfo);
+
+            withdrawal.setState(3);
+            this.updateById(withdrawal);
+        }
+        return ResultUtil.success();
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/ManagerUser.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/ManagerUser.java
new file mode 100644
index 0000000..0e16e16
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/ManagerUser.java
@@ -0,0 +1,97 @@
+package com.stylefeng.guns.modular.system.transfer;
+
+import java.util.Date;
+
+/**
+ * 管理员的信息封装
+ *
+ * @author fengshuonan
+ * @Date 2017年1月11日 下午7:46:53
+ */
+public class ManagerUser {
+
+    private String userId;
+
+    /* 用户账号 */
+    private String userNo;
+
+    /* 用户姓名 */
+    private String userName;
+
+    private String userPhone;
+
+    //1:超级管理员  2:管理员
+    private String userRole;
+
+    /* 1:登录状态 2:退出状态 3:停用状态 */
+    private Integer userStatus;
+
+    private Date createTime;
+
+    private Date loginTime;
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getUserNo() {
+        return userNo;
+    }
+
+    public void setUserNo(String userNo) {
+        this.userNo = userNo;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserPhone() {
+        return userPhone;
+    }
+
+    public void setUserPhone(String userPhone) {
+        this.userPhone = userPhone;
+    }
+
+    public String getUserRole() {
+        return userRole;
+    }
+
+    public void setUserRole(String userRole) {
+        this.userRole = userRole;
+    }
+
+    public Integer getUserStatus() {
+        return userStatus;
+    }
+
+    public void setUserStatus(Integer userStatus) {
+        this.userStatus = userStatus;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getLoginTime() {
+        return loginTime;
+    }
+
+    public void setLoginTime(Date loginTime) {
+        this.loginTime = loginTime;
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/ReqAddManager.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/ReqAddManager.java
new file mode 100644
index 0000000..6e28801
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/ReqAddManager.java
@@ -0,0 +1,76 @@
+package com.stylefeng.guns.modular.system.transfer;
+
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 添加管理员的请求bean
+ *
+ * @author fengshuonan
+ * @Date 2017年1月12日 下午6:46:24
+ */
+public class ReqAddManager {
+
+    // 用户姓名
+    @NotNull
+    private String userName;
+
+    // 用户账号
+    @NotNull
+    private String userNo;
+
+    // 手机号
+    @NotNull
+    @Length(min = 11, max = 11)
+    private String userPhone;
+
+    // 1:超级管理员 2:管理员
+    @NotNull
+    private String userRole;
+
+    // 密码
+    @NotNull
+    private String userPassword;
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserNo() {
+        return userNo;
+    }
+
+    public void setUserNo(String userNo) {
+        this.userNo = userNo;
+    }
+
+    public String getUserPhone() {
+        return userPhone;
+    }
+
+    public void setUserPhone(String userPhone) {
+        this.userPhone = userPhone;
+    }
+
+    public String getUserRole() {
+        return userRole;
+    }
+
+    public void setUserRole(String userRole) {
+        this.userRole = userRole;
+    }
+
+    public String getUserPassword() {
+        return userPassword;
+    }
+
+    public void setUserPassword(String userPassword) {
+        this.userPassword = userPassword;
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/ReqEditManager.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/ReqEditManager.java
new file mode 100644
index 0000000..394d4b4
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/ReqEditManager.java
@@ -0,0 +1,60 @@
+package com.stylefeng.guns.modular.system.transfer;
+
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 编辑管理员的请求
+ *
+ * @author fengshuonan
+ * @Date 2017年1月15日 下午10:29:16
+ */
+public class ReqEditManager {
+
+    @NotNull
+    private String userId;
+
+    /* 用户姓名 */
+    @NotNull
+    private String userName;
+
+    private String userPassword;
+
+    @NotNull
+    @Length(min = 11, max = 11)
+    private String userPhone;
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserPassword() {
+        return userPassword;
+    }
+
+    public void setUserPassword(String userPassword) {
+        this.userPassword = userPassword;
+    }
+
+    public String getUserPhone() {
+        return userPhone;
+    }
+
+    public void setUserPhone(String userPhone) {
+        this.userPhone = userPhone;
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/UserDto.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/UserDto.java
new file mode 100644
index 0000000..d45f320
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/transfer/UserDto.java
@@ -0,0 +1,153 @@
+package com.stylefeng.guns.modular.system.transfer;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 用户传输bean
+ * 
+ * @author stylefeng
+ * @Date 2017/5/5 22:40
+ */
+public class UserDto{
+
+	private Integer id;
+	private String account;
+	private String password;
+	private String salt;
+	private String name;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private Date birthday;
+	private Integer sex;
+	private String email;
+	private String phone;
+	private String roleid;
+	private Integer deptid;
+	private Integer status;
+	private Date createtime;
+	private Integer version;
+	private String avatar;
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getAccount() {
+		return account;
+	}
+
+	public void setAccount(String account) {
+		this.account = account;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public String getSalt() {
+		return salt;
+	}
+
+	public void setSalt(String salt) {
+		this.salt = salt;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Date getBirthday() {
+		return birthday;
+	}
+
+	public void setBirthday(Date birthday) {
+		this.birthday = birthday;
+	}
+
+	public Integer getSex() {
+		return sex;
+	}
+
+	public void setSex(Integer sex) {
+		this.sex = sex;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getPhone() {
+		return phone;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
+
+	public String getRoleid() {
+		return roleid;
+	}
+
+	public void setRoleid(String roleid) {
+		this.roleid = roleid;
+	}
+
+	public Integer getDeptid() {
+		return deptid;
+	}
+
+	public void setDeptid(Integer deptid) {
+		this.deptid = deptid;
+	}
+
+	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;
+	}
+
+	public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer version) {
+		this.version = version;
+	}
+
+	public String getAvatar() {
+		return avatar;
+	}
+
+	public void setAvatar(String avatar) {
+		this.avatar = avatar;
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ALiApiUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ALiApiUtil.java
new file mode 100644
index 0000000..157f7d5
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ALiApiUtil.java
@@ -0,0 +1,51 @@
+package com.stylefeng.guns.modular.system.util;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 阿里云API接口工具类
+ */
+@Component
+public class ALiApiUtil {
+
+    @Autowired
+    private HttpClientUtil httpClientUtil;
+
+
+    /**
+     * 身份认证接口
+     * @param name  姓名
+     * @param code  身份证号
+     * @return
+     */
+    public boolean authentication(String name, String code){
+        String url = "https://safrvcert.market.alicloudapi.com/safrv_2meta_id_name/";
+        Map<String, String> header = new HashMap<>();
+        header.put("Authorization", "APPCODE b7d32437d08149099457dcb50fb57df2");
+        Map<String, Object> param = new HashMap<>();
+        param.put("__userId", "1732960796168165");
+        param.put("verifyKey", "IVO4js5kValcdt");
+        param.put("userName", name);
+        param.put("identifyNum", code);
+        String get = httpClientUtil.pushHttpRequset("GET", url, param, header, "form");
+        JSONObject jsonObject = JSON.parseObject(get);
+        if(jsonObject.getIntValue("code") == 200){
+            JSONObject value = jsonObject.getJSONObject("value");
+            if(value.getString("bizCode").equals("0")){
+                return true;
+            }else{
+                return false;
+            }
+        }else{
+            System.err.println(jsonObject.getString("message"));
+        }
+        return false;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ALiSendSms.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ALiSendSms.java
new file mode 100644
index 0000000..781eb33
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ALiSendSms.java
@@ -0,0 +1,123 @@
+package com.stylefeng.guns.modular.system.util;
+
+
+import com.aliyuncs.CommonRequest;
+import com.aliyuncs.CommonResponse;
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.exceptions.ClientException;
+import com.aliyuncs.profile.DefaultProfile;
+import com.google.gson.Gson;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 阿里云短信工具类
+ */
+@Component
+public class ALiSendSms {
+
+    // 设置鉴权参数,初始化客户端
+    private DefaultProfile profile = DefaultProfile.getProfile(
+            "cn-hangzhou",// 地域ID
+            "LTAI5tGKnargMr2xhv1yTmGE",// 您的AccessKey ID
+            "fT9lgQ9SShh98uok4rJkP5ucl8EgVm");// 您的AccessKey Secret
+    private IAcsClient client = new DefaultAcsClient(profile);
+
+    private static void log_print(String functionName, Object result) {
+        Gson gson = new Gson();
+        System.out.println("-------------------------------" + functionName + "-------------------------------");
+        System.out.println(gson.toJson(result));
+    }
+
+    /**
+     * 添加短信模板
+     */
+    public String addSmsTemplate() throws ClientException {
+        CommonRequest addSmsTemplateRequest = new CommonRequest();
+        addSmsTemplateRequest.setSysDomain("dysmsapi.aliyuncs.com");
+        addSmsTemplateRequest.setSysAction("AddSmsTemplate");
+        addSmsTemplateRequest.setSysVersion("2017-05-25");
+        // 短信类型。0:验证码;1:短信通知;2:推广短信;3:国际/港澳台消息
+        addSmsTemplateRequest.putQueryParameter("TemplateType", "0");
+        // 模板名称,长度为1~30个字符
+        addSmsTemplateRequest.putQueryParameter("TemplateName", "测试短信模板");
+        // 模板内容,长度为1~500个字符
+        addSmsTemplateRequest.putQueryParameter("TemplateContent", "您正在申请手机注册,验证码为:${code},5分钟内有效!");
+        // 短信模板申请说明
+        addSmsTemplateRequest.putQueryParameter("Remark", "测试");
+        CommonResponse addSmsTemplateResponse = client.getCommonResponse(addSmsTemplateRequest);
+        String data = addSmsTemplateResponse.getData();
+        // 消除返回文本中的反转义字符
+        String sData = data.replaceAll("'\'", "");
+        log_print("addSmsTemplate", sData);
+        Gson gson = new Gson();
+        // 将字符串转换为Map类型,取TemplateCode字段值
+        Map map = gson.fromJson(sData, Map.class);
+        Object templateCode = map.get("TemplateCode");
+        return templateCode.toString();
+    }
+
+    /**
+     * 发送短信
+     */
+    public String sendSms(String phone, String templateCode, String json) throws ClientException {
+        CommonRequest request = new CommonRequest();
+        request.setSysDomain("dysmsapi.aliyuncs.com");
+        request.setSysVersion("2017-05-25");
+        request.setSysAction("SendSms");
+        // 接收短信的手机号码
+        request.putQueryParameter("PhoneNumbers", phone);
+        // 短信签名名称。请在控制台签名管理页面签名名称一列查看(必须是已添加、并通过审核的短信签名)。
+        request.putQueryParameter("SignName", "咸宁95128");
+        // 短信模板ID
+        request.putQueryParameter("TemplateCode", templateCode);
+        // 短信模板变量对应的实际值,JSON格式。
+        request.putQueryParameter("TemplateParam", json);
+        CommonResponse commonResponse = client.getCommonResponse(request);
+        String data = commonResponse.getData();
+        String sData = data.replaceAll("'\'", "");
+        log_print("sendSms", sData);
+        return sData;
+    }
+
+    /**
+     * 查询发送详情
+     */
+    private void querySendDetails(String bizId) throws ClientException {
+        CommonRequest request = new CommonRequest();
+        request.setSysDomain("dysmsapi.aliyuncs.com");
+        request.setSysVersion("2017-05-25");
+        request.setSysAction("QuerySendDetails");
+        // 接收短信的手机号码
+        request.putQueryParameter("PhoneNumber", "156xxxxxxxx");
+        // 短信发送日期,支持查询最近30天的记录。格式为yyyyMMdd,例如20191010。
+        request.putQueryParameter("SendDate", "20191010");
+        // 分页记录数量
+        request.putQueryParameter("PageSize", "10");
+        // 分页当前页码
+        request.putQueryParameter("CurrentPage", "1");
+        // 发送回执ID,即发送流水号。
+        request.putQueryParameter("BizId", bizId);
+        CommonResponse response = client.getCommonResponse(request);
+        log_print("querySendDetails", response.getData());
+    }
+
+    public static void main(String[] args) {
+        ALiSendSms sendSmsDemo = new ALiSendSms();
+        try {
+            // 创建短信模板
+            String templateCode = sendSmsDemo.addSmsTemplate();
+            // 使用刚创建的短信模板发送短信
+            String sData = sendSmsDemo.sendSms("18398968484", templateCode, "{\"code\":\"8888\"}");
+            Gson gson = new Gson();
+            Map map = gson.fromJson(sData, Map.class);
+            String bizId = map.get("BizId").toString();
+            // 根据短信发送流水号查询短信发送情况
+            sendSmsDemo.querySendDetails(bizId);
+        } catch (ClientException e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ApplicationRunnerUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ApplicationRunnerUtil.java
new file mode 100644
index 0000000..03f1171
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ApplicationRunnerUtil.java
@@ -0,0 +1,99 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.stylefeng.guns.modular.crossCity.dao.LineShiftDriverMapper;
+import com.stylefeng.guns.modular.crossCity.dao.OrderCrossCityMapper;
+import com.stylefeng.guns.modular.crossCity.model.LineShiftDriver;
+import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
+import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
+import com.stylefeng.guns.modular.system.model.Driver;
+import com.stylefeng.guns.modular.system.model.OrderCancel;
+import com.stylefeng.guns.modular.system.service.IDriverService;
+import com.stylefeng.guns.modular.system.service.IOrderCancelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * 项目启动执行类
+ */
+@Component
+public class ApplicationRunnerUtil implements ApplicationRunner {
+
+    @Autowired
+    private IOrderCrossCityService orderCrossCityService;
+
+    @Autowired
+    private IOrderCancelService orderCancelService;
+
+    @Resource
+    private LineShiftDriverMapper lineShiftDriverMapper;
+
+    @Resource
+    private OrderCrossCityMapper orderCrossCityMapper;
+
+    @Autowired
+    private IDriverService driverService;
+
+
+
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        this.taskOrderCrossCity();
+    }
+
+
+    /**
+     * 创建定时任务定时取消订单
+     */
+    private void taskOrderCrossCity(){
+        List<OrderCrossCity> orderCrossCities = orderCrossCityService.selectList(new EntityWrapper<OrderCrossCity>().eq("state", 7).eq("isDelete", 1));
+        for(OrderCrossCity orderCrossCity : orderCrossCities){
+            long time = System.currentTimeMillis() - orderCrossCity.getInsertTime().getTime();
+            TimerTask timerTask = new TimerTask() {
+                @Override
+                public void run() {
+                    OrderCrossCity orderCrossCity1 = orderCrossCityService.selectById(orderCrossCity.getId());
+                    if(orderCrossCity1.getState() == 7 && orderCrossCity1.getPayMoney() == null){
+                        orderCrossCity1.setState(10);
+                        orderCrossCityService.updateById(orderCrossCity1);
+
+                        OrderCancel orderCancel = new OrderCancel();
+                        orderCancel.setOrderId(orderCrossCity.getId());
+                        orderCancel.setOrderType(3);
+                        orderCancel.setReason("用户未及时付款,系统自动取消订单");
+                        orderCancel.setRemark("用户未及时付款,系统自动取消订单");
+                        orderCancel.setState(2);
+                        orderCancel.setInsertTime(new Date());
+                        orderCancel.setUserType(2);
+                        orderCancelService.insert(orderCancel);
+
+                        //修改司机座位
+                        LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId());
+                        lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber());
+                        lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber());
+                        lineShiftDriverMapper.updateById(lineShiftDriver);
+
+                        //修改司机为空闲
+                        List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11);
+                        if(orderCrossCities.size() == 0){
+                            Driver driver = driverService.selectById(orderCrossCity.getDriverId());
+                            driver.setState(2);
+                            driverService.updateById(driver);
+                        }
+                    }
+                }
+            };
+            Timer timer = new Timer();
+            timer.schedule(timerTask, time < 0 ? 0 : time);
+        }
+        System.err.println("【创建自动取消定时任务成功】");
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ChinaMobileUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ChinaMobileUtil.java
new file mode 100644
index 0000000..5ef83bd
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ChinaMobileUtil.java
@@ -0,0 +1,128 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.core.util.MD5Util;
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 中国移动工具类
+ */
+@Component
+public class ChinaMobileUtil {
+
+    private String APIKey = "zj42494b1bdd416b9762229af6b5cbbd";
+
+    private String SecretKey = "30323561316534653735613230316339";
+
+    @Autowired
+    private HttpClientUtil httpClientUtil;
+
+
+    /**
+     * 绑定小号
+     * @param phoneA
+     * @param phoneB
+     * @param areaCode
+     * @return
+     * @throws Exception
+     */
+    public Map<String, String> midAxbBindSend(String phoneA, String phoneB, Integer areaCode) throws Exception{
+        //组装请求对象-具体描述见开发文档-订单小号-AXB接口规范部分内容
+        Map<String, Object> request = new HashMap<>();
+        request.put("APPID", APIKey);
+        request.put("bindtype", "AXB");
+        request.put("requestId", UUIDUtil.getRandomCode(16));
+        request.put("record", "0");
+        //用户号码,必填,格式遵循国际电信联盟定义的E.164标准
+        request.put("telA", "86" + phoneA);
+        //用户号码B,必填,格式遵循国际电信联盟定义的E.164标准
+        request.put("telB", "86" + phoneB);
+        //需要选择的小号所属区号,当telX不写时必填,例如:杭州(571)
+        request.put("areaCode", 571);
+        //订单小号,非必填,当指定小号绑定时填写,格式遵循国际电信联盟定义的E.164标准
+//        request.setTelX("8618867110000");
+        //绑定关系过期失效时间,秒,取值必须大于0且最大值不超过4294967296
+        request.put("expiration", Integer.valueOf(7 * 24 * 60 * 60));
+
+        Map<String, String> header = new HashMap<String, String>(3);
+        header.put("Authorization", "Basic " + new String(Base64.encodeBase64((APIKey + ":" + SecretKey).getBytes())));
+        header.put("Content-Type", "application/json;charset=utf-8");
+        String post = httpClientUtil.pushHttpRequset("POST", "https://ct.open.10086.cn/ordernumber/v1/binding", request, header, "json");
+        Map<String, String> map1 = new HashMap<>();
+        if(post.indexOf("0000") != -1){
+            JSONObject jsonObject = JSONObject.parseObject(post);
+            if(jsonObject.getString("code").equals("0000")){
+                map1.put("code", "200");
+                map1.put("msg", jsonObject.getString("message"));
+                map1.put("telX", jsonObject.getString("x_no").substring(2));
+                map1.put("bindId", jsonObject.getString("bindId"));
+            }else{
+                map1.put("code", jsonObject.getString("code"));
+                map1.put("msg", jsonObject.getString("message"));
+            }
+        }else{
+            map1.put("code", "-1");
+            map1.put("msg", post);
+        }
+
+        return map1;
+    }
+
+
+    /**
+     * 解绑小号关系
+     * @param bindId    绑定关系id
+     * @return
+     * @throws Exception
+     */
+    public Map<String, String> midAxbUnBindSend(String bindId) throws Exception{
+        //组装请求对象-具体描述见开发文档-订单小号-AXB接口规范部分内容
+        Map<String, Object> request = new HashMap<>();
+        //绑定关系ID
+        request.put("APPID", APIKey);
+        request.put("bindId", bindId);
+
+        Map<String, String> header = new HashMap<String, String>(3);
+        header.put("Authorization", "Basic " + new String(Base64.encodeBase64((APIKey + ":" + SecretKey).getBytes())));
+        header.put("Content-Type", "application/json;charset=utf-8");
+        String post = httpClientUtil.pushHttpRequset("POST", "https://ct.open.10086.cn/ordernumber/v1/unbinding", request, header, "json");
+        JSONObject jsonObject = JSONObject.parseObject(post);
+        Map<String, String> map1 = new HashMap<>();
+        if(jsonObject.getString("code").equals("0000")){
+            map1.put("code", "200");
+            map1.put("msg", jsonObject.getString("message"));
+        }else{
+            map1.put("code", jsonObject.getString("code"));
+            map1.put("msg", jsonObject.getString("message"));
+        }
+        return map1;
+    }
+
+
+
+
+    public Map<String, String> HeaderUtils(String APIKey, String SecretKey) throws Exception{
+        Map<String, String> header = new HashMap<>();
+        long time = System.currentTimeMillis();
+        String signStr = MD5Util.encrypt(APIKey + SecretKey + time);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("apiKey", APIKey);
+        jsonObject.put("time", time);
+        jsonObject.put("sign", signStr);
+        Base64 base64 = new Base64();
+        String s = base64.encodeToString(jsonObject.toJSONString().getBytes("UTF-8"));
+        header.put("header", s);
+
+        jsonObject = new JSONObject();
+        jsonObject.put("platformId", "");
+        jsonObject.put("secret", "");
+        s = base64.encodeToString(jsonObject.toJSONString().getBytes("UTF-8"));
+        header.put("accessCode", s);
+        return header;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/DateUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/DateUtil.java
new file mode 100644
index 0000000..9519160
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/DateUtil.java
@@ -0,0 +1,133 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.stylefeng.guns.core.util.ToolUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 日期处理工具类
+ */
+@Component
+public class DateUtil {
+
+
+    /**
+     * 获取给定日期天的开始时间点或结束时间点
+     * @param time  日期
+     * @param type  时间点类型start一天的开始时间点,end一天的结束时间点
+     * @return
+     */
+    public Date getStartOrEndDate(Date time, String type){
+        if(ToolUtil.isEmpty(time) || ToolUtil.isEmpty(type)){
+            return null;
+        }
+        int hourOfDay = "start".equals(type) ? 0 : 23;
+        int minute = "start".equals(type) ? 0 : 59;
+        int second = "start".equals(type) ? 0 : 59;
+        Calendar s = Calendar.getInstance();
+        s.setTime(time);
+        s.set(s.get(Calendar.YEAR), s.get(Calendar.MONTH), s.get(Calendar.DAY_OF_MONTH), hourOfDay, minute, second);
+        return s.getTime();
+    }
+
+
+
+
+    /**
+     * 获取给定日期天的起始时间和结束时间
+     * @param time
+     * @return
+     */
+    public Map<String, Date> getStartAndEndDate(Date time){
+        if(ToolUtil.isEmpty(time)){
+            return null;
+        }
+        Map<String, Date> map = new HashMap<>();
+        map.put("startTime", getStartOrEndDate(time, "start"));
+        map.put("endTime", getStartOrEndDate(time, "end"));
+        return map;
+    }
+
+
+
+
+    /**
+     * 获取格式化的字符串日期返回日期天的起始时间和结束时间
+     * @param time  yyyy-MM-dd DD:mm:ss/yyyy-MM-dd
+     * @return
+     */
+    public Map<String, Date> getStartAndEndDate(String time){
+        if(ToolUtil.isEmpty(time)){
+            return null;
+        }
+        int index = time.indexOf(" ");
+        String pattern = "yyyy-MM-dd DD:mm:ss";
+        if(index == -1){
+            pattern = "yyyy-MM-dd";
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
+        Date date = null;
+        try {
+            date = sdf.parse(time);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return getStartAndEndDate(date);
+    }
+
+
+    /**
+     * 获取格式化的字符串区间日期返回区间日期天的起始时间和结束时间
+     * @param time      yyyy-MM-dd DD:mm:ss - yyyy-MM-dd DD:mm:ss/yyyy-MM-dd - yyyy-MM-dd
+     * @param split     区间时间的分隔符
+     * @return
+     */
+    public List<Date> getStartAndEndDate(String time, String split){
+        if(ToolUtil.isEmpty(time) || ToolUtil.isEmpty(split)){
+            return null;
+        }
+        List<Date> list = new ArrayList<>();
+        String[] split1 = time.split(split);
+        int index = split1[0].indexOf(" ");
+        String pattern = "yyyy-MM-dd DD:mm:ss";
+        if(index == -1){
+            pattern = "yyyy-MM-dd";
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
+        Date date1 = null;
+        Date date2 = null;
+        try {
+            date1 = sdf.parse(split1[0]);
+            date2 = sdf.parse(split1[1]);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        list.add(getStartOrEndDate(date1, "start"));
+        list.add(getStartOrEndDate(date2, "end"));
+        return list;
+    }
+
+
+    /**
+     * 获取月初和月末日期
+     * @param date
+     * @return
+     */
+    public Map<String, Date> getMonthStartAndEnd(Date date){
+        Calendar s = Calendar.getInstance();
+        s.setTime(date);
+        s.set(Calendar.DAY_OF_MONTH, 1);
+        Calendar e = Calendar.getInstance();
+        e.setTime(date);
+        e.set(Calendar.DAY_OF_MONTH, e.getActualMaximum(Calendar.DAY_OF_MONTH));
+        Date start = this.getStartOrEndDate(s.getTime(), "start");
+        Date end = this.getStartOrEndDate(e.getTime(), "end");
+        Map<String, Date> map = new HashMap<>();
+        map.put("startTime", start);
+        map.put("endTime", end);
+        return map;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDFalconUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDFalconUtil.java
new file mode 100644
index 0000000..61122d1
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDFalconUtil.java
@@ -0,0 +1,224 @@
+//package com.stylefeng.guns.modular.system.util;
+//
+//import com.alibaba.fastjson.JSON;
+//import com.alibaba.fastjson.JSONArray;
+//import com.alibaba.fastjson.JSONObject;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.ApplicationArguments;
+//import org.springframework.boot.ApplicationRunner;
+//import org.springframework.http.HttpEntity;
+//import org.springframework.http.HttpHeaders;
+//import org.springframework.http.MediaType;
+//import org.springframework.stereotype.Component;
+//import org.springframework.util.LinkedMultiValueMap;
+//import org.springframework.util.MultiValueMap;
+//import org.springframework.web.client.RestTemplate;
+//
+//
+///**
+// * 高德猎鹰服务
+// */
+//@Component
+//public class GDFalconUtil implements ApplicationRunner {
+//
+//    private String key = "3491db7ed190e5e4757fcb838e012130";
+//
+//    @Autowired
+//    private RestTemplate restTemplate;
+//
+//    private static String serverId = null;
+//
+//
+//    public String getServerId() {
+//        return serverId;
+//    }
+//
+//    /**
+//     * 服务启动后执行的代码
+//     * @param args
+//     * @throws Exception
+//     */
+//    @Override
+//    public void run(ApplicationArguments args) throws Exception {
+//        this.init();
+//    }
+//
+//
+//
+//    /**
+//     * 初始化创建服务
+//     */
+//    public void init(){
+//        if(serverId == null){
+//            JSONArray jsonArray = this.selectServer();
+//            if(null == jsonArray){
+//                serverId = this.createServer("server");
+//            }else{
+//                serverId = jsonArray.getJSONObject(0).getString("sid");
+//            }
+//        }
+//
+//    }
+//
+//
+//    /**
+//     * 创建新的服务
+//     * @return
+//     */
+//    public String createServer(String name){
+//        String url = "https://tsapi.amap.com/v1/track/service/add";
+//        //调用推送
+//        HttpHeaders headers = new HttpHeaders();
+//        // 以表单的方式提交
+//        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+//        //将请求头部和参数合成一个请求
+//        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+//        params.add("key", key);
+//        params.add("name", name);
+//        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+//        String s = restTemplate.postForObject(url, requestEntity , String.class);
+//        JSONObject jsonObject = JSON.parseObject(s);
+//        if(jsonObject.getIntValue("errcode") == 10000){
+//            JSONObject data = jsonObject.getJSONObject("data");
+//            if(null != data){
+//                return data.getString("sid");
+//            }
+//        }
+//        return null;
+//    }
+//
+//
+//    /**
+//     * 查询服务
+//     * @return
+//     */
+//    private JSONArray selectServer(){
+//        String url = "https://tsapi.amap.com/v1/track/service/list?key=" + key;
+//        String forObject = restTemplate.getForObject(url, String.class);
+//        JSONObject jsonObject = JSON.parseObject(forObject);
+//        if(jsonObject.getIntValue("errcode") == 10000){
+//            JSONObject data = jsonObject.getJSONObject("data");
+//            if(null != data){
+//                return data.getJSONArray("results");
+//            }
+//        }
+//        return null;
+//    }
+//
+//
+//    /**
+//     * 创建终端数据
+//     * @param name
+//     * @return
+//     */
+//    public String createTerminal(String name){
+//        String tid = this.selectTerminal(name);
+//        if(tid != null){
+//            return tid;
+//        }
+//        String url = "https://tsapi.amap.com/v1/track/terminal/add";
+//        //调用推送
+//        HttpHeaders headers = new HttpHeaders();
+//        // 以表单的方式提交
+//        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+//        //将请求头部和参数合成一个请求
+//        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+//        params.add("key", key);
+//        params.add("sid", serverId);
+//        params.add("name", name);
+//        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+//        String s = restTemplate.postForObject(url, requestEntity , String.class);
+//        JSONObject jsonObject = JSON.parseObject(s);
+//        if(jsonObject.getIntValue("errcode") == 10000){
+//            JSONObject data = jsonObject.getJSONObject("data");
+//            return data.getString("tid");
+//        }
+//        System.err.println(jsonObject.getString("errmsg"));
+//        return null;
+//    }
+//
+//
+//    /**
+//     * 查询终端
+//     * @param name
+//     * @return
+//     */
+//    public String selectTerminal(String name){
+//        String url = "https://tsapi.amap.com/v1/track/terminal/list?key=" + key + "&name=" + name;
+//        String forObject = restTemplate.getForObject(url, String.class);
+//        JSONObject jsonObject = JSON.parseObject(forObject);
+//        if(jsonObject.getIntValue("errcode") == 10000){
+//            JSONObject data = jsonObject.getJSONObject("data");
+//            int count = 0;
+//            if(null != data){
+//                count = data.getIntValue("count");
+//            }
+//            if(count > 0){
+//                JSONObject results = data.getJSONArray("results").getJSONObject(0);
+//                return results.getString("tid");
+//            }else{
+//                return this.createTerminal(name);
+//            }
+//        }
+//        return null;
+//    }
+//
+//
+//    /**
+//     * 创建轨迹
+//     * @param tid   终端id
+//     * @return
+//     */
+//    public String createTrack(String tid){
+//        String url = "https://tsapi.amap.com/v1/track/trace/add";
+//        //调用推送
+//        HttpHeaders headers = new HttpHeaders();
+//        // 以表单的方式提交
+//        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+//        //将请求头部和参数合成一个请求
+//        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+//        params.add("key", key);
+//        params.add("sid", serverId);
+//        params.add("tid", tid);
+//        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+//        String s = restTemplate.postForObject(url, requestEntity , String.class);
+//        JSONObject jsonObject = JSON.parseObject(s);
+//        if(jsonObject.getIntValue("errcode") == 10000){
+//            return jsonObject.getString("data");
+//        }
+//        System.err.println(jsonObject.getString("errmsg"));
+//        return null;
+//    }
+//
+//
+//    /**
+//     * 删除轨迹
+//     * @param tid       终端id
+//     * @param trid      轨迹id
+//     */
+//    public void deleteTrack(String tid, String trid){
+//        String url = "https://tsapi.amap.com/v1/track/trace/delete";
+//        //调用推送
+//        HttpHeaders headers = new HttpHeaders();
+//        // 以表单的方式提交
+//        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+//        //将请求头部和参数合成一个请求
+//        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+//        params.add("key", key);
+//        params.add("sid", serverId);
+//        params.add("tid", tid);
+//        params.add("trid", trid);
+//        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+//        String s = restTemplate.postForObject(url, requestEntity , String.class);
+//        JSONObject jsonObject = JSON.parseObject(s);
+//        if(jsonObject.getIntValue("errcode") != 10000){
+//            System.err.println(jsonObject.getString("errmsg"));
+//        }
+//    }
+//
+//
+////
+////    public Map<String, Object> queryTrsearch(){
+////
+////    }
+//}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java
new file mode 100644
index 0000000..dc5e5a3
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java
@@ -0,0 +1,405 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.core.util.ToolUtil;
+//import com.stylefeng.guns.modular.system.model.GDFence;
+//import com.stylefeng.guns.modular.system.service.IGDFenceService;
+import com.stylefeng.guns.modular.system.service.IGDInterfaceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 电子围栏工具类
+ */
+@Component
+public class GDMapElectricFenceUtil {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private IGDInterfaceService gdInterfaceService;
+
+    private String key = "5053ca611c0106e01a665ce7ab84ff26";
+
+    private JSONArray jsonArray = new JSONArray();
+
+
+    @Bean
+    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
+//       SimpleClientHttpRequestFactory factory=new SimpleClientHttpRequestFactory();
+//      上一行被注释掉的是Spring自己的实现,下面是依赖了httpclient包后的实现
+        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
+        factory.setConnectTimeout(5000);
+        factory.setReadTimeout(5000);
+        return factory;
+    }
+
+    /**
+     * 创建电子围栏
+     * @param id
+     * @param points
+     * @return
+     */
+    public List<String> createFence(String id, String points){
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(new Date());
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1);
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        String format = simpleDateFormat.format(calendar.getTime());
+
+
+        //开始调用高德接口创建围栏
+        String[] s = points.split("_");
+        List<String> resoult = new ArrayList<>();
+        for(int i = 0; i < s.length; i++){
+            String[] split = s[i].split(";");
+            JSONObject json = new JSONObject();
+            json.put("name", id);
+            if(split.length == 2){
+                json.put("center", split[0]);
+                json.put("radius", split[1]);
+            }else{
+                json.put("points", s[i]);
+            }
+            json.put("enable", "true");
+            json.put("valid_time", format);
+            json.put("repeat", "Mon,Tues,Wed,Thur,Fri,Sat,Sun");
+            json.put("alert_condition", "enter;leave");
+            json.put("desc", id);
+
+            HttpHeaders headers = new HttpHeaders();
+            MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+            headers.setContentType(type);
+            headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+            HttpEntity<String> formEntity = new HttpEntity<>(json.toString(), headers);
+
+            String url = "https://restapi.amap.com/v4/geofence/meta?key=" + key;
+            String js = restTemplate.postForObject(url, formEntity, String.class);
+            JSONObject jsonObject = JSON.parseObject(js);
+            JSONObject data = jsonObject.getJSONObject("data");
+            String status = data.getString("status");
+
+//            gdInterfaceService.saveData("https://restapi.amap.com/v4/geofence/meta", "创建电子围栏");
+
+//            if(status.equals("0")){//创建成功
+//                GDFence gdFence = new GDFence();
+//                gdFence.setGdfenceId(UUIDUtil.getRandomCode());
+//                gdFence.setGid(data.getString("gid"));
+//                gdFence.setPoints(s[i]);
+//                gdFence.setLineElectricfenceIds(id);
+//                gdFenceService.insert(gdFence);
+//            }
+//
+//            if(status.equals("106")){//创建点电子围栏已经存在(只有坐标完全相同的电子围栏才会报重复)
+//                try {
+//                    GDFence data1 = gdFenceService.getData(s[i]);
+//                    int index = data1.getLineElectricfenceIds().indexOf(id);
+//                    if(index < 0){
+//                        data1.setLineElectricfenceIds(data1.getLineElectricfenceIds() + "," + id);
+//                        gdFenceService.updateById(data1);
+//                    }
+//                } catch (Exception e) {
+//                    e.printStackTrace();
+//                }
+//            }
+//            resoult.add(js);
+        }
+        return resoult;
+    }
+
+
+
+
+    /**
+     * 创建电子围栏
+     * @param id        围栏名称----绘制的数据id值
+     * @param points    多边形围栏坐标
+     */
+    public List<String> createElectricFenc(String id, String points){
+        List<String> fence = this.createFence(id, points);
+        List<String> gids = new ArrayList<>();
+        for(String f : fence){
+            JSONObject jsonObject = JSON.parseObject(f);
+            JSONObject data = jsonObject.getJSONObject("data");
+            String status = data.getString("status");
+            if(status.equals("0")){
+                gids.add(data.getString("gid"));
+            }
+        }
+        return gids;
+    }
+
+
+    /**
+     * 查询以创建的所有电子围栏
+     */
+    public String findElectricFenc(String center, String radius, String points){
+        String url = "https://restapi.amap.com/v4/geofence/meta?key=" + key;
+        String forObject = restTemplate.getForObject(url, String.class);
+        JSONObject jsonObject = JSON.parseObject(forObject);
+        JSONObject data = jsonObject.getJSONObject("data");
+
+//        gdInterfaceService.saveData("https://restapi.amap.com/v4/geofence/meta", "查询电子围栏");
+
+        if(ToolUtil.isNotEmpty(center)){//圆形电子围栏
+            JSONArray rs_list = data.getJSONArray("rs_list");
+            for(int i = 0; i < rs_list.size(); i++){
+                String c = rs_list.getJSONObject(i).getString("center");
+                Double r = rs_list.getJSONObject(i).getDouble("radius");
+                if(c.equals(center) && radius.equals(String.valueOf(r))){
+                    return rs_list.getJSONObject(i).getString("gid");
+                }
+            }
+        }else{
+            JSONArray rs_list = data.getJSONArray("rs_list");
+            for(int i = 0; i < rs_list.size(); i++){
+                String p = rs_list.getJSONObject(i).getString("points");
+                if(points.equals(p)){
+                    return rs_list.getJSONObject(i).getString("gid");
+                }
+            }
+        }
+        return null;
+    }
+
+
+    /**
+     * 查询所有绘制好的电子围栏
+     * @return
+     */
+    public JSONArray findAllElectricFenc(int page){
+        if(page == 1){
+            jsonArray = new JSONArray();
+        }
+        String url = "https://restapi.amap.com/v4/geofence/meta?key=" + key + "&page_no=" + page + "&page_size=" + 30;
+        String forObject = restTemplate.getForObject(url, String.class);
+        JSONObject jsonObject = JSON.parseObject(forObject);
+        JSONObject data = jsonObject.getJSONObject("data");
+        JSONArray rs_list = data.getJSONArray("rs_list");
+        jsonArray.addAll(rs_list);
+
+//        gdInterfaceService.saveData("https://restapi.amap.com/v4/geofence/meta", "查询电子围栏");
+
+        //判断是否有分页
+        int total_record = data.getIntValue("total_record");
+        if(total_record > jsonArray.size()){
+            //有分页,递归调用自己
+            page++;
+            this.findAllElectricFenc(page);
+        }
+        return jsonArray;
+    }
+
+
+    /**
+     * 批量更新电子围栏(失效的数据)
+     * @param jsonArray
+     * @throws ParseException
+     */
+    public void updateElectricFenc(JSONArray jsonArray) throws ParseException{
+        //批量更新查询出的失效的电子围栏,围栏失效日期在当前日期之后的数据
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        for(int i = 0; i < jsonArray.size(); i++){
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(new Date());
+            calendar.set(Calendar.HOUR_OF_DAY, 8);
+            calendar.set(Calendar.MINUTE, 0);
+            calendar.set(Calendar.SECOND, 0);
+            calendar.set(Calendar.MILLISECOND, 0);
+            long timeInMillis1 = calendar.getTimeInMillis();
+
+            String valid_time = jsonObject.getString("valid_time");
+            Date parse = sdf.parse(valid_time);
+            Calendar cale = Calendar.getInstance();
+            cale.setTime(parse);
+            cale.set(Calendar.HOUR_OF_DAY, 8);
+            cale.set(Calendar.MINUTE, 0);
+            cale.set(Calendar.SECOND, 0);
+            cale.set(Calendar.MILLISECOND, 0);
+            long timeInMillis = cale.getTimeInMillis();
+            if(timeInMillis1 >= timeInMillis){
+                String gid = jsonObject.getString("gid");
+                String id = jsonObject.getString("name");
+                String center = jsonObject.getString("center");
+                String radius = jsonObject.getString("radius");
+                String points = jsonObject.getString("points");
+                this.updateElectricFenc(gid, id, center, radius, points);
+            }
+
+        }
+    }
+
+
+
+    /**
+     * 更新电子围栏
+     * @param gid
+     * @param id
+     * @param center
+     * @param radius
+     * @param points
+     */
+    public void updateElectricFenc(String gid, String id, String center, String radius, String points) throws ParseException {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(new Date());
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1);
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        String format = simpleDateFormat.format(calendar.getTime());
+
+        //开始调用高德接口创建围栏
+        JSONObject json = new JSONObject();
+        json.put("name", id);
+        if(ToolUtil.isNotEmpty(center)){
+            json.put("center", center);
+            json.put("radius", radius);
+        }else{
+            json.put("points", points);
+        }
+        json.put("valid_time", format);
+        json.put("repeat", "Mon,Tues,Wed,Thur,Fri,Sat,Sun");
+        json.put("alert_condition", "enter;leave");
+        json.put("desc", id + "围栏更新描述");
+
+        HttpHeaders headers = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+        HttpEntity<String> formEntity = new HttpEntity<>(json.toString(), headers);
+
+        String url = "https://restapi.amap.com/v4/geofence/meta?key=" + key + "&gid=" + gid;
+        String s = restTemplate.patchForObject(url, formEntity, String.class);
+        System.out.println(s);
+
+//        gdInterfaceService.saveData("https://restapi.amap.com/v4/geofence/meta", "更新电子围栏");
+    }
+
+
+    /**
+     * 电子围栏监控
+     * @param diu       设备唯一标识符,作为记录依据,不影响判断结果。Android设备一般使用imei号码,iOS一般使用idfv号,其余设备可根据业务自定义。
+     * @param locations 数据为坐标数据和坐标产生的时间戳数据,至少包含一个坐标对和时间戳。
+     *                  1、传入1个点时,直接判断交互关系。
+     *                  2、当传入多个点时,可以通过前后时间判断动态交互关系。
+     *                  格式: x1,y1,unix_ts1;x2,y2,unix_ts2
+     *                  动态交互判断方法:第一个点作为当前时间的点,然后从其余点中选出在当前点之前10s~1小时范围内的最早点,用这两个时间点的位置判断设备与围栏的动态交互关系。若数据无效交互关系默认返回leave。
+     * @return
+     */
+    public List<String> monitorElectricFenc(String diu, String locations){
+        if(ToolUtil.isEmpty(diu)){
+            diu = "B78F99DD-2496-4A43-843B-172CDA2D9798";
+        }
+        locations = locations + "," + (new Date().getTime() / 1000);
+        String url = "https://restapi.amap.com/v4/geofence/status?key=" + key + "&diu=" + diu + "&locations=" + locations;
+        String forObject = restTemplate.getForObject(url, String.class);
+        JSONObject jsonObject = JSON.parseObject(forObject);
+        List<String> ids = new ArrayList<>();
+        JSONObject data = jsonObject.getJSONObject("data");
+        int status = data.getIntValue("status");
+        if(0 == status){
+            JSONArray fencingEventList = data.getJSONArray("fencing_event_list");
+            for(int i = 0; i < fencingEventList.size(); i++){
+                String clientStatus = fencingEventList.getJSONObject(i).getString("client_status");
+                if(clientStatus.equals("in")){//包含给定坐标的电子围栏
+                    JSONObject fence_info = fencingEventList.getJSONObject(i).getJSONObject("fence_info");//获取电子围栏信息
+                    String gid = fence_info.getString("fence_gid");
+                    ids.add(gid);
+                }
+            }
+        }
+        System.out.println("检测:" + forObject);
+
+//        gdInterfaceService.saveData("https://restapi.amap.com/v4/geofence/status", "电子围栏监控");
+        return ids;
+    }
+
+
+    /**
+     * 删除电子围栏
+     * @param gid
+     * @return
+     */
+    public boolean deleteElectricFenc(String gid){
+        restTemplate.delete("https://restapi.amap.com/v4/geofence/meta?key={1}&gid={2}", key, gid);
+        System.out.println("删除:" );
+
+//        gdInterfaceService.saveData("https://restapi.amap.com/v4/geofence/meta", "删除电子围栏");
+
+        return true;
+    }
+
+
+    /**
+     * 获取两点的距离
+     * @param origins       起点坐标
+     * @param destination   终点坐标
+     * @param type          计算类型:0:直线距离 1:驾车导航距离(仅支持国内坐标)。
+     * @return
+     */
+    public Map<String, String> getDistance(String origins, String destination, Integer type){
+        String url = "https://restapi.amap.com/v3/distance?key=" + key + "&origins=" + origins + "&destination=" + destination +
+                "&type=" + type;
+        String forObject = restTemplate.getForObject(url, String.class);
+        JSONObject jsonObject = JSON.parseObject(forObject);
+        String status = jsonObject.getString("status");
+
+//        gdInterfaceService.saveData("https://restapi.amap.com/v3/distance", "查询两点间的距离");
+
+        if(status.equals("1")){
+            JSONArray results = jsonObject.getJSONArray("results");
+            JSONObject jsonObject1 = results.getJSONObject(0);
+            Map<String, String> map = new HashMap<>();
+            map.put("distance", jsonObject1.getString("distance"));//距离(米)
+            map.put("duration", jsonObject1.getString("duration"));//预计时间(秒)
+            return map;
+        }else{
+            System.err.println(forObject);
+        }
+        return null;
+    }
+
+
+    /**
+     * 获取路径规划
+     * @param origins       起点坐标
+     * @param destination   终点坐标
+     * @param waypoints     途经点
+     * @return
+     */
+    public Map<String, String> getDriving(String origins, String destination, String waypoints){
+        String url = "https://restapi.amap.com/v3/direction/driving?key=" + key + "&origin=" + origins + "&destination=" + destination +
+                "&waypoints=" + waypoints + "&extensions=base&strategy=0";
+        String forObject = restTemplate.getForObject(url, String.class);
+        JSONObject jsonObject = JSON.parseObject(forObject);
+        String status = jsonObject.getString("status");
+
+//        gdInterfaceService.saveData("https://restapi.amap.com/v3/direction/driving", "获取路径规划");
+
+        if(status.equals("1")){
+            JSONObject route = jsonObject.getJSONObject("route");
+            JSONArray results = route.getJSONArray("paths");
+            JSONObject jsonObject1 = results.getJSONObject(0);
+            Map<String, String> map = new HashMap<>();
+            map.put("distance", jsonObject1.getString("distance"));//距离(米)
+            map.put("duration", jsonObject1.getString("duration"));//预计时间(秒)
+            return map;
+        }
+        return null;
+    }
+
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapGeocodingUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapGeocodingUtil.java
new file mode 100644
index 0000000..03ada83
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapGeocodingUtil.java
@@ -0,0 +1,135 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.service.IGDInterfaceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 高德地图的地理编码工具类
+ */
+@Component
+public class GDMapGeocodingUtil {
+
+    private String key = "9de4f857805bc84051aa13adeb2c44c8";
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private IGDInterfaceService gdInterfaceService;
+
+
+    /**
+     * 将行政区域名称转化为坐标
+     * @param province
+     * @param city
+     * @param county
+     * @param address
+     * @return
+     */
+    public Map<String, Object> geocoding(String province, String city, String county, String address){
+        Map<String, Object> map = new HashMap<>();
+        if(ToolUtil.isEmpty(province)){
+            map.put("status", -1);
+            map.put("data", "省不能为空");
+            return map;
+        }
+        if((ToolUtil.isEmpty(city) && ToolUtil.isNotEmpty(county)) || (ToolUtil.isEmpty(city) && ToolUtil.isNotEmpty(address))){
+            map.put("status", -1);
+            map.put("data", "市不能为空");
+            return map;
+        }
+        if((ToolUtil.isEmpty(county) && ToolUtil.isNotEmpty(address))){
+            map.put("status", -1);
+            map.put("data", "县/区不能为空");
+            return map;
+        }
+
+        String url = "https://restapi.amap.com/v3/geocode/geo?key=" + key + "&output=JSON";
+        url += "&address=" + province + (ToolUtil.isNotEmpty(city) ? city : "") + (ToolUtil.isNotEmpty(county) ? county : "") + (ToolUtil.isNotEmpty(address) ? address : "");
+        String forObject = restTemplate.getForObject(url, String.class);
+        JSONObject jsonObject = JSON.parseObject(forObject);
+        String status = jsonObject.getString("status");
+        List<String> list = new ArrayList<>();
+
+//        gdInterfaceService.saveData("https://restapi.amap.com/v3/geocode/geo", "行政区域转经纬度");
+
+        if(status.equals("1")){
+            JSONArray geocodes = jsonObject.getJSONArray("geocodes");
+            for(int i = 0; i < geocodes.size(); i++){
+                String location = geocodes.getJSONObject(i).getString("location");
+                list.add(location);
+            }
+        }
+        map.put("status", 0);
+        map.put("data", list);
+        return map;
+    }
+
+
+
+    public Map<String, Object> geocoding(String address){
+        Map<String, Object> map = new HashMap<>();
+        String url = "https://restapi.amap.com/v3/geocode/geo?key=" + key + "&output=JSON&address=" + address;
+        String forObject = restTemplate.getForObject(url, String.class);
+        JSONObject jsonObject = JSON.parseObject(forObject);
+        String status = jsonObject.getString("status");
+        List<String> list = new ArrayList<>();
+        if(status.equals("1")){
+            JSONArray geocodes = jsonObject.getJSONArray("geocodes");
+            for(int i = 0; i < geocodes.size(); i++){
+                String location = geocodes.getJSONObject(i).getString("location");
+                list.add(location);
+            }
+        }
+        map.put("status", 0);
+        map.put("data", list);
+        return map;
+    }
+
+
+
+    /**
+     * 根据经纬度获取行政区域信息
+     * @param lon
+     * @param lan
+     * @return
+     * @throws Exception
+     */
+    public Map<String, String> geocode(String lon, String lan) throws Exception{
+        String url = "https://restapi.amap.com/v3/geocode/regeo?key=" + key + "&location=" + lon + "," + lan;
+        String forObject = restTemplate.getForObject(url, String.class);
+        JSONObject jsonObject = JSON.parseObject(forObject);
+        Map<String, String> map = new HashMap<>();
+
+//        gdInterfaceService.saveData("https://restapi.amap.com/v3/geocode/regeo", "经纬度转行政区域");
+
+        if(jsonObject.getString("status").equals("1")){
+            JSONObject regeocode = jsonObject.getJSONObject("regeocode");
+            JSONObject addressComponent = regeocode.getJSONObject("addressComponent");
+            String address = regeocode.getString("formatted_address");
+            map.put("address", address);
+            String code = addressComponent.getString("adcode");
+            String province = addressComponent.getString("province");
+            String city = addressComponent.getString("city");
+            String district = addressComponent.getString("district");
+            map.put("province", province);
+            map.put("provinceCode", code.substring(0, 2) + "0000");
+            map.put("city", city);
+            map.put("cityCode", code.substring(0, 4) + "00");
+            map.put("district", district);
+            map.put("districtCode", code);
+        }
+        return map;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GeodesyUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GeodesyUtil.java
new file mode 100644
index 0000000..f3eecf9
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GeodesyUtil.java
@@ -0,0 +1,71 @@
+package com.stylefeng.guns.modular.system.util;
+
+import org.gavaghan.geodesy.Ellipsoid;
+import org.gavaghan.geodesy.GeodeticCalculator;
+import org.gavaghan.geodesy.GeodeticCurve;
+import org.gavaghan.geodesy.GlobalCoordinates;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 计算两个金纬度坐标之间的直线距离
+ */
+@Component
+public class GeodesyUtil {
+
+
+    /**
+     * 获取直线距离
+     * @param fromLonLat
+     * @param toLonLat
+     * @return
+     */
+    public Map<String, Double> getDistance(String fromLonLat, String toLonLat){
+        String[] from = fromLonLat.split(",");
+        String[] to = toLonLat.split(",");
+        GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(from[1]), Double.valueOf(from[0]));
+        GlobalCoordinates target = new GlobalCoordinates(Double.valueOf(to[1]), Double.valueOf(to[0]));
+        double Sphere = getDistanceMeter(source, target, Ellipsoid.Sphere);
+        double WGS84 = getDistanceMeter(source, target, Ellipsoid.WGS84);
+        double GRS80 = getDistanceMeter(source, target, Ellipsoid.GRS80);
+        double GRS67 = getDistanceMeter(source, target, Ellipsoid.GRS67);
+        double ANS = getDistanceMeter(source, target, Ellipsoid.ANS);
+        double WGS72 = getDistanceMeter(source, target, Ellipsoid.WGS72);
+        double Clarke1858 = getDistanceMeter(source, target, Ellipsoid.Clarke1858);
+        double Clarke1880 = getDistanceMeter(source, target, Ellipsoid.Clarke1880);
+//        System.out.println("Sphere坐标系计算结果:"+Sphere + "米");
+//        System.out.println("WGS84坐标系计算结果:"+WGS84 + "米");
+//        System.out.println("GRS80坐标系计算结果:"+GRS80 + "米");
+//        System.out.println("GRS67坐标系计算结果:"+GRS67 + "米");
+//        System.out.println("ANS坐标系计算结果:"+ANS + "米");
+//        System.out.println("WGS72坐标系计算结果:"+WGS72 + "米");
+//        System.out.println("Clarke1858坐标系计算结果:"+Clarke1858 + "米");
+//        System.out.println("Clarke1880坐标系计算结果:"+Clarke1880 + "米");
+        Map<String, Double> map = new HashMap<>();
+        map.put("Sphere", Sphere);
+        map.put("WGS84", WGS84);
+        map.put("GRS80", GRS80);
+        map.put("GRS67", GRS67);
+        map.put("ANS", ANS);
+        map.put("WGS72", WGS72);
+        map.put("Clarke1858", Clarke1858);
+        map.put("Clarke1880", Clarke1880);
+        return map;
+    }
+
+
+    private double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo, Ellipsoid ellipsoid){
+        //创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度用于计算距离
+        GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo);
+        return geoCurve.getEllipsoidalDistance();
+    }
+
+
+
+    public static void main(String[] ages){
+        GeodesyUtil geodesyUtil = new GeodesyUtil();
+        geodesyUtil.getDistance("115.481028,39.989643", "114.465302,40.004717");
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpClientUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpClientUtil.java
new file mode 100644
index 0000000..c30ad53
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpClientUtil.java
@@ -0,0 +1,266 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * http工具类
+ */
+@Component
+public class HttpClientUtil {
+
+    private CloseableHttpClient httpClient;
+
+    private CloseableHttpResponse httpResponse;
+
+    private RequestConfig requestConfig;
+
+
+    /**
+     * 创建一个httpClient对象
+     */
+    private void getHttpCline(){
+        //1.创建连接池管理器
+        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(60000,
+                TimeUnit.MILLISECONDS);
+        connectionManager.setMaxTotal(1000);
+        connectionManager.setDefaultMaxPerRoute(50);
+
+        //2.创建httpclient对象
+        this.httpClient = HttpClients.custom()
+                .setConnectionManager(connectionManager)
+                .disableAutomaticRetries()
+                .build();
+    }
+
+    private RequestConfig getRequestConfig(){
+        return RequestConfig.custom()
+                .setConnectTimeout(60000)
+                .setSocketTimeout(60000)
+                .build();
+    }
+
+
+
+    /**
+     * 创建一个POST请求实例
+     * @param url       请求地址
+     * @param params    请求参数
+     */
+    private void setPostHttpRequset(String url, Map<String, Object> params, Map<String, String> header, String contentType){
+        HttpPost httpPost = new HttpPost(url);
+        httpPost.setConfig(this.getRequestConfig());
+        if(null != header){
+            for(String key : header.keySet()){
+                httpPost.setHeader(key, header.get(key));
+            }
+        }
+        List<NameValuePair> list = new ArrayList<>();
+        if(null != params){
+            Set<String> keys = params.keySet();
+            for(String key : keys){
+                list.add(new BasicNameValuePair(key, params.get(key).toString()));
+            }
+        }
+        try {
+            switch (contentType){
+                case "form":
+                    httpPost.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
+                    break;
+                case "json":
+                    ObjectMapper objectMapper = new ObjectMapper();
+                    String s =objectMapper.writeValueAsString(params);
+                    System.err.println(s);
+                    httpPost.setEntity(new StringEntity(s, Charset.forName("UTF-8")));
+                    break;
+            }
+            this.getHttpCline();
+            if(null == this.httpClient){
+                this.getHttpCline();
+            }
+            httpResponse = this.httpClient.execute(httpPost);
+        } catch (IOException e) {
+            e.printStackTrace();
+            this.close();
+        }
+    }
+
+
+    /**
+     * 获取get请求实例
+     * @param url       请求地址
+     * @param params    请求参数
+     */
+    private void setGetHttpRequset(String url, Map<String, Object> params, Map<String, String> header){
+        StringBuffer sb = new StringBuffer();
+        String p = "";
+        if(null != params){
+            Set<String> keys = params.keySet();
+            for(String key : keys){
+                sb.append(key + "=" + params.get(key) + "&");
+            }
+            p = "?" + sb.substring(0, sb.length() - 1);
+        }
+        HttpGet httpGet = new HttpGet(url + p);
+        if(null != header){
+            for(String key : header.keySet()){
+                httpGet.setHeader(key, header.get(key));
+            }
+        }
+        this.getHttpCline();
+        if(null == this.httpClient){
+            this.getHttpCline();
+        }
+        try {
+            httpResponse = this.httpClient.execute(httpGet);
+        } catch (IOException e) {
+            e.printStackTrace();
+            this.close();
+        }
+    }
+
+
+    /**
+     * 发送http请求
+     * @param mothed        "GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS"
+     * @param url           请求地址
+     * @param params        请求参数
+     * @param header        请求头
+     * @param contentType   参数请求方式form/json
+     * @return
+     */
+    public String pushHttpRequset(String mothed, String url, Map<String, Object> params, Map<String, String> header, String contentType){
+        String content = null;
+        switch (mothed){
+            case "GET":
+                this.setGetHttpRequset(url, params, header);
+                break;
+            case "POST":
+                this.setPostHttpRequset(url, params, header, contentType);
+                break;
+        }
+        if(httpResponse.getStatusLine().getStatusCode() == 200){
+            try {
+                content = EntityUtils.toString(httpResponse.getEntity());
+                this.close();
+                return content;
+            } catch (IOException e) {
+                e.printStackTrace();
+                this.close();
+            }
+        }
+        if(httpResponse.getStatusLine().getStatusCode() == 201){
+            content = "{\"status\":201}";
+            this.close();
+            return content;
+        }else{
+            try {
+                System.err.println("返回状态码:" + httpResponse.getStatusLine() + "。");
+                content = EntityUtils.toString(httpResponse.getEntity());
+                this.close();
+                return content;
+            } catch (IOException e) {
+                e.printStackTrace();
+                this.close();
+            }
+        }
+        this.close();
+        return content;
+    }
+
+
+    /**
+     * 发送XML请求
+     * @param url       请求地址
+     * @param xml       XML数据
+     * @param header    自定义请求头
+     * @return
+     */
+    public String pushHttpRequsetXml(String url, String xml, Map<String, String> header){
+        HttpPost httpPost = new HttpPost(url);
+        for(String key : header.keySet()){
+            httpPost.setHeader(key, header.get(key));
+        }
+        httpPost.setHeader("Content-Type", "application/xml");
+        try {
+            httpPost.setEntity(new StringEntity(xml, "UTF-8"));
+            this.getHttpCline();
+            if(null == this.httpClient){
+                this.getHttpCline();
+            }
+            httpResponse = this.httpClient.execute(httpPost);
+            String content = null;
+            if(httpResponse.getStatusLine().getStatusCode() == 200){
+                try {
+                    content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
+                    this.close();
+                    return content;
+                } catch (IOException e) {
+                    e.printStackTrace();
+                    this.close();
+                }
+            }else{
+                try {
+                    content = "返回状态码:" + httpResponse.getStatusLine() + "。" + EntityUtils.toString(httpResponse.getEntity());
+                    this.close();
+                    return content;
+                } catch (IOException e) {
+                    e.printStackTrace();
+                    this.close();
+                }
+            }
+            this.close();
+            return content;
+        } catch (IOException e) {
+            e.printStackTrace();
+            this.close();
+        }
+        return null;
+    }
+
+
+
+    /**
+     * 关闭资源
+     */
+    private void close(){
+        try {
+            if(null != httpClient){
+                httpClient.close();
+            }
+            if(null != httpResponse){
+                httpResponse.close();
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }finally {
+            try {
+                if(null != httpClient){
+                    httpClient.close();
+                }
+                if(null != httpResponse){
+                    httpResponse.close();
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpTool.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpTool.java
new file mode 100644
index 0000000..e1ae195
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpTool.java
@@ -0,0 +1,137 @@
+package com.stylefeng.guns.modular.system.util;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+public class HttpTool {
+
+    public static String doGet(String httpUrl) {
+        HttpURLConnection connection = null;
+        InputStream inputStream = null;
+        BufferedReader bufferedReader = null;
+        String result = null;// 返回结果字符串
+        try {
+            // 创建远程url连接对象
+            URL url = new URL(httpUrl);
+            // 通过远程url连接对象打开一个连接,强转成httpURLConnection类
+            connection = (HttpURLConnection) url.openConnection();
+            // 设置连接方式:get
+            connection.setRequestMethod("GET");
+            // 设置连接主机服务器的超时时间:15000毫秒
+            connection.setConnectTimeout(15000);
+            // 设置读取远程返回的数据时间:60000毫秒
+            connection.setReadTimeout(60000);
+            // 发送请求
+            connection.connect();
+            // 通过connection连接,获取输入流
+            if (connection.getResponseCode() == 200) {
+                inputStream = connection.getInputStream();
+                // 封装输入流is,并指定字符集
+                bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
+                // 存放数据
+                StringBuffer stringBuffer = new StringBuffer();
+                String temp = null;
+                while ((temp = bufferedReader.readLine()) != null) {
+                    stringBuffer.append(temp);
+                    stringBuffer.append("\r\n");
+                }
+                result = stringBuffer.toString();
+            }
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            // 关闭资源
+            if (bufferedReader!=null) {
+                try {
+                    bufferedReader.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (inputStream!=null) {
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            connection.disconnect();// 关闭远程连接
+        }
+        return result;
+    }
+
+    public static String doPost(String httpUrl, String data) {
+
+        HttpURLConnection connection = null;
+        InputStream inputStream = null;
+        OutputStream outputStream = null;
+        BufferedReader bufferedReader = null;
+        String result = null;
+        try {
+            URL url = new URL(httpUrl);
+            // 通过远程url连接对象打开连接
+            connection = (HttpURLConnection) url.openConnection();
+            // 设置连接请求方式
+            connection.setRequestMethod("POST");
+            // 设置连接主机服务器超时时间:15000毫秒
+            connection.setConnectTimeout(15000);
+            // 设置读取主机服务器返回数据超时时间:60000毫秒
+            connection.setReadTimeout(60000);
+            // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
+            connection.setDoOutput(true);
+            // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
+            connection.setRequestProperty("Content-Type", "application/json");
+            // 通过连接对象获取一个输出流
+            outputStream = connection.getOutputStream();
+            // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
+            outputStream.write(data.getBytes());
+            // 通过连接对象获取一个输入流,向远程读取
+            if (connection.getResponseCode() == 200) {
+                inputStream = connection.getInputStream();
+                // 对输入流对象进行包装:charset根据工作项目组的要求来设置
+                bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
+                StringBuffer stringBuffer = new StringBuffer();
+                String temp = null;
+                // 循环遍历一行一行读取数据
+                while ((temp = bufferedReader.readLine()) != null) {
+                    stringBuffer.append(temp);
+                    stringBuffer.append("\r\n");
+                }
+                result = stringBuffer.toString();
+            }
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            // 关闭资源
+            if (null != bufferedReader) {
+                try {
+                    bufferedReader.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != outputStream) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != inputStream) {
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            // 断开与远程地址url的连接
+            connection.disconnect();
+        }
+        return result;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ICBCPayUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ICBCPayUtil.java
new file mode 100644
index 0000000..cf308f3
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ICBCPayUtil.java
@@ -0,0 +1,673 @@
+package com.stylefeng.guns.modular.system.util;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.PrintWriter;
+import java.math.BigDecimal;
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 工商银行支付工具类
+ */
+@Component
+public class ICBCPayUtil {
+
+    private String app_id = "10000000000003159405";
+
+    private String privateKey = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCBnf5bNOMF106sxlN6reQKs4wvUpnvRxXxFCzm13Bz70V6Oldx0EF4mFw/LCXMxwftGEanzjXOwDdk9apVeIYjedb8jsBjgwlREVLmpe3kFo65DedEao3MykpoXrm9kt8FPuxLAkTbfFuqim9f+nruXP1DA7cLt3N4PEzsfDA/WG4wXJgqWkHJaDbzcJOEX7pNZXWtTjoMznKufELsUEf3sdX+9/anIyObmq2+kv2w8H5RcRxBY+2M4K8Hd3Zf9u2Ffvr/phOsUB14XLrjfdXeWbZzHtHfGlfIQf5EK9HySEcaQHMHluEQSkriHdW7dlanIzzLY9M0lH+2Ok9j3Yp5AgMBAAECggEAVnHEfZecAP1DXz811Y+7kteEGtuABnDmVU4bVClCuk9NiuL2BtXZlFAo1Yjf/N6QjrOuC6Qfhq/zQcYFv9MNwwMzOmUKMlPmFsby/xiSu5e/v/Nh1eMqhvYzAcCLJ7+YNattc+kjey5JBEgnV196NRaXYeZMYegLfpjYxK9ejh+85kxp9ElXxZsSwrgzvICtyZ0Bl2ZD28kXr9/89dNIQX5sWRBN/dpxj99Ctz3JtlaMhxdnZ3cZKLeIAIAYFtqw5lSqeL7/7a6LPGpNa0kA+8KvHNEAnkpcEFg427k7h7nerFl2PQV/y5LuRLbUMZkdaIoo25Sh90xhtwfGCTAkcQKBgQC71mNkQL5HPYJbRirG3CjbLRAubztzlqtTSE/RZnPNiIinwACWZVHQ7Ob2+WLaIEOqIq6h1zWyYFO+peFNfCbcdZTfQHxiYfmzrY7ZlBtRJM3ez20RQ85TJvej08HjTM4vVKXt9DDqlBu4IATcmNlJqgBKeNXsDYORTNqTZlrocwKBgQCwpxdmd2yhRIrWXx9K4lZYfpGEUUMKrCI2SGX0bdiNtgn2p2HK3cDVO/gh8Iz6tKLI53HS3OTTsVZq1xoUm3M+27sPUk6KiUBQqOsDmYVayKjOY2IciwU0SmS/9C9ptYpchUrZSR7mejKvk7QKBkH3utBUnfYCQmqhyAnjHBhCYwKBgHBVxNc+CQ3d8UnY6thG7oA1sQm0KB/2qbuC8YlP9k2jK+b24uMO8SE7rN1jRAUjapQjbcEITerBxROtbNLEPxF1mHTzwe+snIMidt4Uv0mF80EfWCENJiWAlnV5vOjNFDomK53lfiOsM++n5oBvQPPXIZloLrefVWHeTpH8kr2VAoGAbB+JqhT0r2yVkgqcy6fnc7jcdmGKqFCdjB4aEVbekjZWuNrQd2vtaFaRVKy4jYbckB1hRNAhWxUTMMfB1dUj39h8ES+ulQrXC8eoOQbRYbSp5dFcrt3EbLIQIpFiJ9CPBHwtSPuBZ05qEZ9VNkGIRQnaE8CvX8ipHaajrpd2ncMCgYAdjW2LFmc+K9tai8idbhEu1uzez+HPT8PgE5iy6ZE8gxQvzUdHaqgO+OgNhWEY+QJOEyM0YJuidaN9qiTiWJHs04/03qAy1wCZCYhvHuRMh1mPvqdA9ybUmG/K0bMqkqS9B2GxKQPtlnmeUG/pXjQ12U8WrS2ayjDoHBtimuxkIQ==";
+
+    private String icbcPulicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCMpjaWjngB4E3ATh+G1DVAmQnIpiPEFAEDqRfNGAVvvH35yDetqewKi0l7OEceTMN1C6NPym3zStvSoQayjYV+eIcZERkx31KhtFu9clZKgRTyPjdKMIth/wBtPKjL/5+PYalLdomM4ONthrPgnkN4x4R0+D4+EBpXo8gNiAFsNwIDAQAB";
+
+    private String mer_id = "210541210043";//商户编号
+
+    private String mer_id1 = "210541210044";//商户编号
+
+    private String mer_prtcl_no = "2105412100430201";//收单产品协议编号
+
+    private String mer_acct = "2105402019300157124";//商户账号,商户入账账号,只能交易时指定。(商户付给银行手续费的账户,可以在开户的时候指定,也可以用交易指定方式;用交易指定方式则使用此商户账号)目前暂不支持
+
+    private String wx_appid_user = "wx0071ebcb539570f8";
+
+    private String wx_appid_driver = "wx65d2c03f04352f90";
+
+    private String wx_appid_user1 = "wx7608ef3dae49b691";//小程序
+
+    private String ali_appid_user = "2016120203722668";
+
+    private String ali_appid_driver = "2021001165630930";
+
+    private String payer_account = "2105455809300020994";//银行账户
+
+    private String payer_cnname = "广西云森科技有限公司";//账户名称
+
+    @Autowired
+    private JuHeUtil juHeUtil;
+
+    @Autowired
+    private HttpClientUtil httpClientUtil;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    private String bank = "{\"CDB\":\"国家开发银行\",\"ICBC\":\"中国工商银行\",\"ABC\":\"中国农业银行\",\"BOC\":\"中国银行\",\"CCB\":\"中国建设银行\",\"PSBC\":\"中国邮政储蓄银行\",\"COMM\":\"交通银行\",\"CMB\":\"招商银行\",\"SPDB\":\"上海浦东发展银行\",\"CIB\":\"兴业银行\",\"HXBANK\":\"华夏银行\",\"GDB\":\"广东发展银行\",\"CMBC\":\"中国民生银行\",\"CITIC\":\"中信银行\",\"CEB\":\"中国光大银行\",\"EGBANK\":\"恒丰银行\",\"CZBANK\":\"浙商银行\",\"BOHAIB\":\"渤海银行\",\"SPABANK\":\"平安银行\",\"SHRCB\":\"上海农村商业银行\",\"YXCCB\":\"玉溪市商业银行\",\"YDRCB\":\"尧都农商行\",\"BJBANK\":\"北京银行\",\"SHBANK\":\"上海银行\",\"JSBANK\":\"江苏银行\",\"HZCB\":\"杭州银行\",\"NJCB\":\"南京银行\",\"NBBANK\":\"宁波银行\",\"HSBANK\":\"徽商银行\",\"CSCB\":\"长沙银行\",\"CDCB\":\"成都银行\",\"CQBANK\":\"重庆银行\",\"DLB\":\"大连银行\",\"NCB\":\"南昌银行\",\"FJHXBC\":\"福建海峡银行\",\"HKB\":\"汉口银行\",\"WZCB\":\"温州银行\",\"QDCCB\":\"青岛银行\",\"TZCB\":\"台州银行\",\"JXBANK\":\"嘉兴银行\",\"CSRCB\":\"常熟农村商业银行\",\"NHB\":\"南海农村信用联社\",\"CZRCB\":\"常州农村信用联社\",\"H3CB\":\"内蒙古银行\",\"SXCB\":\"绍兴银行\",\"SDEB\":\"顺德农商银行\",\"WJRCB\":\"吴江农商银行\",\"ZBCB\":\"齐商银行\",\"GYCB\":\"贵阳市商业银行\",\"ZYCBANK\":\"遵义市商业银行\",\"HZCCB\":\"湖州市商业银行\",\"DAQINGB\":\"龙江银行\",\"JINCHB\":\"晋城银行JCBANK\",\"ZJTLCB\":\"浙江泰隆商业银行\",\"GDRCC\":\"广东省农村信用社联合社\",\"DRCBCL\":\"东莞农村商业银行\",\"MTBANK\":\"浙江民泰商业银行\",\"GCB\":\"广州银行\",\"LYCB\":\"辽阳市商业银行\",\"JSRCU\":\"江苏省农村信用联合社\",\"LANGFB\":\"廊坊银行\",\"CZCB\":\"浙江稠州商业银行\",\"DYCB\":\"德阳商业银行\",\"JZBANK\":\"晋中市商业银行\",\"BOSZ\":\"苏州银行\",\"GLBANK\":\"桂林银行\",\"URMQCCB\":\"乌鲁木齐市商业银行\",\"CDRCB\":\"成都农商银行\",\"ZRCBANK\":\"张家港农村商业银行\",\"BOD\":\"东莞银行\",\"LSBANK\":\"莱商银行\",\"BJRCB\":\"北京农村商业银行\",\"TRCB\":\"天津农商银行\",\"SRBANK\":\"上饶银行\",\"FDB\":\"富滇银行\",\"CRCBANK\":\"重庆农村商业银行\",\"ASCB\":\"鞍山银行\",\"NXBANK\":\"宁夏银行\",\"BHB\":\"河北银行\",\"HRXJB\":\"华融湘江银行\",\"ZGCCB\":\"自贡市商业银行\",\"YNRCC\":\"云南省农村信用社\",\"JLBANK\":\"吉林银行\",\"DYCCB\":\"东营市商业银行\",\"KLB\":\"昆仑银行\",\"ORBANK\":\"鄂尔多斯银行\",\"XTB\":\"邢台银行\",\"JSB\":\"晋商银行\",\"TCCB\":\"天津银行\",\"BOYK\":\"营口银行\",\"JLRCU\":\"吉林农信\",\"SDRCU\":\"山东农信\",\"XABANK\":\"西安银行\",\"HBRCU\":\"河北省农村信用社\",\"NXRCU\":\"宁夏黄河农村商业银行\",\"GZRCU\":\"贵州省农村信用社\",\"FXCB\":\"阜新银行\",\"HBHSBANK\":\"湖北银行黄石分行\",\"ZJNX\":\"浙江省农村信用社联合社\",\"XXBANK\":\"新乡银行\",\"HBYCBANK\":\"湖北银行宜昌分行\",\"LSCCB\":\"乐山市商业银行\",\"TCRCB\":\"江苏太仓农村商业银行\",\"BZMD\":\"驻马店银行\",\"GZB\":\"赣州银行\",\"WRCB\":\"无锡农村商业银行\",\"BGB\":\"广西北部湾银行\",\"GRCB\":\"广州农商银行\",\"JRCB\":\"江苏江阴农村商业银行\",\"BOP\":\"平顶山银行\",\"TACCB\":\"泰安市商业银行\",\"CGNB\":\"南充市商业银行\",\"CCQTGB\":\"重庆三峡银行\",\"XLBANK\":\"中山小榄村镇银行\",\"HDBANK\":\"邯郸银行\",\"KORLABANK\":\"库尔勒市商业银行\",\"BOJZ\":\"锦州银行\",\"QLBANK\":\"齐鲁银行\",\"BOQH\":\"青海银行\",\"YQCCB\":\"阳泉银行\",\"SJBANK\":\"盛京银行\",\"FSCB\":\"抚顺银行\",\"ZZBANK\":\"郑州银行\",\"SRCB\":\"深圳农村商业银行\",\"BANKWF\":\"潍坊银行\",\"JJBANK\":\"九江银行\",\"JXRCU\":\"江西省农村信用\",\"HNRCU\":\"河南省农村信用\",\"GSRCU\":\"甘肃省农村信用\",\"SCRCU\":\"四川省农村信用\",\"GXRCU\":\"广西省农村信用\",\"SXRCCU\":\"陕西信合\",\"WHRCB\":\"武汉农村商业银行\",\"YBCCB\":\"宜宾市商业银行\",\"KSRB\":\"昆山农村商业银行\",\"SZSBK\":\"石嘴山银行\",\"HSBK\":\"衡水银行\",\"XYBANK\":\"信阳银行\",\"NBYZ\":\"鄞州银行\",\"ZJKCCB\":\"张家口市商业银行\",\"XCYH\":\"许昌银行\",\"JNBANK\":\"济宁银行\",\"CBKF\":\"开封市商业银行\",\"WHCCB\":\"威海市商业银行\",\"HBC\":\"湖北银行\",\"BOCD\":\"承德银行\",\"BODD\":\"丹东银行\",\"JHBANK\":\"金华银行\",\"BOCY\":\"朝阳银行\",\"LSBC\":\"临商银行\",\"BSB\":\"包商银行\",\"LZYH\":\"兰州银行\",\"BOZK\":\"周口银行\",\"DZBANK\":\"德州银行\",\"SCCB\":\"三门峡银行\",\"AYCB\":\"安阳银行\",\"ARCU\":\"安徽省农村信用社\",\"HURCB\":\"湖北省农村信用社\",\"HNRCC\":\"湖南省农村信用社\",\"NYNB\":\"广东南粤银行\",\"LYBANK\":\"洛阳银行\",\"NHQS\":\"农信银清算中心\",\"CBBQS\":\"城市商业银行资金清算中心\"}";
+
+
+
+    /**
+     * 统一下单接口
+     * @param out_trade_no      商户订单号
+     * @param pay_mode          支付方式,9-微信,10-支付宝
+     * @param access_type       收单接入方式,5-APP,7-微信公众号,8-支付宝生活号,9-微信小程序
+     * @param deciveInfo        设备号(设备唯一编号)
+     * @param body
+     * @param total_fee
+     * @param mer_url           回调地址(完整地址)
+     * @param attach            附加信息
+     * @param type              支付端类型(1:用户端,2:司机端,3:小程序)
+     * @throws UnknownHostException
+     */
+    public Map<String, String> placeAnOrder(String out_trade_no, Integer pay_mode, Integer access_type, String deciveInfo, String body, Double total_fee, String mer_url, String attach, Integer type, String openId) throws Exception {
+//        //签名类型为RSA时,需传入appid,私钥和网关公钥,签名类型使用定值IcbcConstants.SIGN_TYPE_RSA,其他参数使用缺省值
+//        DefaultIcbcClient client = new DefaultIcbcClient(app_id, IcbcConstants.SIGN_TYPE_RSA2, privateKey, icbcPulicKey);
+//        CardbusinessAggregatepayB2cOnlineConsumepurchaseRequestV1 request = new
+//                CardbusinessAggregatepayB2cOnlineConsumepurchaseRequestV1();
+//        //根据测试环境和生产环境替换相应ip和端口
+//        request.setServiceUrl("https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/consumepurchase/V1");
+//        CardbusinessAggregatepayB2cOnlineConsumepurchaseRequestV1.CardbusinessAggregatepayB2cOnlineConsumepurchaseRequestV1Biz bizContent = new CardbusinessAggregatepayB2cOnlineConsumepurchaseRequestV1.CardbusinessAggregatepayB2cOnlineConsumepurchaseRequestV1Biz();
+//        request.setBizContent(bizContent);
+//        //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值
+//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+//        String format = sdf.format(new Date());
+//        bizContent.setMer_id(mer_id);
+//        bizContent.setOut_trade_no(out_trade_no);
+//        bizContent.setPay_mode(pay_mode.toString());
+//        bizContent.setAccess_type(access_type.toString());
+//        bizContent.setMer_prtcl_no(mer_prtcl_no);
+//        bizContent.setOrig_date_time(format);
+//        bizContent.setDecive_info(deciveInfo);
+//        bizContent.setBody("OK出行-" + body);
+//        bizContent.setFee_type("001");
+//        InetAddress ip4 = Inet4Address.getLocalHost();
+//        bizContent.setSpbill_create_ip(ip4.getHostAddress());
+//        bizContent.setTotal_fee(Double.valueOf(total_fee * 100).intValue() + "");
+//        bizContent.setMer_url(mer_url);
+//        bizContent.setOpen_id("");
+//        bizContent.setShop_appid("");
+//        bizContent.setUnion_id("");
+//        bizContent.setIcbc_appid(app_id);
+//        if(pay_mode == 9){
+//            switch (type){
+//                case 1://用户端
+//                    bizContent.setShop_appid(wx_appid_user);
+//                    break;
+//                case 2://司机端
+//                    bizContent.setShop_appid(wx_appid_driver);
+//                    break;
+//                case 3://小程序
+//                    bizContent.setShop_appid(wx_appid_user1);
+//                    bizContent.setAccess_type("9");
+//                    bizContent.setOpen_id(openId);
+//                    break;
+//            }
+//        }
+//        if(pay_mode == 10){
+//            switch (type){
+//                case 1://用户端
+//                    bizContent.setUnion_id(ali_appid_user);
+//                    break;
+//                case 2://司机端
+//                    bizContent.setUnion_id(ali_appid_driver);
+//                    break;
+//            }
+//        }
+//        bizContent.setMer_acct(mer_acct);
+//        bizContent.setExpire_time("120");
+//        bizContent.setAttach(attach);
+//        bizContent.setNotify_type("HS");
+//        bizContent.setResult_type("0");
+//        bizContent.setPay_limit("no_credit");
+//        bizContent.setOrder_apd_inf("");
+//        CardbusinessAggregatepayB2cOnlineConsumepurchaseResponseV1 response;
+//        response = client.execute(request, System.currentTimeMillis()+"");//msgId消息通讯唯一编号,要求每次调用独立生成,APP级唯一
+//        Map<String, String> map = new HashMap<>();
+//        if (response.getReturnCode() == 0) {
+//            // 6、业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据
+//            System.err.println("ReturnCode:"+response.getReturnCode());
+//            System.err.println("response:" + JSON.toJSONString(response));
+//            if(pay_mode == 9){//微信
+//                String order_id = response.getOrder_id();//工行订单号
+//                String out_trade_no1 = response.getOut_trade_no();//商户订单号
+//                map.put("order_id", order_id);
+//                map.put("out_trade_no1", out_trade_no1);
+//                map.put("data", response.getWx_data_package());
+//                map.put("code", "200");
+//                map.put("msg", "成功");
+//
+//                return map;
+//            }
+//            if(pay_mode == 10){//支付宝
+//                String order_id = response.getOrder_id();//工行订单号
+//                String out_trade_no1 = response.getOut_trade_no();//商户订单号
+//                map.put("order_id", order_id);
+//                map.put("out_trade_no1", out_trade_no1);
+//                map.put("data", response.getZfb_data_package());
+//                map.put("code", "200");
+//                map.put("msg", "成功");
+//                return map;
+//            }
+//        }
+//        if(response.getReturnCode() == 92209500){
+//            System.err.println("response:" + JSON.toJSONString(response));
+//            System.err.println("ReturnCode:"+response.getReturnCode());
+//            System.err.println("ReturnMsg:"+response.getReturnMsg());
+//            map.put("order_id", "");
+//            map.put("out_trade_no1", "");
+//            map.put("data", "");
+//            map.put("code", "300");
+//            map.put("msg", "支付失败,请过两分钟后再重新支付!");
+//            return map;
+//        }else {
+//            // 失败
+//            System.err.println("response:" + JSON.toJSONString(response));
+//            System.err.println("ReturnCode:"+response.getReturnCode());
+//            System.err.println("ReturnMsg:"+response.getReturnMsg());
+//            map.put("order_id", "");
+//            map.put("out_trade_no1", "");
+//            map.put("data", "");
+//            map.put("code", "300");
+//            map.put("msg", "支付失败");
+//            return map;
+//        }
+        return null;
+    }
+
+
+
+
+    /**
+     * 查询交易(商户订单号和工行订单号二选其一)
+     * @param out_trade_no  商户订单号
+     * @param order_id      工行订单号
+     * @return
+     */
+    public String queryTransaction(String out_trade_no, String order_id){
+//        //签名类型为RSA时,需传入appid,私钥和网关公钥,签名类型使用定值IcbcConstants.SIGN_TYPE_RSA,其他参数使用缺省值
+//        DefaultIcbcClient client = new DefaultIcbcClient(app_id, IcbcConstants.SIGN_TYPE_RSA2, privateKey, icbcPulicKey);
+//        CardbusinessAggregatepayB2cOnlineOrderqryRequestV1 request = new CardbusinessAggregatepayB2cOnlineOrderqryRequestV1();
+//        //根据测试环境和生产环境替换相应ip和端口
+//        request.setServiceUrl("https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/orderqry/V1");
+//        CardbusinessAggregatepayB2cOnlineOrderqryRequestV1.CardbusinessAggregatepayB2cOnlineOrderqryRequestV1Biz bizContent = new
+//                CardbusinessAggregatepayB2cOnlineOrderqryRequestV1.CardbusinessAggregatepayB2cOnlineOrderqryRequestV1Biz();
+//        request.setBizContent(bizContent);
+//        //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值
+//        bizContent.setMer_id(mer_id);
+//        bizContent.setOut_trade_no(out_trade_no);
+//        bizContent.setOrder_id(order_id);
+//        bizContent.setDeal_flag("0");//操作标志,0-查询;1-关单
+//        bizContent.setIcbc_appid(app_id);
+//        CardbusinessAggregatepayB2cOnlineOrderqryResponseV1 response;
+//        try {
+//            response = client.execute(request, System.currentTimeMillis()+"");//msgId消息通讯唯一编号,要求每次调用独立生成,APP级唯一
+//            if (response.getReturnCode() == 0) {
+//                // 6、业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据
+//                System.out.println("ReturnCode:"+response.getReturnCode());
+//                System.out.println("response:" + JSON.toJSONString(response));
+//
+//                String pay_status = response.getPay_status();
+//
+//                return pay_status;
+//            } else {
+//                // 失败
+//                System.out.println("response:" + JSON.toJSONString(response));
+//                System.out.println("ReturnCode:"+response.getReturnCode());
+//                System.out.println("ReturnMsg:"+response.getReturnMsg());
+//            }
+//        } catch (IcbcApiException e) {
+//            e.printStackTrace();
+//        }
+        return "";
+    }
+
+
+
+    /**
+     * 支付回调处理
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    public Map<String, String> payCallback(HttpServletRequest request) throws Exception{
+        String biz_content1 = request.getParameter("biz_content");
+        JSONObject biz_content = JSON.parseObject(biz_content1);
+        int return_code = biz_content.getIntValue("return_code");
+        String return_msg = biz_content.getString("return_msg");
+        Map<String, String> map = new HashMap<>();
+        if(return_code == 0){
+            String out_trade_no = biz_content.getString("out_trade_no");//商家订单编号
+            String order_id = biz_content.getString("order_id");//工行订单号
+            String third_trade_no = biz_content.getString("third_trade_no");//第三方订单号(微信/支付宝)
+            String attach = biz_content.getString("attach");//附加信息
+            String pay_time = biz_content.getString("pay_time");//支付完成时间"20190112"
+
+            map.put("out_trade_no", out_trade_no);
+            map.put("order_id", order_id);
+            map.put("third_trade_no", third_trade_no);
+            map.put("attach", attach);
+            map.put("pay_time", pay_time);
+        }else{
+            System.err.println("支付失败:" + return_msg);
+        }
+        return map;
+    }
+
+
+    /**
+     * 回调通知应答
+     * @param response
+     * @throws Exception
+     */
+    public void answer(HttpServletResponse response) throws Exception{
+//        response.setContentType("application/json;charset=UTF-8");
+//        StringBuffer sb = new StringBuffer();
+//        String nativeUUID = UUIDUtil.getNativeUUID();
+//        sb.append("\"response_biz_content\":{\"return_code\":0,\"return_msg\":\"success\",\"msg_id\":\"" + nativeUUID + "\"},\"sign_type\":\"RSA2\"");
+//        String sign = IcbcSignature.sign(sb.toString(), IcbcConstants.SIGN_TYPE_RSA2, privateKey, "UTF-8");
+//        StringBuffer string = new StringBuffer();
+//        string.append("{\"response_biz_content\":{\"return_code\":0,\"return_msg\":\"success\",\"msg_id\":\"" + nativeUUID + "\"},\"sign_type\":\"RSA2\",\"sign\":\"" + sign + "\"}");
+//        PrintWriter out = response.getWriter();
+//        out.write(string.toString());
+//        out.flush();
+//        out.close();
+    }
+
+
+
+
+
+    /**
+     * 转账
+     * @param money             转账金额(分)
+     * @param payeeAccount      收款账户(默认使用工行账户)
+     * @param payeeCnname       收款账户名称
+     * @return
+     */
+    public ResultUtil<String> transfer(Long money, String payeeAccount, String payeeCnname) throws Exception{
+//        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+//        SimpleDateFormat sdf_ = new SimpleDateFormat("HHmmssSSS");
+//        Date date = new Date();
+//        String url = "https://gw.open.icbc.com.cn/api/mybank/enterprise/pay/payent/V1";
+//        DefaultIcbcClient client = new DefaultIcbcClient(app_id, IcbcConstants.SIGN_TYPE_RSA2, privateKey, icbcPulicKey);
+//        MybankEnterprisePayPayentRequestV1.MybankEnterprisePayPayentRequestBizV1 bizContent =
+//                new MybankEnterprisePayPayentRequestV1.MybankEnterprisePayPayentRequestBizV1();
+//        MybankEnterprisePayPayentRequestV1 request = new MybankEnterprisePayPayentRequestV1();
+//        // 请对照接⼝⽂档⽤bizContent.setxxx()⽅法对业务上送数据进⾏赋值
+//        bizContent.setTransCode("PAYPER");
+//        bizContent.setCis("210590000448207");//集团CIS号
+//        bizContent.setBankCode("102");//归属银行编号
+//        bizContent.setLoginId("GXYS01.y.2105");//证书ID
+//        bizContent.setTranDate(sdf.format(date));
+//        bizContent.setTranTime(sdf_.format(date));
+//        bizContent.setfSeqno(System.currentTimeMillis() + "");
+//        bizContent.setSettleMode(0);//入账方式。0:逐笔记账;2:并笔记账
+//        bizContent.setInstrCount(1);//总笔数
+//        bizContent.setTotalAmount(new BigDecimal(money));//总金额(分)
+//        ArrayList<MybankEnterprisePayPayentRequestV1.MybankEnterprisePayPayentRequestRdV1> list = new ArrayList<>();
+//        MybankEnterprisePayPayentRequestV1.MybankEnterprisePayPayentRequestRdV1 rd = new MybankEnterprisePayPayentRequestV1.MybankEnterprisePayPayentRequestRdV1();
+//        rd.setiSeqno(UUIDUtil.getRandomCode());//指令顺序号:每笔指令的序号,本包内不重复
+//        rd.setPayType("1");//记账处理方式:1:加急;2:普通;3:跨行快汇。联机批量标志为2-批量时,此字段无意义,上送1即可
+//        rd.setPayerAccount(mer_acct);//本方账户
+//        rd.setPayerCnname(payer_cnname);//本方账户名
+//        rd.setPayeeAccount(payeeAccount);//收方账号
+//        rd.setPayeeCnname(payeeCnname);//收方账户名
+//        rd.setIoFlag("1");//系统内外标志:1:系统内;2:系统外
+//        rd.setCurrency("CNY");
+//        rd.setAmount(new BigDecimal(money));//金额:无正负号,以分为单位
+//        rd.setPurpose("代收款");//用途描述
+//
+//        list.add(rd);
+//        bizContent.setRd(list);
+//        request.setServiceUrl(url);
+//        request.setBizContent(bizContent);
+//        MybankEnterprisePayPayentResponseV1 response = client.execute(request);
+//        if (response.isSuccess()) {
+//            // 业务成功处理
+//            System.err.println("ReturnCode:"+response.getReturnCode());
+//            System.err.println("response:" + JSON.toJSONString(response));
+//            if(response.getReturnCode() == 0){
+//                return ResultUtil.success(response.getSerialNo());
+//            }else{
+//                return ResultUtil.error("转账申请提交失败(" + response.getReturnMsg() + ")");
+//            }
+//        } else {
+//            System.err.println("response:" + JSON.toJSONString(response));
+//            System.err.println("ReturnCode:"+response.getReturnCode());
+//            System.err.println("ReturnMsg:"+response.getReturnMsg());
+//            return ResultUtil.error("转账申请提交失败(" + response.getReturnMsg() + ")");
+//        }
+        return null;
+    }
+
+
+    /**
+     * 查询转账交易状态
+     * @param serialNo      转账申请序列号(转账接口返回)
+     * @return              -1=查询异常,0=交易成功,1=交易处理中,2=交易拒绝
+     */
+    public Integer queryTransfer(String serialNo){
+//        String url = "https://gw.open.icbc.com.cn/api/mybank/enterprise/pay/qpayent/V1";
+//        DefaultIcbcClient client = new DefaultIcbcClient(app_id, IcbcConstants.SIGN_TYPE_RSA2, privateKey, icbcPulicKey);
+//        try {
+//            MybankEnterprisePayQpayentRequestV1.MybankEnterprisePayQpayentRequestBizV1 bizContent =
+//                    new MybankEnterprisePayQpayentRequestV1.MybankEnterprisePayQpayentRequestBizV1();
+//            MybankEnterprisePayQpayentRequestV1 request = new MybankEnterprisePayQpayentRequestV1();
+//            Date date = new Date();
+//            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
+//            SimpleDateFormat sdf2 = new SimpleDateFormat("HHmmssSSS");
+//            bizContent.setTransCode("QPAYPER");//交易代码
+//            bizContent.setTranDate(sdf1.format(date));//交易日期:ERP系统产生,格式是yyyyMMdd
+//            bizContent.setTranTime(sdf2.format(date));//交易时间:ERP系统产生,格式如HHmmssSSS,精确到毫秒
+//            bizContent.setLanguage("zh_CN");
+//            bizContent.setfSeqNo(UUIDUtil.getRandomCode());//指令包序列号:ERP系统产生,一个集团永远不能重复
+//            bizContent.setQryfSeqno("");//待查指令包序列号:判断待查指令包序列号和待查平台交易流水号必须至少有一项有值
+//            bizContent.setQrySerialNo(serialNo);//待查平台交易序列号
+//            request.setServiceUrl(url);
+//            request.setBizContent(bizContent);
+//            MybankEnterprisePayQpayentResponseV1 response = client.execute(request);
+//            if (response.isSuccess()) {
+//                int returnCode = response.getReturnCode();//返回码,交易成功返回0,正表示业务报错,负表示系统报错,负值时须考虑疑帐
+//                String returnMsg = response.getReturnMsg();//返回说明
+//                if(0 == returnCode){
+//                    List<MybankEnterprisePayQpayentResponseV1.MybankEnterprisePayQpayentResponseRdV1> rd = response.getRd();
+//                    MybankEnterprisePayQpayentResponseV1.MybankEnterprisePayQpayentResponseRdV1 bank = rd.get(0);
+//                    String result = bank.getResult();//指令状态:0:提交成功,等待银行处理 1:授权成功, 等待银行处理 2:等待授权 3:等待二次授权 4:等待银行答复 5:主机返回待处理 6:被银行拒绝 7:处理成功 8:指令被拒绝授权 9:银行正在处理 10:预约指令 11:预约取消 86:等待电话核实 95:待核查 98:区域中心通讯可疑
+//                    if(result.equals("7")){//交易成功
+//                        return 0;
+//                    }
+//                    if(result.equals("6") || result.equals("8")){//交易拒绝
+//                        return 2;
+//                    }
+//                    return 1;//交易处理中
+//                }else{
+//                    System.err.println(returnMsg);
+//                    return -1;
+//                }
+//            } else {
+//                return -1;
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            return -1;
+//        }
+        return null;
+    }
+
+
+    /**
+     * 获取扫码支付二维码(客户扫商户二维码)
+     * @param out_trade_no      商户系统订单号
+     * @param order_amt         订单金额
+     * @param orderTime         订单生成时间
+     * @param attach            附加信息
+     * @param notify_url        支付成功回调地址
+     * @return
+     * @throws Exception
+     */
+    public ResultUtil<Map<String, Object>> generate(String out_trade_no, Double order_amt, Date orderTime, String attach, String notify_url) throws Exception{
+//        order_amt = order_amt * 100;
+//        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+//        SimpleDateFormat sdf1 = new SimpleDateFormat("HHmmss");
+//        //签名类型为RSA2时,需传入appid,私钥和网关公钥,签名类型使用定值IcbcConstants.SIGN_TYPE_RSA2,其他参数使用缺省值
+//        DefaultIcbcClient client = new DefaultIcbcClient(app_id, IcbcConstants.SIGN_TYPE_RSA2, privateKey, icbcPulicKey);
+//        QrcodeGenerateRequestV2 request = new QrcodeGenerateRequestV2();
+//        request.setServiceUrl("https://gw.open.icbc.com.cn/api/qrcode/V2/generate");
+//        QrcodeGenerateRequestV2.QrcodeGenerateRequestV2Biz bizContent = new QrcodeGenerateRequestV2.QrcodeGenerateRequestV2Biz();
+//        bizContent.setMerId(mer_id1);
+//        bizContent.setStoreCode("21050022636");//E生活编号
+//        bizContent.setOutTradeNo(out_trade_no);
+//        bizContent.setOrderAmt(order_amt.intValue() + "");
+//        bizContent.setTradeDate(sdf.format(orderTime));
+//        bizContent.setTradeTime(sdf1.format(orderTime));
+//        bizContent.setAttach(attach);//该字段非必输项
+//        bizContent.setPayExpire("1200");
+//        bizContent.setNotifyUrl(notify_url);//该字段非必输项
+//        bizContent.setTporderCreateIp(InetAddress.getLocalHost().getHostAddress());
+//        bizContent.setSpFlag("0");//该字段非必输项
+//        bizContent.setNotifyFlag("1");
+//        request.setBizContent(bizContent);
+//        QrcodeGenerateResponseV2 response = client.execute(request, System.currentTimeMillis()+"");
+//        if (response.isSuccess()) {
+//            // 业务成功处理
+//            System.out.println("ReturnCode:"+response.getReturnCode());
+//            System.out.println("response:" + response);
+//            Map<String, Object> map = new HashMap<>();
+//            map.put("qrcode", response.getQrcode());
+//            map.put("attach", response.getAttach());
+//            return ResultUtil.success(map);
+//        } else {
+//            // 失败
+//            System.out.println("ReturnCode:" + response.getReturnCode());
+//            System.out.println("ReturnMsg:" + response.getReturnMsg());
+//            return ResultUtil.error("获取支付二维码失败(" + response.getReturnMsg() + ")");
+//        }
+        return null;
+    }
+
+
+    /**
+     * 扫码支付结果查询
+     * @param out_trade_no  用户订单号
+     * @param order_id      工行订单号
+     * @return
+     */
+    public String queryGeneratePayState(String out_trade_no, String order_id){
+//        //签名类型为RSA2时,需传入appid,私钥和网关公钥,签名类型使用定值IcbcConstants.SIGN_TYPE_RSA2,其他参数使用缺省值
+//        DefaultIcbcClient client = new DefaultIcbcClient(app_id, IcbcConstants.SIGN_TYPE_RSA2, privateKey, icbcPulicKey);
+//        QrcodeQueryRequestV2 request = new QrcodeQueryRequestV2();
+//        request.setServiceUrl("https://gw.open.icbc.com.cn/api/qrcode/V2/query");
+//        QrcodeQueryRequestV2.QrcodeQueryRequestV2Biz bizContent = new QrcodeQueryRequestV2.QrcodeQueryRequestV2Biz();
+//        bizContent.setMerId(mer_id);
+//        bizContent.setOutTradeNo(out_trade_no);//该字段非必输项,out_trade_no和order_id选一项上送即可
+//        bizContent.setOrderId(order_id);//该字段非必输项,out_trade_no和order_id选一项上送即可
+//        request.setBizContent(bizContent);
+//        QrcodeQueryResponseV2 response;
+//        try {
+//            response = client.execute(request, System.currentTimeMillis()+"");
+//            if (response.getReturnCode() == 0) {
+//                // 6、业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据
+//                System.out.println("ReturnCode:"+response.getReturnCode());
+//                System.out.println("response:" + JSON.toJSONString(response));
+//
+//                String pay_status = response.getPayStatus();//交易结果标志,0:支付中,1:支付成功,2:支付失败
+//                return pay_status;
+//            } else {
+//                // 失败
+//                System.out.println("response:" + JSON.toJSONString(response));
+//                System.out.println("ReturnCode:"+response.getReturnCode());
+//                System.out.println("ReturnMsg:"+response.getReturnMsg());
+//            }
+//        } catch (IcbcApiException e) {
+//            e.printStackTrace();
+//        }
+        return "";
+    }
+
+
+
+    /**
+     * 扫码支付成功回调客户扫商户二维码)
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    public Map<String, String> generatePayCallback(HttpServletRequest request) throws Exception{
+        String biz_content1 = request.getParameter("biz_content");
+        JSONObject biz_content = JSON.parseObject(biz_content1);
+        int return_code = biz_content.getIntValue("return_code");
+        String return_msg = biz_content.getString("return_msg");
+        Map<String, String> map = new HashMap<>();
+        if(return_code == 0){
+            String out_trade_no = biz_content.getString("out_trade_no");//商家订单编号
+            String order_id = biz_content.getString("order_id");//工行订单号
+//            String third_trade_no = biz_content.getString("third_trade_no");//第三方订单号(微信/支付宝)
+            String attach = biz_content.getString("attach");//附加信息
+            String pay_time = biz_content.getString("pay_time");//支付完成时间"20190112"
+
+            map.put("out_trade_no", out_trade_no);
+            map.put("order_id", order_id);
+//            map.put("third_trade_no", third_trade_no);
+            map.put("attach", attach);
+            map.put("pay_time", pay_time);
+        }else{
+            System.err.println("支付失败:" + return_msg);
+        }
+        return map;
+    }
+
+
+
+
+    /**
+     * 退款申请
+     * @param order_id          工行下单订单号(与“商户系统下单订单号”二选一)
+     * @param out_trade_no      商户系统下单订单号(与“工行下单订单号”二选一)
+     * @param ret_total_amt     退款金额
+     * @param order_apd_inf     附加信息
+     * @param outtrx_serial_no  外部退货流水号
+     * @return
+     * @throws Exception
+     */
+    public Map<String, Object> merrefund(String order_id, String out_trade_no, Double ret_total_amt, String order_apd_inf, String outtrx_serial_no) throws Exception{
+//        ret_total_amt = ret_total_amt * 100;
+//        //签名类型为RSA2时,需传入appid,私钥和网关公钥,签名类型使用定值IcbcConstants.SIGN_TYPE_RSA2,其他参数使用缺省值
+//        DefaultIcbcClient client = new DefaultIcbcClient(app_id, IcbcConstants.SIGN_TYPE_RSA2, privateKey, icbcPulicKey);
+//        CardbusinessAggregatepayB2cOnlineMerrefundRequestV1 request = new CardbusinessAggregatepayB2cOnlineMerrefundRequestV1();
+//        //根据测试环境和生产环境替换相应ip和端口
+//        request.setServiceUrl("https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/merrefund/V1");
+//        //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值
+//        CardbusinessAggregatepayB2cOnlineMerrefundRequestV1.CardbusinessAggregatepayB2cOnlineMerrefundRequestV1Biz bizContent = new
+//                CardbusinessAggregatepayB2cOnlineMerrefundRequestV1.CardbusinessAggregatepayB2cOnlineMerrefundRequestV1Biz();
+//        request.setBizContent(bizContent);
+//        bizContent.setOrder_id(order_id);//消费工行订单号,工行订单号,商户订单号或行内订单号必须其中一个不为空
+//        bizContent.setMer_id(mer_id);//商户编号‐必输项
+//        bizContent.setOut_trade_no(out_trade_no);//商户订单号,工行订单号,商户订单号或行内订单号必须其中一个不为空
+//        bizContent.setOuttrx_serial_no(outtrx_serial_no);//外部退货流水号‐必输项
+//        bizContent.setRet_total_amt(ret_total_amt.intValue() + "");//退货总金额‐必输项
+//        bizContent.setTrnsc_ccy("001");//交易币种‐必输项
+//        bizContent.setOrder_apd_inf(order_apd_inf);//备注信息
+//        bizContent.setIcbc_appid(app_id);
+//        bizContent.setMer_acct("");
+//        CardbusinessAggregatepayB2cOnlineMerrefundResponseV1 response;
+//        Map<String, Object> map = new HashMap<>();
+//        try {
+//            response = client.execute(request, "msgId3");//msgId消息通讯唯一编号,要求每次调用独立生成,APP级唯一
+//            if (response.isSuccess()) {
+//                // 业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据
+//                System.out.println("ReturnCode:"+response.getReturnCode());
+//                System.out.println("ReturnCode:"+response.getReturnCode());
+//                System.out.println("response:" + response);
+//                map.put("intrx_serial_no", response.getIntrx_serial_no());//退货工行流水号
+//                map.put("code", response.getReturnCode());
+//                map.put("mag", response.getReturnMsg());
+//            } else {
+//                // 失败
+//                System.out.println("ReturnCode:"+response.getReturnCode());
+//                System.out.println("ReturnMsg:"+response.getReturnMsg());
+//                map.put("code", response.getReturnCode());
+//                map.put("mag", response.getReturnMsg());
+//            }
+//        } catch (IcbcApiException e) {
+//            e.printStackTrace();
+//        }
+        return null;
+    }
+
+
+    /**
+     * 退款查询
+     * @param out_trade_no          商户系统消费下单订单号
+     * @param order_id              工行消费下单订单号
+     * @param outtrx_serial_no      商户系统退货编号
+     * @return
+     */
+    public Map<String, Object> refundqry(String out_trade_no, String order_id, String outtrx_serial_no){
+//        // 签名类型为RSA时,需传入appid,私钥和网关公钥,签名类型使用定值IcbcConstants.SIGN_TYPE_RSA,其他参数使用缺省值
+//        DefaultIcbcClient client = new DefaultIcbcClient(app_id, IcbcConstants.SIGN_TYPE_RSA2, privateKey, icbcPulicKey);
+//        CardbusinessAggregatepayB2cOnlineRefundqryRequestV1 request = new CardbusinessAggregatepayB2cOnlineRefundqryRequestV1();
+//        // 根据测试环境和生产环境替换相应ip和端口
+//        request.setServiceUrl("https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/refundqry/V1");
+//        CardbusinessAggregatepayB2cOnlineRefundqryRequestV1.CardbusinessAggregatepayB2cOnlineRefundqryRequestV1Biz bizContent = new
+//                CardbusinessAggregatepayB2cOnlineRefundqryRequestV1.CardbusinessAggregatepayB2cOnlineRefundqryRequestV1Biz();
+//        request.setBizContent(bizContent);
+//        // 请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值
+//        bizContent.setMer_id(mer_id);
+//        bizContent.setOut_trade_no(out_trade_no);
+//        bizContent.setOuttrx_serial_no(outtrx_serial_no);
+//        bizContent.setOrder_id(order_id);
+//        CardbusinessAggregatepayB2cOnlineRefundqryResponseV1 response;
+//        Map<String, Object> map = new HashMap<>();
+//        try {
+//            response = client.execute(request, System.currentTimeMillis() + "");// msgId消息通讯唯一编号,要求每次调用独立生成,APP级唯一
+//            if (response.getReturnCode() == 0) {
+//                // 业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据
+//                System.out.println("ReturnCode:" + response.getReturnCode());
+//                System.out.println("response:" + JSON.toJSONString(response));
+//                map.put("code", response.getReturnCode());//0
+//                map.put("msg", response.getReturnMsg());
+//                map.put("pay_status", response.getPay_status());//订单状态说明:0-退货成功;1-退货失败;2-退货状态未知
+//            } else {
+//                // 失败
+//                System.out.println("response:" + JSON.toJSONString(response));
+//                System.out.println("ReturnCode:" + response.getReturnCode());
+//                System.out.println("ReturnMsg:" + response.getReturnMsg());
+//                map.put("code", response.getReturnCode());//0
+//                map.put("msg", response.getReturnMsg());
+//            }
+//        } catch (IcbcApiException e) {
+//            e.printStackTrace();
+//        }
+//        return map;
+        return null;
+    }
+
+
+
+
+    /**
+     * 获取银行卡号归属地
+     * @param code
+     * @return
+     */
+    public Map<String, String> queryBank(String code){
+        String url = "https://bankaddress.shumaidata.com/bankaddress?bankcard=" + code;
+        Map<String, String> header = new HashMap<>();
+        header.put("Authorization", "APPCODE b7d32437d08149099457dcb50fb57df2");
+        String get = httpClientUtil.pushHttpRequset("GET", url, null, header, "form");
+        JSONObject jsonObject = JSON.parseObject(get);
+        int code1 = jsonObject.getIntValue("code");
+        Map<String, String> map = new HashMap<>();
+        if(code1 == 200){
+            map.put("msg", "success");
+            JSONObject data = jsonObject.getJSONObject("data");
+            map.put("province", data.getString("province"));//开通省
+            map.put("city", data.getString("city"));//开通市
+            map.put("abbreviation", data.getString("abbreviation"));//银行英文大写
+            map.put("type", data.getString("type"));//卡类型(借记卡)
+            map.put("bank", data.getString("bank"));//总行名称
+        }else{
+            map.put("msg", jsonObject.getString("msg"));
+        }
+        return map;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/JuHeUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/JuHeUtil.java
new file mode 100644
index 0000000..20376cb
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/JuHeUtil.java
@@ -0,0 +1,47 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 聚合数据工具类
+ */
+@Component
+public class JuHeUtil {
+
+    @Value("${juhe.appKey}")
+    private String key;
+
+    @Autowired
+    private HttpClientUtil httpClientUtil;
+
+    /**
+     * 身份证号码实名认证
+     * @param name
+     * @param idcard
+     * @return
+     */
+    public boolean idcard(String name, String idcard){
+        Map<String, Object> map = new HashMap<>();
+        map.put("key", key);
+        map.put("idcard", idcard);
+        map.put("realname", name);
+        String content = httpClientUtil.pushHttpRequset("GET", "http://op.juhe.cn/idcard/query", map, new HashMap<>(), "form");
+        System.err.println(content);
+        JSONObject jsonObject = JSON.parseObject(content);
+        if(jsonObject.getIntValue("error_code") == 0){
+            int res = jsonObject.getJSONObject("result").getIntValue("res");
+            return res == 1 ? true : false;
+        }
+        return false;
+    }
+    public static void main(String[] args) {
+
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MD5AndKL.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MD5AndKL.java
new file mode 100644
index 0000000..c97abd6
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MD5AndKL.java
@@ -0,0 +1,112 @@
+package com.stylefeng.guns.modular.system.util;
+
+import java.security.MessageDigest;
+
+public class MD5AndKL {
+	
+	/**
+	 * MD5加码。32位
+	 * 
+	 * @param inStr
+	 * @return
+	 */
+	public static String MD5(String inStr) {
+		MessageDigest md5 = null;
+		try {
+			md5 = MessageDigest.getInstance("MD5");
+		} catch (Exception e) {
+			throw new RuntimeException(e.toString());
+		}
+		byte[] md5Bytes = md5.digest(inStr.getBytes());
+		StringBuffer hexValue = new StringBuffer();
+		for (int i = 0; i < md5Bytes.length; i++) {
+			int val = ((int) md5Bytes[i]) & 0xff;
+			if (val < 16) {
+				hexValue.append("0");
+			}
+			hexValue.append(Integer.toHexString(val));
+		}
+		return hexValue.toString();
+	}
+
+	/**
+	 * 可逆的加密算法
+	 * 
+	 * @param inStr
+	 * @return
+	 */
+	public static String KL(String inStr) {
+		char[] a = inStr.toCharArray();
+		for (int i = 0; i < a.length; i++) {
+			a[i] = (char) (a[i] ^ 't');
+		}
+		String s = new String(a);
+		return s;
+	}
+
+	/**
+	 * 加密后解密
+	 * 
+	 * @param inStr
+	 * @return
+	 */
+	public static String JM(String inStr) {
+		char[] a = inStr.toCharArray();
+		for (int i = 0; i < a.length; i++) {
+			a[i] = (char) (a[i] ^ 't');
+		}
+		String k = new String(a);
+		return k;
+	}
+
+
+
+	private static String byteArrayToHexString(byte b[]) {
+		StringBuffer resultSb = new StringBuffer();
+		for (int i = 0; i < b.length; i++)
+			resultSb.append(byteToHexString(b[i]));
+
+		return resultSb.toString();
+	}
+
+	private static String byteToHexString(byte b) {
+		int n = b;
+		if (n < 0)
+			n += 256;
+		int d1 = n / 16;
+		int d2 = n % 16;
+		return hexDigits[d1] + hexDigits[d2];
+	}
+
+	public static String MD5Encode(String origin, String charsetname) {
+		String resultString = null;
+		try {
+			resultString = new String(origin);
+			MessageDigest md = MessageDigest.getInstance("MD5");
+			if (charsetname == null || "".equals(charsetname)){
+				resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
+			}else{
+				resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
+			}
+		} catch (Exception exception) {
+			exception.printStackTrace();
+		}
+		return resultString;
+	}
+
+	private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
+			"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
+
+	public static void main(String args[]) {
+		 
+		System.out.println("MD5后再加密:" + KL(MD5("123456")));
+		System.out.println(MD5("123456"));
+		// System.out.println("加密:" + KL(MD5("123456")));
+		// s = KL(s);
+		// System.out.println("解密:" + KL("81dc9bdb52d04dc20036dbd8313ed055"));
+		// System.out.println("解密:" + JM(KL(s)));
+		// System.out.println("解密为MD5后的:" + KL(KL(MD5(s))));
+		// System.out.println(JM("5d62957bb57d3e49dcf48a0df064be4c"));
+		// System.out.println(MD5AndKL.KL(MD5AndKL.MD5("admin"+"87654321")));
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MD5Util.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MD5Util.java
new file mode 100644
index 0000000..6129902
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MD5Util.java
@@ -0,0 +1,22 @@
+package com.stylefeng.guns.modular.system.util;
+
+import lombok.SneakyThrows;
+
+import java.security.MessageDigest;
+
+public class MD5Util {
+    @SneakyThrows
+    public static String encrypt32(String encryptStr) {
+        MessageDigest md5 = MessageDigest.getInstance("MD5");
+        byte[] md5Bytes = md5.digest(encryptStr.getBytes());
+        StringBuilder hexValue = new StringBuilder();
+        for (int i = 0; i < md5Bytes.length; i++) {
+            int val = ((int) md5Bytes[i]) & 0xff;
+            if (val < 16) {
+                hexValue.append("0");
+            }
+            hexValue.append(Integer.toHexString(val));
+        }
+        return hexValue.toString().toUpperCase();
+    }
+}
\ No newline at end of file
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MinistryOfTransport.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MinistryOfTransport.java
new file mode 100644
index 0000000..e6327bc
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MinistryOfTransport.java
@@ -0,0 +1,1063 @@
+package com.stylefeng.guns.modular.system.util;
+
+
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import sun.security.krb5.internal.PAData;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 交通部接口对接
+ */
+@Component
+public class MinistryOfTransport {
+
+    private final String CompanyId = "4502YSGSGK3Y";//公司标识
+
+    private final String Source = "0";//消息来源标识
+
+    private final String url = "http://172.19.5.101:8085";
+
+    @Autowired
+    private HttpClientUtil httpClientUtil;
+
+    private SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+    private SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
+
+    private SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss");
+
+
+    /**
+     * 上传企业基础信息
+     */
+    public void baseInfoCompany(){
+        String IPCType = "baseInfoCompany";
+        String path = url + "/baseinfo/company";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("CompanyName", "广西云森科技有限公司");//公司名称
+        jsonObject.put("Identifier", "91450200MA5K99GK3Y");//统一社会信用代码
+        jsonObject.put("Address", 450204);//注册地行政区划代码
+        jsonObject.put("BusinessScope", "网络预约出租汽车客运");//经营范围
+        jsonObject.put("ContactAddress", "柳州市柳南区航银路8号万利大厦3楼303室");//通信地址
+        jsonObject.put("EconomicType", "150");//经营业户经济类型
+        jsonObject.put("RegCapital", "壹仟万圆整");//注册资本
+        jsonObject.put("LegalName", "翁克顺");//法人代表姓名
+        jsonObject.put("LegalID", "44052419650805207X");//法人代表身份证号
+        jsonObject.put("LegalPhone", "13907728585");//法人代表电话
+        jsonObject.put("LegalPhoto", "");//法人代表身份证扫描件文件编号
+        jsonObject.put("State", 0);//状态(0:有效,1:失效)
+        jsonObject.put("Flag", 2);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 网约车平台公司营运规模信息接口
+     */
+    public void baseInfoCompanyStat(){
+        String IPCType = "baseInfoCompanyStat";
+        String path = url + "/baseinfo/companystat";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("VehicleNum", 0);//平台注册网约车辆数
+        jsonObject.put("DriverNum", 0);//平台注册驾驶员数
+        jsonObject.put("Flag", 2);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 网约车平台公司支付信息
+     */
+    public void baseInfoCompanyPay(){
+        String IPCType = "baseInfoCompanyPay";
+        String path = url + "/baseinfo/companypay";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("PayName", "");//银行或者非银行支付机构名称
+        jsonObject.put("PayId", "");//非银行支付机构支付业务许可证编号
+        jsonObject.put("PayType", "");//支付业务类型
+        jsonObject.put("PayScope", "");//业务覆盖范围
+        jsonObject.put("PrepareBank", "");//备付金存管银行
+        jsonObject.put("CountDate", 1);//结算周期
+        jsonObject.put("State", 0);//状态(0:有效,1:失效)
+        jsonObject.put("Flag", 2);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 网约车平台公司服务机构
+     */
+    public void baseInfoCompanyService(){
+        String IPCType = "baseInfoCompanyService";
+        String path = url + "/baseinfo/companyservice";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 450204);//行政区划代码
+        jsonObject.put("ServiceNae", "广西云森科技有限公司");//服务机构名称
+        jsonObject.put("ServiceNo", "");//服务机构代码
+        jsonObject.put("DetailAddress", "柳州市柳南区航银路8号万利大厦3楼303室");//服务机构地址
+        jsonObject.put("ResponsibleName", "");//服务机构负责人姓名
+        jsonObject.put("ResponsiblePhone", "");//负责人联系电话
+        jsonObject.put("ManagerName", "");//服务机构管理人姓名
+        jsonObject.put("ManagerPhone", "");//管理人联系电话
+        jsonObject.put("ContactPhone", "");//服务机构紧急联系电话
+        jsonObject.put("MailAddress", "");//行政文书送达邮寄地址
+        jsonObject.put("CreateDate", 20150918);//服务机构设立日期
+        jsonObject.put("State", 0);//状态(0:有效,1:失效)
+        jsonObject.put("Flag", 2);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 网约车平台公司经营许可
+     */
+    public void baseInfoCompanyPermit(){
+        String IPCType = "baseInfoCompanyPermit";
+        String path = url + "/baseinfo/companypermit";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 450204);//许可地行政区划代码
+        jsonObject.put("Certificate", "450200005403");//网络预约出租车经营许可证号
+        jsonObject.put("OperationArea", "广西壮族自治州柳州市城区");//经营区域
+        jsonObject.put("OwnerName", "广西云森科技有限公司");//公司名称
+        jsonObject.put("Organization", "柳州市行政审批据");//发证机构名称
+        jsonObject.put("StartDate", 20180330);//有效期起YYYYMMDD
+        jsonObject.put("StopDate", 20220329);//有效期止YYYYMMDD
+        jsonObject.put("CertifyDate", 0);//初次发证日期YYYYMMDD
+        jsonObject.put("State", 0);//状态(0:有效,1:失效)
+        jsonObject.put("Flag", 2);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 网约车平台公司运价信息
+     */
+    public void baseInfoCompanyFare(){
+        String IPCType = "baseInfoCompanyFare";
+        String path = url + "/baseinfo/companyfare";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 450204);//运价适用地行政区划代码
+        jsonObject.put("FareType", "");//运价类型编码(由网约车平台公司统一编码,应确保唯一性)
+        jsonObject.put("FareTypeNote", "");//运价类型说明
+        jsonObject.put("FareValidOn", 0);//运价有效期起YYYYMMDDhhmmss
+        jsonObject.put("FareValidOff", 0);//运价有效止YYYYMMDDhhmmss
+        jsonObject.put("StartFare", 0);//起步价(元)
+        jsonObject.put("StartMile", 0);//起步里程(km)
+        jsonObject.put("UnitPricePerMile", 0);//计程单价(按公里/元)
+        jsonObject.put("UnitPricePerMinute", 0);//计时单价(按分钟/元)
+        jsonObject.put("UpPrice", 0);//单程加价单价(元)
+        jsonObject.put("UpPriceStartMile", 0);//单程加价公里(km)
+        jsonObject.put("MorningPeakTimeOn", "");//营运早高峰时间起(HHmm 24小时)
+        jsonObject.put("MorningPeakTimeOff", "");//营运早高峰时间止(HHmm 24小时)
+        jsonObject.put("EveningPeakTimeOn", "");//营运晚高峰时间起(HHmm 24小时)
+        jsonObject.put("EveningPeakTimeOff", "");//营运晚高峰时间止(HHmm 24小时)
+        jsonObject.put("OtherPeakTimeOn", "");//其他营运高等时间起(HHmm 24小时)
+        jsonObject.put("OtherPeakTineOff", "");//其他营运高等时间止(HHmm 24小时)
+        jsonObject.put("PeakUnitPrice", 0);//高峰时间单程加价单价(元)
+        jsonObject.put("PeakPriceStartMile", 0);//高峰时间单程加价公里(km)
+        jsonObject.put("LowSpeedPriceMinute", 0);//低速计时加价(按分钟 元)
+        jsonObject.put("NightPricePerMile", 0);//夜间费(按公里 元)
+        jsonObject.put("NightPricePerMinute", 0);//夜间费(按分钟 元)
+        jsonObject.put("OtherPrice", 0);//其它加价金额(元)
+
+        jsonObject.put("State", 0);//状态(0:有效,1:失效)
+        jsonObject.put("Flag", 2);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 车辆基本信息
+     */
+    public void baseInfoVehicle(){
+        String IPCType = "baseInfoVehicle";
+        String path = url + "/baseinfo/vehicle";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 450204);//车辆所在城市行政区划代码
+        jsonObject.put("VehicleNo", "");//车辆号牌
+        jsonObject.put("PlateColor", "");//车牌颜色
+        jsonObject.put("Seats", 5);//核定载客位
+        jsonObject.put("Brand", "");//车辆厂牌
+        jsonObject.put("Model", "");//车辆型号
+        jsonObject.put("VehicleType", "");//车辆类型(以机动车行驶证为准)
+        jsonObject.put("OwnerName", "");//车辆所有人(以机动车行驶证为准)
+        jsonObject.put("VehicleColor", "");//车身颜色
+        jsonObject.put("EngineId", "");//发送机号(以机动车行驶证为准)
+        jsonObject.put("VIN", "");//车辆VIN码(以机动车行驶证为准)
+        jsonObject.put("CertifyDateA", 0);//车辆注册日期(以机动车行驶证为准)
+        jsonObject.put("FuelType", "");//车辆燃料类型
+        jsonObject.put("EngineDisplace", "");//发送机排量(毫升)
+        jsonObject.put("PhotoId", "");//车辆照片文件编号
+        jsonObject.put("Certificate", "");//运输证字号
+        jsonObject.put("TransAgency", "");//车辆运输证发证机构
+        jsonObject.put("TransArea", "");//车辆经营区域
+        jsonObject.put("TransDateStart", 0);//车辆运输证有效期起YYYYMMDD
+        jsonObject.put("TransDateStop", 0);//车辆运输证有效期止YYYYMMDD
+        jsonObject.put("CertifyDateB", 0);//车辆初次登记日期
+        jsonObject.put("FixState", "");//车辆维修状态(0:未检修,1:已检修,2:未知)
+        jsonObject.put("NextFixDate", 0);//车辆下次年检时间
+        jsonObject.put("CheckState", "");//车辆年度审验状态
+        jsonObject.put("FeePrintId", "");//发票打印设备序列号
+        jsonObject.put("GPSBrand", "");//卫星定位装置品牌
+        jsonObject.put("GPSModel", "");//卫星定位装置型号
+        jsonObject.put("GPSIMEI", "");//卫星定位装置IMEI号
+        jsonObject.put("GPSInstallDate", 0);//卫星定位设备安装日期YYYYMMDD
+        jsonObject.put("RegisterDate", 0);//报备日期(车辆信息向服务所在地出租车行政主管部门报备日期YYYYMMDD)
+        jsonObject.put("CommercialType", 0);//服务类型(1:网络预约出租车,2:巡游出租汽车,3:私人小客车合乘)
+        jsonObject.put("FareType", "");//运价类型编码(与云间信息中一一对应)
+
+        jsonObject.put("State", 0);//状态(0:有效,1:失效)
+        jsonObject.put("Flag", 2);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 车辆保险信息
+     */
+    public void baseInfoVehicleInsurance(){
+        String IPCType = "baseInfoVehicleInsurance";
+        String path = url + "/baseinfo/vehicleinsurance";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("VehicleNo", "");//车辆号牌
+        jsonObject.put("InsurCom", "");//保险公司名称
+        jsonObject.put("InsurNum", "");//保险号
+        jsonObject.put("InsurType", "");//保险类型
+        jsonObject.put("InsurCount", 0);//保险金额(元)
+        jsonObject.put("InsurEff", 0);//保险生效时间YYYYMMDD
+        jsonObject.put("InsurExp", 0);//保险到期时间YYYYMMDD
+
+        jsonObject.put("Flag", 1);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 网约车车辆里程信息
+     */
+    public void baseInfoVehicleTotalMile(){
+        String IPCType = "baseInfoVehicleTotalMile";
+        String path = url + "/baseinfo/vehicletotalmile";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 450204);//注册地行政区划代码
+        jsonObject.put("VehicleNo", "");//车辆号牌
+        jsonObject.put("TotalMile", 0);//行驶总里程(km)
+
+        jsonObject.put("Flag", 1);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 驾驶员基本信息
+     */
+    public void baseInfoDriver(){
+        String IPCType = "baseInfoDriver";
+        String path = url + "/baseinfo/driver";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 450204);//注册地行政区划代码
+        jsonObject.put("DriverName", "");//机动车驾驶员姓名
+        jsonObject.put("DriverPhone", "");//驾驶员手机号
+        jsonObject.put("DriverGender", "");//驾驶员性别
+        jsonObject.put("DriverBirthday", 0);//出生日期YYYYMMDD
+        jsonObject.put("DriverNationality", "");//国籍
+        jsonObject.put("DriverNation", "");//驾驶员民族
+        jsonObject.put("DriverMaritalStatus", "");//驾驶员婚姻状况(未婚,已婚,离异)
+        jsonObject.put("DriverLanguageLevel", "");//驾驶员外语能力
+        jsonObject.put("DriverEducation", "");//驾驶员学历
+        jsonObject.put("DriverCensus", "");//户口登记机关名称
+        jsonObject.put("DriverAddress", "");//户口住址或长住地址
+        jsonObject.put("DriverContactAddress", "");//驾驶员通信地址
+        jsonObject.put("PhotoId", "");//驾驶员照片文件编号
+        jsonObject.put("LicenseId", "");//机动车驾驶证号
+        jsonObject.put("LicensePhotoId", "");//机动车驾驶证扫描件文件编号
+        jsonObject.put("DriverType", "");//准驾车型
+        jsonObject.put("GetDriverLicenseDate", 0);//初次领取驾驶证日期YYYYMMDD
+        jsonObject.put("DriverLicenseOn", 0);//驾驶证有效期限起YYYYMMDD
+        jsonObject.put("DriverLicenseOff", 0);//驾驶证有效期限止YYYYMMDD
+        jsonObject.put("TaxiDriver", 0);//是否巡游出租汽车驾驶员(1:是,2:否)
+        jsonObject.put("CertificateNo", "");//网络预约出租汽车驾驶员资格证号
+        jsonObject.put("NetworkCarIssueOrganization", "");//网络预约出租汽车驾驶员证发证机构
+        jsonObject.put("NetworkCarIssueDate", 0);//资格证发证日期YYYYMMDD
+        jsonObject.put("GetNetworkCarProofDate", 0);//初次领取资格证日期YYYYMMDD
+        jsonObject.put("NetworkCarProofOn", 0);//资格证有效起始日期YYYYMMDD
+        jsonObject.put("NetworkCarProofOff", 0);//资格证有截止日期YYYYMMDD
+        jsonObject.put("RegisterDate", 0);//报备日期(驾驶员信息向服务所在地出租车行政主管部门报备日期)
+        jsonObject.put("FullTimeDriver", 0);//是否专职驾驶员(1:是,0:否)
+        jsonObject.put("InDriverBlacklist", 0);//是否在驾驶员黑名单内(1:是,0:否)
+        jsonObject.put("CommercialType", 0);//服务类型(1:网络预约出租汽车,2:巡游出租汽车,3:私人小客车合乘)
+        jsonObject.put("ContractCompany", "");//驾驶员合同签署公司
+        jsonObject.put("ContractOn", 0);//合同有效期起YYYYMMDD
+        jsonObject.put("ContractOff", 0);//合同有效期止YYYYMMDD
+        jsonObject.put("EmergencyContact", "");//紧急情况联系人
+        jsonObject.put("EmergencyContactPhone", "");//紧急情况联系人电话
+        jsonObject.put("EmergencyContactAddress", "");//紧急情况联系人通信地址
+
+        jsonObject.put("State", 0);//状态(0:有效,1:失效)
+        jsonObject.put("Flag", 1);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 网约车驾驶员培训信息
+     */
+    public void baseInfoDriverEducate(){
+        String IPCType = "baseInfoDriverEducate";
+        String path = url + "/baseinfo/drivereducate";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 450204);//注册地行政区划代码
+        jsonObject.put("LicenseId", "");//机动车驾驶证号
+        jsonObject.put("CourseName", "");//驾驶员培训课程名称
+        jsonObject.put("CourseDate", 0);//培训课程日期YYYYMMDD
+        jsonObject.put("StartTime", "");//培训开始时间
+        jsonObject.put("StopTime", "");//培训结束时间
+        jsonObject.put("Duration", 0);//培训时长
+
+        jsonObject.put("Flag", 1);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 驾驶员移动终端信息
+     */
+    public void baseInfoDriverApp(){
+        String IPCType = "baseInfoDriverApp";
+        String path = url + "/baseinfo/driverapp";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 450204);//注册地行政区划代码
+        jsonObject.put("LicenseId", "");//机动车驾驶证号
+        jsonObject.put("DriverPhone", "");//驾驶员手机号
+        jsonObject.put("NetType", 0);//手机运营商(1:中国联通,2:中国移动,3:中国电信,4:其他)
+        jsonObject.put("AppVersion", "");//使用APP版本号
+        jsonObject.put("MapType", 0);//使用地图类型(1:百度地图,2:高德地图,3:其他)
+
+        jsonObject.put("State", 0);//状态(0:有效,1:失效)
+        jsonObject.put("Flag", 1);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 驾驶员统计信息
+     */
+    public void baseInfoDriverStat(){
+        String IPCType = "baseInfoDriverStat";
+        String path = url + "/baseinfo/driverstat";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 450204);//注册地行政区划代码
+        jsonObject.put("LicenseId", "");//机动车驾驶证号
+        jsonObject.put("Cycle", 0);//统计周期(统计周期按月,内容填写统计月份YYYYMM)
+        jsonObject.put("OrderCount", 0);//完成订单次数
+        jsonObject.put("TrafficViolationCount", 0);//交通违章次数
+        jsonObject.put("ComplainedCount", 0);//被投诉次数
+
+        jsonObject.put("Flag", 1);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 乘客基本信息
+     */
+    public void baseInfoPassenger(){
+        String IPCType = "baseInfoPassenger";
+        String path = url + "/baseinfo/passenger";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("RegisterDate", 0);//注册日期YYYYMMDD
+        jsonObject.put("PassengerPhone", "");//乘客手机号
+        jsonObject.put("PassengerName", "");//乘客称谓
+        jsonObject.put("PassengerGender", "");//乘客性别
+
+        jsonObject.put("State", 0);//状态(0:有效,1:失效)
+        jsonObject.put("Flag", 1);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", Long.valueOf(sdf.format(new Date())));
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 订单发起接口
+     */
+    public void orderCreate(){
+        String IPCType = "orderCreate";
+        String path = url + "/order/create";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 0);//发起第行政区划代码
+        jsonObject.put("OrderId", "");//订单编号
+        jsonObject.put("DepartTime", 0);//预计用车时间YYYYMMDDhhmmss
+        jsonObject.put("OrderTime", 0);//订单发起时间YYYYMMDDhhmmss
+        jsonObject.put("PassengerNote", "");//乘客备注
+        jsonObject.put("Departure", "");//预计出发地点详细地址
+        jsonObject.put("DepLongitude", 0);//预计出发地点经度
+        jsonObject.put("DepLatitude", 0);//预计出发地点纬度
+        jsonObject.put("Destination", "");//预计目的地
+        jsonObject.put("DestLongitude", 0);//预计目的地经度
+        jsonObject.put("DestLatitude", 0);//预计目的地纬度
+        jsonObject.put("Encrypt", 0);//坐标加密标识(1:GCJ-02测绘局标准,2:WGS84 GPS标准,3:BD-09百度标准,4:CGCS2000北斗标准,0:其他)
+        jsonObject.put("FareType", "");//运价类型编码
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 订单成功接口
+     */
+    public void orderMatch(){
+        String IPCType = "orderMatch";
+        String path = url + "/order/match";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 0);//发起第行政区划代码
+        jsonObject.put("OrderId", "");//订单编号
+        jsonObject.put("Longitude", 0);//车辆经度
+        jsonObject.put("Latitude", 0);//车辆纬度
+        jsonObject.put("Encrypt", 0);//坐标加密标识(1:GCJ-02测绘局标准,2:WGS84 GPS标准,3:BD-09百度标准,4:CGCS2000北斗标准,0:其他)
+        jsonObject.put("LicenseId", "");//机动车驾驶证编号
+        jsonObject.put("DriverPhone", "");//驾驶员手机号
+        jsonObject.put("VehicleNo", "");//车辆号牌
+        jsonObject.put("DistributeTime", 0);//派单成功时间YYYYMMDDhhmmss
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 订单撤销接口
+     */
+    public void orderCancel(){
+        String IPCType = "orderCancel";
+        String path = url + "/order/cancel";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 0);//上车地点行政区划代码
+        jsonObject.put("OrderId", "");//订单编号
+        jsonObject.put("OrderTime", 0);//订单时间YYYYMMDDhhmmss
+        jsonObject.put("CancelTime", 0);//订单撤销时间YYYYMMDDhhmmss
+        jsonObject.put("Operator", "");//撤销发起方(1:乘客,2:驾驶员,3:平台公司)
+        jsonObject.put("CancelTypeCode", "");//机动车驾驶证编号
+        jsonObject.put("DriverPhone", "");//撤销类型代码(1:乘客提前撤销,2:驾驶员提前撤销,3:平台公司撤销,4:乘客违约撤销,5:驾驶员违约撤销)
+        jsonObject.put("CancelReason", "");//撤销或违约原因
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 车辆经营上线接口
+     */
+    public void operateLogin(){
+        String IPCType = "operateLogin";
+        String path = url + "/operate/login";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("LicenseId", "");//机动车驾驶证号
+        jsonObject.put("VehicleNo", "");//车辆号牌
+        jsonObject.put("LoginTime", 0);//车辆经营上线时间YYYYMMDDhhmmss
+        jsonObject.put("Longitude", 0);//上线经度
+        jsonObject.put("Latitude", 0);//上线纬度
+        jsonObject.put("Encrypt", 0);//坐标加密标识(1:GCJ-02测绘局标准,2:WGS84 GPS标准,3:BD-09百度标准,4:CGCS2000北斗标准,0:其他)
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 车辆经营下线接口
+     */
+    public void operateLogout(){
+        String IPCType = "operateLogout";
+        String path = url + "/operate/logout";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("LicenseId", "");//机动车驾驶证号
+        jsonObject.put("VehicleNo", "");//车辆号牌
+        jsonObject.put("LoginTime", 0);//车辆经营下线时间YYYYMMDDhhmmss
+        jsonObject.put("Longitude", 0);//下线经度
+        jsonObject.put("Latitude", 0);//下线纬度
+        jsonObject.put("Encrypt", 0);//坐标加密标识(1:GCJ-02测绘局标准,2:WGS84 GPS标准,3:BD-09百度标准,4:CGCS2000北斗标准,0:其他)
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 经营出发接口
+     */
+    public void operateDepart(){
+        String IPCType = "operateDepart";
+        String path = url + "/operate/depart";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("OrderId", "");//订单号
+        jsonObject.put("LicenseId", "");//机动车驾驶证号
+        jsonObject.put("FareType", "");//运价类型编码
+        jsonObject.put("VehicleNo", "");//车辆号牌
+        jsonObject.put("DepLongitude", 0);//车辆出发经度
+        jsonObject.put("DepLatitude", 0);//车辆出发纬度
+        jsonObject.put("Encrypt", 0);//坐标加密标识(1:GCJ-02测绘局标准,2:WGS84 GPS标准,3:BD-09百度标准,4:CGCS2000北斗标准,0:其他)
+        jsonObject.put("DepTime", 0);//上车时间YYYYMMDDhhmmss
+        jsonObject.put("WaitMile", 0);//空驶里程(km)
+        jsonObject.put("WaitTime", 0);//等待时间(秒)
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 经营到达接口
+     */
+    public void operateArrive(){
+        String IPCType = "operateArrive";
+        String path = url + "/operate/arrive";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("OrderId", "");//订单号
+        jsonObject.put("DestLongitude", 0);//车辆到达经度
+        jsonObject.put("DestLatitude", 0);//车辆到达纬度
+        jsonObject.put("Encrypt", 0);//坐标加密标识(1:GCJ-02测绘局标准,2:WGS84 GPS标准,3:BD-09百度标准,4:CGCS2000北斗标准,0:其他)
+        jsonObject.put("DestTime", 0);//下车时间YYYYMMDDhhmmss
+        jsonObject.put("DriveMile", 0);//载客里程(km)
+        jsonObject.put("DriveTime", 0);//载客时间(秒)
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 经营支付接口
+     */
+    public void operatePay(){
+        String IPCType = "operatePay";
+        String path = url + "/operate/pay";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("OrderId", "");//订单号
+        jsonObject.put("OnArea", 0);//上车位置行政区划代码
+        jsonObject.put("DriverName", "");//机动车驾驶员
+        jsonObject.put("LicenseId", "");//机动车驾驶证号
+        jsonObject.put("FareType", "");//运价类型编码(由网约车公司定义,与运价信息接口保持一街)
+        jsonObject.put("VehicleNo", "");//车辆号牌
+        jsonObject.put("BookDepTime", 0);//预计上车时间YYYYMMDDhhmmss
+        jsonObject.put("WaitTime", 0);//等待时间(秒)
+        jsonObject.put("DepLongitude", 0);//车辆出发经度
+        jsonObject.put("DepLatitude", 0);//车辆出发纬度
+        jsonObject.put("DepArea", "");//上车点
+        jsonObject.put("DepTime", 0);//上车时间YYYYMMDDhhmmss
+        jsonObject.put("DestLongitude", 0);//车辆到达经度
+        jsonObject.put("DestLatitude", 0);//车辆到达纬度
+        jsonObject.put("DestArea", "");//下车地点
+        jsonObject.put("DestTime", 0);//下车时间YYYYMMDDhhmmss
+        jsonObject.put("BookModel", "");//预定车型
+        jsonObject.put("DriveMile", 0);//载客里程(km)
+        jsonObject.put("DriveTime", 0);//载客时间(秒)
+        jsonObject.put("WaitMile", 0);//空驶里程(km)
+        jsonObject.put("FactPrice", 0);//实收金额(元)
+        jsonObject.put("Price", 0);//应收金额(元)
+        jsonObject.put("CashPrice", 0);//现金支付金额(元)
+        jsonObject.put("LineName", "");//电子支付机构
+        jsonObject.put("LinePrice", 0);//电子支付金额(元)
+        jsonObject.put("PosName", "");//POS机支付机构
+        jsonObject.put("PosPrice", 0);//POS机支付金额(元)
+        jsonObject.put("BenfitPrice", 0);//优惠金额(元)
+        jsonObject.put("BookTip", 0);//预约服务费(元)
+        jsonObject.put("PassengerTip", 0);//附加费(元)
+        jsonObject.put("PeakUpPrice", 0);//高峰时段时间加价金额(元)
+        jsonObject.put("NightUpPrice", 0);//夜间时段里程加价金额(元)
+        jsonObject.put("FarUpPrice", 0);//远途加价金额(元)
+        jsonObject.put("OtherUpPrice", 0);//其他加价金额(元)
+        jsonObject.put("PayState", "");//结算状态(0:未结算,1:已结算,2:未知)
+        jsonObject.put("PayTime", 0);//乘客结算时间YYYYMMDDhhmmss
+        jsonObject.put("OrderMatchTime", 0);//订单完成时间YYYYMMDDhhmmss
+        jsonObject.put("InvoiceStatus", "");//发票状态(0:未开票,1:已开票,2:未知)
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 驾驶员定位信息
+     */
+    public void positionDriver(){
+        String IPCType = "positionDriver";
+        String path = url + "/position/driver";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("LicenseId", "");//机动车驾驶证号
+        jsonObject.put("DriverRegionCode", 0);//行政区划代码
+        jsonObject.put("VehicleNo", "");//车辆号牌
+        jsonObject.put("PositionTime", 0);//定位时间(时间戳)
+        jsonObject.put("Longitude", 0);//经度
+        jsonObject.put("Latitude", 0);//纬度
+        jsonObject.put("Encrypt", 0);//坐标加密标识(1:GCJ-02测绘局标准,2:WGS84 GPS标准,3:BD-09百度标准,4:CGCS2000北斗标准,0:其他)
+        jsonObject.put("Direction", 0);//方向角
+        jsonObject.put("Elevation", 0);//海拔高度
+        jsonObject.put("Speed", 0);//瞬时速度(km/h)
+        jsonObject.put("BizStatus", 0);//营运状态(1:载客,2:接单,3:空驶,4:停运)
+        jsonObject.put("OrderId", "");//订单编号
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 车辆定位信息
+     */
+    public void positionVehicle(){
+        String IPCType = "positionVehicle";
+        String path = url + "/position/vehicle";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("VehicleNo", "");//车辆号牌
+        jsonObject.put("VehicleRegionCode", 0);//行政区划代码
+        jsonObject.put("PositionTime", 0);//定位时间(时间戳)
+        jsonObject.put("Longitude", 0);//经度
+        jsonObject.put("Latitude", 0);//纬度
+        jsonObject.put("Speed", 0);//瞬时速度(km/h)
+        jsonObject.put("Direction", 0);//方向角
+        jsonObject.put("Elevation", 0);//海拔高度
+        jsonObject.put("Mileage", 0);//行驶里程(KM)
+        jsonObject.put("Encrypt", 0);//坐标加密标识(1:GCJ-02测绘局标准,2:WGS84 GPS标准,3:BD-09百度标准,4:CGCS2000北斗标准,0:其他)
+        jsonObject.put("WarnStatus", 0);//预警状态
+        jsonObject.put("VehStatus", 0);//车辆状态
+        jsonObject.put("BizStatus", 0);//营运状态(1:载客,2:接单,3:空驶,4:停运)
+        jsonObject.put("OrderId", "");//订单编号(非营运状态下填"0")
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 乘客评价信息
+     */
+    public void ratedPassenger(){
+        String IPCType = "ratedPassenger";
+        String path = url + "/rated/passenger";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("OrderId", "");//订单号
+        jsonObject.put("EvaluateTime", 0);//评价时间YYYYMMDDhhmms
+        jsonObject.put("ServiceScore", 0);//服务满意度(五分制)
+        jsonObject.put("DriverScore", 0);//驾驶员满意度(五分制)
+        jsonObject.put("VehicleScore", 0);//车辆满意度(五分制)
+        jsonObject.put("Detail", "");//评价内容
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 乘客投诉信息
+     */
+    public void ratedPassengerComplaint(){
+        String IPCType = "ratedPassengerComplaint";
+        String path = url + "/rated/passengercomplaint";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("OrderId", "");//订单号
+        jsonObject.put("ComplaintTime", 0);//投诉时间YYYYMMDDhhmms
+        jsonObject.put("Detail", "");//投诉内容
+        jsonObject.put("Result", "");//处理结果
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+    /**
+     * 驾驶员处罚信息
+     */
+    public void ratedDriverPunish(){
+        String IPCType = "ratedDriverPunish";
+        String path = url + "/rated/driverpunish";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("LicenseId", "");//机动车驾驶证编号
+        jsonObject.put("PunishTime", 0);//处罚时间YYYYMMDDhhmms
+        jsonObject.put("PunishReason", "");//处罚原因
+        jsonObject.put("PunishReault", "");//处罚结果
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 驾驶员信誉信息
+     */
+    public void ratedDriver(){
+        String IPCType = "ratedDriver";
+        String path = url + "/rated/driver";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("LicenseId", "");//机动车驾驶证编号
+        jsonObject.put("Level", 0);//服务质量信誉等级(五分制)
+        jsonObject.put("TestDate", 0);//服务质量信誉考核日期YYYYMMDD
+        jsonObject.put("TestDepartment", "");//服务质量信誉考核机构
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 私人小客车合乘信息服务平台基本信息
+     */
+    public void shareCompany(){
+        String IPCType = "shareCompany";
+        String path = url + "/share/company";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("CompanyName", "");//公司名称
+        jsonObject.put("Identifier", "");//统一社会信用代码
+        jsonObject.put("Address", 0);//注册地行政区划代码
+        jsonObject.put("ContactAddress", "");//通信地址
+        jsonObject.put("EconomicType", "");//经营业户经济类型
+        jsonObject.put("LegalName", "");//法人代表姓名(按照营业执照填写)
+        jsonObject.put("LegalPhone", "");//法人代表电话
+        jsonObject.put("State", 0);//状态(0:有效,1:失效)
+        jsonObject.put("Flag", 1);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", 1);//更新时间YYYYMMDDhhmmss
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+    /**
+     * 私人小客车合乘驾驶员行程发布接口
+     */
+    public void shareRoute(){
+        String IPCType = "shareRoute";
+        String path = url + "/share/route";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 0);//行政区划代码
+        jsonObject.put("RouteId", "");//驾驶员发起行程编号
+        jsonObject.put("DriverName", "");//驾驶员姓名
+        jsonObject.put("DriverPhone", "");//驾驶员手机号
+        jsonObject.put("LicenseId", "");//机动车驾驶证号
+        jsonObject.put("VehicleNo", "");//车辆号牌
+        jsonObject.put("Departure", "");//行程出发地点
+        jsonObject.put("DepLongitude", 0);//车辆出发经度
+        jsonObject.put("DepLatitude", 0);//车辆出发纬度
+        jsonObject.put("Destination", "");//行程到达地点
+        jsonObject.put("DestLongitude", 0);//到达地经度
+        jsonObject.put("DestLatitude", 0);//到达纬度
+        jsonObject.put("Encrypt", 0);//坐标加密标识(1:GCJ-02测绘局标准,2:WGS84 GPS标准,3:BD-09百度标准,4:CGCS2000北斗标准,0:其他)
+        jsonObject.put("RouteCreateTime", 0);//行程发布时间YYYYMMDDhhmmss
+        jsonObject.put("RouteMile", 0);//行程预计里程(km)
+        jsonObject.put("RouteNote", "");//行程备注
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 此人小客车合乘订单接口
+     */
+    public void shareOrder(){
+        String IPCType = "shareOrder";
+        String path = url + "/share/order";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 0);//行政区划代码
+        jsonObject.put("RouteId", "");//驾驶员发起行程编号
+        jsonObject.put("OrderId", "");//乘客合乘订单号
+        jsonObject.put("BookDepartTime", 0);//预计上车时间YYYYMMDDhhmmss
+        jsonObject.put("Departure", "");//预计上车地点
+        jsonObject.put("DepLongitude", 0);//预计上车地点经度
+        jsonObject.put("DepLatitude", 0);//预计上车地点纬度
+        jsonObject.put("Destination", "");//预计下车地点
+        jsonObject.put("DestLongitude", 0);//预计下车地点经度
+        jsonObject.put("DestLatitude", 0);//预计下车地点纬度
+        jsonObject.put("Encrypt", 0);//坐标加密标识(1:GCJ-02测绘局标准,2:WGS84 GPS标准,3:BD-09百度标准,4:CGCS2000北斗标准,0:其他)
+        jsonObject.put("OrderEnsureTime", 0);//订单确认时间YYYYMMDDhhmmss
+        jsonObject.put("PassengerNum", 0);//乘客人数
+        jsonObject.put("PassengerNote", "");//乘客备注
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+
+
+    /**
+     * 私人小客车合乘订单支付接口
+     */
+    public void sharePay(){
+        String IPCType = "sharePay";
+        String path = url + "/share/pay";
+        Map<String, Object> data = new HashMap<>();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("CompanyId", CompanyId);
+        jsonObject.put("Address", 0);//行政区划代码
+        jsonObject.put("RouteId", "");//驾驶员发起行程编号
+        jsonObject.put("OrderId", "");//乘客合乘订单号
+        jsonObject.put("DriverPhone", "");//驾驶员手机号
+        jsonObject.put("LicenseId", "");//机动车驾驶证号
+        jsonObject.put("VehicleNo", "");//车辆号牌
+        jsonObject.put("FareType", "");//运价类型编码
+        jsonObject.put("BookDepartTime", 0);//预计上车时间YYYYMMDDhhmmss
+        jsonObject.put("DepartTime", 0);//实际上车时间YYYYMMDDhhmmss
+        jsonObject.put("Departure", "");//上车地点
+        jsonObject.put("DepLongitude", 0);//上车地点经度
+        jsonObject.put("DepLatitude", 0);//上车地点纬度
+        jsonObject.put("DestTime", 0);//下车时间YYYYMMDDhhmmss
+        jsonObject.put("Destination", "");//下车地点
+        jsonObject.put("DestLongitude", 0);//下车地点经度
+        jsonObject.put("DestLatitude", "");//下车地点纬度
+        jsonObject.put("Encrypt", 0);//坐标加密标识(1:GCJ-02测绘局标准,2:WGS84 GPS标准,3:BD-09百度标准,4:CGCS2000北斗标准,0:其他)
+        jsonObject.put("DriveMile", 0);//载客里程(km)
+        jsonObject.put("DriveTime", 0);//载客时间(秒)
+        jsonObject.put("FactPrice", 0);//实收金额(元)
+        jsonObject.put("Price", 0);//应收金额(元)
+        jsonObject.put("CashPrice", 0);//现金支付金额(元)
+        jsonObject.put("LineName", "");//电子支付机构
+        jsonObject.put("LinePrice", 0);//电子支付金额(元)
+        jsonObject.put("BenfitPrice", 0);//优惠金额(元)
+        jsonObject.put("ShareFuelFee", 0);//燃料成本分摊金额(元)
+        jsonObject.put("ShareHighwayToll", 0);//路桥通行分摊金额(元)
+        jsonObject.put("PassengerTip", 0);//附加费(元)
+        jsonObject.put("ShareOther", 0);//其他费用分摊金额(元)
+        jsonObject.put("PayState", 0);//结算状态(0:未结算,1:已结算,2:未知)
+        jsonObject.put("PassengerNum", 0);//乘客人数(元)
+        jsonObject.put("PayTime", 0);//乘客结算时间YYYYMMDDhhmmss
+        jsonObject.put("OrderMatchTime", 0);//订单完成时间YYYYMMDDhhmmss
+
+        data.put("CompanyId", CompanyId);
+        data.put("Source", Source);
+        data.put("IPCType", IPCType);
+        data.put("baseInfoCompany", jsonObject);
+        String s = httpClientUtil.pushHttpRequset("POST", path, data, null, "json");
+        System.err.println(s);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MsgUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MsgUtil.java
new file mode 100644
index 0000000..48722a2
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MsgUtil.java
@@ -0,0 +1,39 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.alibaba.fastjson.JSON;
+
+public class MsgUtil {
+    public static String Send_Post(String phone, String code){
+        String url = "https://api.028lk.com/Sms/Api/Send";
+        SendRequestDto requestDto = new SendRequestDto();
+        requestDto.SecretName="SCSK00001826";
+        requestDto.SecretKey="erxbcn@@839";
+        requestDto.Mobile=phone;
+        requestDto.Content="您的验证码是"+code+",有效时间1分钟,请勿转发!";
+//        requestDto.TemplateId="9541";
+//        requestDto.ExtCode="扩展号";
+//        requestDto.SignName="咸宁95128";
+//        requestDto.Timing="定时时间";
+//        requestDto.CustomId="自定义ID";
+        String data = JSON.toJSONString(requestDto);
+        System.err.println("===="+data);
+        return  HttpTool.doPost(url,data);
+    }
+
+    public static String SendDriverPost(String phone,String num,String name,String driverPhone){
+        String url = "https://api.028lk.com/Sms/Api/Send";
+        SendRequestDto requestDto = new SendRequestDto();
+        requestDto.SecretName="SCSK00001826";
+        requestDto.SecretKey="erxbcn@@839";
+        requestDto.Mobile=phone;
+        requestDto.Content="您的订单已被司机"+name+"接单,联系电话"+driverPhone+"。车牌号"+num+"请耐心等待。";
+//        requestDto.TemplateId="9541";
+//        requestDto.ExtCode="扩展号";
+//        requestDto.SignName="咸宁95128";
+//        requestDto.Timing="定时时间";
+//        requestDto.CustomId="自定义ID";
+        String data = JSON.toJSONString(requestDto);
+        System.err.println("===="+data);
+        return  HttpTool.doPost(url,data);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/OssUploadUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/OssUploadUtil.java
new file mode 100644
index 0000000..84cddf2
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/OssUploadUtil.java
@@ -0,0 +1,39 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.aliyun.oss.OSSClient;
+import com.aliyun.oss.model.ObjectMetadata;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.UUID;
+
+public class OssUploadUtil {
+	//OSS图片访问域名
+	public static String oss_domain = "https://jiayixing-bucket.oss-cn-beijing.aliyuncs.com/";
+	public static String accessKeyId = "LTAI5tE2Z7nA1rbtzZYMSPqR";
+	public static String accessKeySecret = "HOGUqx1t4UWh8KepXJf69dlKj4tTBs";
+	public static String bucketName="jiayixing-bucket";
+	public static String endpoint = "oss-cn-beijing.aliyuncs.com";
+	
+	public static OSSClient ossClient = new OSSClient(endpoint, accessKeyId,accessKeySecret);
+
+	public static String ossUpload( MultipartFile file) throws IOException{
+		//CommonsMultipartFile file = (CommonsMultipartFile)multipartFile;
+		String fileName = "";
+		if(file!=null && !"".equals(file.getOriginalFilename()) && file.getOriginalFilename()!=null){
+			InputStream content = file.getInputStream();//获得指定文件的输入流
+			ObjectMetadata meta = new ObjectMetadata();// 创建上传Object的Metadata
+			meta.setContentLength(file.getSize());  // 必须设置ContentLength
+			String originalFilename = file.getOriginalFilename();
+			fileName =  UUID.randomUUID().toString().replaceAll("-","") + originalFilename.subSequence(originalFilename.lastIndexOf("."), originalFilename.length());
+			ossClient.putObject(bucketName,"img/"+fileName,content,meta);// 上传Object.
+			if(fileName != null && !"".equals(fileName)){
+				System.out.println(fileName);
+				fileName = oss_domain+"img/"+fileName;
+			}
+		}
+		return fileName;
+	}
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java
new file mode 100644
index 0000000..093b38d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java
@@ -0,0 +1,809 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.domain.AlipayTradeAppPayModel;
+import com.alipay.api.internal.util.AlipaySignature;
+import com.alipay.api.request.AlipayTradeAppPayRequest;
+import com.alipay.api.request.AlipayTradePrecreateRequest;
+import com.alipay.api.request.AlipayTradeQueryRequest;
+import com.alipay.api.request.AlipayTradeRefundRequest;
+import com.alipay.api.response.AlipayTradeAppPayResponse;
+import com.alipay.api.response.AlipayTradePrecreateResponse;
+import com.alipay.api.response.AlipayTradeQueryResponse;
+import com.alipay.api.response.AlipayTradeRefundResponse;
+import org.apache.commons.collections.map.HashedMap;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.SecretKeySpec;
+import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+import java.math.BigDecimal;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.Security;
+import java.util.*;
+
+/**
+ * 第三方支付工具类
+ */
+@Component
+public class PayMoneyUtil {
+
+    @Value("${alipay.appid}")
+    private String aliAppid;//支付宝appid
+
+    @Value("${alipay.appPrivateKey}")
+    private String appPrivateKey;//支付宝开发者应用私钥
+
+    @Value("${alipay.alipayPublicKey}")
+    private String alipayPublicKey;//支付宝应用公钥
+
+    @Value("${alipay.alipay_public_key}")
+    private String alipay_public_key;//支付宝支付公钥
+
+    @Value("${wx.appid}")
+    private String appid;//微信appid
+
+    @Value("${wx.mchId}")
+    private String mchId;//微信商户号
+
+    @Value("${wx.key}")
+    private String key;//微信商户号
+
+    @Value("${callbackPath}")
+    private String callbackPath;//支付回调网关地址
+
+    @Autowired
+    private HttpClientUtil httpClientUtil;
+
+    private Map<String, JSONObject> order = new HashMap<>();//存储支付订单用于主动查询支付结果
+
+
+    /**
+     * 支付宝支付
+     */
+    public ResultUtil alipay(String body, String subject, String outTradeNo, String amount, String notifyUrl){
+        //实例化客户端
+        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipayPublicKey, "RSA2");
+        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
+        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
+        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
+        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
+        model.setBody(body);//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
+        model.setSubject(subject);//商品的标题/交易标题/订单标题/订单关键字等。
+        model.setOutTradeNo(outTradeNo);//商户网站唯一订单号
+        model.setTimeoutExpress("30m");
+        model.setTotalAmount(amount);//付款金额
+        model.setProductCode("QUICK_MSECURITY_PAY");
+        request.setBizModel(model);
+        request.setNotifyUrl(callbackPath + notifyUrl);
+        try {
+            //这里和普通的接口调用不同,使用的是sdkExecute
+            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
+            Map<String, String> map = new HashMap<>();
+            map.put("orderString", response.getBody());
+            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
+            return ResultUtil.success(map);
+        } catch (AlipayApiException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * 支付宝扫码支付下单
+     * @param body
+     * @param subject
+     * @param outTradeNo
+     * @param amount
+     * @param notifyUrl
+     * @return
+     */
+    public ResultUtil aliScanCodePay(String body, String subject, String outTradeNo, String amount, String notifyUrl){
+        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2"); //获得初始化的AlipayClient
+        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类
+        request.setBizContent("{" +
+                "    \"out_trade_no\":\"" + outTradeNo + "\"," +//商户订单号
+                "    \"total_amount\":\"" + 1 + "\"," +
+                "    \"subject\":\"" + subject + "\"," +
+                "    \"notify_url\":\"" + callbackPath + notifyUrl + "\"," +
+                "    \"body\":\"" + body + "\"," +
+                "    \"store_id\":\"NJ_001\"," +
+                "    \"timeout_express\":\"90m\"}");//订单允许的最晚付款时间
+        AlipayTradePrecreateResponse response = null;
+        try {
+            response = alipayClient.execute(request);
+        } catch (AlipayApiException e) {
+            e.printStackTrace();
+        }
+        JSONObject alipay_trade_precreate_response = JSON.parseObject(response.getBody()).getJSONObject("alipay_trade_precreate_response");
+
+        System.err.print(alipay_trade_precreate_response.getString("qr_code"));
+        return ResultUtil.success(alipay_trade_precreate_response.getString("qr_code"));
+    }
+
+
+    /**
+     * 支付成功后的回调处理逻辑
+     * @param request
+     */
+    public Map<String, String> alipayCallback(HttpServletRequest request){
+        //获取支付宝POST过来反馈信息
+        Map<String,String> params = new HashMap<String,String>();
+        Map requestParams = request.getParameterMap();
+        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
+            String name = (String) iter.next();
+            String[] values = (String[]) requestParams.get(name);
+            String valueStr = "";
+            for (int i = 0; i < values.length; i++) {
+                valueStr = (i == values.length - 1) ? valueStr + values[i]
+                        : valueStr + values[i] + ",";
+            }
+            //乱码解决,这段代码在出现乱码时使用。
+            //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
+            params.put(name, valueStr);
+        }
+        //切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
+        //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
+        try {
+            boolean flag = AlipaySignature.rsaCheckV1(params, alipayPublicKey, "UTF-8","RSA2");
+            if(flag){
+                Map<String, String> map = new HashMap<>();
+                String out_trade_no = params.get("out_trade_no");
+                String subject = params.get("subject");
+                String total_amount = params.get("total_amount");
+                String trade_no = params.get("trade_no");
+                map.put("out_trade_no", out_trade_no);//商家订单号
+                map.put("subject", subject);
+                map.put("total_amount", total_amount);
+                map.put("trade_no", trade_no);//支付宝交易号
+                return map;
+            }
+
+        } catch (AlipayApiException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * 支付宝查询订单支付状态
+     * @param out_trade_no
+     * @return
+     * @throws Exception
+     */
+    public ResultUtil queryALIOrder(String out_trade_no) throws Exception{
+        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",aliAppid, appPrivateKey,"json","UTF-8", alipay_public_key,"RSA2");
+        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
+        request.setBizContent("{" +
+                "\"out_trade_no\":" + out_trade_no +
+                "  }");
+        AlipayTradeQueryResponse response = alipayClient.execute(request);
+        if(response.isSuccess()){
+            String tradeStatus = response.getTradeStatus();//交易状态:WAIT_BUYER_PAY(交易创建,等待买家付款)、TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、TRADE_SUCCESS(交易支付成功)、TRADE_FINISHED(交易结束,不可退款)
+            return ResultUtil.success(tradeStatus);
+        } else {
+            return ResultUtil.error(response.getMsg());
+        }
+    }
+
+
+
+    /**
+     * 微信统一下单
+     * @param body          商品描述
+     * @param attach        附加数据
+     * @param out_trade_no  商户订单号
+     * @param total_fee     标价金额
+     * @param notify_url    通知地址
+     * @param tradeType     交易类型
+     * @return
+     */
+    public ResultUtil weixinpay(String body, String attach, String out_trade_no, String total_fee, String notify_url, String tradeType) throws Exception{
+        int i = new BigDecimal(total_fee).multiply(new BigDecimal("100")).intValue();
+        String hostAddress = null;
+        try {
+            hostAddress = InetAddress.getLocalHost().getHostAddress();
+        } catch (UnknownHostException e) {
+            e.printStackTrace();
+        }
+        String nonce_str = UUIDUtil.getRandomCode(16);
+        Map<String, Object> map = new HashMap<>();
+        map.put("appid", appid);
+        map.put("mch_id", mchId);
+        map.put("nonce_str", nonce_str);
+        map.put("body", body);
+        map.put("attach", attach);//存储订单id
+        map.put("out_trade_no", out_trade_no);//存储的订单code
+        map.put("total_fee", i);
+        map.put("spbill_create_ip", hostAddress);
+        map.put("notify_url", callbackPath + notify_url);
+        map.put("trade_type", tradeType);
+        String s = this.weixinSignature(map);
+        map.put("sign", s);
+
+        String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
+        //设置请求头
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_XML);
+        StringBuffer xmlString = new StringBuffer();
+        Set<String> strings = map.keySet();
+        String[] keys = {};
+        keys = strings.toArray(keys);
+        Arrays.sort(keys);
+        xmlString.append("<xml>");
+        for(int l = 0; l < keys.length; l++){
+            xmlString.append("<" + keys[l] + ">" + map.get(keys[l]) + "</" + keys[l] + ">");
+        }
+        xmlString.append("</xml>");
+
+        Map<String, String> map1 = null;
+        String body1 = httpClientUtil.pushHttpRequsetXml(url, xmlString.toString(), new HashMap<>());
+        //将结果xml解析成map
+        body1 = body1.replaceAll("<!\\[CDATA\\[","");
+        body1 = body1.replaceAll("]]>", "");
+        try {
+            map1 = this.xmlToMap(body1, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        } catch (DocumentException e) {
+            e.printStackTrace();
+        }
+        String return_code = map1.get("return_code");
+        if("SUCCESS".equals(return_code)){
+            String result_code = map1.get("result_code");
+            if("SUCCESS".equals(result_code)){
+                String type = map1.get("trade_type");
+                switch (type){
+                    case "JSAPI":
+                        break;
+                    case "NATIVE":
+                        String code_url = map1.get("code_url");
+                        return ResultUtil.success(code_url);
+                    case "APP":
+                        String prepay_id = map1.get("prepay_id");
+                        //重新进行签名后返回给前端
+                        Map<String, Object> map2 = new HashMap<>();
+                        map2.put("appid", appid);
+                        map2.put("noncestr", nonce_str);
+                        map2.put("package", "Sign=WXPay");
+                        map2.put("partnerid", mchId);
+                        map2.put("prepayid", prepay_id);
+                        map2.put("timestamp", new Date().getTime() / 1000);
+                        String s1 = this.weixinSignature(map2);
+                        map2.put("sign", s1);
+                        System.err.println(map2);
+                        return ResultUtil.success(map2);
+                }
+                return null;
+            }else{
+                System.err.println(map1.get("err_code_des"));
+                return ResultUtil.error(map1.get("err_code_des"));
+            }
+        }else{
+            System.err.println(map1.get("return_msg") + appid + "----" + mchId);
+            return ResultUtil.error(map1.get("return_msg"), new JSONObject());
+        }
+    }
+
+
+
+
+
+    /**
+     * 微信支付成功后的回调处理
+     * @param request
+     */
+    public Map<String, String> weixinpayCallback(HttpServletRequest request){
+        try {
+            String param = this.getParam(request);
+            param = param.replaceAll("<!\\[CDATA\\[","");
+            param = param.replaceAll("]]>", "");
+            Map<String, String> map = this.xmlToMap(param, "UTF-8");
+            String return_code = map.get("return_code");
+            if("SUCCESS".equals(return_code)){
+                String result_code = map.get("result_code");
+                if("SUCCESS".equals(result_code)){
+                    Map<String, String> map1 = new HashedMap();
+                    map1.put("nonce_str", map.get("nonce_str"));
+                    map1.put("out_trade_no", map.get("out_trade_no").split("_")[1]);//存储的订单code
+                    map1.put("attach", map.get("attach"));//存储订单id
+                    map1.put("total_fee", map.get("total_fee"));
+                    map1.put("transaction_id", map.get("transaction_id"));//微信支付订单号
+                    String result = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
+                    map1.put("result", result);
+                    return map1;
+                }else{
+//                    System.err.println(map.get("err_code_des"));
+                }
+            }else{
+//                System.err.println(map.get("return_msg"));
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (DocumentException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * 微信扫码收款
+     * @param body              商品描述
+     * @param attach            附加数据
+     * @param nonce_str         随机字符串
+     * @param out_trade_no      商户订单号
+     * @param total_fee         订单金额
+     * @param auth_code         授权码	扫码支付授权码,设备读取用户微信中的条码或者二维码信息(注:用户付款码条形码规则:18位纯数字,以10、11、12、13、14、15开头)
+     * @return
+     */
+    public ResultUtil wxScanQRCodePay(String body, String attach, String nonce_str, String out_trade_no, String total_fee, String auth_code){
+        int i = new BigDecimal(total_fee).multiply(new BigDecimal("100")).intValue();
+        String hostAddress = null;
+        try {
+            InetAddress address = InetAddress.getLocalHost();
+            hostAddress = address.getHostAddress();
+        } catch (UnknownHostException e) {
+            e.printStackTrace();
+        }
+        String randomCode = null;
+        try {
+            randomCode = UUIDUtil.getRandomCode(10);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        Map<String, Object> map = new HashMap<>();
+        map.put("appid", appid);
+        map.put("mch_id", mchId);
+        map.put("nonce_str", nonce_str);//存储的支付人员id,员工扫描二维码支付的时候存储的是收款员工id
+        map.put("body", body);
+        map.put("attach", attach);//存储的费用月份数据,员工扫描二维码支付的时候存储的是收费项id
+        map.put("out_trade_no", randomCode + "_" + out_trade_no);//存储的房间id
+        map.put("total_fee", i);
+        map.put("spbill_create_ip", hostAddress);
+        map.put("auth_code", auth_code);
+        String s = this.weixinSignature(map);
+        map.put("sign", s);
+
+        String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
+        //设置请求头
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_XML);
+        StringBuffer xmlString = new StringBuffer();
+        Set<String> strings = map.keySet();
+        String[] keys = {};
+        keys = strings.toArray(keys);
+        Arrays.sort(keys);
+        xmlString.append("<xml>");
+        for(int l = 0; l < keys.length; l++){
+            xmlString.append("<" + keys[l] + ">" + map.get(keys[l]) + "</" + keys[l] + ">");
+        }
+        xmlString.append("</xml>");
+
+        Map<String, String> map1 = null;
+        String body1 = httpClientUtil.pushHttpRequsetXml(url, xmlString.toString(), new HashMap<>());
+        //将结果xml解析成map
+        body1 = body1.replaceAll("<!\\[CDATA\\[","");
+        body1 = body1.replaceAll("]]>", "");
+        try {
+            map1 = this.xmlToMap(body1, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        } catch (DocumentException e) {
+            e.printStackTrace();
+        }
+        String return_code = map1.get("return_code");
+        if("SUCCESS".equals(return_code)){
+            String result_code = map1.get("result_code");
+            if("SUCCESS".equals(result_code)){
+                String type = map1.get("trade_type");
+                switch (type){
+                    case "JSAPI":
+                        break;
+                    case "NATIVE":
+                        String code_url = map1.get("code_url");
+                        return ResultUtil.success(code_url);
+                    case "APP":
+                        String prepay_id = map1.get("prepay_id");
+                        //重新进行签名后返回给前端
+                        Map<String, Object> map2 = new HashMap<>();
+                        map2.put("appid", appid);
+                        map2.put("noncestr", nonce_str);
+                        map2.put("package", "Sign=WXPay");
+                        map2.put("partnerid", mchId);
+                        map2.put("prepayid", prepay_id);
+                        map2.put("timestamp", new Date().getTime() + "");
+                        String s1 = this.weixinSignature(map2);
+
+                        map2.put("pac", "Sign=WXPay");
+                        map2.put("sign", s1);
+//                      System.err.println(map2);
+                        return ResultUtil.success(map2);
+                }
+                return null;
+            }else{
+//                System.err.println(map1.get("err_code_des"));
+                return ResultUtil.error(map1.get("err_code_des"));
+            }
+        }else{
+//            System.err.println(map1.get("return_msg") + appid + "----" + mchId);
+            return ResultUtil.error(map1.get("return_msg"), new JSONObject());
+        }
+    }
+
+
+    /**
+     * 支付宝扫码收款
+     * @param data
+     * @return
+     */
+    public Object aliScanQRCodePay(String data){
+        return null;
+    }
+
+
+    /**
+     * 微信退款申请
+     * @param transaction_id    微信订单号。微信生成的订单号,在支付通知中有返回
+     * @param out_refund_no     商户退款单号。商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。
+     * @param total_fee         订单金额。订单总金额,单位为分,只能为整数
+     * @param refund_fee        退款金额。退款总金额,订单总金额,单位为分,只能为整数
+     * @param notify_url        退款结果通知url。异步接收微信支付退款结果通知的回调地址,通知URL必须为外网可访问的url,不允许带参数 如果参数中传了notify_url,则商户平台上配置的回调地址将不会生效。
+     * @return
+     */
+    public Map<String, String> wxRefund(String transaction_id, String out_refund_no, String total_fee, String refund_fee, String notify_url){
+        int tf = new BigDecimal(total_fee).multiply(new BigDecimal("100")).intValue();
+        int rf = new BigDecimal(refund_fee).multiply(new BigDecimal("100")).intValue();
+        String nonce_str = UUIDUtil.getRandomCode();
+        Map<String, Object> map = new HashMap<>();
+        map.put("appid", appid);
+        map.put("mch_id", mchId);
+        map.put("nonce_str", nonce_str);
+        map.put("transaction_id", transaction_id);
+        map.put("out_refund_no", out_refund_no);
+        map.put("total_fee", tf);
+        map.put("refund_fee", rf);
+        map.put("notify_url", callbackPath + notify_url);
+        String s = this.weixinSignature(map);
+        map.put("sign", s);
+
+        String url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
+        //设置请求头
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_XML);
+        StringBuffer xmlString = new StringBuffer();
+        Set<String> strings = map.keySet();
+        String[] keys = {};
+        keys = strings.toArray(keys);
+        Arrays.sort(keys);
+        xmlString.append("<xml>");
+        for(int l = 0; l < keys.length; l++){
+            xmlString.append("<" + keys[l] + ">" + map.get(keys[l]) + "</" + keys[l] + ">");
+        }
+        xmlString.append("</xml>");
+
+        Map<String, String> map1 = null;
+        String body1 = httpClientUtil.pushHttpRequsetXml(url, xmlString.toString(), new HashMap<>());
+        //将结果xml解析成map
+        body1 = body1.replaceAll("<!\\[CDATA\\[","");
+        body1 = body1.replaceAll("]]>", "");
+        try {
+            map1 = this.xmlToMap(body1, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        } catch (DocumentException e) {
+            e.printStackTrace();
+        }
+        String return_code = map1.get("return_code");
+        Map<String, String> map2 = new HashMap<>();
+        if("SUCCESS".equals(return_code)){
+            String result_code = map1.get("result_code");
+            if("SUCCESS".equals(result_code)){
+                map2.put("return_code", result_code);
+                map2.put("refund_id", String.valueOf(map1.get("refund_id")));//微信退款订单号
+                map2.put("refund_fee", String.valueOf(map1.get("refund_fee")));//退款金额
+                return map2;
+            }else{
+                map2.put("return_code", result_code);
+                map2.put("return_msg", map1.get("err_code_des"));
+                return map2;
+            }
+        }else{
+            map2.put("return_code", return_code);
+            map2.put("return_msg", map1.get("return_msg"));
+            return map2;
+        }
+    }
+
+
+    /**
+     * 微信退款成功后的回调处理
+     * @param request
+     * @return
+     */
+    public Map<String, String> wxRefundCallback(HttpServletRequest request){
+        try {
+            String param = this.getParam(request);
+            param = param.replaceAll("<!\\[CDATA\\[","");
+            param = param.replaceAll("]]>", "");
+            Map<String, String> map = this.xmlToMap(param, "UTF-8");
+            String return_code = map.get("return_code");
+            if("SUCCESS".equals(return_code)){
+                String req_info = map.get("req_info");//加密信息请用商户秘钥进行解密
+                String s = this.wxDecrypt(req_info);
+                s = s.replaceAll("<!\\[CDATA\\[","");
+                s = s.replaceAll("]]>", "");
+                map = this.xmlToMap(s, "UTF-8");
+                Map<String, String> map1 = new HashMap<>();
+                map1.put("refund_id", map.get("refund_id"));
+                map1.put("out_refund_no", map.get("out_refund_no"));
+                return map1;
+            }else{
+//                System.err.println(map.get("return_msg"));
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (DocumentException e) {
+            e.printStackTrace();
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        } catch (InvalidKeyException e) {
+            e.printStackTrace();
+        } catch (NoSuchPaddingException e) {
+            e.printStackTrace();
+        } catch (BadPaddingException e) {
+            e.printStackTrace();
+        } catch (NoSuchProviderException e) {
+            e.printStackTrace();
+        } catch (IllegalBlockSizeException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * 支付宝退款
+     * @param trade_no          支付宝交易号
+     * @param refund_amount     退款金额
+     * @return
+     * @throws AlipayApiException
+     */
+    public Map<String, String> aliRefund(String trade_no, String refund_amount) throws AlipayApiException {
+        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey,"json","UTF-8", alipay_public_key,"RSA2");
+        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("trade_no", trade_no);
+        jsonObject.put("refund_amount", refund_amount);
+        request.setBizContent(jsonObject.toJSONString());
+        AlipayTradeRefundResponse response = alipayClient.execute(request);
+        Map<String, String> map = new HashMap<>();
+        if(response.isSuccess()){
+            System.out.println("调用成功");
+            String outTradeNo = response.getOutTradeNo();
+            map.put("code", response.getCode());//10000
+            map.put("trade_no", response.getTradeNo());//支付宝交易号
+            map.put("out_trade_no", outTradeNo);//商户订单号
+        } else {
+            System.out.println("调用失败");
+            map.put("code", response.getCode());
+            map.put("msg", response.getSubMsg());
+        }
+        return map;
+    }
+
+
+    /**
+     * 查询微信支付订单
+     * @return
+     * @throws Exception
+     */
+    public ResultUtil queryWXOrder() throws Exception{
+        String url = "https://api.mch.weixin.qq.com/pay/orderquery";
+        String nonce_str = UUIDUtil.getRandomCode(16);
+        Map<String, Object> map = new HashMap<>();
+        map.put("appid", appid);
+        map.put("mch_id", mchId);
+        map.put("transaction_id", nonce_str);//微信订单号
+        map.put("nonce_str", nonce_str);//随机字符串
+        String s = this.weixinSignature(map);
+        map.put("sign", s);
+
+        //设置请求头
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_XML);
+        StringBuffer xmlString = new StringBuffer();
+        Set<String> strings = map.keySet();
+        String[] keys = {};
+        keys = strings.toArray(keys);
+        Arrays.sort(keys);
+        xmlString.append("<xml>");
+        for(int l = 0; l < keys.length; l++){
+            xmlString.append("<" + keys[l] + ">" + map.get(keys[l]) + "</" + keys[l] + ">");
+        }
+        xmlString.append("</xml>");
+
+        Map<String, String> map1 = null;
+        String body1 = httpClientUtil.pushHttpRequsetXml(url, xmlString.toString(), new HashMap<>());
+        //将结果xml解析成map
+        body1 = body1.replaceAll("<!\\[CDATA\\[","");
+        body1 = body1.replaceAll("]]>", "");
+        try {
+            map1 = this.xmlToMap(body1, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        } catch (DocumentException e) {
+            e.printStackTrace();
+        }
+        String return_code = map1.get("return_code");
+        if("SUCCESS".equals(return_code)){
+            String result_code = map1.get("result_code");
+            if("SUCCESS".equals(result_code)){
+                String type = map1.get("trade_type");
+                switch (type){
+                    case "JSAPI":
+                        break;
+                    case "NATIVE":
+                        String code_url = map1.get("code_url");
+                        return ResultUtil.success(code_url);
+                    case "APP":
+                        String trade_state = map1.get("trade_state");
+                        String time_end = map1.get("time_end");
+                        Map<String, Object> map2 = new HashMap<>();
+                        map2.put("trade_state", trade_state);//订单状态SUCCESS—支付成功,REFUND—转入退款,NOTPAY—未支付,CLOSED—已关闭,REVOKED—已撤销(刷卡支付),USERPAYING--用户支付中,PAYERROR--支付失败(其他原因,如银行返回失败)
+                        map2.put("time_end", time_end);//订单支付时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。
+                        return ResultUtil.success(map2);
+                }
+                return null;
+            }else{
+                System.err.println(map1.get("err_code_des"));
+                return ResultUtil.error(map1.get("err_code_des"));
+            }
+        }else{
+            System.err.println(map1.get("return_msg") + appid + "----" + mchId);
+            return ResultUtil.error(map1.get("return_msg"), new JSONObject());
+        }
+    }
+
+
+
+    /**
+     * 获取请求内容
+     * @param request
+     * @return
+     * @throws IOException
+     */
+    private String getParam(HttpServletRequest request) throws IOException {
+        // 读取参数
+        InputStream inputStream;
+        StringBuilder sb = new StringBuilder();
+        inputStream = request.getInputStream();
+        String s;
+        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
+        while ((s = in.readLine()) != null) {
+            sb.append(s);
+        }
+        in.close();
+        inputStream.close();
+        return sb.toString();
+    }
+
+
+    /**
+     * 微信下单的签名算法
+     * @param map
+     * @return
+     */
+    private String weixinSignature(Map<String, Object> map){
+        try {
+            Set<Map.Entry<String, Object>> entries = map.entrySet();
+            List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries);
+            // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
+            Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
+                public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
+                    return (o1.getKey()).toString().compareTo(o2.getKey());
+                }
+            });
+            // 构造签名键值对的格式
+            StringBuilder sb = new StringBuilder();
+            for (Map.Entry<String, Object> item : infoIds) {
+                if (item.getKey() != null || item.getKey() != "") {
+                    String key = item.getKey();
+                    Object val = item.getValue();
+                    if (!(val == "" || val == null)) {
+                        sb.append(key + "=" + val + "&");
+                    }
+                }
+            }
+            sb.append("key=" + key);
+            String sign = MD5AndKL.MD5Encode(sb.toString(), "UTF-8").toUpperCase(); //注:MD5签名方式
+            return sign;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * 微信退款成功后的解密
+     * @param req_info
+     * @return
+     */
+    private String wxDecrypt(String req_info) throws NoSuchPaddingException, NoSuchAlgorithmException, NoSuchProviderException,
+            InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
+        byte[] decode = Base64.getDecoder().decode(req_info);
+        String sign = MD5AndKL.MD5Encode(key, "UTF-8").toLowerCase();
+        if (Security.getProvider("BC") == null){
+            Security.addProvider(new BouncyCastleProvider());
+        }
+        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
+        SecretKeySpec secretKeySpec = new SecretKeySpec(sign.getBytes(), "AES");
+        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
+        return new String(cipher.doFinal(decode));
+    }
+
+
+    public static void main(String[] ages){
+//        PayMoneyUtil payMoneyUtil = new PayMoneyUtil();
+//        payMoneyUtil.weixinpay("测试", "123", "12.5", "");
+    }
+
+
+    /**
+     * xml转map
+     * @param xml
+     * @param charset
+     * @return
+     * @throws UnsupportedEncodingException
+     * @throws DocumentException
+     */
+    public static Map<String, String> xmlToMap(String xml, String charset) throws UnsupportedEncodingException, DocumentException {
+
+        Map<String, String> respMap = new HashMap<String, String>();
+
+        SAXReader reader = new SAXReader();
+        Document doc = reader.read(new ByteArrayInputStream(xml.getBytes(charset)));
+        Element root = doc.getRootElement();
+        xmlToMap(root, respMap);
+        return respMap;
+    }
+
+    public static Map<String, String> xmlToMap(Element tmpElement, Map<String, String> respMap){
+        if (tmpElement.isTextOnly()) {
+            respMap.put(tmpElement.getName(), tmpElement.getText());
+            return respMap;
+        }
+
+        @SuppressWarnings("unchecked")
+        Iterator<Element> eItor = tmpElement.elementIterator();
+        while (eItor.hasNext()) {
+            Element element = eItor.next();
+            xmlToMap(element, respMap);
+        }
+        return respMap;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java
new file mode 100644
index 0000000..151d17a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java
@@ -0,0 +1,438 @@
+package com.stylefeng.guns.modular.system.util;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.stylefeng.guns.core.common.constant.state.Order;
+import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
+import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
+import com.stylefeng.guns.modular.system.dao.CarMapper;
+import com.stylefeng.guns.modular.system.dao.ServerCarModelMapper;
+import com.stylefeng.guns.modular.system.dao.SystemPriceMapper;
+import com.stylefeng.guns.modular.system.model.*;
+import com.stylefeng.guns.modular.system.service.*;
+import com.stylefeng.guns.modular.taxi.model.TransactionDetails;
+import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * 上传交通部
+ */
+@Component
+public class PushMinistryOfTransportUtil {
+
+    @Autowired
+    private IUserInfoService userInfoService;
+
+    @Autowired
+    private HttpClientUtil httpClientUtil;
+
+    @Autowired
+    private IOrderPrivateCarService orderPrivateCarService;
+
+    @Resource
+    private SystemPriceMapper systemPriceMapper;
+
+    @Autowired
+    private GDMapGeocodingUtil gdMapGeocodingUtil;
+
+    @Autowired
+    private IOrderCancelService orderCancelService;
+
+    @Autowired
+    private IDriverService driverService;
+
+    @Resource
+    private CarMapper carMapper;
+
+    @Resource
+    private ServerCarModelMapper serverCarModelMapper;
+
+    @Autowired
+    private ITransactionDetailsService transactionDetailsService;
+
+    @Autowired
+    private IOrderPositionService orderPositionService;
+
+    @Autowired
+    private GDMapElectricFenceUtil gdMapElectricFenceUtil;
+
+    @Autowired
+    private IOrderEvaluateService orderEvaluateService;
+
+    private String path = "http://120.77.11.218:8868/";
+
+
+    /**
+     * 乘客基本信息
+     * @param uid
+     */
+    public void baseInfoPassenger(Integer uid){
+        UserInfo userInfo = userInfoService.selectById(uid);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("RegisterDate", userInfo.getInsertTime());//注册日期YYYYMMDD
+        jsonObject.put("PassengerPhone", userInfo.getPhone());//乘客手机号
+        jsonObject.put("PassengerName", userInfo.getNickName());//乘客称谓
+        jsonObject.put("PassengerGender", userInfo.getSex() == 1 ? "男" : "女");//乘客性别
+        jsonObject.put("State", 0);//状态(0:有效,1:失效)
+        jsonObject.put("Flag", 1);//操作标识(1:新增,2:更新,3:删除)
+        jsonObject.put("UpdateTime", new Date());
+        Map<String, Object> map = new HashMap<>();
+        map.put("baseInfoPassenger", jsonObject.toJSONString());
+
+        Map<String, String> header = new HashMap<>();
+        header.put("Connection", "keep-alive");
+        header.put("Content-Type", "application/x-www-form-urlencoded");
+        header.put("Accept", "*/*");
+        header.put("Accept-Encoding", "gzip");
+        header.put("Accept-Charset", "utf-8");
+        String result = httpClientUtil.pushHttpRequset("POST", path + "ministryOfTransport/baseInfoPassenger", map, header,"form");
+        System.err.println("---------------------------乘客基本信息--------------------------:" + result);
+    }
+
+
+    /**
+     * 订单撤销接口
+     * @param orderId
+     */
+    public void orderCancel(Integer orderId){
+        OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
+        Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
+        OrderCancel query = null;
+        try {
+            query = orderCancelService.query(orderId, 1, null, null, 2);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        Map<String, String> geocode = null;
+        try {
+            geocode = gdMapGeocodingUtil.geocode(orderPrivateCar.getBoardingLon().toString(),
+                    orderPrivateCar.getBoardingLat().toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("Address", Integer.valueOf(geocode.get("districtCode")));//上车地点行政区划代码
+        jsonObject.put("OrderId", orderPrivateCar.getOrderNum());//订单编号
+        jsonObject.put("OrderTime", orderPrivateCar.getOrderNum());//订单时间YYYYMMDDhhmmss
+        jsonObject.put("CancelTime", query.getInsertTime());//订单撤销时间YYYYMMDDhhmmss
+        jsonObject.put("Operator", "1");//撤销发起方(1:乘客,2:驾驶员,3:平台公司)
+        jsonObject.put("CancelTypeCode", driver.getDriveCard());//机动车驾驶证编号
+        jsonObject.put("CancelReason", query.getReason());//撤销或违约原因
+        Map<String, Object> map = new HashMap<>();
+        map.put("orderCancel", jsonObject.toJSONString());
+
+        Map<String, String> header = new HashMap<>();
+        header.put("Connection", "keep-alive");
+        header.put("Content-Type", "application/x-www-form-urlencoded");
+        header.put("Accept", "*/*");
+        header.put("Accept-Encoding", "gzip");
+        header.put("Accept-Charset", "utf-8");
+        String result = httpClientUtil.pushHttpRequset("POST", path + "ministryOfTransport/orderCancel", map, header,"form");
+        System.err.println("----------------------------订单撤销接口------------------:" + result);
+    }
+
+
+    /**
+     * 经营支付接口
+     * @param orderId
+     */
+    public void operatePay(Integer orderId){
+        OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
+        Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
+        Map<String, Object> query = systemPriceMapper.query(orderPrivateCar.getCompanyId(), 1, orderPrivateCar.getServerCarModelId());
+        Car car = carMapper.selectById(orderPrivateCar.getCarId());
+        ServerCarModel serverCarModel = serverCarModelMapper.selectById(orderPrivateCar.getServerCarModelId());
+//        TransactionDetails transactionDetails = transactionDetailsService.selectById(new EntityWrapper<TransactionDetails>().eq("orderId", orderId).eq("orderType", 1));
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("OrderId", orderPrivateCar.getOrderNum());//订单号
+        jsonObject.put("OnArea", 450204);//上车位置行政区划代码
+        jsonObject.put("DriverName", driver.getName());//机动车驾驶员
+        jsonObject.put("LicenseId", driver.getDriveCard());//机动车驾驶证号
+        jsonObject.put("FareType", query.get("id").toString());//运价类型编码(由网约车公司定义,与运价信息接口保持一街)
+        jsonObject.put("VehicleNo", car.getCarLicensePlate());//车辆号牌
+        jsonObject.put("BookDepTime", orderPrivateCar.getTravelTime());//预计上车时间YYYYMMDDhhmmss
+        jsonObject.put("WaitTime", orderPrivateCar.getWait() * 60);//等待时间(秒)
+        jsonObject.put("DepLongitude", orderPrivateCar.getBoardingLon());//车辆出发经度
+        jsonObject.put("DepLatitude", orderPrivateCar.getBoardingLat());//车辆出发纬度
+        jsonObject.put("DepArea", orderPrivateCar.getBoardingAddress());//上车点
+        jsonObject.put("DepTime", orderPrivateCar.getBoardingTime());//上车时间YYYYMMDDhhmmss
+        jsonObject.put("DestLongitude", orderPrivateCar.getGetoffLon());//车辆到达经度
+        jsonObject.put("DestLatitude", orderPrivateCar.getGetoffLat());//车辆到达纬度
+        jsonObject.put("DestArea", orderPrivateCar.getGetoffAddress());//下车地点
+        jsonObject.put("DestTime", orderPrivateCar.getGetoffTime());//下车时间YYYYMMDDhhmmss
+        jsonObject.put("BookModel", serverCarModel.getName());//预定车型
+        jsonObject.put("Model", serverCarModel.getName());//实际使用车型
+        jsonObject.put("DriveMile", Double.valueOf(orderPrivateCar.getMileage() / 1000).intValue());//载客里程(km)
+        jsonObject.put("DriveTime", Double.valueOf((orderPrivateCar.getGetoffTime().getTime() - orderPrivateCar.getBoardingTime().getTime()) / 1000).intValue());//载客时间(秒)
+        List<OrderPosition> orderPositions = null;
+        try {
+            orderPositions = orderPositionService.queryPosition(orderId, 1);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        int distance = 0;
+        if(orderPositions.size() > 0){
+            OrderPosition orderPosition = orderPositions.get(0);
+            Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPosition.getLon() + "," + orderPosition.getLat(), orderPrivateCar.getBoardingLon() + "," + orderPrivateCar.getBoardingLat(), 1);
+            distance = Integer.valueOf(distance1.get("distance")) / 1000;
+        }
+        jsonObject.put("WaitMile", distance);//空驶里程(km)
+        jsonObject.put("FactPrice", orderPrivateCar.getPayMoney());//实收金额(元)
+        jsonObject.put("Price", orderPrivateCar.getOrderMoney());//应收金额(元)
+        jsonObject.put("CashPrice", orderPrivateCar.getPayType() == 3 ? orderPrivateCar.getPayMoney() : 0);//现金支付金额(元)
+        jsonObject.put("LineName", orderPrivateCar.getPayType() != 3 ? "" : "");//电子支付机构
+        jsonObject.put("LinePrice", orderPrivateCar.getPayType() != 3 ? orderPrivateCar.getPayMoney() : 0);//电子支付金额(元)
+        jsonObject.put("PosName", "");//POS机支付机构
+        jsonObject.put("PosPrice", 0);//POS机支付金额(元)
+        jsonObject.put("BenfitPrice", (orderPrivateCar.getRedPacketMoney() == null ? 0 : orderPrivateCar.getRedPacketMoney())
+                + (orderPrivateCar.getCouponMoney() == null ? 0 : orderPrivateCar.getCouponMoney())
+                + (orderPrivateCar.getDurationMoney() == null ? 0 : orderPrivateCar.getDurationMoney()));//优惠金额(元)
+        jsonObject.put("BookTip", 0);//预约服务费(元)
+        jsonObject.put("PassengerTip", (orderPrivateCar.getParkMoney() == null ? 0 : orderPrivateCar.getParkMoney())
+                + (orderPrivateCar.getRoadTollMoney() == null ? 0 : orderPrivateCar.getRoadTollMoney()));//附加费(元)
+        Map<String, Double> map1 = this.setMoney(orderPrivateCar);
+        Double amount3 = map1.get("amount3");//其他时间段
+        Double amount2 = map1.get("amount2");//高峰时段
+        Double amount1 = map1.get("amount1");//夜间时段
+        jsonObject.put("PeakUpPrice", null != amount2 ? (amount2 - amount3) : 0);//高峰时段时间加价金额(元)
+        jsonObject.put("NightUpPrice", null != amount1 ? (amount1 - amount3) : 0);//夜间时段里程加价金额(元)
+        jsonObject.put("FarUpPrice", orderPrivateCar.getLongDistanceMoney() == null ? 0 : orderPrivateCar.getLongDistanceMoney());//远途加价金额(元)
+        jsonObject.put("OtherUpPrice", (orderPrivateCar.getDurationMoney() == null ? 0 : orderPrivateCar.getDurationMoney())
+                + (orderPrivateCar.getWaitMoney() == null ? 0 : orderPrivateCar.getWaitMoney()));//其他加价金额(元)
+        jsonObject.put("PayState", 1);//结算状态(0:未结算,1:已结算,2:未知)
+        jsonObject.put("PayTime", new Date());//乘客结算时间YYYYMMDDhhmmss
+        jsonObject.put("OrderMatchTime", new Date());//订单完成时间YYYYMMDDhhmmss
+        jsonObject.put("InvoiceStatus", "0");//发票状态(0:未开票,1:已开票,2:未知)
+        Map<String, Object> map = new HashMap<>();
+        map.put("operatePay", jsonObject.toJSONString());
+
+        Map<String, String> header = new HashMap<>();
+        header.put("Connection", "keep-alive");
+        header.put("Content-Type", "application/x-www-form-urlencoded");
+        header.put("Accept", "*/*");
+        header.put("Accept-Encoding", "gzip");
+        header.put("Accept-Charset", "utf-8");
+        String result = httpClientUtil.pushHttpRequset("POST", path + "ministryOfTransport/operatePay", map, header,"form");
+        System.err.println("------------------------经营支付接口----------------------:" + result);
+    }
+
+
+    /**
+     * 乘客评价信息
+     * @param id
+     */
+    public void ratedPassenger(Integer id){
+        OrderEvaluate orderEvaluate = orderEvaluateService.selectById(id);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("OrderId", orderEvaluate.getOrderId());//订单号
+        jsonObject.put("EvaluateTime", new Date());//评价时间YYYYMMDDhhmms
+        jsonObject.put("ServiceScore", orderEvaluate.getFraction());//服务满意度(五分制)
+        jsonObject.put("DriverScore", orderEvaluate.getFraction());//驾驶员满意度(五分制)
+        jsonObject.put("VehicleScore", orderEvaluate.getFraction());//车辆满意度(五分制)
+        jsonObject.put("Detail", orderEvaluate.getContent());//评价内容
+        Map<String, Object> map = new HashMap<>();
+        map.put("ratedPassenger", jsonObject.toJSONString());
+
+        Map<String, String> header = new HashMap<>();
+        header.put("Connection", "keep-alive");
+        header.put("Content-Type", "application/x-www-form-urlencoded");
+        header.put("Accept", "*/*");
+        header.put("Accept-Encoding", "gzip");
+        header.put("Accept-Charset", "utf-8");
+        String result = httpClientUtil.pushHttpRequset("POST", path + "ministryOfTransport/ratedPassenger", map, header,"form");
+        System.err.println("-----------------------------乘客评价信息----------------------:" + result);
+    }
+
+
+
+    /**
+     * 驾驶员信誉信息
+     * @param driverId
+     */
+    public void ratedDriver(Integer driverId){
+        Driver driver = driverService.selectById(driverId);
+        List<OrderEvaluate> driverId1 = orderEvaluateService.selectList(new EntityWrapper<OrderEvaluate>().eq("driverId", driverId));
+        Integer level = 0;
+        for(OrderEvaluate orderEvaluate : driverId1){
+            level += orderEvaluate.getFraction().intValue();
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("LicenseId", driver.getDriveCard());//机动车驾驶证编号
+        jsonObject.put("Level", driverId1.size() == 0 ? 0 : level / driverId1.size());//服务质量信誉等级(五分制)
+        jsonObject.put("TestDate", new Date());//服务质量信誉考核日期YYYYMMDD
+        jsonObject.put("TestDepartment", "广西云森科技有限公司");//服务质量信誉考核机构
+        Map<String, Object> map = new HashMap<>();
+        map.put("ratedDriver", jsonObject.toJSONString());
+
+        Map<String, String> header = new HashMap<>();
+        header.put("Connection", "keep-alive");
+        header.put("Content-Type", "application/x-www-form-urlencoded");
+        header.put("Accept", "*/*");
+        header.put("Accept-Encoding", "gzip");
+        header.put("Accept-Charset", "utf-8");
+        String result = httpClientUtil.pushHttpRequset("POST", path + "ministryOfTransport/ratedDriver", map, header,"form");
+        System.err.println("---------------------------驾驶员信誉信息-----------------------:" + result);
+    }
+
+
+
+
+    /**
+     * 计算价格
+     * @param orderPrivateCar
+     * @return
+     * @throws Exception
+     */
+    private Map<String, Double> setMoney(OrderPrivateCar orderPrivateCar) {
+        Map<String, Object> query1 = systemPriceMapper.query(orderPrivateCar.getCompanyId(), 1, orderPrivateCar.getServerCarModelId());
+        Map<String, Double> map = new HashMap<>();
+        //开始根据不同的方式计算金额
+        double amount1 = 0;
+        double amount2 = 0;
+        double amount3 = 0;
+        JSONObject jsonObject = JSON.parseObject(query1.get("content").toString());
+        Double num1 = jsonObject.getDouble("num1");//起步价(元)
+        Double num2 = jsonObject.getDouble("num2");//起步公里(公里)
+        Double num3 = jsonObject.getDouble("num3");//起步时间(分钟)
+        Double num4 = jsonObject.getDouble("num4");//里程费(元)
+        Double num5 = jsonObject.getDouble("num5");//时长费(分钟)
+        Double num6 = jsonObject.getDouble("num6");//等待费(分钟)
+        Double num7 = jsonObject.getDouble("num7");//等待费(元)
+        Double num8 = jsonObject.getDouble("num8");//远途费(公里)
+        Double num9 = jsonObject.getDouble("num9");//远途费(公里)
+        Double num10 = jsonObject.getDouble("num10");//远途费(元)
+        Double num11 = jsonObject.getDouble("num11");//远途费(公里)
+        Double num12 = jsonObject.getDouble("num12");//远途费(公里)
+        Double num13 = jsonObject.getDouble("num13");//远途费(元)
+        Double num14 = jsonObject.getDouble("num14");//远途费(公里)
+        Double num15 = jsonObject.getDouble("num15");//远途费(元)
+        String num16 = jsonObject.getString("num16");//夜间费(开始时间)
+        Double num17 = jsonObject.getDouble("num17");//夜间费(元)
+        Double num18 = jsonObject.getDouble("num18");//夜间费(元)
+        Double num19 = jsonObject.getDouble("num19");//夜间费(元)
+        Double num20 = jsonObject.getDouble("num20");//夜间费(元)
+        Double num21 = jsonObject.getDouble("num21");//夜间费(元)
+        Double num22 = jsonObject.getDouble("num22");//夜间费(元)
+        String num23 = jsonObject.getString("num23");//高峰费(开始时间)
+        String num24 = jsonObject.getString("num24");//高峰费(开始时间)
+        Double num25 = jsonObject.getDouble("num25");//高峰费(元)
+        Double num26 = jsonObject.getDouble("num26");//高峰费(元)
+        Double num27 = jsonObject.getDouble("num27");//高峰费(元)
+        Double num28 = jsonObject.getDouble("num28");//高峰费(元)
+        Double num29 = jsonObject.getDouble("num29");//高峰费(元)
+        Double num30 = jsonObject.getDouble("num30");//高峰费(元)
+
+        Date date = new Date();
+        double d = (null == orderPrivateCar.getMileage() ? 0D : orderPrivateCar.getMileage()) / 1000;//实际公里
+        double t = ((orderPrivateCar.getEndServiceTime().getTime() - orderPrivateCar.getStartServiceTime().getTime()) / 60000) + 1;//实际时间(不满一分钟按一分钟算)
+        double w = ((orderPrivateCar.getStartServiceTime().getTime() - orderPrivateCar.getArriveTime().getTime()) / 60000) + 1;//等待分钟(不满一分钟按一分钟算)
+        double d1 = (d - num2) < 0 ? 0 : d - num2;//超出起步里程的公里
+        double t1 = (t - num3) < 0 ? 0 : new BigDecimal(t - num3).setScale(0, BigDecimal.ROUND_UP).doubleValue();//超过起步分钟数的时间
+        double w1 = (w - num6) < 0 ? 0 : new BigDecimal(w - num6).setScale(0, BigDecimal.ROUND_UP).doubleValue();//超出等待时间的时间
+        double yt1 = 0;//远途1段
+        double yt2 = 0;//远途2段
+        double yt3 = 0;//远途3段
+
+
+        //夜间服务处理逻辑
+        Calendar s = Calendar.getInstance();
+        s.setTime(date);
+        s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num16.split(" - ")[0].split(":")[0]));
+        s.set(Calendar.MINUTE, Integer.valueOf(num16.split(" - ")[0].split(":")[1]));
+
+        Calendar e = Calendar.getInstance();
+        e.setTime(date);
+        e.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num16.split(" - ")[1].split(":")[0]));
+        e.set(Calendar.MINUTE, Integer.valueOf(num16.split(" - ")[1].split(":")[1]));
+
+        if(date.getTime() > s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){
+            if(d > num8.doubleValue() && d <= num9.doubleValue()){
+                yt1 = num20 * (d - num8);
+            }
+            if(d > num9.doubleValue()){
+                yt1 = num20 * (num9 - num8);
+            }
+            if(d > num11.doubleValue() || d <= num12.doubleValue()){
+                yt2 = num21 * (d - num11);
+            }
+            if(d > num12.doubleValue()){
+                yt2 = num21 * (num12 - num11);
+            }
+            if(d > num14.doubleValue()){
+                yt3 = num22 * (d - num14);
+            }
+            amount1 = num17 + (d1 * num18) + (t1 * num19) + (w1 * num7) + yt1 + yt2 + yt3;
+            map.put("amount1", amount1);
+        }
+
+
+        //高峰时段处理逻辑
+        Calendar s1 = Calendar.getInstance();
+        s1.setTime(date);
+        s1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num23.split(" - ")[0].split(":")[0]));
+        s1.set(Calendar.MINUTE, Integer.valueOf(num23.split(" - ")[0].split(":")[1]));
+
+        Calendar e1 = Calendar.getInstance();
+        e1.setTime(date);
+        e1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num23.split(" - ")[1].split(":")[0]));
+        e1.set(Calendar.MINUTE, Integer.valueOf(num23.split(" - ")[1].split(":")[1]));
+
+        Calendar s2 = Calendar.getInstance();
+        s2.setTime(date);
+        s2.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num24.split(" - ")[0].split(":")[0]));
+        s2.set(Calendar.MINUTE, Integer.valueOf(num24.split(" - ")[0].split(":")[1]));
+
+        Calendar e2 = Calendar.getInstance();
+        e2.setTime(date);
+        e2.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num24.split(" - ")[1].split(":")[0]));
+        e2.set(Calendar.MINUTE, Integer.valueOf(num24.split(" - ")[1].split(":")[1]));
+
+        if((date.getTime() > s1.getTimeInMillis() && date.getTime() < e1.getTimeInMillis()) || (date.getTime() > s2.getTimeInMillis() && date.getTime() < e2.getTimeInMillis())){
+            if(d > num8.doubleValue() && d <= num9.doubleValue()){
+                yt1 = num28 * (d - num8);
+            }
+            if(d > num9.doubleValue()){
+                yt1 = num28 * (num9 - num8);
+            }
+            if(d > num11.doubleValue() && d <= num12.doubleValue()){
+                yt2 = num29 * (d - num11);
+            }
+            if(d > num12.doubleValue()){
+                yt2 = num29 * (num12 - num11);
+            }
+            if(d > num14.doubleValue()){
+                yt3 = num30 * (d - num14);
+            }
+            amount2 = num25 + (d1 * num26) + (t1 * num27) + (w1 * num7) + yt1 + yt2 + yt3;
+            map.put("amount2", amount2);
+        }
+
+        //其他时间段的计算
+        if(d > num8.doubleValue() && d <= num9.doubleValue()){
+            yt1 = num10 * (d - num8);
+        }
+        if(d > num9.doubleValue()){
+            yt1 = num10 * (num9 - num8);
+        }
+        if(d > num11.doubleValue() && d <= num12.doubleValue()){
+            yt2 = num13 * (d - num11);
+        }
+        if(d > num12.doubleValue()){
+            yt2 = num13 * (num12 - num11);
+        }
+        if(d > num14.doubleValue()){
+            yt3 = num15 * (d - num14);
+        }
+        amount3 = num1 + (d1 * num4) + (t1 * num5) + (w1 * num7) + yt1 + yt2 + yt3;
+        map.put("amount3", amount3);
+        return map;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
new file mode 100644
index 0000000..617aecd
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
@@ -0,0 +1,405 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
+import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
+import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
+import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
+import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
+import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * socket推单处理类
+ */
+@Component
+public class PushUtil {
+
+    @Autowired
+    private RestTemplate internalRestTemplate;
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private IOrderTaxiService orderTaxiService;
+
+    @Autowired
+    private GDMapElectricFenceUtil gdMapElectricFenceUtil;
+
+    @Autowired
+    private IOrderPrivateCarService orderPrivateCarService;
+
+    @Autowired
+    private IOrderCrossCityService orderCrossCityService;
+
+    private Map<String, JSONObject> pushMap = new HashMap<>();//存储需要定时推送的数据
+
+    private Map<String, Timer> taskMap = new HashMap<>();//存储定时推送的定时器
+
+
+
+
+    /**
+     * 推送订单状态
+     * @param type          1=用户,2=司机
+     * @param uid           对象id
+     * @param orderId       订单id
+     * @param orderType     订单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)
+     * @param state         订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)
+     */
+    public void pushOrderState(Integer type, Integer uid, Integer orderId, Integer orderType, Integer state, Integer time){
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("code", 200);
+        jsonObject.put("msg", "SUCCESS");
+        jsonObject.put("method", "ORDER_STATUS");
+        Map<String, Object> map = new HashMap<>();
+        map.put("orderId", orderId);
+        map.put("orderType", orderType);
+        map.put("state", state);
+        map.put("time", time);
+        map.put("audioLinkUrl", "");
+        jsonObject.put("data", map);
+
+        //调用推送
+        HttpHeaders headers = new HttpHeaders();
+        // 以表单的方式提交
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        //将请求头部和参数合成一个请求
+        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+        params.add("msg", jsonObject.toJSONString());
+        params.add("id", String.valueOf(uid));
+        params.add("type", String.valueOf(type));
+        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+        String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class);
+        JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
+        if(jsonObject1.getIntValue("code") != 200){
+            System.err.println(jsonObject1.getString("msg"));
+        }
+    }
+
+    public void pushOrderStateVedio(Integer type, Integer uid, Integer orderId, Integer orderType, Integer state, Integer time,String url){
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("code", 200);
+        jsonObject.put("msg", "SUCCESS");
+        jsonObject.put("method", "ORDER_STATUS");
+        Map<String, Object> map = new HashMap<>();
+        map.put("orderId", orderId);
+        map.put("orderType", orderType);
+        map.put("state", state);
+        map.put("time", time);
+        map.put("audioLinkUrl", url);
+        jsonObject.put("data", map);
+
+        //调用推送
+        HttpHeaders headers = new HttpHeaders();
+        // 以表单的方式提交
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        //将请求头部和参数合成一个请求
+        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+        params.add("msg", jsonObject.toJSONString());
+        params.add("id", String.valueOf(uid));
+        params.add("type", String.valueOf(type));
+        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+        String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class);
+        JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
+        if(jsonObject1.getIntValue("code") != 200){
+            System.err.println(jsonObject1.getString("msg"));
+        }
+    }
+
+
+    /**
+     * 推单完成后,没有司机接单的推送提醒
+     * @param type
+     * @param uid
+     * @param orderId
+     * @param orderType
+     */
+    public void pushEndPush(Integer type, Integer uid, Integer orderId, Integer orderType){
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("code", 200);
+        jsonObject.put("msg", "SUCCESS");
+        jsonObject.put("method", "END_PUSH");
+        Map<String, Object> map = new HashMap<>();
+        map.put("orderId", orderId);
+        map.put("orderType", orderType);
+        jsonObject.put("data", map);
+
+        //调用推送
+        HttpHeaders headers = new HttpHeaders();
+        // 以表单的方式提交
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        //将请求头部和参数合成一个请求
+        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+        params.add("msg", jsonObject.toJSONString());
+        params.add("id", String.valueOf(uid));
+        params.add("type", String.valueOf(type));
+        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+        String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class);
+        JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
+        if(jsonObject1.getIntValue("code") != 200){
+            System.err.println(jsonObject1.getString("msg"));
+        }
+    }
+
+
+
+
+    /**
+     * 推送司机位置给乘客端
+     */
+    public void pushDriverPosition(Integer orderId, Integer orderType){
+        Integer userId = null;
+        switch (orderType){
+            case 1:
+                OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
+                userId = orderPrivateCar.getUserId();
+                break;
+            case 2:
+                OrderTaxi orderTaxi = orderTaxiService.selectById(orderId);
+                userId = orderTaxi.getUserId();
+                break;
+            case 3:
+                OrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId);
+                userId = orderCrossCity.getUserId();
+                break;
+        }
+        JSONObject data = new JSONObject();
+        data.put("id", userId);
+        data.put("type", 1);
+        this.pushMap.put(orderId + "_" + orderType, data);
+        this.createTask(orderId, orderType);
+    }
+
+
+    /**
+     * 创建定时任务
+     * @param orderId
+     */
+    public void createTask(Integer orderId, Integer orderType){
+        TimerTask task = new TimerTask() {
+            @Override
+            public void run() {
+                try {
+                    PushUtil.this.pushPositon(orderId, orderType);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        };
+        Timer timer = new Timer();
+        timer.schedule(task, 1000, 10000);//1秒后开始10秒钟一次的重复执行
+        taskMap.put(orderId + "_" + orderType, timer);
+    }
+
+
+    /**
+     * 推送处理方法
+     * @param orderId
+     * @param orderType
+     * @throws Exception
+     */
+    public void pushPositon(Integer orderId, Integer orderType) throws Exception{
+        Integer driverId = null;
+        String startLonLat = null;
+        String endLonLat = null;
+        Integer state = 0;
+        Integer oldState = 0;
+        Long startServiceTime = null;
+        Double servedMileage = null;
+        switch (orderType){
+            case 1:
+                OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
+                driverId = orderPrivateCar.getDriverId();
+                startLonLat = orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat();
+                state = orderPrivateCar.getState();
+                oldState = orderPrivateCar.getOldState();
+                startServiceTime = null != orderPrivateCar.getStartServiceTime() ? orderPrivateCar.getStartServiceTime().getTime() : null;
+                servedMileage = orderPrivateCar.getMileage();
+                endLonLat = orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat();
+                break;
+            case 2:
+                OrderTaxi orderTaxi = orderTaxiService.selectById(orderId);
+                driverId = orderTaxi.getDriverId();
+                startLonLat = orderTaxi.getStartLon() + "," + orderTaxi.getStartLat();
+                state = orderTaxi.getState();
+                oldState = orderTaxi.getOldState();
+                startServiceTime = null != orderTaxi.getStartServiceTime() ? orderTaxi.getStartServiceTime().getTime() : null;
+                servedMileage = orderTaxi.getMileage();
+                endLonLat = orderTaxi.getEndLon() + "," + orderTaxi.getEndLat();
+                break;
+            case 3:
+                OrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId);
+                driverId = orderCrossCity.getDriverId();
+                startLonLat = orderCrossCity.getStartLon() + "," + orderCrossCity.getStartLat();
+                state = orderCrossCity.getState();
+                oldState = orderCrossCity.getOldState();
+                startServiceTime = null != orderCrossCity.getStartServiceTime() ? orderCrossCity.getStartServiceTime().getTime() : null;
+                servedMileage = orderCrossCity.getMileage();
+                endLonLat = orderCrossCity.getEndLon() + "," + orderCrossCity.getEndLat();
+                break;
+        }
+        //计算预计距离和剩余时间
+        String value = redisUtil.getValue("DRIVER" + String.valueOf(driverId));
+        if(null == value || "".equals(value)){
+            System.err.println("司机没有上传位置信息");
+        }
+        Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, startLonLat, 1);
+        String d = "0";
+        String t = "0";
+        if(null == distance){
+            System.err.println("查询距离出错了");
+        }else{
+            d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN).toString();
+            t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60)).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + "";
+        }
+        JSONObject msg = new JSONObject();
+        msg.put("code", 200);
+        msg.put("msg", "SUCCESS");
+        msg.put("method", "DRIVER_POSITION");
+        Map<String, String> map = new HashMap<>();
+        map.put("orderId", String.valueOf(orderId));
+        map.put("orderType", String.valueOf(orderType));
+        map.put("lon", (null != value ? value.split(",")[0] : ""));
+        map.put("lat", (null != value ? value.split(",")[1] : ""));
+        if(state == 7 || state == 8 || state == 9 || state == 10 || state == 12){//删除定时任务
+            this.removeTask(orderId, orderType);
+            return;
+        }
+        if((state == 2 || state == 3 || state == 4) || (oldState != null && (oldState == 2 || oldState == 3 || oldState == 4))){//前往预约地
+            map.put("reservationMileage", d);//当前位置距离预约点的剩余里程
+            map.put("reservationTime", t);//当前位置距离预约点的剩余分钟
+            map.put("servedMileage", "0");//距离起点已经服务的里程
+            map.put("servedTime", "0");//距离起点已经服务的时间
+            map.put("laveMileage", "0");//距离终点剩余未服务的里程数
+            map.put("laveTime", "0");//距离终端剩余未服务的预计时间
+        }
+        if((state == 5 || state == 6) || (oldState != null && (oldState == 5 || oldState == 6))){//服务中
+            map.put("reservationMileage", "0");//当前位置距离预约点的剩余里程
+            map.put("reservationTime", "0");//当前位置距离预约点的剩余分钟
+            map.put("servedMileage", String.valueOf(servedMileage / 1000));//距离起点已经服务的里程
+            Integer servedTime = Long.valueOf((new Date().getTime() - startServiceTime) / 60000).intValue();
+            map.put("servedTime", servedTime + "");//距离起点已经服务的时间
+            distance = gdMapElectricFenceUtil.getDistance(value, endLonLat, 1);
+            if(null == distance){
+                System.err.println("查询距离出错了");
+            }else{
+                d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN).toString();
+                t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60)).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + "";
+            }
+            map.put("laveMileage", d);//距离终点剩余未服务的里程数
+            map.put("laveTime", t);//距离终端剩余未服务的预计时间
+        }
+
+        msg.put("data", map);
+
+        //调用推送
+        HttpHeaders headers = new HttpHeaders();
+        // 以表单的方式提交
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        //将请求头部和参数合成一个请求
+        JSONObject jsonObject = pushMap.get(orderId + "_" + orderType);
+        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+        params.add("msg", msg.toJSONString());
+        params.add("id", jsonObject.getString("id"));
+        params.add("type", jsonObject.getString("type"));
+        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+        String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class);
+        JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
+        if(jsonObject1.getIntValue("code") != 200){
+            System.err.println(jsonObject1.getString("msg"));
+        }
+    }
+
+
+    /**
+     * 推送强迫下线
+     * @param id
+     * @param type
+     */
+    public void pushOffline(Integer id, Integer type){
+        JSONObject msg = new JSONObject();
+        msg.put("code", 200);
+        msg.put("msg", "SUCCESS");
+        msg.put("method", "OFFLINE");
+        msg.put("data", new Object());
+
+        //调用推送
+        HttpHeaders headers = new HttpHeaders();
+        // 以表单的方式提交
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        //将请求头部和参数合成一个请求
+        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+        params.add("msg", msg.toJSONString());
+        params.add("id", id.toString());
+        params.add("type", type.toString());
+        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+        String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class);
+        JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
+        if(jsonObject1.getIntValue("code") != 200){
+            System.err.println(jsonObject1.getString("msg"));
+        }
+    }
+
+
+    /**
+     * 摆渡抢单成功后推单
+     * @param type
+     * @param uid
+     * @param orderId
+     * @param orderType
+     * @param state
+     */
+    public void pushFerryOrderState(Integer type, Integer uid, Integer orderId, Integer orderType, Integer state){
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("code", 200);
+        jsonObject.put("msg", "SUCCESS");
+        jsonObject.put("method", "FERRY");
+        Map<String, Object> map = new HashMap<>();
+        map.put("orderId", orderId);
+        map.put("orderType", orderType);
+        map.put("state", state);
+        jsonObject.put("data", map);
+
+        //调用推送
+        HttpHeaders headers = new HttpHeaders();
+        // 以表单的方式提交
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        //将请求头部和参数合成一个请求
+        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+        params.add("msg", jsonObject.toJSONString());
+        params.add("id", String.valueOf(uid));
+        params.add("type", String.valueOf(type));
+        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+        String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class);
+        JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
+        if(jsonObject1.getIntValue("code") != 200){
+            System.err.println(jsonObject1.getString("msg"));
+        }
+    }
+
+
+
+    /**
+     * 删除定时任务
+     * @param orderId
+     */
+    public void removeTask(Integer orderId, Integer orderType){
+        Timer timer = taskMap.get(orderId + "_" + orderType);
+        if (null != timer){
+            timer.cancel();
+        }
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java
new file mode 100644
index 0000000..22f75e6
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java
@@ -0,0 +1,128 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.core.util.ToolUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
+
+
+/**
+ * Redis工具类
+ */
+@Component
+public class RedisUtil {
+
+    @Autowired
+    private RestTemplate internalRestTemplate;
+
+
+    /**
+     * 向redis中存储字符串没有过期时间
+     * @param key
+     * @param value
+     */
+    public void setStrValue(String key, String value){
+        if(ToolUtil.isNotEmpty(key)){
+            //发送验证码短信
+            HttpHeaders headers = new HttpHeaders();
+            // 以表单的方式提交
+            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+            //将请求头部和参数合成一个请求
+            MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+            params.add("key", key);
+            params.add("value", value);
+            HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+            String s = internalRestTemplate.postForObject("http://zuul-gateway/redis/setValue_", requestEntity, String.class);
+            JSONObject jsonObject = JSON.parseObject(s, JSONObject.class);
+            if(jsonObject.getIntValue("code") != 200){
+                System.err.println("调用redis出错了");
+            }
+        }
+
+    }
+
+
+    /**
+     * 以分钟为单位设置存储值(设置过期时间)
+     * @param key
+     * @param value
+     * @param time 秒
+     */
+    public void setStrValue(String key, String value, int time){
+        if(ToolUtil.isNotEmpty(key)){
+            //发送验证码短信
+            HttpHeaders headers = new HttpHeaders();
+            // 以表单的方式提交
+            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+            //将请求头部和参数合成一个请求
+            MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+            params.add("key", key);
+            params.add("value", value);
+            params.add("time", String.valueOf(time));
+            HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers);
+            String s = internalRestTemplate.postForObject("http://zuul-gateway/redis/setValue", requestEntity, String.class);
+            JSONObject jsonObject = JSON.parseObject(s, JSONObject.class);
+            if(jsonObject.getIntValue("code") != 200){
+                System.err.println("调用redis出错了");
+            }
+        }
+    }
+
+
+    /**
+     * 从redis中获取值
+     * @param key
+     * @return
+     */
+    public String getValue(String key){
+        if(ToolUtil.isNotEmpty(key)){
+            HttpHeaders headers = new HttpHeaders();
+            // 以表单的方式提交
+            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+            //将请求头部和参数合成一个请求
+            MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+            params.add("key", key);
+            HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+            String s = internalRestTemplate.postForObject("http://zuul-gateway/redis/getValue",requestEntity , String.class);
+            JSONObject jsonObject = JSON.parseObject(s, JSONObject.class);
+            if(jsonObject.getIntValue("code") != 200){
+                System.err.println("调用redis出错了");
+            }
+            return jsonObject.getString("data");
+        }
+        return null;
+    }
+
+
+    /**
+     * 删除key
+     * @param key
+     */
+    public String remove(String key){
+        if(ToolUtil.isNotEmpty(key)){
+            HttpHeaders headers = new HttpHeaders();
+            // 以表单的方式提交
+            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+            //将请求头部和参数合成一个请求
+            MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+            params.add("key", key);
+            HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
+            String s = internalRestTemplate.postForObject("http://zuul-gateway/redis/remove",requestEntity , String.class);
+            JSONObject jsonObject = JSON.parseObject(s, JSONObject.class);
+            if(jsonObject.getIntValue("code") != 200){
+                System.err.println("调用redis出错了");
+            }
+            return jsonObject.getString("data");
+        }
+        return null;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ResultUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ResultUtil.java
new file mode 100644
index 0000000..4b01561
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ResultUtil.java
@@ -0,0 +1,197 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 定义统一返回对象
+ */
+@ApiModel(value = "统一返回结果集")
+public class ResultUtil<T> {
+
+    public static final Integer SUCCESS = 200;
+    public static final Integer BLACK = -1;
+
+    public static final Integer PARAM_ERROR = 300;
+
+    public static final Integer RUNTIME_ERROR = 400;
+
+    public static final Integer ERROR = 500;
+
+    public static final Integer TOKEN_ERROR = 600;
+
+    public static final Integer SIGN_ERROR = 700;
+
+    public static final String Token = "TOKEN_INVALID";
+
+    public static final String SIGN = "SIGN_INVALID";
+
+    @ApiModelProperty(name = "code", value = "业务状态码 200:成功,300:参数错误,400:运行异常,500:其他异常, 600:token无效,需重新登录,700:签名无效")
+    private Integer code;//备用状态码
+
+    @ApiModelProperty(name = "msg", value = "返回结果说明")
+    private String msg;//返回说明
+
+    @ApiModelProperty(name = "data", value = "返回结果值")
+    private T data;//返回数据
+
+
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+
+    public Integer getCode() {
+        return code;
+    }
+
+    private ResultUtil(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    private ResultUtil(Integer code, String msg, T data) {
+        this.code = code;
+        this.msg = msg;
+        this.data = data;
+    }
+
+
+    public static <T> ResultUtil<T> getResult(Integer code, String msg){
+        return new ResultUtil<>(code, msg);
+    }
+
+    public static <T> ResultUtil<T> getResult(Integer code, String msg, T data){
+        return new ResultUtil<>(code, msg, data);
+    }
+
+    /**
+     * 错误信息
+     * @return
+     */
+    public static ResultUtil error(String mag){
+        return ResultUtil.getResult(ResultUtil.ERROR, mag, new JSONObject());
+    }
+
+    /**
+     * 错误信息
+     * @return
+     */
+    public static <T> ResultUtil <T> error(String mag, T obj){
+        return ResultUtil.getResult(ResultUtil.ERROR, mag, obj);
+    }
+
+    /**
+     * token失效
+     * @return
+     */
+    public static ResultUtil tokenErr(){
+        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, ResultUtil.Token, new JSONObject());
+    }
+
+    /**
+     * token失效
+     * @return
+     */
+    public static ResultUtil tokenErr(String msg){
+        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, msg, new JSONObject());
+    }
+
+    /**
+     * 参数异常
+     * @return
+     */
+    public static  ResultUtil paranErr(){
+        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "PARAM_ERROR", new JSONObject());
+    }
+
+    /**
+     * 参数异常
+     * @return
+     */
+    public static <T> ResultUtil<T> paranErr(T data){
+        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "SYSTEM_RUN_ERROR", data);
+    }
+
+    /**
+     * 运行异常
+     * @return
+     */
+    public static ResultUtil runErr(){
+        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", new JSONObject());
+    }
+
+
+    /**
+     * 运行异常
+     * @return
+     */
+    public static <T>ResultUtil<T> runErr(T data){
+        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", data);
+    }
+
+    /**
+     * 运行异常
+     * @return
+     */
+    public static <T>ResultUtil<T> runErr(T data, String msg){
+        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, msg, data);
+    }
+
+
+    /**
+     * 返回成功
+     * @param
+     * @return
+     */
+    public static ResultUtil success(){
+        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new JSONObject());
+    }
+    /**
+     * 用户被拉入黑名单
+     * @param
+     * @return
+     */
+    public static ResultUtil black(String msg){
+        return ResultUtil.getResult(ResultUtil.BLACK, msg, new JSONObject());
+    }
+
+
+    /**
+     * 返回成功
+     * @param data
+     * @param <T>
+     * @return
+     */
+    public static <T> ResultUtil<T> success(T data){
+        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", data);
+    }
+
+    /**
+     * 返回成功
+     * @param msg
+     * @param data
+     * @param <T>
+     * @return
+     */
+    public static <T> ResultUtil<T> success(String msg, T data){
+        return ResultUtil.getResult(ResultUtil.SUCCESS, msg, data);
+    }
+
+
+    /**
+     * 签名无效
+     * @param <T>
+     * @return
+     */
+    public static <T> ResultUtil<T> sign(){
+        return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN);
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SendRequestDto.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SendRequestDto.java
new file mode 100644
index 0000000..3ff99f8
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SendRequestDto.java
@@ -0,0 +1,42 @@
+package com.stylefeng.guns.modular.system.util;
+
+public class SendRequestDto {
+
+    /**
+     * api密匙账号
+     */
+    public String SecretName="";
+    /**
+     * api密匙
+     */
+    public String SecretKey="";
+    /**
+     * 11位手机号码,多个号码请用英文逗号隔开
+     * 例:18300000000,18300000001
+     */
+    public String Mobile="";
+    /**
+     * 短信内容,请保持在500字以内
+     */
+    public String Content="";
+    /**
+     * 模板id
+     */
+    public String TemplateId="";
+    /**
+     * 扩展号,由6位以内的数字组成
+     */
+    public String ExtCode="";
+    /**
+     * 短信签名,例:【签名】
+     */
+    public String SignName="";
+    /**
+     * 定时时间,格式:yyyyMMddHHmmss
+     */
+    public String Timing="";
+    /**
+     * 自定义id,36位以内的字母数字组成
+     */
+    public String CustomId="";
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SignUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SignUtil.java
new file mode 100644
index 0000000..748d7f3
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SignUtil.java
@@ -0,0 +1,41 @@
+package com.stylefeng.guns.modular.system.util;
+
+import cn.hutool.json.JSONObject;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+@Slf4j
+public class SignUtil {
+
+    public static String sign(String appKey, String ts, String appSecret, Object body) {
+        log.debug("appKey:{}, ts:{}, appSecret:{}, body:{}", appKey, ts, appSecret,
+                JSON.toJSONString(body));
+        //0. 使⽤ Hutools 包JSON处理 Bean 2 Map
+        Map<String, Object> bodyMap = new JSONObject(body);
+        // 1. remove sign parameter
+        bodyMap.entrySet().removeIf(entry -> entry.getValue() == null);
+        // 2. 把字典按Key的字⺟顺序排序
+        Map<String, Object> treeMap = new TreeMap<>(bodyMap);
+        // 3. 把参数串起来
+        StringBuffer origin = new StringBuffer(appSecret).append("appKey")
+                .append(appKey);
+        treeMap.forEach((key, value) -> origin.append(key).append(value));
+        origin.append("ts");
+        // 4. 加密:MD5 + ⼤写&⼗六进制
+        String result = null;
+        String s = null;
+        log.debug("SecretString Origin: {}", origin.toString());
+        try {
+            s = origin.toString();
+            result = MD5Util.encrypt32(s);
+        } catch (Exception e) {
+            log.error("md5加密错误,origin: {}", s, e);
+        }
+        log.debug("Signature Result: {}", result);
+        return result;
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SignVerificationUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SignVerificationUtil.java
new file mode 100644
index 0000000..bc530a5
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SignVerificationUtil.java
@@ -0,0 +1,107 @@
+package com.stylefeng.guns.modular.system.util;
+
+import cn.hutool.json.JSONObject;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class SignVerificationUtil {
+
+    private static final String accessKeySecret = "cda9983a-91c1-414b-bed7-9d307ec584af";
+
+    public static Boolean signVerification(String appKey,String ts,String signature,JSONObject body) {
+        // 商⼾对应秘钥,由平台⽅提供
+        /**
+         * Body信息
+         * {
+         * "answerTime":1663838323949173,
+         * "audioPath":"https://cc.v-call.cn/obc/api/file/download/0e2c6b4c-6a4d-474c-a0d
+         4-xxxxx",
+         * "callTime":1663838323949173,
+         * "duration":37,
+         * "hangupCauseReason":"正常结束",
+         * "hangupTime":1663838360949096,
+         * "ivrNodeAudioList":[
+         * {
+         * "id":"6qxrfoofya",
+         * "name":"留⾔1",
+         * "downloadUrl":"https://cc.v-call.cn/obc/api/file/ivrNode/download/0e2c6b4c
+         -6a4d-474c-a0d4-5bf3902ca713/xxxxx"
+         * }
+         * ],
+         * "outputParam":"
+         {\"area\":\"2\",\"pushUrl\":\"https://www.baidu.com\",\"account\":\"test\"}",
+         * "phone":"18888888888",
+         * "ringTime":0
+         * }
+         * **/
+        CallInfoDTO dto = new CallInfoDTO();
+        dto.setPhone(body.getStr("phone"));
+        JSONObject outputParam = body.getJSONObject("outputParam");
+        dto.setOutputParam(outputParam.toString());
+        dto.setCallTime(body.getLong("callTime"));
+        dto.setRingTime(body.getLong("ringTime"));
+        dto.setAnswerTime(body.getLong("answerTime"));
+        dto.setHangupTime(body.getLong("hangupTime"));
+        dto.setHangupCauseReason(body.getStr("hangupCauseReason"));
+        dto.setDuration(body.getInt("duration"));
+
+        ArrayList<IvrNodeAudio> nodeList = new ArrayList<IvrNodeAudio>();
+        body.getJSONArray("ivrNodeAudioList").forEach(item -> {
+            JSONObject jsonObject = (JSONObject) item;
+            IvrNodeAudio nodeAudio = new IvrNodeAudio(jsonObject.getStr("id"),jsonObject.getStr("name"),jsonObject.getStr("downloadUrl"));
+            nodeList.add(nodeAudio);
+        });
+        dto.setIvrNodeAudioList(nodeList);
+        dto.setAudioPath(body.getStr("audioPath"));
+
+        Map<String,Object> bodyMap = new JSONObject(dto);
+        // 1. remove sign parameter
+        bodyMap.entrySet().removeIf(entry -> entry.getValue() == null);
+        // 2. 把字典按Key的字⺟顺序排序
+        Map<String, Object> treeMap = new TreeMap<>(bodyMap);
+        // 3. 把参数串起来
+        StringBuffer secretString = new StringBuffer(accessKeySecret).append("appKey").append(appKey);
+        treeMap.forEach((key, value) -> secretString.append(key).append(value));
+        secretString.append("ts").append(ts);
+        String sign = MD5AndKL.MD5(secretString.toString()).toUpperCase();
+        // 验签
+        if(!signature.equals(sign)){
+            System.out.println("验签失败");
+            return false;
+        }
+    // 成功
+        System.out.println("验签成功,继续执⾏业务逻辑");
+        return true;
+    }
+    @Data
+    public static class CallInfoDTO {
+        private String audioPath;
+        private String phone;
+        private String outputParam;
+        private Long callTime;
+        private Long ringTime;
+        private Long answerTime;
+        private Long hangupTime;
+        private String hangupCauseReason;
+        private Integer duration;
+        private List<IvrNodeAudio> ivrNodeAudioList;
+    }
+    @Data
+    public static class IvrNodeAudio {
+        private String id;
+        private String name;
+        private String downloadUrl;
+        public IvrNodeAudio(String id, String name, String downloadUrl) {
+            this.id = id;
+            this.name = name;
+            this.downloadUrl = downloadUrl;
+        }
+        public IvrNodeAudio() {
+        }
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SystemException.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SystemException.java
new file mode 100644
index 0000000..7017207
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SystemException.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util;
+
+/**
+ * 自定义系统异常类
+ */
+public class SystemException extends Exception {
+
+    public SystemException(String message) {
+        super(message);
+    }
+
+    public SystemException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public SystemException(Throwable cause) {
+        super(cause);
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
new file mode 100644
index 0000000..9965c15
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
@@ -0,0 +1,59 @@
+package com.stylefeng.guns.modular.system.util;
+
+
+import com.stylefeng.guns.modular.system.service.IUserCouponRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * 定时任务工具类
+ */
+@Component
+public class TaskUtil {
+
+    @Autowired
+    private IUserCouponRecordService userCouponRecordService;
+
+
+
+    /**
+     * 每隔一分钟去处理的定时任务
+     */
+    @Scheduled(fixedRate = 1000 * 60)
+    public void taskMinute(){
+        try {
+            //修改过期的优惠券
+            userCouponRecordService.updateTimeOut();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+//    /**
+//     * 每天的凌晨执行的任务
+//     */
+//    @Scheduled(cron = "0 0 0 * * *")
+//    public void taskDay(){
+//        try {
+//        }catch (Exception e){
+//            e.printStackTrace();
+//        }
+//    }
+
+
+//
+//    /**
+//     * 每月第一天的1点执行的任务
+//     */
+//    @Scheduled(cron = "0 0 1 1 * *")
+//    public void taskMonth(){
+//        try {
+//
+//        }catch (Exception e){
+//            e.printStackTrace();
+//        }
+//    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UUIDUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UUIDUtil.java
new file mode 100644
index 0000000..0f9b2be
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UUIDUtil.java
@@ -0,0 +1,78 @@
+package com.stylefeng.guns.modular.system.util;
+
+
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.UUID;
+
+/**
+ * 定义生成随机码的工具类
+ */
+public class UUIDUtil {
+
+    private int i = 1;
+
+
+    /**
+     * 定义生成原生的UUID随机码
+     * @return
+     */
+    public static String getNativeUUID(){
+        return UUID.randomUUID().toString();
+    }
+
+
+    /**
+     * 生成32位随机码
+     * @return
+     */
+    public static String getRandomCode(){
+        return UUIDUtil.getNativeUUID().replaceAll("-", "");
+    }
+
+
+    /**
+     * 获取给定长度的随机码
+     * @param num
+     * @return
+     * @throws Exception
+     */
+    public static String getRandomCode(Integer num) throws Exception{
+        String str = null;
+        if(0 < num){
+            if(num % 32 > 0){
+                Integer s = num / 32;
+                Integer l = num % 32;
+                StringBuffer sb = new StringBuffer();
+                for(int i = 0; i < s; i++){
+                    sb.append(UUIDUtil.getRandomCode());
+                }
+                sb.append(UUIDUtil.getRandomCode().substring(0, l));
+                str = sb.toString();
+            }else if(num % 32 == 0){
+                Integer s = num / 32;
+                StringBuffer sb = new StringBuffer();
+                for(int i = 0; i < s; i++){
+                    sb.append(UUIDUtil.getRandomCode());
+                }
+                str = sb.toString();
+            }else{
+                str = UUIDUtil.getRandomCode().substring(0, num);
+            }
+        }else{
+            throw new Exception("参数只能大于0");
+        }
+        return str;
+    }
+
+
+    /**
+     * 获取根据当前时间的字符串数据
+     * @return
+     */
+    public synchronized static String getTimeStr(){
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddhhmmssS");
+        return simpleDateFormat.format(new Date());
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UploadUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UploadUtil.java
new file mode 100644
index 0000000..32fe260
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UploadUtil.java
@@ -0,0 +1,148 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.stylefeng.guns.config.properties.GunsProperties;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.exception.GunsException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * 上传文件
+ */
+@RestController
+@RequestMapping("/upload")
+public class UploadUtil extends BaseController {
+    private final static Logger log = LoggerFactory.getLogger(UploadUtil.class);
+
+    @Autowired
+    private GunsProperties gunsProperties;
+
+    /**
+     * 上传图片(上传到项目的webapp/static/img)
+     */
+   /* @RequestMapping("/image")
+    public String image(@RequestPart("file") MultipartFile picture) {
+        String pictureName = UUID.randomUUID().toString() + ".jpg";
+        try {
+            // 文件目录路径
+            String fileSavePath = gunsProperties.getFileUploadPath();
+            picture.transferTo(new File(fileSavePath + pictureName));
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            throw new GunsException(BizExceptionEnum.UPLOAD_ERROR);
+        }
+        return pictureName;
+    }*/
+
+    /**
+     * 多图片上传使用
+     * @param request
+     * @return
+     */
+    @RequestMapping( "/uploadPhoto")
+    @ResponseBody
+    public Map<String, Object> saveimg(HttpServletRequest request) {
+        Map<String, Object> m = new HashMap<>();
+        try {
+
+            String ossUpload = null;
+            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+            MultipartFile file = (MultipartFile) multipartRequest.getFile("myfile");
+            if (file.getSize() != 0) {
+                ossUpload = OssUploadUtil.ossUpload( file);
+//                ossUpload = ObsUploadUtil.obsUpload(super.getHttpServletRequest(), file);
+                m.put("imgUrl", ossUpload);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return m;
+    }
+
+    @PostMapping("/image")
+    @ResponseBody
+    @ApiOperation(value = "文件上传", tags = {"文件上传"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public String image(@RequestParam("file") MultipartFile picture) {
+        try {
+            MultipartFile file = (MultipartFile) picture;
+            String pictureName = OssUploadUtil.ossUpload(file);
+//            String pictureName = ObsUploadUtil.obsUpload(super.getHttpServletRequest(), picture);
+            return pictureName;
+        } catch (IOException e1) {
+            return null;
+        }
+    }
+
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/file")
+    public String file(@RequestPart("file") MultipartFile picture) {
+        //获取文件名后缀
+        String suffix = picture.getOriginalFilename().substring(picture.getOriginalFilename().lastIndexOf("."));
+        String pictureName = UUID.randomUUID().toString() + suffix;
+        try {
+            // 文件目录路径
+            String fileSavePath = gunsProperties.getFileUploadPath();
+            File file = new File(fileSavePath + pictureName);
+            picture.transferTo(file);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            throw new GunsException(BizExceptionEnum.UPLOAD_ERROR);
+        }
+        return pictureName;
+    }
+
+    /**
+     * UEditor编辑器上传图片
+     */
+    @RequestMapping("/imageUp")
+    public String imageUp(@RequestPart("upfile") MultipartFile picture, HttpServletRequest request) {
+        String callback = request.getParameter("callback");
+        String pictureName = UUID.randomUUID().toString() + ".jpg";
+        try {
+            // 上传文件目录
+            //String fileSavePath = gunsProperties.getFileUploadPath();
+            //picture.transferTo(new File(fileSavePath + pictureName));
+            // 文件全路径
+            //pictureName = gunsProperties.getPictureServerAddress() + pictureName;
+//           pictureName = ObsUploadUtil.obsUpload(super.getHttpServletRequest(), picture);
+            pictureName = OssUploadUtil.ossUpload( picture);
+
+            String result = "{'original': '" + picture.getOriginalFilename() + "', 'state': 'SUCCESS', 'url': '" + pictureName + "'}";
+            if (callback == null) {
+                return result;
+            } else {
+                return "<script>" + callback + "(" + result + ")</script>";
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            String result = "{'original': '', 'state': '文件上传失败','url': ''}";
+            if (callback == null) {
+                return result;
+            } else {
+                return "<script>" + callback + "(" + result + ")</script>";
+            }
+        }
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java
new file mode 100644
index 0000000..1961a68
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java
@@ -0,0 +1,120 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 微信工具类
+ */
+@Component
+public class WeChatUtil {
+
+    @Value("${wx.appletsAppid}")
+    private String wxAppletsAppid;
+
+    @Value("${wx.appletsAppSecret}")
+    private String wxAppletsAppSecret;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+
+    /**
+     * 小程序使用jscode获取openid
+     * @param jscode
+     * @return
+     */
+    public Map<String, String> code2Session(String jscode){
+        String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxAppletsAppid + "&secret=" + wxAppletsAppSecret
+                + "&js_code=" + jscode + "&grant_type=authorization_code";
+        String forObject = restTemplate.getForObject(url, String.class);
+        JSONObject jsonObject = JSON.parseObject(forObject);
+        int errcode = jsonObject.getIntValue("errcode");
+        Map<String, String> map = new HashMap<>();
+        if(errcode == 0){//成功
+            map.put("openid", jsonObject.getString("openid"));
+            map.put("sessionKey", jsonObject.getString("session_key"));
+            map.put("unionid", jsonObject.getString("unionid"));
+            return map;
+        }
+        if(errcode == -1){//系统繁忙,此时请开发者稍候再试
+            map.put("msg", jsonObject.getString("errmsg"));
+            return map;
+        }
+        if(errcode == 40029){//code 无效
+            map.put("msg", jsonObject.getString("errmsg"));
+            return map;
+        }
+        if(errcode == 45011){//频率限制,每个用户每分钟100次
+            map.put("msg", jsonObject.getString("errmsg"));
+            return map;
+        }
+        return null;
+    }
+
+
+    /**
+     * 通过config接口注入权限验证配置(公众号)
+     * 附录1-JS-SDK使用权限签名算法,
+     * @return
+     */
+    public Map<String,Object> getSignatureConfig(String url){
+        //获取token
+        try {
+            url = URLDecoder.decode(url, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        String ticket = getJSApiTicket();
+        String noncestr = UUIDUtil.getRandomCode();
+        Long timestamp = System.currentTimeMillis();
+        String content = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url;
+        String signature = DigestUtils.sha1Hex(content);
+        Map<String,Object> map=new HashMap<>();
+        map.put("appId", "wx0e72f86394831b34");
+        map.put("timestamp", timestamp);
+        map.put("nonceStr", noncestr);
+        map.put("signature", signature);
+        return  map;
+    }
+
+
+
+    /***
+     * 获取jsapiTicket(公众号)
+     * 来源 www.vxzsk.com
+     * @return
+     */
+    public String getJSApiTicket(){
+        //获取token
+        String acess_token= this.getAccessToken();
+        String urlStr = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + acess_token + "&type=jsapi";
+        String backData = restTemplate.getForObject(urlStr, String.class);
+        System.out.println(backData);
+        String ticket = JSONObject.parseObject(backData).getString("ticket");
+        return  ticket;
+    }
+
+
+    /***
+     * 获取acess_token (公众号)
+     * 来源www.vxzsk.com
+     * @return
+     */
+    public String getAccessToken(){
+        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx0e72f86394831b34&secret=930f857abc74f7bb5cbd89e1544c5669";
+        String backData = restTemplate.getForObject(url, String.class);
+        String accessToken = JSONObject.parseObject(backData).getString("access_token");
+        return accessToken;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/AdvertisementWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/AdvertisementWarpper.java
new file mode 100644
index 0000000..ed2d37f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/AdvertisementWarpper.java
@@ -0,0 +1,103 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel("广告")
+public class AdvertisementWarpper {
+    @ApiModelProperty("主键")
+    private Integer id;
+    @ApiModelProperty("名称")
+    private String name;
+    @ApiModelProperty("图片地址")
+    private String imgUrl;
+    @ApiModelProperty("类型(1:弹窗,2:底部)")
+    private Integer type;
+    @ApiModelProperty("是否跳转(1:是,2:否)")
+    private Integer isJump;
+    @ApiModelProperty("跳转类型(1:外部,2:内部)")
+    private Integer jumpType;
+    @ApiModelProperty("跳转路径")
+    private String jumpUrl;
+    @ApiModelProperty("内容")
+    private String content;
+
+    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 String getImgUrl() {
+        return imgUrl;
+    }
+
+    public void setImgUrl(String imgUrl) {
+        this.imgUrl = imgUrl;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getIsJump() {
+        return isJump;
+    }
+
+    public void setIsJump(Integer isJump) {
+        this.isJump = isJump;
+    }
+
+    public Integer getJumpType() {
+        return jumpType;
+    }
+
+    public void setJumpType(Integer jumpType) {
+        this.jumpType = jumpType;
+    }
+
+    public String getJumpUrl() {
+        return jumpUrl;
+    }
+
+    public void setJumpUrl(String jumpUrl) {
+        this.jumpUrl = jumpUrl;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        return "AdvertisementWarpper{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", imgUrl='" + imgUrl + '\'' +
+                ", type=" + type +
+                ", isJump=" + isJump +
+                ", jumpType=" + jumpType +
+                ", jumpUrl='" + jumpUrl + '\'' +
+                ", content='" + content + '\'' +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BaseWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BaseWarpper.java
new file mode 100644
index 0000000..9394d0c
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BaseWarpper.java
@@ -0,0 +1,146 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 公共封装类
+ */
+@ApiModel("公共对象")
+public class BaseWarpper {
+    @ApiModelProperty("主键id")
+    private Integer id;
+    @ApiModelProperty("名称")
+    private String name;
+    @ApiModelProperty("内容")
+    private String content;
+    @ApiModelProperty("数量")
+    private Integer number;
+    @ApiModelProperty("总数量")
+    private Integer totalNumber;
+    @ApiModelProperty("金额")
+    private Double amount;
+    @ApiModelProperty("时长(分钟)")
+    private Integer minute;
+    @ApiModelProperty("经度")
+    private Double lon;
+    @ApiModelProperty("纬度")
+    private Double lat;
+
+    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 String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public Integer getTotalNumber() {
+        return totalNumber;
+    }
+
+    public void setTotalNumber(Integer totalNumber) {
+        this.totalNumber = totalNumber;
+    }
+
+    public Double getAmount() {
+        return amount;
+    }
+
+    public void setAmount(Double amount) {
+        this.amount = amount;
+    }
+
+    public Integer getMinute() {
+        return minute;
+    }
+
+    public void setMinute(Integer minute) {
+        this.minute = minute;
+    }
+
+    public Double getLon() {
+        return lon;
+    }
+
+    public void setLon(Double lon) {
+        this.lon = lon;
+    }
+
+    public Double getLat() {
+        return lat;
+    }
+
+    public void setLat(Double lat) {
+        this.lat = lat;
+    }
+
+    @Override
+    public String toString() {
+        return "BaseWarpper{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", content='" + content + '\'' +
+                ", number=" + number +
+                ", totalNumber=" + totalNumber +
+                ", amount=" + amount +
+                ", minute=" + minute +
+                ", lon=" + lon +
+                ", lat=" + lat +
+                '}';
+    }
+
+    public static BaseWarpper getBaseWarpper(Map<String, Object> map){
+        BaseWarpper baseWarpper = new BaseWarpper();
+        if(null != map){
+            baseWarpper.setId(null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : 0);
+            baseWarpper.setName(null != map.get("name") ? map.get("name").toString() : "");
+            baseWarpper.setContent(null != map.get("content") ? map.get("content").toString() : "");
+            baseWarpper.setNumber(null != map.get("number") ? Integer.valueOf(map.get("number").toString()) : 0);
+            baseWarpper.setTotalNumber(null != map.get("totalNumber") ? Integer.valueOf(map.get("totalNumber").toString()) : 0);
+            baseWarpper.setAmount(null != map.get("amount") ? Double.valueOf(map.get("amount").toString()) : 0);
+            baseWarpper.setMinute(null != map.get("minute") ? Integer.valueOf(map.get("minute").toString()) : 0);
+            baseWarpper.setLon(null != map.get("lon") ? Double.valueOf(map.get("lon").toString()) : 0);
+            baseWarpper.setLat(null != map.get("lat") ? Double.valueOf(map.get("lat").toString()) : 0);
+        }
+        return baseWarpper;
+    }
+
+    public static List<BaseWarpper> getBaseWarppers(List<Map<String, Object>> list){
+        List<BaseWarpper> data = new ArrayList<>();
+        if(null != list){
+            for(Map<String, Object> map : list){
+                data.add(BaseWarpper.getBaseWarpper(map));
+            }
+        }
+        return data;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/CouponWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/CouponWarpper.java
new file mode 100644
index 0000000..0ffad5a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/CouponWarpper.java
@@ -0,0 +1,124 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@ApiModel("优惠券列表")
+public class CouponWarpper {
+    @ApiModelProperty("主键id")
+    private Integer id;
+    @ApiModelProperty("优惠金额")
+    private Double money;
+    @ApiModelProperty("类型(0=通用,1=专车,2=出租车,3=城际,4=小件物流)")
+    private Integer userType;
+    @ApiModelProperty("有效期")
+    private String time;
+    @ApiModelProperty("优惠券类型(1=抵扣,2=满减)")
+    private Integer type;
+    @ApiModelProperty("满金额")
+    private Double fullMoney;
+    @ApiModelProperty("公司名称")
+    private String name;
+    @ApiModelProperty("状态(1=未使用,2=已使用,3=已过期)")
+    private Integer state;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public Integer getUserType() {
+        return userType;
+    }
+
+    public void setUserType(Integer userType) {
+        this.userType = userType;
+    }
+
+    public String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Double getFullMoney() {
+        return fullMoney;
+    }
+
+    public void setFullMoney(Double fullMoney) {
+        this.fullMoney = fullMoney;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    @Override
+    public String toString() {
+        return "CouponWarpper{" +
+                "id=" + id +
+                ", money=" + money +
+                ", userType=" + userType +
+                ", time='" + time + '\'' +
+                ", type=" + type +
+                ", fullMoney=" + fullMoney +
+                ", name='" + name + '\'' +
+                '}';
+    }
+
+    public static List<CouponWarpper> getCouponWarppers(List<Map<String, Object>> maps){
+        List<CouponWarpper> list = new ArrayList<>();
+        if(null != maps){
+            for(Map<String, Object> map : maps){
+                CouponWarpper couponWarpper = new CouponWarpper();
+                couponWarpper.setId(null != map.get("id") ? Integer.valueOf(String.valueOf(map.get("id"))) : 0);
+                couponWarpper.setMoney(null != map.get("money") ? Double.valueOf(String.valueOf(map.get("money"))) : 0);
+                couponWarpper.setUserType(null != map.get("userType") ? Integer.valueOf(String.valueOf(map.get("userType"))) : 0);
+                couponWarpper.setTime(null != map.get("time") ? String.valueOf(map.get("time")) : "");
+                couponWarpper.setType(null != map.get("type") ? Integer.valueOf(String.valueOf(map.get("type"))) : 0);
+                couponWarpper.setFullMoney(null != map.get("fullMoney") ? Double.valueOf(String.valueOf(map.get("fullMoney"))) : 0);
+                couponWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : "");
+                couponWarpper.setState(null != map.get("state") ? Integer.valueOf(String.valueOf(map.get("state"))) : 0);
+                list.add(couponWarpper);
+            }
+        }
+        return list;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DeptWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DeptWarpper.java
new file mode 100644
index 0000000..d1cb1a8
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DeptWarpper.java
@@ -0,0 +1,33 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
+import com.stylefeng.guns.core.util.ToolUtil;
+
+import java.util.Map;
+
+/**
+ * 部门列表的包装
+ *
+ * @author fengshuonan
+ * @date 2017年4月25日 18:10:31
+ */
+public class DeptWarpper extends BaseControllerWarpper {
+
+    public DeptWarpper(Object list) {
+        super(list);
+    }
+
+    @Override
+    public void warpTheMap(Map<String, Object> map) {
+
+        Integer pid = (Integer) map.get("pid");
+
+        if (ToolUtil.isEmpty(pid) || pid.equals(0)) {
+            map.put("pName", "--");
+        } else {
+            map.put("pName", ConstantFactory.me().getDeptName(pid));
+        }
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DictWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DictWarpper.java
new file mode 100644
index 0000000..c56a1e4
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DictWarpper.java
@@ -0,0 +1,36 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.modular.system.model.Dict;
+import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
+import com.stylefeng.guns.core.util.ToolUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 字典列表的包装
+ *
+ * @author fengshuonan
+ * @date 2017年4月25日 18:10:31
+ */
+public class DictWarpper extends BaseControllerWarpper {
+
+    public DictWarpper(Object list) {
+        super(list);
+    }
+
+    @Override
+    public void warpTheMap(Map<String, Object> map) {
+        StringBuffer detail = new StringBuffer();
+        Integer id = Integer.valueOf(map.get("id").toString());
+        List<Dict> dicts = ConstantFactory.me().findInDict(id);
+        if(dicts != null){
+            for (Dict dict : dicts) {
+                detail.append(dict.getCode() + ":" +dict.getName() + ",");
+            }
+            map.put("detail", ToolUtil.removeSuffix(detail.toString(),","));
+        }
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DriverInfoWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DriverInfoWarpper.java
new file mode 100644
index 0000000..83a7efc
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DriverInfoWarpper.java
@@ -0,0 +1,168 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@ApiModel("司机详情")
+public class DriverInfoWarpper {
+    @ApiModelProperty("主键")
+    private Integer id;
+    @ApiModelProperty("头像")
+    private String avatar;
+    @ApiModelProperty("姓名")
+    private String name;
+    @ApiModelProperty("电话")
+    private String phone;
+    @ApiModelProperty("身份证号")
+    private String idcode;
+    @ApiModelProperty("车牌")
+    private String licensePlate;
+    @ApiModelProperty("车辆颜色")
+    private String carColor;
+    @ApiModelProperty("车辆品牌")
+    private String brand;
+    @ApiModelProperty("订单数")
+    private Integer orderNum;
+    @ApiModelProperty("评分")
+    private Double fraction;
+    @ApiModelProperty("1=未上班,2=空闲,3=服务中")
+    private Integer state;
+    @ApiModelProperty("司机业务类型")
+    private List<JSONObject> list;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIdcode() {
+        return idcode;
+    }
+
+    public void setIdcode(String idcode) {
+        this.idcode = idcode;
+    }
+
+    public String getLicensePlate() {
+        return licensePlate;
+    }
+
+    public void setLicensePlate(String licensePlate) {
+        this.licensePlate = licensePlate;
+    }
+
+    public String getBrand() {
+        return brand;
+    }
+
+    public void setBrand(String brand) {
+        this.brand = brand;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public Double getFraction() {
+        return fraction;
+    }
+
+    public void setFraction(Double fraction) {
+        this.fraction = fraction;
+    }
+
+    public List<JSONObject> getList() {
+        return list;
+    }
+
+    public void setList(List<JSONObject> list) {
+        this.list = list;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public String getCarColor() {
+        return carColor;
+    }
+
+    public void setCarColor(String carColor) {
+        this.carColor = carColor;
+    }
+
+    @Override
+    public String toString() {
+        return "DriverInfoWarpper{" +
+                "id=" + id +
+                ", avatar='" + avatar + '\'' +
+                ", name='" + name + '\'' +
+                ", idcode='" + idcode + '\'' +
+                ", licensePlate='" + licensePlate + '\'' +
+                ", brand='" + brand + '\'' +
+                ", orderNum=" + orderNum +
+                ", fraction=" + fraction +
+                '}';
+    }
+
+    public static DriverInfoWarpper getDriverInfoWarpper(Map<String, Object> map){
+        DriverInfoWarpper driverInfoWarpper = new DriverInfoWarpper();
+        if(null != map){
+            driverInfoWarpper.setId(null != map.get("id") ? Integer.valueOf(String.valueOf(map.get("id"))) : 0);
+            driverInfoWarpper.setAvatar(null != map.get("avatar") ? String.valueOf(map.get("avatar")) : "");
+            driverInfoWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : "");
+            driverInfoWarpper.setPhone(null != map.get("phone") ? String.valueOf(map.get("phone")) : "");
+            driverInfoWarpper.setIdcode(null != map.get("idcode") ? String.valueOf(map.get("idcode")) : "");
+            driverInfoWarpper.setLicensePlate(null != map.get("licensePlate") ? String.valueOf(map.get("licensePlate")) : "");
+            driverInfoWarpper.setBrand(null != map.get("brand") ? String.valueOf(map.get("brand")) : "");
+            driverInfoWarpper.setOrderNum(null != map.get("orderNum") ? Integer.valueOf(String.valueOf(map.get("orderNum"))) : 0);
+            driverInfoWarpper.setFraction(null != map.get("fraction") ? Double.valueOf(String.valueOf(map.get("fraction"))) : 0);
+            driverInfoWarpper.setList(null != map.get("list") ? JSONArray.parseArray(JSON.toJSONString(map.get("list")), JSONObject.class) : new ArrayList<>());
+            driverInfoWarpper.setState(null != map.get("state") ? Integer.valueOf(String.valueOf(map.get("state"))) : 0);
+            driverInfoWarpper.setCarColor(null != map.get("carColor") ? String.valueOf(map.get("carColor")) : "");
+        }
+        return driverInfoWarpper;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/EndPushWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/EndPushWarpper.java
new file mode 100644
index 0000000..9cd1f31
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/EndPushWarpper.java
@@ -0,0 +1,47 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel("下单后无人接单提醒")
+public class EndPushWarpper {
+    @ApiModelProperty("订单id")
+    private Integer orderId = 0;
+    @ApiModelProperty("订单类型()")
+    private Integer orderType = 0;
+    @ApiModelProperty("状态(1=正在推单,2=无人接单)")
+    private Integer state = 0;
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(Integer orderType) {
+        this.orderType = orderType;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    @Override
+    public String toString() {
+        return "EndPushWarpper{" +
+                "orderId=" + orderId +
+                ", orderType=" + orderType +
+                ", state=" + state +
+                '}';
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/IntegralGoodsWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/IntegralGoodsWarpper.java
new file mode 100644
index 0000000..823289d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/IntegralGoodsWarpper.java
@@ -0,0 +1,84 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@ApiModel("积分商品")
+public class IntegralGoodsWarpper {
+    @ApiModelProperty("商品id")
+    private Integer id;
+    @ApiModelProperty("商品名称")
+    private String name;
+    @ApiModelProperty("商品图片")
+    private String url;
+    @ApiModelProperty("兑换积分")
+    private Integer integral;
+    @ApiModelProperty("商品说明")
+    private String instructions;
+
+    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 String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public Integer getIntegral() {
+        return integral;
+    }
+
+    public void setIntegral(Integer integral) {
+        this.integral = integral;
+    }
+
+    public String getInstructions() {
+        return instructions;
+    }
+
+    public void setInstructions(String instructions) {
+        this.instructions = instructions;
+    }
+
+    public static IntegralGoodsWarpper getIntegralGoodsWarpper(Map<String, Object> map){
+        IntegralGoodsWarpper integralGoodsWarpper = new IntegralGoodsWarpper();
+        if(null != map){
+            integralGoodsWarpper.setId(null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : 0);
+            integralGoodsWarpper.setName(null != map.get("name") ? map.get("name").toString() : "");
+            integralGoodsWarpper.setUrl(null != map.get("url") ? map.get("url").toString() : "");
+            integralGoodsWarpper.setIntegral(null != map.get("integral") ? Integer.valueOf(map.get("integral").toString()) : 0);
+            integralGoodsWarpper.setInstructions(null != map.get("instructions") ? map.get("instructions").toString() : "");
+        }
+        return integralGoodsWarpper;
+    }
+
+    public static List<IntegralGoodsWarpper> getIntegralGoodsWarppers(List<Map<String, Object>> maps){
+        List<IntegralGoodsWarpper> list = new ArrayList<>();
+        if(null != maps){
+            for(Map<String, Object> map : maps){
+                list.add(IntegralGoodsWarpper.getIntegralGoodsWarpper(map));
+            }
+        }
+        return list;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/IntegralOrderWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/IntegralOrderWarpper.java
new file mode 100644
index 0000000..54f215d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/IntegralOrderWarpper.java
@@ -0,0 +1,74 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@ApiModel("历史订单")
+public class IntegralOrderWarpper {
+    @ApiModelProperty("订单id")
+    private Integer id;
+    @ApiModelProperty("商品名称")
+    private String name;
+    @ApiModelProperty("兑换时间")
+    private String time;
+    @ApiModelProperty("兑换积分")
+    private String integral;
+
+    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 String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+    }
+
+    public String getIntegral() {
+        return integral;
+    }
+
+    public void setIntegral(String integral) {
+        this.integral = integral;
+    }
+
+
+    public static IntegralOrderWarpper getIntegralOrderWarpper(Map<String, Object> map){
+        IntegralOrderWarpper integralOrderWarpper = new IntegralOrderWarpper();
+        if(null != map){
+            integralOrderWarpper.setId(null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : 0);
+            integralOrderWarpper.setName(null != map.get("name") ? map.get("name").toString() : "");
+            integralOrderWarpper.setTime(null != map.get("time") ? map.get("time").toString() : "");
+            integralOrderWarpper.setIntegral(null != map.get("integral") ? map.get("integral").toString() : "");
+        }
+        return integralOrderWarpper;
+    }
+
+    public static List<IntegralOrderWarpper> getIntegralOrderWarppers(List<Map<String, Object>> maps){
+        List<IntegralOrderWarpper> list = new ArrayList<>();
+        if(null != maps){
+            for(Map<String, Object> map : maps){
+                list.add(IntegralOrderWarpper.getIntegralOrderWarpper(map));
+            }
+        }
+        return list;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/InvoiceWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/InvoiceWarpper.java
new file mode 100644
index 0000000..ec52c79
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/InvoiceWarpper.java
@@ -0,0 +1,104 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 发票
+ */
+@ApiModel("发票")
+public class InvoiceWarpper {
+    @ApiModelProperty("主键")
+    private Integer id;
+    @ApiModelProperty("申请时间")
+    private String insertTime;
+    @ApiModelProperty("发票类型说明")
+    private String type;
+    @ApiModelProperty("发票内容")
+    private String content;
+    @ApiModelProperty("开票状态(1=待开,2=已开,3=失败)")
+    private Integer state;
+    @ApiModelProperty("开票金额")
+    private Double money;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(String insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    @Override
+    public String toString() {
+        return "InvoiceWarpper{" +
+                "id=" + id +
+                ", insertTime='" + insertTime + '\'' +
+                ", type='" + type + '\'' +
+                ", content='" + content + '\'' +
+                ", state=" + state +
+                ", money=" + money +
+                '}';
+    }
+
+    public static List<InvoiceWarpper> getInvoiceWarpper(List<Map<String, Object>> maps){
+        List<InvoiceWarpper> list = new ArrayList<>();
+        if(null != maps){
+            for(Map<String, Object> map : maps){
+                InvoiceWarpper invoiceWarpper = new InvoiceWarpper();
+                invoiceWarpper.setId(null != map.get("id") ? Integer.valueOf(String.valueOf(map.get("id"))) : 0);
+                invoiceWarpper.setInsertTime(null != map.get("insertTime") ? String.valueOf(map.get("insertTime")) : "");
+                invoiceWarpper.setType(null != map.get("type") ? String.valueOf(map.get("type")) : "");
+                invoiceWarpper.setContent(null != map.get("content") ? String.valueOf(map.get("content")) : "");
+                invoiceWarpper.setState(null != map.get("state") ? Integer.valueOf(String.valueOf(map.get("state"))) : 0);
+                invoiceWarpper.setMoney(null != map.get("money") ? Double.valueOf(String.valueOf(map.get("money"))) : 0);
+                list.add(invoiceWarpper);
+            }
+        }
+        return list;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LogWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LogWarpper.java
new file mode 100644
index 0000000..6cf266b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LogWarpper.java
@@ -0,0 +1,44 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
+import com.stylefeng.guns.core.util.Contrast;
+import com.stylefeng.guns.core.util.ToolUtil;
+
+import java.util.Map;
+
+/**
+ * 日志列表的包装类
+ *
+ * @author fengshuonan
+ * @date 2017年4月5日22:56:24
+ */
+public class LogWarpper extends BaseControllerWarpper {
+
+    public LogWarpper(Object list) {
+        super(list);
+    }
+
+    @Override
+    public void warpTheMap(Map<String, Object> map) {
+        String message = (String) map.get("message");
+
+        Integer userid = (Integer) map.get("userid");
+        map.put("userName", ConstantFactory.me().getUserNameById(userid));
+
+        //如果信息过长,则只截取前100位字符串
+        if (ToolUtil.isNotEmpty(message) && message.length() >= 100) {
+            String subMessage = message.substring(0, 100) + "...";
+            map.put("message", subMessage);
+        }
+
+        //如果信息中包含分割符号;;;   则分割字符串返给前台
+        if (ToolUtil.isNotEmpty(message) && message.indexOf(Contrast.separator) != -1) {
+            String[] msgs = message.split(Contrast.separator);
+            map.put("regularMessage",msgs);
+        }else{
+            map.put("regularMessage",message);
+        }
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LoginWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LoginWarpper.java
new file mode 100644
index 0000000..a095cbf
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LoginWarpper.java
@@ -0,0 +1,68 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel("登录")
+public class LoginWarpper {
+    @ApiModelProperty("id")
+    private Integer id;
+    @ApiModelProperty("token")
+    private String token;
+    @ApiModelProperty("appid")
+    private String appid;
+    @ApiModelProperty("是否有手机号码(1=否,2=是)")
+    private Integer phone;
+    @ApiModelProperty("紧急联系人")
+    private String emergencyContact;
+    @ApiModelProperty("联系人电话")
+    private String emergencyContactNumber;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public String getAppid() {
+        return appid;
+    }
+
+    public void setAppid(String appid) {
+        this.appid = appid;
+    }
+
+    public Integer getPhone() {
+        return phone;
+    }
+
+    public void setPhone(Integer phone) {
+        this.phone = phone;
+    }
+
+    public String getEmergencyContact() {
+        return emergencyContact;
+    }
+
+    public void setEmergencyContact(String emergencyContact) {
+        this.emergencyContact = emergencyContact;
+    }
+
+    public String getEmergencyContactNumber() {
+        return emergencyContactNumber;
+    }
+
+    public void setEmergencyContactNumber(String emergencyContactNumber) {
+        this.emergencyContactNumber = emergencyContactNumber;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/MenuWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/MenuWarpper.java
new file mode 100644
index 0000000..3503f3e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/MenuWarpper.java
@@ -0,0 +1,28 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.core.constant.IsMenu;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 菜单列表的包装类
+ *
+ * @author fengshuonan
+ * @date 2017年2月19日15:07:29
+ */
+public class MenuWarpper extends BaseControllerWarpper {
+
+    public MenuWarpper(List<Map<String, Object>> list) {
+        super(list);
+    }
+
+    @Override
+    public void warpTheMap(Map<String, Object> map) {
+        map.put("statusName", ConstantFactory.me().getMenuStatusName((Integer) map.get("status")));
+        map.put("isMenuName", IsMenu.valueOf((Integer) map.get("ismenu")));
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/NoticeWrapper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/NoticeWrapper.java
new file mode 100644
index 0000000..6e5cc76
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/NoticeWrapper.java
@@ -0,0 +1,26 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
+
+import java.util.Map;
+
+/**
+ * 部门列表的包装
+ *
+ * @author fengshuonan
+ * @date 2017年4月25日 18:10:31
+ */
+public class NoticeWrapper extends BaseControllerWarpper {
+
+    public NoticeWrapper(Object list) {
+        super(list);
+    }
+
+    @Override
+    public void warpTheMap(Map<String, Object> map) {
+        Integer creater = (Integer) map.get("creater");
+        map.put("createrName", ConstantFactory.me().getUserNameById(creater));
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderDriverWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderDriverWarpper.java
new file mode 100644
index 0000000..9c72d33
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderDriverWarpper.java
@@ -0,0 +1,181 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Map;
+
+@ApiModel("订单中的司机")
+public class OrderDriverWarpper {
+    @ApiModelProperty("订单id")
+    private Integer orderId;
+    @ApiModelProperty("订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)")
+    private Integer state;
+    @ApiModelProperty("司机id")
+    private Integer driverId;
+    @ApiModelProperty("姓名")
+    private String name;
+    @ApiModelProperty("头像")
+    private String avatar;
+    @ApiModelProperty("电话")
+    private String phone;
+    @ApiModelProperty("车牌号")
+    private String carCode;
+    @ApiModelProperty("车辆品牌及颜色")
+    private String carName;
+    @ApiModelProperty("历史评分")
+    private Double score;
+    @ApiModelProperty("历史单数")
+    private Integer num;
+    @ApiModelProperty("出发时间")
+    private String time;
+    @ApiModelProperty("起点")
+    private String start;
+    @ApiModelProperty("终点")
+    private String end;
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Integer getDriverId() {
+        return driverId;
+    }
+
+    public void setDriverId(Integer driverId) {
+        this.driverId = driverId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getCarCode() {
+        return carCode;
+    }
+
+    public void setCarCode(String carCode) {
+        this.carCode = carCode;
+    }
+
+    public String getCarName() {
+        return carName;
+    }
+
+    public void setCarName(String carName) {
+        this.carName = carName;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    public String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+    }
+
+    public String getStart() {
+        return start;
+    }
+
+    public void setStart(String start) {
+        this.start = start;
+    }
+
+    public String getEnd() {
+        return end;
+    }
+
+    public void setEnd(String end) {
+        this.end = end;
+    }
+
+    @Override
+    public String toString() {
+        return "OrderDriverWarpper{" +
+                "orderId=" + orderId +
+                ", state=" + state +
+                ", driverId=" + driverId +
+                ", name='" + name + '\'' +
+                ", avatar='" + avatar + '\'' +
+                ", phone='" + phone + '\'' +
+                ", carCode='" + carCode + '\'' +
+                ", carName='" + carName + '\'' +
+                ", score=" + score +
+                ", num=" + num +
+                ", time='" + time + '\'' +
+                ", start='" + start + '\'' +
+                ", end='" + end + '\'' +
+                '}';
+    }
+
+
+    public static OrderDriverWarpper getOrderDriverWarpper(Map<String, Object> map){
+        OrderDriverWarpper orderDriverWarpper = new OrderDriverWarpper();
+        if(null != map){
+            orderDriverWarpper.setOrderId(null != map.get("orderId") ? Integer.valueOf(String.valueOf(map.get("orderId"))) : 0);
+            orderDriverWarpper.setState(null != map.get("state") ? Integer.valueOf(String.valueOf(map.get("state"))) : 0);
+            orderDriverWarpper.setDriverId(null != map.get("driverId") ? Integer.valueOf(String.valueOf(map.get("driverId"))) : 0);
+            orderDriverWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : "");
+            orderDriverWarpper.setAvatar(null != map.get("avatar") ? String.valueOf(map.get("avatar")) : "");
+            orderDriverWarpper.setPhone(null != map.get("phone") ? String.valueOf(map.get("phone")) : "");
+            orderDriverWarpper.setCarCode(null != map.get("carCode") ? String.valueOf(map.get("carCode")) : "");
+            orderDriverWarpper.setCarName(null != map.get("carName") ? String.valueOf(map.get("carName")) : "");
+            orderDriverWarpper.setScore(null != map.get("score") ? Double.valueOf(String.valueOf(map.get("score"))) : 0);
+            orderDriverWarpper.setNum(null != map.get("num") ? Integer.valueOf(String.valueOf(map.get("num"))) : 0);
+            orderDriverWarpper.setTime(null != map.get("time") ? String.valueOf(map.get("time")) : "");
+            orderDriverWarpper.setStart(null != map.get("start") ? String.valueOf(map.get("start")) : "");
+            orderDriverWarpper.setEnd(null != map.get("end") ? String.valueOf(map.get("end")) : "");
+        }
+        return orderDriverWarpper;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderEvaluateWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderEvaluateWarpper.java
new file mode 100644
index 0000000..f16fc2b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderEvaluateWarpper.java
@@ -0,0 +1,66 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@ApiModel("历史司机评价")
+public class OrderEvaluateWarpper {
+    @ApiModelProperty("评价时间")
+    private String time;
+    @ApiModelProperty("评价内容")
+    private String content;
+    @ApiModelProperty("评分")
+    private Double fraction;
+
+    public String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Double getFraction() {
+        return fraction;
+    }
+
+    public void setFraction(Double fraction) {
+        this.fraction = fraction;
+    }
+
+    @Override
+    public String toString() {
+        return "OrderEvaluateWarpper{" +
+                "time='" + time + '\'' +
+                ", content='" + content + '\'' +
+                ", fraction=" + fraction +
+                '}';
+    }
+
+
+    public static List<OrderEvaluateWarpper> getOrderEvaluateWarpper(List<Map<String, Object>> maps){
+        List<OrderEvaluateWarpper> list = new ArrayList<>();
+        if(null != maps){
+            for(Map<String, Object> map : maps){
+                OrderEvaluateWarpper orderEvaluateWarpper = new OrderEvaluateWarpper();
+                orderEvaluateWarpper.setTime(null != map.get("time") ? String.valueOf(map.get("time")) : "");
+                orderEvaluateWarpper.setContent(null != map.get("content") ? String.valueOf(map.get("content")) : "");
+                orderEvaluateWarpper.setFraction(null != map.get("fraction") ? Double.valueOf(String.valueOf(map.get("fraction"))) : 0);
+                list.add(orderEvaluateWarpper);
+            }
+        }
+        return list;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java
new file mode 100644
index 0000000..93ef99e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java
@@ -0,0 +1,716 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Map;
+
+@ApiModel("订单详情")
+public class OrderInfoWarpper {
+    @ApiModelProperty("订单id")
+    private Integer orderId;
+    @ApiModelProperty("订单类型(1=专车,2=出租车,3=跨城)")
+    private Integer orderType;
+    @ApiModelProperty("订单类型(1=普通订单,2=摆渡车)")
+    private Integer type;
+    @ApiModelProperty("订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)")
+    private Integer state;
+    @ApiModelProperty("下单时间")
+    private String insertTime;
+    @ApiModelProperty("出行时间")
+    private String travelTime;
+    @ApiModelProperty("出行时间(完整)")
+    private String travelTime1;
+    @ApiModelProperty("班次时间")
+    private String lineShiftTime;
+    @ApiModelProperty("到达预约点时间")
+    private String arriveTime;
+    @ApiModelProperty("起点经度")
+    private Double startLon;
+    @ApiModelProperty("起点纬度")
+    private Double startLat;
+    @ApiModelProperty("起点")
+    private String startAddress;
+    @ApiModelProperty("起点市")
+    private String startCity;
+    @ApiModelProperty("终点经度")
+    private Double endLon;
+    @ApiModelProperty("终点纬度")
+    private Double endLat;
+    @ApiModelProperty("终点")
+    private String endAddress;
+    @ApiModelProperty("终点市")
+    private String endCity;
+    @ApiModelProperty("司机id")
+    private Integer driverId;
+    @ApiModelProperty("司机头像")
+    private String driverAvatar;
+    @ApiModelProperty("司机名称")
+    private String driverName;
+    @ApiModelProperty("车牌")
+    private String licensePlate;
+    @ApiModelProperty("车辆品牌")
+    private String brand;
+    @ApiModelProperty("车辆颜色")
+    private String carColor;
+    @ApiModelProperty("司机评分")
+    private Double score;
+    @ApiModelProperty("历史单数")
+    private Integer orderNum;
+    @ApiModelProperty("司机电话")
+    private String driverPhone;
+    @ApiModelProperty("订单取消支付金额")
+    private Double cancelPayMoney;
+    @ApiModelProperty("取消单预支付id(支付的时候需要回传)")
+    private Integer cancelId;
+    @ApiModelProperty("订单总金额")
+    private Double orderMoney;
+    @ApiModelProperty("起步里程")
+    private Double startMoney;
+    @ApiModelProperty("起步价")
+    private Double startMileage;
+    @ApiModelProperty("里程数")
+    private Double mileage;
+    @ApiModelProperty("里程费")
+    private Double mileageMoney;
+    @ApiModelProperty("时长")
+    private Double duration;
+    @ApiModelProperty("时长费")
+    private Double durationMoney;
+    @ApiModelProperty("等待时长")
+    private Double wait;
+    @ApiModelProperty("等待费")
+    private Double waitMoney;
+    @ApiModelProperty("远途里程")
+    private Double longDistance;
+    @ApiModelProperty("远途费")
+    private Double longDistanceMoney;
+    @ApiModelProperty("行程费")
+    private Double travelMoney;
+    @ApiModelProperty("停车费")
+    private Double parkMoney;
+    @ApiModelProperty("过路费")
+    private Double roadTollMoney;
+    @ApiModelProperty("红包抵扣金额")
+    private Double redPacketMoney;
+    @ApiModelProperty("优惠券抵扣金额")
+    private Double couponMoney;
+    @ApiModelProperty("discount")
+    private Double discount;
+    @ApiModelProperty("折扣优惠金额")
+    private Double discountMoney;
+    @ApiModelProperty("订单支付金额")
+    private Double payMoney;
+    @ApiModelProperty("小费金额")
+    private Double tipMoney;
+    @ApiModelProperty("订单评分")
+    private Integer orderScore;
+    @ApiModelProperty("评价内容")
+    private String evaluate;
+    @ApiModelProperty("接单设备(1=APP,2=车载端)")
+    private Integer device;
+    @ApiModelProperty("出行人数")
+    private Integer peopleNumber;
+    @ApiModelProperty("座位号")
+    private String seatNumber;
+    @ApiModelProperty("取消方(1=用户,2=后台,3=调度)")
+    private Integer cancelUserType;
+    @ApiModelProperty("取消费用")
+    private Double cancelMoney;
+    @ApiModelProperty("取消原因")
+    private String cancelReason;
+    @ApiModelProperty("取消备注")
+    private String cancelRemark;
+    @ApiModelProperty("备注")
+    private String remark;
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(Integer orderType) {
+        this.orderType = orderType;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public String getTravelTime() {
+        return travelTime;
+    }
+
+    public void setTravelTime(String travelTime) {
+        this.travelTime = travelTime;
+    }
+
+    public String getStartAddress() {
+        return startAddress;
+    }
+
+    public void setStartAddress(String startAddress) {
+        this.startAddress = startAddress;
+    }
+
+    public String getEndAddress() {
+        return endAddress;
+    }
+
+    public void setEndAddress(String endAddress) {
+        this.endAddress = endAddress;
+    }
+
+    public Integer getDriverId() {
+        return driverId;
+    }
+
+    public void setDriverId(Integer driverId) {
+        this.driverId = driverId;
+    }
+
+    public String getDriverAvatar() {
+        return driverAvatar;
+    }
+
+    public void setDriverAvatar(String driverAvatar) {
+        this.driverAvatar = driverAvatar;
+    }
+
+    public String getDriverName() {
+        return driverName;
+    }
+
+    public void setDriverName(String driverName) {
+        this.driverName = driverName;
+    }
+
+    public String getLicensePlate() {
+        return licensePlate;
+    }
+
+    public void setLicensePlate(String licensePlate) {
+        this.licensePlate = licensePlate;
+    }
+
+    public String getBrand() {
+        return brand;
+    }
+
+    public void setBrand(String brand) {
+        this.brand = brand;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public String getDriverPhone() {
+        return driverPhone;
+    }
+
+    public void setDriverPhone(String driverPhone) {
+        this.driverPhone = driverPhone;
+    }
+
+    public Double getCancelPayMoney() {
+        return cancelPayMoney;
+    }
+
+    public void setCancelPayMoney(Double cancelPayMoney) {
+        this.cancelPayMoney = cancelPayMoney;
+    }
+
+    public Double getPayMoney() {
+        return payMoney;
+    }
+
+    public void setPayMoney(Double payMoney) {
+        this.payMoney = payMoney;
+    }
+
+    public Double getTipMoney() {
+        return tipMoney;
+    }
+
+    public void setTipMoney(Double tipMoney) {
+        this.tipMoney = tipMoney;
+    }
+
+    public Double getOrderMoney() {
+        return orderMoney;
+    }
+
+    public void setOrderMoney(Double orderMoney) {
+        this.orderMoney = orderMoney;
+    }
+
+    public Double getStartMoney() {
+        return startMoney;
+    }
+
+    public void setStartMoney(Double startMoney) {
+        this.startMoney = startMoney;
+    }
+
+    public Double getMileageMoney() {
+        return mileageMoney;
+    }
+
+    public void setMileageMoney(Double mileageMoney) {
+        this.mileageMoney = mileageMoney;
+    }
+
+    public Double getDurationMoney() {
+        return durationMoney;
+    }
+
+    public void setDurationMoney(Double durationMoney) {
+        this.durationMoney = durationMoney;
+    }
+
+    public Double getLongDistanceMoney() {
+        return longDistanceMoney;
+    }
+
+    public void setLongDistanceMoney(Double longDistanceMoney) {
+        this.longDistanceMoney = longDistanceMoney;
+    }
+
+    public String getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(String insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public String getArriveTime() {
+        return arriveTime;
+    }
+
+    public void setArriveTime(String arriveTime) {
+        this.arriveTime = arriveTime;
+    }
+
+    public Double getStartLon() {
+        return startLon;
+    }
+
+    public void setStartLon(Double startLon) {
+        this.startLon = startLon;
+    }
+
+    public Double getStartLat() {
+        return startLat;
+    }
+
+    public void setStartLat(Double startLat) {
+        this.startLat = startLat;
+    }
+
+    public Double getEndLon() {
+        return endLon;
+    }
+
+    public void setEndLon(Double endLon) {
+        this.endLon = endLon;
+    }
+
+    public Double getEndLat() {
+        return endLat;
+    }
+
+    public void setEndLat(Double endLat) {
+        this.endLat = endLat;
+    }
+
+    public Integer getOrderScore() {
+        return orderScore;
+    }
+
+    public void setOrderScore(Integer orderScore) {
+        this.orderScore = orderScore;
+    }
+
+    public String getEvaluate() {
+        return evaluate;
+    }
+
+    public void setEvaluate(String evaluate) {
+        this.evaluate = evaluate;
+    }
+
+    public String getCarColor() {
+        return carColor;
+    }
+
+    public void setCarColor(String carColor) {
+        this.carColor = carColor;
+    }
+
+    public Integer getCancelId() {
+        return cancelId;
+    }
+
+    public void setCancelId(Integer cancelId) {
+        this.cancelId = cancelId;
+    }
+
+    public Double getTravelMoney() {
+        return travelMoney;
+    }
+
+    public void setTravelMoney(Double travelMoney) {
+        this.travelMoney = travelMoney;
+    }
+
+    public Double getParkMoney() {
+        return parkMoney;
+    }
+
+    public void setParkMoney(Double parkMoney) {
+        this.parkMoney = parkMoney;
+    }
+
+    public Double getRoadTollMoney() {
+        return roadTollMoney;
+    }
+
+    public void setRoadTollMoney(Double roadTollMoney) {
+        this.roadTollMoney = roadTollMoney;
+    }
+
+    public Double getRedPacketMoney() {
+        return redPacketMoney;
+    }
+
+    public void setRedPacketMoney(Double redPacketMoney) {
+        this.redPacketMoney = redPacketMoney;
+    }
+
+    public Double getCouponMoney() {
+        return couponMoney;
+    }
+
+    public void setCouponMoney(Double couponMoney) {
+        this.couponMoney = couponMoney;
+    }
+
+    public Double getDiscountMoney() {
+        return discountMoney;
+    }
+
+    public void setDiscountMoney(Double discountMoney) {
+        this.discountMoney = discountMoney;
+    }
+
+    public Integer getDevice() {
+        return device;
+    }
+
+    public void setDevice(Integer device) {
+        this.device = device;
+    }
+
+    public Integer getPeopleNumber() {
+        return peopleNumber;
+    }
+
+    public void setPeopleNumber(Integer peopleNumber) {
+        this.peopleNumber = peopleNumber;
+    }
+
+    public String getSeatNumber() {
+        return seatNumber;
+    }
+
+    public void setSeatNumber(String seatNumber) {
+        this.seatNumber = seatNumber;
+    }
+
+    public Double getMileage() {
+        return mileage;
+    }
+
+    public void setMileage(Double mileage) {
+        this.mileage = mileage;
+    }
+
+    public Double getDuration() {
+        return duration;
+    }
+
+    public void setDuration(Double duration) {
+        this.duration = duration;
+    }
+
+    public Double getWait() {
+        return wait;
+    }
+
+    public void setWait(Double wait) {
+        this.wait = wait;
+    }
+
+    public Double getWaitMoney() {
+        return waitMoney;
+    }
+
+    public void setWaitMoney(Double waitMoney) {
+        this.waitMoney = waitMoney;
+    }
+
+    public Double getLongDistance() {
+        return longDistance;
+    }
+
+    public void setLongDistance(Double longDistance) {
+        this.longDistance = longDistance;
+    }
+
+    public Double getStartMileage() {
+        return startMileage;
+    }
+
+    public void setStartMileage(Double startMileage) {
+        this.startMileage = startMileage;
+    }
+
+    public String getTravelTime1() {
+        return travelTime1;
+    }
+
+    public void setTravelTime1(String travelTime1) {
+        this.travelTime1 = travelTime1;
+    }
+
+    public Double getDiscount() {
+        return discount;
+    }
+
+    public void setDiscount(Double discount) {
+        this.discount = discount;
+    }
+
+    public Integer getCancelUserType() {
+        return cancelUserType;
+    }
+
+    public void setCancelUserType(Integer cancelUserType) {
+        this.cancelUserType = cancelUserType;
+    }
+
+    public Double getCancelMoney() {
+        return cancelMoney;
+    }
+
+    public void setCancelMoney(Double cancelMoney) {
+        this.cancelMoney = cancelMoney;
+    }
+
+    public String getCancelReason() {
+        return cancelReason;
+    }
+
+    public void setCancelReason(String cancelReason) {
+        this.cancelReason = cancelReason;
+    }
+
+    public String getCancelRemark() {
+        return cancelRemark;
+    }
+
+    public void setCancelRemark(String cancelRemark) {
+        this.cancelRemark = cancelRemark;
+    }
+
+    public String getStartCity() {
+        return startCity;
+    }
+
+    public void setStartCity(String startCity) {
+        this.startCity = startCity;
+    }
+
+    public String getEndCity() {
+        return endCity;
+    }
+
+    public void setEndCity(String endCity) {
+        this.endCity = endCity;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getLineShiftTime() {
+        return lineShiftTime;
+    }
+
+    public void setLineShiftTime(String lineShiftTime) {
+        this.lineShiftTime = lineShiftTime;
+    }
+
+    @Override
+    public String toString() {
+        return "OrderInfoWarpper{" +
+                "orderId=" + orderId +
+                ", type=" + type +
+                ", state=" + state +
+                ", insertTime='" + insertTime + '\'' +
+                ", travelTime='" + travelTime + '\'' +
+                ", travelTime1='" + travelTime1 + '\'' +
+                ", arriveTime='" + arriveTime + '\'' +
+                ", startLon=" + startLon +
+                ", startLat=" + startLat +
+                ", startAddress='" + startAddress + '\'' +
+                ", startCity='" + startCity + '\'' +
+                ", endLon=" + endLon +
+                ", endLat=" + endLat +
+                ", endAddress='" + endAddress + '\'' +
+                ", endCity='" + endCity + '\'' +
+                ", driverId=" + driverId +
+                ", driverAvatar='" + driverAvatar + '\'' +
+                ", driverName='" + driverName + '\'' +
+                ", licensePlate='" + licensePlate + '\'' +
+                ", brand='" + brand + '\'' +
+                ", carColor='" + carColor + '\'' +
+                ", score=" + score +
+                ", orderNum=" + orderNum +
+                ", driverPhone='" + driverPhone + '\'' +
+                ", cancelPayMoney=" + cancelPayMoney +
+                ", cancelId=" + cancelId +
+                ", orderMoney=" + orderMoney +
+                ", startMoney=" + startMoney +
+                ", startMileage=" + startMileage +
+                ", mileage=" + mileage +
+                ", mileageMoney=" + mileageMoney +
+                ", duration=" + duration +
+                ", durationMoney=" + durationMoney +
+                ", wait=" + wait +
+                ", waitMoney=" + waitMoney +
+                ", longDistance=" + longDistance +
+                ", longDistanceMoney=" + longDistanceMoney +
+                ", travelMoney=" + travelMoney +
+                ", parkMoney=" + parkMoney +
+                ", roadTollMoney=" + roadTollMoney +
+                ", redPacketMoney=" + redPacketMoney +
+                ", couponMoney=" + couponMoney +
+                ", discount=" + discount +
+                ", discountMoney=" + discountMoney +
+                ", payMoney=" + payMoney +
+                ", tipMoney=" + tipMoney +
+                ", orderScore=" + orderScore +
+                ", evaluate='" + evaluate + '\'' +
+                ", device=" + device +
+                ", peopleNumber=" + peopleNumber +
+                ", seatNumber='" + seatNumber + '\'' +
+                ", cancelUserType=" + cancelUserType +
+                ", cancelMoney=" + cancelMoney +
+                ", cancelReason='" + cancelReason + '\'' +
+                ", cancelRemark='" + cancelRemark + '\'' +
+                '}';
+    }
+
+    public static OrderInfoWarpper getOrderInfoWarpper(Map<String, Object> map){
+        OrderInfoWarpper orderInfoWarpper = new OrderInfoWarpper();
+        if(null != map){
+            orderInfoWarpper.setOrderId(null != map.get("orderId") ? Integer.valueOf(String.valueOf(map.get("orderId"))) : 0);
+            orderInfoWarpper.setOrderType(null != map.get("orderType") ? Integer.valueOf(map.get("orderType").toString()) : 0);
+            orderInfoWarpper.setType(null != map.get("type") ? Integer.valueOf(map.get("type").toString()) : 0);
+            orderInfoWarpper.setState(null != map.get("state") ? Integer.valueOf(String.valueOf(map.get("state"))) : 0);
+            orderInfoWarpper.setTravelTime(null != map.get("travelTime") ? String.valueOf(map.get("travelTime")) : "");
+            orderInfoWarpper.setTravelTime1(null != map.get("travelTime1") ? String.valueOf(map.get("travelTime1")) : "");
+            orderInfoWarpper.setStartAddress(null != map.get("startAddress") ? String.valueOf(map.get("startAddress")) : "");
+            orderInfoWarpper.setEndAddress(null != map.get("endAddress") ? String.valueOf(map.get("endAddress")) : "");
+            orderInfoWarpper.setDriverId(null != map.get("driverId") ? Integer.valueOf(String.valueOf(map.get("driverId"))) : 0);
+            orderInfoWarpper.setDriverAvatar(null != map.get("driverAvatar") ? String.valueOf(map.get("driverAvatar")) : "");
+            orderInfoWarpper.setDriverName(null != map.get("driverName") ? String.valueOf(map.get("driverName")).substring(0, 1) + "师傅" : "");
+            orderInfoWarpper.setLicensePlate(null != map.get("licensePlate") ? String.valueOf(map.get("licensePlate")) : "");
+            orderInfoWarpper.setBrand(null != map.get("brand") ? String.valueOf(map.get("brand")) : "");
+            orderInfoWarpper.setScore(null != map.get("score") ? Double.valueOf(String.valueOf(map.get("score"))) : 0);
+            orderInfoWarpper.setOrderNum(null != map.get("orderNum") ? Integer.valueOf(String.valueOf(map.get("orderNum"))) : 0);
+            orderInfoWarpper.setDriverPhone(null != map.get("driverPhone") ? String.valueOf(map.get("driverPhone")) : "");
+            orderInfoWarpper.setCancelPayMoney(null != map.get("cancelPayMoney") ? Double.valueOf(String.valueOf(map.get("cancelPayMoney"))) : 0);
+            orderInfoWarpper.setPayMoney(null != map.get("payMoney") ? Double.valueOf(String.valueOf(map.get("payMoney"))) : 0);
+            orderInfoWarpper.setTipMoney(null != map.get("tipMoney") ? Double.valueOf(String.valueOf(map.get("tipMoney"))) : 0);
+            orderInfoWarpper.setOrderMoney(null != map.get("orderMoney") ? Double.valueOf(String.valueOf(map.get("orderMoney"))) : 0);
+            orderInfoWarpper.setStartMileage(null != map.get("startMileage") ? Double.valueOf(String.valueOf(map.get("startMileage"))) : 0);
+            orderInfoWarpper.setStartMoney(null != map.get("startMoney") ? Double.valueOf(String.valueOf(map.get("startMoney"))) : 0);
+            orderInfoWarpper.setMileage(null != map.get("mileageKilometers") ? Double.valueOf(String.valueOf(map.get("mileageKilometers"))) : 0);
+            orderInfoWarpper.setMileageMoney(null != map.get("mileageMoney") ? Double.valueOf(String.valueOf(map.get("mileageMoney"))) : 0);
+            orderInfoWarpper.setDuration(null != map.get("duration") ? Double.valueOf(String.valueOf(map.get("duration"))) : 0);
+            orderInfoWarpper.setDurationMoney(null != map.get("durationMoney") ? Double.valueOf(String.valueOf(map.get("durationMoney"))) : 0);
+            orderInfoWarpper.setWait(null != map.get("wait") ? Double.valueOf(String.valueOf(map.get("wait"))) : 0);
+            orderInfoWarpper.setWaitMoney(null != map.get("waitMoney") ? Double.valueOf(String.valueOf(map.get("waitMoney"))) : 0);
+            orderInfoWarpper.setLongDistance(null != map.get("longDistance") ? Double.valueOf(String.valueOf(map.get("longDistance"))) : 0);
+            orderInfoWarpper.setLongDistanceMoney(null != map.get("longDistanceMoney") ? Double.valueOf(String.valueOf(map.get("longDistanceMoney"))) : 0);
+            orderInfoWarpper.setInsertTime(null != map.get("insertTime") ? String.valueOf(map.get("insertTime")) : "");
+            orderInfoWarpper.setArriveTime(null != map.get("arriveTime") ? String.valueOf(map.get("arriveTime")) : "");
+            orderInfoWarpper.setStartLon(null != map.get("startLon") ? Double.valueOf(String.valueOf(map.get("startLon"))) : 0);
+            orderInfoWarpper.setStartLat(null != map.get("startLat") ? Double.valueOf(String.valueOf(map.get("startLat"))) : 0);
+            orderInfoWarpper.setEndLon(null != map.get("endLon") ? Double.valueOf(String.valueOf(map.get("endLon"))) : 0);
+            orderInfoWarpper.setEndLat(null != map.get("endLat") ? Double.valueOf(String.valueOf(map.get("endLat"))) : 0);
+            orderInfoWarpper.setOrderScore(null != map.get("orderScore") ? Double.valueOf(String.valueOf(map.get("orderScore"))).intValue() : 0);
+            orderInfoWarpper.setEvaluate(null != map.get("evaluate") ? String.valueOf(map.get("evaluate")) : "");
+            orderInfoWarpper.setCarColor(null != map.get("carColor") ? String.valueOf(map.get("carColor")) : "");
+            orderInfoWarpper.setCancelId(null != map.get("cancelId") ? Integer.valueOf(String.valueOf(map.get("cancelId"))) : 0);
+            orderInfoWarpper.setTravelMoney(null != map.get("travelMoney") ? Double.valueOf(String.valueOf(map.get("travelMoney"))) : 0);
+            orderInfoWarpper.setParkMoney(null != map.get("parkMoney") ? Double.valueOf(String.valueOf(map.get("parkMoney"))) : 0);
+            orderInfoWarpper.setRoadTollMoney(null != map.get("roadTollMoney") ? Double.valueOf(String.valueOf(map.get("roadTollMoney"))) : 0);
+            orderInfoWarpper.setRedPacketMoney(null != map.get("redPacketMoney") ? Double.valueOf(String.valueOf(map.get("redPacketMoney"))) : 0);
+            orderInfoWarpper.setCouponMoney(null != map.get("couponMoney") ? Double.valueOf(String.valueOf(map.get("couponMoney"))) : 0);
+            orderInfoWarpper.setDiscountMoney(null != map.get("discountMoney") ? Double.valueOf(String.valueOf(map.get("discountMoney"))) : 0);
+            orderInfoWarpper.setDevice(null != map.get("device") ? Integer.valueOf(String.valueOf(map.get("device"))) : 1);
+            orderInfoWarpper.setPeopleNumber(null != map.get("peopleNumber") ? Integer.valueOf(String.valueOf(map.get("peopleNumber"))) : 1);
+            orderInfoWarpper.setSeatNumber(null != map.get("seatNumber") ? String.valueOf(map.get("seatNumber")) : "");
+            orderInfoWarpper.setDiscount(null != map.get("discount") ? Double.valueOf(map.get("discount").toString()) : 0);
+            orderInfoWarpper.setCancelUserType(null != map.get("cancelUserType") ? Integer.valueOf(map.get("cancelUserType").toString()) : 0);
+            orderInfoWarpper.setCancelMoney(null != map.get("cancelMoney") ? Double.valueOf(map.get("cancelMoney").toString()) : 0);
+            orderInfoWarpper.setCancelReason(null != map.get("cancelReason") ? map.get("cancelReason").toString() : "");
+            orderInfoWarpper.setCancelRemark(null != map.get("cancelRemark") ? map.get("cancelRemark").toString() : "");
+            orderInfoWarpper.setStartCity(null != map.get("startCity") ? map.get("startCity").toString() : "");
+            orderInfoWarpper.setEndCity(null != map.get("endCity") ? map.get("endCity").toString() : "");
+            orderInfoWarpper.setRemark(null != map.get("remark") ? map.get("remark").toString() : "");
+            orderInfoWarpper.setLineShiftTime(null != map.get("lineShiftTime") ? map.get("lineShiftTime").toString() : "");
+        }
+        return orderInfoWarpper;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderServerWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderServerWarpper.java
new file mode 100644
index 0000000..a1432a7
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderServerWarpper.java
@@ -0,0 +1,128 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel("订单服务中的数据")
+public class OrderServerWarpper {
+    @ApiModelProperty("订单id")
+    private Integer orderId;
+    @ApiModelProperty("订单类型")
+    private Integer orderType;
+    @ApiModelProperty("司机位置经度")
+    private String lon;
+    @ApiModelProperty("司机位置纬度")
+    private String lat;
+    @ApiModelProperty("当前位置距离预约点的剩余里程")
+    private String reservationMileage;
+    @ApiModelProperty("当前位置距离预约点的剩余分钟")
+    private String reservationTime;
+    @ApiModelProperty("距离起点已经服务的里程")
+    private String servedMileage;
+    @ApiModelProperty("距离起点已经服务的时间")
+    private String servedTime;
+    @ApiModelProperty("距离终点剩余未服务的里程数")
+    private String laveMileage;
+    @ApiModelProperty("距离终端剩余未服务的预计时间")
+    private String laveTime;
+    @ApiModelProperty("订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)")
+    private Integer state;
+    @ApiModelProperty("订单改派状态(0=未改派,1=改派中,2=已改派)")
+    private Integer reassignNotice;
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(Integer orderType) {
+        this.orderType = orderType;
+    }
+
+    public String getLon() {
+        return lon;
+    }
+
+    public void setLon(String lon) {
+        this.lon = lon;
+    }
+
+    public String getLat() {
+        return lat;
+    }
+
+    public void setLat(String lat) {
+        this.lat = lat;
+    }
+
+    public String getReservationMileage() {
+        return reservationMileage;
+    }
+
+    public void setReservationMileage(String reservationMileage) {
+        this.reservationMileage = reservationMileage;
+    }
+
+    public String getReservationTime() {
+        return reservationTime;
+    }
+
+    public void setReservationTime(String reservationTime) {
+        this.reservationTime = reservationTime;
+    }
+
+    public String getServedMileage() {
+        return servedMileage;
+    }
+
+    public void setServedMileage(String servedMileage) {
+        this.servedMileage = servedMileage;
+    }
+
+    public String getServedTime() {
+        return servedTime;
+    }
+
+    public void setServedTime(String servedTime) {
+        this.servedTime = servedTime;
+    }
+
+    public String getLaveMileage() {
+        return laveMileage;
+    }
+
+    public void setLaveMileage(String laveMileage) {
+        this.laveMileage = laveMileage;
+    }
+
+    public String getLaveTime() {
+        return laveTime;
+    }
+
+    public void setLaveTime(String laveTime) {
+        this.laveTime = laveTime;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Integer getReassignNotice() {
+        return reassignNotice;
+    }
+
+    public void setReassignNotice(Integer reassignNotice) {
+        this.reassignNotice = reassignNotice;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderStatusWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderStatusWarpper.java
new file mode 100644
index 0000000..29f3c8a
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderStatusWarpper.java
@@ -0,0 +1,38 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel("订单状态")
+public class OrderStatusWarpper {
+    @ApiModelProperty("订单id")
+    private Integer orderId;
+    @ApiModelProperty("订单类型")
+    private Integer orderType;
+    @ApiModelProperty("订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)")
+    private Integer state;
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(Integer orderType) {
+        this.orderType = orderType;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java
new file mode 100644
index 0000000..5f5c55b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java
@@ -0,0 +1,267 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 订单(综合)
+ */
+@ApiModel("订单列表")
+public class OrderWarpper  implements Comparable {
+    @ApiModelProperty("订单id")
+    private Integer orderId;
+    @ApiModelProperty("订单日期")
+    private String orderTime;
+    @ApiModelProperty("出行时间/(小件物流的取货时间)")
+    private String time;
+    @ApiModelProperty("起点名称")
+    private String startAddress;
+    @ApiModelProperty("终点名称")
+    private String endAddress;
+    @ApiModelProperty("人数")
+    private Integer num;
+    @ApiModelProperty("司机id")
+    private Integer driverId;
+    @ApiModelProperty("订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)<br/>" +
+            "小件物流订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待取货,5=送货中,6=已送达,7=待支付,8=需补差价,9=已取货,10=已取消,11=已支付差价")
+    private Integer state;
+    @ApiModelProperty("货物类型(小件物流)")
+    private String cargoType;
+    @ApiModelProperty("用车时长")
+    private Integer carTime;
+    @ApiModelProperty("车型")
+    private String serverCarModel;
+    @ApiModelProperty("订单金额")
+    private Double orderMoney;
+    @ApiModelProperty("支付金额")
+    private Double payMoney;
+    @ApiModelProperty("差价金额")
+    private Double differenceMoney;
+    @ApiModelProperty("开票状态(1=未开票,2=已开票)")
+    private Integer invoice;
+    @ApiModelProperty("订单名称")
+    private String orderName;
+    @ApiModelProperty("订单类型(1=专车,2=出租车,3=跨城出行,4=同城小件物流,5=跨城小件物流)")
+    private Integer orderType;
+    private Long insertTime;
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public String getOrderTime() {
+        return orderTime;
+    }
+
+    public void setOrderTime(String orderTime) {
+        this.orderTime = orderTime;
+    }
+
+    public String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+    }
+
+    public String getStartAddress() {
+        return startAddress;
+    }
+
+    public void setStartAddress(String startAddress) {
+        this.startAddress = startAddress;
+    }
+
+    public String getEndAddress() {
+        return endAddress;
+    }
+
+    public void setEndAddress(String endAddress) {
+        this.endAddress = endAddress;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Double getPayMoney() {
+        return payMoney;
+    }
+
+    public void setPayMoney(Double payMoney) {
+        this.payMoney = payMoney;
+    }
+
+    public Integer getInvoice() {
+        return invoice;
+    }
+
+    public void setInvoice(Integer invoice) {
+        this.invoice = invoice;
+    }
+
+    public String getOrderName() {
+        return orderName;
+    }
+
+    public void setOrderName(String orderName) {
+        this.orderName = orderName;
+    }
+
+    public Long getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Long insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Integer getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(Integer orderType) {
+        this.orderType = orderType;
+    }
+
+    public Integer getDriverId() {
+        return driverId;
+    }
+
+    public void setDriverId(Integer driverId) {
+        this.driverId = driverId;
+    }
+
+    public String getCargoType() {
+        return cargoType;
+    }
+
+    public void setCargoType(String cargoType) {
+        this.cargoType = cargoType;
+    }
+
+    public Integer getCarTime() {
+        return carTime;
+    }
+
+    public void setCarTime(Integer carTime) {
+        this.carTime = carTime;
+    }
+
+    public String getServerCarModel() {
+        return serverCarModel;
+    }
+
+    public void setServerCarModel(String serverCarModel) {
+        this.serverCarModel = serverCarModel;
+    }
+
+    public Double getOrderMoney() {
+        return orderMoney;
+    }
+
+    public void setOrderMoney(Double orderMoney) {
+        this.orderMoney = orderMoney;
+    }
+
+    public Double getDifferenceMoney() {
+        return differenceMoney;
+    }
+
+    public void setDifferenceMoney(Double differenceMoney) {
+        this.differenceMoney = differenceMoney;
+    }
+
+    @Override
+    public String toString() {
+        return "OrderWarpper{" +
+                "orderId=" + orderId +
+                ", orderTime='" + orderTime + '\'' +
+                ", time='" + time + '\'' +
+                ", startAddress='" + startAddress + '\'' +
+                ", endAddress='" + endAddress + '\'' +
+                ", num=" + num +
+                ", driverId=" + driverId +
+                ", state=" + state +
+                ", cargoType='" + cargoType + '\'' +
+                ", carTime=" + carTime +
+                ", serverCarModel='" + serverCarModel + '\'' +
+                ", payMoney=" + payMoney +
+                ", invoice=" + invoice +
+                ", orderName='" + orderName + '\'' +
+                ", orderType=" + orderType +
+                ", insertTime=" + insertTime +
+                '}';
+    }
+
+    public static List<OrderWarpper> getOrderWarpper(List<Map<String, Object>> maps){
+        List<OrderWarpper> list = new ArrayList<>();
+        if(null != maps){
+            for(Map<String, Object> map : maps){
+                OrderWarpper orderWarpper = new OrderWarpper();
+                orderWarpper.setOrderId(null != map.get("orderId") ? Integer.valueOf(String.valueOf(map.get("orderId"))) : 0);
+                orderWarpper.setOrderTime(null != map.get("orderTime") ? String.valueOf(map.get("orderTime")) : "");
+                orderWarpper.setTime(null != map.get("time") ? String.valueOf(map.get("time")) : "");
+                orderWarpper.setStartAddress(null != map.get("startAddress") ? String.valueOf(map.get("startAddress")) : "");
+                orderWarpper.setEndAddress(null != map.get("endAddress") ? String.valueOf(map.get("endAddress")) : "");
+                orderWarpper.setNum(null != map.get("num") ? Integer.valueOf(String.valueOf(map.get("num"))) : 0);
+                orderWarpper.setState(null != map.get("state") ? Integer.valueOf(String.valueOf(map.get("state"))) : 0);
+                orderWarpper.setOrderMoney(null != map.get("orderMoney") ? Double.valueOf(String.valueOf(map.get("orderMoney"))) : 0);
+                orderWarpper.setPayMoney(null != map.get("payMoney") ? Double.valueOf(String.valueOf(map.get("payMoney"))) : 0);
+                orderWarpper.setInvoice(null != map.get("invoice") ? Integer.valueOf(String.valueOf(map.get("invoice"))) : 0);
+                orderWarpper.setOrderName(null != map.get("orderName") ? String.valueOf(map.get("orderName")) : "");
+                orderWarpper.setInsertTime(null != map.get("insertTime") ? Long.valueOf(String.valueOf(map.get("insertTime"))) : 0);
+                orderWarpper.setOrderType(null != map.get("orderType") ? Integer.valueOf(String.valueOf(map.get("orderType"))) : 0);
+                orderWarpper.setDriverId(null != map.get("driverId") ? Integer.valueOf(String.valueOf(map.get("driverId"))) : 0);
+                orderWarpper.setCargoType(null != map.get("cargoType") ? String.valueOf(map.get("cargoType")) : "");
+                orderWarpper.setCarTime(null != map.get("carTime") ? Integer.valueOf(String.valueOf(map.get("carTime"))) : 0);
+                orderWarpper.setServerCarModel(null != map.get("serverCarModel") ? String.valueOf(map.get("serverCarModel")) : "");
+                orderWarpper.setDifferenceMoney(null != map.get("differenceMoney") ? Double.valueOf(map.get("differenceMoney").toString()) : 0D);
+                list.add(orderWarpper);
+            }
+        }
+        Collections.sort(list);
+        return list;
+    }
+
+    @Override
+    public int compareTo(Object o) {
+        if (o instanceof OrderWarpper) {
+            OrderWarpper s = (OrderWarpper) o;
+            if(this.insertTime == null || s.insertTime == null){
+                return -1;
+            }
+            if (this.insertTime > s.insertTime) {
+                return -1;
+            } else if (this.insertTime == s.insertTime) {
+                return 0;
+            } else {
+                return 1;
+            }
+        }
+        return 0;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ProblemWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ProblemWarpper.java
new file mode 100644
index 0000000..9c34d3d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ProblemWarpper.java
@@ -0,0 +1,78 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@ApiModel("客服留言")
+public class ProblemWarpper {
+    @ApiModelProperty("主键")
+    private Integer id;
+    @ApiModelProperty("留言时间")
+    private String insertTime;
+    @ApiModelProperty("留言内容")
+    private String content;
+    @ApiModelProperty("回复内容")
+    private String answer;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(String insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+
+    @Override
+    public String toString() {
+        return "ProblemWarpper{" +
+                "id=" + id +
+                ", insertTime='" + insertTime + '\'' +
+                ", content='" + content + '\'' +
+                ", answer='" + answer + '\'' +
+                '}';
+    }
+
+
+    public static List<ProblemWarpper> getProblemWarpper(List<Map<String, Object>> maps){
+        List<ProblemWarpper> list = new ArrayList<>();
+        if(null != maps){
+            for(Map<String, Object> map : maps) {
+                ProblemWarpper problemWarpper = new ProblemWarpper();
+                problemWarpper.setId(null != map.get("id") ? Integer.valueOf(String.valueOf(map.get("id"))) : 0);
+                problemWarpper.setInsertTime(null != map.get("insertTime") ? String.valueOf(map.get("insertTime")) : "");
+                problemWarpper.setContent(null != map.get("content") ? String.valueOf(map.get("content")) : "");
+                problemWarpper.setAnswer(null != map.get("answer") ? String.valueOf(map.get("answer")) : "");
+                list.add(problemWarpper);
+            }
+        }
+        return list;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/RoleWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/RoleWarpper.java
new file mode 100644
index 0000000..172961b
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/RoleWarpper.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 角色列表的包装类
+ *
+ * @author fengshuonan
+ * @date 2017年2月19日10:59:02
+ */
+public class RoleWarpper extends BaseControllerWarpper {
+
+    public RoleWarpper(List<Map<String, Object>> list) {
+        super(list);
+    }
+
+    @Override
+    public void warpTheMap(Map<String, Object> map) {
+        map.put("pName", ConstantFactory.me().getSingleRoleName((Integer) map.get("pid")));
+        map.put("deptName", ConstantFactory.me().getDeptName((Integer) map.get("deptid")));
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ServerCarModelWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ServerCarModelWarpper.java
new file mode 100644
index 0000000..66ff9f4
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ServerCarModelWarpper.java
@@ -0,0 +1,121 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@ApiModel("服务车型")
+public class ServerCarModelWarpper {
+    @ApiModelProperty("车型id")
+    private Integer id;
+    @ApiModelProperty("车型名称")
+    private String name;
+    @ApiModelProperty("车型照片")
+    private String img;
+    @ApiModelProperty("预估金额")
+    private Double amount;
+    @ApiModelProperty("包车的价格")
+    private String price;
+    @ApiModelProperty("预估里程(公里)")
+    private Double mileage;
+    @ApiModelProperty("预估时间(分钟)")
+    private Double duration;
+
+    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 String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+
+    public Double getAmount() {
+        return amount;
+    }
+
+    public void setAmount(Double amount) {
+        this.amount = amount;
+    }
+
+    public String getPrice() {
+        return price;
+    }
+
+    public void setPrice(String price) {
+        this.price = price;
+    }
+
+    public Double getMileage() {
+        return mileage;
+    }
+
+    public void setMileage(Double mileage) {
+        this.mileage = mileage;
+    }
+
+    public Double getDuration() {
+        return duration;
+    }
+
+    public void setDuration(Double duration) {
+        this.duration = duration;
+    }
+
+    @Override
+    public String toString() {
+        return "ServerCarModelWarpper{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", img='" + img + '\'' +
+                ", amount=" + amount +
+                ", price='" + price + '\'' +
+                ", mileage=" + mileage +
+                ", duration=" + duration +
+                '}';
+    }
+
+    public static ServerCarModelWarpper getServerCarModelWarpper(Map<String, Object> map){
+        ServerCarModelWarpper serverCarModelWarpper = new ServerCarModelWarpper();
+        if(null != map){
+            serverCarModelWarpper.setId(null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : 0);
+            serverCarModelWarpper.setName(null != map.get("name") ? map.get("name").toString() : "");
+            serverCarModelWarpper.setImg(null != map.get("img") ? map.get("img").toString() : "");
+            serverCarModelWarpper.setAmount(null != map.get("amount") ? Double.valueOf(map.get("amount").toString()) : 0);
+            serverCarModelWarpper.setPrice(null != map.get("price") ? map.get("price").toString() : "");
+            serverCarModelWarpper.setMileage(null != map.get("mileage") ? Double.valueOf(map.get("mileage").toString()) : 0);
+            serverCarModelWarpper.setDuration(null != map.get("duration") ? Double.valueOf(map.get("duration").toString()) : 0);
+        }
+        return serverCarModelWarpper;
+    }
+
+
+    public static List<ServerCarModelWarpper>getServerCarModelWarppers(List<Map<String, Object>> list){
+        List<ServerCarModelWarpper> data = new ArrayList<>();
+        if(null != list){
+            for(Map<String, Object> map : list){
+                data.add(ServerCarModelWarpper.getServerCarModelWarpper(map));
+            }
+        }
+        return data;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/SystemNoticeWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/SystemNoticeWarpper.java
new file mode 100644
index 0000000..31a6974
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/SystemNoticeWarpper.java
@@ -0,0 +1,124 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@ApiModel("消息类表")
+public class SystemNoticeWarpper {
+    @ApiModelProperty("主键")
+    private Integer id;
+    @ApiModelProperty("类型(1=公告,2=系统消息)")
+    private Integer type;
+    @ApiModelProperty("标题")
+    private String title;
+    @ApiModelProperty("内容")
+    private String content;
+    @ApiModelProperty("图片")
+    private String img;
+    @ApiModelProperty("时间")
+    private String time;
+    @ApiModelProperty("阅读状态(1=未读,2=已读)")
+    private Integer read;
+    @ApiModelProperty("消息类型(1=打车业务,2=优惠券)")
+    private Integer noticeType;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+
+    public String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+    }
+
+    public Integer getRead() {
+        return read;
+    }
+
+    public void setRead(Integer read) {
+        this.read = read;
+    }
+
+    public Integer getNoticeType() {
+        return noticeType;
+    }
+
+    public void setNoticeType(Integer noticeType) {
+        this.noticeType = noticeType;
+    }
+
+    @Override
+    public String toString() {
+        return "SystemNoticeWarpper{" +
+                "id=" + id +
+                ", type=" + type +
+                ", title='" + title + '\'' +
+                ", content='" + content + '\'' +
+                ", img='" + img + '\'' +
+                ", time='" + time + '\'' +
+                '}';
+    }
+
+
+    public static List<SystemNoticeWarpper> getSystemNoticeWarpper(List<Map<String, Object>> maps){
+        List<SystemNoticeWarpper> list = new ArrayList<>();
+        if(null != maps){
+            for(Map<String, Object> map : maps){
+                SystemNoticeWarpper systemNoticeWarpper = new SystemNoticeWarpper();
+                systemNoticeWarpper.setId(null != map.get("id") ? Integer.valueOf(String.valueOf(map.get("id"))) : 0);
+                systemNoticeWarpper.setType(null != map.get("type") ? Integer.valueOf(String.valueOf(map.get("type"))) : 0);
+                systemNoticeWarpper.setTitle(null != map.get("title") ? String.valueOf(map.get("title")) : "");
+                systemNoticeWarpper.setContent(null != map.get("content") ? String.valueOf(map.get("content")) : "");
+                systemNoticeWarpper.setImg(null != map.get("img") ? String.valueOf(map.get("img")) : "");
+                systemNoticeWarpper.setTime(null != map.get("time") ? String.valueOf(map.get("time")) : "");
+                systemNoticeWarpper.setRead(null != map.get("read") ? Integer.valueOf(String.valueOf(map.get("read"))) : 0);
+                systemNoticeWarpper.setNoticeType(null != map.get("noticeType") ? Integer.valueOf(String.valueOf(map.get("noticeType"))) : 1);
+                list.add(systemNoticeWarpper);
+            }
+        }
+        return list;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/TNoticeWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/TNoticeWarpper.java
new file mode 100644
index 0000000..bfd91fc
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/TNoticeWarpper.java
@@ -0,0 +1,78 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import com.stylefeng.guns.modular.system.model.TNotices;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@ApiModel("公告")
+public class TNoticeWarpper {
+    @ApiModelProperty("主键")
+    private Integer id;
+    @ApiModelProperty("标题")
+    private String title;
+    @ApiModelProperty("内容")
+    private String content;
+    @ApiModelProperty("图片地址")
+    private String imgUrl;
+    @ApiModelProperty("发布时间")
+    private Long insertTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getImgUrl() {
+        return imgUrl;
+    }
+
+    public void setImgUrl(String imgUrl) {
+        this.imgUrl = imgUrl;
+    }
+
+    public Long getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Long insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public static List<TNoticeWarpper> getTNoticeWarppers(List<TNotices> notices){
+        List<TNoticeWarpper> list = new ArrayList<>();
+        if(null != notices){
+            for(TNotices t : notices){
+                TNoticeWarpper noticeWarpper = new TNoticeWarpper();
+                noticeWarpper.setId(t.getId());
+                noticeWarpper.setTitle(t.getTitle());
+                noticeWarpper.setContent(t.getContent());
+                noticeWarpper.setImgUrl(t.getImgUrl());
+                noticeWarpper.setInsertTime(t.getInsertTime().getTime());
+                list.add(noticeWarpper);
+            }
+        }
+        return list;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/TravelRecordWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/TravelRecordWarpper.java
new file mode 100644
index 0000000..073f84f
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/TravelRecordWarpper.java
@@ -0,0 +1,101 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 个人中心消费记录列表
+ */
+@ApiModel("消费记录")
+public class TravelRecordWarpper implements Comparable {
+    @ApiModelProperty("金额")
+    private Double money;
+    @ApiModelProperty("时间")
+    private String time;
+    @ApiModelProperty("订单名称")
+    private String name;
+    private Long insertTime;
+
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Long getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Long insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    @Override
+    public String toString() {
+        return "TravelRecordWarpper{" +
+                "money=" + money +
+                ", time='" + time + '\'' +
+                ", name='" + name + '\'' +
+                ", insertTime=" + insertTime +
+                '}';
+    }
+
+
+    public static List<TravelRecordWarpper> getTravelRecordWarpper(List<Map<String, Object>> maps){
+        List<TravelRecordWarpper> list = new ArrayList<>();
+        if(null != maps){
+            for(Map<String, Object> map : maps){
+                TravelRecordWarpper travelRecordWarpper = new TravelRecordWarpper();
+                travelRecordWarpper.setMoney(null != map.get("money") ? Double.valueOf(String.valueOf(map.get("money"))) : 0);
+                travelRecordWarpper.setTime(null != map.get("time") ? String.valueOf(map.get("time")) : "");
+                travelRecordWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : "");
+                travelRecordWarpper.setInsertTime(null != map.get("insertTime") ? Long.valueOf(String.valueOf(map.get("insertTime"))) : 0);
+                list.add(travelRecordWarpper);
+            }
+        }
+        Collections.sort(list);
+        return list;
+    }
+
+    @Override
+    public int compareTo(Object o) {
+        if (o instanceof TravelRecordWarpper) {
+            TravelRecordWarpper s = (TravelRecordWarpper) o;
+            if(this.insertTime == null || s.insertTime == null){
+                return -1;
+            }
+            if (this.insertTime > s.insertTime) {
+                return -1;
+            } else if (this.insertTime == s.insertTime) {
+                return 0;
+            } else {
+                return 1;
+            }
+        }
+        return 0;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/UserInfoWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/UserInfoWarpper.java
new file mode 100644
index 0000000..2c27096
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/UserInfoWarpper.java
@@ -0,0 +1,183 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import com.stylefeng.guns.modular.system.model.UserInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Map;
+
+/**
+ * 用户信息
+ */
+@ApiModel("用户信息")
+public class UserInfoWarpper {
+    @ApiModelProperty("主键")
+    private Integer id;
+    @ApiModelProperty("姓名")
+    private String name;
+    @ApiModelProperty("昵称")
+    private String nickName;
+    @ApiModelProperty("电话")
+    private String phone;
+    @ApiModelProperty("是否实名(1:否,2:是)")
+    private Integer isAuth;
+    @ApiModelProperty("实名认证状态(1=待认证,2=认证通过,3=认证失败)")
+    private Integer verified;
+    @ApiModelProperty("头像")
+    private String avatar;
+    @ApiModelProperty("性别(1=男,2=女)")
+    private Integer sex;
+    @ApiModelProperty("生日")
+    private String birthday;
+    @ApiModelProperty("积分")
+    private Integer integral;
+    @ApiModelProperty("账户余额")
+    private Double balance;
+    @ApiModelProperty("紧急联系人姓名")
+    private String emergencyContact;
+    @ApiModelProperty("紧急联系人电话")
+    private String emergencyContactNumber;
+
+    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 String getNickName() {
+        return nickName;
+    }
+
+    public void setNickName(String nickName) {
+        this.nickName = nickName;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public Integer getIsAuth() {
+        return isAuth;
+    }
+
+    public void setIsAuth(Integer isAuth) {
+        this.isAuth = isAuth;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public Integer getSex() {
+        return sex;
+    }
+
+    public void setSex(Integer sex) {
+        this.sex = sex;
+    }
+
+    public String getBirthday() {
+        return birthday;
+    }
+
+    public void setBirthday(String birthday) {
+        this.birthday = birthday;
+    }
+
+    public Integer getIntegral() {
+        return integral;
+    }
+
+    public void setIntegral(Integer integral) {
+        this.integral = integral;
+    }
+
+    public Integer getVerified() {
+        return verified;
+    }
+
+    public void setVerified(Integer verified) {
+        this.verified = verified;
+    }
+
+    public String getEmergencyContact() {
+        return emergencyContact;
+    }
+
+    public void setEmergencyContact(String emergencyContact) {
+        this.emergencyContact = emergencyContact;
+    }
+
+    public String getEmergencyContactNumber() {
+        return emergencyContactNumber;
+    }
+
+    public void setEmergencyContactNumber(String emergencyContactNumber) {
+        this.emergencyContactNumber = emergencyContactNumber;
+    }
+
+    public Double getBalance() {
+        return balance;
+    }
+
+    public void setBalance(Double balance) {
+        this.balance = balance;
+    }
+
+    @Override
+    public String toString() {
+        return "UserInfoWarpper{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", nickName='" + nickName + '\'' +
+                ", phone='" + phone + '\'' +
+                ", isAuth=" + isAuth +
+                ", verified=" + verified +
+                ", avatar='" + avatar + '\'' +
+                ", sex=" + sex +
+                ", birthday='" + birthday + '\'' +
+                ", integral=" + integral +
+                ", balance=" + balance +
+                ", emergencyContact='" + emergencyContact + '\'' +
+                ", emergencyContactNumber='" + emergencyContactNumber + '\'' +
+                '}';
+    }
+
+    public static UserInfoWarpper getUserInfoWarpper(Map<String, Object> map){
+        UserInfoWarpper userInfoWarpper = new UserInfoWarpper();
+        if (null != map) {
+            userInfoWarpper.setId(null != map.get("id")  ? Integer.valueOf(String.valueOf(map.get("id"))) : null);
+            userInfoWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : "");
+            userInfoWarpper.setNickName(null != map.get("nickName") ? String.valueOf(map.get("nickName")) : "");
+            userInfoWarpper.setPhone(null != map.get("phone") ? String.valueOf(map.get("phone")) : "");
+            userInfoWarpper.setIsAuth(null != map.get("isAuth") ? Integer.valueOf(String.valueOf(map.get("isAuth"))) : null);
+            userInfoWarpper.setAvatar(null != map.get("avatar") ? String.valueOf(map.get("avatar")) : "");
+            userInfoWarpper.setSex(null != map.get("sex") ? Integer.valueOf(String.valueOf(map.get("sex"))) : null);
+            userInfoWarpper.setBirthday(null != map.get("birthday") ? String.valueOf(map.get("birthday")) : "");
+            userInfoWarpper.setIntegral(null != map.get("integral") ? Integer.valueOf(String.valueOf(map.get("integral"))) : 0);
+            userInfoWarpper.setVerified(null != map.get("verified") ? Integer.valueOf(String.valueOf(map.get("verified"))) : 0);
+            userInfoWarpper.setEmergencyContact(null != map.get("emergencyContact") ? String.valueOf(map.get("emergencyContact")) : "");
+            userInfoWarpper.setEmergencyContactNumber(null != map.get("emergencyContactNumber") ? String.valueOf(map.get("emergencyContactNumber")) : "");
+            userInfoWarpper.setBalance(null != map.get("balance") ? Double.valueOf(String.valueOf(map.get("balance"))) : 0);
+        }
+        return userInfoWarpper;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/UserWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/UserWarpper.java
new file mode 100644
index 0000000..643677e
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/UserWarpper.java
@@ -0,0 +1,29 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import com.stylefeng.guns.core.common.constant.factory.ConstantFactory;
+import com.stylefeng.guns.core.base.warpper.BaseControllerWarpper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用户管理的包装类
+ *
+ * @author fengshuonan
+ * @date 2017年2月13日 下午10:47:03
+ */
+public class UserWarpper extends BaseControllerWarpper {
+
+    public UserWarpper(List<Map<String, Object>> list) {
+        super(list);
+    }
+
+    @Override
+    public void warpTheMap(Map<String, Object> map) {
+        map.put("sexName", ConstantFactory.me().getSexName((Integer) map.get("sex")));
+        map.put("roleName", ConstantFactory.me().getRoleName((String) map.get("roleid")));
+        map.put("deptName", ConstantFactory.me().getDeptName((Integer) map.get("deptid")));
+        map.put("statusName", ConstantFactory.me().getStatusName((Integer) map.get("status")));
+    }
+
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/VerifiedWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/VerifiedWarpper.java
new file mode 100644
index 0000000..3791ec4
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/VerifiedWarpper.java
@@ -0,0 +1,69 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import com.stylefeng.guns.modular.system.model.Verified;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel("实名认证")
+public class VerifiedWarpper {
+    @ApiModelProperty(value = "姓名", required = true, dataType = "String")
+    private String name;
+    @ApiModelProperty(value = "身份证号码", required = true, dataType = "String")
+    private String idcode;
+    @ApiModelProperty(value = "身份证正面照", required = false, dataType = "String")
+    private String img1;
+    @ApiModelProperty(value = "身份证背面照", required = false, dataType = "String")
+    private String img2;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIdcode() {
+        return idcode;
+    }
+
+    public void setIdcode(String idcode) {
+        this.idcode = idcode;
+    }
+
+    public String getImg1() {
+        return img1;
+    }
+
+    public void setImg1(String img1) {
+        this.img1 = img1;
+    }
+
+    public String getImg2() {
+        return img2;
+    }
+
+    public void setImg2(String img2) {
+        this.img2 = img2;
+    }
+
+    @Override
+    public String toString() {
+        return "VerifiedWarpper{" +
+                "name='" + name + '\'' +
+                ", idcode='" + idcode + '\'' +
+                ", img1='" + img1 + '\'' +
+                ", img2='" + img2 + '\'' +
+                '}';
+    }
+
+
+    public static Verified getVerified(VerifiedWarpper verifiedWarpper){
+        Verified verified = new Verified();
+        verified.setName(verifiedWarpper.getName());
+        verified.setIdcode(verifiedWarpper.getIdcode());
+        verified.setImg1(verifiedWarpper.getImg1());
+        verified.setImg2(verifiedWarpper.getImg2());
+        return verified;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/VersionWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/VersionWarpper.java
new file mode 100644
index 0000000..413a31d
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/VersionWarpper.java
@@ -0,0 +1,84 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Map;
+
+@ApiModel("版本")
+public class VersionWarpper {
+    @ApiModelProperty("主键")
+    private Integer id;
+    @ApiModelProperty("包地址")
+    private String url;
+    @ApiModelProperty("版本说明")
+    private String content;
+    @ApiModelProperty("是否强制更新(0=否,1=是)")
+    private Integer mandatory;
+    @ApiModelProperty("版本号")
+    private String version;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getMandatory() {
+        return mandatory;
+    }
+
+    public void setMandatory(Integer mandatory) {
+        this.mandatory = mandatory;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    @Override
+    public String toString() {
+        return "VersionWarpper{" +
+                "id=" + id +
+                ", url='" + url + '\'' +
+                ", content='" + content + '\'' +
+                ", mandatory=" + mandatory +
+                ", version='" + version + '\'' +
+                '}';
+    }
+
+
+    public static VersionWarpper getVersionWarpper(Map<String, Object> map){
+        VersionWarpper versionWarpper = new VersionWarpper();
+        if(null != map){
+            versionWarpper.setId(null != map.get("id") ? Integer.valueOf(String.valueOf(map.get("id"))) : 0);
+            versionWarpper.setUrl(null != map.get("url") ? String.valueOf(map.get("url")) : "");
+            versionWarpper.setContent(null != map.get("content") ? String.valueOf(map.get("content")) : "");
+            versionWarpper.setMandatory(null != map.get("mandatory") ? Integer.valueOf(String.valueOf(map.get("mandatory"))) : 0);
+            versionWarpper.setVersion(null != map.get("version") ? String.valueOf(map.get("version")) : "");
+        }
+        return versionWarpper;
+    }
+}
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/WithdrawalWarpper.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/WithdrawalWarpper.java
new file mode 100644
index 0000000..e9b1d9c
--- /dev/null
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/WithdrawalWarpper.java
@@ -0,0 +1,101 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@ApiModel("提现历史记录")
+public class WithdrawalWarpper {
+    @ApiModelProperty("主键")
+    private Integer id;
+    @ApiModelProperty("提现时间")
+    private String insertTime;
+    @ApiModelProperty("提现金额")
+    private Double money;
+    @ApiModelProperty("提现方式")
+    private String name;
+    @ApiModelProperty("备注")
+    private String remark;
+    @ApiModelProperty("提现状态(1=待处理,2=成功,3=失败)")
+    private Integer state;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(String insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    @Override
+    public String toString() {
+        return "WithdrawalWarpper{" +
+                "id=" + id +
+                ", insertTime='" + insertTime + '\'' +
+                ", money=" + money +
+                ", name='" + name + '\'' +
+                ", remark='" + remark + '\'' +
+                ", state=" + state +
+                '}';
+    }
+
+    public static List<WithdrawalWarpper> getWithdrawalWarpper(List<Map<String, Object>> maps){
+        List<WithdrawalWarpper> list = new ArrayList<>();
+        if(null != maps){
+            for(Map<String, Object> map : maps){
+                WithdrawalWarpper withdrawalWarpper = new WithdrawalWarpper();
+                withdrawalWarpper.setId(null != map.get("id") ? Integer.valueOf(String.valueOf(map.get("id"))) : 0);
+                withdrawalWarpper.setMoney(null != map.get("money") ? Double.valueOf(String.valueOf(map.get("money"))) : 0);
+                withdrawalWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : "");
+                withdrawalWarpper.setRemark(null != map.get("remark") ? String.valueOf(map.get("remark")) : "");
+                withdrawalWarpper.setState(null != map.get("state") ? Integer.valueOf(String.valueOf(map.get("state"))) : 0);
+                withdrawalWarpper.setInsertTime(null != map.get("insertTime") ? String.valueOf(map.get("insertTime")) : "");
+                list.add(withdrawalWarpper);
+            }
+        }
+        return list;
+    }
+}

--
Gitblit v1.7.1