diff --git a/eladmin-monitor/src/main/java/me/zhengjie/res/ServerMonitorController.java b/eladmin-monitor/src/main/java/me/zhengjie/res/ServerMonitorController.java index fe1b927db..e120537bc 100644 --- a/eladmin-monitor/src/main/java/me/zhengjie/res/ServerMonitorController.java +++ b/eladmin-monitor/src/main/java/me/zhengjie/res/ServerMonitorController.java @@ -1,6 +1,5 @@ package me.zhengjie.res; - import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -13,8 +12,6 @@ import oshi.hardware.VirtualMemory; import oshi.software.os.OSFileStore; import oshi.software.os.OperatingSystem; - -import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; diff --git a/eladmin-system/src/main/java/me/zhengjie/gen/domain/GenTest.java b/eladmin-system/src/main/java/me/zhengjie/gen/domain/GenTest.java new file mode 100644 index 000000000..9d9d84484 --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/gen/domain/GenTest.java @@ -0,0 +1,41 @@ +package me.zhengjie.gen.domain; + +import lombok.Data; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import javax.persistence.*; +import javax.validation.constraints.*; +import java.sql.Timestamp; +import java.io.Serializable; + +/** +* @author Zheng Jie +* @date 2020-03-07 +*/ +@Entity +@Data +@Table(name="gen_test") +public class GenTest implements Serializable { + + /** ID */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + + /** 名称 */ + @Column(name = "name",nullable = false) + @NotBlank + private String name; + + /** 性别 */ + @Column(name = "sex") + private Integer sex; + + @Column(name = "create_time") + private Timestamp createTime; + + public void copy(GenTest source){ + BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); + } +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/gen/repository/GenTestRepository.java b/eladmin-system/src/main/java/me/zhengjie/gen/repository/GenTestRepository.java new file mode 100644 index 000000000..ed42dc92c --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/gen/repository/GenTestRepository.java @@ -0,0 +1,12 @@ +package me.zhengjie.gen.repository; + +import me.zhengjie.gen.domain.GenTest; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +/** +* @author Zheng Jie +* @date 2020-03-07 +*/ +public interface GenTestRepository extends JpaRepository, JpaSpecificationExecutor { +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/gen/rest/GenTestController.java b/eladmin-system/src/main/java/me/zhengjie/gen/rest/GenTestController.java new file mode 100644 index 000000000..5ff67ee46 --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/gen/rest/GenTestController.java @@ -0,0 +1,73 @@ +package me.zhengjie.gen.rest; + +import me.zhengjie.aop.log.Log; +import me.zhengjie.gen.domain.GenTest; +import me.zhengjie.gen.service.GenTestService; +import me.zhengjie.gen.service.dto.GenTestQueryCriteria; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.*; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** +* @author Zheng Jie +* @date 2020-03-07 +*/ +@Api(tags = "测试生成管理") +@RestController +@RequestMapping("/api/genTest") +public class GenTestController { + + private final GenTestService genTestService; + + public GenTestController(GenTestService genTestService) { + this.genTestService = genTestService; + } + + @Log("导出数据") + @ApiOperation("导出数据") + @GetMapping(value = "/download") + @PreAuthorize("@el.check('genTest:list')") + public void download(HttpServletResponse response, GenTestQueryCriteria criteria) throws IOException { + genTestService.download(genTestService.queryAll(criteria), response); + } + + @GetMapping + @Log("查询测试生成") + @ApiOperation("查询测试生成") + @PreAuthorize("@el.check('genTest:list')") + public ResponseEntity getGenTests(GenTestQueryCriteria criteria, Pageable pageable){ + return new ResponseEntity<>(genTestService.queryAll(criteria,pageable),HttpStatus.OK); + } + + @PostMapping + @Log("新增测试生成") + @ApiOperation("新增测试生成") + @PreAuthorize("@el.check('genTest:add')") + public ResponseEntity create(@Validated @RequestBody GenTest resources){ + return new ResponseEntity<>(genTestService.create(resources),HttpStatus.CREATED); + } + + @PutMapping + @Log("修改测试生成") + @ApiOperation("修改测试生成") + @PreAuthorize("@el.check('genTest:edit')") + public ResponseEntity update(@Validated @RequestBody GenTest resources){ + genTestService.update(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除测试生成") + @ApiOperation("删除测试生成") + @PreAuthorize("@el.check('genTest:del')") + @DeleteMapping + public ResponseEntity deleteAll(@RequestBody Integer[] ids) { + genTestService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/gen/service/GenTestService.java b/eladmin-system/src/main/java/me/zhengjie/gen/service/GenTestService.java new file mode 100644 index 000000000..d8b2078b2 --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/gen/service/GenTestService.java @@ -0,0 +1,66 @@ +package me.zhengjie.gen.service; + +import me.zhengjie.gen.domain.GenTest; +import me.zhengjie.gen.service.dto.GenTestDto; +import me.zhengjie.gen.service.dto.GenTestQueryCriteria; +import org.springframework.data.domain.Pageable; +import java.util.Map; +import java.util.List; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** +* @author Zheng Jie +* @date 2020-03-07 +*/ +public interface GenTestService { + + /** + * 查询数据分页 + * @param criteria 条件 + * @param pageable 分页参数 + * @return Map + */ + Map queryAll(GenTestQueryCriteria criteria, Pageable pageable); + + /** + * 查询所有数据不分页 + * @param criteria 条件参数 + * @return List + */ + List queryAll(GenTestQueryCriteria criteria); + + /** + * 根据ID查询 + * @param id ID + * @return GenTestDto + */ + GenTestDto findById(Integer id); + + /** + * 创建 + * @param resources / + * @return GenTestDto + */ + GenTestDto create(GenTest resources); + + /** + * 编辑 + * @param resources / + */ + void update(GenTest resources); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Integer[] ids); + + /** + * 导出数据 + * @param all 待导出的数据 + * @param response / + * @throws IOException / + */ + void download(List all, HttpServletResponse response) throws IOException; +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/gen/service/dto/GenTestDto.java b/eladmin-system/src/main/java/me/zhengjie/gen/service/dto/GenTestDto.java new file mode 100644 index 000000000..46d1f8c8d --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/gen/service/dto/GenTestDto.java @@ -0,0 +1,24 @@ +package me.zhengjie.gen.service.dto; + +import lombok.Data; +import java.sql.Timestamp; +import java.io.Serializable; + +/** +* @author Zheng Jie +* @date 2020-03-07 +*/ +@Data +public class GenTestDto implements Serializable { + + /** ID */ + private Integer id; + + /** 名称 */ + private String name; + + /** 性别 */ + private Integer sex; + + private Timestamp createTime; +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/gen/service/dto/GenTestQueryCriteria.java b/eladmin-system/src/main/java/me/zhengjie/gen/service/dto/GenTestQueryCriteria.java new file mode 100644 index 000000000..933676765 --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/gen/service/dto/GenTestQueryCriteria.java @@ -0,0 +1,25 @@ +package me.zhengjie.gen.service.dto; + +import lombok.Data; +import java.sql.Timestamp; +import java.util.List; +import me.zhengjie.annotation.Query; + +/** +* @author Zheng Jie +* @date 2020-03-07 +*/ +@Data +public class GenTestQueryCriteria{ + + /** 模糊 */ + @Query(type = Query.Type.INNER_LIKE) + private String name; + + /** 不为空 */ + @Query(type = Query.Type.NOT_NULL) + private Integer sex; + /** BETWEEN */ + @Query(type = Query.Type.BETWEEN) + private List createTime; +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/gen/service/impl/GenTestServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/gen/service/impl/GenTestServiceImpl.java new file mode 100644 index 000000000..02fc5dc06 --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/gen/service/impl/GenTestServiceImpl.java @@ -0,0 +1,105 @@ +package me.zhengjie.gen.service.impl; + +import me.zhengjie.gen.domain.GenTest; +import me.zhengjie.utils.ValidationUtil; +import me.zhengjie.utils.FileUtil; +import me.zhengjie.gen.repository.GenTestRepository; +import me.zhengjie.gen.service.GenTestService; +import me.zhengjie.gen.service.dto.GenTestDto; +import me.zhengjie.gen.service.dto.GenTestQueryCriteria; +import me.zhengjie.gen.service.mapper.GenTestMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +// 默认不使用缓存 +//import org.springframework.cache.annotation.CacheConfig; +//import org.springframework.cache.annotation.CacheEvict; +//import org.springframework.cache.annotation.Cacheable; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import me.zhengjie.utils.PageUtil; +import me.zhengjie.utils.QueryHelp; +import java.util.List; +import java.util.Map; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.LinkedHashMap; + +/** +* @author Zheng Jie +* @date 2020-03-07 +*/ +@Service +//@CacheConfig(cacheNames = "genTest") +@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) +public class GenTestServiceImpl implements GenTestService { + + private final GenTestRepository genTestRepository; + + private final GenTestMapper genTestMapper; + + public GenTestServiceImpl(GenTestRepository genTestRepository, GenTestMapper genTestMapper) { + this.genTestRepository = genTestRepository; + this.genTestMapper = genTestMapper; + } + + @Override + //@Cacheable + public Map queryAll(GenTestQueryCriteria criteria, Pageable pageable){ + Page page = genTestRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); + return PageUtil.toPage(page.map(genTestMapper::toDto)); + } + + @Override + //@Cacheable + public List queryAll(GenTestQueryCriteria criteria){ + return genTestMapper.toDto(genTestRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); + } + + @Override + //@Cacheable(key = "#p0") + public GenTestDto findById(Integer id) { + GenTest genTest = genTestRepository.findById(id).orElseGet(GenTest::new); + ValidationUtil.isNull(genTest.getId(),"GenTest","id",id); + return genTestMapper.toDto(genTest); + } + + @Override + //@CacheEvict(allEntries = true) + @Transactional(rollbackFor = Exception.class) + public GenTestDto create(GenTest resources) { + return genTestMapper.toDto(genTestRepository.save(resources)); + } + + @Override + //@CacheEvict(allEntries = true) + @Transactional(rollbackFor = Exception.class) + public void update(GenTest resources) { + GenTest genTest = genTestRepository.findById(resources.getId()).orElseGet(GenTest::new); + ValidationUtil.isNull( genTest.getId(),"GenTest","id",resources.getId()); + genTest.copy(resources); + genTestRepository.save(genTest); + } + + @Override + //@CacheEvict(allEntries = true) + public void deleteAll(Integer[] ids) { + for (Integer id : ids) { + genTestRepository.deleteById(id); + } + } + + @Override + public void download(List all, HttpServletResponse response) throws IOException { + List> list = new ArrayList<>(); + for (GenTestDto genTest : all) { + Map map = new LinkedHashMap<>(); + map.put("名称", genTest.getName()); + map.put("性别", genTest.getSex()); + map.put(" createTime", genTest.getCreateTime()); + list.add(map); + } + FileUtil.downloadExcel(list, response); + } +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/gen/service/mapper/GenTestMapper.java b/eladmin-system/src/main/java/me/zhengjie/gen/service/mapper/GenTestMapper.java new file mode 100644 index 000000000..d04c1fe19 --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/gen/service/mapper/GenTestMapper.java @@ -0,0 +1,16 @@ +package me.zhengjie.gen.service.mapper; + +import me.zhengjie.base.BaseMapper; +import me.zhengjie.gen.domain.GenTest; +import me.zhengjie.gen.service.dto.GenTestDto; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +/** +* @author Zheng Jie +* @date 2020-03-07 +*/ +@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface GenTestMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/eladmin-system/src/main/resources/template/generator/front/index.ftl b/eladmin-system/src/main/resources/template/generator/front/index.ftl index 1d7f98d4a..1731b6b0c 100644 --- a/eladmin-system/src/main/resources/template/generator/front/index.ftl +++ b/eladmin-system/src/main/resources/template/generator/front/index.ftl @@ -81,15 +81,15 @@ <#list columns as column> <#if column.columnShow> <#if column.dictName??> - + <#elseif column.columnType != 'Timestamp'> - + <#else> - + @@ -121,16 +121,17 @@ import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' -// crud交由presenter持有 -const defaultCrud = CRUD({ title: '${apiAlias}', url: 'api/${changeClassName}', sort: '${pkChangeColName},desc', crudMethod: { ...crud${className} }}) const defaultForm = { <#if columns??><#list columns as column>${column.changeColumnName}: null<#if column_has_next>, } export default { name: '${className}', components: { pagination, crudOperation, rrOperation, udOperation }, - mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], + mixins: [presenter(), header(), form(defaultForm), crud()], <#if hasDict> dicts: [<#if hasDict??><#list dicts as dict>'${dict}'<#if dict_has_next>, ], + cruds() { + return CRUD({ title: '${apiAlias}', url: 'api/${changeClassName}', sort: '${pkChangeColName},desc', crudMethod: { ...crud${className} }}) + }, data() { return { permission: {