diff --git a/dl-module-base/pom.xml b/dl-module-base/pom.xml
index 5a5c497f..e225e25e 100644
--- a/dl-module-base/pom.xml
+++ b/dl-module-base/pom.xml
@@ -144,13 +144,7 @@
org.apache.poi
poi
- 5.2.5
- compile
-
-
- org.apache.poi
- poi
- 5.2.5
+ 4.1.2
compile
diff --git a/dl-module-base/src/main/resources/mapper/company/CompanyMapper.xml b/dl-module-base/src/main/resources/mapper/company/CompanyMapper.xml
index 5969c654..9ccf10a6 100644
--- a/dl-module-base/src/main/resources/mapper/company/CompanyMapper.xml
+++ b/dl-module-base/src/main/resources/mapper/company/CompanyMapper.xml
@@ -50,6 +50,7 @@
from base_company bc
left join system_tenant st on bc.tenant_id = st.id
where FIND_IN_SET(#{map.serviceCodes}, bc.service_codes) > 0
+ and bc.deleted = 0
and bc.tenant_id = #{map.tenantId}
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..f9066cf1
--- /dev/null
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolCourseDeductController.java
@@ -0,0 +1,47 @@
+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.*;
+
+import java.util.List;
+
+@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
+ */
+ @GetMapping("/page")
+ 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));
+ }
+
+ /**
+ * 新增
+ *
+ * @param list @class DriveSchoolCourseDeductVO
+ * @return id
+ */
+ @PostMapping
+ public CommonResult> add(List list) {
+ driveSchoolCourseDeductService.add(list);
+ return CommonResult.ok();
+ }
+}
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/DlDriveSchoolCoachCourseService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCoachCourseService.java
index 22a08e84..0df535da 100644
--- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCoachCourseService.java
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCoachCourseService.java
@@ -24,7 +24,7 @@ public interface DlDriveSchoolCoachCourseService extends IService coachList);
+ void saveCoachCourse(String courseId, String courseName, String courseType, List coachList);
/**
* 通过课程id删除课程与教练关联关系
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..003a4247
--- /dev/null
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCourseDeductService.java
@@ -0,0 +1,43 @@
+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;
+
+import java.util.List;
+
+/**
+ * 提成配置Service接口
+ *
+ * @author ruoyi
+ * @date 2024-05-07
+ */
+public interface DlDriveSchoolCourseDeductService extends IService {
+
+ /**
+ * 分页查询提成配置
+ *
+ * @param page 分页对象
+ * @param request 查询参数
+ * @return 分页结果
+ */
+ IPage queryPage(Page page, DriveSchoolCourseDeductVO request);
+
+ /**
+ * 新增提成配置
+ *
+ * @param list 新增参数
+ * @return 新增结果
+ */
+ void add(List list);
+
+ /**
+ * 新增默认提成配置
+ *
+ * @param courseId 课程id
+ */
+ void defaultAdd(String courseId);
+}
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..51541958
--- /dev/null
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCourseDeductServiceImpl.java
@@ -0,0 +1,77 @@
+package cn.iocoder.yudao.module.base.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+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 lombok.RequiredArgsConstructor;
+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
+@RequiredArgsConstructor
+public class DlDriveSchoolCourseDeductServiceImpl extends ServiceImpl implements DlDriveSchoolCourseDeductService {
+ private final AdminUserApi userApi;
+
+ private final IDriveSchoolDeductService deductService;
+
+ /**
+ * 分页查询提成配置
+ *
+ * @param page 分页对象
+ * @param request 查询参数
+ * @return 分页结果
+ */
+ @Override
+ public IPage queryPage(Page page, DriveSchoolCourseDeductVO request) {
+ return baseMapper.queryPage(page, request);
+ }
+
+ /**
+ * 新增提成配置
+ *
+ * @param list 新增参数
+ * @return 新增结果
+ */
+ @Override
+ public void add(List list) {
+ List driveSchoolCourseDeducts = BeanUtil.copyToList(list, DriveSchoolCourseDeduct.class);
+ saveBatch(driveSchoolCourseDeducts);
+ }
+
+ /**
+ * 新增默认提成配置
+ *
+ * @param courseId 课程id
+ */
+ @Override
+ public void defaultAdd(String courseId) {
+ //查询默认提成配置
+ List defaultDeduct = deductService.list();
+ if (CollectionUtils.isNotEmpty(defaultDeduct)) {
+ List driveSchoolCourseDeducts = BeanUtil.copyToList(defaultDeduct, DriveSchoolCourseDeduct.class);
+ driveSchoolCourseDeducts.stream().map(driveSchoolCourseDeduct -> driveSchoolCourseDeduct.setCourseId(courseId));
+ saveBatch(driveSchoolCourseDeducts);
+ }
+ }
+}
diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCourseServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCourseServiceImpl.java
index e4c2d5cc..e2d9c5b4 100644
--- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCourseServiceImpl.java
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCourseServiceImpl.java
@@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.base.entity.DlDriveSchoolCoachCourse;
import cn.iocoder.yudao.module.base.entity.DlDriveSchoolCourse;
import cn.iocoder.yudao.module.base.mapper.DlDriveSchoolCourseMapper;
import cn.iocoder.yudao.module.base.service.DlDriveSchoolCoachCourseService;
+import cn.iocoder.yudao.module.base.service.DlDriveSchoolCourseDeductService;
import cn.iocoder.yudao.module.base.service.DlDriveSchoolCourseService;
import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachVO;
import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCourseVO;
@@ -37,6 +38,8 @@ public class DlDriveSchoolCourseServiceImpl 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 239be0bb..c7af65e5 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 @@