From d41358fce9a436d81b9341d06fc1d8f3ddff92ff Mon Sep 17 00:00:00 2001
From: liujie <liujie>
Date: 星期一, 25 九月 2023 16:17:55 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java                                               |    2 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoursePackagePaymentController.java |  164 ++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CancelClassesVO.java                          |   16 
 cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java                                               |    7 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java                          |   10 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement_add.html                      |  112 +
 cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePayDTO.java                                       |   18 
 cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java                                       |    1 
 cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java                              |    2 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoursePackagePaymentQuery.java                |   30 
 cloud-server-course/src/main/java/com/dsh/course/model/CancelClassesVO.java                                           |   16 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Banner.java                              |   14 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/finance/RechargeRecords.html                              |    6 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_two.html                                 |    3 
 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageTypeService.java                               |    2 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TAppUserController.java             |  144 +-
 cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_add.html                                 |   10 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageTypeClient.java                  |    6 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java       |   23 
 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java                   |   21 
 cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java                                          |    4 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageClient.java                      |   13 
 cloud-server-account/src/main/resources/mapper/RechargeRecordsMapper.xml                                              |    8 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoursePackagePaymentVO.java                   |   72 +
 cloud-server-course/src/main/resources/mapper/CoursePackagePaymentConfigMapper.xml                                    |   43 
 cloud-server-management/src/main/webapp/static/modular/system/finance/rechargeRecords.js                              |   22 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement_edit.html                     |  143 +
 cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js                                          |    1 
 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java                              |   17 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/AdvertisementController.java        |   43 
 cloud-server-other/src/main/resources/mapper/BannerMapper.xml                                                         |    2 
 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java                       |  105 +
 cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java                                  |    5 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java             |   29 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java                  |   11 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement.html                          |    4 
 cloud-server-management/src/main/webapp/static/modular/system/advertisement/advertisement.js                          |  160 ++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/RechargeRecordsVO.java                        |    5 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser.html                                     |   18 
 cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment_info.js                             |  713 +++++++++++
 cloud-server-management/src/main/webapp/WEB-INF/view/system/cpPayment/cpPayment.html                                  |  101 +
 cloud-server-management/src/main/webapp/WEB-INF/view/system/cpPayment/cpPayment_add.html                              |  217 +++
 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java                            |    8 
 cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java                                  |   42 
 cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment.js                                  |  608 +++++++++
 cloud-server-management/src/main/resources/mapper/TStoreMapper.xml                                                    |   15 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java              |    7 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java                           |   23 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_add.html                                        |   27 
 cloud-server-other/src/main/java/com/dsh/other/entity/Banner.java                                                     |   14 
 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java                      |   10 
 cloud-server-management/src/main/webapp/static/modular/system/appUser/tAppUser.js                                     |  202 +-
 cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java                             |    2 
 cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java                                    |    6 
 cloud-server-course/src/main/java/com/dsh/course/feignclient/other/StoreClient.java                                   |    3 
 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageTypeController.java                          |    8 
 cloud-server-other/src/main/java/com/dsh/other/feignclient/model/AdvertisementChangeStateDTO.java                     |    1 
 cloud-server-course/src/main/resources/mapper/CancelledClassesMapper.xml                                              |   20 
 cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePaymentQuery.java                                 |   30 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/TAppUser.java                          |    2 
 cloud-server-account/src/main/java/com/dsh/account/service/impl/EvaluateStudentServiceImpl.java                       |    1 
 cloud-server-account/src/main/resources/mapper/TAppUserMapper.xml                                                     |    3 
 cloud-server-management/src/main/webapp/static/modular/system/user/user_info.js                                       |   26 
 cloud-server-account/src/main/java/com/dsh/account/model/vo/RechargeRecordsVO.java                                    |    4 
 cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePaymentVO.java                                    |   72 +
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java               |   25 
 cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackagePaymentConfigMapper.java                         |    9 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_info.html                                |  132 +
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoursePackagePayDTO.java                      |   18 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_edit.html                                |  132 +
 70 files changed, 3,274 insertions(+), 519 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
index 78b9786..9fb0168 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
@@ -3,9 +3,12 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.dsh.account.dto.SelectDto;
+import com.dsh.account.entity.Coach;
 import com.dsh.account.entity.TAppUser;
 import com.dsh.account.entity.TCourseInfoRecord;
 import com.dsh.account.model.*;
+import com.dsh.account.model.query.appUserQuery.QueryAppUser;
+import com.dsh.account.model.vo.QueryAppUserVO;
 import com.dsh.account.service.IVipPaymentService;
 import com.dsh.account.service.TAppUserService;
 import com.dsh.account.service.TCourseInfoRecordService;
@@ -22,10 +25,8 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.PrintWriter;
-import java.util.ArrayList;
+import java.util.*;
 import java.util.List;
-import java.util.List;
-import java.util.Map;
 
 /**
  * @author zhibing.pu
@@ -51,7 +52,42 @@
     private TCourseInfoRecordService courseInfoRecordService;
 
 
+    /**
+     *  后台添加
+     */
+    @RequestMapping("/base/appUser/addAppUser1")
+    public Object addAppUser1(@RequestBody TAppUser query){
+        // 修改
+        if (query.getId()!=null){
+            TAppUser phone = appUserService.getOne(new QueryWrapper<TAppUser>().eq("phone", query.getPhone()).ne("id",query.getId()));
+            if (null != phone){
+                return 5001;
+            }
+        }
+        query.setIsVip(0);
+        query.setPassword("111111");
+        query.setInsertTime(new Date());
+        return appUserService.saveOrUpdate(query);
+    }
 
+    /**
+     * 获取用户信息列表数据
+     */
+    @RequestMapping("/base/appUser/listAll")
+    public List<QueryAppUserVO> listAll(@RequestBody QueryAppUser query){
+
+        return appUserService.listAll(query);
+    }
+
+    /**
+     * 根据用户手机号获取用户id
+     */
+    @ResponseBody
+    @GetMapping("/base/appUser/getAppUserByPhone/{phone}")
+    public TAppUser getAppUserByPhone(@PathVariable("phone") String phone){
+        TAppUser appUser = appUserService.getOne(new QueryWrapper<TAppUser>().eq("phone", phone));
+        return appUser;
+    }
 
     @ResponseBody
     @PostMapping("/base/appUser/getSMSCode")
diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
index f1a160f..3ba94f2 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
@@ -7,7 +7,6 @@
 import com.dsh.account.entity.TStudent;
 import com.dsh.account.feignclient.competition.model.PurchaseRecordVo;
 import com.dsh.account.feignclient.course.model.RecordAppoint;
-import com.dsh.account.model.vo.DetailsListVo;
 import com.dsh.account.model.vo.classDetails.*;
 import com.dsh.account.model.vo.classDetails.classInsVo.*;
 import com.dsh.account.model.vo.commentDetail.StuCommentsVo;
@@ -24,7 +23,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java
index 5341278..292ef63 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java
@@ -176,17 +176,12 @@
     public  void createHistory(@RequestBody CreateHistoryDto createHistoryDto){
         createHistoryDto.setDate(new Date());
         studentService.createHistory(createHistoryDto);
-
-
     }
-
 
     @ResponseBody
     @PostMapping("/student/getHisory")
     public  List<GetHistoryDto> getHisory(){
-
         List<GetHistoryDto> getHistoryDtos =  studentService.getHistory();
-
         return getHistoryDtos;
     }
 
diff --git a/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java b/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java
index 50ed45c..de8d3b0 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java
@@ -56,7 +56,7 @@
      * 生日
      */
     @TableField("birthday")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date birthday;
     /**
      * 性别(1=男,2=女)
diff --git a/cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java b/cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java
index e59a456..51a20a0 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java
@@ -1,8 +1,5 @@
 package com.dsh.account.entity;
 
-import java.util.Date;
-import java.io.Serializable;
-
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -11,6 +8,8 @@
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+
+import java.util.Date;
 
 /**
  * <p>
@@ -24,7 +23,7 @@
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
 @TableName("t_student")
-public class TStudent{
+public class TStudent {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/RechargeRecordsVO.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/RechargeRecordsVO.java
index 4e849b9..03ae858 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/model/vo/RechargeRecordsVO.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/RechargeRecordsVO.java
@@ -1,5 +1,6 @@
 package com.dsh.account.model.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
@@ -21,7 +22,8 @@
      *         {title: '玩湃币数量', field: 'playPaiCoins', visible: true, align: 'center', valign: 'middle'},
      *         {title: '充值类型', field: 'type', visible: true, align: 'center', valign: 'middle'},
      */
-    private Integer id;
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long id;
     private String provinceAndCity;
     private String name;
     private String phone;
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java b/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java
index 28932bf..668232d 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java
@@ -9,7 +9,6 @@
 import com.dsh.account.feignclient.other.model.StoreDetailList;
 import com.dsh.account.feignclient.other.model.StoreInfo;
 import com.dsh.account.feignclient.other.model.SysNotice;
-import com.dsh.account.model.vo.classDetails.AppointmentRecordVo;
 import com.dsh.account.model.vo.classDetails.ClasspaymentRequest;
 import com.dsh.account.model.vo.classDetails.StuEditInfoReq;
 import com.dsh.account.model.vo.classDetails.classInsVo.ClassDetailsInsVo;
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/EvaluateStudentServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/EvaluateStudentServiceImpl.java
index a7c7587..58f2acc 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/EvaluateStudentServiceImpl.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/EvaluateStudentServiceImpl.java
@@ -8,7 +8,6 @@
 import com.dsh.account.mapper.TStudentMapper;
 import com.dsh.account.model.vo.commentDetail.StuCommentsVo;
 import com.dsh.account.service.EvaluateStudentService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
index b47bd81..2a17749 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
@@ -23,7 +23,6 @@
 import com.dsh.account.mapper.CoachMapper;
 import com.dsh.account.mapper.TAppUserMapper;
 import com.dsh.account.mapper.TStudentMapper;
-import com.dsh.account.model.vo.classDetails.AppointmentRecordVo;
 import com.dsh.account.model.vo.classDetails.ClasspaymentRequest;
 import com.dsh.account.model.vo.classDetails.StuEditInfoReq;
 import com.dsh.account.model.vo.classDetails.classInsVo.ClassDetailsInsVo;
@@ -36,7 +35,6 @@
 import com.dsh.account.model.vo.sourceDetail.CouponStuAvailableVo;
 import com.dsh.account.model.vo.sourceDetail.CourseDetailsOfContinuationResp;
 import com.dsh.account.model.vo.sourceDetail.RecordTimeRequest;
-import com.dsh.account.model.vo.userBenefitDetail.Goods;
 import com.dsh.account.service.TCourseInfoRecordService;
 import com.dsh.account.service.TStudentService;
 import com.dsh.account.util.*;
diff --git a/cloud-server-account/src/main/resources/mapper/RechargeRecordsMapper.xml b/cloud-server-account/src/main/resources/mapper/RechargeRecordsMapper.xml
index f166233..0b729b0 100644
--- a/cloud-server-account/src/main/resources/mapper/RechargeRecordsMapper.xml
+++ b/cloud-server-account/src/main/resources/mapper/RechargeRecordsMapper.xml
@@ -6,14 +6,14 @@
     <select id="rechargeList" resultType="com.dsh.account.model.vo.RechargeRecordsVO">
         select t1.id as id,t1.appUserId,t1.payTime as `time`,t1.amount as amount,
         t1.playPaiCoins as playPaiCoins,CONCAT(t2.province,t2.city) as provinceAndCity,
-        t2.`name` as `name`,t2.phone as phone,t2.isVip as `type` from t_recharge_records t1
+        t2.`name` as `name`,t2.phone as phone,t2.isVip as `type` from t_recharge_records3 t1
         left join t_app_user t2 on t2.id = t1.appUserId
         <where>
             <if test="query.city!=null and query.city!= ''">
-                and t1.city = #{query.city}
+                and t2.city = #{query.city}
             </if>
             <if test="query.province!=null and query.province!= ''">
-                and t1.province = #{query.province}
+                and t2.province = #{query.province}
             </if>
             <if test="query.name!=null and query.name!= ''">
                 AND t1.name LIKE concat('%',#{query.name},'%')
@@ -25,7 +25,7 @@
                 and t2.isVip = #{query.type}
             </if>
             <if test="sTime !=null and sTime!= '' and eTime !=null and eTime!= ''">
-                and t1.payTime between #{sTime} and #{eTime}
+                and t1.insertTime between #{sTime} and #{eTime}
             </if>
             and t1.state != 3
         </where>
diff --git a/cloud-server-account/src/main/resources/mapper/TAppUserMapper.xml b/cloud-server-account/src/main/resources/mapper/TAppUserMapper.xml
index 39c9f71..89b7af0 100644
--- a/cloud-server-account/src/main/resources/mapper/TAppUserMapper.xml
+++ b/cloud-server-account/src/main/resources/mapper/TAppUserMapper.xml
@@ -54,6 +54,9 @@
             <if test="query.isVip!=null and query.isVip!= ''">
                 and t1.isVip = #{query.isVip}
             </if>
+            <if test="query.isVip!=null and query.isVip!= ''">
+                and t1.isVip = #{query.isVip}
+            </if>
             and t1.state != 3
         </where>
     </select>
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java
index 75ed806..3359ab0 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java
@@ -24,6 +24,7 @@
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.bouncycastle.math.Primes;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -77,7 +78,23 @@
             return null;
         }
     }
+    /**
+     * 根据id获取课包
+     */
+    @ResponseBody
+    @PostMapping("/base/coursePackage/getCoursePackageByStoreId")
+    public List<TCoursePackage> getCoursePackageByStoreId(@RequestBody Integer storeId){
 
+       return coursePackageService.list(new QueryWrapper<TCoursePackage>().eq("storeId", storeId));
+    }
+    /**
+     * 根据课包类型获取课包
+     */
+    @ResponseBody
+    @PostMapping("/base/coursePackage/getCoursePackageByType")
+    public List<TCoursePackage> getCoursePackageByType(@RequestBody Integer typeId){
+       return coursePackageService.list(new QueryWrapper<TCoursePackage>().eq("coursePackageTypeId", typeId));
+    }
     /**
      * 本周福利列表
      */
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java
index d5649f6..189b306 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java
@@ -19,7 +19,15 @@
     @Autowired
     private TCoursePackageDiscountService coursePackageDiscountService;
 
-
+    /**
+     * 获取根据课包id获取课包折扣
+     */
+    @ResponseBody
+    @PostMapping("/coursePackageDiscount/queryByCoursePackageId")
+    public List<TCoursePackageDiscount> queryByCoursePackageId(@RequestBody Integer coursePackageId){
+        return coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackageId", coursePackageId)
+                .eq("auditStatus", 2));
+    }
     /**
      * 获取课包折扣
      * @param coursePackagePaymentConfigId
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
index e381c62..74a3729 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -13,6 +13,8 @@
 import com.dsh.course.feignclient.account.model.AppUser;
 import com.dsh.course.feignclient.account.model.Student;
 import com.dsh.course.feignclient.account.model.TCourseInfoRecord;
+import com.dsh.course.feignclient.activity.CouponClient;
+import com.dsh.course.feignclient.activity.model.Coupon;
 import com.dsh.course.feignclient.model.*;
 import com.dsh.course.feignclient.other.StoreClient;
 import com.dsh.course.feignclient.other.model.Store;
@@ -31,6 +33,8 @@
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import net.bytebuddy.asm.Advice;
+import org.aspectj.weaver.ast.Var;
 import io.swagger.models.auth.In;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -108,6 +112,12 @@
 
     @Autowired
     private RestTemplate internalRestTemplate;
+    @Autowired
+    private CouponClient couponClient;
+    @Autowired
+    private StoreClient storeClient;
+    @Autowired
+    private TCoursePackageDiscountService discountService;
 
     @Resource
     private CoursePackageSchedulingMapper coursePackageSchedulingMapper;
@@ -116,6 +126,101 @@
     private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm");
 
     /**
+     * 手动支付
+     * @return
+     */
+    @RequestMapping("/base/coursePackagePayment/changeState")
+    public Object changeState(@RequestBody CoursePackagePayDTO dto){
+
+        return packagePaymentService.changeState(dto);
+    }
+    /**
+     * 获取购课记录
+     */
+    @ResponseBody
+    @RequestMapping("/coursePackagePayment/listAll")
+    public List<CoursePackagePaymentVO> listAll(@RequestBody CoursePackagePaymentQuery query){
+        List<CoursePackagePaymentVO> res = packagePaymentService.listAll(query);
+        List<CoursePackagePaymentVO> result = new ArrayList<>();
+        for (CoursePackagePaymentVO re : res) {
+            if (re.getCashPayment()==null){
+                String value = String.valueOf(re.getPlayPaiCoin());
+                re.setCashPayment(new BigDecimal(value));
+            }
+
+            Store store = storeClient.queryStoreById(re.getStoreId());
+            AppUser appUser = appUserClient.queryAppUser(re.getAppUserId());
+            Student student = studentClient.queryStudentById(re.getStudentId());
+            re.setPayStudent(student.getName());
+            re.setPayUser(appUser.getName());
+            re.setPhone(appUser.getPhone());
+            re.setStoreName(store.getName());
+            if (query.getPayUser()== null || query.getPayUser().equals("") ){
+            }else{
+                List<AppUser> appUsers = appUserClient.queryAppUserListByName(query.getPayUser());
+                for (AppUser user : appUsers) {
+                    if (appUser.getName().equals(user.getName())){
+                        result.add(re);
+                    }
+                }
+            }
+            if (query.getPayStudent()== null || query.getPayStudent().equals("")){
+            }else{
+                List<Student> students = studentClient.queryStudentListByName(query.getPayStudent());
+                for (Student student1 : students) {
+                    if (student.getName().equals(student1.getName())){
+                        result.add(re);
+                    }
+                }
+            }
+
+            if (re.getPayType()==1){
+                re.setBuyTypeName("微信支付");
+            }else if(re.getPayType()==2){
+                re.setBuyTypeName("支付宝支付");
+            }else if(re.getPayType()==3){
+                re.setBuyTypeName("玩湃币支付");
+            }else if(re.getPayType()==4){
+                re.setBuyTypeName("积分支付");
+            }else if(re.getPayType()==5){
+                re.setBuyTypeName("积分+微信支付");
+            }else if(re.getPayType()==6){
+                re.setBuyTypeName("积分+支付宝支付");
+            }else if(re.getPayType()==7){
+                re.setBuyTypeName("手动支付"+"-"+re.getBuyTypeName());
+            }
+            // 如果支付用户类型为平台 则购买方式则为1线下购买
+            if (re.getPayUserType()== 2){
+                re.setBuyType(1);
+            }else{
+                // 如果当前课包有折扣 则为3折扣购买
+                if (discountService.list(new QueryWrapper<TCoursePackageDiscount>()
+                        .eq("coursePackageId",re.getCoursePackageId()).eq("auditStatus",2)).size()>0){
+                    re.setBuyType(3);
+                    re.setDiscountAmount(re.getOriginalPrice().subtract(re.getPayMoney()));
+                }else{
+                    re.setBuyType(2);
+                }
+            }
+            // 不为空则计算
+            if (re.getUserCouponId()!=null){
+
+            }
+            // todo 计算优惠金额
+//            Coupon coupon = couponClient.queryCouponById(re.getUserCouponId().intValue());
+        }
+        if (query.getPayStudent()== null || query.getPayStudent().equals("")){
+            if (query.getPayUser()== null || query.getPayUser().equals("")){
+                return res;
+            }else{
+                return result;
+            }
+        }else{
+            return result;
+        }
+    }
+
+    /**
      * 获取 没有学员信息的图片配置
      * @param stuId 学员id
      * @return  课包列表
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageTypeController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageTypeController.java
index 7211705..b187496 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageTypeController.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageTypeController.java
@@ -26,7 +26,13 @@
     @Autowired
     private TCoursePackageService tCoursePackageService;
 
-
+    /**
+     * 根据ids获取类型
+     */
+    @RequestMapping("/coursePackageType/getByCourseIds")
+    public List<TCoursePackageType> getByCourseIds(@RequestBody List<Integer> ids){
+        return coursePackageTypeService.list(new QueryWrapper<TCoursePackageType>().in("id",ids));
+    }
     /**
      * 新增课包类型
      */
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
index 6053188..66c684a 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
@@ -153,4 +153,10 @@
     @TableField("useTime")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date useTime;
+
+    /**
+     * 平台手动支付时使用
+     */
+    @TableField("payUserName")
+    private String payUserName;
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/other/StoreClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/other/StoreClient.java
index 1157a4c..9dd943f 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/other/StoreClient.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/other/StoreClient.java
@@ -17,6 +17,9 @@
 
 
     /**
+     * 根据管理员id获取
+     */
+    /**
      * 根据名称模糊搜索门店
      * @param name
      * @return
diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackagePaymentConfigMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackagePaymentConfigMapper.java
index 9544749..322d5ed 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackagePaymentConfigMapper.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackagePaymentConfigMapper.java
@@ -2,10 +2,19 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dsh.course.entity.CoursePackagePaymentConfig;
+import com.dsh.course.model.CoursePackagePayDTO;
+import com.dsh.course.model.CoursePackagePaymentQuery;
+import com.dsh.course.model.CoursePackagePaymentVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @author zhibing.pu
  * @date 2023/6/29 10:44
  */
 public interface CoursePackagePaymentConfigMapper extends BaseMapper<CoursePackagePaymentConfig> {
+    List<CoursePackagePaymentVO> listAll(@Param("query") CoursePackagePaymentQuery query);
+
+    int changeState(@Param("ids") List<Long> ids,@Param("payUserName") String payUserName,@Param("payUserId") Integer payUserId);
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/CancelClassesVO.java b/cloud-server-course/src/main/java/com/dsh/course/model/CancelClassesVO.java
index de4e91a..2a3cfa2 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/model/CancelClassesVO.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/CancelClassesVO.java
@@ -11,14 +11,14 @@
 public class CancelClassesVO {
     /**
      *
-        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
-        {title: '所在省市', field: 'provinceAndCity', visible: true, align: 'center', valign: 'middle'},
-        {title: '上课门店', field: 'storeName', visible: true, align: 'center', valign: 'middle'},
-        {title: '学员姓名', field: 'studentName', visible:  true, align: 'center', valign: 'middle'},
-        {title: '上课老师', field: 'coachName', visible:  true, align: 'center', valign: 'middle'},
-        {title:  '消课时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle'},
-        {title:  '课程名称', field: 'courseName', visible: true, align: 'center', valign: 'middle'},
-        {title: '上课时间', field: 'startAndEnd', visible: true, align: 'center', valign: 'middle'}
+     {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
+     {title: '所在省市', field: 'provinceAndCity', visible: true, align: 'center', valign: 'middle'},
+     {title: '上课门店', field: 'storeName', visible: true, align: 'center', valign: 'middle'},
+     {title: '学员姓名', field: 'studentName', visible:  true, align: 'center', valign: 'middle'},
+     {title: '上课老师', field: 'coachName', visible:  true, align: 'center', valign: 'middle'},
+     {title:  '消课时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle'},
+     {title:  '课程名称', field: 'courseName', visible: true, align: 'center', valign: 'middle'},
+     {title: '上课时间', field: 'startAndEnd', visible: true, align: 'center', valign: 'middle'}
      */
     private Integer id;
     private String provinceAndCity;
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePayDTO.java b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePayDTO.java
new file mode 100644
index 0000000..bd6b0e5
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePayDTO.java
@@ -0,0 +1,18 @@
+package com.dsh.course.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 购课记录 手动支付dto
+ */
+@Data
+public class CoursePackagePayDTO {
+    private List<String> ids;
+    private String payUserName;
+    // 操作人id
+    private Integer userId;
+    // 操作人类型 1 = 平台 2 = 城市管理员 3 = 门店
+    private Integer type;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePaymentQuery.java b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePaymentQuery.java
new file mode 100644
index 0000000..b96c46b
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePaymentQuery.java
@@ -0,0 +1,30 @@
+package com.dsh.course.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 购课记录列表查询Query
+ */
+@Data
+public class CoursePackagePaymentQuery {
+    // 省
+    private String province;
+    // 市
+    private String city;
+    // 门店名称
+    private String storeName;
+    // 门店id
+    private List<Integer> storeIds;
+    // 课包类型
+    private Integer coursePackageTypeId;
+    // 课包名称
+    private String coursePackageTypeName;
+    // 支付状态 1=待支付 2=已支付
+    private Integer payStatus;
+    // 购买用户
+    private String payUser;
+    // 购买学员
+    private String payStudent;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePaymentVO.java b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePaymentVO.java
new file mode 100644
index 0000000..9bed267
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackagePaymentVO.java
@@ -0,0 +1,72 @@
+package com.dsh.course.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 购课记录列表VO
+ */
+@Data
+public class CoursePackagePaymentVO {
+    /**
+     *
+     {title: 'ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
+     {title: '所在省市', field: 'provinceAndCity', visible: role==1?true:false, align: 'center', valign: 'middle'},
+     {title:  '门店名称', field: 'storeName', visible: true, align: 'center', valign: 'middle'},
+     {title:  '课包类型', field: 'coursePackageType', visible: true, align: 'center', valign: 'middle'},
+     {title:  '课包名称', field: 'coursePackage', visible: true, align: 'center', valign: 'middle'},
+     {title:  '购买用户', field: 'payUser', visible: true, align: 'center', valign: 'middle'},
+     {title:  '联系方式', field: 'phone', visible: true, align: 'center', valign: 'middle'},
+     {title:  '购课学员', field: 'payStudent', visible: true, align: 'center', valign: 'middle'},
+     {title:  '购买方式', field: 'buyType', visible: true, align: 'center', valign: 'middle'},
+     {title:  '支付方式', field: 'payType', visible: true, align: 'center', valign: 'middle',
+     formatter:function (data) {return{1:"微信",2:"支付宝",3:"玩湃币",4:"积分",5:"积分+微信",6:"积分+支付宝"}[data]}},
+     {title:  '总金额', field: 'originalPrice'+'元', visible: true, align: 'center', valign: 'middle'},
+     {title:  '优惠金额', field: 'discountAmount'+'元', visible: true, align: 'center', valign: 'middle'},
+     {title:  '支付价格', field: 'cashPayment'+'元', visible: true, align: 'center', valign: 'middle'},
+     {title:  '支付状态', field: 'payStatus', visible: true, align: 'center', valign: 'middle'},
+     {title:  '赠送课时', field: 'giftClassHours', visible: true, align: 'center', valign: 'middle'},
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long id;
+    private String provinceAndCity;
+    // 门店id
+    private Integer storeId;
+    private String storeName;
+    private Integer coursePackageTypeId;
+    private String coursePackageType;
+    private String coursePackage;
+    private Integer coursePackageId;
+    // 用户id
+    private Integer appUserId;
+    private String payUser;
+    private String phone;
+    // 学员id
+    private Integer studentId;
+    private String payStudent;
+    private Integer payType;
+    private BigDecimal originalPrice;
+    // 优惠券id
+    private Long userCouponId;
+    // 优惠金额
+    private BigDecimal discountAmount;
+    // 支付状态
+    private Integer payStatus;
+    private Integer giftClassHours;
+    // 1= 用户支付 2= 管理员支付
+    private Integer payUserType;
+    // 支付用户id
+    private Integer payUserId;
+    // 支付金额
+    private BigDecimal payMoney;
+    // 现金支付金额
+    private BigDecimal cashPayment;
+    // 玩湃币价格/积分
+    private Integer playPaiCoin;
+    // 购买方式 1 线下 2线上 3折扣
+    private Integer buyType;
+    // 当状态为手动支付时使用 用于显示手动支付时显示操作人
+    private String buyTypeName;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
index e4f2132..fbb40ef 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
@@ -5,9 +5,7 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.dsh.course.entity.TCoursePackagePayment;
 import com.dsh.course.feignclient.model.RecordAppoint;
-import com.dsh.course.model.QueryRegistrationRecord;
-import com.dsh.course.model.QueryWalkInStudentList;
-import com.dsh.course.model.BillingRequest;
+import com.dsh.course.model.*;
 import com.dsh.course.model.vo.RegisterCourseVo;
 import com.dsh.course.model.vo.request.*;
 import com.dsh.course.model.vo.response.*;
@@ -125,4 +123,8 @@
 
     boolean updateHoursById(TCoursePackagePayment byId, int i);
 
+
+    List<CoursePackagePaymentVO> listAll(CoursePackagePaymentQuery query);
+
+    int changeState(CoursePackagePayDTO dto);
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageTypeService.java b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageTypeService.java
index f7c6e8e..8b3beb9 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageTypeService.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageTypeService.java
@@ -3,6 +3,8 @@
 import com.dsh.course.entity.TCoursePackageType;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * 课程包类型 服务类
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
index 0f3ac1f..0dbc7eb 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
@@ -23,9 +23,7 @@
 import com.dsh.course.feignclient.other.StoreClient;
 import com.dsh.course.feignclient.other.model.Store;
 import com.dsh.course.mapper.*;
-import com.dsh.course.model.BillingRequest;
-import com.dsh.course.model.QueryRegistrationRecord;
-import com.dsh.course.model.QueryWalkInStudentList;
+import com.dsh.course.model.*;
 import com.dsh.course.model.dto.DiscountJsonDto;
 import com.dsh.course.model.vo.RegisterCourseVo;
 import com.dsh.course.model.vo.request.*;
@@ -117,6 +115,21 @@
 
 
 
+    @Override
+    public List<CoursePackagePaymentVO> listAll(CoursePackagePaymentQuery query) {
+        return cpConfigMapper.listAll(query);
+    }
+
+    @Override
+    public int changeState(CoursePackagePayDTO dto) {
+        List<String> ids = dto.getIds();
+        List<Long> list = new ArrayList<>();
+        for (String id : ids) {
+            long value = Long.parseLong(id);
+            list.add(value);
+        }
+        return cpConfigMapper.changeState(list,dto.getPayUserName(),dto.getUserId());
+    }
 
     /**
      * 获取课包购买人数
@@ -1029,4 +1042,6 @@
     }
 
 
+
+
 }
diff --git a/cloud-server-course/src/main/resources/mapper/CancelledClassesMapper.xml b/cloud-server-course/src/main/resources/mapper/CancelledClassesMapper.xml
index 8b0ebe8..d3b7939 100644
--- a/cloud-server-course/src/main/resources/mapper/CancelledClassesMapper.xml
+++ b/cloud-server-course/src/main/resources/mapper/CancelledClassesMapper.xml
@@ -3,13 +3,19 @@
 <mapper namespace="com.dsh.course.mapper.CancelledClassesMapper">
 
     <select id="listAll" resultType="com.dsh.course.model.CancelClassesVO">
-        select t1.insertTime as insertTime,t2.coachId as coachId,CONCAT(t2.province,t2.city) as provinceAndCity,
-        t2.storeId as storeId,CONCAT(t3.classDate,t3.endDate) as startAndEnd,
-        t5.name as `courseName`,t4.appUserId as studentId from t_cancelled_classes t1
-        left join t_course_package t2 on t1.coursePackageId = t2.id
-        left join t_course_package_scheduling t3 on t3.coursePackageId = t2.id
-        left join t_course_package_student t4 on t4.coursePackageSchedulingId = t3.id
-        left join t_course t5 on t3.courseId = t5.id
+        SELECT
+        t1.*,
+        t2.name,
+        CONCAT(t2.province, t2.city) AS provinceAndCity,
+        t2.storeId,
+        CONCAT(t3.classDate, t3.endDate) AS startAndEnd
+        FROM
+        t_cancelled_classes t1
+        LEFT JOIN
+        t_course_package t2 ON t1.coursePackageId = t2.id
+        LEFT JOIN (SELECT id,classDate,endDate FROM t_course_package_scheduling
+        ) t3
+        ON t1.coursePackageSchedulingId = t3.id
         <where>
             <if test="query.courseName!=null and query.courseName!= ''">
                 and t5.name = #{query.courseName}
diff --git a/cloud-server-course/src/main/resources/mapper/CoursePackagePaymentConfigMapper.xml b/cloud-server-course/src/main/resources/mapper/CoursePackagePaymentConfigMapper.xml
index 1cbc1b2..d9da3d6 100644
--- a/cloud-server-course/src/main/resources/mapper/CoursePackagePaymentConfigMapper.xml
+++ b/cloud-server-course/src/main/resources/mapper/CoursePackagePaymentConfigMapper.xml
@@ -11,4 +11,47 @@
         <result column="cashPayment" property="cashPayment" />
         <result column="playPaiCoin" property="playPaiCoin" />
     </resultMap>
+    <update id="changeState">
+            update t_course_package_payment2 set
+            payStatus = 2,payUserName = #{payUserName},payType = 7,payUserId=#{payUserId}
+            <where>
+                <if test="ids != null and ids.size()>0">
+                    AND t_course_package_payment2.id IN
+                    <foreach collection="ids" separator="," item="id" open="(" close=")">
+                        #{id}
+                    </foreach>
+                </if>
+            </where>
+    </update>
+
+    <select id="listAll" resultType="com.dsh.course.model.CoursePackagePaymentVO">
+        select t1.id,t1.studentId,t1.payUserType,t1.payStatus,t1.payType,t1.originalPrice,t1.userCouponId,t1.payUserId,t1.giftClassHours,t1.studentId,t1.appUserId,t1.cashPayment,t1.playPaiCoin,
+        t1.payUserName as buyTypeName,
+               CONCAT(t2.province,t2.city) as provinceAndCity,t2.coursePackageTypeId,t2.storeId,t2.name as coursePackage,
+               t3.name as coursePackageType
+        from t_course_package_payment2 t1
+        left join t_course_package t2 on t1.coursePackageId = t2.id
+        left join t_course_package_type t3 on t2.coursePackageTypeId = t3.id
+        <where>
+            <if test="query.province!=null and query.province!= ''">
+                and t2.province = #{query.province}
+            </if>
+            <if test="query.city!=null and query.city!= ''">
+                and t2.city = #{query.city}
+            </if>
+            <if test="query.coursePackageTypeId!=null and query.coursePackageTypeId!= ''">
+                and t3.id = #{query.coursePackageTypeId}
+            </if>
+            <if test="query.coursePackageTypeName!=null and query.coursePackageTypeName!= ''">
+                and t2.name like concat('%',#{query.coursePackageTypeName},'%')
+            </if>
+            <if test="query.payStatus!=null and query.payStatus!= ''">
+                and t1.payStatus = #{query.payStatus}
+            </if>
+            <if test="query.payStatus!=null and query.payStatus!= ''">
+                and t1.payStatus = #{query.payStatus}
+            </if>
+        </where>
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java
index 6016a36..88eb6bf 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java
@@ -13,18 +13,31 @@
 import com.dsh.guns.modular.system.model.dto.GiftSearchDto;
 import com.dsh.guns.modular.system.model.dto.SelectDto;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
 @FeignClient("mb-cloud-account")
 public interface AppUserClient {
 
+    /**
+     *  后台添加
+     */
+    @RequestMapping("/base/appUser/addAppUser1")
+    Object addAppUser1(@RequestBody TAppUser query);
+    /**
+     * 获取用户学员列表
+     * @param appUserId
+     * @return
+     */
+    @PostMapping("/student/queryStudentList")
+    List<TStudent> queryStudentList(@RequestBody Integer appUserId);
+    /**
+     * 根据用户手机号获取用户id
+     */
+    @GetMapping("/base/appUser/getAppUserByPhone/{phone}")
+    TAppUser getAppUserByPhone(@PathVariable("phone") String phone);
 
     @PostMapping("/base/appUser/queryByNamePhone")
     List<TAppUser> queryByNamePhone(QueryByNamePhone queryByNamePhone);
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/TAppUser.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/TAppUser.java
index d55f7a7..152337d 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/TAppUser.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/TAppUser.java
@@ -56,7 +56,7 @@
      * 生日
      */
     @TableField("birthday")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date birthday;
     /**
      * 性别(1=男,2=女)
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageClient.java
index 87ca0c9..1c3e961 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageClient.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageClient.java
@@ -7,7 +7,10 @@
 import com.dsh.course.feignClient.course.model.TCoursePackage;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.ResponseBody;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -19,6 +22,16 @@
 
 
     /**
+     * 根据课包类型获取课包
+     */
+    @PostMapping("/base/coursePackage/getCoursePackageByType")
+    List<TCoursePackage> getCoursePackageByType(@RequestBody Integer typeId);
+    /**
+     * 根据门店id获取课包
+     */
+    @PostMapping("/base/coursePackage/getCoursePackageByStoreId")
+    List<TCoursePackage> getCoursePackageByStoreId(@RequestBody Integer storeId);
+    /**
      * 获取课包管理列表数据
      * @param queryCoursePackageLists
      * @return
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java
index b3faf17..ffc0ba8 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java
@@ -3,6 +3,8 @@
 import com.dsh.course.feignClient.course.model.TCoursePackageDiscount;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.ResponseBody;
 
 import java.util.List;
 
@@ -14,6 +16,11 @@
 public interface CoursePackageDiscountClient {
 
     /**
+     * 获取根据课包id获取课包折扣
+     */
+    @PostMapping("/coursePackageDiscount/queryByCoursePackageId")
+    List<TCoursePackageDiscount> queryByCoursePackageId(@RequestBody Integer coursePackageId);
+    /**
      * 获取课包折扣
      * @param coursePackagePaymentConfigId
      * @return
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java
index 224d9c8..76e484f 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java
@@ -4,9 +4,16 @@
 import com.dsh.course.feignClient.course.model.QueryRegistrationRecord;
 import com.dsh.course.feignClient.course.model.QueryWalkInStudentList;
 import com.dsh.course.feignClient.course.model.TCoursePackagePayment;
+import com.dsh.guns.modular.system.model.CoursePackagePayDTO;
+import com.dsh.guns.modular.system.model.CoursePackagePaymentQuery;
+import com.dsh.guns.modular.system.model.CoursePackagePaymentVO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -16,8 +23,26 @@
 @FeignClient("mb-cloud-course")
 public interface CoursePackagePaymentClient {
 
+    /**
+     * 获取学员剩余课时
+     * @param id
+     * @return
+     */
+    @PostMapping("/coursePackagePayment/queryResidueClassHourById")
+    public Integer queryResidueClassHourById(@RequestBody Long id);
 
     /**
+     * 手动支付
+     * @return
+     */
+    @RequestMapping("/base/coursePackagePayment/changeState")
+    Object changeState(@RequestBody CoursePackagePayDTO dto);
+    /**
+     * 获取购课记录
+     */
+    @RequestMapping("/coursePackagePayment/listAll")
+    List<CoursePackagePaymentVO> listAll(@RequestBody CoursePackagePaymentQuery query);
+    /**
      * 获取课程报名信息列表
      * @param queryRegistrationRecord
      * @return
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageTypeClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageTypeClient.java
index 31b2af5..aad825f 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageTypeClient.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageTypeClient.java
@@ -17,7 +17,11 @@
 @FeignClient("mb-cloud-course")
 public interface CoursePackageTypeClient {
 
-
+    /**
+     * 根据ids获取类型
+     */
+    @RequestMapping("/coursePackageType/getByCourseIds")
+    List<TCoursePackageType> getByCourseIds(@RequestBody List<Integer> ids);
     /**
      * 删除课包类型
      * @param
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Banner.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Banner.java
index 8d984bb..4ef585f 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Banner.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Banner.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.util.Date;
@@ -21,7 +22,7 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
     /**
-     * 位置(1=首页,2=首页底部,3=线上课得积分,4=看视频得奖励,5=常见问题)
+     * 位置(1=首页,2=线上课得积分,3=看视频得奖励,4=常见问题)
      */
     @TableField("position")
     private Integer position;
@@ -31,10 +32,10 @@
     @TableField("img")
     private String img;
     /**
-     * 跳转页面
+     * 跳转页面id
      */
     @TableField("jumpPage")
-    private String jumpPage;
+    private Integer jumpPage;
     /**
      * 排序
      */
@@ -49,6 +50,7 @@
      * 添加时间
      */
     @TableField("insertTime")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date insertTime;
     /**
      * 跳转模块
@@ -71,10 +73,10 @@
     @TableField("turnId")
     private String turnId;
     /**
-     * 跳转页面id
+     * 跳转页面
      */
-    @TableField("pageId")
-    private Integer pageId;
+    @TableField("page")
+    private String page;
     /**
      * 跳转类型id
      */
diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java
index 0032354..1bb364e 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dsh.guns.modular.system.model.TStore;
 import com.dsh.guns.modular.system.model.TStoreListVo;
+import com.dsh.guns.modular.system.model.TTurn;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -54,4 +55,7 @@
 
     void delete1(@Param("id") Integer id);
 
+    List<TTurn> pageList();
+
+    List<TTurn> getPage(@Param("ids") List<Integer> ids);
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/AdvertisementController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/AdvertisementController.java
index 5565a53..aa72a63 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/AdvertisementController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/AdvertisementController.java
@@ -8,11 +8,9 @@
 import com.dsh.course.feignClient.other.model.Banner;
 import com.dsh.guns.config.UserExt;
 import com.dsh.guns.core.base.controller.BaseController;
-import com.dsh.guns.modular.system.model.AdvertisementChangeStateDTO;
-import com.dsh.guns.modular.system.model.AdvertisementQuery;
-import com.dsh.guns.modular.system.model.CoachQuery;
-import com.dsh.guns.modular.system.model.User;
+import com.dsh.guns.modular.system.model.*;
 import com.dsh.guns.modular.system.service.ICityService;
+import com.dsh.guns.modular.system.service.IStoreService;
 import com.dsh.guns.modular.system.util.ResultUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -22,10 +20,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
+import java.util.*;
 
 /**
  * 广告管理控制器
@@ -41,16 +36,22 @@
     private CityManagerClient cityManagerClient;
     @Autowired
     private BannerClient bannerClient;
-
+    @Autowired
+    private IStoreService storeService;
     /**
      * 跳转到广告页面
      */
     @RequestMapping("")
     public String index(Model model) {
 
-        model.addAttribute("pages",1);
+        List<TTurn> pages = storeService.pageList();
+        List<Integer> ids = new ArrayList<>();
+        for (TTurn page : pages) {
+            ids.add(page.getId());
+        }
+        List<TTurn> res = storeService.getPage(ids);
+        model.addAttribute("pages",res);
         model.addAttribute("models",1);
-
         return PREFIX + "advertisement.html";
     }
     /**
@@ -69,6 +70,8 @@
     @RequestMapping("/update/{id}/{type}")
     public String store(Model model, @PathVariable("id") Integer id,@PathVariable("type")Integer type) {
         Banner data = bannerClient.getById(id);
+        List<Map<String, Object>> pages = storeService.typeChange(data.getModel());
+        List<Map<String, Object>> types = storeService.typeChangeOne(data.getJumpPage());
         // type=1 查看详情 type=2 编辑
         if (type == 1){
             model.addAttribute("type",1);
@@ -78,6 +81,8 @@
         Integer roleType = UserExt.getUser().getObjectType();
         model.addAttribute("roleType",roleType);
         model.addAttribute("data",data);
+        model.addAttribute("pages",pages);
+        model.addAttribute("types",types);
         return PREFIX + "advertisement_edit.html";
     }
 
@@ -85,9 +90,10 @@
      * 广告上下架
      */
     @RequestMapping("/changeState")
-    public Object changeState(AdvertisementChangeStateDTO dto) {
-
-        return bannerClient.changeState(dto);
+    @ResponseBody
+    public Object changeState(@RequestBody AdvertisementChangeStateDTO dto) {
+        bannerClient.changeState(dto);
+        return ResultUtil.success();
     }
     /**
      *  添加广告
@@ -95,16 +101,21 @@
     @ResponseBody
     @RequestMapping(value = "/addAdvertisement")
     public ResultUtil addAdvertisement(@RequestBody Banner banner) {
+        banner.setInsertTime(new Date());
         bannerClient.addAdvertisement(banner);
         return ResultUtil.success("添加成功");
     }
     /**
-     *  添加广告
+     *  编辑广告
      */
     @ResponseBody
     @RequestMapping(value = "/updateAdvertisement")
     public ResultUtil updateAdvertisement(@RequestBody Banner banner) {
-
+        Banner byId = bannerClient.getById(banner.getId());
+        // 如果为空 则没有改变图片
+        if (banner.getImg().equals("")||banner==null){
+            banner.setImg(byId.getImg());
+        }
         bannerClient.updateAdvertisement(banner);
         return ResultUtil.success("添加成功");
     }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoursePackagePaymentController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoursePackagePaymentController.java
new file mode 100644
index 0000000..b271101
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoursePackagePaymentController.java
@@ -0,0 +1,164 @@
+package com.dsh.guns.modular.system.controller.code;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.dsh.course.feignClient.account.AppUserClient;
+import com.dsh.course.feignClient.account.CityManagerClient;
+import com.dsh.course.feignClient.account.model.CityManager;
+import com.dsh.course.feignClient.account.model.Coach;
+import com.dsh.course.feignClient.account.model.TAppUser;
+import com.dsh.course.feignClient.course.*;
+import com.dsh.course.feignClient.course.model.*;
+import com.dsh.course.feignClient.other.BannerClient;
+import com.dsh.course.feignClient.other.SiteClient;
+import com.dsh.course.feignClient.other.StoreClient;
+import com.dsh.course.feignClient.other.model.Banner;
+import com.dsh.guns.config.UserExt;
+import com.dsh.guns.core.base.controller.BaseController;
+import com.dsh.guns.modular.system.model.*;
+import com.dsh.guns.modular.system.service.ICityService;
+import com.dsh.guns.modular.system.service.ICoursePackageService;
+import com.dsh.guns.modular.system.service.IStoreService;
+import com.dsh.guns.modular.system.util.ResultUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 广告管理控制器
+ *
+ */
+@Controller
+@RequestMapping("/cpPayment")
+public class CoursePackagePaymentController extends BaseController {
+    private String PREFIX = "/system/cpPayment/";
+    @Autowired
+    private BannerClient bannerClient;
+    @Autowired
+    private IStoreService storeService;
+    @Autowired
+    private ICityService cityService;
+    @Autowired
+    private CoursePackageTypeClient coursePackageTypeClient;
+    @Autowired
+    private CoursePackagePaymentClient coursePackagePaymentClient;
+    @Autowired
+    private AppUserClient appUserClient;
+    @Autowired
+    private StoreClient storeClient;
+    @Autowired
+    private CoursePackageDiscountClient coursePackageDiscountClient;
+    @Autowired
+    private CoursePackagePaymentConfigClient coursePackagePaymentConfigClient;
+    @Autowired
+    private CoursePackageClient coursePackageClient;
+    @Autowired
+    private SiteClient siteClient;
+    /**
+     * 跳转到购课记录页面
+     */
+    @RequestMapping("")
+    public String index(Model model) {
+        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
+        List<TCoursePackageType> coursePackage = coursePackageTypeClient.queryAllCoursePackageType();
+        model.addAttribute("coursePackage",coursePackage);
+        model.addAttribute("list",list);
+        Integer roleType = UserExt.getUser().getObjectType();
+        model.addAttribute("roleType",roleType);
+        return PREFIX + "cpPayment.html";
+    }
+    /**
+     * 跳转到广告添加页面
+     */
+    @RequestMapping("/add")
+    public String operator(Model model) {
+        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
+        model.addAttribute("list",list);
+        Integer roleType = UserExt.getUser().getObjectType();
+        model.addAttribute("roleType",roleType);
+        return PREFIX + "cpPayment_add.html";
+    }
+    /**
+     *  添加购课记录
+     */
+    @ResponseBody
+    @RequestMapping(value = "/addCoursePackagePayment")
+    public ResultUtil addCoach(@RequestBody TCoursePackagePayment tCoursePackagePayment) {
+        Integer objectId = UserExt.getUser().getObjectId();
+        tCoursePackagePayment.setPayUserId(objectId);
+        // 获取课包id
+        Integer coursePackageId = tCoursePackagePayment.getCoursePackageId();
+
+        List<TCoursePackageDiscount> list = coursePackageDiscountClient.queryByCoursePackageId(coursePackageId);
+        TCoursePackageDiscount tCoursePackageDiscount1 = list.get(0);
+        Integer coursePackagePaymentConfigId = tCoursePackageDiscount1.getCoursePackagePaymentConfigId();
+        List<CoursePackagePaymentConfig> coursePackagePaymentConfigs = coursePackagePaymentConfigClient.queryCoursePackagePaymentConfigList(coursePackageId);
+        // 获取siteId 判断预约人数
+        // todo
+        Integer coursePackageId1 = tCoursePackagePayment.getCoursePackageId();
+        TCoursePackage tCoursePackage = coursePackageClient.queryById(coursePackageId1);
+        Integer siteId = tCoursePackage.getSiteId();
+//        tCoursePackagePayment.setCashPayment();
+//        tCoursePackagePayment.setPlayPaiCoin();
+        return ResultUtil.success("添加成功");
+    }
+    /**
+     * 获取列表
+     */
+    @RequestMapping(value = "/listAll")
+    @ResponseBody
+    public List<CoursePackagePaymentVO> listAll(CoursePackagePaymentQuery query) {
+        return coursePackagePaymentClient.listAll(query);
+    }
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping(value = "/pay")
+    @ResponseBody
+    public Object pay(@RequestBody CoursePackagePayDTO dto) {
+
+        String name = UserExt.getUser().getName();
+        dto.setPayUserName(name);
+        dto.setUserId(UserExt.getUser().getId());
+        coursePackagePaymentClient.changeState(dto);
+        return ResultUtil.success();
+    }
+
+    /**
+     * 根据用户电话 获取用户
+     */
+    @RequestMapping(value = "/getUserByPhone/{phone}")
+    @ResponseBody
+    public TAppUser getUserByPhone(@PathVariable("phone") String phone) {
+        return appUserClient.getAppUserByPhone(phone);
+    }
+    /**
+     * 根据用户id 获取用户电话
+     */
+    @RequestMapping(value = "/queryStudentList")
+    @ResponseBody
+    public List<TStudent> queryStudentList(Integer appUserId) {
+        return appUserClient.queryStudentList(appUserId);
+    }
+
+    /**
+     * 根据市获取门店
+     */
+    @RequestMapping(value = "/getStore")
+    @ResponseBody
+    public List<Store> getStore(String city) {
+        return storeClient.getStore(city);
+    }
+
+
+}
+
+
+
+
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TAppUserController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TAppUserController.java
index 26a8c67..4eaf1b4 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TAppUserController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TAppUserController.java
@@ -13,10 +13,10 @@
 import com.dsh.course.feignClient.activity.model.QueryBodySideAppointmentVO;
 import com.dsh.course.feignClient.other.StoreClient;
 import com.dsh.guns.config.UserExt;
-import com.dsh.guns.modular.system.model.Store;
-import com.dsh.guns.modular.system.model.TCity;
-import com.dsh.guns.modular.system.model.TSiteType;
+import com.dsh.guns.modular.system.model.*;
 import com.dsh.guns.modular.system.service.ICityService;
+import com.dsh.guns.modular.system.service.IRoleService;
+import com.dsh.guns.modular.system.service.IUserService;
 import com.dsh.guns.modular.system.util.ResultUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -41,6 +41,8 @@
 public class TAppUserController {
     private String PREFIX = "/system/appUser/";
     @Autowired
+    private IUserService userService;
+    @Autowired
     private StoreClient storeClient;
     @Autowired
     private BodySideAppointmentClient bodySideAppointmentClient;
@@ -52,26 +54,20 @@
     private AppUserClient appUserClient;
     @Autowired
     private ICityService cityService;
+    @Autowired
+    private IRoleService roleService;
+
     /**
      * 跳转体测预约管理首页
      */
     @RequestMapping("")
     public String index(Model model) {
         Integer roleType = UserExt.getUser().getObjectType();
-        Integer objectId = UserExt.getUser().getObjectId();
+        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
+        List<Role> deptid = roleService.list(new QueryWrapper<Role>().eq("deptid", 2));
         model.addAttribute("roleType",roleType);
-        model.addAttribute("objectId",objectId);
-        List<CityManager> province = cityManagerClient.listAll();
-        // 已有城市管理的省
-        ArrayList<String> list1 = new ArrayList<>();
-        // 已有城市管理的市
-        ArrayList<String> list2 = new ArrayList<>();
-        for (CityManager cityManager : province) {
-            list1.add(cityManager.getProvince());
-            list2.add(cityManager.getCity());
-        }
-        HashSet<String> set = new HashSet<String>(list1);
-        model.addAttribute("list",set);
+        model.addAttribute("sales",deptid);
+        model.addAttribute("list",list);
         return PREFIX + "TAppUser.html";
     }
     /**
@@ -80,24 +76,11 @@
     @RequestMapping("/add")
     public String add(Model model) {
         Integer roleType = UserExt.getUser().getObjectType();
-        List<CityManager> province = cityManagerClient.listAll();
-        Set<String> seenNames = new HashSet<>();
-        List<CityManager> result = new ArrayList<>();
-        for (CityManager cityManager : province) {
-            if(!seenNames.contains(cityManager.getProvince())){
-                result.add(cityManager);
-                seenNames.add(cityManager.getProvince());
-            }
-        }
-        if (roleType == 2){
-            Integer cityManagerId = UserExt.getUser().getObjectId();
-            CityManager cityManager = cityManagerClient.queryCityManagerById(cityManagerId);
-            List<Store> stores = storeClient.getStoreByCityManagerId(cityManagerId);
-            model.addAttribute("stores",stores);
-        }
-        model.addAttribute("list",result);
-
+        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
+        List<User> sales = userService.list(new QueryWrapper<User>().eq("deptid", 2));
+        model.addAttribute("list",list);
         model.addAttribute("roleType",roleType);
+        model.addAttribute("sales",sales);
         return PREFIX + "TAppUser_add.html";
     }
 
@@ -130,48 +113,32 @@
     }
     /**
      * 跳转体测预约管理编辑页面
-     * @param type 1 = 用户管理编辑 2 = 用户管理详情-非会员 3 = 用户管理详情-会员
+     * @param type 1 = 用户管理编辑 2 = 用户管理详情
      */
     @RequestMapping("/update/{id}/{type}")
     public String update(Model model,@PathVariable("id") Integer id,@PathVariable("type") Integer type) {
         Integer roleType = UserExt.getUser().getObjectType();
-        Integer objectId = UserExt.getUser().getObjectId();
-        BodySideAppointment data = bodySideAppointmentClient.getInfoById(id);
-        if (roleType == 1){
-            List<CityManager> cityManagers = cityManagerClient.listAll();
-            List<CityManager> province = new ArrayList<>();
-            List<CityManager> city = new ArrayList<>();
-            Set<String> seenNames = new HashSet<>();
-            Set<String> c    = new HashSet<>();
-            // 省列表
-            List<CityManager> result = new ArrayList<>();
-            // 市列表
-            List<CityManager> cities = new ArrayList<>();
-            // 对省/市去重
-            for (CityManager cityManager : cityManagers) {
-                if(!seenNames.contains(cityManager.getProvince())){
-                    result.add(cityManager);
-                    seenNames.add(cityManager.getProvince());
-                }
-                if(!c.contains(cityManager.getProvince())){
-                    cities.add(cityManager);
-                    c.add(cityManager.getProvince());
-                }
-            }
-            List<Store> stores = storeClient.getStore(data.getCity());
-            model.addAttribute("stores",stores);
-            model.addAttribute("list",result);
-            model.addAttribute("cities",cities);
-        }else if (roleType == 2){
-            List<Store> stores = storeClient.getStoreByCityManagerId(objectId);
-            model.addAttribute("stores",stores);
-        }
-        String birthday = new SimpleDateFormat("yyyy-MM-dd").format(data.getBirthday());
-        String appointmentTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(data.getAppointmentTime());
-        model.addAttribute("birthday",birthday);
-        model.addAttribute("appointmentTime",appointmentTime);
-        model.addAttribute("data",data);
+        TAppUser data = appUserClient.queryById(id);
+        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
+        String province = data.getProvince();
+        TCity province1 = cityService.getOne(new QueryWrapper<TCity>().eq("name", data.getProvince()));
+        List<TCity> city = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, province1.getId()));
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        String format1 = format.format(data.getBirthday());
+        List<User> sales = userService.list(new QueryWrapper<User>().eq("deptid", 2));
+        model.addAttribute("list",list);
         model.addAttribute("roleType",roleType);
+        model.addAttribute("sales",sales);
+        model.addAttribute("data",data);
+        model.addAttribute("birthday",format1);
+        model.addAttribute("city",city);
+        model.addAttribute("type",type);
+        model.addAttribute("isVip",data.getIsVip());
+        if (data.getVipEndTime()!=null){
+            SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
+            String format3 = format2.format(data.getVipEndTime());
+            model.addAttribute("vipEndTime",format3);
+        }
         return PREFIX + "TAppUser_edit.html";
     }
 
@@ -190,18 +157,45 @@
         queryAppUser.setPhone(phone);
         queryAppUser.setIsVip(isVip);
         queryAppUser.setSalesmanUserName(salesmanUserName);
-        return appUserClient.listAll(queryAppUser);
+        if (province!=null && (!province.equals(""))){
+            TCity p = cityService.getOne(new QueryWrapper<TCity>().eq("code", province));
+            queryAppUser.setProvince(p.getName());
+        }
+        if (city!=null && (!city.equals(""))){
+            TCity c = cityService.getOne(new QueryWrapper<TCity>().eq("code", city));
+            queryAppUser.setCity(c.getName());
+        }
+        List<QueryAppUserVO> queryAppUserVOS = appUserClient.listAll(queryAppUser);
+        for (QueryAppUserVO queryAppUserVO : queryAppUserVOS) {
+            if (queryAppUserVO.getSalesmanUserId()!=null){
+                queryAppUserVO.setSalesmanUserName(userService.getById(queryAppUserVO.getSalesmanUserId()).getName());
+            }
+        }
+        if (salesmanUserName!=null && (!salesmanUserName.equals(""))){
+            List<QueryAppUserVO> result = new ArrayList<>();
+            List<User> sales = userService.list(new QueryWrapper<User>().like("name", salesmanUserName));
+            for (QueryAppUserVO queryAppUserVO : queryAppUserVOS) {
+                if (queryAppUserVO.getSalesmanUserId()!=null){
+                    for (User sale : sales) {
+                        if (queryAppUserVO.getSalesmanUserId() == sale.getId()){
+                            result.add(queryAppUserVO);
+                        }
+                    }
+                }
+            }
+            return result;
+        }
+        return queryAppUserVOS;
     }
-
     /**
      * 新增用户信息
      * @return
      */
     @RequestMapping("/addAppUser")
     @ResponseBody
-    public ResultUtil addAppUser(TAppUser appUser){
-        appUserClient.addAppUser(appUser);
-        return ResultUtil.success("添加成功");
+    public Object addAppUser(@RequestBody TAppUser appUser){
+        Object o = appUserClient.addAppUser1(appUser);
+        return o;
     }
     /**
      *  添加/修改体测预约记录
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java
index e5268ae..fcef6e6 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java
@@ -21,6 +21,7 @@
 import com.dsh.guns.modular.system.service.ITSiteService;
 import com.dsh.guns.modular.system.util.ResultUtil;
 import io.swagger.models.auth.In;
+import org.aspectj.weaver.ast.Var;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -69,7 +70,27 @@
 
 
 
-
+    /**
+     * 根据门店获取课程
+     */
+    @ResponseBody
+    @RequestMapping("/getCoursePackageByStoreId")
+    public List<TCoursePackageType> getCoursePackageByStoreId(Integer storeId){
+        List<TCoursePackage> list = coursePackageClient.getCoursePackageByStoreId(storeId);
+        List<Integer> ids = new ArrayList<>();
+        for (TCoursePackage tCoursePackage : list) {
+            ids.add(tCoursePackage.getCoursePackageTypeId());
+        }
+        return coursePackageTypeClient.getByCourseIds(ids);
+    }
+    /**
+     * 根据课包类型获取课包
+     */
+    @ResponseBody
+    @RequestMapping("/getCoursePackageByType")
+    public List<TCoursePackage> getCoursePackageByType(Integer storeId){
+        return coursePackageClient.getCoursePackageByType(storeId);
+    }
     /**
      * 跳转到列表页
      * @param model
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java
index 39bbbfe..05343e6 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TFinanceController.java
@@ -17,10 +17,7 @@
 import com.dsh.guns.core.common.constant.factory.PageFactory;
 import com.dsh.guns.core.util.ToolUtil;
 import com.dsh.guns.modular.system.model.*;
-import com.dsh.guns.modular.system.service.ICityService;
-import com.dsh.guns.modular.system.service.IEvaluationService;
-import com.dsh.guns.modular.system.service.IStoreService;
-import com.dsh.guns.modular.system.service.StoreConfigService;
+import com.dsh.guns.modular.system.service.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -48,6 +45,8 @@
     @Autowired
     private ICityService cityService;
     @Autowired
+    private IRegionService regionService;
+    @Autowired
     private FinanceClient financeClient;
     @Autowired
     private CancelledClassesClient cancelledClassesClient;
@@ -57,14 +56,11 @@
      */
     @RequestMapping("/rechargeRecords")
     public String index(Model model) {
-
         List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
         model.addAttribute("list",list);
-
         Integer objectType = UserExt.getUser().getObjectType();
         Integer objectId = UserExt.getUser().getObjectId();
         model.addAttribute("userType",objectType);
-        // 去重
         String roleid = UserExt.getUser().getRoleid();
         model.addAttribute("objectType",objectType);
         return PREFIX + "RechargeRecords.html";
@@ -76,9 +72,20 @@
     @ResponseBody
     public List<RechargeRecordsVO> list(String province, String city, String name, String phone,String time,Integer type) {
         RechargeRecordsQuery coachQuery = new RechargeRecordsQuery();
-        coachQuery.setProvince(province);
-        coachQuery.setCity(city);
+        Region provinceCode = regionService.getOne(new QueryWrapper<Region>().eq("code", province));
+        Region cityCode = regionService.getOne(new QueryWrapper<Region>().eq("code", city));
+        if (provinceCode!=null){
+            coachQuery.setProvince(provinceCode.getName());
+        }else{
+            coachQuery.setProvince(province);
+        }
+        if (cityCode!=null){
+            coachQuery.setCity(cityCode.getName());
+        }else{
+            coachQuery.setCity(city);
+        }
         coachQuery.setName(name);
+
         coachQuery.setPhone(phone);
         coachQuery.setTime(time);
         coachQuery.setType(type);
@@ -100,9 +107,11 @@
         coachQuery.setType(type);
         List<RechargeRecordsVO> rechargeRecordsVOS = financeClient.rechargeList(coachQuery);
         BigDecimal total = new BigDecimal("0.00");
+        BigDecimal result = new BigDecimal("0.00");
         for (RechargeRecordsVO rechargeRecordsVO : rechargeRecordsVOS) {
             BigDecimal amount = rechargeRecordsVO.getAmount();
-            total.add(amount);
+            total = total.add(amount); // 将新的值赋给total
+            result = result.add(amount); // 将新的值赋给result
         }
         return total;
     }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CancelClassesVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CancelClassesVO.java
index 3df82b0..1e84649 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CancelClassesVO.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CancelClassesVO.java
@@ -11,14 +11,14 @@
 public class CancelClassesVO {
     /**
      *
-        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
-        {title: '所在省市', field: 'provinceAndCity', visible: true, align: 'center', valign: 'middle'},
-        {title: '上课门店', field: 'storeName', visible: true, align: 'center', valign: 'middle'},
-        {title: '学员姓名', field: 'studentName', visible:  true, align: 'center', valign: 'middle'},
-        {title: '上课老师', field: 'coachName', visible:  true, align: 'center', valign: 'middle'},
-        {title:  '消课时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle'},
-        {title:  '课程名称', field: 'courseName', visible: true, align: 'center', valign: 'middle'},
-        {title: '上课时间', field: 'startAndEnd', visible: true, align: 'center', valign: 'middle'}
+     {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
+     {title: '所在省市', field: 'provinceAndCity', visible: true, align: 'center', valign: 'middle'},
+     {title: '上课门店', field: 'storeName', visible: true, align: 'center', valign: 'middle'},
+     {title: '学员姓名', field: 'studentName', visible:  true, align: 'center', valign: 'middle'},
+     {title: '上课老师', field: 'coachName', visible:  true, align: 'center', valign: 'middle'},
+     {title:  '消课时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle'},
+     {title:  '课程名称', field: 'courseName', visible: true, align: 'center', valign: 'middle'},
+     {title: '上课时间', field: 'startAndEnd', visible: true, align: 'center', valign: 'middle'}
      */
     private Integer id;
     private String provinceAndCity;
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoursePackagePayDTO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoursePackagePayDTO.java
new file mode 100644
index 0000000..f096587
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoursePackagePayDTO.java
@@ -0,0 +1,18 @@
+package com.dsh.guns.modular.system.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 购课记录 手动支付dto
+ */
+@Data
+public class CoursePackagePayDTO {
+    private List<String> ids;
+    private String payUserName;
+    // 操作人id
+    private Integer userId;
+    // 操作人类型 1 = 平台 2 = 城市管理员 3 = 门店
+    private Integer type;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoursePackagePaymentQuery.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoursePackagePaymentQuery.java
new file mode 100644
index 0000000..e452de5
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoursePackagePaymentQuery.java
@@ -0,0 +1,30 @@
+package com.dsh.guns.modular.system.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 购课记录列表查询Query
+ */
+@Data
+public class CoursePackagePaymentQuery {
+    // 省
+    private String province;
+    // 市
+    private String city;
+    // 门店名称
+    private String storeName;
+    // 门店id
+    private List<Integer> storeIds;
+    // 课包类型
+    private Integer coursePackageTypeId;
+    // 课包名称
+    private String coursePackageTypeName;
+    // 支付状态 1=待支付 2=已支付
+    private Integer payStatus;
+    // 购买用户
+    private String payUser;
+    // 购买学员
+    private String payStudent;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoursePackagePaymentVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoursePackagePaymentVO.java
new file mode 100644
index 0000000..be14510
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoursePackagePaymentVO.java
@@ -0,0 +1,72 @@
+package com.dsh.guns.modular.system.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 购课记录列表VO
+ */
+@Data
+public class CoursePackagePaymentVO {
+    /**
+     *
+     {title: 'ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
+     {title: '所在省市', field: 'provinceAndCity', visible: role==1?true:false, align: 'center', valign: 'middle'},
+     {title:  '门店名称', field: 'storeName', visible: true, align: 'center', valign: 'middle'},
+     {title:  '课包类型', field: 'coursePackageType', visible: true, align: 'center', valign: 'middle'},
+     {title:  '课包名称', field: 'coursePackage', visible: true, align: 'center', valign: 'middle'},
+     {title:  '购买用户', field: 'payUser', visible: true, align: 'center', valign: 'middle'},
+     {title:  '联系方式', field: 'phone', visible: true, align: 'center', valign: 'middle'},
+     {title:  '购课学员', field: 'payStudent', visible: true, align: 'center', valign: 'middle'},
+     {title:  '购买方式', field: 'buyType', visible: true, align: 'center', valign: 'middle'},
+     {title:  '支付方式', field: 'payType', visible: true, align: 'center', valign: 'middle',
+     formatter:function (data) {return{1:"微信",2:"支付宝",3:"玩湃币",4:"积分",5:"积分+微信",6:"积分+支付宝"}[data]}},
+     {title:  '总金额', field: 'originalPrice'+'元', visible: true, align: 'center', valign: 'middle'},
+     {title:  '优惠金额', field: 'discountAmount'+'元', visible: true, align: 'center', valign: 'middle'},
+     {title:  '支付价格', field: 'cashPayment'+'元', visible: true, align: 'center', valign: 'middle'},
+     {title:  '支付状态', field: 'payStatus', visible: true, align: 'center', valign: 'middle'},
+     {title:  '赠送课时', field: 'giftClassHours', visible: true, align: 'center', valign: 'middle'},
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long id;
+    private String provinceAndCity;
+    // 门店id
+    private Integer storeId;
+    private String storeName;
+    private Integer coursePackageTypeId;
+    private String coursePackageType;
+    private String coursePackage;
+    private Integer coursePackageId;
+    // 用户id
+    private Integer appUserId;
+    private String payUser;
+    private String phone;
+    // 学员id
+    private Integer studentId;
+    private String payStudent;
+    private Integer payType;
+
+    private BigDecimal originalPrice;
+    // 优惠券id
+    private Long userCouponId;
+    // 优惠金额
+    private BigDecimal discountAmount;
+    // 支付状态
+    private Integer payStatus;
+    private Integer giftClassHours;
+    private Integer payUserType;
+    // 支付用户id
+    private Integer payUserId;
+    // 支付金额
+    private BigDecimal payMoney;
+    private BigDecimal cashPayment;
+    // 玩湃币价格/积分
+    private Integer playPaiCoin;
+    // 购买方式
+    private Integer buyType;
+    // 当状态为手动支付时使用 用于显示手动支付时显示操作人
+    private String buyTypeName;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/RechargeRecordsVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/RechargeRecordsVO.java
index 244fea6..19b668a 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/RechargeRecordsVO.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/RechargeRecordsVO.java
@@ -1,5 +1,6 @@
 package com.dsh.guns.modular.system.model;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -20,7 +21,9 @@
      *         {title: '玩湃币数量', field: 'playPaiCoins', visible: true, align: 'center', valign: 'middle'},
      *         {title: '充值类型', field: 'type', visible: true, align: 'center', valign: 'middle'},
      */
-    private Integer id;
+
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long id;
     private String provinceAndCity;
     private String name;
     private String phone;
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java
index 025c637..bd5206a 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java
@@ -5,6 +5,7 @@
 import com.dsh.guns.modular.system.model.Dict;
 import com.dsh.guns.modular.system.model.TStore;
 import com.dsh.guns.modular.system.model.TStoreListVo;
+import com.dsh.guns.modular.system.model.TTurn;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -49,4 +50,13 @@
 
 
     void delete1(Integer id);
+
+
+    /**
+     * 获取所有跳转页面
+     * @return
+     */
+    List<TTurn> pageList();
+
+    List<TTurn> getPage(List<Integer> ids);
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java
index 135a607..ca5b4a3 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java
@@ -5,6 +5,7 @@
 import com.dsh.course.mapper.StoreMapper;
 import com.dsh.guns.modular.system.model.TStore;
 import com.dsh.guns.modular.system.model.TStoreListVo;
+import com.dsh.guns.modular.system.model.TTurn;
 import com.dsh.guns.modular.system.service.IStoreService;
 import org.springframework.stereotype.Service;
 
@@ -79,4 +80,14 @@
     public void delete1(Integer id) {
         this.baseMapper.delete1(id);
     }
+
+    @Override
+    public List<TTurn> pageList() {
+        return this.baseMapper.pageList();
+    }
+
+    @Override
+    public List<TTurn> getPage(List<Integer> ids) {
+        return this.baseMapper.getPage(ids);
+    }
 }
diff --git a/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml b/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml
index cbe1ba4..7a8774c 100644
--- a/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml
+++ b/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml
@@ -88,4 +88,19 @@
     <select id="listTwo" resultType="java.util.Map">
         select id,url,name ,  page,sort from t_store_other_config
     </select>
+
+    <select id="getPage" resultType="com.dsh.guns.modular.system.model.TTurn">
+        select * from t_turn
+        <where>
+            <if test="ids != null and ids.size()>0">
+                AND t_turn.pid IN
+                <foreach collection="ids" separator="," item="id" open="(" close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </select>
+    <select id="pageList" resultType="com.dsh.guns.modular.system.model.TTurn">
+        select * from t_turn where pid = 0
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement.html
index 0ed8fb3..5702f2c 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement.html
@@ -15,7 +15,9 @@
                             <div class="col-sm-3">
                                 <#SelectCon id="page" name="跳转页面" >
                                 <option value="">请选择</option>
-
+                                @for(obj in pages){
+                                <option value="${obj.id}">${obj.name}</option>
+                                @}
                             </#SelectCon>
                         </div>
                         <div class="col-sm-3">
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement_add.html
index beff6f0..4b9a4a0 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement_add.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement_add.html
@@ -46,14 +46,13 @@
     <input hidden id="roleType" value="${roleType}">
     <div class="ibox-content">
         <div class="form-horizontal" id="carInfoForm">
-
-
+            @if(roleType==1){
             <div class="form-group">
                 <label class="col-sm-3 control-label">*广告类型:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="position" name = "position">
+                    <select style="width: 300px" class="form-control" id="position" onchange="updatePosition(this)" name = "position">
                         <option value="">选择类型</option>
-                        <option value="1">首页类型</option>
+                        <option value="1">首页banner</option>
                         <option value="2">线上课得积分</option>
                         <option value="3">看视频得奖励</option>
                         <option value="4">常见问题</option>
@@ -64,48 +63,50 @@
             <div class="form-group" >
                 <label class="col-sm-3 control-label">*广告名称:</label>
                 <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" class="form-control" id="name" name="name" placeholder="请输入广告名称" type="text">
+                    <input style="width: 300px" class="form-control" id="name" name="name"  placeholder="请输入广告名称" type="text">
                 </div>
             </div>
+
             <div class="form-group">
                 <label class="col-sm-3 control-label">*广告图片:</label>
-                <#avatar id="img" name="" avatarImg=""/><span id = "imgPX">推荐像素:</span>
+                <div class="col-sm-9" style="display: flex;">
+                    <#avatar id="img" name="" avatarImg=""/><span id = "imgPX">推荐像素:</span>
+                </div>
             </div>
             @if(roleType == 1){
             <div class="form-group">
                 <label class="col-sm-3 control-label">*跳转模块:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="model" name = "model" onchange="TSite.oneChange()">
+                    <select style="width: 300px" class="form-control" id="model" name = "model" onchange="updateType(this)">
+                        <option value=" ">请选择</option>
                         <option value="0">不跳转</option>
-                        @for(obj in models){
-                        <option style="width: 300px" value="${obj.id}">${obj.name}</option>
-                        @}
+                        <option value="1">加入玩湃</option>
+                        <option value="2">开始课程</option>
+                        <option value="3">使用福利</option>
+                        <option value="4">探索玩湃</option>
                     </select>
                 </div>
             </div>
             @}
-            <div class="form-group">
+            <div class="form-group" id="t1">
                 <label class="col-sm-3 control-label">*跳转页面:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="page" name = "page">
+                    <select style="width: 300px" class="form-control" id="page" name = "page" onchange="updateOne(this)">
                         <option value="">请选择</option>
 
                     </select>
                 </div>
             </div>
             @if(roleType == 1){
-            <div class="form-group">
+            <div class="form-group" id="t2">
                 <label class="col-sm-3 control-label">*跳转类型:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="type" name = "page">
+                    <select style="width: 300px" class="form-control" id="type" name = "page" onchange="updateT(this)">
                         <option value="">请选择</option>
-                        @for(obj in types){
-                        <option style="width: 300px" value="${obj.id}">${obj.name}</option>
-                        @}
                     </select>
                 </div>
             </div>
-            <div class="form-group" >
+            <div class="form-group" id="t3">
                 <label class="col-sm-3 control-label">*跳转ID:</label>
                 <div class="col-sm-9" style="display: flex;">
                     <input style="width: 300px" class="form-control" id="pageId" name="name" placeholder="请输入跳转id" type="number">
@@ -123,9 +124,7 @@
 <div class="row btn-group-m-t">
     <div class="col-sm-10 col-sm-offset-5" >
 
-        @if(type==2){
         <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit()"/>
-        @}
         <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
     </div>
 </div>
@@ -137,10 +136,81 @@
 
 </div>
 
-<script src="${ctxPath}/modular/system/tSite/tSite.js"></script>
+<script src="${ctxPath}/modular/system/advertisement/advertisement.js"></script>
 <script src="${ctxPath}/js/vue/vue.js"></script>
 <script src="${ctxPath}/js/elementui/index.js"></script>
 <link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
 
+<script>
+    laydate.render({
+        elem: '#time',
+        range:true
+    });
+
+    function updateType(e) {
+        let name  =  $("#model").val();
+        console.log(name);
+        if(name =='0'){
+            $("#t1").hide()
+            $("#t2").hide()
+            $("#t3").hide()
+        }else {
+            $("#t1").show()
+            $("#t2").show()
+            $("#t3").show()
+
+            var oneId = $('#model option:selected').text();
+            var ajax = new $ax(Feng.ctxPath + "/tShop/typeChange", function(data){
+                if(data!=null){
+                    var content = '<option value="">请选择</option>';
+                    $.each(data, function(k,v) {
+
+                        content += "<option value='"+v.id+"'>"+v.name+"</option>";
+                    });
+                    $("#page").empty().append(content);
+                }
+            });
+            ajax.set("name",oneId);
+            ajax.start();
+        }
+    }
+
+
+    function updateOne(e) {
+        var oneId=$(e).val();
+        var ajax = new $ax(Feng.ctxPath + "/tShop/typeChangeOne", function(data){
+            if(data!=null){
+                var content1 = '<option value="">请选择</option>';
+                $.each(data, function(k,v) {
+                    content1 += "<option value='"+v.id+"'>"+v.name+"</option>";
+                });
+                $("#type").empty().append(content1);
+            }
+        });
+        ajax.set("id",oneId);
+        ajax.start();
+    }
+
+    function updatePosition(e) {
+        var oneId=$(e).val();
+        var res= document.getElementById("imgPX");
+        console.log(res)
+        if (oneId == "1"){
+            res.innerHTML ="推荐像素:780x472px";
+        }else{
+            res.innerHTML ="推荐像素:780x440px";
+        }
+        console.log(oneId)
+    }
+    function updateT(e) {
+        var oneId = $('#type option:selected').text();
+        console.log(oneId);
+        if (oneId!="详情"){
+            $("#t3").hide()
+        }else{
+            $("#t3").show()
+        }
+    }
+
 </script>
 @}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement_edit.html
index 0f8dcaf..cab31e1 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement_edit.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/advertisement/advertisement_edit.html
@@ -39,23 +39,27 @@
         margin-left: 255px;
     }
 
+
 </style>
 <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
 <div class="ibox float-e-margins">
-    <input hidden id="objectType" value="${objectType}">
-    <input hidden id="objectId" value="${objectId}">
+    <input hidden id="roleType" value="${roleType}">
+    <input hidden id="type" value="${type}">
+    <input hidden id="turnId" value="${data.turnId}">
+    <input hidden id="id" value="${data.id}">
+    <input hidden id="img1" value="${data.img}">
     <div class="ibox-content">
         <div class="form-horizontal" id="carInfoForm">
-
-            @if(roleType == 1){
+            @if(roleType==1){
             <div class="form-group">
                 <label class="col-sm-3 control-label">*广告类型:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="position" name = "position">
-                        <option value="1"${data.position==1 ? 'selected=selected' : ''}>首页类型</option>
-                        <option value="2"${data.position==2 ? 'selected=selected' : ''}>线上课得积分</option>
-                        <option value="3"${data.position==3 ? 'selected=selected' : ''}>看视频得奖励</option>
-                        <option value="4"${data.position==4 ? 'selected=selected' : ''}>常见问题</option>
+                    <select style="width: 300px" class="form-control" id="position" onchange="updatePosition(this)" name = "position">
+                        <option value="">选择类型</option>
+                        <option value="1" ${data.position == 1 ? 'selected=selected' : ''}>首页banner</option>
+                        <option value="2" ${data.position == 2 ? 'selected=selected' : ''}>线上课得积分</option>
+                        <option value="3" ${data.position == 3 ? 'selected=selected' : ''}>看视频得奖励</option>
+                        <option value="4" ${data.position == 4 ? 'selected=selected' : ''}>常见问题</option>
                     </select>
                 </div>
             </div>
@@ -63,43 +67,47 @@
             <div class="form-group" >
                 <label class="col-sm-3 control-label">*广告名称:</label>
                 <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" class="form-control" value="${data.name}" id="name" name="name" placeholder="请输入广告名称" type="text">
+                    <input style="width: 300px" class="form-control" value="${data.name}" id="name" name="name"  placeholder="请输入广告名称" type="text">
                 </div>
             </div>
+
             <div class="form-group">
                 <label class="col-sm-3 control-label">*广告图片:</label>
-                <#avatar id="img" name="" avatarImg="${data.img}"/><span id = "imgPX">推荐像素:</span>
+                <div class="col-sm-9" style="display: flex;">
+                    <#avatar id="img" name="" avatarImg="${data.img}"/><span id = "imgPX">推荐像素:</span>
+                </div>
             </div>
             @if(roleType == 1){
             <div class="form-group">
                 <label class="col-sm-3 control-label">*跳转模块:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="model" name = "model">
-                        <option value="0">不跳转</option>
-                        @for(obj in models){
-                        <option style="width: 300px" value="${obj.id}">${obj.name}</option>
-                        <option value="${obj.id}" ${obj.name == data.models ? 'selected=selected' : ''}>${obj.name}</option>
-                        @}
+                    <select style="width: 300px" class="form-control" id="model" name = "model" onchange="updateType(this)">
+                        <option value="">请选择</option>
+                        <option value="0"${data.model == '不跳转' ? 'selected=selected' : ''}>不跳转</option>
+                        <option value="1"${data.model == '加入玩湃' ? 'selected=selected' : ''}>加入玩湃</option>
+                        <option value="2"${data.model == '开始课程' ? 'selected=selected' : ''}>开始课程</option>
+                        <option value="3"${data.model == '使用福利' ? 'selected=selected' : ''}>使用福利</option>
+                        <option value="4"${data.model == '探索玩湃' ? 'selected=selected' : ''}>探索玩湃</option>
                     </select>
                 </div>
             </div>
             @}
-            <div class="form-group">
+            <div class="form-group" id="t1">
                 <label class="col-sm-3 control-label">*跳转页面:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="page" name = "page">
+                    <select style="width: 300px" class="form-control" id="page" name = "page" onchange="updateOne(this)">
                         <option value="">请选择</option>
                         @for(obj in pages){
-                        <option value="${obj.id}" ${obj.id == data.pageId ? 'selected=selected' : ''}>${obj.name}</option>
+                        <option value="${obj.id}" ${obj.id == data.jumpPage ? 'selected=selected' : ''}>${obj.name}</option>
                         @}
                     </select>
                 </div>
             </div>
-
-            <div class="form-group">
+            @if(roleType == 1){
+            <div class="form-group" id="t2">
                 <label class="col-sm-3 control-label">*跳转类型:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="type" name = "page">
+                    <select style="width: 300px" class="form-control" id="type" name = "page" onchange="updateT(this)">
                         <option value="">请选择</option>
                         @for(obj in types){
                         <option value="${obj.id}" ${obj.id == data.typeId ? 'selected=selected' : ''}>${obj.name}</option>
@@ -108,12 +116,13 @@
                 </div>
             </div>
 
-            <div class="form-group" >
+            <div class="form-group" id="t3">
                 <label class="col-sm-3 control-label">*跳转ID:</label>
                 <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" class="form-control" id="pageId" value="${data.turnId}" name="name" placeholder="请输入跳转id" type="number">
+                    <input style="width: 300px" value="${data.turnId}" class="form-control" id="pageId" name="name" placeholder="请输入跳转id" type="number">
                 </div>
             </div>
+
             @}
             <div class="form-group" >
                 <label class="col-sm-3 control-label">*排序:</label>
@@ -125,9 +134,8 @@
 
             <div class="row btn-group-m-t">
                 <div class="col-sm-10 col-sm-offset-5" >
-
                     @if(type==2){
-                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit()"/>
+                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.updateSubmit()"/>
                     @}
                     <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
                 </div>
@@ -140,10 +148,89 @@
 
 </div>
 
-<script src="${ctxPath}/modular/system/tSite/tSite.js"></script>
+<script src="${ctxPath}/modular/system/advertisement/advertisement.js"></script>
 <script src="${ctxPath}/js/vue/vue.js"></script>
 <script src="${ctxPath}/js/elementui/index.js"></script>
 <link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
 
+<script>
+    laydate.render({
+        elem: '#time',
+        range:true
+    });
 
+    function updateType(e) {
+        let name  =  $("#model").val();
+        console.log(name);
+        if(name =='0'){
+            $("#t1").hide()
+            $("#t2").hide()
+            $("#t3").hide()
+        }else {
+            $("#t1").show()
+            $("#t2").show()
+            $("#t3").show()
+
+            var oneId = $('#model option:selected').text();
+            var ajax = new $ax(Feng.ctxPath + "/tShop/typeChange", function(data){
+                if(data!=null){
+                    var content = '<option value="">请选择</option>';
+                    $.each(data, function(k,v) {
+
+                        content += "<option value='"+v.id+"'>"+v.name+"</option>";
+                    });
+                    $("#page").empty().append(content);
+                }
+            });
+            ajax.set("name",oneId);
+            ajax.start();
+        }
+    }
+
+
+    function updateOne(e) {
+        var oneId=$(e).val();
+        var ajax = new $ax(Feng.ctxPath + "/tShop/typeChangeOne", function(data){
+            if(data!=null){
+                var content1 = '<option value="">请选择</option>';
+                $.each(data, function(k,v) {
+                    content1 += "<option value='"+v.id+"'>"+v.name+"</option>";
+                });
+                $("#type").empty().append(content1);
+            }
+        });
+        ajax.set("id",oneId);
+        ajax.start();
+    }
+
+    function updatePosition(e) {
+        var oneId=$(e).val();
+        var res= document.getElementById("imgPX");
+        console.log(res)
+        if (oneId == "1"){
+            res.innerHTML ="推荐像素:780x472px";
+        }else{
+            res.innerHTML ="推荐像素:780x440px";
+        }
+        console.log(oneId)
+    }
+    function updateT(e) {
+        var oneId = $('#type option:selected').text();
+        console.log(oneId);
+        if (oneId!="详情"){
+            $("#t3").hide()
+        }else{
+            $("#t3").show()
+        }
+    }
+    window.onload = function() {
+        var temp = $("#turnId").val();
+        var res= document.getElementById("imgPX");
+        res.innerHTML ="推荐像素:780x472px";
+        console.log("看看temp",temp);
+        if (temp==""){
+            $("#t3").hide();
+        }
+    }
+</script>
 @}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser.html
index b8550a3..1878689 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser.html
@@ -43,10 +43,10 @@
                                             所在省
                                         </button>
                                     </div>
-                                    <select class="form-control" id="pCode" onchange="TQuestion.oneChange(1)">
-                                        <option value="">全部</option>
+                                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TQuestion.oneChange(this)">
+                                        <option value="">请选择省</option>
                                         @for(obj in list){
-                                        <option value="${obj}">${obj}</option>
+                                        <option style="width: 300px" value="${obj.code}">${obj.name}</option>
                                         @}
                                     </select>
                                 </div>
@@ -60,9 +60,11 @@
                                             所在市
                                         </button>
                                     </div>
-                                    <select class="form-control" id="cCode">
-                                        <option value="">请先选择省</option>
-                                    </select>
+                                    <div class="col-sm-9">
+                                        <select style="width: 300px" class="form-control" id="cCode" name="cCode" >
+                                            <option value="">请选择市</option>
+                                        </select>
+                                    </div>
                                 </div>
                             </div>
                             @}
@@ -77,7 +79,7 @@
                                 <#SelectCon id="isVip" name="年度会员" >
                                 <option value="">全部</option>
                                 <option value="1">是</option>
-                                <option value="2">否</option>
+                                <option value="0">否</option>
                             </#SelectCon>
                         </div>
                         <div class="col-sm-3">
@@ -93,7 +95,7 @@
                         <div style="margin-top: 10px" class="hidden-xs" id="TCouponTableToolbar" role="group">
                             <#button name="添加" icon="fa-plus" clickFun="TQuestion.openAdd()"/>
                             <#button name="编辑" icon="fa-edit" clickFun="TQuestion.openChange()" space="true"/>
-                            <#button name="查看详情" icon="fa-edit" clickFun="TQuestion.openChange()" space="true"/>
+                            <#button name="查看详情" icon="fa-edit" clickFun="TQuestion.openInfo()" space="true"/>
                             <#button name="冻结" icon="fa-check" clickFun="TQuestion.onShelf()" space="true"/>
                             <#button name="解冻" icon="fa-check" clickFun="TQuestion.onShelf()" space="true"/>
                             <#button name="添加学员" icon="fa-edit" clickFun="TQuestion.openChange()" space="true"/>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_add.html
index 64bac59..f2ddb8a 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_add.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_add.html
@@ -45,10 +45,10 @@
             <div class="form-group" id="provinceCode">
                 <label class="col-sm-3 control-label">*所在省:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TQuestion.oneChange()">
+                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TQuestion.oneChange(this)">
                         <option value="">请选择省</option>
                         @for(obj in list){
-                        <option style="width: 300px" value="${obj.provinceCode}">${obj.province}</option>
+                        <option style="width: 300px" value="${obj.code}">${obj.name}</option>
                         @}
                     </select>
                 </div>
@@ -57,7 +57,7 @@
             <div class="form-group" id="cityCode">
                 <label class="col-sm-3 control-label">*所在市:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" onchange="TQuestion.oneChangeNext(this)">
+                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" >
                         <option value="">请选择市</option>
                     </select>
                 </div>
@@ -98,8 +98,8 @@
                 <div class="col-sm-9">
                     <select style="width: 300px" class="form-control" id="salesmanUserName" name="salesmanUserName">
                         <option value="">请选择</option>
-                        @for(obj in list){
-                        <option style="width: 300px" value="${obj.provinceCode}">${obj.province}</option>
+                        @for(obj in sales){
+                        <option style="width: 300px" value="${obj.id}">${obj.name}</option>
                         @}
                     </select>
                 </div>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_edit.html
index ef5c817..1fa75eb 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_edit.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_edit.html
@@ -39,16 +39,16 @@
 <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
 <div class="ibox float-e-margins">
     <input hidden id="id" value="${data.id}">
-    <input hidden id="roleType" value="${roleType}">
     <div class="ibox-content">
         <div class="form-horizontal" id="carInfoForm">
             @if(roleType == 1){
             <div class="form-group" id="provinceCode">
                 <label class="col-sm-3 control-label">*所在省:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TQuestion.oneChange()">
+                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TQuestion.oneChange(this)">
+                        <option value="">请选择省</option>
                         @for(obj in list){
-                        <option value="${obj.provinceCode}" ${obj.province == data.province ? 'selected=selected' : ''}>${obj.province}</option>
+                        <option style="width: 300px" value="${obj.code}" ${obj.name == data.province ? 'selected=selected' : ''}>${obj.name}</option>
                         @}
                     </select>
                 </div>
@@ -57,71 +57,99 @@
             <div class="form-group" id="cityCode">
                 <label class="col-sm-3 control-label">*所在市:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" onchange="TQuestion.oneChangeNext(this)">
-                        @for(obj in cities){
-                        <option value="${obj.cityCode}" ${obj.city == data.city ? 'selected=selected' : ''}>${obj.city}</option>
+                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" >
+                        @for(obj in city){
+                        <option style="width: 300px" value="${obj.code}"${obj.name == data.province ? 'selected=selected' : ''}>${obj.name}</option>
                         @}
                     </select>
                 </div>
             </div>
             @}
-            @if(roleType != 3){
+
+
             <div class="form-group" >
-                <label class="col-sm-3 control-label">*所属门店:</label>
+                <label class="col-sm-3 control-label">*姓名:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" value="${data.name}" id="learnerName"  placeholder="请输入姓名" type="text">
+                </div>
+            </div>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*生日:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" value="${birthday}" id="birthday"  placeholder="请选择" type="date">
+                </div>
+            </div>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*性别:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="store" name="account">
-                        @for(obj in stores){
-                        <option value="${obj.id}" ${obj.id == data.storeId ? 'selected=selected' : ''}>${obj.name}</option>
+                    <select style="width: 300px"  class="form-control" id="gender" name = "gender">
+                        <option value="" style="color: #b6b6b6" disabled selected>请选择性别</option>
+                        <option value="1" ${data.gender == 1 ? 'selected=selected' : ''}>男</option>
+                        <option value="2" ${data.gender == 2 ? 'selected=selected' : ''}>女</option>
+                    </select>
+                </div>
+            </div>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*联系电话:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" value="${data.phone}" id="phone"  placeholder="请输入联系电话" type="text">
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">*销售人员:</label>
+                <div class="col-sm-9">
+                    <select style="width: 300px" class="form-control" id="salesmanUserName" name="salesmanUserName">
+                        <option value="">请选择</option>
+                        @for(obj in sales){
+                        <option style="width: 300px" value="${obj.id}" ${obj.id == data.salesmanUserId ? 'selected=selected' : ''}>${obj.name}</option>
                         @}
                     </select>
                 </div>
             </div>
+            @if(isVip == 1){
+            <div class="form-horizontal" id="carInfoForm1">
+                <h2>会员信息</h2>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">*到期时间:</label>
+                    <div class="col-sm-9" style="display: flex;">
+                        <input style="width: 300px" class="form-control" value="${vipEndTime}" id="vipEndTime"  placeholder="请选择" type="date">
+                    </div>
+                </div>
+                <div class="form-group" >
+                    <label class="col-sm-3 control-label">*性别:</label>
+                    <div class="col-sm-9">
+                        <select style="width: 300px"  class="form-control" id="viplevelId" name = "gender">
+                            <option value="" style="color: #b6b6b6" disabled selected>请选择性别</option>
+                            <option value="1" ${data.viplevelId == 1 ? 'selected=selected' : ''}>青铜</option>
+                            <option value="2" ${data.viplevelId == 2 ? 'selected=selected' : ''}>白银</option>
+                            <option value="3" ${data.viplevelId == 3 ? 'selected=selected' : ''}>黄金</option>
+                        </select>
+                    </div>
+                </div>
+            </div>
             @}
-            <div class="form-group" >
-                <label class="col-sm-3 control-label">*家长姓名:</label>
-                <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" value="${data.parentName}" class="form-control" id="parentName"  placeholder="请输入家长姓名" type="text">
-                </div>
-            </div>
-
-            <div class="form-group" >
-                <label class="col-sm-3 control-label">*家长联系方式:</label>
-                <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" value="${data.phone}" class="form-control" id="phone"  placeholder="请输入家长联系方式" type="text">
-                </div>
-            </div>
-
-            <div class="form-group" >
-                <label class="col-sm-3 control-label">*学员姓名:</label>
-                <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" value="${data.learnerName}" class="form-control" id="learnerName"  placeholder="请输入学员姓名" type="text">
-                </div>
-            </div>
-
-            <div class="form-group" >
-                <label class="col-sm-3 control-label">*学员年龄:</label>
-                <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" value="${data.learnerAge}" class="form-control" id="learnerAge"  placeholder="请输入学员年龄" type="text">
-                </div>
-            </div>
-
-            <div class="form-group" >
-                <label class="col-sm-3 control-label">*学员生日:</label>
-                <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" value="${birthday}" class="form-control" id="birthday"  placeholder="请选择" type="date">
-                </div>
-            </div>
-
-            <div class="form-group" >
-                <label class="col-sm-3 control-label">*预约时间:</label>
-                <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" value="${appointmentTime}" class="form-control" id="appointmentTime"  placeholder="请选择" type="datetime-local">
+            <div class="form-horizontal" id="carInfoForm2">
+                <h2>学员信息</h2>
+                <div class="form-group" style="display: flex">
+                    @for(obj in students){
+                    <label class="col-sm-3 control-label">*姓名:</label>
+                    <div class="col-sm-9">
+                        <input style="width: 300px" class="form-control" value="${obj.name}" id="studentName" type="text">
+                    </div>
+                    <label class="col-sm-3 control-label">*联系电话:</label>
+                    <div class="col-sm-9">
+                        <input style="width: 300px" class="form-control" value="${obj.phone}" id="studentPhone" type="text">
+                    </div>
+                    <#button btnCss="info" name="查看详情" id="ensure" icon="fa-check" clickFun="TQuestion.studentInfo(${obj.id})"/>
+                    @}
                 </div>
             </div>
 
             <div class="row btn-group-m-t">
                 <div class="col-sm-10 col-sm-offset-5" >
-                    <#button btnCss="info" name="保存" id="ensure" icon="fa-check" clickFun="TQuestion.addSubmit()"/>
+                    @if(type == 1){
+                    <#button btnCss="info" name="保存" id="ensure" icon="fa-check" clickFun="TQuestion.updateSubmit()"/>
+                    @}
                     <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TQuestion.close()"/>
                 </div>
             </div>
@@ -131,7 +159,7 @@
 
 </div>
 
-<script src="${ctxPath}/modular/system/bodySideAppointment/tBodySideAppointment_edit.js"></script>
+<script src="${ctxPath}/modular/system/appUser/tAppUser.js"></script>
 <script src="${ctxPath}/js/vue/vue.js"></script>
 <script src="${ctxPath}/js/elementui/index.js"></script>
 <link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_info.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_info.html
index ef5c817..1fa75eb 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_info.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/appUser/TAppUser_info.html
@@ -39,16 +39,16 @@
 <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
 <div class="ibox float-e-margins">
     <input hidden id="id" value="${data.id}">
-    <input hidden id="roleType" value="${roleType}">
     <div class="ibox-content">
         <div class="form-horizontal" id="carInfoForm">
             @if(roleType == 1){
             <div class="form-group" id="provinceCode">
                 <label class="col-sm-3 control-label">*所在省:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TQuestion.oneChange()">
+                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TQuestion.oneChange(this)">
+                        <option value="">请选择省</option>
                         @for(obj in list){
-                        <option value="${obj.provinceCode}" ${obj.province == data.province ? 'selected=selected' : ''}>${obj.province}</option>
+                        <option style="width: 300px" value="${obj.code}" ${obj.name == data.province ? 'selected=selected' : ''}>${obj.name}</option>
                         @}
                     </select>
                 </div>
@@ -57,71 +57,99 @@
             <div class="form-group" id="cityCode">
                 <label class="col-sm-3 control-label">*所在市:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" onchange="TQuestion.oneChangeNext(this)">
-                        @for(obj in cities){
-                        <option value="${obj.cityCode}" ${obj.city == data.city ? 'selected=selected' : ''}>${obj.city}</option>
+                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" >
+                        @for(obj in city){
+                        <option style="width: 300px" value="${obj.code}"${obj.name == data.province ? 'selected=selected' : ''}>${obj.name}</option>
                         @}
                     </select>
                 </div>
             </div>
             @}
-            @if(roleType != 3){
+
+
             <div class="form-group" >
-                <label class="col-sm-3 control-label">*所属门店:</label>
+                <label class="col-sm-3 control-label">*姓名:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" value="${data.name}" id="learnerName"  placeholder="请输入姓名" type="text">
+                </div>
+            </div>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*生日:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" value="${birthday}" id="birthday"  placeholder="请选择" type="date">
+                </div>
+            </div>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*性别:</label>
                 <div class="col-sm-9">
-                    <select style="width: 300px" class="form-control" id="store" name="account">
-                        @for(obj in stores){
-                        <option value="${obj.id}" ${obj.id == data.storeId ? 'selected=selected' : ''}>${obj.name}</option>
+                    <select style="width: 300px"  class="form-control" id="gender" name = "gender">
+                        <option value="" style="color: #b6b6b6" disabled selected>请选择性别</option>
+                        <option value="1" ${data.gender == 1 ? 'selected=selected' : ''}>男</option>
+                        <option value="2" ${data.gender == 2 ? 'selected=selected' : ''}>女</option>
+                    </select>
+                </div>
+            </div>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*联系电话:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" value="${data.phone}" id="phone"  placeholder="请输入联系电话" type="text">
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">*销售人员:</label>
+                <div class="col-sm-9">
+                    <select style="width: 300px" class="form-control" id="salesmanUserName" name="salesmanUserName">
+                        <option value="">请选择</option>
+                        @for(obj in sales){
+                        <option style="width: 300px" value="${obj.id}" ${obj.id == data.salesmanUserId ? 'selected=selected' : ''}>${obj.name}</option>
                         @}
                     </select>
                 </div>
             </div>
+            @if(isVip == 1){
+            <div class="form-horizontal" id="carInfoForm1">
+                <h2>会员信息</h2>
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">*到期时间:</label>
+                    <div class="col-sm-9" style="display: flex;">
+                        <input style="width: 300px" class="form-control" value="${vipEndTime}" id="vipEndTime"  placeholder="请选择" type="date">
+                    </div>
+                </div>
+                <div class="form-group" >
+                    <label class="col-sm-3 control-label">*性别:</label>
+                    <div class="col-sm-9">
+                        <select style="width: 300px"  class="form-control" id="viplevelId" name = "gender">
+                            <option value="" style="color: #b6b6b6" disabled selected>请选择性别</option>
+                            <option value="1" ${data.viplevelId == 1 ? 'selected=selected' : ''}>青铜</option>
+                            <option value="2" ${data.viplevelId == 2 ? 'selected=selected' : ''}>白银</option>
+                            <option value="3" ${data.viplevelId == 3 ? 'selected=selected' : ''}>黄金</option>
+                        </select>
+                    </div>
+                </div>
+            </div>
             @}
-            <div class="form-group" >
-                <label class="col-sm-3 control-label">*家长姓名:</label>
-                <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" value="${data.parentName}" class="form-control" id="parentName"  placeholder="请输入家长姓名" type="text">
-                </div>
-            </div>
-
-            <div class="form-group" >
-                <label class="col-sm-3 control-label">*家长联系方式:</label>
-                <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" value="${data.phone}" class="form-control" id="phone"  placeholder="请输入家长联系方式" type="text">
-                </div>
-            </div>
-
-            <div class="form-group" >
-                <label class="col-sm-3 control-label">*学员姓名:</label>
-                <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" value="${data.learnerName}" class="form-control" id="learnerName"  placeholder="请输入学员姓名" type="text">
-                </div>
-            </div>
-
-            <div class="form-group" >
-                <label class="col-sm-3 control-label">*学员年龄:</label>
-                <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" value="${data.learnerAge}" class="form-control" id="learnerAge"  placeholder="请输入学员年龄" type="text">
-                </div>
-            </div>
-
-            <div class="form-group" >
-                <label class="col-sm-3 control-label">*学员生日:</label>
-                <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" value="${birthday}" class="form-control" id="birthday"  placeholder="请选择" type="date">
-                </div>
-            </div>
-
-            <div class="form-group" >
-                <label class="col-sm-3 control-label">*预约时间:</label>
-                <div class="col-sm-9" style="display: flex;">
-                    <input style="width: 300px" value="${appointmentTime}" class="form-control" id="appointmentTime"  placeholder="请选择" type="datetime-local">
+            <div class="form-horizontal" id="carInfoForm2">
+                <h2>学员信息</h2>
+                <div class="form-group" style="display: flex">
+                    @for(obj in students){
+                    <label class="col-sm-3 control-label">*姓名:</label>
+                    <div class="col-sm-9">
+                        <input style="width: 300px" class="form-control" value="${obj.name}" id="studentName" type="text">
+                    </div>
+                    <label class="col-sm-3 control-label">*联系电话:</label>
+                    <div class="col-sm-9">
+                        <input style="width: 300px" class="form-control" value="${obj.phone}" id="studentPhone" type="text">
+                    </div>
+                    <#button btnCss="info" name="查看详情" id="ensure" icon="fa-check" clickFun="TQuestion.studentInfo(${obj.id})"/>
+                    @}
                 </div>
             </div>
 
             <div class="row btn-group-m-t">
                 <div class="col-sm-10 col-sm-offset-5" >
-                    <#button btnCss="info" name="保存" id="ensure" icon="fa-check" clickFun="TQuestion.addSubmit()"/>
+                    @if(type == 1){
+                    <#button btnCss="info" name="保存" id="ensure" icon="fa-check" clickFun="TQuestion.updateSubmit()"/>
+                    @}
                     <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TQuestion.close()"/>
                 </div>
             </div>
@@ -131,7 +159,7 @@
 
 </div>
 
-<script src="${ctxPath}/modular/system/bodySideAppointment/tBodySideAppointment_edit.js"></script>
+<script src="${ctxPath}/modular/system/appUser/tAppUser.js"></script>
 <script src="${ctxPath}/js/vue/vue.js"></script>
 <script src="${ctxPath}/js/elementui/index.js"></script>
 <link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/cpPayment/cpPayment.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/cpPayment/cpPayment.html
new file mode 100644
index 0000000..91b7210
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/cpPayment/cpPayment.html
@@ -0,0 +1,101 @@
+@layout("/common/_container.html"){
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+            <input hidden id="roleType" value="${roleType}">
+            <div class="ibox-title">
+                <h5>购课记录</h5>
+            </div>
+            <div class="ibox-content">
+                <div class="row row-lg">
+                    <div class="col-sm-12">
+                        <div class="row">
+                            @if(roleType==1){
+                            <div class="col-sm-3">
+                                <div class="input-group">
+                                    <div class="input-group-btn open">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
+                                            所在省
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="pCode" onchange="TCompetition.oneChange(this)">
+                                        <option value="">全部</option>
+                                        @for(obj in list){
+                                        <option value="${obj.code}">${obj.name}</option>
+                                        @}
+                                    </select>
+                                </div>
+                            </div>
+                            @}
+                            @if(roleType==1){
+                            <div class="col-sm-3">
+                                <div class="input-group">
+                                    <div class="input-group-btn open">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
+                                            所在市
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="cCode">
+                                    </select>
+                                </div>
+                            </div>
+                            @}
+                            <div class="col-sm-3">
+                                <div class="input-group">
+                                    <div class="input-group-btn open">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
+                                            课包类型
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="coursePackage">
+                                        <option value="">全部</option>
+                                        @for(obj in coursePackage){
+                                        <option value="${obj.id}">${obj.name}</option>
+                                        @}
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="coursePackageName" name="课包名称" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#SelectCon id="state" name="支付状态" >
+                                <option value="">全部</option>
+                                <option value="1">待支付</option>
+                                <option value="2">已支付</option>
+                                <option value="3">已取消</option>
+                            </#SelectCon>
+                        </div>
+
+                            <div class="col-sm-3">
+                                <#NameCon id="payUser" name="购买用户" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="payStudent" name="购课学员" />
+                            </div>
+
+                            <div class="col-sm-3">
+                                <#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TCompetition.resetSearch()" space="true"/>
+                            </div>
+                        </div>
+                        <div class="hidden-xs" id="TCompetitionTableToolbar" role="group">
+                            <#button name="添加" icon="fa-plus" clickFun="TCompetition.openAddTCompetition()"/>
+                            <#button name="手动支付" icon="fa-remove" clickFun="TCompetition.unfreeze()" space="true"/>
+                        </div>
+                        <#table id="TCompetitionTable"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/modular/system/cpPayment/cpPayment.js"></script>
+<script>
+    laydate.render({
+        elem: '#createTime'
+        ,range: true
+        ,lang:"en"
+    });
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/cpPayment/cpPayment_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/cpPayment/cpPayment_add.html
new file mode 100644
index 0000000..b354ec4
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/cpPayment/cpPayment_add.html
@@ -0,0 +1,217 @@
+@layout("/common/_container.html"){
+<style>
+    .avatar-uploader .el-upload {
+        border: 1px dashed #d9d9d9;
+        border-radius: 6px;
+        cursor: pointer;
+        position: relative;
+        height: 100px;
+        width: 100px;
+        overflow: hidden;
+    }
+
+
+
+    /* 提示框样式 */
+    #dialog {
+        text-align: center;
+        background-color: #fff;
+        border: 1px solid #ccc;
+        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
+        padding: 20px;
+        max-width: 400px;
+    }
+    .avatar-uploader .el-upload:hover {
+        border-color: #409EFF;
+    }
+    .avatar-uploader-icon {
+        font-size: 28px;
+        color: #8c939d;
+        width: 100px;
+        height: 100px;
+        line-height: 100px;
+        margin-top: 32px;
+        text-align: center;
+    }
+    .avatar {
+        width: 100px;
+        height: 100px;
+        display: block;
+    }
+
+    .col-sm-12 {
+        margin-top: 20px;
+    }
+
+    .col-sm-12 select {
+        height: 33px;
+    }
+</style>
+<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="carInfoForm1">
+            <h2>选择学员信息</h2>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">会员手机号:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" id="vipPhone" name="vipPhone" placeholder="请输入家长会员手机号" type="number">
+                    <#button btnCss="info" name="查询" id="ensure" icon="fa-check" clickFun="TCompetition.getStudent()"/>
+                </div>
+            </div>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">请选择学员:</label>
+                <div class="col-sm-9">
+                    <select style="width: 300px" class="form-control" id="student" name="student" >
+                        <option value="">选择学员</option>
+                    </select>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="ibox-content">
+        <div class="form-horizontal" id="carInfoForm">
+            <h2>选择课包信息</h2>
+            <input hidden id="roleType" value="${roleType}">
+            @if(roleType==1){
+            <div class="form-group" id="provinceCode">
+                <label class="col-sm-3 control-label">所在省:</label>
+                <div class="col-sm-9">
+                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TCompetition.oneChange(this)">
+                        <option value="">选择省</option>
+                        @for(obj in list){
+                        <option value="${obj.code}">${obj.name}</option>
+                        @}
+                    </select>
+                </div>
+            </div>
+            <div class="form-group" id="cityCode">
+                <label class="col-sm-3 control-label">所在市:</label>
+                <div class="col-sm-9">
+                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" >
+                        <option value="">选择市</option>
+                    </select>
+                </div>
+            </div>
+            @}
+            @if(roleType !=3){
+            <div class="form-group">
+                <label class="col-sm-3 control-label">*所属门店:</label>
+                <div class="col-sm-9">
+                    <select style="width: 300px" class="form-control" id="store" name="store" onchange="TCompetition.nextStore(this)" >
+                        <option value="">选择门店</option>
+                    </select>
+                </div>
+            </div>
+            @}
+            <div class="form-group">
+                <label class="col-sm-3 control-label">*课包类型:</label>
+                <div class="col-sm-9">
+                    <select style="width: 300px" class="form-control" id="coursePackageType" name="store" onchange="TCompetition.getCoursePackage(this)" >
+                        <option value="">选择课包类型</option>
+                    </select>
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">*课包名称:</label>
+                <div class="col-sm-9">
+                    <select style="width: 300px" class="form-control" id="coursePackageName" name="store" onchange="TCompetition.getCoursePackage(this)" >
+                        <option value="">选择课包</option>
+                    </select>
+                </div>
+            </div>
+            @if(roleType == 1){
+            <div class="form-group">
+                <label class="col-sm-3 control-label">*课时规格:</label>
+                <div class="col-sm-9">
+                    <select style="width: 300px" class="form-control" id="courseTime" name="store">
+                        <option value="">选择规格</option>
+                    </select>
+                </div>
+            </div>
+            @}
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*支付金额:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" id="cashPayment" name="cashPayment" placeholder="请输入金额" type="number">
+                    <span style="margin-left: 5px;margin-top: 5px">¥</span>
+                </div>
+            </div>
+            <div class="form-group" >
+                <label class="col-sm-3 control-label">*玩湃币支付:</label>
+                <div class="col-sm-9" style="display: flex;">
+                    <input style="width: 300px" class="form-control" id="playPaiCoin" name="playPaiCoin" placeholder="请输入金额" type="number">
+                    <span style="margin-left: 5px;margin-top: 5px">币</span>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="row btn-group-m-t">
+        <div class="col-sm-10 col-sm-offset-5">
+            <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TCompetition.addSubmit()"/>
+            <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/>
+        </div>
+    </div>
+
+</div>
+
+</div>
+</div>
+<script src="${ctxPath}/modular/system/cpPayment/cpPayment.js"></script>
+<script src="${ctxPath}/js/vue/vue.js"></script>
+<script src="${ctxPath}/js/elementui/index.js"></script>
+<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
+<script>
+    laydate.render({
+        elem: '#time',
+        range:true
+    });
+
+    var vue2 = new Vue({
+        el: '#app1',
+        props: {
+            // 数量限制
+            limit: {
+                type: Number,
+                default: 2
+            },
+        },
+        data: {
+            autoUpload: true,//自动上传
+            imageUrl1: '',//模型数据,用于上传图片完成后图片预览
+            dialogVisible: false
+        },
+        methods: {
+            handleAvatarSuccess(res, file) {
+                TCarInfoDlg.goodsPicArray.push(file);
+            },
+            beforeAvatarUpload(file) {
+                const isLt2M = file.size / 1024 / 1024 < 10;
+                if (!isLt2M) {
+                    this.$message.error('上传图片大小不能超过 10MB!');
+                }
+                return isLt2M;
+            },
+            handleRemove(file, fileList) {
+                TCarInfoDlg.goodsPicArray = TCarInfoDlg.goodsPicArray.filter(item => {
+                    return item.uid != file.uid;
+                });
+            },
+        },
+        created() {
+        },
+    });
+
+
+    function updateType(o) {
+        if(o==1){
+            $("#yys").hide()
+        }else {
+            $("#yys").show()
+
+        }
+
+    }
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/finance/RechargeRecords.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/finance/RechargeRecords.html
index d00f859..71cf6af 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/finance/RechargeRecords.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/finance/RechargeRecords.html
@@ -37,7 +37,7 @@
                                  </div>
                             </div>
                             <div class="col-sm-3">
-                                <#TimeCon id="beginTime" name="有效期" isTime="false"/>
+                                <#TimeCon id="beginTime" name="充值时间" isTime="false"/>
                             </div>
 
 
@@ -80,8 +80,8 @@
 <script>
     laydate.render({
         elem: '#beginTime'
-        ,range: true
-        ,lang:"en"
+        , trigger: 'click'
+        , range: true
     });
 </script>
 
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_two.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_two.html
index d6141ed..98aa88f 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_two.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_two.html
@@ -4,10 +4,7 @@
         <div class="form-horizontal" id="carInfoForm">
             <input id="id" value="${item.id}" hidden>
             <input id="name1" value="${item.name}" hidden>
-
-
             <#avatar id="url" name="图片(推荐像素宽度316px)" avatarImg="${item.url}"/>
-
             <div class="input-group" style="margin-left: 342px;">
                 <div class="input-group-btn">
                     <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_add.html
index 84673fc..b79d2f5 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_add.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/user/user_add.html
@@ -4,33 +4,6 @@
 		<div class="form-horizontal" id="userInfoForm">
 			<input type="hidden" id="id" value="">
 			<div class="row">
-				<div class="col-sm-6 b-r">
-					<#input id="account" name="账户" underline="true"/>
-					<#select id="sex" name="性别" underline="true">
-					<option value="1">男</option>
-					<option value="2">女</option>
-				</#select>
-				<#input id="password" name="密码" underline="true" type="password"/>
-				<!--                <#input id="roleid" name="角色" underline="true" disabled="disabled"/>-->
-				<#input id="email" name="邮箱" type="email" underline="true"/>
-				<div class="form-group" ${companyId!=1? "hidden" :" "} >
-				<label class="col-sm-3 control-label">所属公司</label>
-				<div class="col-sm-9">
-					<select class="form-control" id="companyId" name="companyId">
-						@if(companyIds!=null){
-						@for(item in companyIds){
-						@if(companyId!=1&&item.id==companyId){
-						<option value="${item.id}">${item.name}</option>
-						@}else if(companyId==1){
-						<option value="${item.id}">${item.name}</option>
-						@}
-						@}
-						@}
-					</select>
-				</div>
-			</div>
-			<div class="hr-line-dashed" ${companyId!=1? "hidden" :" "} ></div>
-	</div>
 	<div class="col-sm-6">
 		<div id="driverInfoContent">
 			<#input id="name" name="姓名" underline="true"/>
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/advertisement/advertisement.js b/cloud-server-management/src/main/webapp/static/modular/system/advertisement/advertisement.js
index d2bf4f0..166152c 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/advertisement/advertisement.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/advertisement/advertisement.js
@@ -36,7 +36,7 @@
         },
         {title: '跳转模块', field: 'model', visible: true, align: 'center', valign: 'middle',
         },
-        {title: '跳转页面', field: 'jumpPage', visible: true, align: 'center', valign: 'middle',
+        {title: '跳转页面', field: 'page', visible: true, align: 'center', valign: 'middle',
         },
         {title: '排序', field: 'sort', visible: true, align: 'center', valign: 'middle',
         },
@@ -130,7 +130,7 @@
 TSite.openAddTSite = function () {
     var index = layer.open({
         type: 2,
-        title: "添加场地",
+        title: "添加广告",
         area: ['100%', '100%'], //宽高
         fix: false, //不固定
         maxmin: true,
@@ -171,7 +171,7 @@
     if (this.check()) {
         var index = layer.open({
             type: 2,
-            title: "编辑场地",
+            title: "编辑广告",
             area: ['100%', '100%'], //宽高
             fix: false, //不固定
             maxmin: true,
@@ -214,22 +214,37 @@
         id:null,
         position:null,
         img:"",
-        jumpPage:"",
+        jumpPage:null,
         sort:null,
         state:1,
         name:"",
-        type:""
+        type:"",
+        page:"",
+        model:null,
+        typeId:null,
+        turnId:null,
     };
+    let name  =  $("#model").val();
+    data1.name = $("#name").val();
+    data1.position = $("#position").val();
+    data1.img = $("#img").val();
+    data1.model = $('#model option:selected').text();
+    data1.page =  $('#page option:selected').text();
+    data1.jumpPage = $("#page").val();
+    data1.typeId = $("#type").val();
+    data1.type = $('#type option:selected').text();
+    data1.turnId = $("#pageId").val();
+    data1.sort = $("#sort").val();
 
     if ( $("#roleType").val()==1){
         if($("#position").val()==''){
+            data1.position = $("#position").val();
             Feng.info("请选择广告类型")
             return;
         }
     }
-
-
     if($("#name").val()==''){
+
         Feng.info("请输入广告名称")
         return;
     }
@@ -243,21 +258,27 @@
             return;
         }
     }
-    if($("#page").val()=='' ){
-        Feng.info("请选择跳转页面")
-        return;
-    }
-    if ( $("#roleType").val()==1) {
-        if ($("#type").val() == '') {
-            Feng.info("请选择跳转类型")
+    if(name !='0'){
+        if($("#page").val()=='' ){
+            Feng.info("请选择跳转页面")
             return;
         }
     }
-    if ( $("#roleType").val()==1) {
-        if ($('#type option:selected').text()=="详情"){
-            if($("#pageId").val()=='' ){
-                Feng.info("请输入跳转ID")
+    if(name !='0') {
+        if ($("#roleType").val() == 1) {
+            if ($("#type").val() == '') {
+                Feng.info("请选择跳转类型")
                 return;
+            }
+        }
+    }
+    if(name !='0') {
+        if ($("#roleType").val() == 1) {
+            if ($('#type option:selected').text() == "详情") {
+                if ($("#pageId").val() == '') {
+                    Feng.info("请输入跳转ID")
+                    return;
+                }
             }
         }
     }
@@ -271,8 +292,104 @@
         contentType: "application/json", // 设置请求头的 Content-Type
         data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
         success: function(response) {
-            Feng.success("下架成功!");
-            TSite.search();
+            window.parent.TSite.table.refresh();
+            TSite.close();
+            Feng.success("添加成功!");
+        },
+        error: function(xhr, status, error) {
+            var errorMessage = xhr.responseText ? xhr.responseText : "下架失败!";
+            Feng.error("您的网络异常!");
+        }
+    });
+};
+
+TSite.updateSubmit = function(){
+
+    console.log("kankan")
+    console.log($("#img").val())
+    var data1 = {
+        id:null,
+        position:null,
+        img:"",
+        jumpPage:null,
+        sort:null,
+        state:1,
+        name:"",
+        type:"",
+        page:"",
+        model:null,
+        typeId:null,
+        turnId:null,
+    };
+    let name  =  $("#model").val();
+    data1.name = $("#name").val();
+    data1.id = $("#id").val();
+    data1.position = $("#position").val();
+    data1.img = $("#img").val();
+    data1.model = $('#model option:selected').text();
+    data1.page =  $('#page option:selected').text();
+    data1.jumpPage = $("#page").val();
+    data1.typeId = $("#type").val();
+    data1.type = $('#type option:selected').text();
+    data1.turnId = $("#pageId").val();
+    data1.sort = $("#sort").val();
+
+    if ( $("#roleType").val()==1){
+        if($("#position").val()==''){
+            data1.position = $("#position").val();
+            Feng.info("请选择广告类型")
+            return;
+        }
+    }
+    if($("#name").val()==''){
+        Feng.info("请输入广告名称")
+        return;
+    }
+
+    if ( $("#roleType").val()==1) {
+        if ($("#model").val() == '') {
+            Feng.info("请选择跳转模块")
+            return;
+        }
+    }
+    if(name !='0'){
+        if($("#page").val()=='' ){
+            Feng.info("请选择跳转页面")
+            return;
+        }
+    }
+    if(name !='0') {
+        if ($("#roleType").val() == 1) {
+            if ($("#type").val() == '') {
+                Feng.info("请选择跳转类型")
+                return;
+            }
+        }
+    }
+    if(name !='0') {
+        if ($("#roleType").val() == 1) {
+            if ($('#type option:selected').text() == "详情") {
+                if ($("#pageId").val() == '') {
+                    Feng.info("请输入跳转ID")
+                    return;
+                }
+            }
+        }
+    }
+    if($("#sort").val()=='' ){
+        Feng.info("请输入排序")
+        return;
+    }
+    $.ajax({
+        url: Feng.ctxPath + "/advertisement/updateAdvertisement",
+        type: "POST",
+        contentType: "application/json", // 设置请求头的 Content-Type
+        data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+        success: function(response) {
+            window.parent.TSite.table.refresh();
+            TSite.close();
+            Feng.success("添加成功!");
+
         },
         error: function(xhr, status, error) {
             var errorMessage = xhr.responseText ? xhr.responseText : "下架失败!";
@@ -309,4 +426,7 @@
     var table = new BSTable(TSite.id, "/advertisement/listAll", defaultColunms);
     table.setPaginationType("client");
     TSite.table = table.init();
+    var carPhoto = new $WebUpload("img");
+    carPhoto.setUploadBarId("progressBar");
+    carPhoto.init();
 });
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/appUser/tAppUser.js b/cloud-server-management/src/main/webapp/static/modular/system/appUser/tAppUser.js
index 50515ed..bdeeb44 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/appUser/tAppUser.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/appUser/tAppUser.js
@@ -32,9 +32,9 @@
                 return {1:"是",0:"否"}[data]
             }
         },
-        {title: '状态', field: 'status', visible: true, align: 'center', valign: 'middle',
+        {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',
             formatter:function (data) {
-                return {1:"正常",2:"冻结",3:"已删除"}[data]
+                return {1:"正常",2:"冻结",3:"已注销"}[data]
             }}
     ];
 };
@@ -89,13 +89,35 @@
                 area: ['100%', '100%'], //宽高
                 fix: false, //不固定
                 maxmin: true,
-                content: Feng.ctxPath + '/bodySideAppointment/update/' + TQuestion.seItem.id
+                content: Feng.ctxPath + '/appUser/update/' + TQuestion.seItem.id+"/"+1
             });
             this.layerIndex = index;
         }
     }
 };
 
+/**
+ * 查看详情
+ */
+TQuestion.openInfo = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length >1 ){
+        Feng.info("只能选择一个问题进行编辑!");
+    }else {
+        if (this.check()){
+            var selected = $('#' + this.id).bootstrapTable('getSelections');
+            var index = layer.open({
+                type: 2,
+                title: '编辑分类',
+                area: ['100%', '100%'], //宽高
+                fix: false, //不固定
+                maxmin: true,
+                content: Feng.ctxPath + '/appUser/update/' + TQuestion.seItem.id+"/"+2
+            });
+            this.layerIndex = index;
+        }
+    }
+};
 /**
  * 上架
  */
@@ -217,48 +239,24 @@
         });
     }
 };
-TQuestion.oneChange = function () {
-    var province = $('#pCode option:selected').text();
-    var citySelect = document.getElementById("cCode");
-    var ajax = new $ax(Feng.ctxPath + "/tSite/getCity", function(data){
+
+
+
+TQuestion.oneChange = function (e) {
+    var oneId=$(e).val();
+    console.log(oneId)
+    console.log("!!!!!!!!!!!!!")
+    var ajax = new $ax(Feng.ctxPath + "/tCompetition/onChange", function(data){
         if(data!=null){
             var content='<option value="">选择市</option>';
             $.each(data, function(k,v) {
-                content += "<option value='"+v.cityCode+"'>"+v.city+"</option>";
+                content += "<option value='"+v.code+"'>"+v.name+"</option>";
             });
             $("#cCode").empty().append(content);
         }
     });
-    if (province === ""){
-        citySelect.innerHTML = '<option value="">请先选择省</option>';
-    }
-    ajax.set("province",province);
+    ajax.set("oneId",oneId);
     ajax.start();
-};
-
-TQuestion.oneChangeNext = function (e) {
-    var oneId=$(e).val();
-    var city = $('#cCode option:selected').text();
-
-    var citySelect = document.getElementById("account");
-    var storeSelect = document.getElementById("store");
-    if (oneId === ""){
-        citySelect.innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
-        storeSelect.innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
-    }
-    var ajax1 = new $ax(Feng.ctxPath + "/tSite/storeChangeNext", function(data){
-        if(data!=null && data.length !== 0){
-            var content='<option value="">选择门店</option>';
-            $.each(data, function(k,v) {
-                content += "<option style='width: 300px' value='"+v.id+"'>"+v.name+"</option>";
-            });
-            $("#store").empty().append(content);
-        }else {
-            storeSelect.innerHTML = '<option value="">当前所选市没有门店</option>';
-        }
-    });
-    ajax1.set("oneId",city);
-    ajax1.start();
 };
 TQuestion.addSubmit = function(){
     var data = {
@@ -267,32 +265,23 @@
         provinceCode:"",
         city:"",
         cityCode:"",
-        storeId:null,
-        storeName:"",
-        parentName:"",
         phone:"",
-        learnerName:"",
-        learnerAge:null,
+        name:"",
         birthday:"",
-        appointmentTime:"",
-        status:null,
-        state:null
+        gender:null,
+        salesmanUserId:null
+
     };
-    data.id                      = $("#name").val()
     data.province                = $('#pCode option:selected').text();
     data.provinceCode            = $("#pCode").val()
     data.city                    = $('#cCode option:selected').text();
     data.cityCode                = $("#cCode").val()
-    data.storeId                 = $("#store").val()
-    data.storeName               = $('#store option:selected').text();
-    data.parentName              = $("#parentName").val()
     data.phone                   = $("#phone").val()
-    data.learnerName             = $("#learnerName").val()
-    data.learnerAge              = $("#learnerAge").val()
+    data.name             = $("#learnerName").val()
     data.birthday                = $("#birthday").val()
-    data.appointmentTime         = $("#appointmentTime").val().replace("T"," ")
-    console.log("看看")
-    console.log(data.appointmentTime);
+    data.gender                  = $("#gender").val()
+    data.salesmanUserId                  = $("#salesmanUserName").val()
+
     if($("#pCode").val()==''){
         Feng.info("请选择省")
         return;
@@ -301,44 +290,41 @@
         Feng.info("请选择市")
         return;
     }
-    if($("#store").val()=='' ){
-        Feng.info("请选择门店")
-        return;
-    }
-    if($("#parentName").val()=='' ){
-        Feng.info("请输入家长姓名")
-        return;
-    }
-
     if($("#phone").val()=='' ){
-        Feng.info("请输入家长联系方式")
+        Feng.info("请输入联系方式")
         return;
     }
     if($("#learnerName").val()=='' ){
         Feng.info("请输入学员姓名")
         return;
     }
-    if($("#learnerAge").val()=='' ){
-        Feng.info("请输入学员年龄")
-        return;
-    }
     if($("#birthday").val()=='' ){
-        Feng.info("请选择学员生日")
+        Feng.info("请选择生日")
         return;
     }
-    if($("#appointmentTime").val()=='' ){
-        Feng.info("请选择预约时间")
+    if($("#gender").val()=='' ){
+        Feng.info("请选择性别")
         return;
     }
+    if($("#salesmanUserName").val()=='' ){
+        Feng.info("请选择销售人员")
+        return;
+    }
+
     $.ajax({
         url: Feng.ctxPath + "/appUser/addAppUser" ,
         type: "POST",
         data: JSON.stringify(data),
         contentType: "application/json",
         success: function (response) {
-            window.parent.TQuestion.table.refresh();
-            TQuestion.close();
-            Feng.success("添加成功");
+            if (response=="5001"){
+                Feng.error("当前手机号 已被注册")
+            }else{
+                window.parent.TQuestion.table.refresh();
+                TQuestion.close();
+                Feng.success("添加成功");
+            }
+
         },
         error: function (xhr, status, error) {
             Feng.error("添加失败!" + error);
@@ -349,41 +335,79 @@
 TQuestion.updateSubmit = function(){
     var data = {
         id:null,
+        province:"",
+        provinceCode:"",
+        city:"",
+        cityCode:"",
+        phone:"",
         name:"",
-        position:"",
-        sort:"",
+        birthday:"",
+        gender:null,
+        salesmanUserId:null
+
     };
-    data.name     = $("#name").val()
-    data.position = $("#position").val()
-    data.sort     = $("#sort").val()
-    data.id       = $("#dataId").val()
-    if($("#name").val()==''){
-        Feng.info("请输入分类名称")
+    data.id                      = $("#id").val()
+    data.province                = $('#pCode option:selected').text();
+    data.provinceCode            = $("#pCode").val()
+    data.city                    = $('#cCode option:selected').text();
+    data.cityCode                = $("#cCode").val()
+    data.phone                   = $("#phone").val()
+    data.name                    = $("#learnerName").val()
+    data.birthday                = $("#birthday").val()
+    data.gender                  = $("#gender").val()
+    data.salesmanUserId                  = $("#salesmanUserName").val()
+
+    if($("#pCode").val()==''){
+        Feng.info("请选择省")
         return;
     }
     if($("#cCode").val()==''){
-        Feng.info("请选择所在位置")
+        Feng.info("请选择市")
         return;
     }
-    if($("#account").val()=='' ){
-        Feng.info("请输入排序")
+    if($("#phone").val()=='' ){
+        Feng.info("请输入联系方式")
         return;
     }
+    if($("#learnerName").val()=='' ){
+        Feng.info("请输入学员姓名")
+        return;
+    }
+    if($("#birthday").val()=='' ){
+        Feng.info("请选择生日")
+        return;
+    }
+    if($("#gender").val()=='' ){
+        Feng.info("请选择性别")
+        return;
+    }
+    if($("#salesmanUserName").val()=='' ){
+        Feng.info("请选择销售人员")
+        return;
+    }
+
     $.ajax({
-        url: Feng.ctxPath + "/benefits/addBenefits" ,
+        url: Feng.ctxPath + "/appUser/addAppUser" ,
         type: "POST",
         data: JSON.stringify(data),
         contentType: "application/json",
         success: function (response) {
-            window.parent.TQuestion.table.refresh();
-            TQuestion.close();
-            Feng.success("添加成功");
+            if (response=="5001"){
+                Feng.error("当前手机号 已被注册")
+            }else{
+                window.parent.TQuestion.table.refresh();
+                TQuestion.close();
+                Feng.success("添加成功");
+            }
+
         },
         error: function (xhr, status, error) {
             Feng.error("添加失败!" + error);
         }
     });
+
 };
+
 /**
  * 查询列表
  */
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment.js b/cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment.js
new file mode 100644
index 0000000..4bfbcac
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment.js
@@ -0,0 +1,608 @@
+/**
+ * 车辆管理管理初始化
+ */
+var TCompetition = {
+    id: "TCompetitionTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+var role =$("#roleType").val()
+/**
+ * 初始化表格的列
+ */
+TCompetition.initColumn = function () {
+    return [
+        {field: 'selectItem', checkbox: true},
+        {title: 'id', field: 'id', visible: true, align: 'center', valign: 'middle'},
+        {title: '所在省市', field: 'provinceAndCity', visible: role==1?true:false, align: 'center', valign: 'middle'},
+        {title:  '门店名称', field: 'storeName', visible: true, align: 'center', valign: 'middle'},
+        {title:  '课包类型', field: 'coursePackageType', visible: true, align: 'center', valign: 'middle'},
+        {title:  '课包名称', field: 'coursePackage', visible: true, align: 'center', valign: 'middle'},
+        {title:  '购买用户', field: 'payUser', visible: true, align: 'center', valign: 'middle'},
+        {title:  '联系方式', field: 'phone', visible: true, align: 'center', valign: 'middle'},
+        {title:  '购课学员', field: 'payStudent', visible: true, align: 'center', valign: 'middle'},
+        {title:  '购买方式', field: 'buyType', visible: true, align: 'center', valign: 'middle',
+            formatter:function (data) {
+                return{1:"线下",2:"线上",3:"折扣"}[data]
+            }
+            },
+        {title:  '支付方式', field: 'buyTypeName', visible: true, align: 'center', valign: 'middle'},
+        {title:  '总金额', field: 'originalPrice', visible: true, align: 'center', valign: 'middle'},
+        {title:  '优惠金额', field: 'discountAmount', visible: true, align: 'center', valign: 'middle'},
+        {title:  '支付价格', field: 'cashPayment', visible: true, align: 'center', valign: 'middle'},
+        {title:  '支付状态', field: 'payStatus', visible: true, align: 'center', valign: 'middle',
+            formatter:function (data) {
+                return{1:"待支付",2:"已支付"}[data]
+            }
+        },
+        {title:  '赠送课时', field: 'giftClassHours', visible: true, align: 'center', valign: 'middle'}
+    ];
+};
+function currentTime(timestamp){
+    var time = timestamp + '';
+    if(time.length != 13){
+        timestamp = timestamp * 1000;
+    }
+    var date = new Date(timestamp);;
+    var Y = date.getFullYear() + '-';
+    var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
+    var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
+
+    var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
+    var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':';
+    var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());
+    var strDate = Y + M + D + h + m + s;
+    return strDate
+}
+
+function currentTime1(timestamp){
+    var time = timestamp + '';
+    if(time.length != 13){
+        timestamp = timestamp * 1000;
+    }
+    var date = new Date(timestamp);;
+    var Y = date.getFullYear() + '-';
+    var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
+    var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
+
+    var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
+    var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':';
+    var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());
+    var strDate = Y + M + D ;
+    return strDate
+}
+/**
+ * 检查是否选中
+ */
+TCompetition.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+            Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TCompetition.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 点击添加车辆管理
+ */
+TCompetition.openAddTCompetition = function () {
+    var index = layer.open({
+        type: 2,
+        title: '添加',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/cpPayment/add'
+    });
+    this.layerIndex = index;
+};
+
+/**
+ * 打开查看车辆管理详情
+ */
+TCompetition.openTCompetitionDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title:'编辑',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tShop/tShop_update/' + TCompetition.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+TCompetition.info = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title:'详情',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tShop/tShop_info/' + TCompetition.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+TCompetition.gift = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title:'免费福利',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tShop/tShop_gift/' + TCompetition.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+TCompetition.indexSet = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title:'首页设置',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tShop/tShop_indexSet/' + TCompetition.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+/**
+ * 删除车辆管理
+ */
+TCompetition.delete = function () {
+    if (this.check()) {
+        var nickname = TCompetition.seItem.carLicensePlate;
+        if (nickname == "" || nickname == null || nickname == undefined){
+                nickname = "该车辆";
+        }else{
+            nickname = "【"+nickname+"】";
+        }
+        swal({
+           title: language==1?"您是否确认删除" + nickname + "?":(language==2?"Are you sure to delete the" + nickname + "?":"Apakah Anda pasti akan menghapus" + nickname + "?"),
+            text: language==1?"请谨慎操作!":(language==2?' Please operate with caution!':'Harap beroperasi dengan hati -hati!'),
+            type: "warning",
+            showCancelButton: true,
+            confirmButtonColor: "#DD6B55",
+            confirmButtonText: language==1?"删除":(language==2?'Delete':'Hapus'),
+            closeOnConfirm: true
+        }, function () {
+            var ajax = new $ax(Feng.ctxPath + "/TCompetition/delete", function (data) {
+                  if(language==1){
+                    swal("删除成功", "您已经成功删除了" + nickname + "。", "success");
+                }else if(language==2){
+                    swal("Delete succeeded!", "You have successfully deleted it" + nickname + "。", "success");
+                }else {
+                    swal("Hapus berhasil!", "Anda berhasil menghapus" + nickname + "。", "success");
+                }
+                TCompetition.table.refresh();
+            }, function (data) {
+                if(language==1){
+                    swal("删除失败", data.responseJSON.message + "!", "warning");
+                }else if(language==2){
+                    swal("Failed to delete", data.responseJSON.message + "!", "warning");
+                }else {
+                    swal("Hapus Gagal", data.responseJSON.message + "!", "warning");
+                }
+
+            });
+            ajax.set("TCompetitionId",TCompetition.seItem.id);
+            ajax.start();
+        });
+    }
+};
+TCompetition.oneChange = function (e) {
+    console.log(111)
+    var oneId=$(e).val();
+    console.log(oneId)
+    var content = "<option value=''>请选择</option>";
+    var ajax = new $ax(Feng.ctxPath + "/tCompetition/onChange", function(data){
+        if(data!=null){
+
+            $.each(data, function(k,v) {
+                content += "<option value='"+v.name+"'>"+v.name+"</option>";
+            });
+            $("#cCode").empty().append(content);
+        }
+    });
+    ajax.set("oneId",oneId);
+    ajax.start();
+};
+
+TCompetition.nextStore = function (e) {
+    var oneId=$(e).val();
+    console.log(oneId)
+    var content = "<option value=''>请选择</option>";
+    var ajax = new $ax(Feng.ctxPath + "/coursePackage/getCoursePackageByStoreId", function(data){
+        if(data!=null){
+
+            $.each(data, function(k,v) {
+                content += "<option value='"+v.id+"'>"+v.name+"</option>";
+            });
+            $("#coursePackageType").empty().append(content);
+        }
+    });
+    ajax.set("storeId",oneId);
+    ajax.start();
+};
+TCompetition.addSubmit = function(){
+    var data = {
+        appUserId:"",
+        studentId:"",
+        coursePackageId:"",
+        payType:7,
+        classHours:"",
+        originalPrice:"",
+        cashPayment:null,
+        playPaiCoin:null,
+        totalClassHours:null,
+        laveClassHours:null,
+        absencesNumber:null,
+        payUserType:2,
+        payStatus:1,
+        orderNumber:2,
+        payUserId:2,
+        status:null,
+        withdrawalTime:"",
+        certificate:"",
+        state:1,
+        giftClassHours:null,
+        useTime:"",
+        payUserName:"",
+    };
+    data.appUserId            = appUserId
+    data.studentId                = $("#student").val()
+    data.coursePackageId       = $("#coursePackageName").val()
+    data.cashPayment             = $("#cashPayment").val()
+    data.playPaiCoin          = $("#playPaiCoin").val()
+
+    if($("#studentId").val()=='' ){
+        Feng.info("请选择学员")
+        return;
+    }
+    if($("#pCode").val()=='' ){
+        Feng.info("请选择省")
+        return;
+    }
+    if($("#cCode").val()=='' ){
+        Feng.info("请选择市")
+        return;
+    }
+    if($("#store").val()==''){
+        Feng.info("请选择门店")
+        return;
+    }
+    if($("#coursePackageType").val()=='' ){
+        Feng.info("请选择课包类型")
+        return;
+    }
+    if($("#coursePackageName").val()==''){
+        Feng.info("请选择课包名称")
+        return;
+    }
+    if($("#courseTime").val()==''){
+        Feng.info("请选择课时规格")
+        return;
+    }
+    if($("#cashPayment").val()=='' || $("#playPaiCoin").val()==''){
+        Feng.info("请输入支付金额或请输入玩湃币支付")
+        return;
+    }
+    $.ajax({
+        url: Feng.ctxPath + "/tSite/changeState",
+        type: "POST",
+        contentType: "application/json", // 设置请求头的 Content-Type
+        data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+        success: function(response) {
+            Feng.success("上架成功!");
+            TSite.search();
+        },
+        error: function(xhr, status, error) {
+            var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
+            Feng.error("您的网络异常!");
+        }
+    });
+
+};
+TCompetition.getCoursePackage = function (e) {
+    var oneId=$(e).val();
+    console.log(oneId)
+    var content = "<option value=''>请选择</option>";
+    var ajax = new $ax(Feng.ctxPath + "/coursePackage/getCoursePackageByType", function(data){
+        if(data!=null){
+
+            $.each(data, function(k,v) {
+                content += "<option value='"+v.id+"'>"+v.name+"</option>";
+            });
+            $("#coursePackageName").empty().append(content);
+        }
+    });
+    ajax.set("storeId",oneId);
+    ajax.start();
+};
+TCompetition.twoChange = function (e) {
+    var oneId=e;
+    var content = "<option value=''>请选择</option>";
+    var ajax = new $ax(Feng.ctxPath + "/tCompetition/onChange", function(data){
+        if(data!=null){
+
+            $.each(data, function(k,v) {
+                content += "<option value='"+v.name+"'>"+v.name+"</option>";
+            });
+            $("#cCode").empty().append(content);
+        }
+    });
+    ajax.set("oneId",oneId);
+    ajax.start();
+};
+TCompetition.threeChange = function (e) {
+    var oneId=e;
+    console.log("看看奥")
+    console.log(oneId)
+    var content1 = "<option value=''>请选择门店</option>";
+    var ajax2=new $ax(Feng.ctxPath + "/cpPayment/getStore", function(data){
+        console.log("看看返回数据")
+        console.log(data)
+        $.each(data, function(k,v) {
+            content1 += "<option value='"+v.id+"'>"+v.name+"</option>";
+        });
+        $("#store").empty().append(content1);
+    });
+    ajax2.set("city",oneId);
+    ajax2.start();
+};
+var appUserId ;
+TCompetition.getStudent = function () {
+    var phone = $("#vipPhone").val();
+    var phoneRegex = /^1[3456789]\d{9}$/;
+    // 使用正则表达式进行验证
+    if (!phoneRegex.test(phone)) {
+        Feng.error("手机号不合法");
+        return;
+    }
+    // 回填省市
+    var province;
+    var city;
+    var c;
+    var content = "<option value=''>请选择学员</option>";
+    $.ajax({
+        url: Feng.ctxPath + "/cpPayment/getUserByPhone/"+phone,
+        type: "GET",
+        contentType: "application/json", // 设置请求头的 Content-Type
+        success: function(response) {
+            console.log("===================");
+            console.log(response)
+            if (response==""){
+                let htmlStr =
+                    '<div class="form-horizontal">' +
+                    '   <div class="col-sm-11" style="padding: 20px;">' +
+                    '       <div class="form-group">\n' +
+                    '           <h2>验证失败,当前手机号未注册玩湃会员</h2>\n' +
+                    '       </div>';
+
+                layer.open({
+                    type: 1
+                    , title: '提示'
+                    , area: ['50%', '90%']
+                    , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
+                    , id: 'layerDemo' //防止重复弹出cge
+                    , content: htmlStr
+                    , btn: ['去添加', '关闭']
+                    , btnAlign: 'c' //按钮居中
+                    , shade: 0.5 //不显示遮罩
+                    , yes: function () {
+                        var index = layer.open({
+                            type: 2,
+                            title:'首页设置',
+                            area: ['100%', '100%'], //宽高
+                            fix: false, //不固定
+                            maxmin: true,
+                            // todo 写用户管理路径
+                            content: Feng.ctxPath + '/cpPayment/add'
+                        });
+                        this.layerIndex = index;
+                    },
+                });
+            }else{
+                province = response.province;
+                city = response.city;
+                appUserId = response.id;
+                var ajax1=new $ax(Feng.ctxPath + "/cpPayment/queryStudentList", function(data){
+
+                    if (data.length==0){
+                        let htmlStr =
+                            '<div class="form-horizontal">' +
+                            '   <div class="col-sm-11" style="padding: 20px;">' +
+                            '       <div class="form-group">\n' +
+                            '           <h2>验证失败,当前用户未添加学员信息</h2>\n' +
+                            '       </div>';
+
+                        layer.open({
+                            type: 1
+                            , title: '提示'
+                            , area: ['50%', '90%']
+                            , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
+                            , id: 'layerDemo' //防止重复弹出cge
+                            , content: htmlStr
+                            , btn: ['去添加', '关闭']
+                            , btnAlign: 'c' //按钮居中
+                            , shade: 0.5 //不显示遮罩
+                            , yes: function () {
+                                var index = layer.open({
+                                    type: 2,
+                                    title:'首页设置',
+                                    area: ['100%', '100%'], //宽高
+                                    fix: false, //不固定
+                                    maxmin: true,
+                                    // todo 写用户管理路径
+                                    content: Feng.ctxPath + '/cpPayment/add'
+                                });
+                                this.layerIndex = index;
+                            },
+                        });
+                    }
+                    $.each(data, function(k,v) {
+                        content += "<option value='"+v.id+"'>"+v.name+"</option>";
+                    });
+                    $("#student").empty().append(content);
+                    var provinceSelect = document.getElementById("pCode");
+                    for (var i = 0; i < provinceSelect.options.length; i++) {
+                        var option = provinceSelect.options[i];
+                        if (option.text === province) {
+                            option.selected = true;
+                            console.log(option.value)
+                            TCompetition.twoChange(option.value);
+                            break; // 找到匹配的选项后,可以选择停止遍历
+                        }
+                    }
+
+                    var content1 = "<option value=''>请选择门店</option>";
+                    var citySelect = document.getElementById("cCode");
+                    for (var i = 0; i < citySelect.options.length; i++) {
+                        var option = citySelect.options[i];
+                        if (option.text === city) {
+                            option.selected = true;
+                            c =  option.text;
+
+                            TCompetition.threeChange(c)
+
+                            break; // 找到匹配的选项后,可以选择停止遍历
+                        }
+                    }
+                });
+                ajax1.set("appUserId",appUserId);
+                ajax1.start();
+            }
+        }
+    });
+
+
+
+};
+
+TCompetition.freeze = function () {
+    if (this.check()) {
+        var ajax = new $ax(Feng.ctxPath + "/tShop/freeze", function (data) {
+            Feng.success("冻结成功!");
+            TCompetition.table.refresh();
+        }, function (data) {
+            Feng.error("冻结失败!" + data.responseJSON.message + "!");
+        });
+        ajax.set("id",this.seItem.id);
+        ajax.start();
+    }
+};
+TCompetition.unfreeze = function () {
+    if (this.check()) {
+        var selected = $('#' + this.id).bootstrapTable('getSelections');
+        console.log("看看选择")
+        console.log(selected)
+        const data1 = {
+            ids:[],
+            payUserName:""
+        };
+        selected.forEach(function(obj) {
+            var id = "";
+             id = obj.id;
+            data1.ids.push(id);
+        });
+        console.log(data1)
+        $.ajax({
+            url: Feng.ctxPath + "/cpPayment/pay",
+            type: "POST",
+            contentType: "application/json", // 设置请求头的 Content-Type
+            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+            success: function(response) {
+                Feng.success("支付成功!");
+                TCompetition.table.refresh();
+            },
+            error: function(xhr, status, error) {
+                var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
+                Feng.error("您的网络异常!");
+            }
+        });
+    }
+};
+TCompetition.reload = function () {
+    if (this.check()) {
+        let id = this.seItem.id
+        var operation = function(){
+            var ajax = new $ax(Feng.ctxPath + "/tCity/pwd", function (data) {
+                Feng.success("重置成功!");
+                TCompetition.table.refresh();
+            }, function (data) {
+                Feng.error("重置失败!" + data.responseJSON.message + "!");
+            });
+            ajax.set("id",id);
+            ajax.start();
+        }
+        Feng.confirm("确认重置密码?重置后密码为:a123456", operation);
+    }
+
+};
+
+TCompetition.carInsurance = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: language==1?'车辆保险':(language==2?'Vehicle insurance':'Asuransi kendaraan'),
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/TCompetition/carInsurance?carId=' + TCompetition.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+
+
+/**
+ * 查询车辆管理列表
+ */
+TCompetition.search = function () {
+    var queryData = {};
+    if ($('#pCode option:selected').text()!="全部"){
+        queryData['province'] = $('#pCode option:selected').text();
+    }else{
+        queryData['province'] = "";
+    }
+
+    queryData['city'] = $("#cCode").val();
+    queryData['coursePackageTypeId'] = $("#coursePackage").val();
+    queryData['coursePackageTypeName'] = $("#coursePackageName").val();
+    queryData['payStatus'] = $("#state").val();
+    queryData['payUser'] = $("#payUser").val();
+    queryData['payStudent'] = $("#payStudent").val();
+    TCompetition.table.refresh({query: queryData});
+};
+
+TCompetition.resetSearch = function () {
+    $("#pCode").val("");
+    $("#cCode").val("");
+    $("#coursePackage").val("");
+    $("#coursePackageName").val("");
+    $("#state").val("");
+    $("#payUser").val("");
+    $("#payStudent").val("");
+    TCompetition.search();
+};
+
+$(function () {
+    var defaultColunms = TCompetition.initColumn();
+    var table = new BSTable(TCompetition.id, "/cpPayment/listAll", defaultColunms);
+    table.setPaginationType("client");
+    TCompetition.table = table.init();
+});
+
+
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment_info.js b/cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment_info.js
new file mode 100644
index 0000000..2d4e403
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/cpPayment/cpPayment_info.js
@@ -0,0 +1,713 @@
+/**
+ * 初始化车辆管理详情对话框
+ */
+var language=1;
+var TCarInfoDlg = {
+    goodsPicArray: [],
+    tCarInfoData : {},
+    validateFields: {
+    }
+};
+
+/**
+ * 验证数据是否为空
+ */
+TCarInfoDlg.validate = function () {
+    $('#carInfoForm').data("bootstrapValidator").resetForm();
+    $('#carInfoForm').bootstrapValidator('validate');
+    return $("#carInfoForm").data('bootstrapValidator').isValid();
+};
+
+/**
+ * 清除数据
+ */
+TCarInfoDlg.clearData = function() {
+    this.tCarInfoData = {};
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TCarInfoDlg.set = function(key, val) {
+    this.tCarInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
+    return this;
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TCarInfoDlg.get = function(key) {
+    return $("#" + key).val();
+}
+
+/**
+ * 关闭此对话框
+ */
+TCarInfoDlg.close = function() {
+    parent.layer.close(window.parent.TCompetition.layerIndex);
+}
+
+/**
+ * 收集数据
+ */
+TCarInfoDlg.collectData = function() {
+    this
+    .set('id')
+    .set('isPlatCar')
+    .set('companyId')
+    .set('franchiseeId')
+    .set('carColor')
+    .set('carModelId')
+    .set('carBrandId')
+    .set('carLicensePlate')
+    .set('carPhoto')
+    .set('drivingLicenseNumber')
+    .set('drivingLicensePhoto')
+    .set('annualInspectionTime')
+    .set('commercialInsuranceTime')
+    .set('createTime')
+    .set('state')
+    .set('addType')
+    .set('addObjectId')
+    .set('plateColor')
+    .set('vehicleType')
+    .set('ownerName')
+    .set('engineId')
+    .set('VIN')
+    .set('certifyDateA')
+    .set('fuelType')
+    .set('engineDisplace')
+    .set('certificate')
+    .set('transAgency')
+    .set('transArea')
+    .set('transDateStart')
+    .set('transDateStop')
+    .set('certifyDateB')
+    .set('fixState')
+    .set('nextFixDate')
+    .set('checkState')
+    .set('feePrintId')
+    .set('GPSBrand')
+    .set('GPSModel')
+    .set('GPSIMEI')
+    .set('GPSInstallDate')
+    .set('registerDate')
+    .set('commercialType');
+}
+
+TCarInfoDlg.oneChange = function (e) {
+    console.log(111)
+    var oneId=$(e).val();
+    var ajax = new $ax(Feng.ctxPath + "/tCompetition/onChange", function(data){
+        if(data!=null){
+            if(language==1){
+                var content='<option value="">选择市</option>';
+            }else if(language==2){
+                var content='<option value="">Choose your franchisee</option>';
+            }else {
+                var content='<option value="">Pilih franchisee Anda</option>';
+            }
+            $.each(data, function(k,v) {
+                content += "<option value='"+v.code+"'>"+v.name+"</option>";
+            });
+            $("#cCode").empty().append(content);
+        }
+    });
+    ajax.set("oneId",oneId);
+    ajax.start();
+}
+TCarInfoDlg.oneChangeNext = function (e) {
+    var oneId=$(e).val();
+    var ajax = new $ax(Feng.ctxPath + "/tShop/oneChangeNext", function(data){
+        if(data!=null){
+            if(language==1){
+                var content='<option value="">选择账号</option>';
+            }else if(language==2){
+                var content='<option value="">Choose your franchisee</option>';
+            }else {
+                var content='<option value="">Pilih franchisee Anda</option>';
+            }
+            $.each(data, function(k,v) {
+                content += "<option value='"+v.id+"'>"+v.name+"</option>";
+            });
+            $("#account").empty().append(content);
+        }
+    });
+    ajax.set("oneId",oneId);
+    ajax.start();
+}
+TCarInfoDlg.saveImg = function () {
+    var id=$("#id").val();
+    var img=$("#welfarePicture").val();
+    var ajax = new $ax(Feng.ctxPath + "/tShop/saveImg", function(data){
+        if(data.code == 200){
+            Feng.success("保存成功")
+        }
+    });
+    ajax.set("id",id);
+    ajax.set("img",img);
+    ajax.start();
+}
+
+/**
+ * 提交添加
+ */
+TCarInfoDlg.addSubmit = function() {
+
+    this.clearData();
+    this.collectData();
+    if(!this.validate()){
+        return ;
+    }
+
+    var OBJradio= $("input[name='type']:checked").val();
+    if(OBJradio==2){
+        let account = $("#account").val()
+        if(account==''){
+            Feng.info("请选择所属运营商")
+            return;
+        }
+    }
+    let pCode = $("#pCode").val()
+    let cCode = $("#cCode").val()
+
+
+    let name = $("#name").val()
+    let phone = $("#phone").val()
+
+    if(pCode=='' && $("#role")=="1"){
+        Feng.info("请选择省")
+        return;
+    }
+    if(cCode=='' && $("#role")=="1"){
+        Feng.info("请选择市")
+        return;
+    }
+    if(name==''){
+        Feng.info("门店名称不能为空")
+        return;
+    }
+    if(phone==''){
+        Feng.info("联系电话不能为空")
+        return;
+    }
+
+    let address = $("#address").val()
+
+    if(address==''){
+        Feng.info("请输入地址")
+        return;
+    }
+    let time = $("#time").val()
+
+    if(time==''){
+        Feng.info("请填写营业时间")
+        return;
+    }
+    let intro = $("#intro").val()
+
+    if(intro==''){
+        Feng.info("请填写门店介绍")
+        return;
+    }
+    let userName = $("#userName").val()
+
+    if(userName==''){
+        Feng.info("请输入店长姓名")
+        return;
+    }
+    let userPhone = $("#userPhone").val()
+
+    if(userPhone==''){
+        Feng.info("请输入店长手机号")
+        return;
+    }
+    let img = $("#img").val()
+
+    if(img==''){
+        Feng.info("请上传门店封面")
+        return;
+    }
+    var goodImgs = this.goodsPicArray;
+    if(goodImgs.length==0){
+        Feng.info("请上传实景图")
+        return;
+    }
+    var imgOne ="";
+    for (let i = 0; i <goodImgs.length; i++) {
+        if(i==goodImgs.length-1){
+            imgOne += (goodImgs[i].response)
+        }else {
+            imgOne+=(goodImgs[i].response+",")
+        }
+
+    }
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tShop/add", function(data){
+        if(data=="5001"){
+            Feng.error("该店长手机号已经存在!")
+        }else
+        if(data.code == 200){
+            if(language==1){
+                Feng.success("添加成功!");
+            }else if(language==2){
+                Feng.success("Successfully added!");
+            }else {
+                Feng.success("Sangat berhasil ditambah!");
+            }
+            window.parent.TCompetition.table.refresh();
+            TCarInfoDlg.close();
+        }else{
+            Feng.error(data.msg);
+        }
+
+    },function(data){
+        Feng.error("添加失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tCarInfoData);
+    ajax.set("provinceCode",pCode);
+    ajax.set("cityCode",cCode);
+    ajax.set("name",name);
+    ajax.set("phone",phone);
+    ajax.set("cityManagerId",null);
+    ajax.set("address",address);
+    ajax.set("time",time);
+    ajax.set("introduce",intro);
+    ajax.set("userName",userName);
+    ajax.set("userPhone",userPhone);
+    ajax.set("coverDrawing",img);
+    ajax.set("realPicture",imgOne);
+    ajax.set("lat",$("#latitude").val());
+    ajax.set("lon",$("#longitude").val());
+    ajax.set("ids",$("#ids").val());
+    ajax.set("type",OBJradio);
+    ajax.set("yyId",$("#account").val());
+    ajax.start();
+}
+var  map = new AMap.Map('container', {
+    resizeEnable: true, // 允许缩放
+    zoom: 15        // 设置地图的缩放级别,0 - 20
+});
+var marker;
+//搜索地图
+TCarInfoDlg.searchByStationName = function(e,type){
+    var keyword="成都";
+    if(type==2){
+        keyword = $(e).parent().prev().find("input").val();
+    }else {
+        if($("#address").val()!=null && $("#address").val()!=''){
+            keyword = $("#address").val();
+        }
+    }
+    type=1;
+    AMap.plugin('AMap.Geocoder', function() {
+        var geocoder = new AMap.Geocoder();
+        console.log(geocoder)
+        console.log(keyword)
+        geocoder.getLocation(keyword, function(status, result) {
+            console.log(status,result)
+            if (status === 'complete' && result.info === 'OK') {
+                // 经纬度
+                var lng = result.geocodes[0].location.lng;
+                var lat = result.geocodes[0].location.lat;
+                $("#longitude").val(lng)
+                $("#latitude").val(lat)
+                // 地图实例
+                map = new AMap.Map('container', {
+                    resizeEnable: true, // 允许缩放
+                    center: [lng, lat], // 设置地图的中心点
+                    zoom: 15        // 设置地图的缩放级别,0 - 20
+                });
+                //地图画点
+                //addMarker(lng,lat);
+                if(type==1 || type==2){
+                    showInfoClick();
+                    if(lng == null){
+                    }else{
+                        addMarker(lng,lat);
+                    }
+                }else{
+                    addMarker(lng,lat);
+                }
+            } else {
+                console.log('定位失败!');
+            }
+        });
+    });
+
+}
+//地图点击事件
+function showInfoClick(){
+    map.on('click', function (e) {
+        addMarker(e.lnglat.getLng(),e.lnglat.getLat());
+    });
+}
+//删除点
+function removeMarkers(){
+    if(marker!=null){
+        map.remove(marker);
+    }
+
+}
+// 实例化点标记
+function addMarker(lon,lat) {
+    removeMarkers();
+    marker = new AMap.Marker({
+        map: map,
+        position: new AMap.LngLat(lon, lat),   // 经纬度
+    });
+    //加经纬度
+    $("#lon").val(lon);
+    $("#lat").val(lat);
+    var lnglatXY = [lon, lat];//地图上所标点的坐标
+    AMap.service('AMap.Geocoder',function() {//回调函数
+        geocoder = new AMap.Geocoder({
+        });
+        geocoder.getAddress(lnglatXY, function (status, result) {
+            if (status === 'complete' && result.info === 'OK') {
+                //获得了有效的地址信息:
+                //即,result.regeocode.formattedAddress
+                // alert(result.regeocode.formattedAddress)
+                //document.getElementById("address").value=result.regeocode.formattedAddress;//将获取到的地址信息赋值给文本框,保存进数据库
+
+                var address = result.regeocode.formattedAddress;
+                var city = result.regeocode.addressComponent.city;
+                var province = result.regeocode.addressComponent.province;
+                var district = result.regeocode.addressComponent.district;
+                $("#address").val(address);
+            } else {
+                //获取地址失败
+            }
+        });
+    })
+}
+/**
+ * 提交修改
+ */
+TCarInfoDlg.editSubmit = function() {
+
+    this.clearData();
+    this.collectData();
+    if(!this.validate()){
+        return ;
+    }
+
+    let pCode = $("#pCode").val()
+    let cCode = $("#cCode").val()
+    let account = $("#account").val()
+    var OBJradio= $("input[name='type']:checked").val();
+    if(OBJradio==2){
+        let account = $("#account").val()
+        if(account==''){
+            Feng.info("请选择所属运营商")
+            return;
+        }
+    }
+
+    let name = $("#name").val()
+    let phone = $("#phone").val()
+
+    if(pCode=='' && $("#role")=="1"){
+        Feng.info("请选择省")
+        return;
+    }
+    if(cCode=='' && $("#role")=="1"){
+        Feng.info("请选择市")
+        return;
+    }
+    if(name==''){
+        Feng.info("门店名称不能为空")
+        return;
+    }
+    if(phone==''){
+        Feng.info("联系电话不能为空")
+        return;
+    }
+
+    let address = $("#address").val()
+
+    if(address==''){
+        Feng.info("请输入地址")
+        return;
+    }
+    let time = $("#time").val()
+
+    if(time==''){
+        Feng.info("请填写营业时间")
+        return;
+    }
+    let intro = $("#intro").val()
+
+    if(intro==''){
+        Feng.info("请填写门店介绍")
+        return;
+    }
+    let userName = $("#userName").val()
+
+    if(userName==''){
+        Feng.info("请输入店长姓名")
+        return;
+    }
+    let userPhone = $("#userPhone").val()
+
+    if(userPhone==''){
+        Feng.info("请输入店长手机号")
+        return;
+    }
+    let img = $("#img").val()
+
+
+    let imgOne = $("#imgOne").val()
+
+    if(imgOne==''){
+        Feng.info("请上传实景图")
+        return;
+    }
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tShop/update", function(data){
+        if(data=="5001"){
+            Feng.error("该店长手机号已经存在!")
+        }else
+        if(data.code == 200){
+            if(language==1){
+                Feng.success("修改成功!");
+            }else if(language==2){
+                Feng.success("Modify successfully!");
+            }else {
+                Feng.success("Mengubah dengan sukses!");
+            }
+            window.parent.TCompetition.table.refresh();
+            TCarInfoDlg.close();
+        }else{
+            Feng.error(data.msg);
+        }
+    },function(data){
+        Feng.error("修改失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set("provinceCode",pCode);
+    ajax.set("cityCode",cCode);
+    ajax.set("name",name);
+    ajax.set("phone",phone);
+    ajax.set("cityManagerId",account);
+    ajax.set("address",address);
+    ajax.set("time",time);
+    ajax.set("introduce",intro);
+    ajax.set("userName",userName);
+    ajax.set("userPhone",userPhone);
+    ajax.set("coverDrawing",img);
+    ajax.set("realPicture",imgOne);
+    ajax.set("id",$("#id").val());
+    ajax.start();
+}
+
+$(function() {
+    Feng.initValidator("carInfoForm", TCarInfoDlg.validateFields);
+    // 初始化图片上传
+    var carPhoto = new $WebUpload("c1");
+    carPhoto.setUploadBarId("progressBar");
+    carPhoto.init();
+    var carPhoto = new $WebUpload("c2");
+    carPhoto.setUploadBarId("progressBar");
+    carPhoto.init();
+    var carPhoto = new $WebUpload("c3");
+    carPhoto.setUploadBarId("progressBar");
+    carPhoto.init();
+    var carPhoto = new $WebUpload("c4");
+    carPhoto.setUploadBarId("progressBar");
+    carPhoto.init();
+    var carPhoto = new $WebUpload("c5");
+    carPhoto.setUploadBarId("progressBar");
+    carPhoto.init();
+    var carPhoto = new $WebUpload("c6");
+    carPhoto.setUploadBarId("progressBar");
+    carPhoto.init();
+    var carPhoto = new $WebUpload("c7");
+    carPhoto.setUploadBarId("progressBar");
+    carPhoto.init();
+    var carPhoto = new $WebUpload("c8");
+    carPhoto.setUploadBarId("progressBar");
+    carPhoto.init();
+    var carPhoto = new $WebUpload("img");
+    carPhoto.setUploadBarId("progressBar");
+    carPhoto.init();
+    var drivingLicensePhoto = new $WebUpload("drivingLicensePhoto");
+    drivingLicensePhoto.setUploadBarId("progressBar");
+    drivingLicensePhoto.init();
+
+    //地图搜索
+    TCarInfoDlg.searchByStationName();
+});
+
+/**
+ * 选择分公司后执行
+ */
+TCarInfoDlg.oneChange = function (e) {
+    var oneId=$(e).val();
+    var ajax = new $ax(Feng.ctxPath + "/tCity/onChange", function(data){
+        if(data!=null){
+            if(language==1){
+                var content='<option value="">选择市</option>';
+            }else if(language==2){
+                var content='<option value="">Choose your franchisee</option>';
+            }else {
+                var content='<option value="">Pilih franchisee Anda</option>';
+            }
+            $.each(data, function(k,v) {
+                content += "<option value='"+v.code+"'>"+v.name+"</option>";
+            });
+            $("#cCode").empty().append(content);
+        }
+    });
+    ajax.set("oneId",oneId);
+    ajax.start();
+}
+
+/**
+ * 类型改变执行
+ * @param e
+ */
+TCarInfoDlg.companyTypeClick = function (e) {
+    if (1 == e){
+        $(".companyDiv").hide();
+    } else if (2 == e){
+        $(".companyDiv").show();
+    }
+}
+
+/**
+ * 车辆品牌改变时执行
+ */
+TCarInfoDlg.saveAllImg = function (e) {
+    var id = $("#id").val()
+    var px1 = $("#px1").val()
+    var px2 = $("#px2").val()
+    var px3 = $("#px3").val()
+    var px4 = $("#px4").val()
+    var px5 = $("#px5").val()
+    var px6 = $("#px6").val()
+    var px7 = $("#px7").val()
+    var px8 = $("#px8").val()
+    var c1 = $("#c1").val()
+    var c2 = $("#c2").val()
+    var c3 = $("#c3").val()
+    var c4 = $("#c4").val()
+    var c5 = $("#c5").val()
+    var c6 = $("#c6").val()
+    var c7 = $("#7").val()
+    var c8 = $("#c8").val()
+    var r1 =  document.querySelector('input[name="r1"]').checked;
+    var r2 =  document.querySelector('input[name="r2"]').checked;
+    var r3 =  document.querySelector('input[name="r3"]').checked;
+    var r4 =  document.querySelector('input[name="r4"]').checked;
+    var r5 =  document.querySelector('input[name="r5"]').checked;
+    var r6 =  document.querySelector('input[name="r6"]').checked;
+    var r7 =  document.querySelector('input[name="r7"]').checked;
+    var r8 =  document.querySelector('input[name="r8"]').checked;
+    if(r1){
+        r1 =1
+    }else{
+        r1=0
+    }
+    if(r2){
+        r2 =1
+    }else{
+        r2=0
+    }
+    if(r3){
+        r3 =1
+    }else{
+        r3=0
+    }
+    if(r4){
+        r4 =1
+    }else{
+        r4=0
+    }
+    if(r5){
+        r5 =1
+    }else{
+        r5=0
+    }
+    if(r6){
+        r6 =1
+    }else{
+        r6=0
+    }
+    if(r7){
+        r7 =1
+    }else{
+        r7=0
+    }
+    if(r8){
+        r8 =1
+    }else{
+        r8=0
+    }
+
+    var ajax = new $ax(Feng.ctxPath + "/tShop/saveImgAll", function(data){
+        if(data.code == 200){
+            Feng.success("保存成功!");
+        }else{
+            Feng.error(data.msg);
+        }
+        },function(data){
+            Feng.error("保存失败!" + data.responseJSON.message + "!");
+
+    });
+    ajax.set("id",id);
+    ajax.set("px1",px1);
+    ajax.set("px2",px2);
+    ajax.set("px3",px3);
+    ajax.set("px4",px4);
+    ajax.set("px5",px5);
+    ajax.set("px6",px6);
+    ajax.set("px7",px7);
+    ajax.set("px8",px8);
+    ajax.set("c1",c1);
+    ajax.set("c2",c2);
+    ajax.set("c3",c3);
+    ajax.set("c4",c4);
+    ajax.set("c5",c5);
+    ajax.set("c6",c6);
+    ajax.set("c7",c7);
+    ajax.set("c8",c8);
+    ajax.set("r1",r1);
+    ajax.set("r2",r2);
+    ajax.set("r3",r3);
+    ajax.set("r4",r4);
+    ajax.set("r5",r5);
+    ajax.set("r6",r6);
+    ajax.set("r7",r7);
+    ajax.set("r8",r8);
+    ajax.start();
+}
+
+/**
+ * 专车服务被点击
+ */
+TCarInfoDlg.zcServerClick = function () {
+    var serverBox1 = $('#serverBox1').prop('checked');
+    if (serverBox1){
+        $("#zcModelDiv").show();
+    } else {
+        $("#zcModelDiv").hide();
+    }
+}
+
+/**
+ * 跨城服务被点击
+ */
+TCarInfoDlg.kcServerClick = function () {
+    var serverBox3 = $('#serverBox3').prop('checked');
+    if (serverBox3){
+        $("#kcModelDiv").show();
+    } else {
+        $("#kcModelDiv").hide();
+    }
+}
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/finance/rechargeRecords.js b/cloud-server-management/src/main/webapp/static/modular/system/finance/rechargeRecords.js
index 8c313a3..a71b48a 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/finance/rechargeRecords.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/finance/rechargeRecords.js
@@ -19,10 +19,14 @@
         {title: '所在省市', field: 'provinceAndCity', visible: true, align: 'center', valign: 'middle'},
         {title: '充值用户', field: 'name', visible:  true, align: 'center', valign: 'middle'},
         {title:  '联系方式', field: 'phone', visible: true, align: 'center', valign: 'middle'},
-        {title:  '充值时间', field: 'time', visible: true, align: 'center', valign: 'middle'},
+        {title:  '充值时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle'},
         {title: '充值金额', field: 'amount', visible: true, align: 'center', valign: 'middle'},
         {title: '玩湃币数量', field: 'playPaiCoins', visible: true, align: 'center', valign: 'middle'},
-        {title: '充值类型', field: 'type', visible: true, align: 'center', valign: 'middle'},
+        {title: '充值类型', field: 'type', visible: true, align: 'center', valign: 'middle',
+            formatter:function (data) {
+                return {1:"会员充值",0:"非会员充值"}[data]
+            }
+        },
     ];
 };
 function currentTime(timestamp){
@@ -308,18 +312,15 @@
     TCompetition.table.refresh({query: queryData});
 };
 TCompetition.getAmount = function () {
-
         var ajax = new $ax(Feng.ctxPath + "/finance/getAmount", function (data) {
             var amountElement = document.getElementById("amount");
-            amountElement.innerText = data;
-        }, function (data) {
-
+            amountElement.innerText = "充值总金额:"+data+"元";
         });
         ajax.set("province",$("#pCode").val());
         ajax.set("city",$("#cCode").val());
         ajax.set("name",$("#name").val());
         ajax.set("phone",$("#phone").val());
-        ajax.set("time",$("#beginTime").val());
+        ajax.set("beginTime",$("#beginTime").val());
         ajax.set("type",$("#type").val());
         ajax.start();
 };
@@ -329,7 +330,8 @@
     $("#cCode").val("");
     $("#name").val("");
     $("#phone").val("");
-    $("#shopName").val("");
+    $("#type").val("");
+    $("#beginTime").val("");
     TCompetition.search();
 };
 
@@ -337,8 +339,10 @@
 $(function () {
     var defaultColunms = TCompetition.initColumn();
     var table = new BSTable(TCompetition.id, "/finance/listAll", defaultColunms);
-    table.setPaginationType("server");
+    table.setPaginationType("client");
     TCompetition.table = table.init();
+    TCompetition.getAmount();
+
 });
 
 /**
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js b/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js
index 8559cb3..e08209b 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js
@@ -539,7 +539,6 @@
         Feng.info("请输入场地责任险有效期")
         return;
     }
-
     if($("#img").val()==''){
         Feng.info("请上传场地责任有效期图片")
         return;
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/user/user_info.js b/cloud-server-management/src/main/webapp/static/modular/system/user/user_info.js
index 21e9c30..c81798b 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/user/user_info.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/user/user_info.js
@@ -29,30 +29,22 @@
         password: {
             validators: {
                 notEmpty: {
-                    message: language==1?'密码不能为空':(language==2?"The password cannot be empty.":"Kata sandi tidak bisa kosong.")
-                },
-                identical: {
-                    field: 'rePassword',
-                    message: language==1?'两次密码不一致':(language==2?"The password entered twice are inconsistent.":"Kata sandi yang dimasukkan dua kali tidak konsisten.")
+                    message: '密码不能为空'
                 },
                 regexp: {
                     regexp: /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9]).{8,30}/,
-                    message: language==1?'密码中必须包含大小字母、数字、特称字符,至少8个字符,最多30个字符':(language==2?"The name cannot be empty. The password must contain letters, numbers, and special characters. At least 8 characters and at most 30 characters.":"Namanya tidak bisa kosong. Kata sandi harus mengandung huruf, nomor, dan karakter khusus. Setidaknya 8 karakter dan paling tidak 30 karakter.")
+                    message: '密码中必须包含大小字母、数字、特称字符,至少8个字符,最多30个字符'
                 },
             }
         },
         rePassword: {
             validators: {
                 notEmpty: {
-                    message: language==1?'密码不能为空':(language==2?"The password cannot be empty.":"Kata sandi tidak bisa kosong.")
-                },
-                identical: {
-                    field: 'password',
-                    message: language==1?'两次密码不一致':(language==2?"The password entered twice are inconsistent.":"Kata sandi yang dimasukkan dua kali tidak konsisten.")
+                    message: '密码不能为空'
                 },
                 regexp: {
                     regexp: /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9]).{8,30}/,
-                    message: language==1?'密码中必须包含大小字母、数字、特称字符,至少8个字符,最多30个字符':(language==2?"The name cannot be empty. The password must contain letters, numbers, and special characters. At least 8 characters and at most 30 characters.":"Namanya tidak bisa kosong. Kata sandi harus mengandung huruf, nomor, dan karakter khusus. Setidaknya 8 karakter dan paling tidak 30 karakter.")
+                    message: '密码中必须包含大小字母、数字、特称字符,至少8个字符,最多30个字符'
                 },
             }
         }
@@ -214,17 +206,7 @@
         return;
     }
 
-    if (!this.validatePwd()) {
-        if(language==1){
-            Feng.error("两次密码输入不一致");
-        }else if(language==2){
-            Feng.error("The two password entries are inconsistent");
-        }else {
-            Feng.error("Dua entri kata sandi tidak konsisten");
-        }
 
-        return;
-    }
 
     var birthday = $("#birthday").val();
     if ("" == birthday){
diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/Banner.java b/cloud-server-other/src/main/java/com/dsh/other/entity/Banner.java
index 7ca8683..7e188fe 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/entity/Banner.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/entity/Banner.java
@@ -4,10 +4,12 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.models.auth.In;
-import lombok.Data;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
 import java.util.Date;
+
+
 
 /**
  * @author zhibing.pu
@@ -22,7 +24,7 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
     /**
-     * 位置(1=首页,2=首页底部,3=线上课得积分,4=看视频得奖励,5=常见问题)
+     * 位置(1=首页,2=线上课得积分,3=看视频得奖励,4=常见问题)
      */
     @TableField("position")
     private Integer position;
@@ -32,7 +34,7 @@
     @TableField("img")
     private String img;
     /**
-     * 跳转页面
+     * 跳转页面id
      */
     @TableField("jumpPage")
     private Integer jumpPage;
@@ -50,6 +52,7 @@
      * 添加时间
      */
     @TableField("insertTime")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date insertTime;
     /**
      * 跳转模块
@@ -72,7 +75,7 @@
     @TableField("turnId")
     private String turnId;
     /**
-     * 跳转页面id
+     * 跳转页面
      */
     @TableField("page")
     private String page;
@@ -82,3 +85,4 @@
     @TableField("typeId")
     private Integer typeId;
 }
+
diff --git a/cloud-server-other/src/main/java/com/dsh/other/feignclient/model/AdvertisementChangeStateDTO.java b/cloud-server-other/src/main/java/com/dsh/other/feignclient/model/AdvertisementChangeStateDTO.java
index 6d65380..bd6cc55 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/feignclient/model/AdvertisementChangeStateDTO.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/feignclient/model/AdvertisementChangeStateDTO.java
@@ -1,7 +1,6 @@
 package com.dsh.other.feignclient.model;
 
 import lombok.Data;
-
 import java.util.List;
 
 /**
diff --git a/cloud-server-other/src/main/resources/mapper/BannerMapper.xml b/cloud-server-other/src/main/resources/mapper/BannerMapper.xml
index f95fd97..dc7ae6b 100644
--- a/cloud-server-other/src/main/resources/mapper/BannerMapper.xml
+++ b/cloud-server-other/src/main/resources/mapper/BannerMapper.xml
@@ -7,7 +7,7 @@
         update t_banner set
         state = #{state}
         <where>
-        <if test="ids != null and questionIds.size()>0">
+        <if test="ids != null and ids.size()>0">
         AND t_banner.id IN
         <foreach collection="ids" separator="," item="id" open="(" close=")">
             #{id}

--
Gitblit v1.7.1