学习培训/我的学习

This commit is contained in:
HaoWang 2023-11-28 10:50:28 +08:00
parent 3e098ff77d
commit 907fb39097
13 changed files with 1285 additions and 3 deletions

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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("视频播放失败,请联系管理员!");
}
}
}

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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;
}