Commit 05c3ab8d by 邓敏

Merge branch '2.7.1人脸识别版本' into websocker

2 parents 99ef83c5 2db05a18
Showing with 512 additions and 154 deletions
......@@ -5,10 +5,7 @@ import com.subsidy.common.ResponseData;
import com.subsidy.common.ResponseVO;
import com.subsidy.common.interceptor.LoginRequired;
import com.subsidy.dto.administer.*;
import com.subsidy.model.AdministerDO;
import com.subsidy.model.ExerciseDoneHistoryDO;
import com.subsidy.model.ExerciseDoneResultDO;
import com.subsidy.model.MemberDO;
import com.subsidy.model.*;
import com.subsidy.service.AdministerService;
import com.subsidy.util.ConstantUtils;
import io.swagger.annotations.Api;
......@@ -91,7 +88,7 @@ public class AdministerController {
@PostMapping("classSummary")
@ApiOperation("班级详情--数据概览 id 班级id ")
@LoginRequired
// @LoginRequired
public ResponseVO classSummary(@RequestBody ClassDetailDTO classDetailDTO){
return ResponseData.generateCreatedResponse(0,administerService.classSummary(classDetailDTO));
}
......@@ -233,6 +230,12 @@ public class AdministerController {
return ResponseData.generateCreatedResponse(0,administerService.imageCheckDetail(classDetailDTO));
}
@PostMapping("getMemberCheckDetail")
@ApiOperation("查看某个学生的验证详情 memberId 学员id classId")
@LoginRequired
public ResponseVO getMemberCheckDetail(@RequestBody ImageCheckRecordDO imageCheckRecordDO){
return ResponseData.generateCreatedResponse(0,administerService.getMemberCheckDetail(imageCheckRecordDO));
}
@PostMapping("exportZip")
@ApiOperation("下载压缩包 id 班级id")
......@@ -257,9 +260,17 @@ public class AdministerController {
}
@PostMapping("manageMember")
@ApiOperation("用户管理 {pageSize pageNum userName:名字 【废弃】}")
@ApiOperation("用户管理 {pageSize pageNum userName:名字 }")
@LoginRequired
public ResponseVO manageMember(@RequestBody ManageMemberDTO manageMemberDTO){
return ResponseData.generateCreatedResponse(0,administerService.manageMember(manageMemberDTO));
}
@PostMapping("exportManageMember")
@ApiOperation("导出认证信息 {pageSize pageNum userName:名字 } ")
@LoginRequired
public void exportManageMember(@RequestBody ManageMemberDTO manageMemberDTO){
administerService.exportManageMember(manageMemberDTO);
}
}
......@@ -10,6 +10,7 @@ import com.subsidy.service.AnsweringQuestionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -41,6 +42,7 @@ public class AnsweringQuestionController {
@PostMapping("addQuestion")
@ApiOperation("新增答疑 {classId askId title}")
@LoginRequired
@CachePut(value = "ResultData" ,key = "'classId_'+#answeringQuestionDO.getClassId()")
public ResponseVO addQuestion(@RequestBody AnsweringQuestionDO answeringQuestionDO){
return ResponseData.generateCreatedResponse(0,answeringQuestionService.addQuestion(answeringQuestionDO));
}
......@@ -48,6 +50,7 @@ public class AnsweringQuestionController {
@PostMapping("deleteQuestion")
@ApiOperation(" 删除答疑 {id}")
@LoginRequired
@CachePut(value = "ResultData" ,key = "'classId_'+#answeringQuestionDO.getClassId()")
public ResponseVO deleteQuestion(@RequestBody AnsweringQuestionDO answeringQuestionDO){
return ResponseData.generateCreatedResponse(0,answeringQuestionService.deleteQuestion(answeringQuestionDO));
}
......@@ -55,6 +58,7 @@ public class AnsweringQuestionController {
@PostMapping("updateQuestion")
@ApiOperation("编辑答疑 {id answerId answer}")
@LoginRequired
@CachePut(value = "ResultData" ,key = "'classId_'+#answeringQuestionDO.getClassId()")
public ResponseVO updateQuestion(@RequestBody AnsweringQuestionDO answeringQuestionDO){
return ResponseData.generateCreatedResponse(0, answeringQuestionService.updateQuestion(answeringQuestionDO));
}
......
......@@ -8,6 +8,7 @@ import com.subsidy.dto.category.GetCategoriesDTO;
import com.subsidy.model.CategoryDO;
import com.subsidy.service.CategoryService;
import com.subsidy.util.ConstantUtils;
import com.subsidy.vo.catagory.GetCategoriesVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -25,7 +26,7 @@ import org.springframework.web.bind.annotation.RestController;
* @since 2021-10-11
*/
@RestController
@Api(tags = "类目")
@Api(tags = "行业领域")
@RequestMapping("/category")
public class CategoryController {
......@@ -33,37 +34,37 @@ public class CategoryController {
private CategoryService categoryService;
@PostMapping("getCategories")
@ApiOperation("查询类目 name 类目名称 companyId pageSize pageNum")
@ApiOperation("查询行业领域 name 类目名称 companyId pageSize pageNum")
@LoginRequired
public ResponseVO getCategories(@RequestBody GetCategoriesDTO getCategoriesDTO){
return ResponseData.generateCreatedResponse(0,categoryService.getCategories(getCategoriesDTO));
}
@PostMapping("getAll")
@ApiOperation("查询所有类目 companyId")
@ApiOperation("查询所有类目【是否还有用?】 companyId")
public ResponseVO getAll(@RequestBody GetCategoriesDTO getCategoriesDTO){
return ResponseData.generateCreatedResponse(0,categoryService.getAll(getCategoriesDTO));
}
@PostMapping("addCategory")
@ApiOperation("新增类目 name companyId")
@ApiOperation("新增行业领域 name companyId categoryDOS[name 行业领域名称]")
@LoginRequired
public ResponseVO addCategory(@RequestBody CategoryDO categoryDO){
return ResponseData.generateCreatedResponse(0,categoryService.addCategory(categoryDO));
public ResponseVO addCategory(@RequestBody GetCategoriesVO getCategoriesVO){
return ResponseData.generateCreatedResponse(0,categoryService.addCategory(getCategoriesVO));
}
@PostMapping("deleteCategory")
@ApiOperation("删除类目 id")
@ApiOperation("删除一级行业领域 id")
@LoginRequired
public ResponseVO deleteCategory(@RequestBody CategoryDO categoryDO){
return ResponseData.generateCreatedResponse(0,categoryService.deleteCategory(categoryDO));
}
@PostMapping("updateCategory")
@ApiOperation("修改类目 id name companyId")
@ApiOperation("修改行业领域 id name companyId categoryDOS[name 行业领域名称]")
@LoginRequired
public ResponseVO updateCategory(@RequestBody CategoryDO categoryDO){
return ResponseData.generateCreatedResponse(0,categoryService.updateCategory(categoryDO));
public ResponseVO updateCategory(@RequestBody GetCategoriesVO getCategoriesVO){
return ResponseData.generateCreatedResponse(0,categoryService.updateCategory(getCategoriesVO));
}
}
......@@ -16,6 +16,7 @@ import com.subsidy.util.ConstantUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -59,7 +60,10 @@ public class ClassDictController {
}
@PostMapping("updateClass")
@ApiOperation("修改班级 id companyId className classTypeId startDate endDate")
@ApiOperation("修改班级 id className classTypeId startDate endDate isOrder 是否按顺序播放 isFastPlay 是否允许快进 " +
"testRule:测试规则 limitHour 学习上限时长 imageClassCheck:首次进入班级时人脸验证 imageTestCheck:测试前人脸识别验证" +
"activityDetection:活跃度检测开启/关闭 activityDetectionMethod:活跃度检测方式 firstDragAllowed:首次播放允许拖曳" +
"firstSpeedAllowed:首次播放允许倍速 playSnap 课程抓拍 ")
@LoginRequired
public ResponseVO updateClass(@RequestBody ClassDictDO classDictDO){
return ResponseData.generateCreatedResponse(0,classDictService.updateClass(classDictDO));
......
......@@ -57,12 +57,28 @@ public class CompanyDictController {
}
@PostMapping("updateCompany")
@ApiOperation("修改企业 id superviseName 第三方监管名称 accountName:账号 logo companyName:企业名称 address 企业所在地 shortName 简称 banner:标语 field[]:领域 role 1:超级管理员 2:普通成员")
@ApiOperation("修改企业 id superviseName 第三方监管名称 accountName:账号 logo companyName:企业名称 address 企业所在地 shortName 简称 " +
"banner:标语 field[]:领域 role 1:超级管理员 2:普通成员 ")
@LoginRequired
public ResponseVO updateAdminister(@RequestBody AddCompanyDTO addCompanyDTO){
return ResponseData.generateCreatedResponse(0,companyDictService.updateAdminister(addCompanyDTO));
}
@PostMapping("updateCompanySettings")
@ApiOperation("修改企业设置 id timeLimit:上课时间不晚于23:30,不早于6:30" +
"ipAddressRecord: 签到时记录IP地址 deviceNoRecord: 设备类型")
@LoginRequired
public ResponseVO updateCompanySettings(@RequestBody CompanyDictDO companyDictDO){
return ResponseData.generateCreatedResponse(0,companyDictService.updateCompanySettings(companyDictDO));
}
@PostMapping("getCompanyInfo")
@ApiOperation("获取公司配置信息 id ")
@LoginRequired
public ResponseVO getCompanyInfo(@RequestBody CompanyDictDO companyDictDO){
return ResponseData.generateCreatedResponse(0,companyDictService.getCompanyInfo(companyDictDO));
}
@PostMapping("getAllCompany")
@ApiOperation("获取全部企业 {companyName}")
@LoginRequired
......
......@@ -15,6 +15,7 @@ import com.subsidy.util.ConstantUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -61,6 +62,7 @@ public class ExerciseDictController {
@ApiOperation("提交答案 {paperId 卷子id memberId 成员id classId课程 courseId 课程id memberExerciseVOS [ id selectAnswer ] length:做题时长} ")
@LoginRequired
@TimeRequired
@CachePut(value = "ResultData" ,key = "'classId_'+#submitDTO.getClassId()")
public ResponseVO submit(@RequestBody SubmitDTO submitDTO){
return ResponseData.generateCreatedResponse(0,exerciseDictService.submit(submitDTO));
}
......
......@@ -4,6 +4,8 @@ package com.subsidy.controller;
import com.subsidy.common.ResponseData;
import com.subsidy.common.ResponseVO;
import com.subsidy.common.interceptor.LoginRequired;
import com.subsidy.common.interceptor.TimeRequired;
import com.subsidy.dto.image.CheckResultDTO;
import com.subsidy.dto.image.ImageCheckDTO;
import com.subsidy.model.ImageCheckRecordDO;
import com.subsidy.service.ImageCheckRecordService;
......@@ -41,11 +43,37 @@ public class ImageCheckRecordController {
}
@PostMapping("imageCheck")
@ApiOperation("人身核验 id 用户id nonce ")
@ApiOperation("课程/测评人身核验(权威库:身份证) PC端 id 用户id classId 班级id ")
@TimeRequired
public ResponseVO imageCheck(@RequestBody ImageCheckDTO imageCheckDTO) throws Exception {
return ResponseData.generateCreatedResponse(0, imageCheckRecordService.imageCheck(imageCheckDTO));
}
@PostMapping("h5ImageCheck")
@ApiOperation("课程/测评人脸核验(权威库:身份证) 微信浮层H5 id 用户id classId 班级id")
@TimeRequired
public ResponseVO h5CheckResult(@RequestBody ImageCheckDTO imageCheckDTO)throws Exception{
return ResponseData.generateCreatedResponse(0,imageCheckRecordService.h5CheckResult(imageCheckDTO));
}
@PostMapping("loginCheck")
@ApiOperation("签到页做人脸核验 (权威库:身份证) PC端 id 用户id")
@TimeRequired
public ResponseVO loginCheck(@RequestBody ImageCheckDTO imageCheckDTO)throws Exception{
return ResponseData.generateCreatedResponse(0,imageCheckRecordService.loginCheck(imageCheckDTO));
}
@PostMapping("h5LoginCheck")
@ApiOperation("签到页做人脸核验 (权威库:身份证) PC端 id 用户id")
@TimeRequired
public ResponseVO h5LoginCheck(@RequestBody ImageCheckDTO imageCheckDTO)throws Exception{
return ResponseData.generateCreatedResponse(0,imageCheckRecordService.h5LoginCheck(imageCheckDTO));
}
@PostMapping("checkResult")
@ApiOperation("人脸验证结果 存图片 id 订单号 ")
public ResponseVO checkResult(@RequestBody CheckResultDTO checkResultDTO)throws Exception{
return ResponseData.generateCreatedResponse(0,imageCheckRecordService.checkResult(checkResultDTO));
}
}
......@@ -110,7 +110,7 @@ public class MemberController {
@PostMapping("myCourses")
@ApiOperation("手机端:我的学习--课程 memberId 学员id status 状态 0:全部 1:进行中 2:待开始 3:已完成 ")
// @LoginRequired
@LoginRequired
@TimeRequired
public ResponseVO myCourses(@RequestBody MyCoursesDTO myCoursesDTO){
return ResponseData.generateCreatedResponse(0,memberService.myCourses(myCoursesDTO));
......@@ -118,7 +118,7 @@ public class MemberController {
@PostMapping("contentVod")
@ApiOperation("手机端:目录+视频 classId 班级id courseId 课程 memberId 学员id")
// @LoginRequired
@LoginRequired
@TimeRequired
public ResponseVO contentVod(@RequestBody ContentMemberDTO contentVodDTO){
return ResponseData.generateCreatedResponse(0,memberService.contentVod(contentVodDTO));
......
......@@ -13,6 +13,7 @@ import com.subsidy.util.ConstantUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -35,16 +36,17 @@ public class SignInRecordController {
private SignInRecordService signInRecordService;
@PostMapping("getMemberSignInfo")
@ApiOperation("获取某个成员的签到记录 id 成员id pageSize pageNum")
@ApiOperation("获取某个成员的签到记录 id 成员id classId 班级id pageSize pageNum")
@LoginRequired
public ResponseVO getMemberSignInfo(@RequestBody GetMemberSignInfoDTO getMemberSignInfoDTO) {
return ResponseData.generateCreatedResponse(0, signInRecordService.getMemberSignInfo(getMemberSignInfoDTO));
}
@PostMapping("signIn")
@ApiOperation("签到 memberId")
@LoginRequired
@ApiOperation("签到 memberId deviceNo:设备号")
// @LoginRequired
@TimeRequired
@CachePut(value = "ResultData" ,key = "'classId_'+#signInRecordDO.getClassId()")
public ResponseVO signIn(@RequestBody SignInRecordDO signInRecordDO) {
return ResponseData.generateCreatedResponse(0, signInRecordService.signIn(signInRecordDO));
}
......@@ -58,7 +60,7 @@ public class SignInRecordController {
@PostMapping("signInStatus")
@ApiOperation("判断学生当天有没有打卡 {memberId 学生id}")
@LoginRequired
// @LoginRequired
@TimeRequired
public ResponseVO signInStatus(@RequestBody SignInRecordDO signInRecordDO) {
return ResponseData.generateCreatedResponse(0, signInRecordService.signInStatus(signInRecordDO));
......
......@@ -80,7 +80,6 @@ public class VodPlayHistoryController {
vodPlayHistoryService.playLengthFix(remainSecondsDTO);
}
@PostMapping("testPlays")
@ApiOperation("解决有交叉时间的数据")
public ResponseVO testPlays(@RequestBody VodPlayHistoryDO vodPlayHistoryDO){
......
package com.subsidy.dto.image;
import lombok.Data;
@Data
public class CheckResultDTO {
private String id;
}
......@@ -7,12 +7,6 @@ public class ImageCheckDTO {
private Long id;
private String imageBase64;
private Long classId;
private Long paperId;
private String nonce ;
}
......@@ -9,6 +9,8 @@ public class GetMemberSignInfoDTO {
private Integer pageNum;
private Long classId;
private Long id;
}
package com.subsidy.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.subsidy.model.CategoryDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.subsidy.vo.catagory.GetCategoriesVO;
import org.springframework.stereotype.Repository;
import java.util.List;
......@@ -19,8 +21,15 @@ public interface CategoryMapper extends BaseMapper<CategoryDO> {
/**
* 查看某个课程下的所有类目
* 查看某个课程下的所有行业领域
*/
List<CategoryDO> queryCourseCategory(Long courseId);
/**
* 查看行业领域
* 公司id为空的话就查平台的,否则传公司的行业领域
*/
IPage<GetCategoriesVO> getCategories(IPage page,Long companyId,String name);
}
......@@ -2,8 +2,11 @@ package com.subsidy.mapper;
import com.subsidy.model.ImageCheckRecordDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.subsidy.vo.image.GetMemberCheckDetailVO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* 实名验证记录表 Mapper 接口
......@@ -12,7 +15,13 @@ import org.springframework.stereotype.Repository;
* @author DengMin
* @since 2022-07-14
*/
@Repository
@Repository
public interface ImageCheckRecordMapper extends BaseMapper<ImageCheckRecordDO> {
/**
* 获取某个人某个课程的验证记录
*/
List<GetMemberCheckDetailVO> getMemberCheckDetail(Long memberId, Long classId);
}
......@@ -44,5 +44,5 @@ public interface VodDictMapper extends BaseMapper<VodDictDO> {
/**
* 重复数据查找
*/
List<VodPlayStateVO> testPlays(Long memberId);
List<VodPlayStateVO> testPlays(Long memberId,Long classId);
}
......@@ -26,6 +26,11 @@ public class CategoryDO extends BaseModel {
private Long id;
/**
* 父id
*/
private Long parentId;
/**
* 企业id
*/
private Long companyId;
......
......@@ -68,10 +68,10 @@ public class ClassDictDO extends BaseModel {
*/
private Integer isFastPlay;
///**
// * 班级状态
// */
//private String openStatus;
/**
* 班级状态
*/
private String openStatus;
/**
* 测试规则
......@@ -118,6 +118,4 @@ public class ClassDictDO extends BaseModel {
*/
private Integer playSnap;
}
......@@ -60,4 +60,20 @@ public class CompanyDictDO extends BaseModel {
*/
private String superviseName;
/**
* 上课时间不晚于23:30,不早于6:30
*/
private Integer timeLimit;
/**
* 签到时记录IP地址
*/
private Integer ipAddressRecord;
/**
* 签到时记录设备型号
*/
private Integer deviceNoRecord;
}
......@@ -26,7 +26,7 @@ public class ImageCheckRecordDO extends BaseModel {
private Long id;
/**
* 班级id
* 班级
*/
private Long classId;
......@@ -36,12 +36,39 @@ public class ImageCheckRecordDO extends BaseModel {
private Long memberId;
/**
* 请求id
* 活体检测得分
*/
private String requestId;
private String liveRate;
/**
* 图片地址
* 人脸检测得分
*/
private String imageUrl;
private String similarity;
/**
* 刷脸时间
*/
private String occurredTime;
/**
* 图片
*/
private String photo;
/**
* 流水号
*/
private String bizSeqNo;
/**
* 检测类型 检测类型 1,权威库 0照片比对
*/
private Integer checkType;
/**
* 检测地点 1,签到页 0 班级内
*/
private Integer checkPlace;
}
......@@ -46,5 +46,15 @@ public class SignInRecordDO extends BaseModel {
@ExcelColumnUtil(value = "sign_in_date", col = 4)
private LocalDateTime signInDate;
/**
* 地址
*/
private String ipAddress;
/**
* 设备号
*/
private String deviceNo;
}
......@@ -6,8 +6,10 @@ import com.subsidy.dto.administer.*;
import com.subsidy.model.AdministerDO;
import com.subsidy.model.ExerciseDoneHistoryDO;
import com.subsidy.model.ExerciseDoneResultDO;
import com.subsidy.model.ImageCheckRecordDO;
import com.subsidy.vo.administer.*;
import com.subsidy.vo.classdict.ClassDetailVO;
import com.subsidy.vo.image.GetMemberCheckDetailVO;
import com.subsidy.vo.member.ClassSignVO;
import com.subsidy.vo.sign.AnswerRecordVO;
import org.springframework.web.multipart.MultipartFile;
......@@ -74,6 +76,8 @@ public interface AdministerService extends IService<AdministerDO> {
IPage<ImageCheckDetailVO> imageCheckDetail(ClassDetailDTO classDetailDTO);
List<GetMemberCheckDetailVO> getMemberCheckDetail(ImageCheckRecordDO imageCheckRecordDO);
void export(ClassDetailDTO classDetailDTO)throws Exception;
IPage memberStudy(MemberStudyLogDTO memberStudyLogDTO);
......@@ -83,4 +87,6 @@ public interface AdministerService extends IService<AdministerDO> {
String importMember(Long companyId, MultipartFile multipartFile)throws Exception;
IPage<ManageMemberVO> manageMember(ManageMemberDTO manageMemberDTO);
void exportManageMember(ManageMemberDTO manageMemberDTO);
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.subsidy.dto.category.GetCategoriesDTO;
import com.subsidy.model.CategoryDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.subsidy.vo.catagory.GetCategoriesVO;
import java.util.List;
......@@ -17,13 +18,13 @@ import java.util.List;
*/
public interface CategoryService extends IService<CategoryDO> {
IPage<CategoryDO> getCategories(GetCategoriesDTO getCategoriesDTO);
IPage<GetCategoriesVO> getCategories(GetCategoriesDTO getCategoriesDTO);
List<CategoryDO> getAll(GetCategoriesDTO getCategoriesDTO);
String addCategory(CategoryDO categoryDO);
String addCategory(GetCategoriesVO getCategoriesVO);
String deleteCategory(CategoryDO categoryDO);
String updateCategory(CategoryDO categoryDO);
String updateCategory(GetCategoriesVO getCategoriesVO);
}
......@@ -33,6 +33,10 @@ public interface CompanyDictService extends IService<CompanyDictDO> {
String updateAdminister(AddCompanyDTO addCompanyDTO);
String updateCompanySettings(CompanyDictDO companyDictDO);
CompanyDictDO getCompanyInfo(CompanyDictDO companyDictDO);
List<GetAllCompanyVO> getAllCompany(CompanyDictDO companyDictDO);
IPage<GetCompanyMembersVO> getCompanyMembers(GetCompanyMembersDTO getCompanyMembersDTO);
......
package com.subsidy.service;
import com.subsidy.dto.image.CheckResultDTO;
import com.subsidy.dto.image.ImageCheckDTO;
import com.subsidy.model.ImageCheckRecordDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.subsidy.vo.token.SendIdCardInfoVO;
import java.util.List;
......@@ -18,6 +20,14 @@ public interface ImageCheckRecordService extends IService<ImageCheckRecordDO> {
List<ImageCheckRecordDO> getImageCheckHistory(ImageCheckRecordDO imageCheckRecordDO);
String imageCheck(ImageCheckDTO imageCheckDTO)throws Exception;
SendIdCardInfoVO imageCheck(ImageCheckDTO imageCheckDTO)throws Exception;
SendIdCardInfoVO h5CheckResult(ImageCheckDTO imageCheckDTO) throws Exception;
SendIdCardInfoVO loginCheck(ImageCheckDTO imageCheckDTO)throws Exception;
SendIdCardInfoVO h5LoginCheck(ImageCheckDTO imageCheckDTO)throws Exception;
ImageCheckRecordDO checkResult(CheckResultDTO checkResultDTO)throws Exception;
}
......@@ -8,6 +8,7 @@ import com.subsidy.model.VodPlayHistoryDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.subsidy.vo.vod.VodPlayStateVO;
import java.util.HashSet;
import java.util.List;
/**
......@@ -32,5 +33,5 @@ public interface VodPlayHistoryService extends IService<VodPlayHistoryDO> {
void playLengthFix(RemainSecondsDTO remainSecondsDTO);
List<Long> testPlays(VodPlayHistoryDO vodPlayHistoryDO);
HashSet<Long> testPlays(VodPlayHistoryDO vodPlayHistoryDO);
}
......@@ -37,10 +37,12 @@ public class ActivityDetectionServiceImpl extends ServiceImpl<ActivityDetectionM
activityDetectionDO.setMemberId(verifyDTO.getMemberId());
activityDetectionDO.setRequestId(resp.getRequestId());
if (resp.getCaptchaCode()==1){
//成功
activityDetectionDO.setStatus(1);
this.baseMapper.insert(activityDetectionDO);
return ConstantUtils.SUCCESS_VERIFY;
}else {
//失败
activityDetectionDO.setStatus(0);
this.baseMapper.insert(activityDetectionDO);
return ConstantUtils.FAIL_VERIFY;
......@@ -48,7 +50,7 @@ public class ActivityDetectionServiceImpl extends ServiceImpl<ActivityDetectionM
} catch (Exception e) {
// System.out.println(e.toString());
}
return null;
return ConstantUtils.SUCCESS_VERIFY;
}
public IPage<GetCheckHistoryVO> getCheckHistory(GetCheckHistoryDTO getCheckHistoryDTO){
......
......@@ -10,6 +10,8 @@ import com.subsidy.mapper.CategoryMapper;
import com.subsidy.service.CategoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.subsidy.util.ConstantUtils;
import com.subsidy.vo.catagory.GetCategoriesVO;
import org.springframework.beans.BeanUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
......@@ -26,20 +28,21 @@ import java.util.List;
@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, CategoryDO> implements CategoryService {
public IPage<CategoryDO> getCategories(GetCategoriesDTO getCategoriesDTO) {
public IPage<GetCategoriesVO> getCategories(GetCategoriesDTO getCategoriesDTO) {
Page pager = new Page(getCategoriesDTO.getPageNum(), getCategoriesDTO.getPageSize());
if (null == getCategoriesDTO.getCompanyId()) {
return this.baseMapper.selectPage(pager, new QueryWrapper<CategoryDO>()
.lambda()
.like(CategoryDO::getName, getCategoriesDTO.getName())
.isNull(CategoryDO::getCompanyId));
} else {
return this.baseMapper.selectPage(pager, new QueryWrapper<CategoryDO>()
.lambda()
.like(CategoryDO::getName, getCategoriesDTO.getName())
.eq(CategoryDO::getCompanyId, getCategoriesDTO.getCompanyId()));
IPage<GetCategoriesVO> categoryDOIPage = this.baseMapper.getCategories(pager,getCategoriesDTO.getCompanyId(),getCategoriesDTO.getName());
//二级行业领域
List<GetCategoriesVO> getCategoriesVOS = categoryDOIPage.getRecords();
for (GetCategoriesVO gcv : getCategoriesVOS){
//找二级
List<CategoryDO> categoryDOS = this.baseMapper.selectList(new QueryWrapper<CategoryDO>()
.lambda()
.eq(CategoryDO::getParentId,gcv.getId()));
gcv.setCategoryDOS(categoryDOS);
}
return categoryDOIPage;
}
......@@ -56,48 +59,79 @@ public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, CategoryDO>
}
}
public String addCategory(CategoryDO categoryDO) {
public String addCategory(GetCategoriesVO getCategoriesVO) {
int count;
if (null == categoryDO.getCompanyId()) {
if (null == getCategoriesVO.getCompanyId()) {
count = this.baseMapper.selectCount(new QueryWrapper<CategoryDO>()
.lambda()
.like(CategoryDO::getName, categoryDO.getName())
.like(CategoryDO::getName, getCategoriesVO.getName())
.isNull(CategoryDO::getCompanyId));
} else {
count = this.baseMapper.selectCount(new QueryWrapper<CategoryDO>()
.lambda()
.like(CategoryDO::getName, categoryDO.getName())
.eq(CategoryDO::getCompanyId, categoryDO.getCompanyId()));
.like(CategoryDO::getName, getCategoriesVO.getName())
.eq(CategoryDO::getCompanyId, getCategoriesVO.getCompanyId()));
}
if (count > 0) {
throw new HttpException(90001);
}
//一级目录
CategoryDO categoryDO = new CategoryDO();
BeanUtils.copyProperties(getCategoriesVO,categoryDO);
this.baseMapper.insert(categoryDO);
//二级目录
List<CategoryDO> categoryDOS = getCategoriesVO.getCategoryDOS();
for (CategoryDO cd : categoryDOS){
cd.setCompanyId(getCategoriesVO.getCompanyId());
cd.setParentId(categoryDO.getId());
this.baseMapper.insert(cd);
}
return ConstantUtils.ADD_SUCCESS;
}
public String deleteCategory(CategoryDO categoryDO) {
this.baseMapper.deleteById(categoryDO.getId());
this.baseMapper.delete(new QueryWrapper<CategoryDO>()
.lambda()
.eq(CategoryDO::getParentId,categoryDO.getId()));
return ConstantUtils.DELETE_SUCCESS;
}
public String updateCategory(CategoryDO categoryDO) {
public String updateCategory(GetCategoriesVO getCategoriesVO) {
int count = this.baseMapper.selectCount(new QueryWrapper<CategoryDO>()
.lambda()
.eq(CategoryDO::getName, categoryDO.getName())
.eq(CategoryDO::getCompanyId, categoryDO.getCompanyId())
.ne(CategoryDO::getId, categoryDO.getId()));
.eq(CategoryDO::getName, getCategoriesVO.getName())
.eq(CategoryDO::getCompanyId, getCategoriesVO.getCompanyId())
.ne(CategoryDO::getId, getCategoriesVO.getId()));
if (count > 0) {
throw new HttpException(90001);
}
CategoryDO categoryDO = new CategoryDO();
BeanUtils.copyProperties(getCategoriesVO,categoryDO);
this.baseMapper.updateById(categoryDO);
CategoryDO categoryDO1 = this.baseMapper.selectById(categoryDO.getId());
if (getCategoriesVO.getCategoryDOS().size()>0){
this.baseMapper.delete(new QueryWrapper<CategoryDO>()
.lambda()
.eq(CategoryDO::getParentId,getCategoriesVO.getId()));
List<CategoryDO> categoryDOS = getCategoriesVO.getCategoryDOS();
for (CategoryDO cd: categoryDOS){
cd.setParentId(getCategoriesVO.getId());
cd.setCompanyId(categoryDO1.getCompanyId());
this.baseMapper.insert(cd);
}
}
return ConstantUtils.SET_SUCCESS;
}
......
......@@ -279,13 +279,22 @@ public class CompanyDictServiceImpl extends ServiceImpl<CompanyDictMapper, Compa
return ConstantUtils.SET_SUCCESS;
}
public String updateCompanySettings(CompanyDictDO companyDictDO) {
this.baseMapper.updateById(companyDictDO);
return ConstantUtils.SET_SUCCESS;
}
public CompanyDictDO getCompanyInfo(CompanyDictDO companyDictDO) {
return this.baseMapper.selectById(companyDictDO.getId());
}
public List<GetAllCompanyVO> getAllCompany(CompanyDictDO companyDictDO) {
return this.baseMapper.getAllCompany(companyDictDO);
}
public IPage<GetCompanyMembersVO> getCompanyMembers(GetCompanyMembersDTO getCompanyMembersDTO) {
Page pager = new Page(getCompanyMembersDTO.getPageNum(), getCompanyMembersDTO.getPageSize());
return this.baseMapper.getCompanyMembers(pager,getCompanyMembersDTO.getCompanyId(),getCompanyMembersDTO.getUserName());
return this.baseMapper.getCompanyMembers(pager, getCompanyMembersDTO.getCompanyId(), getCompanyMembersDTO.getUserName());
}
@Override
......@@ -343,18 +352,18 @@ public class CompanyDictServiceImpl extends ServiceImpl<CompanyDictMapper, Compa
//总数
Integer total = memberMapper.selectCount(new QueryWrapper<MemberDO>()
.lambda()
.eq(MemberDO::getCompanyId,getCompanyMembersDTO.getCompanyId()));
.lambda()
.eq(MemberDO::getCompanyId, getCompanyMembersDTO.getCompanyId()));
memberSummaryVO.setTotal(total);
//短信验证
Integer smsCnt = memberMapper.selectCount(new QueryWrapper<MemberDO>()
.lambda()
.eq(MemberDO::getCompanyId,getCompanyMembersDTO.getCompanyId())
.isNull(MemberDO::getFirstLogin));
.lambda()
.eq(MemberDO::getCompanyId, getCompanyMembersDTO.getCompanyId())
.isNull(MemberDO::getFirstLogin));
memberSummaryVO.setSmsCnt(smsCnt);
memberSummaryVO.setImgCnt(total-smsCnt);
memberSummaryVO.setImgCnt(total - smsCnt);
return memberSummaryVO;
}
......
......@@ -21,6 +21,7 @@ import com.subsidy.model.VodDictDO;
import com.subsidy.service.SignInRecordService;
import com.subsidy.util.ConstantUtils;
import com.subsidy.util.DateFormatUtil;
import com.subsidy.util.IpAddressUtil;
import com.subsidy.vo.member.GetMemberSignInfoVO;
import com.subsidy.vo.sign.DataViewVO;
import com.subsidy.vo.sign.SignInStatusVO;
......@@ -73,6 +74,7 @@ public class SignInRecordServiceImpl extends ServiceImpl<SignInRecordMapper, Sig
return this.baseMapper.selectPage(pager, new QueryWrapper<SignInRecordDO>()
.lambda()
.eq(SignInRecordDO::getMemberId, getMemberSignInfoDTO.getId())
.eq(SignInRecordDO::getClassId,getMemberSignInfoDTO.getClassId())
.orderByDesc(SignInRecordDO::getCreateDate));
}
......@@ -99,12 +101,12 @@ public class SignInRecordServiceImpl extends ServiceImpl<SignInRecordMapper, Sig
this.baseMapper.deleteById(sign.getId());
}
// signInRecordDO.setIpAddress(IpAddressUtil.getIpAddress());
signInRecordDO.setClassId(classDictDO.getId());
signInRecordDO.setSignInDate(LocalDateTime.now());
signInRecordDO.setCreateDate(LocalDateTime.now());
this.baseMapper.insert(signInRecordDO);
}
return ConstantUtils.ADD_SUCCESS;
}
......
......@@ -8,7 +8,7 @@ public class ExcelFormatUtils {
public static final List<String> memberList = Arrays.asList("序号", "成员名称","身份证号码", "性别", "账号", "联系方式", "签到次数", "课程进度", "学习时长(小时)","学习时长(分钟)", "答疑数", "测试成绩", "总评价");
public static final List<String> signList = Arrays.asList("序号", "成员名称", "身份证号码", "联系方式", "学习时长(小时)","学习时长(分钟)", "课程进度", "完成率", "签到次数", "签到日期");
public static final List<String> signList = Arrays.asList("序号", "成员名称", "身份证号", "联系方式", "签到次数", "签到时间","最近签到ip地址","最近签到设备型号");
public static final List<String> scoreList = Arrays.asList("序号", "成员名称", "身份证号码", "联系方式", "测试成绩", "测试次数", "总评价");
......
......@@ -6,6 +6,9 @@ import java.net.UnknownHostException;
public class IpAddressUtil {
/**
* 返回客户端ip
*/
public static String getIpAddress(HttpServletRequest request) {
String ipAddress = request.getHeader("x-forwarded-for");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
......
......@@ -313,51 +313,78 @@ public class ExcelUtil {
return dataList;
}
public static <T> void writeExcel(List<Long> memberIds, HashMap<Long, HashMap<String, Integer>> hashMap, List<String> dates) {
/**
* 导出excel文件
* @param list
* @param cls
* @param <T>
*/
public static <T> void writeExcel(List<T> list, Class cls) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletResponse response = servletRequestAttributes.getResponse();
Field[] fields = cls.getDeclaredFields();
List<Field> fieldList = Arrays.stream(fields).filter(field -> {
ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
if(annotation != null) {
field.setAccessible(true);
return true;
}
return false;
}).sorted(Comparator.comparing(field -> {
int col = 0;
ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
if(annotation != null) {
col = annotation.col();
}
return col;
})).collect(Collectors.toList());
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
AtomicInteger ai = new AtomicInteger();
Row row = sheet.createRow(ai.getAndIncrement());
AtomicInteger at = new AtomicInteger();
dates.forEach(field -> {
Cell cell = row.createCell(at.getAndIncrement());
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
Font font = wb.createFont();
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
cell.setCellValue(field);
});
if (hashMap != null) {
memberIds.forEach(data -> {
Row r = sheet.createRow(ai.getAndIncrement());
AtomicInteger a = new AtomicInteger();
Cell cell = r.createCell(at.getAndIncrement());
{
Row row = sheet.createRow(ai.getAndIncrement());
AtomicInteger at = new AtomicInteger();
fieldList.forEach(field -> {
ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
String columnName = "";
if (annotation != null) {
columnName = annotation.value();
}
Cell cell = row.createCell(at.getAndIncrement());
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
Font font = wb.createFont();
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
HashMap<String, Integer> hashMap1 = hashMap.get(data);
dates.forEach(field -> {
System.out.println(data + "========");
System.out.println(field);
Cell cell1 = r.createCell(a.getAndIncrement());
if (null != hashMap1) {
cell1.setCellValue(null == hashMap1.get(field) ? 0 : hashMap1.get(field));
} else {
cell1.setCellValue(0);
}
});
cell.setCellValue(columnName);
});
}
String fileName = String.valueOf(new Date().getTime());
buildExcelDocument(fileName + "." + EXCEL2007, wb, response);
if (list != null) {
list.forEach(data -> {
Row r = sheet.createRow(ai.getAndIncrement());
AtomicInteger a = new AtomicInteger();
fieldList.forEach(field -> {
try {
Class<?> type = field.getType();
Object value = field.get(data);
Cell cell = r.createCell(a.getAndIncrement());
if (value != null) {
cell.setCellValue(value.toString());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
});
});
for (int i = 0; i < list.size(); i++) {
sheet.autoSizeColumn(i);
}
}
String fileName = String.valueOf(new Date().getTime());
buildExcelDocument(fileName + "." + EXCEL2007, wb, response);
}
}
public static <T> void writeMemberExcel(String companyName, String studyDate, String courseName, String title, List<ClassDetailVO> list, List<String> headerList) throws Exception {
......@@ -697,7 +724,7 @@ public class ExcelUtil {
sheet.addMergedRegion(cellRangeAddress21);
setBorderStyle(HSSFCellStyle.BORDER_THIN, cellRangeAddress21, sheet, workbook); //给合并过的单元格加边框
CellRangeAddress cellRangeAddress22 = new CellRangeAddress(1, 1, 4, 9);
CellRangeAddress cellRangeAddress22 = new CellRangeAddress(1, 1, 4, 7);
sheet.addMergedRegion(cellRangeAddress22);
setBorderStyle(HSSFCellStyle.BORDER_THIN, cellRangeAddress22, sheet, workbook); //给合并过的单元格加边框
......@@ -713,7 +740,7 @@ public class ExcelUtil {
sheet.addMergedRegion(cellRangeAddress31);
setBorderStyle(HSSFCellStyle.BORDER_THIN, cellRangeAddress31, sheet, workbook); //给合并过的单元格加边框
CellRangeAddress cellRangeAddress32 = new CellRangeAddress(2, 2, 4, 9);
CellRangeAddress cellRangeAddress32 = new CellRangeAddress(2, 2, 4, 7);
sheet.addMergedRegion(cellRangeAddress32);
setBorderStyle(HSSFCellStyle.BORDER_THIN, cellRangeAddress32, sheet, workbook); //给合并过的单元格加边框
thirdRow.createCell(0).setCellValue(thirdHead[0]);
......@@ -765,28 +792,19 @@ public class ExcelUtil {
newCell = dataRow.createCell(4);
newCell.setCellStyle(cellStyle);
newCell.setCellValue(classSignVO.getTrainingLengthStr());
newCell.setCellValue(classSignVO.getSignCounts());
newCell = dataRow.createCell(5);
newCell.setCellStyle(cellStyle);
newCell.setCellValue(classSignVO.getTrainingLengthMinute());
newCell.setCellValue(classSignVO.getSignInDateList());
newCell = dataRow.createCell(6);
newCell.setCellStyle(cellStyle);
newCell.setCellValue(classSignVO.getClassProcess());
newCell.setCellValue(classSignVO.getIpAddress());
newCell = dataRow.createCell(7);
newCell.setCellStyle(cellStyle);
newCell.setCellValue(classSignVO.getPercent());
newCell = dataRow.createCell(8);
newCell.setCellStyle(cellStyle);
newCell.setCellValue(classSignVO.getSignCounts());
newCell = dataRow.createCell(9);
newCell.setCellStyle(cellStyle);
newCell.setCellValue(classSignVO.getSignInDateList());
newCell.setCellValue(classSignVO.getDeviceNo());
rowIndex++;
seq++;
......
......@@ -4,4 +4,19 @@ import lombok.Data;
@Data
public class ImageCheckDetailVO {
private Long id;
private String userName;
private String accountName;
private String telephone;
private String idCard;
private String cnt;
private String recentDate;
}
package com.subsidy.vo.administer;
import com.subsidy.util.excel.ExcelColumn;
import lombok.Data;
@Data
......@@ -7,14 +8,28 @@ public class ManageMemberVO {
private Long id;
@ExcelColumn(col = 1,value = "用户名称")
private String userName;
@ExcelColumn(col = 2,value = "手机号")
private String telephone;
@ExcelColumn(col = 3,value = "身份证号")
private String idCard;
@ExcelColumn(col = 4,value = "所属企业")
private String companyName;
private String accountName;
private String checkImage;
private String checkTime;
private Integer firstLogin;
private String smsCheck;
private String imageCheckStatus;
}
package com.subsidy.vo.catagory;
import com.subsidy.model.CategoryDO;
import lombok.Data;
import java.util.List;
@Data
public class GetCategoriesVO extends CategoryDO {
private List<CategoryDO> categoryDOS;
}
package com.subsidy.vo.image;
import com.subsidy.model.ImageCheckRecordDO;
import lombok.Data;
@Data
public class CheckImageResultVO extends ImageCheckRecordDO {
private Boolean result;
}
package com.subsidy.vo.image;
import lombok.Data;
@Data
public class GetMemberCheckDetailVO {
private Long id;
private String occurredTime;
private String photo;
private Double similarity;
private String result;
}
......@@ -27,25 +27,14 @@ public class ClassSignVO {
private String signInDateList;
/**
* 培训时长
* ip地址
*/
private Integer trainingLength;
@ExcelColumn(col = 4,value = "培训时长(小时)")
private String trainingLengthStr;
@ExcelColumn(col = 5,value = "培训时长(分钟)")
private String trainingLengthMinute;
@ExcelColumn(col = 6,value = "课程进度")
private String classProcess;
private String ipAddress;
/**
* 完成率
* 最近设型号
*/
@ExcelColumn(col = 7,value = "完成率")
private String percent;
private String deviceNo;
......
......@@ -4,4 +4,14 @@ import lombok.Data;
@Data
public class GetMemberSignInfoVO {
private Long id;
private String ipAddress;
private String deviceNo;
private String signInDate;
}
......@@ -11,7 +11,7 @@ public class CheckResultVO {
private String bizSeqNo;
private ResultVO resultVO;
private ResultVO result;
private String transactionTime;
......
......@@ -17,4 +17,14 @@ public class SendResultVO {
private Boolean success;
private String wbAppId;
private String nonce;
private Long userId;
private String sign;
private String faceId;
}
......@@ -18,6 +18,7 @@ meishu.code-message[10022]=密码输入错误,您还可以输入2次密码
meishu.code-message[10023]=密码输入错误,您还可以输入3次密码
meishu.code-message[10024]=密码输入错误,您还可以输入4次密码
meishu.code-message[10025]=身份证识别错误
meishu.code-message[10026]=姓名或身份证号格式不正确
meishu.code-message[20001]=该课程已存在
......@@ -65,7 +66,9 @@ meishu.code-message[16001]=该条件已存在
meishu.code-message[17001]=系统不支持00:00:00~06:00:00学习
meishu.code-message[18000]=视频不存在
meishu.code-message[18001]=删除失败,目录下没有该视频
meishu.code-message[18001]=已超过当日验证次数上线
......@@ -30,4 +30,23 @@
AND t2.delete_date IS NULL
and t.course_id = #{courseId}
</select>
<select id="getCategories" resultType="com.subsidy.vo.catagory.GetCategoriesVO">
SELECT
*
FROM
category t
WHERE
t.delete_date IS NULL
AND t.parent_id IS NULL
<if test="name !=null and name != ''">
AND t.`name` like concat('%',#{name} ,'%')
</if>
<if test="companyId != null and companyId != ''">
and t.company_id = #{companyId}
</if>
<if test="companyId == null">
and t.company_id is null
</if>
</select>
</mapper>
......@@ -9,8 +9,6 @@
<result column="update_date" property="updateDate" />
<result column="delete_date" property="deleteDate" />
<result column="class_id" property="classId" />
<result column="paper_id" property="paperId" />
<result column="request_id" property="requestId" />
</resultMap>
<!-- 通用查询结果列 -->
......@@ -21,4 +19,18 @@
id, class_id, paper_id, request_id
</sql>
<select id="getMemberCheckDetail" resultType="com.subsidy.vo.image.GetMemberCheckDetailVO">
SELECT
t.id,
t.occurred_time,
t.photo,
t.similarity
FROM
image_check_record t
WHERE
t.delete_date IS NULL
AND t.class_id = #{classId}
AND t.member_id = #{memberId}
</select>
</mapper>
......@@ -270,7 +270,10 @@
t.telephone,
t.id_card,
t.account_name,
t2.company_name
t2.company_name,
t.check_image,
t.check_time,
t.first_login
FROM
member t
LEFT JOIN company_dict t2 ON t.company_id = t2.id
......@@ -325,6 +328,6 @@
</select>
<update id="removeCheckImage" parameterType="long">
update member set check_image = nulll where id = #{id}
update member set check_image = null,check_time = null where id = #{id}
</update>
</mapper>
......@@ -105,7 +105,10 @@
create_date
FROM
vod_play_history t
where t.member_id = #{memberId}
where
t.delete_date is null
and t.member_id = #{memberId}
and t.class_id =#{classId}
ORDER BY
t.member_id,
start_date
......
# 此处为本项目src所在路径(代码生成器输出路径)
outputDir=/src/main/java
author=DengMin
author=Tuyp
# 父的包名
setParent=com.subsidy
# mapper.xml文件生成路径
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!