luo
2023-09-26 d954784593cb24b0455529ea28588a317c5d766f
9.26
26个文件已修改
4个文件已添加
1231 ■■■■ 已修改文件
.idea/workspace.xml 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/dto/SelectDto.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/dto/TCoursePackagePayment1.java 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/entity/GiftSearchDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/entity/dto/TCoursePackagePayment1.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java 110 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/GiftSearchDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/SelectDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord2.html 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord2.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord3.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit.html 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEditTTT.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord2.js 440 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord2.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/workspace.xml
@@ -24,15 +24,31 @@
  <component name="ChangeListManager">
    <list default="true" id="cb08d02f-fd4f-4fa2-85fe-abd508fa83ac" name="Default Changelist" comment="9.25">
      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/dto/SelectDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/dto/SelectDto.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/entity/GiftSearchDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/entity/GiftSearchDto.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/model/TAppUser.java" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/GiftSearchDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/GiftSearchDto.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/SelectDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/SelectDto.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord2.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord2.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord3.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord3.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEditTTT.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEditTTT.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord2.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord2.js" afterDir="false" />
    </list>
    <option name="SHOW_DIALOG" value="false" />
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -78,39 +94,39 @@
    <option name="hideEmptyMiddlePackages" value="true" />
    <option name="showLibraryContents" value="true" />
  </component>
  <component name="PropertiesComponent">{
  &quot;keyToString&quot;: {
    &quot;DefaultHtmlFileTemplate&quot;: &quot;HTML File&quot;,
    &quot;RequestMappingsPanelOrder0&quot;: &quot;0&quot;,
    &quot;RequestMappingsPanelOrder1&quot;: &quot;1&quot;,
    &quot;RequestMappingsPanelWidth0&quot;: &quot;75&quot;,
    &quot;RequestMappingsPanelWidth1&quot;: &quot;75&quot;,
    &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
    &quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
    &quot;git-widget-placeholder&quot;: &quot;master&quot;,
    &quot;ignore.virus.scanning.warn.message&quot;: &quot;true&quot;,
    &quot;last_opened_file_path&quot;: &quot;D:/JavaTool/PlayPai1/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage&quot;,
    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
    &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
    &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
    &quot;project.structure.last.edited&quot;: &quot;模块&quot;,
    &quot;project.structure.proportion&quot;: &quot;0.15&quot;,
    &quot;project.structure.side.proportion&quot;: &quot;0.54367816&quot;,
    &quot;settings.editor.selected.configurable&quot;: &quot;preferences.pluginManager&quot;,
    &quot;spring.configuration.checksum&quot;: &quot;b0c8222ba40624e179f539b98c2e8cad&quot;,
    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
  <component name="PropertiesComponent"><![CDATA[{
  "keyToString": {
    "DefaultHtmlFileTemplate": "HTML File",
    "RequestMappingsPanelOrder0": "0",
    "RequestMappingsPanelOrder1": "1",
    "RequestMappingsPanelWidth0": "75",
    "RequestMappingsPanelWidth1": "75",
    "RunOnceActivity.OpenProjectViewOnStart": "true",
    "RunOnceActivity.ShowReadmeOnStart": "true",
    "WebServerToolWindowFactoryState": "false",
    "git-widget-placeholder": "master",
    "ignore.virus.scanning.warn.message": "true",
    "last_opened_file_path": "D:/JavaTool/PlayPai1/cloud-server-management/src/main/webapp/static/modular/system/coursePackage",
    "node.js.detected.package.eslint": "true",
    "node.js.detected.package.tslint": "true",
    "node.js.selected.package.eslint": "(autodetect)",
    "node.js.selected.package.tslint": "(autodetect)",
    "nodejs_package_manager_path": "npm",
    "project.structure.last.edited": "模块",
    "project.structure.proportion": "0.15",
    "project.structure.side.proportion": "0.54367816",
    "settings.editor.selected.configurable": "preferences.pluginManager",
    "spring.configuration.checksum": "b0c8222ba40624e179f539b98c2e8cad",
    "vue.rearranger.settings.migration": "true"
  }
}</component>
}]]></component>
  <component name="ReactorSettings">
    <option name="notificationShown" value="true" />
  </component>
  <component name="RecentsManager">
    <key name="CopyFile.RECENT_KEYS">
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\WEB-INF\view\system\coursePackage" />
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\static\modular\system\coursePackage" />
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\WEB-INF\view\system\coursePackage" />
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\WEB-INF\view\system\tStudent" />
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\static\modular\system\tCoupon" />
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\WEB-INF\view\system" />
@@ -252,7 +268,7 @@
  </component>
  <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
  <component name="SvnConfiguration">
    <configuration />
    <configuration>C:\Users\luo\AppData\Roaming\Subversion</configuration>
  </component>
  <component name="TaskManager">
    <task active="true" id="Default" summary="Default task">
@@ -292,7 +308,9 @@
      <workItem from="1695520475699" duration="28522000" />
      <workItem from="1695602623205" duration="24182000" />
      <workItem from="1695633570775" duration="65000" />
      <workItem from="1695633789585" duration="2320000" />
      <workItem from="1695633789585" duration="4703000" />
      <workItem from="1695638521906" duration="1415000" />
      <workItem from="1695689815334" duration="13353000" />
    </task>
    <task id="LOCAL-00001" summary="后台代码删除">
      <created>1690249807612</created>
@@ -425,7 +443,15 @@
      <option name="project" value="LOCAL" />
      <updated>1695629926005</updated>
    </task>
    <option name="localTasksCounter" value="19" />
    <task id="LOCAL-00019" summary="9.25">
      <option name="closed" value="true" />
      <created>1695636138175</created>
      <option name="number" value="00019" />
      <option name="presentableId" value="LOCAL-00019" />
      <option name="project" value="LOCAL" />
      <updated>1695636138175</updated>
    </task>
    <option name="localTasksCounter" value="20" />
    <servers />
  </component>
  <component name="TypeScriptGeneratedFilesManager">
cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java
@@ -204,7 +204,7 @@
        System.out.println("======giftSelect=========giftSearchDto===="+giftSearchDto);
//       Integer appId = studentService.getGiftSelect(giftSearchDto);
        TCoursePackagePayment coursePackagePaymentById = paymentClient.getCoursePackagePaymentById(giftSearchDto.getId());
        TCoursePackagePayment1 coursePackagePaymentById = paymentClient.getCoursePackagePaymentById1(giftSearchDto.getId());
//        System.out.println("=======giftSelect======appId====>"+appId);
        List<TStudent> selectDtos =  studentService.list(new QueryWrapper<TStudent>()
                .select("name, id")
cloud-server-account/src/main/java/com/dsh/account/dto/SelectDto.java
@@ -1,5 +1,6 @@
package com.dsh.account.dto;
import io.swagger.models.auth.In;
import lombok.Data;
@Data
cloud-server-account/src/main/java/com/dsh/account/dto/TCoursePackagePayment1.java
New file
@@ -0,0 +1,163 @@
package com.dsh.account.dto;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.dsh.account.feignclient.course.model.TCoursePackagePayment;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 用户课程包购买记录
 * </p>
 *
 * @author administrator
 * @since 2023-06-14
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_course_package_payment")
public class TCoursePackagePayment1 {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.NONE)
    @TableField(updateStrategy = FieldStrategy.NEVER)
    private Long id;
    /**
     * 业务编号
     */
    @TableField("code")
    private String code;
    /**
     * 用户id
     */
    @TableField("appUserId")
    private Integer appUserId;
    /**
     * 学员id
     */
    @TableField("studentId")
    private Integer studentId;
    /**
     * 课包id
     */
    @TableField("coursePackageId")
    private Integer coursePackageId;
    /**
     * 支付方式(1=微信,2=支付宝,3=玩湃币,4=积分,5=积分+微信,6=积分+支付宝)
     */
    @TableField("payType")
    private Integer payType;
    /**
     * 课时数
     */
    @TableField("classHours")
    private Integer classHours;
    /**
     * 原价
     */
    @TableField("originalPrice")
    private Double originalPrice;
    /**
     * 优惠券id
     */
    @TableField("userCouponId")
    private Long userCouponId;
    /**
     * 现金支付价格
     */
    @TableField("cashPayment")
    private BigDecimal cashPayment;
    /**
     * 玩湃币价格/积分
     */
    @TableField("playPaiCoin")
    private Integer playPaiCoin;
    /**
     * 总课时
     */
    @TableField("totalClassHours")
    private Integer totalClassHours;
    /**
     * 剩余课时
     */
    @TableField("laveClassHours")
    private Integer laveClassHours;
    /**
     * 缺课次数
     */
    @TableField("absencesNumber")
    private Integer absencesNumber;
    /**
     * 退课课时
     */
    @TableField(exist = false)
    private Integer dropoutsNumber;
    /**
     * 支付用户类型(1=用户,2=管理员)
     */
    @TableField("payUserType")
    private Integer payUserType;
    /**
     * 支付状态(1=待支付,2=已支付)
     */
    @TableField("payStatus")
    private Integer payStatus;
    /**
     * 第三方支付流水号
     */
    @TableField("orderNumber")
    private String orderNumber;
    /**
     * 支付用户id
     */
    @TableField("payUserId")
    private Integer payUserId;
    /**
     * 课程状态(1=正常,2=已退课)
     */
    @TableField("status")
    private Integer status;
    /**
     * 退课时间
     */
    @TableField("withdrawalTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date withdrawalTime;
    /**
     * 退课凭证
     */
    @TableField("certificate")
    private String certificate;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("state")
    private Integer state;
    /**
     * 添加时间
     */
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date insertTime;
    @TableField("useTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date useTime;
    /**
     * 平台手动支付时使用
     */
    @TableField("payUserName")
    private String payUserName;
}
cloud-server-account/src/main/java/com/dsh/account/entity/GiftSearchDto.java
@@ -7,5 +7,5 @@
public class GiftSearchDto {
    String name;
    String phone;
    Integer id;
    Long id;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
@@ -1,5 +1,6 @@
package com.dsh.account.feignclient.course;
import com.dsh.account.dto.TCoursePackagePayment1;
import com.dsh.account.feignclient.competition.model.BillingDataRequestVo;
import com.dsh.account.feignclient.course.model.*;
import com.dsh.account.model.BillingRequest;
@@ -50,7 +51,11 @@
    @PostMapping("/base/coursePack/getCoursePackagePaymentById")
    public TCoursePackagePayment getCoursePackagePaymentById(@RequestBody Integer id);
    public TCoursePackagePayment getCoursePackagePaymentById(@RequestBody Long id);
    @PostMapping("/base/coursePack/getCoursePackagePaymentById")
    public TCoursePackagePayment1 getCoursePackagePaymentById1(@RequestBody Long id);
    @PostMapping("/base/coursePack/updatePaymentCoursePackage")
    void updatePaymentCoursePackage(@RequestBody TCoursePackagePayment coursePackagePayment);
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -1144,9 +1144,13 @@
    @PostMapping("/base/coursePack/getCoursePackagePaymentById")
    public TCoursePackagePayment getCoursePackagePaymentById(@RequestBody Integer id){
        return packagePaymentService.getById(id);
    public TCoursePackagePayment getCoursePackagePaymentById(@RequestBody Long id){
        TCoursePackagePayment byId = packagePaymentService.getById(id);
        System.out.println("======byId=========="+byId);
        return byId;
    }
    @PostMapping("/base/coursePack/delPaymentCoursePackage")
    public boolean delPaymentCoursePackage(@RequestBody Integer payId){
        return packagePaymentService.removeById(payId);
cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java
@@ -107,7 +107,9 @@
    @ResponseBody
    public List<SelectDto> getSelect(@RequestParam("payId")Long payId){
        List<Integer> studentIds = paymentService.getStudentIds(payId);
        TCoursePackagePayment byId = paymentService.getById(payId);
        List<Integer> studentIds = paymentService.getStudentIds(payId,byId.getCoursePackageId(),byId.getAppUserId());
    System.out.println("=========studentIds=================>"+studentIds);
    if (studentIds.size()>0){
@@ -371,7 +373,13 @@
            counsumService.save(courseCounsum1);
        }else {
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setInsertTime(new Date());
            courseCounsum.setReason("赠课");
            courseCounsum.setNum(orinPay.getLaveClassHours());
            courseCounsum.setChangeType(0);
            courseCounsum.setPaymentId(orinPay.getId());
            counsumService.save(courseCounsum);
            orinPay.setTotalClassHours(0);
@@ -381,13 +389,7 @@
            paymentService.updateById(orinPay);
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setInsertTime(new Date());
            courseCounsum.setReason("赠课");
            courseCounsum.setNum(orinPay.getLaveClassHours());
            courseCounsum.setChangeType(0);
            courseCounsum.setPaymentId(orinPay.getId());
            counsumService.save(courseCounsum);
cloud-server-course/src/main/java/com/dsh/course/entity/dto/TCoursePackagePayment1.java
New file
@@ -0,0 +1,100 @@
package com.dsh.course.entity.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class TCoursePackagePayment1 {
    /**
     * 主键
     */
    private Integer id;
    /**
     * 用户id
     */
    private Integer appUserId;
    /**
     * 学员id
     */
    private Integer studentId;
    /**
     * 课包id
     */
    private Integer coursePackageId;
    /**
     * 支付方式(1=微信,2=支付宝,3=玩湃币,4=积分,5=积分+微信,6=积分+支付宝)
     */
    private Integer payType;
    /**
     * 课时数
     */
    private Integer classHours;
    /**
     * 现金支付价格
     */
    private BigDecimal cashPayment;
    /**
     * 玩湃币价格/积分
     */
    private Integer playPaiCoin;
    /**
     * 总课时
     */
    private Integer totalClassHours;
    /**
     * 剩余课时
     */
    private Integer laveClassHours;
    /**
     * 缺课次数
     */
    private Integer absencesNumber;
    /**
     * 支付用户类型(1=用户,2=管理员)
     */
    private Integer payUserType;
    /**
     * 支付状态(1=待支付,2=已支付)
     */
    private Integer payStatus;
    /**
     * 第三方支付流水号
     */
    private String orderNumber;
    /**
     * 支付用户id
     */
    private Integer payUserId;
    /**
     * 课程状态(1=正常,2=已退课)
     */
    private Integer status;
    /**
     * 退课时间
     */
    private Date withdrawalTime;
    /**
     * 退课凭证
     */
    private String certificate;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    private Date insertTime;
    /**
     * 业务编号
     */
    private String code;
    /**
     * 原价
     */
    private Double originalPrice;
}
cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java
@@ -5,6 +5,7 @@
import com.dsh.course.entity.TCoursePackagePayment;
import com.dsh.course.model.QueryRegistrationRecord;
import com.dsh.course.model.BillingRequest;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
@@ -61,7 +62,7 @@
    void updateUseTime(@Param("id")Long id,  @Param("date") Date date);
    List<Integer> getStudentIds(@Param("id")Long payId);
    List<Integer> getStudentIds(@Param("id")Long payId,@Param("classId")Integer classId,@Param("appId")Integer appId);
    boolean updateHoursById(@Param("id") Long id, @Param("i") int i);
}
cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
@@ -10,6 +10,7 @@
import com.dsh.course.model.vo.request.*;
import com.dsh.course.model.vo.response.*;
import com.dsh.course.util.ResultUtil;
import io.swagger.models.auth.In;
import java.util.Date;
import java.util.List;
@@ -119,7 +120,7 @@
    void updateUseTime(Long id, Date date);
    List<Integer> getStudentIds(Long payId);
    List<Integer> getStudentIds(Long payId,Integer classId,Integer appId);
    boolean updateHoursById(TCoursePackagePayment byId, int i);
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
@@ -34,6 +34,7 @@
import com.dsh.course.util.*;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
@@ -1039,8 +1040,8 @@
    }
    @Override
    public List<Integer> getStudentIds(Long payId) {
       return  this.baseMapper.getStudentIds(payId);
    public List<Integer> getStudentIds(Long payId, Integer classId, Integer appId) {
       return  this.baseMapper.getStudentIds(payId,classId,appId);
    }
    @Override
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
@@ -1215,74 +1215,76 @@
        try {
            coursePackage.setAuditStatus(2);
            this.baseMapper.insert(coursePackage);
            //生成排课数据
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = sdf1.parse(sdf.format(new Date()) + " 00:00:00");
            List<String> list = Arrays.asList(coursePackage.getClassWeeks().split(";"));
            String value = coursePackage.getClassStartTime();
            String value1 = coursePackage.getClassEndTime().trim();
            String[] star = value.split(",");
            String[] end = value1.split(",");
            if (coursePackage.getClassStartTime()!=null&&coursePackage.getClassStartTime()!="") {
                //生成排课数据
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date date = sdf1.parse(sdf.format(new Date()) + " 00:00:00");
                List<String> list = Arrays.asList(coursePackage.getClassWeeks().split(";"));
                String value = coursePackage.getClassStartTime();
                String value1 = coursePackage.getClassEndTime().trim();
            for (int i = 0; i < star.length; i++) {
                String[] star = value.split(",");
                String[] end = value1.split(",");
                for (int i = 0; i < star.length; i++) {
//                int index = star[i].indexOf(",");
//
//
//                String result = value.substring(0, index).trim();
                String classStartTime = star[i];
                String[] split = classStartTime.split(":");
                    String classStartTime = star[i];
                    String[] split = classStartTime.split(":");
//            String value1 = en;
                int index1 = value1.indexOf(",");
                    int index1 = value1.indexOf(",");
//                String result1 = value.substring(0, index1).trim();
                String classEndTime = end[i];
                String[] split1 = classEndTime.split(":");
                Calendar s = Calendar.getInstance();
                s.setTime(date);
                s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
                s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
                s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                s.set(Calendar.SECOND, 0);
                Calendar e = Calendar.getInstance();
                e.setTime(date);
                e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 13);
                long timeInMillis = e.getTimeInMillis();
                while (true){
                    int w = s.get(Calendar.DAY_OF_WEEK);
                    WeekEnum weekEnum = WeekEnum.getWeekEnum(w);
                    if(list.contains(weekEnum.getChineseName())){
                        Calendar classDate = Calendar.getInstance();
                        classDate.setTime(s.getTime());
                        classDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
                        classDate.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                        classDate.set(Calendar.SECOND, 0);
                        Calendar endDate = Calendar.getInstance();
                        endDate.setTime(s.getTime());
                        endDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0]));
                        endDate.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
                        endDate.set(Calendar.SECOND, 0);
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setCoursePackageId(coursePackage.getId());
                        coursePackageScheduling.setClassDate(classDate.getTime());
                        coursePackageScheduling.setEndDate(endDate.getTime());
                        coursePackageScheduling.setStatus(1);
                        coursePackageSchedulingService.save(coursePackageScheduling);
                    }
                    String classEndTime = end[i];
                    String[] split1 = classEndTime.split(":");
                    Calendar s = Calendar.getInstance();
                    s.setTime(date);
                    s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
                    if(s.getTimeInMillis() > timeInMillis){
                        break;
                    s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
                    s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                    s.set(Calendar.SECOND, 0);
                    Calendar e = Calendar.getInstance();
                    e.setTime(date);
                    e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 13);
                    long timeInMillis = e.getTimeInMillis();
                    while (true) {
                        int w = s.get(Calendar.DAY_OF_WEEK);
                        WeekEnum weekEnum = WeekEnum.getWeekEnum(w);
                        if (list.contains(weekEnum.getChineseName())) {
                            Calendar classDate = Calendar.getInstance();
                            classDate.setTime(s.getTime());
                            classDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
                            classDate.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                            classDate.set(Calendar.SECOND, 0);
                            Calendar endDate = Calendar.getInstance();
                            endDate.setTime(s.getTime());
                            endDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0]));
                            endDate.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
                            endDate.set(Calendar.SECOND, 0);
                            CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                            coursePackageScheduling.setCoursePackageId(coursePackage.getId());
                            coursePackageScheduling.setClassDate(classDate.getTime());
                            coursePackageScheduling.setEndDate(endDate.getTime());
                            coursePackageScheduling.setStatus(1);
                            coursePackageSchedulingService.save(coursePackageScheduling);
                        }
                        s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
                        if (s.getTimeInMillis() > timeInMillis) {
                            break;
                        }
                    }
                }
            }
            return coursePackage.getId();
        }catch (Exception e){
cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
@@ -132,15 +132,7 @@
    <select id="getStudentIds" resultType="java.lang.Integer">
        SELECT studentId
        FROM t_course_package_payment
        WHERE appUserId = (
            SELECT appUserId
            FROM t_course_package_payment
            WHERE id = #{id}
        ) AND id != #{id} and coursePackageId=(
                 SELECT coursePackageId
            FROM t_course_package_payment
            WHERE id = #{id}
                )
        WHERE appUserId = #{appId} AND id != #{id} and coursePackageId=#{classId}
    </select>
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java
@@ -470,7 +470,39 @@
        model.addAttribute("times", strings);
        model.addAttribute("counts", counts);
        return PREFIX + "classRecord.html";
    }
    /**
     * 假期跳转到上课记录列表页
     * @param model
     * @param id
     * @return
     */
    @GetMapping("/openClassRecord1")
    public String openClassRecord1(Model model, Integer id){
        TCoursePackage tCoursePackage = coursePackageClient.queryById(id);
        String[] start = tCoursePackage.getClassStartTime().split(",");
        String[] end = tCoursePackage.getClassEndTime().split(",");
        Integer counts = packagePaymentClient.queryByClassId(id);
        List<String> strings = new ArrayList<>();
        for (int i = 0; i <start.length ; i++) {
            String outTime = start[i] +"-" +end[0];
            strings.add(outTime);
        }
        TStore store = storeService.getById(tCoursePackage.getStoreId());
        Coach coach = coachClient.queryCoachById(tCoursePackage.getCoachId());
        model.addAttribute("item", tCoursePackage);
        model.addAttribute("store", store);
        model.addAttribute("coach", coach);
        model.addAttribute("times", strings);
        model.addAttribute("counts", counts);
        return PREFIX + "classRecord2.html";
    }
@@ -692,8 +724,9 @@
            String jsonString = jsonArray.getString(i);
            String[] split = jsonString.split(" - ");
            first.add(split[0]);
            second.add(split[1]);
            if (split.length>1) {
                second.add(split[1]);
            }
        }
        String firstString = String.join(",",first);
        String secondString = String.join(",",second);
@@ -944,7 +977,7 @@
    @ResponseBody
    @PostMapping("/makeUpMissedLessons")
    public ResultUtil makeUpMissedLessons(Long id){
        System.out.println("==========coursePackagePaymentId======"+id);
        System.out.println("==========coursePackage补课PaymentId======"+id);
        return coursePackageService.makeUpMissedLessons(id);
    }
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java
@@ -127,6 +127,7 @@
    @RequestMapping("/tShop_update/{id}")
    public String tCityUpdate(@PathVariable Integer id, Model model) {
        TStore byId = storeService.getById(id);
        System.out.println("======byId========="+byId);
        model.addAttribute("item",byId);
        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
@@ -137,10 +138,13 @@
        List<TOperatorCity> list3 = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getPid, one.getId()).eq(TOperatorCity::getType, 2));
        if(list3.size()>0){
            model.addAttribute("list1",list3);
            System.out.println("===list3======="+list3);
        }else {
            TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, byId.getProvinceCode()));
            List<TCity> list1 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId,one1.getId()));
            model.addAttribute("list1",list1);
            System.out.println("===list1======="+list1);
        }
        CityListQuery cityListQuery = new CityListQuery();
        cityListQuery.setOffset(1);
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java
@@ -194,6 +194,9 @@
            payment.setId(Long.valueOf(tCoursePackage.getId()));
            BigDecimal cashPayment = payment.getCashPayment();
            if (cashPayment==null){
                cashPayment = BigDecimal.ZERO;
            }
            Integer totalClassHours = payment.getTotalClassHours();
            BigDecimal result =  new BigDecimal(0);
            if (totalClassHours!=0) {
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/GiftSearchDto.java
@@ -7,5 +7,5 @@
public class GiftSearchDto {
    String name;
    String phone;
    Integer id;
    Long id;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/SelectDto.java
@@ -4,6 +4,6 @@
@Data
public class SelectDto {
    Integer id;
    Long id;
    String value;
}
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html
@@ -46,7 +46,7 @@
                            <#button name="发布课后练习" icon="fa-refresh" clickFun="ClassRecord.afterClassExercises()" space="true"/>
                            <#button name="上传消课记录" icon="fa-refresh" clickFun="ClassRecord.cancellationRecord(${item.codeTime})" space="true"/>
                            <#button name="查看消课记录" icon="fa-refresh" clickFun="ClassRecord.lookCancellationRecord()" space="true"/>
                            <#button name="手动预约" icon="fa-refresh" clickFun="ClassRecord.manualReservation()" space="true"/>
<!--                            <#button name="手动预约" icon="fa-refresh" clickFun="ClassRecord.manualReservation()" space="true"/>-->
                        </div>
                        <#table id="managerTable"/>
                    </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord2.html
New file
@@ -0,0 +1,68 @@
@layout("/common/_container.html"){
<link rel="stylesheet" href="${ctxPath}/layui/css/layui.css"  media="all">
<div class="row">
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <div class="ibox-content">
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                            <h3>课包信息</h3>
                            <input type="hidden" id="id" value="${item.id}">
                            <input type="hidden" id="codeTime" value="${item.codeTime}">
                            <div class="form-group" style="height: 10px;">
                                <label class="col-sm-1 control-label" style="text-align: right;">所属门店:</label>
                                <span class="col-sm-2" style="text-align: left;">${store.name}</span>
                            </div>
                            <div class="form-group" style="height: 10px;">
                                <label class="col-sm-1 control-label" style="text-align: right;">课包名称:</label>
                                <span class="col-sm-1" style="text-align: left;" id="name">${item.name}</span>
                            </div>
                            <div class="form-group" style="height: 10px;">
                                <label class="col-sm-1 control-label" style="text-align: right;">授课教师:</label>
                                <span class="col-sm-2" style="text-align: left;">${coach.name!}</span>
                            </div>
                            <div class="form-group" style="height: 10px;">
                                <label class="col-sm-1 control-label" style="text-align: right;">已报名学员:</label>
                                <span class="col-sm-2" style="text-align: left;">${counts}</span>
                            </div>
                            <div class="form-group" style="height: 10px;">
                                <label class="col-sm-1 control-label" style="text-align: right;">上课时间:</label>
                                <span class="col-sm-2" style="text-align: left;">${item.classWeeks}</span>
                            </div>
                            @for(time in times){
                            <div class="form-group" style="height: 10px;">
                                <label class="col-sm-1 control-label" style="text-align: right;"></label>
                                <span class="col-sm-2" style="text-align: left;">${time}</span>
                            </div>
                            @}
                        </div>
                        <div class="hidden-xs" id="managerTableToolbar" role="group">
                            <#button name="查看学员" icon="fa-plus" clickFun="ClassRecord.classRecord()"/>
                            <#button name="取消本次" icon="fa-edit" clickFun="ClassRecord.cancelClassSchedule()" space="true"/>
                            <#button name="发布课后练习" icon="fa-refresh" clickFun="ClassRecord.afterClassExercises()" space="true"/>
                            <#button name="上传消课记录" icon="fa-refresh" clickFun="ClassRecord.cancellationRecord(${item.codeTime})" space="true"/>
                            <#button name="查看消课记录" icon="fa-refresh" clickFun="ClassRecord.lookCancellationRecord()" space="true"/>
<!--                            <#button name="手动预约" icon="fa-refresh" clickFun="ClassRecord.manualReservation()" space="true"/>-->
                        </div>
                        <#table id="managerTable"/>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/coursePackage/classRecord2.js"></script>
<script src="${ctxPath}/layui/layui.js" charset="utf-8"></script>
<script>
    laydate.render({
        elem: '#beginTime'
    });
    laydate.render({
        elem: '#endTime'
    });
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html
@@ -7,7 +7,7 @@
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                            <input type="text" id="type" value="${type}">
                            <input type="hidden" id="type" value="${type}">
                            <input type="hidden" id="id" value="${item.id}">
                            <input type="hidden" id="name" value="${item.name}">
                            <div class="col-lg-10 col-sm-9">
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord2.html
@@ -7,7 +7,7 @@
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                            <input type="text" id="type" value="${type}">
                            <input type="hidden" id="type" value="${type}">
                            <input type="hidden" id="id" value="${item.id}">
                            <input type="hidden" id="name" value="${item.name}">
                            <div class="col-lg-10 col-sm-9">
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord3.html
@@ -7,7 +7,7 @@
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                            <input type="text" id="type" value="${type}">
                            <input type="hidden" id="type" value="${type}">
                            <input type="hidden" id="id" value="${item.id}">
                            <input type="hidden" id="name" value="${item.name}">
                            <div class="col-lg-10 col-sm-9">
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit.html
@@ -1228,16 +1228,14 @@
                                        "valueField": "id"
                                      }
                                    ],
                                    "messages": {
                                    },
                                    "messages": {},
                                    "loadingConfig": {
                                      "show": true
                                      "show": false
                                    },
                                    "api": {
                                      "url": "/tStudent/giftSelect",
                                      "method": "post",
                                      "messages": {
                                      },
                                      "messages": {},
                                      "requestAdaptor": "",
                                      "adaptor": "",
                                      "dataType": "form-data",
@@ -1246,7 +1244,8 @@
                                        "phone": "$phone",
                                        "id": "$id"
                                      }
                                    }
                                    },
                                    "initFetch": false
                                  },
                                  {
                                    "type": "input-text",
@@ -1316,12 +1315,10 @@
                                  "method": "post",
                                  "requestAdaptor": "",
                                  "adaptor": "",
                                  "messages": {
                                  },
                                  "messages": {},
                                  "dataType": "form-data"
                                },
                                "actions": [
                                ],
                                "actions": [],
                                "onEvent": {
                                  "submitSucc": {
                                    "weight": 0,
@@ -1341,8 +1338,7 @@
                              {
                                "id": "u:59d68a32f7fd",
                                "type": "container",
                                "body": [
                                ],
                                "body": [],
                                "style": {
                                  "position": "static",
                                  "display": "block"
@@ -1354,8 +1350,7 @@
                            "showLoading": true,
                            "className": "app-popover",
                            "id": "u:552bd1b3464d",
                            "actions": [
                            ],
                            "actions": [],
                            "canAccessSuperData": false
                          }
                        }
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEditTTT.html
@@ -60,7 +60,8 @@
                  "name": "id",
                  "id": "u:d038053014ca",
                  "mode": "horizontal",
                  "size": "md"
                  "size": "md",
                  "hidden": true
                },
                {
                  "type": "input-text",
@@ -68,7 +69,8 @@
                  "name": "ids",
                  "id": "u:223b7f2a1a5b",
                  "mode": "horizontal",
                  "size": "md"
                  "size": "md",
                  "hidden": true
                },
                {
                  "label": "换课课程:",
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord2.js
New file
@@ -0,0 +1,440 @@
/**
 * 系统管理--用户管理的单例对象
 */
let ClassRecord = {
    id: "managerTable",//表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1,
    courseList: null
};
/**
 * 初始化表格的列
 */
ClassRecord.initColumn = function () {
    let columns = [
        {field: 'selectItem', radio: true},
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '日期', field: 'classDate', align: 'center', valign: 'middle'},
        {title: '请假学员', field: 'registered', align: 'center', valign: 'middle'},
        {title: '实到学员', field: 'actualArrival', align: 'center', valign: 'middle',
            formatter: function (v, row) {
                if (row.absencesNumber === undefined) {
                    return 0;
                } else {
                    return v;
                }
            }
        },
        {title: '未到学员', field: 'nonArrival', align: 'center', valign: 'middle',
            formatter: function (v, row) {
                if (row.absencesNumber === undefined) {
                    return 0;
                } else {
                    return v;
                }
            }
        },
        {title: '课后练习', field: 'courseId', align: 'center', valign: 'middle',
            formatter: function (v) {
                if (typeof v === "undefined") {
                    return '未布置';
                } else {
                    return '已布置';
                }
            }
        },
        {title: '状态', field: 'status', align: 'center', valign: 'middle',
            formatter: function (v) {
                switch (v) {
                    case 1:
                        return '未开始';
                    case 2:
                        return '已开始';
                    case 3:
                        return '已结束';
                    case 4:
                        return '已取消';
                }
            }
        },
        {title: '扣除课时', field: 'deductClassHour', align: 'center', valign: 'middle'},
        {title: '取消记录', field: 'absencesNumber', align: 'center', valign: 'middle',
            formatter: function (v) {
                if (typeof v === "undefined") {
                    return '未上传';
                } else {
                    return '已上传';
                }
            }
        },
    ];
    return columns;
};
/**
 * 检查是否选中
 */
ClassRecord.check = function () {
    let selected = $('#' + this.id).bootstrapTable('getSelections');
    if (selected.length == 0) {
        Feng.info("请先选中表格中的某一记录!");
        return false;
    } else {
        ClassRecord.seItem = selected[0];
        return true;
    }
};
/**
 * 点击修改按钮时
 * @param userId 管理员id
 */
ClassRecord.classRecord = function () {
    if (this.check()) {
        let index = layer.open({
            type: 2,
            title: '查看学员',
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/coursePackage/openCoursePackageStudent?id=' + this.seItem.id
        });
        this.layerIndex = index;
    }
};
/**
 * 删除用户
 */
ClassRecord.cancelClassSchedule = function () {
    if (this.check()) {
        let operation = function(){
            let ajax = new $ax(Feng.ctxPath + "/coursePackage/cancelClassSchedule", function (res) {
                if(res.code == 200){
                    Feng.success("取消成功!");
                    ClassRecord.table.refresh();
                }else{
                    Feng.error(res.msg);
                }
            }, function (data) {
                Feng.error("取消失败!" + data.responseJSON.message + "!");
            });
            ajax.set("id", ClassRecord.seItem.id);
            ajax.start();
        };
        Feng.confirm("确定取消本次",operation);
    }
};
ClassRecord.afterClassExercises = function () {
    if (this.check()) {
        var ajax = new $ax(Feng.ctxPath + "/course/queryCourseByType", function (data) {
            ClassRecord.courseList = data;
            let htmlStr =
                '<div class="form-horizontal">' +
                '   <div class="col-sm-11" style="padding: 20px;">' +
                '       <div class="form-group">\n' +
                '           <label class="col-sm-3 control-label">视频类型:</label>\n' +
                '           <div class="col-sm-9" style="margin-top: 6px;">\n' +
                '               <span>课后练习</span>' +
                '           </div>\n' +
                '       </div>' +
                '       <div class="form-group">\n' +
                '           <label class="col-sm-3 control-label">视频名称:</label>\n' +
                '           <div class="col-sm-9">\n' +
                '               <select class="form-control" id="courseId">' +
                '                   <option value="">请选择</option>';
            for (let i = 0; i < data.length; i++) {
                htmlStr += '<option value="' + data[i].id + '">' + data[i].name + '</option>';
            }
            htmlStr += '        </select>' +
            '               </div>\n' +
            '           </div>' +
                '       <div class="form-group">\n' +
                '           <label class="col-sm-3 control-label">视频封面:</label>\n' +
                '           <div class="col-sm-9">\n' +
                '               <img src="" style="height: 150px;" id="coverDrawing"/>' +
                '           </div>\n' +
                '       </div>' +
                '       <div class="form-group">\n' +
                '           <label class="col-sm-3 control-label">视频简介:</label>\n' +
                '           <div class="col-sm-9">\n' +
                '               <textarea class="form-control" id="introduce" style="height: 200px;"></textarea>' +
                '           </div>\n' +
                '       </div>' +
                '       <div class="form-group">\n' +
                '           <label class="col-sm-3 control-label">可获得积分:</label>\n' +
                '           <div class="col-sm-9">\n' +
                '               <input class="form-control" id="integral" type="number" min="0">' +
                '           </div>\n' +
                '       </div>' +
            '       </div>' +
            '</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 () {
                    let courseId = $('#courseId').val();
                    let integral = $('#integral').val();
                    if(null == courseId || '' == courseId){
                        Feng.error("请选择有效的课程");
                        return
                    }
                    if(null == integral || '' == integral){
                        Feng.error("请输入有效的积分");
                        return
                    }
                    let ajax = new $ax(Feng.ctxPath + "/coursePackage/afterClassExercises", function (res) {
                        if(res.code == 200){
                            Feng.success("保存成功!");
                            layer.closeAll();
                            RegistrationRecord.table.refresh();
                        }else{
                            Feng.error(res.msg);
                        }
                    }, function (data) {
                        Feng.error("保存失败!" + data.responseJSON.message + "!");
                    });
                    ajax.set("id", ClassRecord.seItem.id);
                    ajax.set("courseId", courseId);
                    ajax.set("integral", integral);
                    ajax.start();
                },
            });
            $('#courseId').change(function () {
                let id = $(this).val();
                for (let i = 0; i < ClassRecord.courseList.length; i++) {
                    if(ClassRecord.courseList[i].id == id){
                        $('#coverDrawing').attr("src", ClassRecord.courseList[i].coverDrawing);
                        $('#introduce').text(ClassRecord.courseList[i].introduce);
                    }
                }
            })
            $('#courseId').val(ClassRecord.seItem.courseId);
            $('#integral').val(ClassRecord.seItem.integral);
        }, function (data) {
            Feng.error("获取失败!" + data.responseJSON.message + "!");
        });
        ajax.set('type', 1);
        ajax.start();
    }
};
ClassRecord.cancellationRecord = function(i){
    if(this.check()){
        let htmlStr =
        '<div class="form-horizontal">' +
            '   <div class="col-sm-11" style="padding: 20px;">' +
            '       <div class="form-group">\n' +
            '           <label class="col-sm-2"></label>'+
            '           <label class="col-sm-8 control-label" style="text-align: left;">课程名称:' + $("#name").text() + '</label>\n' +
            '       </div>' +
            '       <div class="form-group">\n' +
            '           <label class="col-sm-2"></label>'+
            '           <label class="col-sm-8 control-label" style="text-align: left;">*上传凭证(请上传小于5张图片):</label>\n' +
            '       </div>' +
            '       <div class="form-group">\n' +
            '           <label class="col-sm-2"></label>'+
            '           <div class="col-sm-8" style="min-height: 200px;">\n' +
            '               <div id="cancelClasses"></div>' +
            '               <input type="file" id="file" style="display: none;"/>' +
            '               <button onclick="uploadImgs()" style="width: 60px;padding: 10px; color: white;background-color: #0d8ddb;border-radius: 5px;border: none;bottom: 50%;position: absolute;"> 上传 </button>' +
            '           </div>\n' +
            '       </div>' +
            '       </div>' +
            '</div>';
        layer.open({
            type: 1
            , title: '上传消课记录'
            , area: ['80%', '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 () {
                let cancelClasses = $('#cancelClasses').html();
                let deductClassHour = $('#deductClassHour').val();
                if(null == cancelClasses || '' == cancelClasses){
                    Feng.error("请上传凭证图片");
                    return
                }
                if(null == deductClassHour || '' == deductClassHour){
                    Feng.error("请输入有效的扣除课时数");
                    return
                }
                let div_array = $('#cancelClasses').find('div');
                let str = '';
                for (let i = 0; i < div_array.length; i++) {
                    let v = $($(div_array[i]).find('img')[0]).attr('src');
                    str += v + ";";
                }
                let ajax = new $ax(Feng.ctxPath + "/coursePackage/cancellationRecord", function (res) {
                    if(res.code == 200){
                        Feng.success("保存成功!");
                        layer.closeAll();
                        RegistrationRecord.table.refresh();
                    }else{
                        Feng.error(res.msg);
                    }
                }, function (data) {
                    Feng.error("保存失败!" + data.responseJSON.message + "!");
                });
                ajax.set("id", ClassRecord.seItem.id);
                ajax.set("cancelClasses", str.substring(0, str.length - 1));
                ajax.set("deductClassHour", deductClassHour);
                ajax.start();
            },
        });
        $('#file').on('change', function () {
            var formData = new FormData()  //创建一个forData
            formData.append('file', $('#file')[0].files[0]) //把file添加进去  name命名为img
            layer.load(); //上传loading
            $.ajax({
                url: Feng.ctxPath + '/mgr/uploadImg',
                data: formData,
                type: "POST",
                async: true,
                cache: false,
                contentType: false,
                processData: false,
                success: function(res) {
                    layer.closeAll('loading'); //关闭loading
                    $('#file').val('');
                    $('#cancelClasses').append('' +
                        '<div style="float: left; margin: 10px; width: 200px;">' +
                        '   <i class="fa fa-close" style="font-size:24px;color: red;position: relative;top: 10px;right: -190px" onclick="removeImg(this)"></i>' +
                        '   <div style="width: 100%;"><img src="' + res + '" style="width: 100%;"/></div>' +
                        '</div>')
                }
            })
        })
    }
}
ClassRecord.lookCancellationRecord = function(){
    if(this.check()){
        if(ClassRecord.seItem.cancelClasses == '' || ClassRecord.seItem.cancelClasses == null){
            Feng.error("请先上传消课凭证");
            return
        }
        let imgs = ClassRecord.seItem.cancelClasses.split(";");
        let htmlStr =
            '<div class="form-horizontal">' +
            '   <div class="col-sm-11" style="padding: 20px;">' +
            '       <div class="form-group">\n' +
            '           <label class="col-sm-8 control-label">课程名称:' + $("#name").text() + '</label>\n' +
            '       </div>' +
            '       <div class="form-group">\n' +
            '           <label class="col-sm-8 control-label">*上传凭证(请上传小于5张图片):</label>\n' +
            '       </div>' +
            '       <div class="form-group">\n' +
            '           <div class="col-sm-8" style="min-height: 200px;">\n' +
            '               <div id="cancelClasses">';
        for (let i = 0; i < imgs.length; i++) {
            htmlStr += '<div><img src="' + imgs[i] + '" style="height: 150px;"/></div>&nbsp;&nbsp;&nbsp;&nbsp;';
        }
        htmlStr += '</div>' +
            '           </div>\n' +
            '       </div>' +
            '       <div class="form-group">\n' +
            '           <label class="col-sm-3 control-label">扣除课时数:</label>\n' +
            '           <div class="col-sm-9">\n' +
            '               <input class="form-control" id="deductClassHour" value="' + ClassRecord.seItem.deductClassHour + '" type="number" min="0">' +
            '           </div>\n' +
            '       </div>' +
            '       </div>' +
            '</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
            , btnAlign: 'c' //按钮居中
            , shade: 0.5 //不显示遮罩
            , yes: function () {
            },
        });
    }
}
ClassRecord.manualReservation = function(){
    if(this.check()){
        let index = layer.open({
            type: 2,
            title: '手动预约',
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/coursePackage/openManualReservation?id=' + this.seItem.id
        });
        this.layerIndex = index;
    }
}
function uploadImgs(){
    let num = $('#cancelClasses>div').length;
    if(num >= 5){
        Feng.error("最多只能上传5张图片");
        return;
    }
    $('#file').click();
}
function removeImg(e){
    $(e).parent('div').remove();
}
ClassRecord.resetSearch = function () {
    ClassRecord.search();
}
ClassRecord.search = function () {
    let queryData = {};
    queryData['id'] = $('#id').val();
    ClassRecord.table.refresh({query: queryData});
}
$(function () {
    let defaultColunms = ClassRecord.initColumn();
    let table = new BSTable(ClassRecord.id, "/coursePackage/queryClassRecord", defaultColunms);
    // 设置物理分页server(逻辑分页client)
    table.setPaginationType("server");
    table.setQueryParams({
        id: $('#id').val()
    })
    ClassRecord.table = table.init();
});
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js
@@ -119,22 +119,22 @@
        Feng.error("授课教师不能为空");
        return
    }
    if(null == maxSubscribeNumber || '' == maxSubscribeNumber){
        Feng.error("最多预约人数不能为空");
        return
    }
    // if(null == maxSubscribeNumber || '' == maxSubscribeNumber){
    //     Feng.error("最多预约人数不能为空");
    //     return
    // }
    // if(null == codeTime || '' == codeTime){
    //     Feng.error("扣除课时数不能为空不能为空");
    //     return
    // }
    if(null == classStartTime || '' == classStartTime){
        Feng.error("上课时间不能为空");
        return
    }
    if(null == classWeeks || '' == classWeeks){
        Feng.error("上课时间不能为空");
        return
    }
    // if(null == classStartTime || '' == classStartTime){
    //     Feng.error("上课时间不能为空");
    //     return
    // }
    // if(null == classWeeks || '' == classWeeks){
    //     Feng.error("上课时间不能为空");
    //     return
    // }
    classWeeks = classWeeks.substring(0, classWeeks.length - 1);
    if(null == coverDrawing || '' == coverDrawing){
@@ -276,22 +276,22 @@
        Feng.error("授课教师不能为空");
        return
    }
    if(null == maxSubscribeNumber || '' == maxSubscribeNumber){
        Feng.error("最多预约人数不能为空");
        return
    }
    // if(null == maxSubscribeNumber || '' == maxSubscribeNumber){
    //     Feng.error("最多预约人数不能为空");
    //     return
    // }
    // if(null == codeTime || '' == codeTime){
    //     Feng.error("扣除课时不能为空");
    //     return
    // }
    if(null == classStartTime || '' == classStartTime){
        Feng.error("上课时间不能为空");
        return
    }
    if(null == classWeeks || '' == classWeeks){
        Feng.error("上课时间不能为空");
        return
    }
    // if(null == classStartTime || '' == classStartTime){
    //     Feng.error("上课时间不能为空");
    //     return
    // }
    // if(null == classWeeks || '' == classWeeks){
    //     Feng.error("周不能为空");
    //     return
    // }
    classWeeks = classWeeks.substring(0, classWeeks.length - 1);
    if(null == coverDrawing || '' == coverDrawing){
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js
@@ -20,25 +20,42 @@
        {title: '购课学员', field: 'studentName', align: 'center', valign: 'middle'},
        {title: '报名时间', field: 'insertTime', align: 'center', valign: 'middle'},
        {title: '总课时数', field: 'totalClassHours', align: 'center', valign: 'middle'},
        {title: '剩余课时数', field: 'laveClassHours', align: 'center', valign: 'middle',rowStyle: function(row, index) {
                // 参数说明:
                //row, 行,row.xxx,能获取某个字段的值
                //index,索引,第几行
                // 逻辑判断
                // .....
                return  {"background-color":'rgba(208,9,9,0.7)'};
        {
            title: '剩余课时数',
            field: 'laveClassHours',
            align: 'center',
            valign: 'middle',
            formatter: function (value, row) {
                if (value < 3) {
                    return '<div style="color: red;">' + value + '</div>';
                } else {
                    return value;
                }
            }
        },
        {title: '已上课时数', field: 'already', align: 'center', valign: 'middle'},
        {title: '请假次数', field: 'absencesNumber', align: 'center', valign: 'middle'},
        {title: '状态', field: 'status', align: 'center', valign: 'middle',
        {
            title: '状态',
            field: 'status',
            align: 'center',
            valign: 'middle',
            formatter: function (v) {
                switch (v) {
                    case 1:
                        return '正常';
                    case 2:
                        return '<a href="#" onclick="">已退课-查看凭证</a>';
                        return '已退课';
                    case 3:
                        return '换课中';
                    case 4:
                        return '申请退费中';
                    case 5:
                        return '已转移';
                    case 6:
                        return '已赠课';
                    default:
                        return '';
                }
            }
        }
@@ -51,8 +68,21 @@
 */
RegistrationRecord.check = function () {
    let selected = $('#' + this.id).bootstrapTable('getSelections');
    if (selected.length > 1) {
        Feng.info("只能选中表格中的一条记录!");
        return false;
    } else {
        RegistrationRecord.seItem = selected[0];
        RegistrationRecord.seItem1 = selected;
        return true;
    }
};
RegistrationRecord.check1 = function () {
    let selected = $('#' + this.id).bootstrapTable('getSelections');
    if (selected.length == 0) {
        Feng.info("请先选中表格中的某一记录!");
        Feng.info("必须选中表格中的某一记录!");
        return false;
    } else {
        RegistrationRecord.seItem = selected[0];
@@ -79,7 +109,7 @@
RegistrationRecord.holiClass = function () {
    if (this.check()) {
    if (this.check1()) {
        var ids = RegistrationRecord.seItem1.map(function(item) {
            return item.id;
        }).join(",");
@@ -215,8 +245,8 @@
RegistrationRecord.makeUpMissedLessons = function () {
    if (this.check()) {
        let operation = function(){
            let ajax = new $ax(Feng.ctxPath + "/coursePackage/makeUpMissedLessons", function () {
                Feng.success("补课成功!");
            let ajax = new $ax(Feng.ctxPath + "/coursePackage/makeUpMissedLessons", function (data) {
                Feng.success(data.msg);
                RegistrationRecord.table.refresh();
            }, function (data) {
                Feng.error("补课失败!" + data.responseJSON.message + "!");
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord2.js
@@ -72,7 +72,7 @@
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/coursePackage/openClassRecord?id=' + $('#id').val()
        content: Feng.ctxPath + '/coursePackage/openClassRecord1?id=' + $('#id').val()
    });
    this.layerIndex = index;
};