This commit is contained in:
Lx 2025-06-05 14:30:56 +08:00
parent bb1bfee430
commit 1177ff987a
26 changed files with 535 additions and 74 deletions

View File

@ -96,4 +96,9 @@ public class CompanySmallProgramAPI {
List<Company> list = this.companyService.list(queryWrapper); List<Company> list = this.companyService.list(queryWrapper);
return success(list.isEmpty()?null:list.get(0)); return success(list.isEmpty()?null:list.get(0));
} }
@GetMapping("/getCompanyByTenantIdAndSystemCode")
public CommonResult<?> getCompanyAndManager(String tenantId, String systemCode){
return success(companyService.getCompanyByTenantIdAndSystemCode(tenantId, systemCode));
}
} }

View File

@ -134,4 +134,25 @@ public class Company extends TenantBaseDO {
* 纬度 * 纬度
*/ */
private BigDecimal lat; private BigDecimal lat;
/**
* 小程序app_id
*/
private String appId;
/**
* 微信商户号
*/
private String mchId;
/**
* 微信支付密钥
*/
private String privateKeyStr;
/**
* 回调地址
*/
private String notifyUrl;
} }

View File

@ -77,4 +77,7 @@ public interface CompanyService extends IService<Company> {
* @param id 企业ID * @param id 企业ID
**/ **/
CompanyToServerVO getCompanyServerById(String id); CompanyToServerVO getCompanyServerById(String id);
} Company getCompanyByTenantIdAndSystemCode(String tenantId, String systemCode);
}

View File

@ -5,6 +5,9 @@ import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.exception.ErrorCode; import cn.iocoder.yudao.framework.common.exception.ErrorCode;
import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
import cn.iocoder.yudao.module.app.company.vo.CompanyToServerVO; import cn.iocoder.yudao.module.app.company.vo.CompanyToServerVO;
import cn.iocoder.yudao.module.company.entity.Company; import cn.iocoder.yudao.module.company.entity.Company;
import cn.iocoder.yudao.module.company.vo.CompanyRespVO; import cn.iocoder.yudao.module.company.vo.CompanyRespVO;
@ -18,6 +21,7 @@ import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.yudao.module.system.api.user.dto.UserDTO; import cn.iocoder.yudao.module.system.api.user.dto.UserDTO;
import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.iocoder.yudao.module.company.vo.CompanyReqVO; import cn.iocoder.yudao.module.company.vo.CompanyReqVO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -205,4 +209,16 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
Optional.ofNullable(servicePackageByIds).ifPresent(result::setServicePackages); Optional.ofNullable(servicePackageByIds).ifPresent(result::setServicePackages);
return result; return result;
} }
}
@Override
@TenantIgnore
public Company getCompanyByTenantIdAndSystemCode(String tenantId, String systemCode) {
LambdaQueryWrapper<Company> queryWrapper = new LambdaQueryWrapper<Company>()
.eq(TenantBaseDO::getTenantId, tenantId)
.like(Company::getServiceCodes, systemCode)
.orderByDesc(BaseDO::getCreateTime);
List<Company> list = this.list(queryWrapper);
return list.isEmpty() ? null : list.get(0);
}
}

View File

@ -130,4 +130,24 @@ public interface SchoolBaseConstants {
*/ */
public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_ENROLL_TO_OFFICE= "学员 %s 报名了 %s 课程,请留意!"; public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_ENROLL_TO_OFFICE= "学员 %s 报名了 %s 课程,请留意!";
/**
* 学员面签成功之后发送消息给教练
*/
public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_SIGN_TO_COACH= "学员 %s 已面签成功!";
/**
* 学员取消面签之后发送消息给教练
*/
public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_CANCEL_SIGN_TO_COACH= "学员 %s 已取消面签!";
/**
* 学员课程终止之后发送消息
*/
public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_COURSE_END_TO_MEMBER= "学员 %s 订单已终止!终止原因:%s";
/**
* 学员支付后
*/
public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_PAY_TO_MEMBER = "学员 %s 订单已支付!";
} }

View File

@ -192,4 +192,6 @@ public interface DlDriveSchoolStudentService extends IService<DlDriveSchoolStude
* 修改学员来源 * 修改学员来源
*/ */
public boolean updateChannel(DlDriveSchoolStudent student); public boolean updateChannel(DlDriveSchoolStudent student);
DlDriveSchoolStudent getStudentByIdNo(String idNo);
} }

View File

@ -684,4 +684,14 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl<DlDriveSchoolSt
return rows > 0; return rows > 0;
} }
@Override
public DlDriveSchoolStudent getStudentByIdNo(String idNo) {
return lambdaQuery()
.eq(DlDriveSchoolStudent::getIdCard, idNo)
.orderByDesc(DlDriveSchoolStudent::getCreateTime)
.eq(DlDriveSchoolStudent::getDeleted, false)
.last("LIMIT 1")
.one();
}
} }

View File

@ -72,6 +72,15 @@ public class ProcessController {
return success(processService.pageProcess(page, pageReqVO)); return success(processService.pageProcess(page, pageReqVO));
} }
@GetMapping("/newPage")
@Operation(summary = "学员课程进度分页")
public CommonResult<IPage<?>> getDlDriveSchoolCoachPageNew(ProcessVO pageReqVO,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<ProcessVO> page = new Page<>(pageNo, pageSize);
return success(processService.pageProcessNew(page, pageReqVO));
}
/** /**
* 教练查自己带教的课程和科目 * 教练查自己带教的课程和科目
* *

View File

@ -2,12 +2,12 @@ package cn.iocoder.yudao.module.course.controller.admin;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder;
import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService; import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService;
import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO;
import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderBusinessVO;
import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderExportVO; import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderExportVO;
import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO; import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -15,7 +15,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -24,7 +23,6 @@ import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.IOException; import java.io.IOException;
import java.util.Date;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@ -143,4 +141,13 @@ public class SchoolCourseOrderController {
schoolCourseOrderService.updateStudentPassTime(studentId, passTime); schoolCourseOrderService.updateStudentPassTime(studentId, passTime);
return success(true); return success(true);
} }
/**
* 业务经理代学员报名
*/
@PostMapping("/businessManagerCreate")
public CommonResult<Long> businessManagerCreateSchoolCourseOrder(@Valid @RequestBody SchoolCourseOrderBusinessVO createReqVO) {
// return success("");
return success(schoolCourseOrderService.businessManagerCreateSchoolCourseOrder(createReqVO));
}
} }

View File

@ -73,8 +73,8 @@ public class SchoolCommission extends TenantBaseDO {
*/ */
private Boolean ifPay; private Boolean ifPay;
/** /**
* 是否已付 * 支付时间
*/ */
private Date payTime; private Date payTime;
} }

View File

@ -122,5 +122,15 @@ public class SchoolCourseOrder extends TenantBaseDO {
*/ */
private Date gradTime; private Date gradTime;
/**
* 报名方式1为代报名
*/
private String signType;
} /**
* 支付渠道微信1线下2
*/
private String payChannel;
}

View File

@ -70,6 +70,7 @@ public interface ProcessMapper extends BaseMapper<Process> {
* @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.course.vo.ProcessVO> * @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.course.vo.ProcessVO>
**/ **/
IPage<ProcessVO> pageProcess(@Param("entity") ProcessVO entity, Page<ProcessVO> page); IPage<ProcessVO> pageProcess(@Param("entity") ProcessVO entity, Page<ProcessVO> page);
IPage<ProcessVO> pageProcessNew(@Param("entity") ProcessVO entity, Page<ProcessVO> page);
Double selectAllTrainTime(@Param("userId") Long userId,@Param("courseId") String courseId); Double selectAllTrainTime(@Param("userId") Long userId,@Param("courseId") String courseId);

View File

@ -2,7 +2,9 @@ package cn.iocoder.yudao.module.course.mapper;
import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder;
import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO;
import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderBusinessVO;
import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO; import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -43,4 +45,8 @@ public interface SchoolCourseOrderMapper extends BaseMapper<SchoolCourseOrder> {
/** 学员订单信息 */ /** 学员订单信息 */
SchoolCourseOrderVO getOrderInfo(@Param("userId") Long userId); SchoolCourseOrderVO getOrderInfo(@Param("userId") Long userId);
/**创建学员Users表信息*/
Long createStudentUsers(AdminUserDO adminUserDO);
} }

View File

@ -93,6 +93,7 @@ public interface ProcessService extends IService<Process> {
* @date 15:34 2025/2/17 * @date 15:34 2025/2/17
**/ **/
IPage<ProcessVO> pageProcess(Page<ProcessVO> page, ProcessVO pageReqVO); IPage<ProcessVO> pageProcess(Page<ProcessVO> page, ProcessVO pageReqVO);
IPage<ProcessVO> pageProcessNew(Page<ProcessVO> page, ProcessVO pageReqVO);
/** /**
* 财务审核 * 财务审核

View File

@ -30,4 +30,9 @@ public interface SchoolCommissionService extends IService<SchoolCommission> {
*/ */
boolean createSchoolCommission(SchoolCommissionVO entity); boolean createSchoolCommission(SchoolCommissionVO entity);
/**
* 判断提成记录是否存在
*/
boolean exists(SchoolCommission entity);
} }

View File

@ -1,24 +1,17 @@
package cn.iocoder.yudao.module.course.service; package cn.iocoder.yudao.module.course.service;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.course.entity.SchoolCommission;
import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder;
import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO;
import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderBusinessVO;
import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO; import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.bind.annotation.GetMapping;
import javax.validation.Valid; import javax.validation.Valid;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
/** /**
* 驾照报名订单 Service 接口 * 驾照报名订单 Service 接口
* *
@ -110,4 +103,6 @@ public interface SchoolCourseOrderService extends IService<SchoolCourseOrder> {
*/ */
void updateStudentPassTime(String studentId, String gradTime); void updateStudentPassTime(String studentId, String gradTime);
Long businessManagerCreateSchoolCourseOrder(SchoolCourseOrderBusinessVO createReqVO);
} }

View File

@ -253,6 +253,10 @@ public class ProcessServiceImpl extends ServiceImpl<ProcessMapper, Process> impl
public IPage<ProcessVO> pageProcess(Page<ProcessVO> page, ProcessVO pageReqVO) { public IPage<ProcessVO> pageProcess(Page<ProcessVO> page, ProcessVO pageReqVO) {
return processMapper.pageProcess(pageReqVO, page); return processMapper.pageProcess(pageReqVO, page);
} }
@Override
public IPage<ProcessVO> pageProcessNew(Page<ProcessVO> page, ProcessVO pageReqVO) {
return processMapper.pageProcessNew(pageReqVO, page);
}
/** /**
* 财务审核 * 财务审核
@ -261,7 +265,7 @@ public class ProcessServiceImpl extends ServiceImpl<ProcessMapper, Process> impl
* @author PQZ * @author PQZ
* @date 15:24 2025/2/18 * @date 15:24 2025/2/18
**/ **/
@Override /*@Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void checkProcess(Process process) { public void checkProcess(Process process) {
//查询数据 //查询数据
@ -298,13 +302,99 @@ public class ProcessServiceImpl extends ServiceImpl<ProcessMapper, Process> impl
schoolCommission.setCheckId(sysUser.getId()); schoolCommission.setCheckId(sysUser.getId());
//审核人姓名 //审核人姓名
schoolCommission.setCheckName(sysUser.getNickname()); schoolCommission.setCheckName(sysUser.getNickname());
schoolCommissionService.save(schoolCommission);
// 检查是否已存在记录
SchoolCommission existing = schoolCommissionService.getOne(
Wrappers.<SchoolCommission>lambdaQuery()
.eq(SchoolCommission::getCoachUserId, schoolCommission.getCoachUserId())
.eq(SchoolCommission::getStudentId, schoolCommission.getStudentId())
.eq(SchoolCommission::getCourseId, schoolCommission.getCourseId())
.eq(SchoolCommission::getSubject, schoolCommission.getSubject())
);
if(existing != null){
schoolCommission.setId(existing.getId());
schoolCommission.setDeleted(!process.getFinancePass());
schoolCommissionService.updateById(schoolCommission);
}else{
schoolCommissionService.save(schoolCommission);
}
} }
} }
} }
updateById(process); updateById(process);
}*/
@Override
@Transactional(rollbackFor = Exception.class)
public void checkProcess(Process process) {
// 查询原始数据和当前用户信息
Process oldProcess = getById(process.getId());
Long userId = SecurityFrameworkUtils.getLoginUserId();
AdminUserRespDTO sysUser = userApi.getUser(userId);
// 科目为空时直接更新Process并返回
if (process.getSubject() == null) {
updateById(process);
return;
}
// 查询提成规则
DriveSchoolCourseDeduct deduct = deductService.getOne(
Wrappers.<DriveSchoolCourseDeduct>lambdaQuery()
.eq(DriveSchoolCourseDeduct::getCourseId, process.getCourseId())
.eq(DriveSchoolCourseDeduct::getCourseSubject, process.getSubject())
);
// 如果存在提成规则
if (deduct != null) {
// 构建提成记录对象
SchoolCommission schoolCommission = new SchoolCommission();
schoolCommission.setCoachUserId(oldProcess.getCoachId());
schoolCommission.setCoachName(oldProcess.getCoachName());
schoolCommission.setStudentId(oldProcess.getUserId());
schoolCommission.setStudentName(oldProcess.getUserName());
schoolCommission.setCommissionAmount(deduct.getDeduct());
schoolCommission.setCourseId(oldProcess.getCourseId());
schoolCommission.setSubject(String.valueOf(oldProcess.getSubject()));
schoolCommission.setCheckId(sysUser.getId());
schoolCommission.setCheckName(sysUser.getNickname());
// 检查是否已存在记录
SchoolCommission existing = schoolCommissionService.getOne(
Wrappers.<SchoolCommission>lambdaQuery()
.eq(SchoolCommission::getCoachUserId, schoolCommission.getCoachUserId())
.eq(SchoolCommission::getStudentId, schoolCommission.getStudentId())
.eq(SchoolCommission::getCourseId, schoolCommission.getCourseId())
.eq(SchoolCommission::getSubject, schoolCommission.getSubject())
);
// 根据是否存在记录和审核状态处理
if (existing != null) {
if(process.getFinancePass()){
// 更新记录设置ID和deleted状态
schoolCommission.setId(existing.getId());
schoolCommission.setDeleted(!process.getFinancePass());
schoolCommissionService.updateById(schoolCommission);
}else {
// 删除记录设置ID和deleted状态
schoolCommission.setId(existing.getId());
schoolCommission.setDeleted(!process.getFinancePass());
schoolCommissionService.removeById(existing.getId());
}
} else if (process.getFinancePass()) {
// 仅审核通过时新增记录
schoolCommission.setDeleted(false);
schoolCommissionService.save(schoolCommission);
}
}
// 更新Process记录
updateById(process);
} }
/** /**
* 保存学员课程进度 * 保存学员课程进度
* *

View File

@ -71,4 +71,14 @@ public class SchoolCommissionServiceImpl extends ServiceImpl<SchoolCommissionMap
return true; return true;
} }
@Override
public boolean exists(SchoolCommission entity) {
return this.lambdaQuery()
.eq(SchoolCommission::getCoachUserId, entity.getCoachUserId())
.eq(SchoolCommission::getStudentId, entity.getStudentId())
.eq(SchoolCommission::getCourseId, entity.getCourseId())
.eq(SchoolCommission::getSubject, entity.getSubject())
.exists();
}
} }

View File

@ -1,24 +1,28 @@
package cn.iocoder.yudao.module.course.service.impl; package cn.iocoder.yudao.module.course.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.yudao.module.base.constant.SchoolBaseConstants; import cn.iocoder.yudao.module.base.constant.SchoolBaseConstants;
import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent;
import cn.iocoder.yudao.module.base.service.DlDriveSchoolCourseService;
import cn.iocoder.yudao.module.base.service.DlDriveSchoolStudentService;
import cn.iocoder.yudao.module.base.service.SchoolNotifyMessageSendService; import cn.iocoder.yudao.module.base.service.SchoolNotifyMessageSendService;
import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO;
import cn.iocoder.yudao.module.course.entity.Process; import cn.iocoder.yudao.module.course.entity.Process;
import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder;
import cn.iocoder.yudao.module.course.mapper.SchoolCourseOrderMapper; import cn.iocoder.yudao.module.course.mapper.SchoolCourseOrderMapper;
import cn.iocoder.yudao.module.course.service.ProcessService; import cn.iocoder.yudao.module.course.service.ProcessService;
import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService; import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService;
import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO;
import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderBusinessVO;
import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO; import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO;
import cn.iocoder.yudao.module.system.api.permission.RoleApi; import cn.iocoder.yudao.module.system.api.permission.RoleApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.yudao.module.system.api.user.dto.UserDTO; import cn.iocoder.yudao.module.system.api.user.dto.UserDTO;
import cn.iocoder.yudao.module.system.service.permission.RoleService; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -62,6 +66,11 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl<SchoolCourseOrderM
@Lazy @Lazy
private RoleApi roleApi; private RoleApi roleApi;
@Lazy
@Resource
private DlDriveSchoolStudentService schoolStudentService;
@Override @Override
public String createSchoolCourseOrder(SchoolCourseOrderVO createReqVO) { public String createSchoolCourseOrder(SchoolCourseOrderVO createReqVO) {
// 插入 // 插入
@ -75,9 +84,37 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl<SchoolCourseOrderM
public void updateSchoolCourseOrder(SchoolCourseOrderVO updateReqVO) { public void updateSchoolCourseOrder(SchoolCourseOrderVO updateReqVO) {
// 更新 // 更新
SchoolCourseOrder updateObj = BeanUtils.toBean(updateReqVO, SchoolCourseOrder.class); SchoolCourseOrder updateObj = BeanUtils.toBean(updateReqVO, SchoolCourseOrder.class);
this.sendMessage(updateReqVO);
schoolCourseOrderMapper.updateById(updateObj); schoolCourseOrderMapper.updateById(updateObj);
} }
// 判断是否面签发送消息
public void sendMessage(SchoolCourseOrderVO updateReqVO) {
SchoolCourseOrder schoolCourseOrder = schoolCourseOrderMapper.selectById(updateReqVO.getId());
DlDriveSchoolStudent studentByUserId = schoolStudentService.getStudentByUserId(Long.valueOf(updateReqVO.getUserId()));
if(studentByUserId != null){
if("04".equals(studentByUserId.getSource()) && studentByUserId.getSourceUserId() != null){
if(schoolCourseOrder != null){
// 面签成功
if(schoolCourseOrder.getIsSign() == 0 && updateReqVO.getIsSign() == 1){
String messageToCoach = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_SIGN_TO_COACH, studentByUserId.getName());
schoolNotifyMessageSendService.sendMessage(studentByUserId.getSourceUserId(), messageToCoach, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_ADMIN,null);
} else if (schoolCourseOrder.getIsSign() == 1 && updateReqVO.getIsSign() == 0) {
// 取消面签
String messageToCoach = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_CANCEL_SIGN_TO_COACH, studentByUserId.getName());
schoolNotifyMessageSendService.sendMessage(studentByUserId.getSourceUserId(), messageToCoach, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_ADMIN,null);
} else if ("0".equals(schoolCourseOrder.getPaymentStatus()) && "2".equals(updateReqVO.getPaymentStatus())) {
// 支付成功
String messageToCoach = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_PAY_TO_MEMBER, studentByUserId.getName());
schoolNotifyMessageSendService.sendMessage(studentByUserId.getSourceUserId(), messageToCoach, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_ADMIN,null);
}
}
}
}
}
@Override @Override
public void deleteSchoolCourseOrder(String id) { public void deleteSchoolCourseOrder(String id) {
// 删除 // 删除
@ -104,10 +141,11 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl<SchoolCourseOrderM
public IPage<SchoolCourseOrderVO> queryPage(Page<SchoolCommissionVO> page, SchoolCourseOrderVO pageReqVO) { public IPage<SchoolCourseOrderVO> queryPage(Page<SchoolCommissionVO> page, SchoolCourseOrderVO pageReqVO) {
return schoolCourseOrderMapper.queryPage(pageReqVO, page); return schoolCourseOrderMapper.queryPage(pageReqVO, page);
} }
@Override @Override
public IPage<SchoolCourseOrderVO> queryPageNew(Page<SchoolCommissionVO> page, SchoolCourseOrderVO pageReqVO) { public IPage<SchoolCourseOrderVO> queryPageNew(Page<SchoolCommissionVO> page, SchoolCourseOrderVO pageReqVO) {
return schoolCourseOrderMapper.queryPageNew(pageReqVO,page); return schoolCourseOrderMapper.queryPageNew(pageReqVO, page);
} }
/** /**
* 终止订单 * 终止订单
@ -139,6 +177,16 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl<SchoolCourseOrderM
.eq(Process::getStatus, SchoolBaseConstants.PROCESS_STATUS_IN_PROGRESS)) .eq(Process::getStatus, SchoolBaseConstants.PROCESS_STATUS_IN_PROGRESS))
); );
DlDriveSchoolStudent studentByUserId = schoolStudentService.getStudentByUserId(Long.valueOf(schoolCourseOrder.getUserId()));
if (studentByUserId != null) {
// 如果为业务经理招生发送消息给业务经理
if("04".equals(studentByUserId.getSource()) && studentByUserId.getSourceUserId() != null){
String messageToCoach = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_COURSE_END_TO_MEMBER, studentByUserId.getName(), endReason);
schoolNotifyMessageSendService.sendMessage(studentByUserId.getSourceUserId(), messageToCoach, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_ADMIN,null);
}
}
// 准备消息内容 // 准备消息内容
String message = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_COURSE_END, schoolCourseOrder.getCourseName()); String message = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_COURSE_END, schoolCourseOrder.getCourseName());
@ -229,7 +277,7 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl<SchoolCourseOrderM
@Override @Override
public Boolean sendOrderMessage(String studentName, String courseName, Long coachId) { public Boolean sendOrderMessage(String studentName, String courseName, Long coachId) {
if(coachId != null){ if (coachId != null) {
// 准备消息内容 // 准备消息内容
String message = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_ENROLL, studentName, courseName); String message = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_ENROLL, studentName, courseName);
@ -318,4 +366,39 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl<SchoolCourseOrderM
return "ORDER" + UUID.randomUUID().toString().replace("-", "").substring(0, 10); return "ORDER" + UUID.randomUUID().toString().replace("-", "").substring(0, 10);
} }
public String generateOrderNum() {
return "DXD" + UUID.randomUUID().toString().replace("-", "").substring(0, 10);
}
@Transactional(rollbackFor = Exception.class)
@Override
public Long businessManagerCreateSchoolCourseOrder(SchoolCourseOrderBusinessVO createReqVO) {
DlDriveSchoolStudent studentByIdNo = schoolStudentService.getStudentByIdNo(createReqVO.getIdCard());
Long userId = null;
if (studentByIdNo == null) {
DlDriveSchoolStudentVO dlDriveSchoolStudentVO = new DlDriveSchoolStudentVO();
dlDriveSchoolStudentVO.setName(createReqVO.getUserName());
dlDriveSchoolStudentVO.setAge(createReqVO.getAge());
dlDriveSchoolStudentVO.setSource("04");
dlDriveSchoolStudentVO.setSourceUserId(SecurityFrameworkUtils.getLoginUserId());
dlDriveSchoolStudentVO.setSex(createReqVO.getUserSex());
dlDriveSchoolStudentVO.setPhone(createReqVO.getUserPhone());
dlDriveSchoolStudentVO.setIdCard(createReqVO.getIdCard());
dlDriveSchoolStudentVO.setIdPhoto(createReqVO.getIdCardImage());
dlDriveSchoolStudentVO.setRegistAddress(createReqVO.getAddress());
String studentId = schoolStudentService.createDlDriveSchoolStudent(dlDriveSchoolStudentVO);
DlDriveSchoolStudent dlDriveSchoolStudent = schoolStudentService.getDlDriveSchoolStudent(studentId);
userId = dlDriveSchoolStudent.getUserId();
} else {
userId = studentByIdNo.getUserId();
}
createReqVO.setUserId(Math.toIntExact(userId));
createReqVO.setOrderNo(generateOrderNum());
schoolCourseOrderMapper.insert(createReqVO);
return userId;
}
} }

View File

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.course.vo;
import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 驾照报名订单 Response VO")
@Data
@ExcelIgnoreUnannotated
public class SchoolCourseOrderBusinessVO extends SchoolCourseOrder {
/**
* 学员身份证号
*/
private String idCard;
/**
* 学员身份证图片
*/
private String idCardImage;
/**
* 学员年龄
*/
private Integer age;
/**
* 户籍地址
*/
private String address;
}

View File

@ -1,9 +1,12 @@
package cn.iocoder.yudao.module.jx.controller.admin; package cn.iocoder.yudao.module.jx.controller.admin;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.jx.core.controller.BaseController; import cn.iocoder.yudao.module.jx.core.controller.BaseController;
import cn.iocoder.yudao.module.jx.domain.DriveContractTest; import cn.iocoder.yudao.module.jx.domain.DriveContractTest;
import cn.iocoder.yudao.module.jx.domain.DriveSchoolContract;
import cn.iocoder.yudao.module.jx.service.IDriveContractTestService; import cn.iocoder.yudao.module.jx.service.IDriveContractTestService;
import cn.iocoder.yudao.module.jx.service.IDriveSchoolContractService;
import cn.iocoder.yudao.module.jx.utils.ExcelUtil; import cn.iocoder.yudao.module.jx.utils.ExcelUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -26,6 +29,9 @@ public class DriveContractTestController extends BaseController
@Autowired @Autowired
private IDriveContractTestService driveContractTestService; private IDriveContractTestService driveContractTestService;
@Autowired
private IDriveSchoolContractService driveSchoolContractService;
/** /**
* 查询合同模板列表 * 查询合同模板列表
*/ */
@ -84,4 +90,18 @@ public class DriveContractTestController extends BaseController
{ {
return toAjax(driveContractTestService.deleteDriveContractTestByIds(ids)); return toAjax(driveContractTestService.deleteDriveContractTestByIds(ids));
} }
@GetMapping(value = "/tenantId/{tenantId}")
@TenantIgnore
public CommonResult getInfoByTenantId(@PathVariable("tenantId") String tenantId)
{
return CommonResult.success(driveContractTestService.selectDriveContractTestByTenantId(tenantId));
}
@PostMapping("/add")
@TenantIgnore
public CommonResult add(@RequestBody DriveSchoolContract driveSchoolContract)
{
return CommonResult.success(driveSchoolContractService.insertDriveSchoolContractNew(driveSchoolContract));
}
} }

View File

@ -4,6 +4,8 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.company.entity.Company;
import cn.iocoder.yudao.module.company.service.CompanyService;
import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder;
import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService; import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService;
import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO; import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO;
@ -51,6 +53,8 @@ public class NewSmallProgramJxOrderController {
private AdminUserApi userApi; private AdminUserApi userApi;
@Resource @Resource
private SchoolCourseOrderService schoolCourseOrderService; private SchoolCourseOrderService schoolCourseOrderService;
@Resource
private CompanyService companyService;
@PostMapping("/offLinePay") @PostMapping("/offLinePay")
@ -121,19 +125,29 @@ public class NewSmallProgramJxOrderController {
@GetMapping("/prepayment") @GetMapping("/prepayment")
@TenantIgnore @TenantIgnore
public Map<String,Object> transactions(String type, String orderId, String orderNo, String payType) throws SignatureException, NoSuchAlgorithmException, InvalidKeyException, IOException { public Map<String,Object> transactions(String type, String orderId, String orderNo, String payType, String tenantId) throws SignatureException, NoSuchAlgorithmException, InvalidKeyException, IOException {
Long userId = SecurityFrameworkUtils.getLoginUserId(); Long userId = SecurityFrameworkUtils.getLoginUserId();
AdminUserRespDTO user = userApi.getUser(userId); AdminUserRespDTO user = userApi.getUser(userId);
String systemCode = "jiaxiao";
// SchoolCourseOrder dbSchoolCourseOrder = schoolCourseOrderService.getSchoolCourseOrder(orderId);
SchoolCourseOrder dbSchoolCourseOrder = schoolCourseOrderService.getSchoolCourseOrder(orderId); SchoolCourseOrder dbSchoolCourseOrder = schoolCourseOrderService.getSchoolCourseOrder(orderId);
if (dbSchoolCourseOrder == null) {
throw new IllegalStateException("订单不存在");
}
Company companyInfo = companyService.getCompanyByTenantIdAndSystemCode(tenantId, systemCode);
if (companyInfo == null) {
throw new IllegalStateException("商户信息不存在");
}
// 统一参数封装 // 统一参数封装
Map<String, Object> params = new HashMap<>(8); Map<String, Object> params = new HashMap<>(8);
params.put("appid", wechatPayConfigs.getJxAppId()); params.put("appid", companyInfo.getAppId());
params.put("mchid", wechatPayConfigs.getMchId()); params.put("mchid", companyInfo.getMchId());
params.put("description", dbSchoolCourseOrder.getCourseName()); params.put("description", dbSchoolCourseOrder.getCourseName());
params.put("out_trade_no", orderNo); params.put("out_trade_no", orderNo);
params.put("notify_url", wechatPayConfigs.getNotifyUrl()); params.put("notify_url", companyInfo.getNotifyUrl());
Map<String, Object> amountMap = new HashMap<>(4); Map<String, Object> amountMap = new HashMap<>(4);
Double amount = 0.0; Double amount = 0.0;
@ -169,7 +183,7 @@ public class NewSmallProgramJxOrderController {
log.info("请求参数 ===> {}" + paramsStr); log.info("请求参数 ===> {}" + paramsStr);
String resStr = wechatPayRequests.wechatHttpPost("https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi",paramsStr); String resStr = wechatPayRequests.wechatHttpPost("https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi",paramsStr);
Map<String, Object> resMap = JSONObject.parseObject(resStr, new TypeReference<Map<String, Object>>(){}); Map<String, Object> resMap = JSONObject.parseObject(resStr, new TypeReference<Map<String, Object>>(){});
Map<String, Object> signMap = paySignMsg(resMap.get("prepay_id").toString(), wechatPayConfigs.getJxAppId(),null); Map<String, Object> signMap = paySignMsg(resMap.get("prepay_id").toString(), companyInfo.getAppId(), companyInfo.getPrivateKeyStr());
return signMap; return signMap;
} }

View File

@ -4,6 +4,9 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.company.entity.Company;
import cn.iocoder.yudao.module.company.service.CompanyService;
import cn.iocoder.yudao.module.company.vo.CompanyRespVO;
import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder;
import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService; import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService;
import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO; import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO;
@ -27,10 +30,7 @@ import javax.annotation.Resource;
import javax.annotation.security.PermitAll; import javax.annotation.security.PermitAll;
import java.io.IOException; import java.io.IOException;
import java.security.*; import java.security.*;
import java.util.Base64; import java.util.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
@Slf4j @Slf4j
@RestController @RestController
@ -53,6 +53,9 @@ public class SmallProgramJxOrderController {
@Resource @Resource
private SchoolCourseOrderService schoolCourseOrderService; private SchoolCourseOrderService schoolCourseOrderService;
@Resource
private CompanyService companyService;
@PostMapping("/offLinePay") @PostMapping("/offLinePay")
@TenantIgnore @TenantIgnore
@ -89,7 +92,7 @@ public class SmallProgramJxOrderController {
@PostMapping("/onLinePay") @PostMapping("/onLinePay")
@TenantIgnore @TenantIgnore
public Map<String,String> userPayOnLine(@RequestBody SchoolCourseOrder schoolCourseOrder) { public Map<String, String> userPayOnLine(@RequestBody SchoolCourseOrder schoolCourseOrder) {
SchoolCourseOrderVO schoolCourseOrderVO = BeanUtils.toBean(schoolCourseOrder, SchoolCourseOrderVO.class); SchoolCourseOrderVO schoolCourseOrderVO = BeanUtils.toBean(schoolCourseOrder, SchoolCourseOrderVO.class);
schoolCourseOrderVO.setPaymentStatus("0"); schoolCourseOrderVO.setPaymentStatus("0");
@ -113,35 +116,46 @@ public class SmallProgramJxOrderController {
String orderId = schoolCourseOrderService.createSchoolCourseOrder(schoolCourseOrderVO); String orderId = schoolCourseOrderService.createSchoolCourseOrder(schoolCourseOrderVO);
SchoolCourseOrder dbSchoolCourseOrder = schoolCourseOrderService.getSchoolCourseOrder(orderId); SchoolCourseOrder dbSchoolCourseOrder = schoolCourseOrderService.getSchoolCourseOrder(orderId);
String orderNo = dbSchoolCourseOrder.getOrderNo(); String orderNo = dbSchoolCourseOrder.getOrderNo();
Map<String,String> resMap = new HashMap<>(); Map<String, String> resMap = new HashMap<>();
resMap.put("orderNo",orderNo); resMap.put("orderNo", orderNo);
resMap.put("orderId",orderId); resMap.put("orderId", orderId);
return resMap; return resMap;
} }
@GetMapping("/prepayment") @GetMapping("/prepayment")
@TenantIgnore @TenantIgnore
public Map<String,Object> transactions(String type, String orderId, String orderNo, String payType) throws SignatureException, NoSuchAlgorithmException, InvalidKeyException, IOException { public Map<String, Object> transactions(String type, String orderId, String orderNo, String payType, String tenantId) throws SignatureException, NoSuchAlgorithmException, InvalidKeyException, IOException {
Long userId = SecurityFrameworkUtils.getLoginUserId(); Long userId = SecurityFrameworkUtils.getLoginUserId();
AdminUserRespDTO user = userApi.getUser(userId); AdminUserRespDTO user = userApi.getUser(userId);
String systemCode = "jiaxiao";
// SchoolCourseOrder dbSchoolCourseOrder = schoolCourseOrderService.getSchoolCourseOrder(orderId);
// Company companyInfo = companyService.getCompanyByTenantIdAndSystemCode(tenantId, systemCode);
SchoolCourseOrder dbSchoolCourseOrder = schoolCourseOrderService.getSchoolCourseOrder(orderId); SchoolCourseOrder dbSchoolCourseOrder = schoolCourseOrderService.getSchoolCourseOrder(orderId);
if (dbSchoolCourseOrder == null) {
throw new IllegalStateException("订单不存在");
}
Company companyInfo = companyService.getCompanyByTenantIdAndSystemCode(tenantId, systemCode);
if (companyInfo == null) {
throw new IllegalStateException("商户信息不存在");
}
// 统一参数封装 // 统一参数封装
Map<String, Object> params = new HashMap<>(8); Map<String, Object> params = new HashMap<>(8);
params.put("appid", wechatPayConfigs.getJxAppId()); params.put("appid", companyInfo.getAppId());
params.put("mchid", wechatPayConfigs.getMchId()); params.put("mchid", companyInfo.getMchId());
params.put("description", dbSchoolCourseOrder.getCourseName()); params.put("description", dbSchoolCourseOrder.getCourseName());
params.put("out_trade_no", orderNo); params.put("out_trade_no", orderNo);
params.put("notify_url", wechatPayConfigs.getNotifyUrl()); params.put("notify_url", companyInfo.getNotifyUrl());
Map<String, Object> amountMap = new HashMap<>(4); Map<String, Object> amountMap = new HashMap<>(4);
Double amount = 0.0; Double amount = 0.0;
// 金额单位为分 // 金额单位为分
amount = dbSchoolCourseOrder.getReserveMoney().doubleValue()*100; amount = dbSchoolCourseOrder.getReserveMoney().doubleValue() * 100;
if (payType.equals("2")){ if (payType.equals("2")) {
amount = dbSchoolCourseOrder.getReserveMoney().doubleValue()*100; amount = dbSchoolCourseOrder.getReserveMoney().doubleValue() * 100;
} }
amountMap.put("total", amount.intValue()); amountMap.put("total", amount.intValue());
//人民币 //人民币
@ -168,13 +182,14 @@ public class SmallProgramJxOrderController {
params.put("scene_info", sceneInfoMap); params.put("scene_info", sceneInfoMap);
String paramsStr = JSON.toJSONString(params); String paramsStr = JSON.toJSONString(params);
log.info("请求参数 ===> {}" + paramsStr); log.info("请求参数 ===> {}" + paramsStr);
String resStr = wechatPayRequests.wechatHttpPost("https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi",paramsStr); String resStr = wechatPayRequests.wechatHttpPost("https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi", paramsStr);
Map<String, Object> resMap = JSONObject.parseObject(resStr, new TypeReference<Map<String, Object>>(){}); Map<String, Object> resMap = JSONObject.parseObject(resStr, new TypeReference<Map<String, Object>>() {
Map<String, Object> signMap = paySignMsg(resMap.get("prepay_id").toString(), wechatPayConfigs.getJxAppId(),null); });
Map<String, Object> signMap = paySignMsg(resMap.get("prepay_id").toString(), companyInfo.getAppId(), companyInfo.getPrivateKeyStr());
return signMap; return signMap;
} }
String buildMessage(String appId, String timestamp,String nonceStr,String prepay_id) { String buildMessage(String appId, String timestamp, String nonceStr, String prepay_id) {
return appId + "\n" return appId + "\n"
+ timestamp + "\n" + timestamp + "\n"
@ -182,15 +197,15 @@ public class SmallProgramJxOrderController {
+ prepay_id + "\n"; + prepay_id + "\n";
} }
String sign(byte[] message,String privateKeyStr) throws NoSuchAlgorithmException, SignatureException, IOException, InvalidKeyException { String sign(byte[] message, String privateKeyStr) throws NoSuchAlgorithmException, SignatureException, IOException, InvalidKeyException {
//签名方式 //签名方式
Signature sign = Signature.getInstance("SHA256withRSA"); Signature sign = Signature.getInstance("SHA256withRSA");
//私钥通过MyPrivateKey来获取这是个静态类可以接调用方法 需要的是_key.pem文件的绝对路径配上文件名 //私钥通过MyPrivateKey来获取这是个静态类可以接调用方法 需要的是_key.pem文件的绝对路径配上文件名
PrivateKey privateKey =null; PrivateKey privateKey = null;
if (StringUtils.isNotEmpty(privateKeyStr)){ if (StringUtils.isNotEmpty(privateKeyStr)) {
privateKey = PemUtil.loadPrivateKey(privateKeyStr); privateKey = PemUtil.loadPrivateKey(privateKeyStr);
}else { } else {
privateKey = wechatPayConfigs.getPrivateKey(wechatPayConfigs.getKeyPemPath()); privateKey = wechatPayConfigs.getPrivateKey(wechatPayConfigs.getKeyPemPath());
} }
sign.initSign(privateKey); sign.initSign(privateKey);
@ -198,16 +213,16 @@ public class SmallProgramJxOrderController {
return Base64.getEncoder().encodeToString(sign.sign()); return Base64.getEncoder().encodeToString(sign.sign());
} }
private Map<String, Object> paySignMsg(String prepayId,String appId,String privateKeyStr) throws IOException, NoSuchAlgorithmException, InvalidKeyException, SignatureException { private Map<String, Object> paySignMsg(String prepayId, String appId, String privateKeyStr) throws IOException, NoSuchAlgorithmException, InvalidKeyException, SignatureException {
long timeMillis = System.currentTimeMillis(); long timeMillis = System.currentTimeMillis();
String timeStamp = timeMillis/1000+""; String timeStamp = timeMillis / 1000 + "";
String nonceStr = timeMillis+""; String nonceStr = timeMillis + "";
String packageStr = "prepay_id="+prepayId; String packageStr = "prepay_id=" + prepayId;
// 公共参数 // 公共参数
Map<String, Object> resMap = new HashMap<>(); Map<String, Object> resMap = new HashMap<>();
resMap.put("nonceStr",nonceStr); resMap.put("nonceStr", nonceStr);
resMap.put("timeStamp",timeStamp); resMap.put("timeStamp", timeStamp);
resMap.put("appId",appId); resMap.put("appId", appId);
resMap.put("package", packageStr); resMap.put("package", packageStr);
// 使用字段appIdtimeStampnonceStrpackage进行签名 // 使用字段appIdtimeStampnonceStrpackage进行签名
//从下往上依次生成 //从下往上依次生成

View File

@ -86,6 +86,60 @@
dsp.create_time DESC; -- 再按创建时间降序 dsp.create_time DESC; -- 再按创建时间降序
</select> </select>
<select id="pageProcessNew" resultType="cn.iocoder.yudao.module.course.vo.ProcessVO">
SELECT
dsp.*,
dss.id_card AS studentIdCard,
sysu.nickname AS updateName
FROM drive_school_process dsp
LEFT JOIN drive_school_student dss ON dss.user_id = dsp.user_id
LEFT JOIN system_users sysu on sysu.id = dsp.updater
<where>
dsp.deleted = 0 AND dsp.subject in (2,3)
<if test="entity.coachName != null and entity.coachName != '' "> and dsp.coach_name like concat('%', #{entity.coachName}, '%')</if>
<if test="entity.userName != null and entity.userName != '' "> and dsp.user_name like concat('%', #{entity.userName}, '%')</if>
<if test="entity.courseName != null and entity.courseName != '' "> and dsp.name like concat('%', #{entity.courseName}, '%')</if>
<if test="entity.userId != null "> and dsp.user_id = #{entity.userId}</if>
<if test="entity.courseId != null and entity.courseId != '' "> and dsp.course_id = #{entity.courseId}</if>
<if test="entity.examStatus != null ">and dsp.exam_status = #{entity.examStatus}</if>
<choose>
<when test="entity.financePass == true">
AND dsp.finance_pass = 1
</when>
<when test="entity.financePass == false">
AND dsp.finance_pass = 0
</when>
<when test="entity.financePass == null">
AND dsp.finance_pass IS NULL
</when>
</choose>
<if test="entity.studentIdCard != null and entity.studentIdCard != '' ">
<choose>
<!-- 精确匹配当输入18位时 -->
<when test="entity.studentIdCard.length() == 18">
AND dss.id_card = #{entity.studentIdCard}
</when>
<!-- 后4位匹配当输入正好4位时 -->
<when test="entity.studentIdCard.length() == 4">
AND RIGHT(dss.id_card, 4) = #{entity.studentIdCard}
</when>
<!-- 模糊搜索当输入大于4位但不足18位时 -->
<otherwise>
AND dss.id_card LIKE concat('%', #{entity.studentIdCard}, '%')
</otherwise>
</choose>
</if>
</where>
ORDER BY
(CASE
WHEN dsp.exam_status = '1' AND dsp.finance_pass IS NULL THEN 1 -- 优先级最高
WHEN dsp.exam_status = '9' THEN 2
WHEN dsp.status = '1' THEN 2
ELSE 4
END),
dsp.update_time DESC; -- 再按创建时间降序
</select>
<select id="getProcessList" resultType="cn.iocoder.yudao.module.course.entity.Process"> <select id="getProcessList" resultType="cn.iocoder.yudao.module.course.entity.Process">
SELECT SELECT
* *

View File

@ -11,28 +11,36 @@
<select id="queryPage" resultType="cn.iocoder.yudao.module.course.vo.SchoolCommissionVO"> <select id="queryPage" resultType="cn.iocoder.yudao.module.course.vo.SchoolCommissionVO">
SELECT SELECT
main.*, main.*,
dsc.name AS courseName, dsc.name AS courseName,
dsc.type AS courseType dsc.type AS courseType
FROM FROM
drive_school_commission main drive_school_commission main
LEFT JOIN drive_school_course dsc ON main.course_id = dsc.id AND dsc.deleted = 0 LEFT JOIN drive_school_course dsc ON main.course_id = dsc.id AND dsc.deleted = 0
<where> <where>
main.deleted = 0 main.deleted = 0
<if test="entity.coachName != null and entity.coachName != '' "> and main.coach_name like concat('%', #{entity.coachName}, '%')</if> <if test="entity.coachName != null and entity.coachName != '' ">and main.coach_name like concat('%',
<if test="entity.studentName != null and entity.studentName != '' "> and main.student_name like concat('%', #{entity.studentName}, '%')</if> #{entity.coachName}, '%')
<if test="entity.checkName != null and entity.checkName != '' "> and main.check_name like concat('%', #{entity.checkName}, '%')</if> </if>
<if test="entity.courseName != null and entity.courseName != '' "> and dsc.name like concat('%', #{entity.courseName}, '%')</if> <if test="entity.studentName != null and entity.studentName != '' ">and main.student_name like concat('%',
#{entity.studentName}, '%')
</if>
<if test="entity.checkName != null and entity.checkName != '' ">and main.check_name like concat('%',
#{entity.checkName}, '%')
</if>
<if test="entity.courseName != null and entity.courseName != '' ">and dsc.name like concat('%',
#{entity.courseName}, '%')
</if>
</where> </where>
order by main.create_time desc order by main.create_time desc
</select> </select>
<select id="selectByCoachId" resultType="cn.iocoder.yudao.module.course.entity.SchoolCommission"> <select id="selectByCoachId" resultType="cn.iocoder.yudao.module.course.entity.SchoolCommission">
SELECT SELECT
dsc.* dsc.*
FROM FROM
drive_school_commission dsc drive_school_commission dsc
WHERE WHERE
dsc.deleted = 0 dsc.deleted = 0
<if test="coachId != null and coachId != ''"> <if test="coachId != null and coachId != ''">
AND dsc.coach_user_id = #{coachId} AND dsc.coach_user_id = #{coachId}
</if> </if>
@ -44,4 +52,4 @@ order by main.create_time desc
</if> </if>
ORDER BY dsc.create_time DESC ORDER BY dsc.create_time DESC
</select> </select>
</mapper> </mapper>

View File

@ -92,4 +92,30 @@
ORDER BY create_time DESC ORDER BY create_time DESC
LIMIT 1 LIMIT 1
</select> </select>
<insert id="createStudentUsers" parameterType="cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO" useGeneratedKeys="true" keyProperty="id">
INSERT INTO system_users (username,
password,
status,
nickname,
user_age,
sex,
mobile,
id_card,
id_card_image,
create_time,
deleted)
VALUES (#{username},
#{password},
#{status},
#{nickname},
#{userAge},
#{sex},
#{mobile},
#{idCard},
#{idCardImage},
#{createTime},
#{deleted})
</insert>
</mapper> </mapper>