b1da2f66c882c4a57e892c074124941cf422782a.svn-base 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package org.jeecg.modules.demo.test.service.impl;
  2. import com.baomidou.mybatisplus.core.metadata.IPage;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import org.apache.shiro.SecurityUtils;
  6. import org.jeecg.common.constant.CacheConstant;
  7. import org.jeecg.common.system.query.QueryGenerator;
  8. import org.jeecg.common.system.vo.LoginUser;
  9. import org.jeecg.modules.demo.test.entity.JeecgDemo;
  10. import org.jeecg.modules.demo.test.mapper.JeecgDemoMapper;
  11. import org.jeecg.modules.demo.test.service.IJeecgDemoService;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.cache.annotation.Cacheable;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import java.lang.reflect.Field;
  17. import java.util.ArrayList;
  18. import java.util.Arrays;
  19. import java.util.List;
  20. /**
  21. * @Description: jeecg 测试demo
  22. * @Author: jeecg-boot
  23. * @Date: 2018-12-29
  24. * @Version: V1.0
  25. */
  26. @Service
  27. public class JeecgDemoServiceImpl extends ServiceImpl<JeecgDemoMapper, JeecgDemo> implements IJeecgDemoService {
  28. @Autowired
  29. JeecgDemoMapper jeecgDemoMapper;
  30. /**
  31. * 事务控制在service层面
  32. * 加上注解:@Transactional,声明的方法就是一个独立的事务(有异常DB操作全部回滚)
  33. */
  34. @Override
  35. @Transactional
  36. public void testTran() {
  37. JeecgDemo pp = new JeecgDemo();
  38. pp.setAge(1111);
  39. pp.setName("测试事务 小白兔 1");
  40. jeecgDemoMapper.insert(pp);
  41. JeecgDemo pp2 = new JeecgDemo();
  42. pp2.setAge(2222);
  43. pp2.setName("测试事务 小白兔 2");
  44. jeecgDemoMapper.insert(pp2);
  45. Integer.parseInt("hello");//自定义异常
  46. JeecgDemo pp3 = new JeecgDemo();
  47. pp3.setAge(3333);
  48. pp3.setName("测试事务 小白兔 3");
  49. jeecgDemoMapper.insert(pp3);
  50. return ;
  51. }
  52. /**
  53. * 缓存注解测试: redis
  54. */
  55. @Override
  56. @Cacheable(cacheNames = CacheConstant.TEST_DEMO_CACHE, key = "#id")
  57. public JeecgDemo getByIdCacheable(String id) {
  58. JeecgDemo t = jeecgDemoMapper.selectById(id);
  59. System.err.println("---未读缓存,读取数据库---");
  60. System.err.println(t);
  61. return t;
  62. }
  63. @Override
  64. public IPage<JeecgDemo> queryListWithPermission(int pageSize,int pageNo) {
  65. Page<JeecgDemo> page = new Page<>(pageNo, pageSize);
  66. //编程方式,获取当前请求的数据权限规则SQL片段
  67. String sql = QueryGenerator.installAuthJdbc(JeecgDemo.class);
  68. return this.baseMapper.queryListWithPermission(page, sql);
  69. }
  70. @Override
  71. public String getExportFields() {
  72. LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
  73. //权限配置列导出示例
  74. //1.配置前缀与菜单中配置的列前缀一致
  75. List<String> noAuthList = new ArrayList<>();
  76. List<String> exportFieldsList = new ArrayList<>();
  77. String permsPrefix = "testdemo:";
  78. //查询配置菜单有效字段
  79. List<String> allAuth = this.jeecgDemoMapper.queryAllAuth(permsPrefix);
  80. //查询已授权字段
  81. List<String> userAuth = this.jeecgDemoMapper.queryUserAuth(sysUser.getId(),permsPrefix);
  82. //列出未授权字段
  83. for(String perms : allAuth){
  84. if(!userAuth.contains(perms)){
  85. noAuthList.add(perms.substring(permsPrefix.length()));
  86. }
  87. }
  88. //实体类中字段与未授权字段比较,列出需导出字段
  89. Field[] fileds = JeecgDemo.class.getDeclaredFields();
  90. List<Field> list = new ArrayList(Arrays.asList(fileds));
  91. for(Field field : list){
  92. if(!noAuthList.contains(field.getName())){
  93. exportFieldsList.add(field.getName());
  94. }
  95. }
  96. return exportFieldsList != null && exportFieldsList.size()>0 ? String.join(",", exportFieldsList) : "";
  97. }
  98. }