学习培训/我的学习
This commit is contained in:
parent
3e098ff77d
commit
907fb39097
@ -0,0 +1,35 @@
|
||||
package com.xinelu.common.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Description 观看视频类型枚举
|
||||
* @Author ljh
|
||||
* @Date 2023-02-27 14:22:22
|
||||
* @Version 1.0
|
||||
*/
|
||||
|
||||
@Getter
|
||||
public enum ItemDirectoryWatchStatusEnum {
|
||||
/**
|
||||
* 未观看
|
||||
*/
|
||||
NOT_WATCHED("NOT_WATCHED"),
|
||||
|
||||
/**
|
||||
* 已观看
|
||||
*/
|
||||
WATCHED("WATCHED"),
|
||||
|
||||
/**
|
||||
* 已看完
|
||||
*/
|
||||
FINISHED_READING("FINISHED_READING"),
|
||||
;
|
||||
|
||||
final private String info;
|
||||
|
||||
ItemDirectoryWatchStatusEnum(String info) {
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
package com.xinelu.common.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 学习培训订单支付渠道枚举
|
||||
*
|
||||
* @author ljh
|
||||
* @version 1.0
|
||||
* Create by 2023/4/20 17:28
|
||||
*/
|
||||
@Getter
|
||||
public enum TrainingOrderChannelEnum {
|
||||
|
||||
/**
|
||||
* 手机App
|
||||
*/
|
||||
MOBILE_APP("MOBILE_APP"),
|
||||
|
||||
/**
|
||||
* 微信小程序
|
||||
*/
|
||||
WECHAT_APPLET("WECHAT_APPLET"),
|
||||
|
||||
/**
|
||||
* 支付宝小程序
|
||||
*/
|
||||
ALI_PAY_APPLE("ALI_PAY_APPLE"),
|
||||
;
|
||||
|
||||
final private String info;
|
||||
|
||||
TrainingOrderChannelEnum(String info) {
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,45 @@
|
||||
package com.xinelu.common.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Description 学习培训订单状态枚举
|
||||
* @Author ljh
|
||||
* @Date 2022-10-19 09:15:38
|
||||
* @Version 1.0
|
||||
*/
|
||||
|
||||
@Getter
|
||||
public enum TrainingOrderStatusEnum {
|
||||
|
||||
/**
|
||||
* 待付款
|
||||
*/
|
||||
WAIT_PAY("WAIT_PAY"),
|
||||
|
||||
/**
|
||||
* 已付款
|
||||
*/
|
||||
PAY("PAY"),
|
||||
|
||||
/**
|
||||
* 已取消
|
||||
*/
|
||||
CANCEL("CANCEL"),
|
||||
|
||||
/**
|
||||
* 退款中
|
||||
*/
|
||||
WAIT_REFUND("WAIT_REFUND"),
|
||||
|
||||
/**
|
||||
* 已退款
|
||||
*/
|
||||
REFUNDED("REFUNDED"),
|
||||
;
|
||||
final private String info;
|
||||
|
||||
TrainingOrderStatusEnum(String info) {
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,198 @@
|
||||
package com.xinelu.applet.controller.nurseappletpersontraining;
|
||||
|
||||
import com.xinelu.applet.service.nurseappletpersontraining.NurseAppletPersonTrainingService;
|
||||
import com.xinelu.common.annotation.MobileRequestAuthorization;
|
||||
import com.xinelu.common.annotation.RepeatSubmit;
|
||||
import com.xinelu.common.core.controller.BaseController;
|
||||
import com.xinelu.common.core.domain.AjaxResult;
|
||||
import com.xinelu.common.core.page.TableDataInfo;
|
||||
import com.xinelu.common.custominterface.Insert;
|
||||
import com.xinelu.manage.domain.trainingitemwatchrecord.TrainingItemWatchRecord;
|
||||
import com.xinelu.manage.dto.trainingitem.NurseAppletPersonTrainingItemDTO;
|
||||
import com.xinelu.manage.dto.trainingitem.TrainingItemDTO;
|
||||
import com.xinelu.manage.dto.trainingitemwatchrecord.TrainingItemWatchRecordDTO;
|
||||
import com.xinelu.manage.dto.trainingorder.NurseAppletPersonTrainingItemOrderDTO;
|
||||
import com.xinelu.manage.vo.trainingitem.TrainingItemVO;
|
||||
import com.xinelu.manage.vo.trainingorderdetails.NurseAppletPersonTrainingOrderDetailsVO;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 护理员学习培训控制器
|
||||
*
|
||||
* @author ljh
|
||||
* @version 1.0
|
||||
* Create by 2023/4/21 8:56
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/nurseApplet/personLearn")
|
||||
public class NurseAppletPersonTrainingController extends BaseController {
|
||||
@Resource
|
||||
private NurseAppletPersonTrainingService nurseAppletPersonTrainingService;
|
||||
|
||||
/**
|
||||
* 学习培训-查询学习培训课程组信息(App和小程序共用)
|
||||
*
|
||||
* @param trainingItem 学习培训项目组
|
||||
* @return com.xinyilu.common.core.page.TableDataInfo
|
||||
**/
|
||||
@MobileRequestAuthorization
|
||||
@GetMapping("/getTrainingItemGroupInfo")
|
||||
public TableDataInfo getTrainingItemGroupInfo(TrainingItemDTO trainingItem) {
|
||||
startPage();
|
||||
List<TrainingItemVO> trainingItemList = nurseAppletPersonTrainingService.getTrainingItemGroupInfo(trainingItem);
|
||||
return getDataTable(trainingItemList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 学习培训-查询查询学习培训课程下属视频和图文信息(App和小程序共用)
|
||||
*
|
||||
* @param trainingItem 学习培训项目
|
||||
* @return com.xinyilu.common.core.page.TableDataInfo
|
||||
**/
|
||||
@MobileRequestAuthorization
|
||||
@GetMapping("/getTrainingVideoAndContentList")
|
||||
public AjaxResult getTrainingVideoAndContentList(TrainingItemDTO trainingItem) {
|
||||
if (Objects.isNull(trainingItem) || Objects.isNull(trainingItem.getTrainingParentId())) {
|
||||
return AjaxResult.error("学习培训课程信息不存在!");
|
||||
}
|
||||
return nurseAppletPersonTrainingService.getTrainingVideoAndContentList(trainingItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* 学习培训-查询学习培训课程详情信息(App和小程序共用)
|
||||
*
|
||||
* @param trainingItem 学习培训项目
|
||||
* @return com.xinyilu.common.core.page.TableDataInfo
|
||||
**/
|
||||
@MobileRequestAuthorization
|
||||
@GetMapping("/getTrainingItemDetailsInfo")
|
||||
public AjaxResult getTrainingItemDetailsInfo(NurseAppletPersonTrainingItemDTO trainingItem) {
|
||||
if (Objects.isNull(trainingItem) || Objects.isNull(trainingItem.getTrainingItemId())) {
|
||||
return AjaxResult.error("课程详情信息不存在!");
|
||||
}
|
||||
if (Objects.isNull(trainingItem.getNurseStationPersonId())) {
|
||||
return AjaxResult.error("护理人员id不能为空!");
|
||||
}
|
||||
return nurseAppletPersonTrainingService.getTrainingItemDetailsInfo(trainingItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* 学习培训-下单方法(App和小程序共用)
|
||||
*
|
||||
* @param trainingItemOrderDTO 培训订单
|
||||
* @return com.xinyilu.common.core.domain.AjaxResult
|
||||
**/
|
||||
@MobileRequestAuthorization
|
||||
@RepeatSubmit
|
||||
@PostMapping("/buyTrainingItemOrder")
|
||||
public AjaxResult buyTrainingItemOrder(@RequestBody @Validated(Insert.class) NurseAppletPersonTrainingItemOrderDTO trainingItemOrderDTO) {
|
||||
return nurseAppletPersonTrainingService.buyTrainingItemOrder(trainingItemOrderDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 我的学习-查询学习培训项目订单集合组
|
||||
*
|
||||
* @param trainingItem 学习培训项目
|
||||
* @return java.util.List<com.xinyilu.base.vo.trainingitem.NurseAppletPersonTrainingItemVO>
|
||||
**/
|
||||
@MobileRequestAuthorization
|
||||
@GetMapping("/selectTrainingOrderItemGroupList")
|
||||
public TableDataInfo selectTrainingOrderItemGroupList(NurseAppletPersonTrainingItemDTO trainingItem) {
|
||||
startPage();
|
||||
List<NurseAppletPersonTrainingOrderDetailsVO> getTrainingOrderItemGroupList = nurseAppletPersonTrainingService.selectTrainingOrderItemGroupList(trainingItem);
|
||||
return getDataTable(getTrainingOrderItemGroupList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 我的学习-查询学习培训项目订单集合
|
||||
*
|
||||
* @param trainingItem 学习培训项目
|
||||
* @return java.util.List<com.xinyilu.base.vo.trainingitem.NurseAppletPersonTrainingItemVO>
|
||||
**/
|
||||
@MobileRequestAuthorization
|
||||
@GetMapping("/selectTrainingOrderItemList")
|
||||
public AjaxResult selectTrainingOrderItemList(NurseAppletPersonTrainingItemDTO trainingItem) {
|
||||
if (Objects.isNull(trainingItem) || Objects.isNull(trainingItem.getTrainingParentId()) || Objects.isNull(trainingItem.getTrainingOrderNo())) {
|
||||
return AjaxResult.error("当前培训学习课程订单信息不存在,请联系管理员!");
|
||||
}
|
||||
if (Objects.isNull(trainingItem.getNurseStationPersonId())) {
|
||||
return AjaxResult.error("当前护理人员信息不存在,请联系管理员!");
|
||||
}
|
||||
return nurseAppletPersonTrainingService.selectTrainingOrderItemList(trainingItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* 我的学习-查询已购买学习培训项目详情
|
||||
*
|
||||
* @param trainingItem 学习培训项目
|
||||
* @return com.xinyilu.common.core.page.TableDataInfo
|
||||
**/
|
||||
@MobileRequestAuthorization
|
||||
@GetMapping("/selectTrainingOrderVideoDetails")
|
||||
public AjaxResult selectTrainingOrderVideoDetails(NurseAppletPersonTrainingItemDTO trainingItem) {
|
||||
if (Objects.isNull(trainingItem) || Objects.isNull(trainingItem.getTrainingItemId())) {
|
||||
return AjaxResult.error("当前培训学习课程订单信息不存在,请联系管理员!");
|
||||
}
|
||||
if (StringUtils.isBlank(trainingItem.getTrainingOrderNo())) {
|
||||
return AjaxResult.error("当前培训学习课程订单信息不存在,请联系管理员!");
|
||||
}
|
||||
return nurseAppletPersonTrainingService.selectTrainingOrderVideoDetails(trainingItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询学习培训课程观看时间点记录信息(观看视频用,App和小程序共用)
|
||||
*
|
||||
* @param trainingItemWatchRecord 学习培训项目观看时间点记录信息
|
||||
* @return com.xinyilu.common.core.domain.AjaxResult
|
||||
**/
|
||||
@MobileRequestAuthorization
|
||||
@GetMapping("/getTrainingItemWatchRecord")
|
||||
public AjaxResult getTrainingItemWatchRecord(TrainingItemWatchRecord trainingItemWatchRecord) {
|
||||
if (Objects.isNull(trainingItemWatchRecord) || Objects.isNull(trainingItemWatchRecord.getTrainingItemId()) || Objects.isNull(trainingItemWatchRecord.getTrainingItemDirectoryId())) {
|
||||
return AjaxResult.error("当前课程信息不出在,无法观看!");
|
||||
}
|
||||
if (Objects.isNull(trainingItemWatchRecord.getTrainingOrderId())) {
|
||||
return AjaxResult.error("当前课程暂未购买,请先进行购买,无法观看!");
|
||||
}
|
||||
if (Objects.isNull(trainingItemWatchRecord.getNurseStationPersonId())) {
|
||||
return AjaxResult.error("当前护理人员信息不存在,无法观看!");
|
||||
}
|
||||
return nurseAppletPersonTrainingService.getTrainingWatchRecord(trainingItemWatchRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增修改学习培训课程观看时间点记录信息(退出视频用,App和小程序共用)
|
||||
*
|
||||
* @param trainingItemWatchRecord 学习培训项目观看时间点记录信息
|
||||
* @return com.xinyilu.common.core.domain.AjaxResult
|
||||
**/
|
||||
@MobileRequestAuthorization
|
||||
@PostMapping("/insertTrainingItemWatchRecord")
|
||||
public AjaxResult insertTrainingItemWatchRecord(@RequestBody @Validated(Insert.class) TrainingItemWatchRecordDTO trainingItemWatchRecord) {
|
||||
if (Objects.isNull(trainingItemWatchRecord.getWatchTime()) || Objects.isNull(trainingItemWatchRecord.getItemDirectoryVideoDuration())) {
|
||||
return AjaxResult.error("当前视频播放时长有误,无法播放,请联系管理员!");
|
||||
}
|
||||
return nurseAppletPersonTrainingService.insertTrainingWatchRecord(trainingItemWatchRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询待支付的订单详情信息
|
||||
*
|
||||
* @param trainingOrderNo 学习培训订单编号
|
||||
* @return 详情信息
|
||||
*/
|
||||
@MobileRequestAuthorization
|
||||
@GetMapping("/getWaitPayTrainingOrderDetails")
|
||||
public AjaxResult getWaitPayTrainingOrderDetails(String trainingOrderNo) {
|
||||
if (StringUtils.isBlank(trainingOrderNo)) {
|
||||
return AjaxResult.error("当前订单信息不存在,请联系管理员!");
|
||||
}
|
||||
return nurseAppletPersonTrainingService.getWaitPayTrainingOrderDetails(trainingOrderNo);
|
||||
}
|
||||
}
|
||||
@ -144,4 +144,48 @@ public class WeChatPaymentController extends BaseController {
|
||||
public AjaxResult closeHealthConsultationOrder(@Validated(Insert.class) @RequestBody CloseOrderDTO closeOrderDTO) {
|
||||
return weChatRefundService.closeHealthConsultationOrder(closeOrderDTO);
|
||||
}
|
||||
/**
|
||||
* 泉医助手小程序-学习培训微信支付
|
||||
*
|
||||
* @param paymentDTO 支付参数
|
||||
* @return 支付结果
|
||||
* @throws Exception 异常信息
|
||||
*/
|
||||
@MobileRequestAuthorization
|
||||
@PostMapping("/appletTrainingOrderPay")
|
||||
public AjaxResult appletTrainingOrderPay(@RequestBody PaymentDTO paymentDTO) throws Exception {
|
||||
AjaxResult ajaxResult = judgeTrainingOrderPayParam(paymentDTO);
|
||||
if (Objects.nonNull(ajaxResult)) {
|
||||
return ajaxResult;
|
||||
}
|
||||
return weChatPaymentService.appletTrainingOrderPay(paymentDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 手动校验学习培训微信支付参数校验
|
||||
*
|
||||
* @param paymentDTO 支付参数
|
||||
* @return 校验结果
|
||||
*/
|
||||
private AjaxResult judgeTrainingOrderPayParam(PaymentDTO paymentDTO) {
|
||||
if (Objects.isNull(paymentDTO)) {
|
||||
return AjaxResult.error("当前订单信息不存在,无法支付!");
|
||||
}
|
||||
if (Objects.isNull(paymentDTO.getNurseStationPersonId()) || StringUtils.isBlank(paymentDTO.getOpenid())) {
|
||||
return AjaxResult.error("当前护理员信息不存在,无法支付!");
|
||||
}
|
||||
if (StringUtils.isBlank(paymentDTO.getOrderNo())) {
|
||||
return AjaxResult.error("当前订单信息不存在,无法支付!");
|
||||
}
|
||||
if (StringUtils.isBlank(paymentDTO.getOrderChannel())) {
|
||||
return AjaxResult.error("当前支付方式非小程序支付,无法支付!");
|
||||
}
|
||||
if (StringUtils.isBlank(paymentDTO.getBuySource())) {
|
||||
return AjaxResult.error("订单购买来源不能为空,无法支付!");
|
||||
}
|
||||
if (Objects.isNull(paymentDTO.getPaymentPrice()) || paymentDTO.getPaymentPrice().compareTo(BigDecimal.ZERO) <= 0) {
|
||||
return AjaxResult.error("订单支付金额应大于零,无法支付!");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,78 @@
|
||||
package com.xinelu.applet.mapper.trainingitemwatchrecord;
|
||||
|
||||
|
||||
import com.xinelu.manage.domain.trainingitemwatchrecord.TrainingItemWatchRecord;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 学习培训项目观看时间点记录Mapper接口
|
||||
*
|
||||
* @author xinyilu
|
||||
* @date 2023-04-20
|
||||
*/
|
||||
public interface TrainingItemWatchRecordMapper {
|
||||
/**
|
||||
* 查询学习培训项目观看时间点记录
|
||||
*
|
||||
* @param id 学习培训项目观看时间点记录主键
|
||||
* @return 学习培训项目观看时间点记录
|
||||
*/
|
||||
TrainingItemWatchRecord selectTrainingItemWatchRecordById(Long id);
|
||||
|
||||
/**
|
||||
* 查询学习培训项目观看时间点记录列表
|
||||
*
|
||||
* @param trainingItemWatchRecord 学习培训项目观看时间点记录
|
||||
* @return 学习培训项目观看时间点记录集合
|
||||
*/
|
||||
List<TrainingItemWatchRecord> selectTrainingItemWatchRecordList(TrainingItemWatchRecord trainingItemWatchRecord);
|
||||
|
||||
/**
|
||||
* 新增学习培训项目观看时间点记录
|
||||
*
|
||||
* @param trainingItemWatchRecord 学习培训项目观看时间点记录
|
||||
* @return 结果
|
||||
*/
|
||||
int insertTrainingItemWatchRecord(TrainingItemWatchRecord trainingItemWatchRecord);
|
||||
|
||||
/**
|
||||
* 修改学习培训项目观看时间点记录
|
||||
*
|
||||
* @param trainingItemWatchRecord 学习培训项目观看时间点记录
|
||||
* @return 结果
|
||||
*/
|
||||
int updateTrainingItemWatchRecord(TrainingItemWatchRecord trainingItemWatchRecord);
|
||||
|
||||
/**
|
||||
* 删除学习培训项目观看时间点记录
|
||||
*
|
||||
* @param id 学习培训项目观看时间点记录主键
|
||||
* @return 结果
|
||||
*/
|
||||
int deleteTrainingItemWatchRecordById(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除学习培训项目观看时间点记录
|
||||
*
|
||||
* @param ids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
int deleteTrainingItemWatchRecordByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 查询护理员已下单学习培训项目观看时间点记录
|
||||
*
|
||||
* @param trainingItemWatchRecord 学习培训项目观看时间点记录信息
|
||||
* @return com.xinyilu.base.domain.trainingitemwatchrecord.TrainingItemWatchRecord
|
||||
**/
|
||||
TrainingItemWatchRecord getTrainingItemWatchRecordById(TrainingItemWatchRecord trainingItemWatchRecord);
|
||||
|
||||
/**
|
||||
* 批量新增学习培训项目观看时间点记录
|
||||
*
|
||||
* @param trainingItemWatchRecordList 学习培训项目观看时间点记录
|
||||
* @return int
|
||||
**/
|
||||
int insertTrainingItemWatchRecordList(List<TrainingItemWatchRecord> trainingItemWatchRecordList);
|
||||
}
|
||||
@ -0,0 +1,108 @@
|
||||
package com.xinelu.applet.mapper.trainingorderdetails;
|
||||
|
||||
|
||||
import com.xinelu.manage.domain.trainingorderdetails.TrainingOrderDetails;
|
||||
import com.xinelu.manage.vo.trainingorderdetails.TrainingDetailsByOrderVO;
|
||||
import com.xinelu.manage.vo.trainingorderdetails.WaitPayTrainingOrderDetailsVO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 学习培训订单明细Mapper接口
|
||||
*
|
||||
* @author xinyilu
|
||||
* @date 2023-04-20
|
||||
*/
|
||||
public interface TrainingOrderDetailsMapper {
|
||||
/**
|
||||
* 查询学习培训订单明细
|
||||
*
|
||||
* @param id 学习培训订单明细主键
|
||||
* @return 学习培训订单明细
|
||||
*/
|
||||
TrainingOrderDetails selectTrainingOrderDetailsById(Long id);
|
||||
|
||||
/**
|
||||
* 查询学习培训订单明细列表
|
||||
*
|
||||
* @param trainingOrderDetails 学习培训订单明细
|
||||
* @return 学习培训订单明细集合
|
||||
*/
|
||||
List<TrainingOrderDetails> selectTrainingOrderDetailsList(TrainingOrderDetails trainingOrderDetails);
|
||||
|
||||
/**
|
||||
* 新增学习培训订单明细
|
||||
*
|
||||
* @param trainingOrderDetails 学习培训订单明细
|
||||
* @return 结果
|
||||
*/
|
||||
int insertTrainingOrderDetails(TrainingOrderDetails trainingOrderDetails);
|
||||
|
||||
/**
|
||||
* 修改学习培训订单明细
|
||||
*
|
||||
* @param trainingOrderDetails 学习培训订单明细
|
||||
* @return 结果
|
||||
*/
|
||||
int updateTrainingOrderDetails(TrainingOrderDetails trainingOrderDetails);
|
||||
|
||||
/**
|
||||
* 删除学习培训订单明细
|
||||
*
|
||||
* @param id 学习培训订单明细主键
|
||||
* @return 结果
|
||||
*/
|
||||
int deleteTrainingOrderDetailsById(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除学习培训订单明细
|
||||
*
|
||||
* @param ids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
int deleteTrainingOrderDetailsByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 批量新增学习培训订单明细
|
||||
*
|
||||
* @param trainingOrderDetailsList 学习培训订单明细
|
||||
* @return int
|
||||
**/
|
||||
int insertTrainingOrderDetailsList(List<TrainingOrderDetails> trainingOrderDetailsList);
|
||||
|
||||
/**
|
||||
* 查询学习培训订单明细列表数量
|
||||
*
|
||||
* @param trainingItemId 学习培训订单明细
|
||||
* @return int
|
||||
**/
|
||||
int selectTrainingOrderDetailsByIdCount(Long trainingItemId);
|
||||
|
||||
/**
|
||||
* 根据trainingOrderId查询订单编号
|
||||
*
|
||||
* @param trainingOrderId 订单id
|
||||
* @return com.xinyilu.base.vo.trainingorderdetails.TrainingDetailsByOrderVO
|
||||
**/
|
||||
TrainingDetailsByOrderVO selectTrainingOrderDetailsByOrderId(Long trainingOrderId);
|
||||
|
||||
/**
|
||||
* 查询当前护理员培训课程包的购买信息
|
||||
*
|
||||
* @param trainingItemId 培训课程表id
|
||||
* @param nurseStationPersonId 护理员id
|
||||
* @param trainingOrderStatusList 订单状态集合
|
||||
* @return 结果
|
||||
*/
|
||||
int getBuyTrainingOrderInfo(@Param("trainingItemId") Long trainingItemId, @Param("nurseStationPersonId") Long nurseStationPersonId, @Param("trainingOrderStatusList") List<String> trainingOrderStatusList);
|
||||
|
||||
/**
|
||||
* 根据订单编号查询待支付的订单详情信息
|
||||
*
|
||||
* @param trainingOrderNo 学习培训订单编号
|
||||
* @param trainingOrderStatus 学习培训订单状态
|
||||
* @return 学习培训订单详情信息
|
||||
*/
|
||||
WaitPayTrainingOrderDetailsVO getWaitPayTrainingOrderDetailsInfo(@Param("trainingOrderNo") String trainingOrderNo, @Param("trainingOrderStatus") String trainingOrderStatus);
|
||||
}
|
||||
@ -0,0 +1,103 @@
|
||||
package com.xinelu.applet.service.nurseappletpersontraining;
|
||||
|
||||
|
||||
import com.xinelu.common.core.domain.AjaxResult;
|
||||
import com.xinelu.manage.domain.trainingitemwatchrecord.TrainingItemWatchRecord;
|
||||
import com.xinelu.manage.dto.trainingitem.NurseAppletPersonTrainingItemDTO;
|
||||
import com.xinelu.manage.dto.trainingitem.TrainingItemDTO;
|
||||
import com.xinelu.manage.dto.trainingitemwatchrecord.TrainingItemWatchRecordDTO;
|
||||
import com.xinelu.manage.dto.trainingorder.NurseAppletPersonTrainingItemOrderDTO;
|
||||
import com.xinelu.manage.vo.trainingitem.TrainingItemVO;
|
||||
import com.xinelu.manage.vo.trainingorderdetails.NurseAppletPersonTrainingOrderDetailsVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 护理员学习培训
|
||||
*
|
||||
* @author ljh
|
||||
* @version 1.0
|
||||
* Create by 2023/4/21 9:01
|
||||
*/
|
||||
public interface NurseAppletPersonTrainingService {
|
||||
/**
|
||||
* 学习培训-查询学习培训课程组信息
|
||||
*
|
||||
* @param trainingItem 学习培训项目以及详情
|
||||
* @return com.xinyilu.common.core.domain.AjaxResult
|
||||
**/
|
||||
List<TrainingItemVO> getTrainingItemGroupInfo(TrainingItemDTO trainingItem);
|
||||
|
||||
/**
|
||||
* 学习培训-查询查询学习培训课程下属视频和图文信息
|
||||
*
|
||||
* @param trainingItem 学习培训项目信息
|
||||
* @return 学习培训项目信息集合
|
||||
*/
|
||||
AjaxResult getTrainingVideoAndContentList(TrainingItemDTO trainingItem);
|
||||
|
||||
/**
|
||||
* 学习培训-查询学习培训课程详情信息
|
||||
*
|
||||
* @param trainingItem 学习培训项目信息
|
||||
* @return 学习培训项目信息集合
|
||||
*/
|
||||
AjaxResult getTrainingItemDetailsInfo(NurseAppletPersonTrainingItemDTO trainingItem);
|
||||
|
||||
/**
|
||||
* 学习培训-下单方法(App和小程序共用)
|
||||
*
|
||||
* @param trainingItemOrderDTO 培训订单
|
||||
* @return com.xinyilu.common.core.domain.AjaxResult
|
||||
**/
|
||||
AjaxResult buyTrainingItemOrder(NurseAppletPersonTrainingItemOrderDTO trainingItemOrderDTO);
|
||||
|
||||
/**
|
||||
* 我的学习-查询学习培训项目订单集合组
|
||||
*
|
||||
* @param trainingItem 学习培训项目
|
||||
* @return java.util.List<com.xinyilu.base.vo.trainingitem.NurseAppletPersonTrainingItemVO>
|
||||
**/
|
||||
List<NurseAppletPersonTrainingOrderDetailsVO> selectTrainingOrderItemGroupList(NurseAppletPersonTrainingItemDTO trainingItem);
|
||||
|
||||
/**
|
||||
* 我的学习-查询学习培训项目订单集合
|
||||
*
|
||||
* @param trainingItem 学习培训项目
|
||||
* @return java.util.List<com.xinyilu.base.vo.trainingitem.NurseAppletPersonTrainingItemVO>
|
||||
**/
|
||||
AjaxResult selectTrainingOrderItemList(NurseAppletPersonTrainingItemDTO trainingItem);
|
||||
|
||||
/**
|
||||
* 我的学习-查询已购买学习培训项目详情
|
||||
*
|
||||
* @param trainingItem 学习培训项目信息
|
||||
* @return 学习培训项目信息集合
|
||||
*/
|
||||
AjaxResult selectTrainingOrderVideoDetails(NurseAppletPersonTrainingItemDTO trainingItem);
|
||||
|
||||
/**
|
||||
* 查询学习培训课程观看时间点记录信息(观看视频用,App和小程序共用)
|
||||
*
|
||||
* @param trainingItemWatchRecord 学习培训项目观看时间点记录信息
|
||||
* @return java.util.List<com.xinyilu.base.domain.trainingcategory.TrainingCategory>
|
||||
**/
|
||||
AjaxResult getTrainingWatchRecord(TrainingItemWatchRecord trainingItemWatchRecord);
|
||||
|
||||
/**
|
||||
* 新增修改学习培训课程观看时间点记录信息(退出视频用,App和小程序共用)
|
||||
*
|
||||
* @param trainingItemWatchRecord 学习培训项目观看时间点记录信息
|
||||
* @return java.util.List<com.xinyilu.base.domain.trainingcategory.TrainingCategory>
|
||||
**/
|
||||
AjaxResult insertTrainingWatchRecord(TrainingItemWatchRecordDTO trainingItemWatchRecord);
|
||||
|
||||
/**
|
||||
* 查询待支付的订单详情信息
|
||||
*
|
||||
* @param trainingOrderNo 学习培训订单编号
|
||||
* @return 详情信息
|
||||
*/
|
||||
AjaxResult getWaitPayTrainingOrderDetails(String trainingOrderNo);
|
||||
|
||||
}
|
||||
@ -0,0 +1,383 @@
|
||||
package com.xinelu.applet.service.nurseappletpersontraining.impl;
|
||||
|
||||
|
||||
import com.xinelu.applet.mapper.trainingitemwatchrecord.TrainingItemWatchRecordMapper;
|
||||
import com.xinelu.applet.mapper.trainingorderdetails.TrainingOrderDetailsMapper;
|
||||
import com.xinelu.applet.service.nurseappletpersontraining.NurseAppletPersonTrainingService;
|
||||
import com.xinelu.common.constant.Constants;
|
||||
import com.xinelu.common.core.domain.AjaxResult;
|
||||
import com.xinelu.common.enums.*;
|
||||
import com.xinelu.common.exception.ServiceException;
|
||||
import com.xinelu.common.utils.StringUtils;
|
||||
import com.xinelu.common.utils.bean.BeanUtils;
|
||||
import com.xinelu.manage.domain.trainingitemplayrecord.TrainingItemPlayRecord;
|
||||
import com.xinelu.manage.domain.trainingitemwatchrecord.TrainingItemWatchRecord;
|
||||
import com.xinelu.manage.domain.trainingorder.TrainingOrder;
|
||||
import com.xinelu.manage.domain.trainingorderdetails.TrainingOrderDetails;
|
||||
import com.xinelu.manage.domain.trainingorderitemdirectory.TrainingOrderItemDirectory;
|
||||
import com.xinelu.manage.dto.trainingitem.NurseAppletPersonTrainingItemDTO;
|
||||
import com.xinelu.manage.dto.trainingitem.TrainingItemDTO;
|
||||
import com.xinelu.manage.dto.trainingitemwatchrecord.TrainingItemWatchRecordDTO;
|
||||
import com.xinelu.manage.dto.trainingorder.NurseAppletPersonTrainingItemOrderDTO;
|
||||
import com.xinelu.manage.mapper.information.InformationMapper;
|
||||
import com.xinelu.manage.mapper.trainingitem.TrainingItemMapper;
|
||||
import com.xinelu.manage.mapper.trainingitemplayrecord.TrainingItemPlayRecordMapper;
|
||||
import com.xinelu.manage.mapper.trainingorder.TrainingOrderMapper;
|
||||
import com.xinelu.manage.mapper.trainingorderitemdirectory.TrainingOrderItemDirectoryMapper;
|
||||
import com.xinelu.manage.vo.trainingitem.NurseAppletPersonTrainingItemVO;
|
||||
import com.xinelu.manage.vo.trainingitem.TrainingItemVO;
|
||||
import com.xinelu.manage.vo.trainingitemdirectory.TrainingItemDirectoryVO;
|
||||
import com.xinelu.manage.vo.trainingorderdetails.NurseAppletPersonTrainingOrderDetailsVO;
|
||||
import com.xinelu.manage.vo.trainingorderdetails.TrainingDetailsByOrderVO;
|
||||
import com.xinelu.manage.vo.trainingorderitemdirectory.TrainingOrderItemDirectoryInfoVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.compress.utils.Lists;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 护理员学习培训
|
||||
*
|
||||
* @author ljh
|
||||
* @version 1.0
|
||||
* Create by 2023/4/21 9:01
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class NurseAppletPersonTrainingServiceImpl implements NurseAppletPersonTrainingService {
|
||||
@Resource
|
||||
private TrainingItemMapper trainingItemMapper;
|
||||
@Resource
|
||||
private TrainingOrderMapper trainingOrderMapper;
|
||||
@Resource
|
||||
private TrainingOrderDetailsMapper trainingOrderDetailsMapper;
|
||||
@Resource
|
||||
private TrainingOrderItemDirectoryMapper trainingOrderItemDirectoryMapper;
|
||||
@Resource
|
||||
private TrainingItemWatchRecordMapper trainingItemWatchRecordMapper;
|
||||
@Resource
|
||||
private InformationMapper informationMapper;
|
||||
@Resource
|
||||
private TrainingItemPlayRecordMapper trainingItemPlayRecordMapper;
|
||||
|
||||
/**
|
||||
* 不能购买标识
|
||||
*/
|
||||
private static final Integer NOT_BUY_FLAG = 1;
|
||||
|
||||
/**
|
||||
* 学习培训-查询学习培训课程组信息
|
||||
*
|
||||
* @param trainingItem 学习培训项目信息
|
||||
* @return 学习培训项目信息集合
|
||||
*/
|
||||
@Override
|
||||
public List<TrainingItemVO> getTrainingItemGroupInfo(TrainingItemDTO trainingItem) {
|
||||
if (Objects.isNull(trainingItem) || Objects.isNull(trainingItem.getNurseStationPersonId())) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
trainingItem.setTrainingParentId(Constants.TRAINING_PARENT_ID);
|
||||
trainingItem.setTrainingShelfFlag(TrainingShelfFlagEnum.SHEL.getInfo());
|
||||
trainingItem.setTrainingOrderStatus(TrainingOrderStatusEnum.PAY.getInfo());
|
||||
trainingItem.setTrainingItemType(TrainingItemTypeEnum.GRAPHIC_LEARNING.getInfo());
|
||||
return trainingItemMapper.getTrainingItemList(trainingItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* 学习培训-查询查询学习培训课程下属视频和图文信息
|
||||
*
|
||||
* @param trainingItem 学习培训项目信息
|
||||
* @return 学习培训项目信息集合
|
||||
*/
|
||||
@Override
|
||||
public AjaxResult getTrainingVideoAndContentList(TrainingItemDTO trainingItem) {
|
||||
trainingItem.setTrainingOrderStatus(TrainingOrderStatusEnum.PAY.getInfo());
|
||||
return AjaxResult.success(trainingItemMapper.getTrainingItemList(trainingItem));
|
||||
}
|
||||
|
||||
/**
|
||||
* 学习培训-查询学习培训课程详情信息
|
||||
*
|
||||
* @param trainingItem 学习培训项目信息
|
||||
* @return 学习培训项目信息集合
|
||||
*/
|
||||
@Override
|
||||
public AjaxResult getTrainingItemDetailsInfo(NurseAppletPersonTrainingItemDTO trainingItem) {
|
||||
trainingItem.setTrainingOrderStatus(TrainingOrderStatusEnum.PAY.getInfo());
|
||||
NurseAppletPersonTrainingItemVO nurseAppletPersonTrainingItemVO = trainingItemMapper.selectTrainingLearnItemDetailsList(trainingItem);
|
||||
if ((Objects.isNull(nurseAppletPersonTrainingItemVO))) {
|
||||
return AjaxResult.success();
|
||||
}
|
||||
if (CollectionUtils.isEmpty(nurseAppletPersonTrainingItemVO.getTrainingItemDirectoryList())) {
|
||||
return AjaxResult.success(nurseAppletPersonTrainingItemVO);
|
||||
}
|
||||
//查询订单表中的数据
|
||||
List<TrainingItemDirectoryVO> trainingItemDirectoryList = nurseAppletPersonTrainingItemVO.getTrainingItemDirectoryList();
|
||||
List<Long> trainingItemDirectoryIdList = trainingItemDirectoryList.stream().filter(Objects::nonNull).filter(training -> Objects.nonNull(training.getTrainingItemDirectoryId())).map(TrainingItemDirectoryVO::getTrainingItemDirectoryId).collect(Collectors.toList());
|
||||
List<TrainingOrderItemDirectoryInfoVO> trainingOrderItemDirectoryList = trainingOrderItemDirectoryMapper.getTrainingOrderItemDirectoryList(trainingItem.getNurseStationPersonId(), nurseAppletPersonTrainingItemVO.getTrainingItemId(), trainingItemDirectoryIdList, TrainingOrderStatusEnum.PAY.getInfo());
|
||||
if (CollectionUtils.isEmpty(trainingOrderItemDirectoryList)) {
|
||||
return AjaxResult.success(nurseAppletPersonTrainingItemVO);
|
||||
}
|
||||
Map<Long, TrainingOrderItemDirectoryInfoVO> trainingMap = trainingOrderItemDirectoryList.stream().filter(Objects::nonNull).filter(training -> (Objects.nonNull(training.getTrainingItemDirectoryId()))).collect(Collectors.toMap(TrainingOrderItemDirectoryInfoVO::getTrainingItemDirectoryId, item -> item));
|
||||
for (TrainingItemDirectoryVO trainingItemDirectoryVO : trainingItemDirectoryList) {
|
||||
if (Objects.isNull(trainingItemDirectoryVO) || Objects.isNull(trainingItemDirectoryVO.getTrainingItemDirectoryId())) {
|
||||
continue;
|
||||
}
|
||||
TrainingOrderItemDirectoryInfoVO directory = trainingMap.getOrDefault(trainingItemDirectoryVO.getTrainingItemDirectoryId(), null);
|
||||
if (Objects.isNull(directory)) {
|
||||
continue;
|
||||
}
|
||||
trainingItemDirectoryVO.setNurseStationId(Objects.isNull(directory.getNurseStationId()) ? null : directory.getNurseStationId());
|
||||
trainingItemDirectoryVO.setNurseStationPersonId(Objects.isNull(directory.getNurseStationPersonId()) ? null : directory.getNurseStationPersonId());
|
||||
trainingItemDirectoryVO.setNursePersonName(StringUtils.isBlank(directory.getNursePersonName()) ? "" : directory.getNursePersonName());
|
||||
trainingItemDirectoryVO.setTrainingOrderId(Objects.isNull(directory.getTrainingOrderId()) ? null : directory.getTrainingOrderId());
|
||||
trainingItemDirectoryVO.setTrainingOrderNo(StringUtils.isBlank(directory.getTrainingOrderNo()) ? "" : directory.getTrainingOrderNo());
|
||||
trainingItemDirectoryVO.setItemDirectoryWatchStatus(StringUtils.isBlank(directory.getItemDirectoryWatchStatus()) ? "" : directory.getItemDirectoryWatchStatus());
|
||||
trainingItemDirectoryVO.setTrainingOrderStatus(StringUtils.isBlank(directory.getTrainingOrderStatus()) ? "" : directory.getTrainingOrderStatus());
|
||||
trainingItemDirectoryVO.setWatchTime(Objects.isNull(directory.getWatchTime()) ? null : directory.getWatchTime());
|
||||
}
|
||||
return AjaxResult.success(nurseAppletPersonTrainingItemVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 学习培训-下单方法(App和小程序共用)
|
||||
*
|
||||
* @param trainingItemOrderDTO 培训订单
|
||||
* @return com.xinyilu.common.core.domain.AjaxResult
|
||||
**/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public AjaxResult buyTrainingItemOrder(NurseAppletPersonTrainingItemOrderDTO trainingItemOrderDTO) {
|
||||
trainingItemOrderDTO.setTrainingParentId(trainingItemOrderDTO.getTrainingItemId());
|
||||
List<NurseAppletPersonTrainingItemVO> nurseAppletPersonTrainingItemList = trainingItemMapper.selectTrainingLearnItemList(trainingItemOrderDTO);
|
||||
if (CollectionUtils.isEmpty(nurseAppletPersonTrainingItemList)) {
|
||||
return AjaxResult.error("当前培训课程不存在,无法下单,请联系管理员!");
|
||||
}
|
||||
NurseAppletPersonTrainingItemVO trainingItemVO = nurseAppletPersonTrainingItemList.stream().filter(Objects::nonNull)
|
||||
.filter(item -> Objects.nonNull(item.getTrainingItemId()) &&
|
||||
trainingItemOrderDTO.getTrainingItemId().equals(item.getTrainingItemId())).findFirst().orElse(null);
|
||||
if (Objects.isNull(trainingItemVO)) {
|
||||
return AjaxResult.error("当前培训课程不存在或无法下单,请联系管理员!");
|
||||
}
|
||||
if (Objects.isNull(trainingItemVO.getBuyFlag()) || NOT_BUY_FLAG.equals(trainingItemVO.getBuyFlag())) {
|
||||
return AjaxResult.error("当前培训课程不能购买,无法下单,请联系管理员!");
|
||||
}
|
||||
List<String> trainingOrderStatusList = Arrays.asList(TrainingOrderStatusEnum.PAY.getInfo(), TrainingOrderStatusEnum.WAIT_PAY.getInfo());
|
||||
int trainingOrderCount = trainingOrderDetailsMapper.getBuyTrainingOrderInfo(trainingItemOrderDTO.getTrainingItemId(), trainingItemOrderDTO.getNurseStationPersonId(), trainingOrderStatusList);
|
||||
if (trainingOrderCount > 0) {
|
||||
return AjaxResult.error("当前培训课程已购买或者已下单,如果已下单请前往我的学习订单页面支付购买!");
|
||||
}
|
||||
//新增培训订单主对象
|
||||
TrainingOrder trainingOrder = new TrainingOrder();
|
||||
String trainingOrderNo = StringUtils.fillZeroByPatientId(trainingItemOrderDTO.getNurseStationPersonId(), 5) + System.nanoTime();
|
||||
trainingOrder.setNurseStationId(trainingItemOrderDTO.getNurseStationId());
|
||||
trainingOrder.setNurseStationPersonId(trainingItemOrderDTO.getNurseStationPersonId());
|
||||
trainingOrder.setNursePersonName(StringUtils.isBlank(trainingItemOrderDTO.getNursePersonName()) ? "" : trainingItemOrderDTO.getNursePersonName());
|
||||
String trainingOrderStatus = trainingItemOrderDTO.getTrainingOrderAmount().compareTo(BigDecimal.ZERO) == 0 ? TrainingOrderStatusEnum.PAY.getInfo() : TrainingOrderStatusEnum.WAIT_PAY.getInfo();
|
||||
trainingOrder.setTrainingOrderStatus(trainingOrderStatus);
|
||||
trainingOrder.setTrainingOrderAmount(trainingItemOrderDTO.getTrainingOrderAmount());
|
||||
trainingOrder.setTrainingOrderChannel(TrainingOrderChannelEnum.WECHAT_APPLET.getInfo());
|
||||
trainingOrder.setTrainingOrderNo(trainingOrderNo);
|
||||
trainingOrder.setTrainingOrderTime(LocalDateTime.now());
|
||||
trainingOrder.setDelFlag(0);
|
||||
trainingOrder.setCreateBy(StringUtils.isBlank(trainingItemOrderDTO.getNursePersonName()) ? "" : trainingItemOrderDTO.getNursePersonName());
|
||||
trainingOrder.setCreateTime(LocalDateTime.now());
|
||||
int insertTrainingOrder = trainingOrderMapper.insertTrainingOrder(trainingOrder);
|
||||
if (insertTrainingOrder <= 0) {
|
||||
log.error("新增培训订单信息失败");
|
||||
throw new ServiceException("购买学习培训课程下单失败,请联系管理员!");
|
||||
}
|
||||
//新增订单明细表
|
||||
for (NurseAppletPersonTrainingItemVO trainingItem : nurseAppletPersonTrainingItemList) {
|
||||
this.addTrainingOrderDetailsInfo(trainingItemOrderDTO, trainingOrder, trainingItem, trainingOrderNo);
|
||||
}
|
||||
TrainingOrder selectTrainingOrderById = trainingOrderMapper.selectTrainingOrderById(trainingOrder.getId());
|
||||
return AjaxResult.success(selectTrainingOrderById);
|
||||
}
|
||||
|
||||
/**
|
||||
* 我的学习-查询已购买学习培训项目详情
|
||||
*
|
||||
* @param trainingItem 学习培训项目信息
|
||||
* @return 学习培训项目信息集合
|
||||
*/
|
||||
@Override
|
||||
public AjaxResult selectTrainingOrderVideoDetails(NurseAppletPersonTrainingItemDTO trainingItem) {
|
||||
return AjaxResult.success(trainingOrderMapper.selectTrainingOrderVideoDetailsList(trainingItem));
|
||||
}
|
||||
|
||||
/**
|
||||
* 我的学习-查询学习培训项目订单集合组
|
||||
*
|
||||
* @param trainingItem 学习培训项目
|
||||
* @return java.util.List<com.xinyilu.base.vo.trainingitem.NurseAppletPersonTrainingItemVO>
|
||||
**/
|
||||
@Override
|
||||
public List<NurseAppletPersonTrainingOrderDetailsVO> selectTrainingOrderItemGroupList(NurseAppletPersonTrainingItemDTO trainingItem) {
|
||||
if (Objects.isNull(trainingItem) || Objects.isNull(trainingItem.getNurseStationPersonId())) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
trainingItem.setTrainingParentId(Constants.TRAINING_PARENT_ID);
|
||||
trainingItem.setTrainingItemType(TrainingItemTypeEnum.GRAPHIC_LEARNING.getInfo());
|
||||
return trainingOrderMapper.selectTrainingOrderVideoList(trainingItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* 我的学习-查询学习培训项目订单集合
|
||||
*
|
||||
* @param trainingItem 学习培训项目
|
||||
* @return java.util.List<com.xinyilu.base.vo.trainingitem.NurseAppletPersonTrainingItemVO>
|
||||
**/
|
||||
@Override
|
||||
public AjaxResult selectTrainingOrderItemList(NurseAppletPersonTrainingItemDTO trainingItem) {
|
||||
return AjaxResult.success(trainingOrderMapper.selectTrainingOrderVideoList(trainingItem));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询学习培训课程观看时间点记录信息(观看视频用,App和小程序共用)
|
||||
*
|
||||
* @param trainingItemWatchRecord 学习培训项目观看时间点记录信息
|
||||
* @return java.util.List<com.xinyilu.base.domain.trainingcategory.TrainingCategory>
|
||||
**/
|
||||
@Override
|
||||
public AjaxResult getTrainingWatchRecord(TrainingItemWatchRecord trainingItemWatchRecord) {
|
||||
return AjaxResult.success(trainingItemWatchRecordMapper.getTrainingItemWatchRecordById(trainingItemWatchRecord));
|
||||
}
|
||||
|
||||
/**
|
||||
* 学习培训项目观看时间点记录信息(退出视频用)
|
||||
*
|
||||
* @param trainingItemWatchRecord 学习培训项目
|
||||
* @return java.util.List<com.xinyilu.base.domain.trainingcategory.TrainingCategory>
|
||||
**/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public AjaxResult insertTrainingWatchRecord(TrainingItemWatchRecordDTO trainingItemWatchRecord) {
|
||||
TrainingDetailsByOrderVO trainingDetailsByOrderVO = trainingOrderDetailsMapper.selectTrainingOrderDetailsByOrderId(trainingItemWatchRecord.getTrainingOrderId());
|
||||
if (Objects.isNull(trainingDetailsByOrderVO)) {
|
||||
return AjaxResult.error("视频播放失败,请联系管理员!");
|
||||
}
|
||||
TrainingItemWatchRecord trainingItemWatchRecordById = trainingItemWatchRecordMapper.getTrainingItemWatchRecordById(trainingItemWatchRecord);
|
||||
if (Objects.isNull(trainingItemWatchRecordById)) {
|
||||
trainingItemWatchRecord.setWatchDate(LocalDate.now());
|
||||
trainingItemWatchRecord.setTrainingItemDirectoryName(StringUtils.isBlank(trainingItemWatchRecord.getItemDirectoryName()) ? "" : trainingItemWatchRecord.getItemDirectoryName());
|
||||
trainingItemWatchRecord.setCreateTime(LocalDateTime.now());
|
||||
int itemWatchRecord = trainingItemWatchRecordMapper.insertTrainingItemWatchRecord(trainingItemWatchRecord);
|
||||
if (itemWatchRecord <= 0) {
|
||||
throw new ServiceException("视频播放失败,请联系管理员!");
|
||||
}
|
||||
String orderNo = StringUtils.isBlank(trainingDetailsByOrderVO.getTrainingOrderNo()) ? "" : trainingDetailsByOrderVO.getTrainingOrderNo();
|
||||
int orderItemDirectory = trainingOrderItemDirectoryMapper.updatePersonTrainingOrderItemDirectory(trainingItemWatchRecord.getTrainingItemDirectoryId(), orderNo, ItemDirectoryWatchStatusEnum.WATCHED.getInfo());
|
||||
if (orderItemDirectory <= 0) {
|
||||
throw new ServiceException("视频播放失败,请联系管理员!");
|
||||
}
|
||||
//新增学习培训项目播放日志记录表
|
||||
this.addTrainingItemPlayRecord(trainingItemWatchRecord);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
trainingItemWatchRecord.setWatchDate(LocalDate.now());
|
||||
trainingItemWatchRecord.setId(trainingItemWatchRecordById.getId());
|
||||
trainingItemWatchRecord.setUpdateTime(LocalDateTime.now());
|
||||
int itemWatchRecord = trainingItemWatchRecordMapper.updateTrainingItemWatchRecord(trainingItemWatchRecord);
|
||||
if (itemWatchRecord <= 0) {
|
||||
throw new ServiceException("视频播放失败,请联系管理员!");
|
||||
}
|
||||
//修改章节视频观看状态
|
||||
String itemDirectoryWatchStatus = trainingItemWatchRecord.getWatchTime().equals(trainingItemWatchRecord.getItemDirectoryVideoDuration()) ? ItemDirectoryWatchStatusEnum.FINISHED_READING.getInfo() : ItemDirectoryWatchStatusEnum.WATCHED.getInfo();
|
||||
int orderItemDirectory = trainingOrderItemDirectoryMapper.updatePersonTrainingOrderItemDirectory(trainingItemWatchRecord.getTrainingItemDirectoryId(), trainingDetailsByOrderVO.getTrainingOrderNo(), itemDirectoryWatchStatus);
|
||||
if (orderItemDirectory <= 0) {
|
||||
throw new ServiceException("视频退出失败,请联系管理员!");
|
||||
}
|
||||
//新增学习培训项目播放日志记录表
|
||||
this.addTrainingItemPlayRecord(trainingItemWatchRecord);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询待支付的订单详情信息
|
||||
*
|
||||
* @param trainingOrderNo 学习培训订单编号
|
||||
* @return 详情信息
|
||||
*/
|
||||
@Override
|
||||
public AjaxResult getWaitPayTrainingOrderDetails(String trainingOrderNo) {
|
||||
return AjaxResult.success(trainingOrderDetailsMapper.getWaitPayTrainingOrderDetailsInfo(trainingOrderNo, TrainingOrderStatusEnum.WAIT_PAY.getInfo()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增订单表
|
||||
*
|
||||
* @param trainingItemOrderDTO 前端传的培训订单信息
|
||||
* @param trainingOrder 培训订单信息
|
||||
* @param trainingItem 培训项目信息
|
||||
* @param trainingOrderNo 订单编号
|
||||
**/
|
||||
private void addTrainingOrderDetailsInfo(NurseAppletPersonTrainingItemOrderDTO trainingItemOrderDTO, TrainingOrder trainingOrder,
|
||||
NurseAppletPersonTrainingItemVO trainingItem, String trainingOrderNo) {
|
||||
//新增学习培训订单明细对象
|
||||
TrainingOrderDetails trainingOrderDetails = new TrainingOrderDetails();
|
||||
BeanUtils.copyProperties(trainingItem, trainingOrderDetails);
|
||||
trainingOrderDetails.setTrainingOrderId(trainingOrder.getId());
|
||||
trainingOrderDetails.setTrainingOrderNo(trainingOrderNo);
|
||||
trainingOrderDetails.setDelFlag(0);
|
||||
trainingOrderDetails.setCreateBy(StringUtils.isBlank(trainingItemOrderDTO.getNursePersonName()) ? "" : trainingItemOrderDTO.getNursePersonName());
|
||||
trainingOrderDetails.setCreateTime(LocalDateTime.now());
|
||||
int insertTrainingOrderDetails = trainingOrderDetailsMapper.insertTrainingOrderDetails(trainingOrderDetails);
|
||||
if (insertTrainingOrderDetails <= 0) {
|
||||
log.error("新增学习培训订单明细信息失败,请联系管理员!");
|
||||
throw new ServiceException("购买学习培训课程下单失败,请联系管理员!");
|
||||
}
|
||||
if (CollectionUtils.isEmpty(trainingItem.getTrainingItemDirectoryList())) {
|
||||
return;
|
||||
}
|
||||
//新增学习培训订单明细章节,记录视频学习和直播课程的章节信息对象
|
||||
List<TrainingOrderItemDirectory> trainingOrderItemDirectoryList = Lists.newArrayList();
|
||||
for (TrainingItemDirectoryVO trainingItemDirectory : trainingItem.getTrainingItemDirectoryList()) {
|
||||
TrainingOrderItemDirectory trainingOrderItemDirectory = new TrainingOrderItemDirectory();
|
||||
BeanUtils.copyProperties(trainingItemDirectory, trainingOrderItemDirectory);
|
||||
trainingOrderItemDirectory.setTrainingOrderDetailsId(trainingOrderDetails.getId());
|
||||
trainingOrderItemDirectory.setTrainingOrderNo(trainingOrderNo);
|
||||
trainingOrderItemDirectory.setTrainingItemDirectoryId(trainingItemDirectory.getTrainingItemDirectoryId());
|
||||
trainingOrderItemDirectory.setItemDirectoryWatchStatus(ItemDirectoryWatchStatusEnum.NOT_WATCHED.getInfo());
|
||||
trainingOrderItemDirectory.setCreateBy(StringUtils.isBlank(trainingItemOrderDTO.getNursePersonName()) ? "" : trainingItemOrderDTO.getNursePersonName());
|
||||
trainingOrderItemDirectory.setCreateTime(LocalDateTime.now());
|
||||
trainingOrderItemDirectoryList.add(trainingOrderItemDirectory);
|
||||
}
|
||||
int insertTrainingOrderItemDirectory = trainingOrderItemDirectoryMapper.insertTrainingOrderItemDirectoryList(trainingOrderItemDirectoryList);
|
||||
if (insertTrainingOrderItemDirectory <= 0) {
|
||||
log.error("新增学习培训订单明细章节信息失败");
|
||||
throw new ServiceException("购买学习培训课程下单失败,请联系管理员!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增学习培训项目播放日志记录表
|
||||
*
|
||||
* @param trainingItemWatchRecord 学习培训项目
|
||||
* @date 2023/5/5 13:53
|
||||
**/
|
||||
private void addTrainingItemPlayRecord(TrainingItemWatchRecordDTO trainingItemWatchRecord) {
|
||||
TrainingItemPlayRecord trainingItemPlayRecord = new TrainingItemPlayRecord();
|
||||
BeanUtils.copyProperties(trainingItemWatchRecord, trainingItemPlayRecord);
|
||||
trainingItemPlayRecord.setTrainingItemDirectoryName(trainingItemWatchRecord.getItemDirectoryName());
|
||||
trainingItemPlayRecord.setPlayTime(LocalDateTime.now());
|
||||
trainingItemPlayRecord.setPlayDate(LocalDate.now());
|
||||
trainingItemPlayRecord.setCreateTime(LocalDateTime.now());
|
||||
int itemPlayRecord = trainingItemPlayRecordMapper.insertTrainingItemPlayRecord(trainingItemPlayRecord);
|
||||
if (itemPlayRecord <= 0) {
|
||||
throw new ServiceException("视频播放失败,请联系管理员!");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -59,4 +59,14 @@ public interface WeChatPaymentService {
|
||||
* @throws Exception 异常信息
|
||||
*/
|
||||
OrderStatusInfoVO queryGoodsOrderStatus(String orderNo, OrderStatusInfoVO vo, String buySource) throws Exception;
|
||||
|
||||
|
||||
/**
|
||||
* 泉医助手小程序-学习培训微信支付
|
||||
*
|
||||
* @param paymentDTO 支付参数
|
||||
* @return 支付结果
|
||||
* @throws Exception 异常信息
|
||||
*/
|
||||
AjaxResult appletTrainingOrderPay(PaymentDTO paymentDTO) throws Exception;
|
||||
}
|
||||
|
||||
@ -13,14 +13,14 @@ import com.xinelu.common.config.WeChatPaymentUrlConfig;
|
||||
import com.xinelu.common.config.XylWeChatPaymentConfig;
|
||||
import com.xinelu.common.constant.Constants;
|
||||
import com.xinelu.common.core.domain.AjaxResult;
|
||||
import com.xinelu.common.enums.GooodsOrderStatusEnum;
|
||||
import com.xinelu.common.enums.OrderStatusEnum;
|
||||
import com.xinelu.common.enums.WeChatTradeStateEnum;
|
||||
import com.xinelu.common.enums.*;
|
||||
import com.xinelu.common.exception.ServiceException;
|
||||
import com.xinelu.manage.domain.appointmentorder.AppointmentOrder;
|
||||
import com.xinelu.manage.domain.goodsOrder.GoodsOrder;
|
||||
import com.xinelu.manage.domain.trainingorder.TrainingOrder;
|
||||
import com.xinelu.manage.mapper.appointmentorder.AppointmentOrderMapper;
|
||||
import com.xinelu.manage.mapper.goodsOrder.GoodsOrderMapper;
|
||||
import com.xinelu.manage.mapper.trainingorder.TrainingOrderMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
@ -57,6 +57,9 @@ public class WeChatPaymentServiceImpl implements WeChatPaymentService {
|
||||
private GoodsOrderMapper goodsOrderMapper;
|
||||
@Resource
|
||||
private AppointmentOrderMapper appointmentOrderMapper;
|
||||
|
||||
@Resource
|
||||
private TrainingOrderMapper trainingOrderMapper;
|
||||
@Resource
|
||||
private AppletChatConfig appletChatConfig;
|
||||
@Resource
|
||||
@ -262,6 +265,43 @@ public class WeChatPaymentServiceImpl implements WeChatPaymentService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 泉医助手小程序-学习培训微信支付
|
||||
*
|
||||
* @param paymentDTO 支付参数
|
||||
* @return 支付结果
|
||||
* @throws Exception 异常信息
|
||||
*/
|
||||
@Override
|
||||
public AjaxResult appletTrainingOrderPay(PaymentDTO paymentDTO) throws Exception {
|
||||
//从Redis中获取当前prepay_id的值
|
||||
String prepayId = redisTemplate.opsForValue().get(Constants.PREPAY_ID_KEY + paymentDTO.getOrderNo());
|
||||
if (StringUtils.isBlank(prepayId)) {
|
||||
//根据订单编号查询学习培训订单信息
|
||||
TrainingOrder trainingOrderInfo = trainingOrderMapper.getTrainingOrderInfoByOrderNo(paymentDTO.getOrderNo());
|
||||
if (Objects.isNull(trainingOrderInfo) || StringUtils.isBlank(trainingOrderInfo.getTrainingOrderStatus())) {
|
||||
return AjaxResult.error("未查询到当前订单信息,请选择正确的订单信息!");
|
||||
}
|
||||
//判断订单状态
|
||||
if (!StringUtils.equals(trainingOrderInfo.getTrainingOrderStatus(), TrainingOrderStatusEnum.WAIT_PAY.getInfo())) {
|
||||
return AjaxResult.error("订单状态异常,无法支付,请联系管理员!");
|
||||
}
|
||||
if (!StringUtils.equals(paymentDTO.getBuySource(), BuySourceEnum.TRAINING.getInfo())) {
|
||||
log.info("购买来源不一致,请进行确认!");
|
||||
return AjaxResult.error("订单状态异常,无法支付,请联系管理员!");
|
||||
}
|
||||
//构建JsApi下单参数
|
||||
String jsApiParams = this.buildTrainingOrderJsApiParams(paymentDTO, trainingOrderInfo);
|
||||
//请求微信JsApi下单接口获取prepay_id的值
|
||||
prepayId = this.requestJsApiInterface(jsApiParams, paymentDTO, prepayId);
|
||||
} else {
|
||||
prepayId = redisTemplate.opsForValue().get(Constants.PREPAY_ID_KEY + paymentDTO.getOrderNo());
|
||||
}
|
||||
//构建小程序调起支付参数信息
|
||||
// return AjaxResult.success(getSignInfo(prepayId, paymentDTO.getBuySource()));
|
||||
return AjaxResult.success(getSignInfo(prepayId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建商品订单JsApi微信下单参数
|
||||
*
|
||||
@ -376,4 +416,35 @@ public class WeChatPaymentServiceImpl implements WeChatPaymentService {
|
||||
paramMap.put("payer", payerParamMap);
|
||||
return JSON.toJSONString(paramMap);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 构建学习培训订单JsApi微信下单参数
|
||||
*
|
||||
* @param paymentDTO 前端传值
|
||||
* @param trainingOrder 学习培训订单信息
|
||||
* @return 下单参数json串
|
||||
*/
|
||||
private String buildTrainingOrderJsApiParams(PaymentDTO paymentDTO, TrainingOrder trainingOrder) {
|
||||
Map<String, Object> paramMap = new LinkedHashMap<>();
|
||||
//泉医助手学习培训订单使用医路优品账户进行支付,无需根据进购买来源进行判断
|
||||
/* paramMap.put("mchid", ylypWeChatPaymentConfig.getYlypMchId());
|
||||
paramMap.put("out_trade_no", trainingOrder.getTrainingOrderNo());
|
||||
//应用id,此处为泉医助手小程序id
|
||||
paramMap.put("appid", nurseAppletChatConfig.getAppletId());
|
||||
paramMap.put("description", YI_LU_YOU_PIN_DESCRIPTION);
|
||||
paramMap.put("notify_url", ylypWeChatPaymentConfig.getYlypWeChatNotifyUrl() + YINLUYOUPIN_WE_CHAT_NOTIFY_URL);*/
|
||||
Map<String, Object> amountParamMap = new LinkedHashMap<>();
|
||||
//总金额
|
||||
int totalPrice = paymentDTO.getPaymentPrice().multiply(BigDecimal.valueOf(100)).intValue();
|
||||
amountParamMap.put("total", totalPrice);
|
||||
//货币类型
|
||||
amountParamMap.put("currency", "CNY");
|
||||
paramMap.put("amount", amountParamMap);
|
||||
//支付者信息
|
||||
Map<String, Object> payerParamMap = new LinkedHashMap<>();
|
||||
payerParamMap.put("openid", paymentDTO.getOpenid());
|
||||
paramMap.put("payer", payerParamMap);
|
||||
return JSON.toJSONString(paramMap);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,132 @@
|
||||
package com.xinelu.manage.domain.trainingitemwatchrecord;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.xinelu.common.annotation.Excel;
|
||||
import com.xinelu.common.core.domain.BaseDomain;
|
||||
import com.xinelu.common.custominterface.Insert;
|
||||
import com.xinelu.common.custominterface.Update;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
||||
/**
|
||||
* 学习培训项目观看时间点记录对象 training_item_watch_record
|
||||
*
|
||||
* @author xinyilu
|
||||
* @date 2023-04-20
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ApiModel(value = "学习培训项目观看时间点记录对象", description = "training_item_watch_record")
|
||||
public class TrainingItemWatchRecord extends BaseDomain implements Serializable {
|
||||
private static final long serialVersionUID = 1519467029465893375L;
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 学习培训订单id
|
||||
*/
|
||||
@ApiModelProperty(value = "学习培训订单id")
|
||||
@Excel(name = "学习培训订单id")
|
||||
@NotNull(message = "学习培训订单id不能为空", groups = {Insert.class, Update.class})
|
||||
private Long trainingOrderId;
|
||||
|
||||
/**
|
||||
* 培训项目表id,此处id是学习培训订单明细表中的项目id
|
||||
*/
|
||||
@ApiModelProperty(value = "培训项目表id,此处id是学习培训订单明细表中的项目id")
|
||||
@Excel(name = "培训项目表id,此处id是学习培训订单明细表中的项目id")
|
||||
@NotNull(message = "培训项目表id不能为空", groups = {Insert.class, Update.class})
|
||||
private Long trainingItemId;
|
||||
|
||||
/**
|
||||
* 培训项目标题
|
||||
*/
|
||||
@ApiModelProperty(value = "培训项目标题")
|
||||
@Excel(name = "培训项目标题")
|
||||
private String trainingItemTitle;
|
||||
|
||||
/**
|
||||
* 培训项目章节表id,此处id是学习培训订单章节信息表中的id
|
||||
*/
|
||||
@ApiModelProperty(value = "培训项目章节表id,此处id是学习培训订单章节信息表中的id")
|
||||
@Excel(name = "培训项目章节表id,此处id是学习培训订单章节信息表中的id")
|
||||
@NotNull(message = "培训项目章节表id不能为空", groups = {Insert.class, Update.class})
|
||||
private Long trainingItemDirectoryId;
|
||||
|
||||
/**
|
||||
* 培训项目章节名称
|
||||
*/
|
||||
@ApiModelProperty(value = "培训项目章节名称")
|
||||
@Excel(name = "培训项目章节名称")
|
||||
private String trainingItemDirectoryName;
|
||||
|
||||
/**
|
||||
* 护理员表id
|
||||
*/
|
||||
@ApiModelProperty(value = "护理员表id")
|
||||
@Excel(name = "护理员表id")
|
||||
@NotNull(message = "护理员表id不能为空", groups = {Insert.class, Update.class})
|
||||
private Long nurseStationPersonId;
|
||||
|
||||
/**
|
||||
* 护理站人员名称
|
||||
*/
|
||||
@ApiModelProperty(value = "护理站人员名称")
|
||||
@Excel(name = "护理站人员名称")
|
||||
private String nursePersonName;
|
||||
|
||||
/**
|
||||
* 观看日期,格式:yyyy-MM-dd
|
||||
*/
|
||||
@ApiModelProperty(value = "观看日期,格式:yyyy-MM-dd")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@Excel(name = "观看日期,格式:yyyy-MM-dd", width = 30, dateFormat = "yyyy-MM-dd")
|
||||
private LocalDate watchDate;
|
||||
|
||||
/**
|
||||
* 培训项目观看时间点,格式:HH:mm:ss,视频学习类型使用
|
||||
*/
|
||||
@ApiModelProperty(value = "培训项目观看时间点,格式:HH:mm:ss,视频学习类型使用")
|
||||
@JsonFormat(pattern = "HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "HH:mm:ss")
|
||||
@Excel(name = "培训项目观看时间点,格式:HH:mm:ss,视频学习类型使用", width = 30, dateFormat = "HH:mm:ss")
|
||||
private LocalTime watchTime;
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
|
||||
.append("id", getId())
|
||||
.append("trainingOrderId", getTrainingOrderId())
|
||||
.append("trainingItemId", getTrainingItemId())
|
||||
.append("trainingItemTitle", getTrainingItemTitle())
|
||||
.append("trainingItemDirectoryId", getTrainingItemDirectoryId())
|
||||
.append("trainingItemDirectoryName", getTrainingItemDirectoryName())
|
||||
.append("nurseStationPersonId", getNurseStationPersonId())
|
||||
.append("nursePersonName", getNursePersonName())
|
||||
.append("watchDate", getWatchDate())
|
||||
.append("watchTime", getWatchTime())
|
||||
.append("createBy", getCreateBy())
|
||||
.append("createTime", getCreateTime())
|
||||
.append("updateBy", getUpdateBy())
|
||||
.append("updateTime", getUpdateTime())
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
package com.xinelu.manage.dto.trainingitemwatchrecord;
|
||||
|
||||
import com.xinelu.manage.domain.trainingitemwatchrecord.TrainingItemWatchRecord;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalTime;
|
||||
|
||||
/**
|
||||
* @author ljh
|
||||
* @version 1.0
|
||||
* Create by 2023/4/25 14:00
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class TrainingItemWatchRecordDTO extends TrainingItemWatchRecord implements Serializable {
|
||||
private static final long serialVersionUID = -5747156673464899832L;
|
||||
|
||||
/**
|
||||
* 订单编号
|
||||
**/
|
||||
private String trainingOrderNo;
|
||||
|
||||
/**
|
||||
* 培训章节视频时长,格式:HH:mm:ss
|
||||
**/
|
||||
private LocalTime itemDirectoryVideoDuration;
|
||||
|
||||
/**
|
||||
* 培训项目章节名称
|
||||
**/
|
||||
private String itemDirectoryName;
|
||||
|
||||
/**
|
||||
* 培训项目标题
|
||||
**/
|
||||
private String itemDirectoryTitle;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user