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 @@ + SELECT main.*, dsc.name AS courseName + FROM drive_school_course_deduct main + LEFT JOIN drive_school_course dsc ON main.course_id = dsc.id + + diff --git a/dl-module-repair/pom.xml b/dl-module-repair/pom.xml index 913afcc8..1975668f 100644 --- a/dl-module-repair/pom.xml +++ b/dl-module-repair/pom.xml @@ -30,6 +30,12 @@ com.deepoove poi-tl 1.10.0 + + + org.apache.poi + * + + org.projectlombok diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java index 0dc5efc0..6548ca3d 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java @@ -757,7 +757,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl params = new HashMap<>(); String fileName = "结算单.docx"; - String tmpPath = "D:\\" + fileName; + String tmpPath = fileName; // 设置列表配置,如果有多个列表时需加.bind("list1", policy) 新列表配置即可 ConfigureBuilder configureBuilder = Configure.builder(); /* @@ -824,7 +824,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl