diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolCourseDeductController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolCourseDeductController.java new file mode 100644 index 00000000..73575a5a --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolCourseDeductController.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.base.controller.admin; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.base.entity.DriveSchoolCourseDeduct; +import cn.iocoder.yudao.module.base.service.DlDriveSchoolCourseDeductService; +import cn.iocoder.yudao.module.base.vo.DriveSchoolCourseDeductVO; +import com.github.pagehelper.Page; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/base/drive-school-course-deduct") +@RequiredArgsConstructor +public class DlDriveSchoolCourseDeductController { + + private final DlDriveSchoolCourseDeductService driveSchoolCourseDeductService; + + /** + * 分页查询 + * + * @param request @class DriveSchoolCourseDeductVO + * @param pageNo 页码 + * @param pageSize 每页条数 + * @return @class DriveSchoolCourseDeductVO + */ + public CommonResult page(DriveSchoolCourseDeductVO request, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + Page page = new Page<>(pageNo, pageSize); + return CommonResult.success(driveSchoolCourseDeductService.queryPage(page, request)); + } +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DriveSchoolCourseDeduct.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DriveSchoolCourseDeduct.java new file mode 100644 index 00000000..6327bb9c --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DriveSchoolCourseDeduct.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.base.entity; + + +import cn.iocoder.yudao.annotation.Excel; +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 提成配置对象 drive_school_course_deduct + * + * @author ruoyi + * @date 2024-05-07 + */ +@Data +public class DriveSchoolCourseDeduct extends TenantBaseDO +{ + private static final long serialVersionUID = 1L; + + /** 主键id */ + private Long id; + + /** 提成比例 */ + @Excel(name = "提成比例") + private BigDecimal deduct; + + /** 科目id */ + private String courseId; + + /** 科目 */ + @Excel(name = "科目") + private String courseSubject; +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DriveSchoolCourseDeductMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DriveSchoolCourseDeductMapper.java new file mode 100644 index 00000000..dad123d8 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DriveSchoolCourseDeductMapper.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.base.mapper; + +import cn.iocoder.yudao.module.base.entity.DriveSchoolCourseDeduct; +import cn.iocoder.yudao.module.base.vo.DriveSchoolCourseDeductVO; +import cn.iocoder.yudao.module.jx.domain.DriveSchoolDeduct; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 提成配置Mapper接口 + * + * @author ruoyi + * @date 2024-05-07 + */ +@Mapper +public interface DriveSchoolCourseDeductMapper extends BaseMapper +{ + IPage queryPage(@Param("page") Page page, @Param("request") DriveSchoolCourseDeductVO request); +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCourseDeductService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCourseDeductService.java new file mode 100644 index 00000000..1fd9afc0 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCourseDeductService.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.base.service; + +import cn.iocoder.yudao.module.base.entity.DriveSchoolCourseDeduct; +import cn.iocoder.yudao.module.base.vo.DriveSchoolCourseDeductVO; +import cn.iocoder.yudao.module.jx.domain.DriveSchoolDeduct; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.github.pagehelper.Page; + +/** + * 提成配置Service接口 + * + * @author ruoyi + * @date 2024-05-07 + */ +public interface DlDriveSchoolCourseDeductService extends IService { + + /** + * 分页查询提成配置 + * + * @param page 分页对象 + * @param request 查询参数 + * @return 分页结果 + */ + IPage queryPage(Page page, DriveSchoolCourseDeductVO request); +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DataViewServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DataViewServiceImpl.java index 1d3245d4..1da1b8a3 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DataViewServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DataViewServiceImpl.java @@ -180,7 +180,7 @@ public class DataViewServiceImpl implements DataViewService { //教练查询 /*1.学员情况*/ List studentVOList = studentMapper.selectStudentListCoach(coachId,startTimeStr,endTimeStr); - int overNum = (int) studentVOList.stream().filter(item -> null != item.getGradTime()).count(); + int overNum = (int) studentVOList.stream().filter(item -> null != item.getOrderGradTime()).count(); int noOverNum = studentVOList.size()-overNum; Map studentInfoMap = new HashMap<>(); studentInfoMap.put("allNum",studentVOList.size()); diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCourseDeductServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCourseDeductServiceImpl.java new file mode 100644 index 00000000..c4f771ed --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCourseDeductServiceImpl.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.base.service.impl; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.base.entity.DriveSchoolCourseDeduct; +import cn.iocoder.yudao.module.base.mapper.DriveSchoolCourseDeductMapper; +import cn.iocoder.yudao.module.base.service.DlDriveSchoolCourseDeductService; +import cn.iocoder.yudao.module.base.vo.DriveSchoolCourseDeductVO; +import cn.iocoder.yudao.module.jx.domain.DriveSchoolDeduct; +import cn.iocoder.yudao.module.jx.mapper.DriveSchoolDeductMapper; +import cn.iocoder.yudao.module.jx.service.IDriveSchoolDeductService; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.Page; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 提成配置Service业务层处理 + * + * @author ruoyi + * @date 2024-05-07 + */ +@Service +public class DlDriveSchoolCourseDeductServiceImpl extends ServiceImpl implements DlDriveSchoolCourseDeductService +{ + @Resource + private AdminUserApi userApi; + + /** + * 分页查询提成配置 + * + * @param page 分页对象 + * @param request 查询参数 + * @return 分页结果 + */ + @Override + public IPage queryPage(Page page, DriveSchoolCourseDeductVO request) { + return baseMapper.queryPage(page, request); + } +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolStudentServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolStudentServiceImpl.java index 29b62e9f..9e2a732f 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolStudentServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolStudentServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.base.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -15,6 +16,7 @@ import cn.iocoder.yudao.module.base.service.SchoolNotifyMessageSendService; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO; import cn.iocoder.yudao.module.base.vo.StudentCountVO; +import cn.iocoder.yudao.module.course.entity.Process; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; import cn.iocoder.yudao.module.course.service.ProcessService; import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService; @@ -32,6 +34,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.Comparator; import java.util.Date; import java.util.List; @@ -69,7 +72,7 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl pageResult = dlDriveSchoolStudentMapper.selectByCoachId(pageReqVO, page); pageResult.getRecords().forEach(item -> { //查每个学生的当前所处的科目 - item.setProcess(processService.selectByUserId(item.getUserId(), item.getCoachId())); + List list = processService.list(Wrappers.lambdaQuery() + .eq(Process::getUserId, item.getUserId()) + .eq(Process::getCoachId, item.getCoachId()) + .eq(Process::getCourseId, item.getCourseId()) + .orderByDesc(Process::getCreateTime)); + + Process newProcess = new Process(); + if (CollUtil.isNotEmpty(list)) { + // 查询正在进行的课程 + newProcess = list.stream().filter(process -> process.getStatus().equals("1")).findFirst().orElse(null); + if (ObjectUtil.isNotEmpty(newProcess)) { + item.setProcess(newProcess); + } else { + // 判断所有进度是否都是已完成 + boolean flag = list.stream().allMatch(process -> process.getStatus().equals("2")); + if (flag) { + newProcess = list.stream().max(Comparator.comparing(Process::getSubject)).orElse(null); + }else { + newProcess = list.stream().min(Comparator.comparing(Process::getSubject)).orElse(null); + } + } + } + + item.setProcess(newProcess); }); return pageResult; } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java index e26a3090..7e778349 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java @@ -29,4 +29,10 @@ public class DlDriveSchoolStudentVO extends DlDriveSchoolStudent { private String startTime; /**查询时间范围--结束*/ private String endTime; + /**订单表中的毕业时间*/ + private String orderGradTime; + /**课程名称*/ + private String courseName; + /**订单ID*/ + private String orderId; } \ No newline at end of file diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DriveSchoolCourseDeductVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DriveSchoolCourseDeductVO.java new file mode 100644 index 00000000..3e5d23e9 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DriveSchoolCourseDeductVO.java @@ -0,0 +1,10 @@ +package cn.iocoder.yudao.module.base.vo; + +import cn.iocoder.yudao.module.base.entity.DriveSchoolCourseDeduct; +import lombok.Data; + +@Data +public class DriveSchoolCourseDeductVO extends DriveSchoolCourseDeduct { + /**课程名称*/ + private String courseName; +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/ProcessServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/ProcessServiceImpl.java index 4428ad29..fb1335e6 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/ProcessServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/ProcessServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.course.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; @@ -327,12 +328,49 @@ public class ProcessServiceImpl extends ServiceImpl impl .eq(SchoolCourseOrder::getId, request.getOrderId()) .set(SchoolCourseOrder::getIfAssignmentCoach, SchoolBaseConstants.SCHOOL_COURSE_ORDER_IS_ASSIGN_COACH)); + // 查询进度 + List processList = list(Wrappers.lambdaQuery(Process.class) + .eq(Process::getCourseId, courseId) + .eq(Process::getUserId, userId)); + + Process process = processList.stream() + .filter(p -> "1".equals(p.getStatus())) + .findFirst() + .orElse(null); + + if (process == null) { + // 没有进行中的 + Process maxCompleted = processList.stream() + .filter(p -> "2".equals(p.getStatus())) + .max(Comparator.comparing(Process::getSubject)) + .orElse(null); + + if (maxCompleted != null) { + // 尝试找 subject == maxCompleted + 1 的 + Process next = processList.stream() + .filter(p -> p.getSubject().equals(maxCompleted.getSubject() + 1)) + .findFirst() + .orElse(null); + + process = next != null ? next : maxCompleted; + } else { + // 没有已完成的,找 subject 最小的 + process = processList.stream() + .min(Comparator.comparing(Process::getSubject)) + .orElse(null); + } + process.setStatus("1"); + //更新 + updateById(process); + } + + // 发送通知内容 String message = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_ASSIGN_COACH, - processes.get(0).getCoachName(), - processes.get(1).getCoachName(), - processes.get(2).getCoachName(), - processes.get(3).getCoachName()); + request.getProcessList().get(0).getCoachName(), + request.getProcessList().get(1).getCoachName(), + request.getProcessList().get(2).getCoachName(), + request.getProcessList().get(3).getCoachName()); // 发送消息给学员 schoolNotifyMessageSendService.sendMessage(userId, message, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_MEMBER, null); diff --git a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml index b0d4187d..d3d84263 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml @@ -101,32 +101,35 @@ + SELECT main.*, dsc.name AS courseName + FROM drive_school_course_deduct main + LEFT JOIN drive_school_course dsc ON main.course_id = dsc.id + +