Commit ee918a6d3f6a3b1c6bd62c19cebddb7444b98d83
1 parent
d2aee55e
代码生成:增加主子表 erp 模式的示例
Showing
18 changed files
with
349 additions
and
191 deletions
yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java
| ... | ... | @@ -67,4 +67,7 @@ public interface ErrorCodeConstants { |
| 67 | 67 | ErrorCode DEMO02_CATEGORY_NAME_DUPLICATE = new ErrorCode(1_001_201_005, "已经存在该名字的示例分类"); |
| 68 | 68 | ErrorCode DEMO02_CATEGORY_PARENT_IS_CHILD = new ErrorCode(1_001_201_006, "不能设置自己的子示例分类为父示例分类"); |
| 69 | 69 | ErrorCode DEMO03_STUDENT_NOT_EXISTS = new ErrorCode(1_001_201_007, "学生不存在"); |
| 70 | + ErrorCode DEMO03_GRADE_NOT_EXISTS = new ErrorCode(1_001_201_008, "学生班级不存在"); | |
| 71 | + ErrorCode DEMO03_GRADE_EXISTS = new ErrorCode(1_001_201_009, "学生班级已存在"); | |
| 72 | + | |
| 70 | 73 | } | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/demo03/normal/Demo03StudentController.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/demo03/Demo03StudentController.java
| 1 | -package cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.normal; | |
| 2 | - | |
| 3 | -import org.springframework.web.bind.annotation.*; | |
| 4 | -import javax.annotation.Resource; | |
| 5 | -import org.springframework.validation.annotation.Validated; | |
| 6 | -import org.springframework.security.access.prepost.PreAuthorize; | |
| 7 | -import io.swagger.v3.oas.annotations.tags.Tag; | |
| 8 | -import io.swagger.v3.oas.annotations.Parameter; | |
| 9 | -import io.swagger.v3.oas.annotations.Operation; | |
| 10 | - | |
| 11 | -import javax.validation.*; | |
| 12 | -import javax.servlet.http.*; | |
| 13 | -import java.util.*; | |
| 14 | -import java.io.IOException; | |
| 1 | +package cn.iocoder.yudao.module.infra.controller.admin.demo.demo03; | |
| 15 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 16 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 17 | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 18 | -import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 19 | 6 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 20 | -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 21 | - | |
| 22 | 7 | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| 23 | - | |
| 24 | 8 | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; |
| 25 | -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; | |
| 26 | - | |
| 27 | -import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.normal.vo.*; | |
| 28 | -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO; | |
| 9 | +import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.vo.Demo03StudentPageReqVO; | |
| 10 | +import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.vo.Demo03StudentRespVO; | |
| 11 | +import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.vo.Demo03StudentSaveReqVO; | |
| 29 | 12 | import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO; |
| 30 | 13 | import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO; |
| 14 | +import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO; | |
| 31 | 15 | import cn.iocoder.yudao.module.infra.service.demo.demo03.Demo03StudentService; |
| 16 | +import io.swagger.v3.oas.annotations.Operation; | |
| 17 | +import io.swagger.v3.oas.annotations.Parameter; | |
| 18 | +import io.swagger.v3.oas.annotations.tags.Tag; | |
| 19 | +import org.springframework.security.access.prepost.PreAuthorize; | |
| 20 | +import org.springframework.validation.annotation.Validated; | |
| 21 | +import org.springframework.web.bind.annotation.*; | |
| 22 | + | |
| 23 | +import javax.annotation.Resource; | |
| 24 | +import javax.servlet.http.HttpServletResponse; | |
| 25 | +import javax.validation.Valid; | |
| 26 | +import java.io.IOException; | |
| 27 | +import java.util.List; | |
| 28 | + | |
| 29 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 30 | +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; | |
| 32 | 31 | |
| 33 | 32 | @Tag(name = "管理后台 - 学生") |
| 34 | 33 | @RestController |
| ... | ... | @@ -95,6 +94,47 @@ public class Demo03StudentController { |
| 95 | 94 | |
| 96 | 95 | // ==================== 子表(学生课程) ==================== |
| 97 | 96 | |
| 97 | + @GetMapping("/demo03-course/page") | |
| 98 | + @Operation(summary = "获得学生课程分页") | |
| 99 | + @Parameter(name = "studentId", description = "学生编号") | |
| 100 | + @PreAuthorize("@ss.hasPermission('infra:demo03-student:query')") | |
| 101 | + public CommonResult<PageResult<Demo03CourseDO>> getDemo03CoursePage(PageParam pageReqVO, | |
| 102 | + @RequestParam("studentId") Long studentId) { | |
| 103 | + return success(demo03StudentService.getDemo03CoursePage(pageReqVO, studentId)); | |
| 104 | + } | |
| 105 | + | |
| 106 | + @PostMapping("/demo03-course/create") | |
| 107 | + @Operation(summary = "创建学生课程") | |
| 108 | + @PreAuthorize("@ss.hasPermission('infra:demo03-student:create')") | |
| 109 | + public CommonResult<Long> createDemo03Course(@Valid @RequestBody Demo03CourseDO demo03Course) { | |
| 110 | + return success(demo03StudentService.createDemo03Course(demo03Course)); | |
| 111 | + } | |
| 112 | + | |
| 113 | + @PutMapping("/demo03-course/update") | |
| 114 | + @Operation(summary = "更新学生课程") | |
| 115 | + @PreAuthorize("@ss.hasPermission('infra:demo03-student:update')") | |
| 116 | + public CommonResult<Boolean> updateDemo03Course(@Valid @RequestBody Demo03CourseDO demo03Course) { | |
| 117 | + demo03StudentService.updateDemo03Course(demo03Course); | |
| 118 | + return success(true); | |
| 119 | + } | |
| 120 | + | |
| 121 | + @DeleteMapping("/demo03-course/delete") | |
| 122 | + @Parameter(name = "id", description = "编号", required = true) | |
| 123 | + @Operation(summary = "删除学生课程") | |
| 124 | + @PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')") | |
| 125 | + public CommonResult<Boolean> deleteDemo03Course(@RequestParam("id") Long id) { | |
| 126 | + demo03StudentService.deleteDemo03Course(id); | |
| 127 | + return success(true); | |
| 128 | + } | |
| 129 | + | |
| 130 | + @GetMapping("/demo03-course/get") | |
| 131 | + @Operation(summary = "获得学生课程") | |
| 132 | + @Parameter(name = "id", description = "编号", required = true) | |
| 133 | + @PreAuthorize("@ss.hasPermission('infra:demo03-student:query')") | |
| 134 | + public CommonResult<Demo03CourseDO> getDemo03Course(@RequestParam("id") Long id) { | |
| 135 | + return success(demo03StudentService.getDemo03Course(id)); | |
| 136 | + } | |
| 137 | + | |
| 98 | 138 | @GetMapping("/demo03-course/list-by-student-id") |
| 99 | 139 | @Operation(summary = "获得学生课程列表") |
| 100 | 140 | @Parameter(name = "studentId", description = "学生编号") |
| ... | ... | @@ -105,6 +145,47 @@ public class Demo03StudentController { |
| 105 | 145 | |
| 106 | 146 | // ==================== 子表(学生班级) ==================== |
| 107 | 147 | |
| 148 | + @GetMapping("/demo03-grade/page") | |
| 149 | + @Operation(summary = "获得学生班级分页") | |
| 150 | + @Parameter(name = "studentId", description = "学生编号") | |
| 151 | + @PreAuthorize("@ss.hasPermission('infra:demo03-student:query')") | |
| 152 | + public CommonResult<PageResult<Demo03GradeDO>> getDemo03GradePage(PageParam pageReqVO, | |
| 153 | + @RequestParam("studentId") Long studentId) { | |
| 154 | + return success(demo03StudentService.getDemo03GradePage(pageReqVO, studentId)); | |
| 155 | + } | |
| 156 | + | |
| 157 | + @PostMapping("/demo03-grade/create") | |
| 158 | + @Operation(summary = "创建学生班级") | |
| 159 | + @PreAuthorize("@ss.hasPermission('infra:demo03-student:create')") | |
| 160 | + public CommonResult<Long> createDemo03Grade(@Valid @RequestBody Demo03GradeDO demo03Grade) { | |
| 161 | + return success(demo03StudentService.createDemo03Grade(demo03Grade)); | |
| 162 | + } | |
| 163 | + | |
| 164 | + @PutMapping("/demo03-grade/update") | |
| 165 | + @Operation(summary = "更新学生班级") | |
| 166 | + @PreAuthorize("@ss.hasPermission('infra:demo03-student:update')") | |
| 167 | + public CommonResult<Boolean> updateDemo03Grade(@Valid @RequestBody Demo03GradeDO demo03Grade) { | |
| 168 | + demo03StudentService.updateDemo03Grade(demo03Grade); | |
| 169 | + return success(true); | |
| 170 | + } | |
| 171 | + | |
| 172 | + @DeleteMapping("/demo03-grade/delete") | |
| 173 | + @Parameter(name = "id", description = "编号", required = true) | |
| 174 | + @Operation(summary = "删除学生班级") | |
| 175 | + @PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')") | |
| 176 | + public CommonResult<Boolean> deleteDemo03Grade(@RequestParam("id") Long id) { | |
| 177 | + demo03StudentService.deleteDemo03Grade(id); | |
| 178 | + return success(true); | |
| 179 | + } | |
| 180 | + | |
| 181 | + @GetMapping("/demo03-grade/get") | |
| 182 | + @Operation(summary = "获得学生班级") | |
| 183 | + @Parameter(name = "id", description = "编号", required = true) | |
| 184 | + @PreAuthorize("@ss.hasPermission('infra:demo03-student:query')") | |
| 185 | + public CommonResult<Demo03GradeDO> getDemo03Grade(@RequestParam("id") Long id) { | |
| 186 | + return success(demo03StudentService.getDemo03Grade(id)); | |
| 187 | + } | |
| 188 | + | |
| 108 | 189 | @GetMapping("/demo03-grade/get-by-student-id") |
| 109 | 190 | @Operation(summary = "获得学生班级") |
| 110 | 191 | @Parameter(name = "studentId", description = "学生编号") | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/demo03/normal/vo/Demo03StudentPageReqVO.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/demo03/vo/Demo03StudentPageReqVO.java
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/demo03/normal/vo/Demo03StudentRespVO.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/demo03/vo/Demo03StudentRespVO.java
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/demo03/normal/vo/Demo03StudentSaveReqVO.java renamed to yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/demo03/vo/Demo03StudentSaveReqVO.java
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/package-info.java
| ... | ... | @@ -3,8 +3,6 @@ |
| 3 | 3 | * |
| 4 | 4 | * 1. demo01:单表(增删改查) |
| 5 | 5 | * 2. demo02:单表(树形结构) |
| 6 | - * 3.1 demo03/normal:主子表(标准模式) | |
| 7 | - * 3.2 demo03/erp:主子表(ERP 模式) | |
| 8 | - * 3.3 demo03/inner:主子表(内嵌模式) | |
| 6 | + * 3. demo03:主子表(标准模式)+ 主子表(ERP 模式)+ 主子表(内嵌模式) | |
| 9 | 7 | */ |
| 10 | 8 | package cn.iocoder.yudao.module.infra.controller.admin.demo; |
| 11 | 9 | \ No newline at end of file | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/demo03/Demo03CourseMapper.java
| 1 | 1 | package cn.iocoder.yudao.module.infra.dal.mysql.demo.demo03; |
| 2 | 2 | |
| 3 | -import java.util.*; | |
| 4 | - | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 5 | 5 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 6 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 6 | 7 | import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO; |
| 7 | 8 | import org.apache.ibatis.annotations.Mapper; |
| 8 | 9 | |
| 10 | +import java.util.List; | |
| 11 | + | |
| 9 | 12 | /** |
| 10 | 13 | * 学生课程 Mapper |
| 11 | 14 | * |
| ... | ... | @@ -14,6 +17,12 @@ import org.apache.ibatis.annotations.Mapper; |
| 14 | 17 | @Mapper |
| 15 | 18 | public interface Demo03CourseMapper extends BaseMapperX<Demo03CourseDO> { |
| 16 | 19 | |
| 20 | + default PageResult<Demo03CourseDO> selectPage(PageParam reqVO, Long studentId) { | |
| 21 | + return selectPage(reqVO, new LambdaQueryWrapperX<Demo03CourseDO>() | |
| 22 | + .eq(Demo03CourseDO::getStudentId, studentId) | |
| 23 | + .orderByDesc(Demo03CourseDO::getId)); | |
| 24 | + } | |
| 25 | + | |
| 17 | 26 | default List<Demo03CourseDO> selectListByStudentId(Long studentId) { |
| 18 | 27 | return selectList(Demo03CourseDO::getStudentId, studentId); |
| 19 | 28 | } | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/demo03/Demo03GradeMapper.java
| 1 | 1 | package cn.iocoder.yudao.module.infra.dal.mysql.demo.demo03; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 3 | 5 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 6 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 4 | 7 | import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO; |
| 5 | 8 | import org.apache.ibatis.annotations.Mapper; |
| 6 | 9 | |
| ... | ... | @@ -12,6 +15,12 @@ import org.apache.ibatis.annotations.Mapper; |
| 12 | 15 | @Mapper |
| 13 | 16 | public interface Demo03GradeMapper extends BaseMapperX<Demo03GradeDO> { |
| 14 | 17 | |
| 18 | + default PageResult<Demo03GradeDO> selectPage(PageParam reqVO, Long studentId) { | |
| 19 | + return selectPage(reqVO, new LambdaQueryWrapperX<Demo03GradeDO>() | |
| 20 | + .eq(Demo03GradeDO::getStudentId, studentId) | |
| 21 | + .orderByDesc(Demo03GradeDO::getId)); | |
| 22 | + } | |
| 23 | + | |
| 15 | 24 | default Demo03GradeDO selectByStudentId(Long studentId) { |
| 16 | 25 | return selectOne(Demo03GradeDO::getStudentId, studentId); |
| 17 | 26 | } | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/demo/demo03/Demo03StudentMapper.java
| ... | ... | @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 5 | 5 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 6 | 6 | import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO; |
| 7 | 7 | import org.apache.ibatis.annotations.Mapper; |
| 8 | -import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.normal.vo.*; | |
| 8 | +import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.vo.*; | |
| 9 | 9 | |
| 10 | 10 | /** |
| 11 | 11 | * 学生 Mapper | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java
| ... | ... | @@ -344,6 +344,7 @@ public class CodegenEngine { |
| 344 | 344 | List<String> subJoinColumnStrikeCases = new ArrayList<>(); |
| 345 | 345 | List<String> subSimpleClassNames = new ArrayList<>(); |
| 346 | 346 | List<String> subClassNameVars = new ArrayList<>(); |
| 347 | + List<String> simpleClassNameUnderlineCases = new ArrayList<>(); | |
| 347 | 348 | List<String> subSimpleClassNameStrikeCases = new ArrayList<>(); |
| 348 | 349 | for (int i = 0; i < subTables.size(); i++) { |
| 349 | 350 | CodegenTableDO subTable = subTables.get(i); |
| ... | ... | @@ -356,6 +357,7 @@ public class CodegenEngine { |
| 356 | 357 | // className 相关 |
| 357 | 358 | String subSimpleClassName = removePrefix(subTable.getClassName(), upperFirst(subTable.getModuleName())); |
| 358 | 359 | subSimpleClassNames.add(subSimpleClassName); |
| 360 | + simpleClassNameUnderlineCases.add(toUnderlineCase(subSimpleClassName)); // 将 DictType 转换成 dict_type | |
| 359 | 361 | subClassNameVars.add(lowerFirst(subSimpleClassName)); // 将 DictType 转换成 dictType,用于变量 |
| 360 | 362 | subSimpleClassNameStrikeCases.add(toSymbolCase(subSimpleClassName, '-')); // 将 DictType 转换成 dict-type |
| 361 | 363 | } |
| ... | ... | @@ -363,6 +365,7 @@ public class CodegenEngine { |
| 363 | 365 | bindingMap.put("subJoinColumns", subJoinColumns); |
| 364 | 366 | bindingMap.put("subJoinColumn_strikeCases", subJoinColumnStrikeCases); |
| 365 | 367 | bindingMap.put("subSimpleClassNames", subSimpleClassNames); |
| 368 | + bindingMap.put("simpleClassNameUnderlineCases", simpleClassNameUnderlineCases); | |
| 366 | 369 | bindingMap.put("subClassNameVars", subClassNameVars); |
| 367 | 370 | bindingMap.put("subSimpleClassName_strikeCases", subSimpleClassNameStrikeCases); |
| 368 | 371 | } | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/demo03/Demo03StudentService.java
| 1 | 1 | package cn.iocoder.yudao.module.infra.service.demo.demo03; |
| 2 | 2 | |
| 3 | -import java.util.*; | |
| 4 | -import javax.validation.*; | |
| 5 | -import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.normal.vo.*; | |
| 6 | -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO; | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 5 | +import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.vo.Demo03StudentPageReqVO; | |
| 6 | +import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.vo.Demo03StudentSaveReqVO; | |
| 7 | 7 | import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO; |
| 8 | 8 | import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO; |
| 9 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 9 | +import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO; | |
| 10 | + | |
| 11 | +import javax.validation.Valid; | |
| 12 | +import java.util.List; | |
| 10 | 13 | |
| 11 | 14 | /** |
| 12 | 15 | * 学生 Service 接口 |
| ... | ... | @@ -64,6 +67,44 @@ public interface Demo03StudentService { |
| 64 | 67 | */ |
| 65 | 68 | List<Demo03CourseDO> getDemo03CourseListByStudentId(Long studentId); |
| 66 | 69 | |
| 70 | + /** | |
| 71 | + * 获得学生课程分页 | |
| 72 | + * | |
| 73 | + * @param pageReqVO 分页查询 | |
| 74 | + * @param studentId 学生编号 | |
| 75 | + * @return 学生课程分页 | |
| 76 | + */ | |
| 77 | + PageResult<Demo03CourseDO> getDemo03CoursePage(PageParam pageReqVO, Long studentId); | |
| 78 | + | |
| 79 | + /** | |
| 80 | + * 创建学生课程 | |
| 81 | + * | |
| 82 | + * @param demo03Course 创建信息 | |
| 83 | + * @return 编号 | |
| 84 | + */ | |
| 85 | + Long createDemo03Course(@Valid Demo03CourseDO demo03Course); | |
| 86 | + | |
| 87 | + /** | |
| 88 | + * 更新学生课程 | |
| 89 | + * | |
| 90 | + * @param demo03Course 更新信息 | |
| 91 | + */ | |
| 92 | + void updateDemo03Course(@Valid Demo03CourseDO demo03Course); | |
| 93 | + | |
| 94 | + /** | |
| 95 | + * 删除学生课程 | |
| 96 | + * | |
| 97 | + * @param id 编号 | |
| 98 | + */ | |
| 99 | + void deleteDemo03Course(Long id); | |
| 100 | + | |
| 101 | + /** | |
| 102 | + * 获得学生课程 | |
| 103 | + * | |
| 104 | + * @param id 编号 | |
| 105 | + * @return 学生课程 | |
| 106 | + */ | |
| 107 | + Demo03CourseDO getDemo03Course(Long id); | |
| 67 | 108 | |
| 68 | 109 | // ==================== 子表(学生班级) ==================== |
| 69 | 110 | |
| ... | ... | @@ -75,4 +116,43 @@ public interface Demo03StudentService { |
| 75 | 116 | */ |
| 76 | 117 | Demo03GradeDO getDemo03GradeByStudentId(Long studentId); |
| 77 | 118 | |
| 119 | + /** | |
| 120 | + * 获得学生班级分页 | |
| 121 | + * | |
| 122 | + * @param pageReqVO 分页查询 | |
| 123 | + * @param studentId 学生编号 | |
| 124 | + * @return 学生班级分页 | |
| 125 | + */ | |
| 126 | + PageResult<Demo03GradeDO> getDemo03GradePage(PageParam pageReqVO, Long studentId); | |
| 127 | + | |
| 128 | + /** | |
| 129 | + * 创建学生班级 | |
| 130 | + * | |
| 131 | + * @param demo03Grade 创建信息 | |
| 132 | + * @return 编号 | |
| 133 | + */ | |
| 134 | + Long createDemo03Grade(@Valid Demo03GradeDO demo03Grade); | |
| 135 | + | |
| 136 | + /** | |
| 137 | + * 更新学生班级 | |
| 138 | + * | |
| 139 | + * @param demo03Grade 更新信息 | |
| 140 | + */ | |
| 141 | + void updateDemo03Grade(@Valid Demo03GradeDO demo03Grade); | |
| 142 | + | |
| 143 | + /** | |
| 144 | + * 删除学生班级 | |
| 145 | + * | |
| 146 | + * @param id 编号 | |
| 147 | + */ | |
| 148 | + void deleteDemo03Grade(Long id); | |
| 149 | + | |
| 150 | + /** | |
| 151 | + * 获得学生班级 | |
| 152 | + * | |
| 153 | + * @param id 编号 | |
| 154 | + * @return 学生班级 | |
| 155 | + */ | |
| 156 | + Demo03GradeDO getDemo03Grade(Long id); | |
| 157 | + | |
| 78 | 158 | } |
| 79 | 159 | \ No newline at end of file | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/demo/demo03/Demo03StudentServiceImpl.java
| 1 | 1 | package cn.iocoder.yudao.module.infra.service.demo.demo03; |
| 2 | 2 | |
| 3 | -import org.springframework.stereotype.Service; | |
| 4 | -import javax.annotation.Resource; | |
| 5 | -import org.springframework.validation.annotation.Validated; | |
| 6 | -import org.springframework.transaction.annotation.Transactional; | |
| 7 | - | |
| 8 | -import java.util.*; | |
| 9 | -import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.normal.vo.*; | |
| 10 | -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO; | |
| 11 | -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO; | |
| 12 | -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO; | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 13 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 14 | 5 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 15 | - | |
| 16 | -import cn.iocoder.yudao.module.infra.dal.mysql.demo.demo03.Demo03StudentMapper; | |
| 6 | +import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.vo.Demo03StudentPageReqVO; | |
| 7 | +import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.vo.Demo03StudentSaveReqVO; | |
| 8 | +import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO; | |
| 9 | +import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO; | |
| 10 | +import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO; | |
| 17 | 11 | import cn.iocoder.yudao.module.infra.dal.mysql.demo.demo03.Demo03CourseMapper; |
| 18 | 12 | import cn.iocoder.yudao.module.infra.dal.mysql.demo.demo03.Demo03GradeMapper; |
| 13 | +import cn.iocoder.yudao.module.infra.dal.mysql.demo.demo03.Demo03StudentMapper; | |
| 14 | +import org.springframework.stereotype.Service; | |
| 15 | +import org.springframework.transaction.annotation.Transactional; | |
| 16 | +import org.springframework.validation.annotation.Validated; | |
| 17 | + | |
| 18 | +import javax.annotation.Resource; | |
| 19 | +import java.util.List; | |
| 19 | 20 | |
| 20 | 21 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 21 | 22 | import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; |
| ... | ... | @@ -101,7 +102,9 @@ public class Demo03StudentServiceImpl implements Demo03StudentService { |
| 101 | 102 | } |
| 102 | 103 | |
| 103 | 104 | private void createDemo03CourseList(Long studentId, List<Demo03CourseDO> list) { |
| 104 | - list.forEach(o -> o.setStudentId(studentId)); | |
| 105 | + if (list != null) { | |
| 106 | + list.forEach(o -> o.setStudentId(studentId)); | |
| 107 | + } | |
| 105 | 108 | demo03CourseMapper.insertBatch(list); |
| 106 | 109 | } |
| 107 | 110 | |
| ... | ... | @@ -115,6 +118,32 @@ public class Demo03StudentServiceImpl implements Demo03StudentService { |
| 115 | 118 | demo03CourseMapper.deleteByStudentId(studentId); |
| 116 | 119 | } |
| 117 | 120 | |
| 121 | + @Override | |
| 122 | + public PageResult<Demo03CourseDO> getDemo03CoursePage(PageParam pageReqVO, Long studentId) { | |
| 123 | + return demo03CourseMapper.selectPage(pageReqVO, studentId); | |
| 124 | + } | |
| 125 | + | |
| 126 | + @Override | |
| 127 | + public Long createDemo03Course(Demo03CourseDO demo03Course) { | |
| 128 | + demo03CourseMapper.insert(demo03Course); | |
| 129 | + return demo03Course.getId(); | |
| 130 | + } | |
| 131 | + | |
| 132 | + @Override | |
| 133 | + public void updateDemo03Course(Demo03CourseDO demo03Course) { | |
| 134 | + demo03CourseMapper.updateById(demo03Course); | |
| 135 | + } | |
| 136 | + | |
| 137 | + @Override | |
| 138 | + public void deleteDemo03Course(Long id) { | |
| 139 | + demo03CourseMapper.deleteById(id); | |
| 140 | + } | |
| 141 | + | |
| 142 | + @Override | |
| 143 | + public Demo03CourseDO getDemo03Course(Long id) { | |
| 144 | + return demo03CourseMapper.selectById(id); | |
| 145 | + } | |
| 146 | + | |
| 118 | 147 | // ==================== 子表(学生班级) ==================== |
| 119 | 148 | |
| 120 | 149 | @Override |
| ... | ... | @@ -143,4 +172,46 @@ public class Demo03StudentServiceImpl implements Demo03StudentService { |
| 143 | 172 | demo03GradeMapper.deleteByStudentId(studentId); |
| 144 | 173 | } |
| 145 | 174 | |
| 175 | + @Override | |
| 176 | + public PageResult<Demo03GradeDO> getDemo03GradePage(PageParam pageReqVO, Long studentId) { | |
| 177 | + return demo03GradeMapper.selectPage(pageReqVO, studentId); | |
| 178 | + } | |
| 179 | + | |
| 180 | + @Override | |
| 181 | + public Long createDemo03Grade(Demo03GradeDO demo03Grade) { | |
| 182 | + // 校验是否已经存在 | |
| 183 | + if (demo03GradeMapper.selectByStudentId(demo03Grade.getStudentId()) != null) { | |
| 184 | + throw exception(DEMO03_GRADE_EXISTS); | |
| 185 | + } | |
| 186 | + demo03GradeMapper.insert(demo03Grade); | |
| 187 | + return demo03Grade.getId(); | |
| 188 | + } | |
| 189 | + | |
| 190 | + @Override | |
| 191 | + public void updateDemo03Grade(Demo03GradeDO demo03Grade) { | |
| 192 | + // 校验存在 | |
| 193 | + validateDemo03GradeExists(demo03Grade.getId()); | |
| 194 | + // 更新 | |
| 195 | + demo03GradeMapper.updateById(demo03Grade); | |
| 196 | + } | |
| 197 | + | |
| 198 | + @Override | |
| 199 | + public void deleteDemo03Grade(Long id) { | |
| 200 | + // 校验存在 | |
| 201 | + validateDemo03GradeExists(id); | |
| 202 | + // 删除 | |
| 203 | + demo03GradeMapper.deleteById(id); | |
| 204 | + } | |
| 205 | + | |
| 206 | + @Override | |
| 207 | + public Demo03GradeDO getDemo03Grade(Long id) { | |
| 208 | + return demo03GradeMapper.selectById(id); | |
| 209 | + } | |
| 210 | + | |
| 211 | + private void validateDemo03GradeExists(Long id) { | |
| 212 | + if (demo03GradeMapper.selectById(id) == null) { | |
| 213 | + throw exception(DEMO03_GRADE_NOT_EXISTS); | |
| 214 | + } | |
| 215 | + } | |
| 216 | + | |
| 146 | 217 | } |
| 147 | 218 | \ No newline at end of file | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/enums/errorcode.vm
| ... | ... | @@ -8,4 +8,15 @@ ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_NOT_EXITS = new |
| 8 | 8 | ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_ERROR = new ErrorCode(TODO 补充编号, "不能设置自己为父${table.classComment}"); |
| 9 | 9 | ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE = new ErrorCode(TODO 补充编号, "已经存在该${treeNameColumn.columnComment}的${table.classComment}"); |
| 10 | 10 | ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_IS_CHILD = new ErrorCode(TODO 补充编号, "不能设置自己的子${table.className}为父${table.className}"); |
| 11 | +#end | |
| 12 | +## 特殊:主子表专属逻辑 | |
| 13 | +#if ( $table.templateType == 11 )## 特殊:ERP 情况 | |
| 14 | +#foreach ($subTable in $subTables) | |
| 15 | +#set ($index = $foreach.count - 1) | |
| 16 | +#set ($simpleClassNameUnderlineCase = $simpleClassNameUnderlineCases.get($index)) | |
| 17 | +ErrorCode ${simpleClassNameUnderlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${subTable.classComment}不存在"); | |
| 18 | +#if ( !$subTable.subJoinMany ) | |
| 19 | +ErrorCode ${simpleClassNameUnderlineCase.toUpperCase()}_EXISTS = new ErrorCode(TODO 补充编号, "${subTable.classComment}已存在"); | |
| 20 | +#end | |
| 21 | +#end | |
| 11 | 22 | #end |
| 12 | 23 | \ No newline at end of file | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/service/service.vm
| ... | ... | @@ -75,7 +75,6 @@ public interface ${table.className}Service { |
| 75 | 75 | #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 |
| 76 | 76 | #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 |
| 77 | 77 | #set ($subClassNameVar = $subClassNameVars.get($index)) |
| 78 | - | |
| 79 | 78 | // ==================== 子表($subTable.classComment) ==================== |
| 80 | 79 | |
| 81 | 80 | ## 情况一:MASTER_ERP 时,需要分查询页子表 | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/service/serviceImpl.vm
| ... | ... | @@ -235,6 +235,7 @@ public class ${table.className}ServiceImpl implements ${table.className}Service |
| 235 | 235 | #foreach ($subTable in $subTables) |
| 236 | 236 | #set ($index = $foreach.count - 1) |
| 237 | 237 | #set ($subSimpleClassName = $subSimpleClassNames.get($index)) |
| 238 | +#set ($simpleClassNameUnderlineCase = $simpleClassNameUnderlineCases.get($index)) | |
| 238 | 239 | #set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 |
| 239 | 240 | #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 |
| 240 | 241 | #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 |
| ... | ... | @@ -268,24 +269,44 @@ public class ${table.className}ServiceImpl implements ${table.className}Service |
| 268 | 269 | #if ( $table.templateType == 11 ) |
| 269 | 270 | @Override |
| 270 | 271 | public ${subPrimaryColumn.javaType} create${subSimpleClassName}(${subTable.className}DO ${subClassNameVar}) { |
| 272 | +## 特殊:一对一时,需要保证只有一条,不能重复插入 | |
| 273 | +#if ( !$subTable.subJoinMany) | |
| 274 | + // 校验是否已经存在 | |
| 275 | + if (${subClassNameVars.get($index)}Mapper.selectBy${SubJoinColumnName}(${subClassNameVar}.get${SubJoinColumnName}()) != null) { | |
| 276 | + throw exception(${simpleClassNameUnderlineCase.toUpperCase()}_EXISTS); | |
| 277 | + } | |
| 278 | + // 插入 | |
| 279 | +#end | |
| 271 | 280 | ${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar}); |
| 272 | 281 | return ${subClassNameVar}.getId(); |
| 273 | 282 | } |
| 274 | 283 | |
| 275 | 284 | @Override |
| 276 | 285 | public void update${subSimpleClassName}(${subTable.className}DO ${subClassNameVar}) { |
| 286 | + // 校验存在 | |
| 287 | + validate${subSimpleClassName}Exists(${subClassNameVar}.getId()); | |
| 288 | + // 更新 | |
| 277 | 289 | ${subClassNameVars.get($index)}Mapper.updateById(${subClassNameVar}); |
| 278 | 290 | } |
| 279 | 291 | |
| 280 | 292 | @Override |
| 281 | 293 | public void delete${subSimpleClassName}(${subPrimaryColumn.javaType} id) { |
| 294 | + // 校验存在 | |
| 295 | + validate${subSimpleClassName}Exists(id); | |
| 296 | + // 删除 | |
| 282 | 297 | ${subClassNameVars.get($index)}Mapper.deleteById(id); |
| 283 | 298 | } |
| 284 | 299 | |
| 285 | - @Override | |
| 286 | - public ${subTable.className}DO get${subSimpleClassName}(${subPrimaryColumn.javaType} id) { | |
| 300 | + @Override | |
| 301 | + public ${subTable.className}DO get${subSimpleClassName}(${subPrimaryColumn.javaType} id) { | |
| 287 | 302 | return ${subClassNameVars.get($index)}Mapper.selectById(id); |
| 288 | - } | |
| 303 | + } | |
| 304 | + | |
| 305 | + private void validate${subSimpleClassName}Exists(${subPrimaryColumn.javaType} id) { | |
| 306 | + if (${subClassNameVar}Mapper.selectById(id) == null) { | |
| 307 | + throw exception(${simpleClassNameUnderlineCase.toUpperCase()}_NOT_EXISTS); | |
| 308 | + } | |
| 309 | + } | |
| 289 | 310 | |
| 290 | 311 | ## 情况二:非 MASTER_ERP 时,支持批量的新增、修改操作 |
| 291 | 312 | #else | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm
| ... | ... | @@ -25,7 +25,8 @@ |
| 25 | 25 | #elseif ($javaType == "Boolean") |
| 26 | 26 | #set ($dictMethod = "getBoolDictOptions") |
| 27 | 27 | #end |
| 28 | - #if ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里 TODO 芋艿:这里要忽略下 join 字段; | |
| 28 | + #if ( $column.id == $subJoinColumn.id) ## 特殊:忽略主子表的 join 字段,不用填写 | |
| 29 | + #elseif ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里 | |
| 29 | 30 | <el-form-item label="${comment}" prop="${javaField}"> |
| 30 | 31 | <el-input v-model="formData.${javaField}" placeholder="请输入${comment}" /> |
| 31 | 32 | </el-form-item> | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/form.vue.vm
| ... | ... | @@ -118,7 +118,7 @@ |
| 118 | 118 | #end |
| 119 | 119 | </el-form> |
| 120 | 120 | ## 特殊:主子表专属逻辑 |
| 121 | -#if ( $subTables && $subTables.size() > 0 ) | |
| 121 | +#if ( $table.templateType == 10 || $table.templateType == 12 ) | |
| 122 | 122 | <!-- 子表的表单 --> |
| 123 | 123 | <el-tabs v-model="subTabsName"> |
| 124 | 124 | #foreach ($subTable in $subTables) |
| ... | ... | @@ -146,9 +146,11 @@ import * as ${simpleClassName}Api from '@/api/${table.moduleName}/${table.busine |
| 146 | 146 | import { defaultProps, handleTree } from '@/utils/tree' |
| 147 | 147 | #end |
| 148 | 148 | ## 特殊:主子表专属逻辑 |
| 149 | +#if ( $table.templateType == 10 || $table.templateType == 12 ) | |
| 149 | 150 | #foreach ($subSimpleClassName in $subSimpleClassNames) |
| 150 | 151 | import ${subSimpleClassName}Form from './components/${subSimpleClassName}Form.vue' |
| 151 | 152 | #end |
| 153 | +#end | |
| 152 | 154 | |
| 153 | 155 | const { t } = useI18n() // 国际化 |
| 154 | 156 | const message = useMessage() // 消息弹窗 |
| ... | ... | @@ -182,6 +184,7 @@ const formRef = ref() // 表单 Ref |
| 182 | 184 | const ${classNameVar}Tree = ref() // 树形结构 |
| 183 | 185 | #end |
| 184 | 186 | ## 特殊:主子表专属逻辑 |
| 187 | +#if ( $table.templateType == 10 || $table.templateType == 12 ) | |
| 185 | 188 | #if ( $subTables && $subTables.size() > 0 ) |
| 186 | 189 | |
| 187 | 190 | /** 子表的表单 */ |
| ... | ... | @@ -190,6 +193,7 @@ const subTabsName = ref('$subClassNameVars.get(0)') |
| 190 | 193 | const ${subClassNameVar}FormRef = ref() |
| 191 | 194 | #end |
| 192 | 195 | #end |
| 196 | +#end | |
| 193 | 197 | |
| 194 | 198 | /** 打开弹窗 */ |
| 195 | 199 | const open = async (type: string, id?: number) => { |
| ... | ... | @@ -219,6 +223,7 @@ const submitForm = async () => { |
| 219 | 223 | // 校验表单 |
| 220 | 224 | await formRef.value.validate() |
| 221 | 225 | ## 特殊:主子表专属逻辑 |
| 226 | +#if ( $table.templateType == 10 || $table.templateType == 12 ) | |
| 222 | 227 | #if ( $subTables && $subTables.size() > 0 ) |
| 223 | 228 | // 校验子表单 |
| 224 | 229 | #foreach ($subTable in $subTables) |
| ... | ... | @@ -232,11 +237,13 @@ const submitForm = async () => { |
| 232 | 237 | } |
| 233 | 238 | #end |
| 234 | 239 | #end |
| 240 | +#end | |
| 235 | 241 | // 提交请求 |
| 236 | 242 | formLoading.value = true |
| 237 | 243 | try { |
| 238 | 244 | const data = formData.value as unknown as ${simpleClassName}Api.${simpleClassName}VO |
| 239 | 245 | ## 特殊:主子表专属逻辑 |
| 246 | +#if ( $table.templateType == 10 || $table.templateType == 12 ) | |
| 240 | 247 | #if ( $subTables && $subTables.size() > 0 ) |
| 241 | 248 | // 拼接子表的数据 |
| 242 | 249 | #foreach ($subTable in $subTables) |
| ... | ... | @@ -245,6 +252,7 @@ const submitForm = async () => { |
| 245 | 252 | data.${subClassNameVar}#if ( $subTable.subJoinMany)s#end = ${subClassNameVar}FormRef.value.getData() |
| 246 | 253 | #end |
| 247 | 254 | #end |
| 255 | +#end | |
| 248 | 256 | if (formType.value === 'create') { |
| 249 | 257 | await ${simpleClassName}Api.create${simpleClassName}(data) |
| 250 | 258 | message.success(t('common.createSuccess')) | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/demo03/Demo03StudentServiceImplTest.java deleted
| 1 | -package cn.iocoder.yudao.module.infra.service.demo03; | |
| 2 | - | |
| 3 | -import cn.iocoder.yudao.module.infra.service.demo.demo03.Demo03StudentServiceImpl; | |
| 4 | -import org.junit.jupiter.api.Disabled; | |
| 5 | -import org.junit.jupiter.api.Test; | |
| 6 | - | |
| 7 | -import javax.annotation.Resource; | |
| 8 | - | |
| 9 | -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | |
| 10 | - | |
| 11 | -import cn.iocoder.yudao.module.infra.controller.admin.demo.demo03.normal.vo.*; | |
| 12 | -import cn.iocoder.yudao.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO; | |
| 13 | -import cn.iocoder.yudao.module.infra.dal.mysql.demo.demo03.Demo03StudentMapper; | |
| 14 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 15 | - | |
| 16 | -import org.springframework.context.annotation.Import; | |
| 17 | - | |
| 18 | -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; | |
| 19 | -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; | |
| 20 | -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; | |
| 21 | -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; | |
| 22 | -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; | |
| 23 | -import static org.junit.jupiter.api.Assertions.*; | |
| 24 | - | |
| 25 | -/** | |
| 26 | - * {@link Demo03StudentServiceImpl} 的单元测试类 | |
| 27 | - * | |
| 28 | - * @author 芋道源码 | |
| 29 | - */ | |
| 30 | -@Import(Demo03StudentServiceImpl.class) | |
| 31 | -public class Demo03StudentServiceImplTest extends BaseDbUnitTest { | |
| 32 | - | |
| 33 | - @Resource | |
| 34 | - private Demo03StudentServiceImpl demo03StudentService; | |
| 35 | - | |
| 36 | - @Resource | |
| 37 | - private Demo03StudentMapper demo03StudentMapper; | |
| 38 | - | |
| 39 | - @Test | |
| 40 | - public void testCreateDemo03Student_success() { | |
| 41 | - // 准备参数 | |
| 42 | - Demo03StudentSaveReqVO createReqVO = randomPojo(Demo03StudentSaveReqVO.class).setId(null); | |
| 43 | - | |
| 44 | - // 调用 | |
| 45 | - Long demo03StudentId = demo03StudentService.createDemo03Student(createReqVO); | |
| 46 | - // 断言 | |
| 47 | - assertNotNull(demo03StudentId); | |
| 48 | - // 校验记录的属性是否正确 | |
| 49 | - Demo03StudentDO demo03Student = demo03StudentMapper.selectById(demo03StudentId); | |
| 50 | - assertPojoEquals(createReqVO, demo03Student, "id"); | |
| 51 | - } | |
| 52 | - | |
| 53 | - @Test | |
| 54 | - public void testUpdateDemo03Student_success() { | |
| 55 | - // mock 数据 | |
| 56 | - Demo03StudentDO dbDemo03Student = randomPojo(Demo03StudentDO.class); | |
| 57 | - demo03StudentMapper.insert(dbDemo03Student);// @Sql: 先插入出一条存在的数据 | |
| 58 | - // 准备参数 | |
| 59 | - Demo03StudentSaveReqVO updateReqVO = randomPojo(Demo03StudentSaveReqVO.class, o -> { | |
| 60 | - o.setId(dbDemo03Student.getId()); // 设置更新的 ID | |
| 61 | - }); | |
| 62 | - | |
| 63 | - // 调用 | |
| 64 | - demo03StudentService.updateDemo03Student(updateReqVO); | |
| 65 | - // 校验是否更新正确 | |
| 66 | - Demo03StudentDO demo03Student = demo03StudentMapper.selectById(updateReqVO.getId()); // 获取最新的 | |
| 67 | - assertPojoEquals(updateReqVO, demo03Student); | |
| 68 | - } | |
| 69 | - | |
| 70 | - @Test | |
| 71 | - public void testUpdateDemo03Student_notExists() { | |
| 72 | - // 准备参数 | |
| 73 | - Demo03StudentSaveReqVO updateReqVO = randomPojo(Demo03StudentSaveReqVO.class); | |
| 74 | - | |
| 75 | - // 调用, 并断言异常 | |
| 76 | - assertServiceException(() -> demo03StudentService.updateDemo03Student(updateReqVO), DEMO03_STUDENT_NOT_EXISTS); | |
| 77 | - } | |
| 78 | - | |
| 79 | - @Test | |
| 80 | - public void testDeleteDemo03Student_success() { | |
| 81 | - // mock 数据 | |
| 82 | - Demo03StudentDO dbDemo03Student = randomPojo(Demo03StudentDO.class); | |
| 83 | - demo03StudentMapper.insert(dbDemo03Student);// @Sql: 先插入出一条存在的数据 | |
| 84 | - // 准备参数 | |
| 85 | - Long id = dbDemo03Student.getId(); | |
| 86 | - | |
| 87 | - // 调用 | |
| 88 | - demo03StudentService.deleteDemo03Student(id); | |
| 89 | - // 校验数据不存在了 | |
| 90 | - assertNull(demo03StudentMapper.selectById(id)); | |
| 91 | - } | |
| 92 | - | |
| 93 | - @Test | |
| 94 | - public void testDeleteDemo03Student_notExists() { | |
| 95 | - // 准备参数 | |
| 96 | - Long id = randomLongId(); | |
| 97 | - | |
| 98 | - // 调用, 并断言异常 | |
| 99 | - assertServiceException(() -> demo03StudentService.deleteDemo03Student(id), DEMO03_STUDENT_NOT_EXISTS); | |
| 100 | - } | |
| 101 | - | |
| 102 | - @Test | |
| 103 | - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 | |
| 104 | - public void testGetDemo03StudentPage() { | |
| 105 | - // mock 数据 | |
| 106 | - Demo03StudentDO dbDemo03Student = randomPojo(Demo03StudentDO.class, o -> { // 等会查询到 | |
| 107 | - o.setName(null); | |
| 108 | - o.setSex(null); | |
| 109 | - o.setDescription(null); | |
| 110 | - o.setCreateTime(null); | |
| 111 | - }); | |
| 112 | - demo03StudentMapper.insert(dbDemo03Student); | |
| 113 | - // 测试 name 不匹配 | |
| 114 | - demo03StudentMapper.insert(cloneIgnoreId(dbDemo03Student, o -> o.setName(null))); | |
| 115 | - // 测试 sex 不匹配 | |
| 116 | - demo03StudentMapper.insert(cloneIgnoreId(dbDemo03Student, o -> o.setSex(null))); | |
| 117 | - // 测试 description 不匹配 | |
| 118 | - demo03StudentMapper.insert(cloneIgnoreId(dbDemo03Student, o -> o.setDescription(null))); | |
| 119 | - // 测试 createTime 不匹配 | |
| 120 | - demo03StudentMapper.insert(cloneIgnoreId(dbDemo03Student, o -> o.setCreateTime(null))); | |
| 121 | - // 准备参数 | |
| 122 | - Demo03StudentPageReqVO reqVO = new Demo03StudentPageReqVO(); | |
| 123 | - reqVO.setName(null); | |
| 124 | - reqVO.setSex(null); | |
| 125 | - reqVO.setDescription(null); | |
| 126 | - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | |
| 127 | - | |
| 128 | - // 调用 | |
| 129 | - PageResult<Demo03StudentDO> pageResult = demo03StudentService.getDemo03StudentPage(reqVO); | |
| 130 | - // 断言 | |
| 131 | - assertEquals(1, pageResult.getTotal()); | |
| 132 | - assertEquals(1, pageResult.getList().size()); | |
| 133 | - assertPojoEquals(dbDemo03Student, pageResult.getList().get(0)); | |
| 134 | - } | |
| 135 | - | |
| 136 | -} | |
| 137 | 0 | \ No newline at end of file |