Kaynağa Gözat

Merge remote-tracking branch 'origin/master'

zhou-hao 7 yıl önce
ebeveyn
işleme
0537ec5058
21 değiştirilmiş dosya ile 201 ekleme ve 41 silme
  1. 1 1
      hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/exception/UnAuthorizedException.java
  2. 3 10
      hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/EasyOrmSqlBuilder.java
  3. 13 0
      hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/NestEntity.java
  4. 7 2
      hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestCrud.java
  5. 7 0
      hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestDao.java
  6. 2 0
      hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestEntity.java
  7. 30 0
      hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/resources/org/hswebframework/web/dao/test/TestDao.xml
  8. 2 1
      hsweb-core/src/main/java/org/hswebframework/web/validate/SimpleValidateResults.java
  9. 3 2
      hsweb-core/src/main/java/org/hswebframework/web/validate/ValidationException.java
  10. 11 14
      hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/RestControllerExceptionTranslator.java
  11. 4 2
      hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/SystemVersion.java
  12. 0 2
      hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/entity/EntityMappingCustomer.java
  13. 3 2
      hsweb-system/hsweb-system-dev-tools/src/main/java/org/hswebframework/web/dev/tools/writer/DefaultCodeWriter.java
  14. 1 0
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-dao/hsweb-system-organizational-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/organizational/OrganizationalMapper.xml
  15. 9 0
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-api/src/main/java/org/hswebframework/web/service/organizational/event/ClearPersonCacheEvent.java
  16. 19 0
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleDepartmentService.java
  17. 10 0
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleDistrictService.java
  18. 18 1
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleOrganizationalService.java
  19. 8 2
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java
  20. 19 0
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePositionService.java
  21. 31 2
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationDefineService.java

+ 1 - 1
hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/exception/UnAuthorizedException.java

@@ -29,7 +29,7 @@ import org.hswebframework.web.authorization.token.TokenState;
 public class UnAuthorizedException extends RuntimeException {
     private static final long serialVersionUID = 2422918455013900645L;
 
-    private TokenState state;
+    private final TokenState state;
 
     public UnAuthorizedException() {
         this(TokenState.expired);

+ 3 - 10
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/builder/EasyOrmSqlBuilder.java

@@ -24,6 +24,7 @@ import org.apache.ibatis.mapping.ResultMap;
 import org.apache.ibatis.mapping.ResultMapping;
 import org.hswebframework.ezorm.core.ValueConverter;
 import org.hswebframework.ezorm.core.param.*;
+import org.hswebframework.ezorm.rdb.meta.Correlation;
 import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData;
 import org.hswebframework.ezorm.rdb.meta.RDBDatabaseMetaData;
 import org.hswebframework.ezorm.rdb.meta.RDBTableMetaData;
@@ -184,14 +185,7 @@ public class EasyOrmSqlBuilder {
         resultMappings.addAll(resultMaps.getIdResultMappings());
         resultMappings.forEach(resultMapping -> {
             if (resultMapping.getNestedQueryId() == null) {
-                RDBColumnMetaData column = new RDBColumnMetaData() {
-                    @Override
-                    public RDBColumnMetaData clone() {
-                        RDBColumnMetaData target = super.clone();
-                        target.setValueConverter(getValueConverter());
-                        return target;
-                    }
-                };
+                RDBColumnMetaData column = new RDBColumnMetaData();
                 column.setJdbcType(JDBCType.valueOf(resultMapping.getJdbcType().name()));
                 column.setName(resultMapping.getColumn());
                 if (!StringUtils.isNullOrEmpty(resultMapping.getProperty())) {
@@ -275,7 +269,7 @@ public class EasyOrmSqlBuilder {
         if (!appender.isEmpty()) {
             appender.removeFirst();
         } else {
-            throw new UnsupportedOperationException("{no_columns_will_be_update}");
+            throw new UnsupportedOperationException("没有列被修改");
         }
         return appender.toString();
     }
@@ -309,7 +303,6 @@ public class EasyOrmSqlBuilder {
         SqlRender<UpdateParam> render = tableMetaData.getDatabaseMetaData().getRenderer(SqlRender.TYPE.UPDATE);
         return render.render(tableMetaData, param).getSql();
     }
-
     public String buildSelectFields(String resultMapId, String tableName, Object arg) {
         QueryParam param = null;
         if (arg instanceof QueryParam) {

+ 13 - 0
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/NestEntity.java

@@ -0,0 +1,13 @@
+package org.hswebframework.web.dao.crud;
+
+import lombok.Data;
+
+/**
+ *
+ * @author zhouhao
+ * @since
+ */
+@Data
+public class NestEntity {
+    private String name;
+}

+ 7 - 2
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestCrud.java

@@ -37,6 +37,11 @@ public class TestCrud extends AbstractTransactionalJUnit4SpringContextTests {
                 "  data_type SMALLINT,\n" +
                 "  data_types BIGINT\n" +
                 ")");
+        sqlExecutor.exec("\n" +
+                "create table h_nest_table(\n" +
+                "  id BIGINT AUTO_INCREMENT PRIMARY KEY,\n" +
+                "  name VARCHAR(32)\n" +
+                ")");
     }
 
     @Test
@@ -52,8 +57,8 @@ public class TestCrud extends AbstractTransactionalJUnit4SpringContextTests {
         QueryParamEntity query = new QueryParamEntity();
         //any in
         query.where("dataTypes",  Arrays.asList(DataType.TYPE3, DataType.TYPE1));
-
-        List<TestEntity> entities = testDao.query(query);
+        query.includes("nest.name","*");
+        List<TestEntity> entities = testDao.queryNest(query);
 
 //        testDao.query(entity);
 

+ 7 - 0
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestDao.java

@@ -1,6 +1,13 @@
 package org.hswebframework.web.dao.crud;
 
+import org.hswebframework.web.commons.entity.Entity;
 import org.hswebframework.web.dao.CrudDao;
 
+import java.util.List;
+
 public interface TestDao extends CrudDao<TestEntity, Long> {
+    List<TestEntity> queryNest(Entity queryEntity);
+
+    int countNest(Entity queryEntity);
+
 }

+ 2 - 0
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/java/org/hswebframework/web/dao/crud/TestEntity.java

@@ -43,4 +43,6 @@ public class TestEntity implements org.hswebframework.web.commons.entity.Entity
             columnDefinition = "bigint COMMENT '多个类型'"
     )
     private DataType[] dataTypes;
+
+    private NestEntity nest;
 }

+ 30 - 0
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/test/resources/org/hswebframework/web/dao/test/TestDao.xml

@@ -4,6 +4,12 @@
 
     <resultMap id="TestResultMap" type="org.hswebframework.web.dao.crud.TestEntity">
         <id property="id" column="id" javaType="Long" jdbcType="INTEGER"/>
+
+    </resultMap>
+
+    <resultMap id="TestNestResultMap" type="org.hswebframework.web.dao.crud.TestEntity">
+        <id property="id" column="id" javaType="Long" jdbcType="INTEGER"/>
+        <result property="nest.name" column="nest_table.name" javaType="String" jdbcType="VARCHAR"/>
     </resultMap>
 
     <!--用于动态生成sql所需的配置-->
@@ -32,4 +38,28 @@
         <include refid="BasicMapper.buildTotalSql"/>
     </select>
 
+    <select id="queryNest" parameterType="org.hswebframework.web.commons.entity.Entity" resultMap="TestNestResultMap">
+        <bind name="tableName" value="'h_test'"/>
+        <bind name="resultMapId" value="'TestNestResultMap'"/>
+        select
+        <include refid="BasicMapper.buildSelectField"/>
+        from h_test
+        left join h_nest_table nest_table on nest_table.id=h_test.id
+        <where>
+            <include refid="BasicMapper.buildWhere"/>
+        </where>
+        <include refid="BasicMapper.buildSortField"/>
+    </select>
+
+    <select id="countNest" parameterType="org.hswebframework.web.commons.entity.Entity" resultType="int">
+        <include refid="config"/>
+        select
+        count(1)
+        from h_test
+        left join h_nest_table nest_table on nest_table.id=h_test.id
+        <where>
+            <include refid="BasicMapper.buildWhere"/>
+        </where>
+    </select>
+
 </mapper>

+ 2 - 1
hsweb-core/src/main/java/org/hswebframework/web/validate/SimpleValidateResults.java

@@ -22,12 +22,12 @@ import java.util.ArrayList;
 import java.util.List;
 
 /**
- * TODO 完成注释
  *
  * @author zhouhao
  */
 public class SimpleValidateResults implements ValidateResults {
 
+    private static final long serialVersionUID = -3355828475840578917L;
     private List<ValidateResults.Result> results = new ArrayList<>();
 
     public SimpleValidateResults addResult(String field, String message) {
@@ -46,6 +46,7 @@ public class SimpleValidateResults implements ValidateResults {
     }
 
     class Result implements ValidateResults.Result {
+        private static final long serialVersionUID = -4717219071013488363L;
         private String field;
         private String message;
 

+ 3 - 2
hsweb-core/src/main/java/org/hswebframework/web/validate/ValidationException.java

@@ -21,6 +21,7 @@ package org.hswebframework.web.validate;
 
 import org.hswebframework.web.BusinessException;
 
+import java.util.Collections;
 import java.util.List;
 
 public class ValidationException extends BusinessException {
@@ -37,13 +38,13 @@ public class ValidationException extends BusinessException {
     }
 
     public ValidationException(ValidateResults results) {
-        super(results.toString(), 400);
+        super(results.getResults().get(0).getMessage(), 400);
         this.results = results;
     }
 
     public List<ValidateResults.Result> getResults() {
         if (results == null) {
-            return null;
+            return Collections.emptyList();
         }
         return results.getResults();
     }

+ 11 - 14
hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/RestControllerExceptionTranslator.java

@@ -57,7 +57,8 @@ public class RestControllerExceptionTranslator {
     @ResponseStatus(HttpStatus.BAD_REQUEST)
     @ResponseBody
     ResponseMessage<Object> handleException(org.hswebframework.ezorm.rdb.exception.ValidationException exception) {
-        return ResponseMessage.error(400, exception.getMessage()).result(exception.getValidateResult());
+        return ResponseMessage.error(400, exception.getMessage())
+                .result(exception.getValidateResult());
     }
 
     @ExceptionHandler(ValidationException.class)
@@ -81,7 +82,7 @@ public class RestControllerExceptionTranslator {
     @ExceptionHandler(UnAuthorizedException.class)
     @ResponseStatus(HttpStatus.UNAUTHORIZED)
     @ResponseBody
-    ResponseMessage handleException(UnAuthorizedException exception, HttpServletResponse response) {
+    ResponseMessage handleException(UnAuthorizedException exception) {
         return ResponseMessage.error(401, exception.getMessage()).result(exception.getState());
     }
 
@@ -110,7 +111,7 @@ public class RestControllerExceptionTranslator {
                 .map(FieldError.class::cast)
                 .forEach(fieldError -> results.addResult(fieldError.getField(), fieldError.getDefaultMessage()));
 
-        return ResponseMessage.error(400, results.getResults().size() == 0 ? e.getMessage() : results.getResults().get(0).getMessage()).result(results.getResults());
+        return ResponseMessage.error(400, results.getResults().isEmpty() ? e.getMessage() : results.getResults().get(0).getMessage()).result(results.getResults());
     }
 
     @ExceptionHandler(RuntimeException.class)
@@ -129,7 +130,6 @@ public class RestControllerExceptionTranslator {
         return ResponseMessage.error(500, "服务器内部错误");
     }
 
-
     @ExceptionHandler(SQLException.class)
     @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
     @ResponseBody
@@ -138,14 +138,11 @@ public class RestControllerExceptionTranslator {
         return ResponseMessage.error(500, "服务器内部错误");
     }
 
-
-//    @ExceptionHandler(Throwable.class)
-//    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
-//    @ResponseBody
-//    @Order()
-//    ResponseMessage handleException(Throwable exception) {
-//        logger.error(exception.getMessage(), exception);
-//        return ResponseMessage.error(exception.getMessage(), 500);
-//    }
-
+    @ExceptionHandler(IllegalArgumentException.class)
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
+    @ResponseBody
+    ResponseMessage handleException(IllegalArgumentException exception) {
+        logger.error(exception.getMessage(), exception);
+        return ResponseMessage.error(400, "参数错误:" + exception.getMessage());
+    }
 }

+ 4 - 2
hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/SystemVersion.java

@@ -20,6 +20,7 @@ package org.hswebframework.web.starter;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.serializer.SerializerFeature;
+import lombok.extern.slf4j.Slf4j;
 import org.hswebframework.utils.ListUtils;
 import org.hswebframework.utils.StringUtils;
 
@@ -180,7 +181,7 @@ public class SystemVersion extends Version {
     }
 }
 
-
+@Slf4j
 class Version implements Comparable<Version> {
     protected String name;
     protected String comment;
@@ -206,7 +207,8 @@ class Version implements Comparable<Version> {
         String[] ver = version.split("[.]");
         Integer[] numberVer = ListUtils.stringArr2intArr(ver);
         if (numberVer.length < 1 || Arrays.stream(numberVer).anyMatch(Objects::isNull)) {
-            throw new UnsupportedOperationException("format version " + version + " error  ");
+            numberVer = new Integer[]{1, 0, 0};
+            log.warn("解析版本号失败:{},将使用默认版本号:1.0.0,请检查hsweb-starter.js配置内容!", version);
         }
         setVersion(numberVer[0],
                 numberVer.length <= 1 ? 0 : numberVer[1],

+ 0 - 2
hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/entity/EntityMappingCustomer.java

@@ -3,8 +3,6 @@ package org.hswebframework.web.starter.entity;
 import org.hswebframework.web.commons.entity.factory.MapperEntityFactory;
 
 /**
- * TODO 完成注释
- *
  * @author zhouhao
  */
 public interface EntityMappingCustomer {

+ 3 - 2
hsweb-system/hsweb-system-dev-tools/src/main/java/org/hswebframework/web/dev/tools/writer/DefaultCodeWriter.java

@@ -21,12 +21,13 @@ public class DefaultCodeWriter implements CodeWriter {
         File file = new File(path);
         file.mkdir();
         String type = code.getType();
+        String filePath = code.getFile().startsWith("/") ? code.getFile() : path + "/" + code.getFile();
         if ("dir".equals(type)) {
             code.getChildren()
-                    .forEach(childrenCode -> writeCode(path + "/" + code.getFile(), childrenCode));
+                    .forEach(childrenCode -> writeCode(filePath, childrenCode));
         } else if ("file".equals(type)) {
             String template = code.getTemplate();
-            String fileName = path + "/" + code.getFile();
+            String fileName = filePath;
             String replaceMod = code.getRepeat();
             File codeFile = new File(fileName);
             if (codeFile.exists() && replaceMod != null && !fileName.endsWith(".java")) {

+ 1 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-dao/hsweb-system-organizational-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/organizational/OrganizationalMapper.xml

@@ -30,6 +30,7 @@
         <result property="sortIndex" column="sort_index" javaType="Long" jdbcType="DECIMAL"/>
         <result property="status" column="status" javaType="Byte" jdbcType="DECIMAL"/>
         <result property="level" column="level" javaType="Integer" jdbcType="DECIMAL"/>
+        <result property="districtId" column="district_id" javaType="string" jdbcType="VARCHAR"/>
     </resultMap>
 
     <!--用于动态生成sql所需的配置-->

+ 9 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-api/src/main/java/org/hswebframework/web/service/organizational/event/ClearPersonCacheEvent.java

@@ -0,0 +1,9 @@
+package org.hswebframework.web.service.organizational.event;
+
+/**
+ * @author zhouhao
+ * @since 1.0
+ */
+public class ClearPersonCacheEvent {
+
+}

+ 19 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleDepartmentService.java

@@ -27,10 +27,12 @@ import org.hswebframework.web.service.DefaultDSLQueryService;
 import org.hswebframework.web.service.EnableCacheAllEvictTreeSortService;
 import org.hswebframework.web.service.GenericEntityService;
 import org.hswebframework.web.service.organizational.DepartmentService;
+import org.hswebframework.web.service.organizational.event.ClearPersonCacheEvent;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheConfig;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 
 import java.util.Collection;
@@ -52,6 +54,9 @@ public class SimpleDepartmentService
     @Autowired
     protected PositionDao positionDao;
 
+    @Autowired
+    private ApplicationEventPublisher publisher;
+
     @Override
     public DepartmentDao getDao() {
         return departmentDao;
@@ -87,6 +92,20 @@ public class SimpleDepartmentService
                 .total() > 0) {
             throw new BusinessException("部门下存在职位信息,无法删除!");
         }
+        publisher.publishEvent(new ClearPersonCacheEvent());
         return super.deleteByPk(id);
     }
+
+    @Override
+    public String insert(DepartmentEntity entity) {
+        publisher.publishEvent(new ClearPersonCacheEvent());
+        return super.insert(entity);
+    }
+
+    @Override
+    public int updateByPk(String id, DepartmentEntity entity) {
+        publisher.publishEvent(new ClearPersonCacheEvent());
+        return super.updateByPk(id, entity);
+    }
+
 }

+ 10 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleDistrictService.java

@@ -12,11 +12,13 @@ import org.hswebframework.web.service.DefaultDSLQueryService;
 import org.hswebframework.web.service.GenericEntityService;
 import org.hswebframework.web.id.IDGenerator;
 import org.hswebframework.web.service.organizational.DistrictService;
+import org.hswebframework.web.service.organizational.event.ClearPersonCacheEvent;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheConfig;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Caching;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 
 import java.util.Collection;
@@ -40,6 +42,9 @@ public class SimpleDistrictService extends AbstractTreeSortService<DistrictEntit
     @Autowired
     private OrganizationalDao organizationalDao;
 
+    @Autowired
+    private ApplicationEventPublisher publisher;
+
     @Override
     protected IDGenerator<String> getIDGenerator() {
         return IDGenerator.MD5;
@@ -53,12 +58,14 @@ public class SimpleDistrictService extends AbstractTreeSortService<DistrictEntit
     @Override
     @CacheEvict(allEntries = true)
     public String insert(DistrictEntity entity) {
+        publisher.publishEvent(new ClearPersonCacheEvent());
         return super.insert(entity);
     }
 
     @Override
     @CacheEvict(allEntries = true)
     public int updateByPk(String id, DistrictEntity entity) {
+        publisher.publishEvent(new ClearPersonCacheEvent());
         return super.updateByPk(id, entity);
     }
 
@@ -82,6 +89,7 @@ public class SimpleDistrictService extends AbstractTreeSortService<DistrictEntit
                 .total() > 0) {
             throw new BusinessException("行政区域下存在机构信息,无法删除!");
         }
+        publisher.publishEvent(new ClearPersonCacheEvent());
         return super.deleteByPk(id);
     }
 
@@ -117,6 +125,7 @@ public class SimpleDistrictService extends AbstractTreeSortService<DistrictEntit
                 .set(DistrictEntity.status, DataStatus.STATUS_DISABLED)
                 .where(DistrictEntity.id, id)
                 .exec();
+        publisher.publishEvent(new ClearPersonCacheEvent());
     }
 
     @Override
@@ -127,5 +136,6 @@ public class SimpleDistrictService extends AbstractTreeSortService<DistrictEntit
                 .set(DistrictEntity.status, DataStatus.STATUS_ENABLED)
                 .where(DistrictEntity.id, id)
                 .exec();
+        publisher.publishEvent(new ClearPersonCacheEvent());
     }
 }

+ 18 - 1
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleOrganizationalService.java

@@ -26,10 +26,13 @@ import org.hswebframework.web.id.IDGenerator;
 import org.hswebframework.web.service.DefaultDSLQueryService;
 import org.hswebframework.web.service.EnableCacheAllEvictTreeSortService;
 import org.hswebframework.web.service.organizational.OrganizationalService;
+import org.hswebframework.web.service.organizational.event.ClearPersonCacheEvent;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheConfig;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
+import org.springframework.cache.annotation.Caching;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
@@ -51,6 +54,9 @@ public class SimpleOrganizationalService extends EnableCacheAllEvictTreeSortServ
     @Autowired
     private DepartmentDao departmentDao;
 
+    @Autowired
+    private ApplicationEventPublisher publisher;
+
     @Override
     public OrganizationalDao getDao() {
         return organizationalDao;
@@ -62,13 +68,14 @@ public class SimpleOrganizationalService extends EnableCacheAllEvictTreeSortServ
     }
 
     @Override
+    @CacheEvict(allEntries = true)
     public int deleteByPk(String id) {
         if (DefaultDSLQueryService.createQuery(departmentDao)
                 .where(DepartmentEntity.orgId, id)
                 .total() > 0) {
             throw new BusinessException("机构下存在部门信息,无法删除");
         }
-
+        publisher.publishEvent(new ClearPersonCacheEvent());
         return super.deleteByPk(id);
     }
 
@@ -76,9 +83,16 @@ public class SimpleOrganizationalService extends EnableCacheAllEvictTreeSortServ
     @CacheEvict(allEntries = true)
     public String insert(OrganizationalEntity entity) {
         entity.setStatus(DataStatus.STATUS_ENABLED);
+        publisher.publishEvent(new ClearPersonCacheEvent());
         return super.insert(entity);
     }
 
+    @Override
+    public int updateByPk(String id, OrganizationalEntity entity) {
+        publisher.publishEvent(new ClearPersonCacheEvent());
+        return super.updateByPk(id, entity);
+    }
+
     @Override
     @CacheEvict(allEntries = true)
     public void disable(String id) {
@@ -87,6 +101,7 @@ public class SimpleOrganizationalService extends EnableCacheAllEvictTreeSortServ
                 .set(OrganizationalEntity.status, DataStatus.STATUS_DISABLED)
                 .where(OrganizationalEntity.id, id)
                 .exec();
+        publisher.publishEvent(new ClearPersonCacheEvent());
     }
 
     @Override
@@ -97,6 +112,7 @@ public class SimpleOrganizationalService extends EnableCacheAllEvictTreeSortServ
                 .set(OrganizationalEntity.status, DataStatus.STATUS_ENABLED)
                 .where(OrganizationalEntity.id, id)
                 .exec();
+        publisher.publishEvent(new ClearPersonCacheEvent());
     }
 
     @Override
@@ -116,6 +132,7 @@ public class SimpleOrganizationalService extends EnableCacheAllEvictTreeSortServ
         if (StringUtils.isEmpty(name)) {
             return null;
         }
+
         return createQuery().where(OrganizationalEntity.name, name).single();
     }
 }

+ 8 - 2
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java

@@ -21,7 +21,6 @@ import org.hswebframework.web.commons.entity.TreeSupportEntity;
 import org.hswebframework.web.dao.dynamic.QueryByEntityDao;
 import org.hswebframework.web.dao.organizational.*;
 import org.hswebframework.web.entity.authorization.UserEntity;
-import org.hswebframework.web.entity.authorization.bind.BindRoleUserEntity;
 import org.hswebframework.web.entity.organizational.*;
 import org.hswebframework.web.id.IDGenerator;
 import org.hswebframework.web.organizational.authorization.*;
@@ -31,15 +30,16 @@ import org.hswebframework.web.organizational.authorization.relation.SimpleRelati
 import org.hswebframework.web.organizational.authorization.simple.*;
 import org.hswebframework.web.service.DefaultDSLQueryService;
 import org.hswebframework.web.service.GenericEntityService;
-import org.hswebframework.web.service.authorization.AuthorizationSettingTypeSupplier;
 import org.hswebframework.web.service.authorization.UserService;
 import org.hswebframework.web.service.organizational.*;
+import org.hswebframework.web.service.organizational.event.ClearPersonCacheEvent;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheConfig;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Caching;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.event.TransactionalEventListener;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
@@ -136,6 +136,12 @@ public class SimplePersonService extends GenericEntityService<PersonEntity, Stri
         return this.updateByPk(((PersonEntity) authBindEntity));
     }
 
+    @TransactionalEventListener
+    @CacheEvict(allEntries = true)
+    public void handleClearCache(ClearPersonCacheEvent event) {
+        logger.debug("clear all person cache");
+    }
+
     @Override
     @Cacheable(key = "'person-name'+#name")
     public List<PersonEntity> selectByName(String name) {

+ 19 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePositionService.java

@@ -23,7 +23,9 @@ import org.hswebframework.web.entity.organizational.PositionEntity;
 import org.hswebframework.web.id.IDGenerator;
 import org.hswebframework.web.service.AbstractTreeSortService;
 import org.hswebframework.web.service.organizational.PositionService;
+import org.hswebframework.web.service.organizational.event.ClearPersonCacheEvent;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -35,6 +37,10 @@ import org.springframework.util.CollectionUtils;
 @Service("positionService")
 public class SimplePositionService extends AbstractTreeSortService<PositionEntity, String>
         implements PositionService {
+
+    @Autowired
+    private ApplicationEventPublisher publisher;
+
     @Autowired
     private PositionDao positionDao;
 
@@ -56,6 +62,19 @@ public class SimplePositionService extends AbstractTreeSortService<PositionEntit
         if(!CollectionUtils.isEmpty(personDao.selectByPositionId(id))){
             throw new BusinessException("岗位中还有人员,无法删除!");
         }
+        publisher.publishEvent(new ClearPersonCacheEvent());
         return super.deleteByPk(id);
     }
+
+    @Override
+    public int updateByPk(String id, PositionEntity entity) {
+        publisher.publishEvent(new ClearPersonCacheEvent());
+        return super.updateByPk(id, entity);
+    }
+
+    @Override
+    public String insert(PositionEntity entity) {
+        publisher.publishEvent(new ClearPersonCacheEvent());
+        return super.insert(entity);
+    }
 }

+ 31 - 2
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationDefineService.java

@@ -2,10 +2,15 @@ package org.hswebframework.web.service.organizational.simple;
 
 import org.hswebframework.web.dao.organizational.RelationDefineDao;
 import org.hswebframework.web.entity.organizational.RelationDefineEntity;
+import org.hswebframework.web.service.EnableCacheGenericEntityService;
 import org.hswebframework.web.service.GenericEntityService;
 import org.hswebframework.web.id.IDGenerator;
 import org.hswebframework.web.service.organizational.RelationDefineService;
+import org.hswebframework.web.service.organizational.event.ClearPersonCacheEvent;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheConfig;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 
 /**
@@ -14,17 +19,41 @@ import org.springframework.stereotype.Service;
  * @author hsweb-generator-online
  */
 @Service("relationDefineService")
-public class SimpleRelationDefineService extends GenericEntityService<RelationDefineEntity, String>
+@CacheConfig(cacheNames = "hsweb-relation-define")
+public class SimpleRelationDefineService extends EnableCacheGenericEntityService<RelationDefineEntity, String>
         implements RelationDefineService {
     @Autowired
     private RelationDefineDao relationDefineDao;
-   @Override
+
+    @Autowired
+    private ApplicationEventPublisher publisher;
+
+    @Override
     protected IDGenerator<String> getIDGenerator() {
         return IDGenerator.MD5;
     }
+
     @Override
     public RelationDefineDao getDao() {
         return relationDefineDao;
     }
 
+    @Override
+    public String insert(RelationDefineEntity entity) {
+        publisher.publishEvent(new ClearPersonCacheEvent());
+        return super.insert(entity);
+    }
+
+    @Override
+    public int deleteByPk(String pk) {
+        publisher.publishEvent(new ClearPersonCacheEvent());
+        return super.deleteByPk(pk);
+    }
+
+    @Override
+    public int updateByPk(String pk, RelationDefineEntity entity) {
+        publisher.publishEvent(new ClearPersonCacheEvent());
+        return super.updateByPk(pk, entity);
+    }
+
 }