1、钉钉短信渠道错误信息捕获字段修正;2、infra微服务无用代码清理;

This commit is contained in:
gaoqr
2024-09-25 16:03:41 +08:00
parent 38af1710fb
commit b6ada0e251
31 changed files with 1 additions and 1771 deletions
@@ -64,7 +64,7 @@ public class DebugDingTalkSmsClient extends AbstractSmsClient {
Map<?, ?> responseObj = JsonUtils.parseObject(responseText, Map.class);
String errorCode = MapUtil.getStr(responseObj, "errcode");
return new SmsSendRespDTO().setSuccess(Objects.equals(errorCode, "0")).setSerialNo(StrUtil.uuid())
.setApiCode(errorCode).setApiMsg(MapUtil.getStr(responseObj, "errorMsg")).setMobile(mobile).setChannelCode(properties.getChannel());
.setApiCode(errorCode).setApiMsg(MapUtil.getStr(responseObj, "errmsg")).setMobile(mobile).setChannelCode(properties.getChannel());
}
/**
@@ -1,93 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo01;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.excel.core.util.ExcelUtils;
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
import com.cf.imes.module.infra.controller.admin.demo.demo01.vo.Demo01ContactPageReqVO;
import com.cf.imes.module.infra.controller.admin.demo.demo01.vo.Demo01ContactRespVO;
import com.cf.imes.module.infra.controller.admin.demo.demo01.vo.Demo01ContactSaveReqVO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo01.Demo01ContactDO;
import com.cf.imes.module.infra.service.demo.demo01.Demo01ContactService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static com.cf.imes.framework.common.pojo.CommonResult.success;
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 示例联系人")
@RestController
@RequestMapping("/infra/demo01-contact")
@Validated
public class Demo01ContactController {
@Resource
private Demo01ContactService demo01ContactService;
@PostMapping("/create")
@Operation(summary = "创建示例联系人")
@PreAuthorize("@ss.hasPermission('infra:demo01-contact:create')")
public CommonResult<Long> createDemo01Contact(@Valid @RequestBody Demo01ContactSaveReqVO createReqVO) {
return success(demo01ContactService.createDemo01Contact(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新示例联系人")
@PreAuthorize("@ss.hasPermission('infra:demo01-contact:update')")
public CommonResult<Boolean> updateDemo01Contact(@Valid @RequestBody Demo01ContactSaveReqVO updateReqVO) {
demo01ContactService.updateDemo01Contact(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除示例联系人")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('infra:demo01-contact:delete')")
public CommonResult<Boolean> deleteDemo01Contact(@RequestParam("id") Long id) {
demo01ContactService.deleteDemo01Contact(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得示例联系人")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('infra:demo01-contact:query')")
public CommonResult<Demo01ContactRespVO> getDemo01Contact(@RequestParam("id") Long id) {
Demo01ContactDO demo01Contact = demo01ContactService.getDemo01Contact(id);
return success(BeanUtils.toBean(demo01Contact, Demo01ContactRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得示例联系人分页")
@PreAuthorize("@ss.hasPermission('infra:demo01-contact:query')")
public CommonResult<PageResult<Demo01ContactRespVO>> getDemo01ContactPage(@Valid Demo01ContactPageReqVO pageReqVO) {
PageResult<Demo01ContactDO> pageResult = demo01ContactService.getDemo01ContactPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, Demo01ContactRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出示例联系人 Excel")
@PreAuthorize("@ss.hasPermission('infra:demo01-contact:export')")
@OperateLog(type = EXPORT)
public void exportDemo01ContactExcel(@Valid Demo01ContactPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<Demo01ContactDO> list = demo01ContactService.getDemo01ContactPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "示例联系人.xls", "数据", Demo01ContactRespVO.class,
BeanUtils.toBean(list, Demo01ContactRespVO.class));
}
}
@@ -1,30 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo01.vo;
import com.cf.imes.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 示例联系人分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class Demo01ContactPageReqVO extends PageParam {
@Schema(description = "名字", example = "张三")
private String name;
@Schema(description = "性别", example = "1")
private Integer sex;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}
@@ -1,46 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo01.vo;
import com.cf.imes.framework.excel.core.annotations.DictFormat;
import com.cf.imes.framework.excel.core.convert.DictConvert;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 示例联系人 Response VO")
@Data
@ExcelIgnoreUnannotated
public class Demo01ContactRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21555")
@ExcelProperty("编号")
private Long id;
@Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@ExcelProperty("名字")
private String name;
@Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty(value = "性别", converter = DictConvert.class)
@DictFormat("system_user_sex") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Integer sex;
@Schema(description = "出生年", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("出生年")
private LocalDateTime birthday;
@Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
@ExcelProperty("简介")
private String description;
@Schema(description = "头像")
@ExcelProperty("头像")
private String avatar;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}
@@ -1,36 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo01.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 示例联系人新增/修改 Request VO")
@Data
public class Demo01ContactSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21555")
private Long id;
@Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@NotEmpty(message = "名字不能为空")
private String name;
@Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "性别不能为空")
private Integer sex;
@Schema(description = "出生年", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "出生年不能为空")
private LocalDateTime birthday;
@Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
@NotEmpty(message = "简介不能为空")
private String description;
@Schema(description = "头像")
private String avatar;
}
@@ -1,90 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo02;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.excel.core.util.ExcelUtils;
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
import com.cf.imes.module.infra.controller.admin.demo.demo02.vo.Demo02CategoryListReqVO;
import com.cf.imes.module.infra.controller.admin.demo.demo02.vo.Demo02CategoryRespVO;
import com.cf.imes.module.infra.controller.admin.demo.demo02.vo.Demo02CategorySaveReqVO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo02.Demo02CategoryDO;
import com.cf.imes.module.infra.service.demo.demo02.Demo02CategoryService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static com.cf.imes.framework.common.pojo.CommonResult.success;
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 示例分类")
@RestController
@RequestMapping("/infra/demo02-category")
@Validated
public class Demo02CategoryController {
@Resource
private Demo02CategoryService demo02CategoryService;
@PostMapping("/create")
@Operation(summary = "创建示例分类")
@PreAuthorize("@ss.hasPermission('infra:demo02-category:create')")
public CommonResult<Long> createDemo02Category(@Valid @RequestBody Demo02CategorySaveReqVO createReqVO) {
return success(demo02CategoryService.createDemo02Category(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新示例分类")
@PreAuthorize("@ss.hasPermission('infra:demo02-category:update')")
public CommonResult<Boolean> updateDemo02Category(@Valid @RequestBody Demo02CategorySaveReqVO updateReqVO) {
demo02CategoryService.updateDemo02Category(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除示例分类")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('infra:demo02-category:delete')")
public CommonResult<Boolean> deleteDemo02Category(@RequestParam("id") Long id) {
demo02CategoryService.deleteDemo02Category(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得示例分类")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('infra:demo02-category:query')")
public CommonResult<Demo02CategoryRespVO> getDemo02Category(@RequestParam("id") Long id) {
Demo02CategoryDO demo02Category = demo02CategoryService.getDemo02Category(id);
return success(BeanUtils.toBean(demo02Category, Demo02CategoryRespVO.class));
}
@GetMapping("/list")
@Operation(summary = "获得示例分类列表")
@PreAuthorize("@ss.hasPermission('infra:demo02-category:query')")
public CommonResult<List<Demo02CategoryRespVO>> getDemo02CategoryList(@Valid Demo02CategoryListReqVO listReqVO) {
List<Demo02CategoryDO> list = demo02CategoryService.getDemo02CategoryList(listReqVO);
return success(BeanUtils.toBean(list, Demo02CategoryRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出示例分类 Excel")
@PreAuthorize("@ss.hasPermission('infra:demo02-category:export')")
@OperateLog(type = EXPORT)
public void exportDemo02CategoryExcel(@Valid Demo02CategoryListReqVO listReqVO,
HttpServletResponse response) throws IOException {
List<Demo02CategoryDO> list = demo02CategoryService.getDemo02CategoryList(listReqVO);
// 导出 Excel
ExcelUtils.write(response, "示例分类.xls", "数据", Demo02CategoryRespVO.class,
BeanUtils.toBean(list, Demo02CategoryRespVO.class));
}
}
@@ -1,25 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo02.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 示例分类列表 Request VO")
@Data
public class Demo02CategoryListReqVO {
@Schema(description = "名字", example = "晨丰")
private String name;
@Schema(description = "父级编号", example = "6080")
private Long parentId;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}
@@ -1,31 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo02.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 示例分类 Response VO")
@Data
@ExcelIgnoreUnannotated
public class Demo02CategoryRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10304")
@ExcelProperty("编号")
private Long id;
@Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
@ExcelProperty("名字")
private String name;
@Schema(description = "父级编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "6080")
@ExcelProperty("父级编号")
private Long parentId;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}
@@ -1,24 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo02.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 示例分类新增/修改 Request VO")
@Data
public class Demo02CategorySaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10304")
private Long id;
@Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
@NotEmpty(message = "名字不能为空")
private String name;
@Schema(description = "父级编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "6080")
@NotNull(message = "父级编号不能为空")
private Long parentId;
}
@@ -1,197 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo03;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.excel.core.util.ExcelUtils;
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
import com.cf.imes.module.infra.controller.admin.demo.demo03.vo.Demo03StudentPageReqVO;
import com.cf.imes.module.infra.controller.admin.demo.demo03.vo.Demo03StudentRespVO;
import com.cf.imes.module.infra.controller.admin.demo.demo03.vo.Demo03StudentSaveReqVO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO;
import com.cf.imes.module.infra.service.demo.demo03.Demo03StudentService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static com.cf.imes.framework.common.pojo.CommonResult.success;
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 学生")
@RestController
@RequestMapping("/infra/demo03-student")
@Validated
public class Demo03StudentController {
@Resource
private Demo03StudentService demo03StudentService;
@PostMapping("/create")
@Operation(summary = "创建学生")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:create')")
public CommonResult<Long> createDemo03Student(@Valid @RequestBody Demo03StudentSaveReqVO createReqVO) {
return success(demo03StudentService.createDemo03Student(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新学生")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:update')")
public CommonResult<Boolean> updateDemo03Student(@Valid @RequestBody Demo03StudentSaveReqVO updateReqVO) {
demo03StudentService.updateDemo03Student(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除学生")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
public CommonResult<Boolean> deleteDemo03Student(@RequestParam("id") Long id) {
demo03StudentService.deleteDemo03Student(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得学生")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:query')")
public CommonResult<Demo03StudentRespVO> getDemo03Student(@RequestParam("id") Long id) {
Demo03StudentDO demo03Student = demo03StudentService.getDemo03Student(id);
return success(BeanUtils.toBean(demo03Student, Demo03StudentRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得学生分页")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:query')")
public CommonResult<PageResult<Demo03StudentRespVO>> getDemo03StudentPage(@Valid Demo03StudentPageReqVO pageReqVO) {
PageResult<Demo03StudentDO> pageResult = demo03StudentService.getDemo03StudentPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, Demo03StudentRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出学生 Excel")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:export')")
@OperateLog(type = EXPORT)
public void exportDemo03StudentExcel(@Valid Demo03StudentPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<Demo03StudentDO> list = demo03StudentService.getDemo03StudentPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "学生.xls", "数据", Demo03StudentRespVO.class,
BeanUtils.toBean(list, Demo03StudentRespVO.class));
}
// ==================== 子表(学生课程) ====================
@GetMapping("/demo03-course/page")
@Operation(summary = "获得学生课程分页")
@Parameter(name = "studentId", description = "学生编号")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:query')")
public CommonResult<PageResult<Demo03CourseDO>> getDemo03CoursePage(PageParam pageReqVO,
@RequestParam("studentId") Long studentId) {
return success(demo03StudentService.getDemo03CoursePage(pageReqVO, studentId));
}
@PostMapping("/demo03-course/create")
@Operation(summary = "创建学生课程")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:create')")
public CommonResult<Long> createDemo03Course(@Valid @RequestBody Demo03CourseDO demo03Course) {
return success(demo03StudentService.createDemo03Course(demo03Course));
}
@PutMapping("/demo03-course/update")
@Operation(summary = "更新学生课程")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:update')")
public CommonResult<Boolean> updateDemo03Course(@Valid @RequestBody Demo03CourseDO demo03Course) {
demo03StudentService.updateDemo03Course(demo03Course);
return success(true);
}
@DeleteMapping("/demo03-course/delete")
@Parameter(name = "id", description = "编号", required = true)
@Operation(summary = "删除学生课程")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
public CommonResult<Boolean> deleteDemo03Course(@RequestParam("id") Long id) {
demo03StudentService.deleteDemo03Course(id);
return success(true);
}
@GetMapping("/demo03-course/get")
@Operation(summary = "获得学生课程")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('infra:demo03-student:query')")
public CommonResult<Demo03CourseDO> getDemo03Course(@RequestParam("id") Long id) {
return success(demo03StudentService.getDemo03Course(id));
}
@GetMapping("/demo03-course/list-by-student-id")
@Operation(summary = "获得学生课程列表")
@Parameter(name = "studentId", description = "学生编号")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:query')")
public CommonResult<List<Demo03CourseDO>> getDemo03CourseListByStudentId(@RequestParam("studentId") Long studentId) {
return success(demo03StudentService.getDemo03CourseListByStudentId(studentId));
}
// ==================== 子表(学生班级) ====================
@GetMapping("/demo03-grade/page")
@Operation(summary = "获得学生班级分页")
@Parameter(name = "studentId", description = "学生编号")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:query')")
public CommonResult<PageResult<Demo03GradeDO>> getDemo03GradePage(PageParam pageReqVO,
@RequestParam("studentId") Long studentId) {
return success(demo03StudentService.getDemo03GradePage(pageReqVO, studentId));
}
@PostMapping("/demo03-grade/create")
@Operation(summary = "创建学生班级")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:create')")
public CommonResult<Long> createDemo03Grade(@Valid @RequestBody Demo03GradeDO demo03Grade) {
return success(demo03StudentService.createDemo03Grade(demo03Grade));
}
@PutMapping("/demo03-grade/update")
@Operation(summary = "更新学生班级")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:update')")
public CommonResult<Boolean> updateDemo03Grade(@Valid @RequestBody Demo03GradeDO demo03Grade) {
demo03StudentService.updateDemo03Grade(demo03Grade);
return success(true);
}
@DeleteMapping("/demo03-grade/delete")
@Parameter(name = "id", description = "编号", required = true)
@Operation(summary = "删除学生班级")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
public CommonResult<Boolean> deleteDemo03Grade(@RequestParam("id") Long id) {
demo03StudentService.deleteDemo03Grade(id);
return success(true);
}
@GetMapping("/demo03-grade/get")
@Operation(summary = "获得学生班级")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('infra:demo03-student:query')")
public CommonResult<Demo03GradeDO> getDemo03Grade(@RequestParam("id") Long id) {
return success(demo03StudentService.getDemo03Grade(id));
}
@GetMapping("/demo03-grade/get-by-student-id")
@Operation(summary = "获得学生班级")
@Parameter(name = "studentId", description = "学生编号")
@PreAuthorize("@ss.hasPermission('infra:demo03-student:query')")
public CommonResult<Demo03GradeDO> getDemo03GradeByStudentId(@RequestParam("studentId") Long studentId) {
return success(demo03StudentService.getDemo03GradeByStudentId(studentId));
}
}
@@ -1 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo03;
@@ -1,33 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo03.vo;
import com.cf.imes.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 学生分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class Demo03StudentPageReqVO extends PageParam {
@Schema(description = "名字", example = "晨丰")
private String name;
@Schema(description = "性别")
private Integer sex;
@Schema(description = "简介", example = "随便")
private String description;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}
@@ -1,42 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo03.vo;
import com.cf.imes.framework.excel.core.annotations.DictFormat;
import com.cf.imes.framework.excel.core.convert.DictConvert;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 学生 Response VO")
@Data
@ExcelIgnoreUnannotated
public class Demo03StudentRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8525")
@ExcelProperty("编号")
private Long id;
@Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
@ExcelProperty("名字")
private String name;
@Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty(value = "性别", converter = DictConvert.class)
@DictFormat("system_user_sex") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Integer sex;
@Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("出生日期")
private LocalDateTime birthday;
@Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便")
@ExcelProperty("简介")
private String description;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}
@@ -1,41 +0,0 @@
package com.cf.imes.module.infra.controller.admin.demo.demo03.vo;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 学生新增/修改 Request VO")
@Data
public class Demo03StudentSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8525")
private Long id;
@Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
@NotEmpty(message = "名字不能为空")
private String name;
@Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "性别不能为空")
private Integer sex;
@Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "出生日期不能为空")
private LocalDateTime birthday;
@Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便")
@NotEmpty(message = "简介不能为空")
private String description;
private List<Demo03CourseDO> demo03Courses;
private Demo03GradeDO demo03Grade;
}
@@ -1,8 +0,0 @@
/**
* 代码生成示例
*
* 1. demo01:单表(增删改查)
* 2. demo02:单表(树形结构)
* 3. demo03:主子表(标准模式)+ 主子表(ERP 模式)+ 主子表(内嵌模式)
*/
package com.cf.imes.module.infra.controller.admin.demo;
@@ -1,54 +0,0 @@
package com.cf.imes.module.infra.dal.dataobject.demo.demo01;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import java.time.LocalDateTime;
/**
* 示例联系人 DO
*
* @author 晨丰科技
*/
@TableName("infra_demo01_contact")
@KeySequence("infra_demo01_contact_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Demo01ContactDO extends BaseDO {
/**
* 编号
*/
@TableId
private Long id;
/**
* 名字
*/
private String name;
/**
* 性别
*
* 枚举 {@link TODO system_user_sex 对应的类}
*/
private Integer sex;
/**
* 出生年
*/
private LocalDateTime birthday;
/**
* 简介
*/
private String description;
/**
* 头像
*/
private String avatar;
}
@@ -1,40 +0,0 @@
package com.cf.imes.module.infra.dal.dataobject.demo.demo02;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
/**
* 示例分类 DO
*
* @author 晨丰科技
*/
@TableName("infra_demo02_category")
@KeySequence("infra_demo02_category_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Demo02CategoryDO extends BaseDO {
public static final Long PARENT_ID_ROOT = 0L;
/**
* 编号
*/
@TableId
private Long id;
/**
* 名字
*/
private String name;
/**
* 父级编号
*/
private Long parentId;
}
@@ -1,42 +0,0 @@
package com.cf.imes.module.infra.dal.dataobject.demo.demo03;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
/**
* 学生课程 DO
*
* @author 晨丰科技
*/
@TableName("infra_demo03_course")
@KeySequence("infra_demo03_course_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Demo03CourseDO extends BaseDO {
/**
* 编号
*/
@TableId
private Long id;
/**
* 学生编号
*/
private Long studentId;
/**
* 名字
*/
private String name;
/**
* 分数
*/
private Integer score;
}
@@ -1,42 +0,0 @@
package com.cf.imes.module.infra.dal.dataobject.demo.demo03;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
/**
* 学生班级 DO
*
* @author 晨丰科技
*/
@TableName("infra_demo03_grade")
@KeySequence("infra_demo03_grade_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Demo03GradeDO extends BaseDO {
/**
* 编号
*/
@TableId
private Long id;
/**
* 学生编号
*/
private Long studentId;
/**
* 名字
*/
private String name;
/**
* 班主任
*/
private String teacher;
}
@@ -1,50 +0,0 @@
package com.cf.imes.module.infra.dal.dataobject.demo.demo03;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import java.time.LocalDateTime;
/**
* 学生 DO
*
* @author 晨丰科技
*/
@TableName("infra_demo03_student")
@KeySequence("infra_demo03_student_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Demo03StudentDO extends BaseDO {
/**
* 编号
*/
@TableId
private Long id;
/**
* 名字
*/
private String name;
/**
* 性别
*
* 枚举 {@link TODO system_user_sex 对应的类}
*/
private Integer sex;
/**
* 出生日期
*/
private LocalDateTime birthday;
/**
* 简介
*/
private String description;
}
@@ -1,26 +0,0 @@
package com.cf.imes.module.infra.dal.mysql.demo.demo01;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.infra.controller.admin.demo.demo01.vo.Demo01ContactPageReqVO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo01.Demo01ContactDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 示例联系人 Mapper
*
* @author 晨丰科技
*/
@Mapper
public interface Demo01ContactMapper extends BaseMapperX<Demo01ContactDO> {
default PageResult<Demo01ContactDO> selectPage(Demo01ContactPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<Demo01ContactDO>()
.likeIfPresent(Demo01ContactDO::getName, reqVO.getName())
.eqIfPresent(Demo01ContactDO::getSex, reqVO.getSex())
.betweenIfPresent(Demo01ContactDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(Demo01ContactDO::getId));
}
}
@@ -1,35 +0,0 @@
package com.cf.imes.module.infra.dal.mysql.demo.demo02;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.infra.controller.admin.demo.demo02.vo.Demo02CategoryListReqVO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo02.Demo02CategoryDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 示例分类 Mapper
*
* @author 晨丰科技
*/
@Mapper
public interface Demo02CategoryMapper extends BaseMapperX<Demo02CategoryDO> {
default List<Demo02CategoryDO> selectList(Demo02CategoryListReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<Demo02CategoryDO>()
.likeIfPresent(Demo02CategoryDO::getName, reqVO.getName())
.eqIfPresent(Demo02CategoryDO::getParentId, reqVO.getParentId())
.betweenIfPresent(Demo02CategoryDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(Demo02CategoryDO::getId));
}
default Demo02CategoryDO selectByParentIdAndName(Long parentId, String name) {
return selectOne(Demo02CategoryDO::getParentId, parentId, Demo02CategoryDO::getName, name);
}
default Long selectCountByParentId(Long parentId) {
return selectCount(Demo02CategoryDO::getParentId, parentId);
}
}
@@ -1,34 +0,0 @@
package com.cf.imes.module.infra.dal.mysql.demo.demo03;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 学生课程 Mapper
*
* @author 晨丰科技
*/
@Mapper
public interface Demo03CourseMapper extends BaseMapperX<Demo03CourseDO> {
default PageResult<Demo03CourseDO> selectPage(PageParam reqVO, Long studentId) {
return selectPage(reqVO, new LambdaQueryWrapperX<Demo03CourseDO>()
.eq(Demo03CourseDO::getStudentId, studentId)
.orderByDesc(Demo03CourseDO::getId));
}
default List<Demo03CourseDO> selectListByStudentId(Long studentId) {
return selectList(Demo03CourseDO::getStudentId, studentId);
}
default int deleteByStudentId(Long studentId) {
return delete(Demo03CourseDO::getStudentId, studentId);
}
}
@@ -1,32 +0,0 @@
package com.cf.imes.module.infra.dal.mysql.demo.demo03;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 学生班级 Mapper
*
* @author 晨丰科技
*/
@Mapper
public interface Demo03GradeMapper extends BaseMapperX<Demo03GradeDO> {
default PageResult<Demo03GradeDO> selectPage(PageParam reqVO, Long studentId) {
return selectPage(reqVO, new LambdaQueryWrapperX<Demo03GradeDO>()
.eq(Demo03GradeDO::getStudentId, studentId)
.orderByDesc(Demo03GradeDO::getId));
}
default Demo03GradeDO selectByStudentId(Long studentId) {
return selectOne(Demo03GradeDO::getStudentId, studentId);
}
default int deleteByStudentId(Long studentId) {
return delete(Demo03GradeDO::getStudentId, studentId);
}
}
@@ -1,27 +0,0 @@
package com.cf.imes.module.infra.dal.mysql.demo.demo03;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.infra.controller.admin.demo.demo03.vo.Demo03StudentPageReqVO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 学生 Mapper
*
* @author 晨丰科技
*/
@Mapper
public interface Demo03StudentMapper extends BaseMapperX<Demo03StudentDO> {
default PageResult<Demo03StudentDO> selectPage(Demo03StudentPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<Demo03StudentDO>()
.likeIfPresent(Demo03StudentDO::getName, reqVO.getName())
.eqIfPresent(Demo03StudentDO::getSex, reqVO.getSex())
.eqIfPresent(Demo03StudentDO::getDescription, reqVO.getDescription())
.betweenIfPresent(Demo03StudentDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(Demo03StudentDO::getId));
}
}
@@ -1,55 +0,0 @@
package com.cf.imes.module.infra.service.demo.demo01;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.infra.controller.admin.demo.demo01.vo.Demo01ContactPageReqVO;
import com.cf.imes.module.infra.controller.admin.demo.demo01.vo.Demo01ContactSaveReqVO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo01.Demo01ContactDO;
import javax.validation.Valid;
/**
* 示例联系人 Service 接口
*
* @author 晨丰科技
*/
public interface Demo01ContactService {
/**
* 创建示例联系人
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createDemo01Contact(@Valid Demo01ContactSaveReqVO createReqVO);
/**
* 更新示例联系人
*
* @param updateReqVO 更新信息
*/
void updateDemo01Contact(@Valid Demo01ContactSaveReqVO updateReqVO);
/**
* 删除示例联系人
*
* @param id 编号
*/
void deleteDemo01Contact(Long id);
/**
* 获得示例联系人
*
* @param id 编号
* @return 示例联系人
*/
Demo01ContactDO getDemo01Contact(Long id);
/**
* 获得示例联系人分页
*
* @param pageReqVO 分页查询
* @return 示例联系人分页
*/
PageResult<Demo01ContactDO> getDemo01ContactPage(Demo01ContactPageReqVO pageReqVO);
}
@@ -1,72 +0,0 @@
package com.cf.imes.module.infra.service.demo.demo01;
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.infra.controller.admin.demo.demo01.vo.Demo01ContactPageReqVO;
import com.cf.imes.module.infra.controller.admin.demo.demo01.vo.Demo01ContactSaveReqVO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo01.Demo01ContactDO;
import com.cf.imes.module.infra.dal.mysql.demo.demo01.Demo01ContactMapper;
import com.cf.imes.module.infra.enums.ErrorCodeConstants;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* 示例联系人 Service 实现类
*
* @author 晨丰科技
*/
@Service
@Validated
public class Demo01ContactServiceImpl implements Demo01ContactService {
@Resource
private Demo01ContactMapper demo01ContactMapper;
@Override
public Long createDemo01Contact(Demo01ContactSaveReqVO createReqVO) {
// 插入
Demo01ContactDO demo01Contact = BeanUtils.toBean(createReqVO, Demo01ContactDO.class);
demo01ContactMapper.insert(demo01Contact);
// 返回
return demo01Contact.getId();
}
@Override
public void updateDemo01Contact(Demo01ContactSaveReqVO updateReqVO) {
// 校验存在
validateDemo01ContactExists(updateReqVO.getId());
// 更新
Demo01ContactDO updateObj = BeanUtils.toBean(updateReqVO, Demo01ContactDO.class);
demo01ContactMapper.updateById(updateObj);
}
@Override
public void deleteDemo01Contact(Long id) {
// 校验存在
validateDemo01ContactExists(id);
// 删除
demo01ContactMapper.deleteById(id);
}
private void validateDemo01ContactExists(Long id) {
if (demo01ContactMapper.selectById(id) == null) {
throw ServiceExceptionUtil.exception(ErrorCodeConstants.DEMO01_CONTACT_NOT_EXISTS);
}
}
@Override
public Demo01ContactDO getDemo01Contact(Long id) {
return demo01ContactMapper.selectById(id);
}
@Override
public PageResult<Demo01ContactDO> getDemo01ContactPage(Demo01ContactPageReqVO pageReqVO) {
return demo01ContactMapper.selectPage(pageReqVO);
}
}
@@ -1,55 +0,0 @@
package com.cf.imes.module.infra.service.demo.demo02;
import com.cf.imes.module.infra.controller.admin.demo.demo02.vo.Demo02CategoryListReqVO;
import com.cf.imes.module.infra.controller.admin.demo.demo02.vo.Demo02CategorySaveReqVO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo02.Demo02CategoryDO;
import javax.validation.Valid;
import java.util.List;
/**
* 示例分类 Service 接口
*
* @author 晨丰科技
*/
public interface Demo02CategoryService {
/**
* 创建示例分类
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createDemo02Category(@Valid Demo02CategorySaveReqVO createReqVO);
/**
* 更新示例分类
*
* @param updateReqVO 更新信息
*/
void updateDemo02Category(@Valid Demo02CategorySaveReqVO updateReqVO);
/**
* 删除示例分类
*
* @param id 编号
*/
void deleteDemo02Category(Long id);
/**
* 获得示例分类
*
* @param id 编号
* @return 示例分类
*/
Demo02CategoryDO getDemo02Category(Long id);
/**
* 获得示例分类列表
*
* @param listReqVO 查询条件
* @return 示例分类列表
*/
List<Demo02CategoryDO> getDemo02CategoryList(Demo02CategoryListReqVO listReqVO);
}
@@ -1,134 +0,0 @@
package com.cf.imes.module.infra.service.demo.demo02;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.infra.controller.admin.demo.demo02.vo.Demo02CategoryListReqVO;
import com.cf.imes.module.infra.controller.admin.demo.demo02.vo.Demo02CategorySaveReqVO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo02.Demo02CategoryDO;
import com.cf.imes.module.infra.dal.mysql.demo.demo02.Demo02CategoryMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.module.infra.enums.ErrorCodeConstants.*;
/**
* 示例分类 Service 实现类
*
* @author 晨丰科技
*/
@Service
@Validated
public class Demo02CategoryServiceImpl implements Demo02CategoryService {
@Resource
private Demo02CategoryMapper demo02CategoryMapper;
@Override
public Long createDemo02Category(Demo02CategorySaveReqVO createReqVO) {
// 校验父级编号的有效性
validateParentDemo02Category(null, createReqVO.getParentId());
// 校验名字的唯一性
validateDemo02CategoryNameUnique(null, createReqVO.getParentId(), createReqVO.getName());
// 插入
Demo02CategoryDO demo02Category = BeanUtils.toBean(createReqVO, Demo02CategoryDO.class);
demo02CategoryMapper.insert(demo02Category);
// 返回
return demo02Category.getId();
}
@Override
public void updateDemo02Category(Demo02CategorySaveReqVO updateReqVO) {
// 校验存在
validateDemo02CategoryExists(updateReqVO.getId());
// 校验父级编号的有效性
validateParentDemo02Category(updateReqVO.getId(), updateReqVO.getParentId());
// 校验名字的唯一性
validateDemo02CategoryNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName());
// 更新
Demo02CategoryDO updateObj = BeanUtils.toBean(updateReqVO, Demo02CategoryDO.class);
demo02CategoryMapper.updateById(updateObj);
}
@Override
public void deleteDemo02Category(Long id) {
// 校验存在
validateDemo02CategoryExists(id);
// 校验是否有子示例分类
if (demo02CategoryMapper.selectCountByParentId(id) > 0) {
throw exception(DEMO02_CATEGORY_EXITS_CHILDREN);
}
// 删除
demo02CategoryMapper.deleteById(id);
}
private void validateDemo02CategoryExists(Long id) {
if (demo02CategoryMapper.selectById(id) == null) {
throw exception(DEMO02_CATEGORY_NOT_EXISTS);
}
}
private void validateParentDemo02Category(Long id, Long parentId) {
if (parentId == null || Demo02CategoryDO.PARENT_ID_ROOT.equals(parentId)) {
return;
}
// 1. 不能设置自己为父示例分类
if (Objects.equals(id, parentId)) {
throw exception(DEMO02_CATEGORY_PARENT_ERROR);
}
// 2. 父示例分类不存在
Demo02CategoryDO parentDemo02Category = demo02CategoryMapper.selectById(parentId);
if (parentDemo02Category == null) {
throw exception(DEMO02_CATEGORY_PARENT_NOT_EXITS);
}
// 3. 递归校验父示例分类,如果父示例分类是自己的子示例分类,则报错,避免形成环路
if (id == null) { // id 为空,说明新增,不需要考虑环路
return;
}
for (int i = 0; i < Short.MAX_VALUE; i++) {
// 3.1 校验环路
parentId = parentDemo02Category.getParentId();
if (Objects.equals(id, parentId)) {
throw exception(DEMO02_CATEGORY_PARENT_IS_CHILD);
}
// 3.2 继续递归下一级父示例分类
if (parentId == null || Demo02CategoryDO.PARENT_ID_ROOT.equals(parentId)) {
break;
}
parentDemo02Category = demo02CategoryMapper.selectById(parentId);
if (parentDemo02Category == null) {
break;
}
}
}
private void validateDemo02CategoryNameUnique(Long id, Long parentId, String name) {
Demo02CategoryDO demo02Category = demo02CategoryMapper.selectByParentIdAndName(parentId, name);
if (demo02Category == null) {
return;
}
// 如果 id 为空,说明不用比较是否为相同 id 的示例分类
if (id == null) {
throw exception(DEMO02_CATEGORY_NAME_DUPLICATE);
}
if (!Objects.equals(demo02Category.getId(), id)) {
throw exception(DEMO02_CATEGORY_NAME_DUPLICATE);
}
}
@Override
public Demo02CategoryDO getDemo02Category(Long id) {
return demo02CategoryMapper.selectById(id);
}
@Override
public List<Demo02CategoryDO> getDemo02CategoryList(Demo02CategoryListReqVO listReqVO) {
return demo02CategoryMapper.selectList(listReqVO);
}
}
@@ -1,158 +0,0 @@
package com.cf.imes.module.infra.service.demo.demo03;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.infra.controller.admin.demo.demo03.vo.Demo03StudentPageReqVO;
import com.cf.imes.module.infra.controller.admin.demo.demo03.vo.Demo03StudentSaveReqVO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO;
import javax.validation.Valid;
import java.util.List;
/**
* 学生 Service 接口
*
* @author 晨丰科技
*/
public interface Demo03StudentService {
/**
* 创建学生
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createDemo03Student(@Valid Demo03StudentSaveReqVO createReqVO);
/**
* 更新学生
*
* @param updateReqVO 更新信息
*/
void updateDemo03Student(@Valid Demo03StudentSaveReqVO updateReqVO);
/**
* 删除学生
*
* @param id 编号
*/
void deleteDemo03Student(Long id);
/**
* 获得学生
*
* @param id 编号
* @return 学生
*/
Demo03StudentDO getDemo03Student(Long id);
/**
* 获得学生分页
*
* @param pageReqVO 分页查询
* @return 学生分页
*/
PageResult<Demo03StudentDO> getDemo03StudentPage(Demo03StudentPageReqVO pageReqVO);
// ==================== 子表(学生课程) ====================
/**
* 获得学生课程列表
*
* @param studentId 学生编号
* @return 学生课程列表
*/
List<Demo03CourseDO> getDemo03CourseListByStudentId(Long studentId);
/**
* 获得学生课程分页
*
* @param pageReqVO 分页查询
* @param studentId 学生编号
* @return 学生课程分页
*/
PageResult<Demo03CourseDO> getDemo03CoursePage(PageParam pageReqVO, Long studentId);
/**
* 创建学生课程
*
* @param demo03Course 创建信息
* @return 编号
*/
Long createDemo03Course(@Valid Demo03CourseDO demo03Course);
/**
* 更新学生课程
*
* @param demo03Course 更新信息
*/
void updateDemo03Course(@Valid Demo03CourseDO demo03Course);
/**
* 删除学生课程
*
* @param id 编号
*/
void deleteDemo03Course(Long id);
/**
* 获得学生课程
*
* @param id 编号
* @return 学生课程
*/
Demo03CourseDO getDemo03Course(Long id);
// ==================== 子表(学生班级) ====================
/**
* 获得学生班级
*
* @param studentId 学生编号
* @return 学生班级
*/
Demo03GradeDO getDemo03GradeByStudentId(Long studentId);
/**
* 获得学生班级分页
*
* @param pageReqVO 分页查询
* @param studentId 学生编号
* @return 学生班级分页
*/
PageResult<Demo03GradeDO> getDemo03GradePage(PageParam pageReqVO, Long studentId);
/**
* 创建学生班级
*
* @param demo03Grade 创建信息
* @return 编号
*/
Long createDemo03Grade(@Valid Demo03GradeDO demo03Grade);
/**
* 更新学生班级
*
* @param demo03Grade 更新信息
*/
void updateDemo03Grade(@Valid Demo03GradeDO demo03Grade);
/**
* 删除学生班级
*
* @param id 编号
*/
void deleteDemo03Grade(Long id);
/**
* 获得学生班级
*
* @param id 编号
* @return 学生班级
*/
Demo03GradeDO getDemo03Grade(Long id);
}
@@ -1,217 +0,0 @@
package com.cf.imes.module.infra.service.demo.demo03;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.infra.controller.admin.demo.demo03.vo.Demo03StudentPageReqVO;
import com.cf.imes.module.infra.controller.admin.demo.demo03.vo.Demo03StudentSaveReqVO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO;
import com.cf.imes.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO;
import com.cf.imes.module.infra.dal.mysql.demo.demo03.Demo03CourseMapper;
import com.cf.imes.module.infra.dal.mysql.demo.demo03.Demo03GradeMapper;
import com.cf.imes.module.infra.dal.mysql.demo.demo03.Demo03StudentMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.module.infra.enums.ErrorCodeConstants.*;
/**
* 学生 Service 实现类
*
* @author 晨丰科技
*/
@Service
@Validated
public class Demo03StudentServiceImpl implements Demo03StudentService {
@Resource
private Demo03StudentMapper demo03StudentMapper;
@Resource
private Demo03CourseMapper demo03CourseMapper;
@Resource
private Demo03GradeMapper demo03GradeMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createDemo03Student(Demo03StudentSaveReqVO createReqVO) {
// 插入
Demo03StudentDO demo03Student = BeanUtils.toBean(createReqVO, Demo03StudentDO.class);
demo03StudentMapper.insert(demo03Student);
// 插入子表
createDemo03CourseList(demo03Student.getId(), createReqVO.getDemo03Courses());
createDemo03Grade(demo03Student.getId(), createReqVO.getDemo03Grade());
// 返回
return demo03Student.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateDemo03Student(Demo03StudentSaveReqVO updateReqVO) {
// 校验存在
validateDemo03StudentExists(updateReqVO.getId());
// 更新
Demo03StudentDO updateObj = BeanUtils.toBean(updateReqVO, Demo03StudentDO.class);
demo03StudentMapper.updateById(updateObj);
// 更新子表
updateDemo03CourseList(updateReqVO.getId(), updateReqVO.getDemo03Courses());
updateDemo03Grade(updateReqVO.getId(), updateReqVO.getDemo03Grade());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDemo03Student(Long id) {
// 校验存在
validateDemo03StudentExists(id);
// 删除
demo03StudentMapper.deleteById(id);
// 删除子表
deleteDemo03CourseByStudentId(id);
deleteDemo03GradeByStudentId(id);
}
private void validateDemo03StudentExists(Long id) {
if (demo03StudentMapper.selectById(id) == null) {
throw exception(DEMO03_STUDENT_NOT_EXISTS);
}
}
@Override
public Demo03StudentDO getDemo03Student(Long id) {
return demo03StudentMapper.selectById(id);
}
@Override
public PageResult<Demo03StudentDO> getDemo03StudentPage(Demo03StudentPageReqVO pageReqVO) {
return demo03StudentMapper.selectPage(pageReqVO);
}
// ==================== 子表(学生课程) ====================
@Override
public List<Demo03CourseDO> getDemo03CourseListByStudentId(Long studentId) {
return demo03CourseMapper.selectListByStudentId(studentId);
}
private void createDemo03CourseList(Long studentId, List<Demo03CourseDO> list) {
if (list != null) {
list.forEach(o -> o.setStudentId(studentId));
}
demo03CourseMapper.insertBatch(list);
}
private void updateDemo03CourseList(Long studentId, List<Demo03CourseDO> list) {
deleteDemo03CourseByStudentId(studentId);
list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1id 冲突;2)updateTime 不更新
createDemo03CourseList(studentId, list);
}
private void deleteDemo03CourseByStudentId(Long studentId) {
demo03CourseMapper.deleteByStudentId(studentId);
}
@Override
public PageResult<Demo03CourseDO> getDemo03CoursePage(PageParam pageReqVO, Long studentId) {
return demo03CourseMapper.selectPage(pageReqVO, studentId);
}
@Override
public Long createDemo03Course(Demo03CourseDO demo03Course) {
demo03CourseMapper.insert(demo03Course);
return demo03Course.getId();
}
@Override
public void updateDemo03Course(Demo03CourseDO demo03Course) {
demo03CourseMapper.updateById(demo03Course);
}
@Override
public void deleteDemo03Course(Long id) {
demo03CourseMapper.deleteById(id);
}
@Override
public Demo03CourseDO getDemo03Course(Long id) {
return demo03CourseMapper.selectById(id);
}
// ==================== 子表(学生班级) ====================
@Override
public Demo03GradeDO getDemo03GradeByStudentId(Long studentId) {
return demo03GradeMapper.selectByStudentId(studentId);
}
private void createDemo03Grade(Long studentId, Demo03GradeDO demo03Grade) {
if (demo03Grade == null) {
return;
}
demo03Grade.setStudentId(studentId);
demo03GradeMapper.insert(demo03Grade);
}
private void updateDemo03Grade(Long studentId, Demo03GradeDO demo03Grade) {
if (demo03Grade == null) {
return;
}
demo03Grade.setStudentId(studentId);
demo03Grade.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 不更新
demo03GradeMapper.insertOrUpdate(demo03Grade);
}
private void deleteDemo03GradeByStudentId(Long studentId) {
demo03GradeMapper.deleteByStudentId(studentId);
}
@Override
public PageResult<Demo03GradeDO> getDemo03GradePage(PageParam pageReqVO, Long studentId) {
return demo03GradeMapper.selectPage(pageReqVO, studentId);
}
@Override
public Long createDemo03Grade(Demo03GradeDO demo03Grade) {
// 校验是否已经存在
if (demo03GradeMapper.selectByStudentId(demo03Grade.getStudentId()) != null) {
throw exception(DEMO03_GRADE_EXISTS);
}
demo03GradeMapper.insert(demo03Grade);
return demo03Grade.getId();
}
@Override
public void updateDemo03Grade(Demo03GradeDO demo03Grade) {
// 校验存在
validateDemo03GradeExists(demo03Grade.getId());
// 更新
demo03GradeMapper.updateById(demo03Grade);
}
@Override
public void deleteDemo03Grade(Long id) {
// 校验存在
validateDemo03GradeExists(id);
// 删除
demo03GradeMapper.deleteById(id);
}
@Override
public Demo03GradeDO getDemo03Grade(Long id) {
return demo03GradeMapper.selectById(id);
}
private void validateDemo03GradeExists(Long id) {
if (demo03GradeMapper.selectById(id) == null) {
throw exception(DEMO03_GRADE_NOT_EXISTS);
}
}
}