diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java new file mode 100644 index 0000000..9b5a4fa --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java @@ -0,0 +1,41 @@ +package cn.estsh.i3plus.core.api.iservice.base; + +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import io.swagger.annotations.ApiOperation; + +/** + * @Description : 系统启动加载服务 + * @Reference : + * @Author : Adair Peng + * @CreateDate : 2019-01-11 10:02 + * @Modify: + **/ +public interface ISystemInitService { + + /** + * 系统初始化加载 + */ + @ApiOperation(value = "初始化加载所有数据",notes = "初始化加载所有数据") + void loadAll(); + + /** + * 加载系统配置 + */ + @ApiOperation(value = "加载系统配置",notes = "加载系统配置") + void loadSysConfig(); + + /** + * 加载系统字典 + */ + @ApiOperation(value = "加载字典数据",notes = "加载字典数据") + void loadSysDictionary(); + + /** + * 加载系统语言信息 + */ + @ApiOperation(value = "加载语言数据",notes = "加载语言数据") + void loadSysLocaleLanguage(); + + @ApiOperation(value = "获取缓存中的数据",notes = "获取缓存中的数据") + Object getDataFromCache(String key,Class dataType); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/IPersonnelService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/IPersonnelService.java index 41ce6cc..2821e8a 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/IPersonnelService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/IPersonnelService.java @@ -41,6 +41,9 @@ public interface IPersonnelService { @ApiOperation(value = "查询账号信息") List querySysUserByUserDetailModelOrIds(UserDetailModel model, List ids); + @ApiOperation(value = "查询账号信息") + ListPager querySysUserPagerByUserDetailModelOrIds(UserDetailModel model,Pager pager, List ids); + @ApiOperation(value = "获取用户信息") SysUserInfo getSysUserInfoById(Long id); @@ -101,7 +104,16 @@ public interface IPersonnelService { @ApiOperation(value = "岗位关系检查") void checkSysPositionRef(Long positionId); - @ApiOperation(value = "岗位关系检查") + @ApiOperation(value = "部门关系检查") + void checkSysDepartmentRef(Long departmentId); + + @ApiOperation(value = "组织关系检查") + void checkSysOrganizeRef(Long organizeId); + + @ApiOperation(value = "密码规则校验") + void checkSysUserPassword(String password); + + @ApiOperation(value = "菜单关系检查") void refreshMenuRdd(Long menuId); @ApiOperation(value = "岗位关系检查") diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysConfigService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysConfigService.java index 2cd9827..9bc45ea 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysConfigService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysConfigService.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.platform.bean.SysConfig; import io.swagger.annotations.ApiOperation; +import java.util.Date; import java.util.List; /** @@ -81,4 +82,13 @@ public interface ISysConfigService { */ @ApiOperation(value = "根据系统配置代码修改配置项") void updateSysConfigByCode(String code,String value); + + /** + * 根据系统参数组来查找系统参数 + * @param group + * @return + */ + @ApiOperation(value = "根据系统参数组来查找系统参数") + List findSysConfigByGroup(Integer group); + } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDictionaryService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDictionaryService.java index 4062cb7..9f1d1fa 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDictionaryService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDictionaryService.java @@ -103,4 +103,22 @@ public interface ISysDictionaryService { */ @ApiOperation(value = "设置默认字典项",notes = "根据id设置默认字典项") void updateSysDictionaryDefaultById(Long id); + + /** + * 根据父节点 以及当前节点值 获取字典信息 + * @param parentCode 父级代码 + * @param value 字典值 + * @return + */ + @ApiOperation(value = "根据父节点 以及当前节点值 获取字典信息") + SysDictionary getSysDictionaryByParentCodeAndValue(String parentCode,String value); + + /** + * 根据父节点 以及当前节点名称 获取字典信息 + * @param parentCode 父级代码 + * @param name 字典值 + * @return + */ + @ApiOperation(value = "根据父节点 以及当前节点名称 获取字典信息") + SysDictionary getSysDictionaryByParentCodeAndName(String parentCode,String name); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysFileService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysFileService.java index e0303a3..92ab4ca 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysFileService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysFileService.java @@ -67,4 +67,11 @@ public interface ISysFileService { */ @ApiOperation(value = "删除资源信息",notes = "根据ID批量删除资源信息") void deleteSysFileByIds(Long[] ids); + + /** + * 上传文件资源 + * @param file + */ + @ApiOperation(value = "上传文件资源",notes = "上传文件资源") + SysFile uploadFile(Object file) throws Exception; } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/AppStartSystemInit.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/AppStartSystemInit.java new file mode 100644 index 0000000..30eb423 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/AppStartSystemInit.java @@ -0,0 +1,32 @@ +package cn.estsh.i3plus.core.apiservice.configuration; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +/** + * @Description : + * @Reference : + * @Author : Adair Peng + * @CreateDate : 2019-01-11 9:55 + * @Modify: + **/ +@Component +public class AppStartSystemInit implements CommandLineRunner { + + public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG); + + @Autowired + private ISystemInitService systemInitService; + + @Override + public void run(String... args) throws Exception { + LOGGER.info(" Start Core Init Thread "); + systemInitService.loadAll(); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java index 891c616..f99dfbc 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java @@ -7,9 +7,12 @@ import cn.estsh.i3plus.platform.common.tool.EncryptTool; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.model.platform.UserDetailModel; +import cn.estsh.i3plus.pojo.model.platform.UserDetailPagerModel; import cn.estsh.i3plus.pojo.platform.bean.*; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -57,9 +60,23 @@ public class PersonnelController extends CoreBaseController { SysUserInfo info = model.getSysUserInfo(); checkUserDetailModel(model, false); + personnelService.checkSysUserPassword(model.getUserLoginPassword()); personnelService.checkSysUserOnly(user); - initUserDetail(info,user); + if(StringUtils.isBlank(info.getUserJoinDate())){ + info.setUserJoinDate(TimeTool.getToday()); + } + + info.setUserInfoStatus(CommonEnumUtil.USER_INFO_STATUS.INCUMBENT.getValue()); + info.setUserLoginNum(0); + info.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue()); + ConvertBean.modelInitialize(info, AuthUtil.getSessionUser()); + + user.setUserType(CommonEnumUtil.USER_TYPE.USER.getValue()); + user.setUserStatus(CommonEnumUtil.USER_STATUS.ENABLE.getValue()); + user.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue()); + user.setUserLoginNum(0); + ConvertBean.modelInitialize(user, AuthUtil.getSessionUser()); SysDepartment infoDepartment = personnelService.getSysDepartmentById(Long.parseLong(model.getInfoDepartmentId())); if(infoDepartment == null){ @@ -117,10 +134,9 @@ public class PersonnelController extends CoreBaseController { SysUserInfo info = model.getSysUserInfo(); checkUserDetailModel(model, true); + personnelService.checkSysUserPassword(model.getUserLoginPassword()); personnelService.checkSysUserOnly(user); - initUserDetail(info,user); - SysDepartment infoDepartment = personnelService.getSysDepartmentById(Long.parseLong(model.getInfoDepartmentId())); if(infoDepartment == null){ ValidatorBean.checkNotNull(infoDepartment,"用户主部门不存在"); @@ -166,7 +182,6 @@ public class PersonnelController extends CoreBaseController { } } - @PutMapping(value="/user/update") @ApiOperation(value="添加用户信息",notes="返回内容添加用户信息") public ResultBean updateUserModel(UserDetailModel model) { @@ -174,6 +189,7 @@ public class PersonnelController extends CoreBaseController { checkUserModel(model); SysUser user = personnelService.getSysUserById(Long.parseLong(model.getUserId())); initUser(model,user); + personnelService.checkSysUserPassword(model.getUserLoginPassword()); personnelService.checkSysUserOnly(user); SysDepartment userDepartment = personnelService.getSysDepartmentById(Long.parseLong(model.getUserDepartmentId())); @@ -380,14 +396,12 @@ public class PersonnelController extends CoreBaseController { } } - @PostMapping(value = "/query-ref-department") @ApiOperation(value = "查询角色的所有角色权限关系", notes = "查询角色的所有角色权限关系") - public ResultBean queryRefDepartment(UserDetailModel model) { + public ResultBean queryRefDepartment(@RequestBody UserDetailModel model) { try { - model.setUserDepartmentIdList(new ArrayList(Arrays.asList(new String[]{"1072037153732694016"}))); - List idList = new ArrayList<>(); + model.setUserDepartmentIdList(new ArrayList(Arrays.asList(new String[]{"1072037153732694016"}))); List refs = personnelService.querySysRefUserDepartmentByUserDetailModel(model); if(refs != null && refs.size() > 0){ @@ -405,6 +419,27 @@ public class PersonnelController extends CoreBaseController { } } + @PostMapping(value = "/pager/query-ref-department") + @ApiOperation(value = "查询角色的所有角色权限关系", notes = "查询角色的所有角色权限关系") + public ResultBean queryPagerRefDepartment(@RequestBody UserDetailPagerModel model) { + try { + List idList = new ArrayList<>(); + List refs = personnelService.querySysRefUserDepartmentByUserDetailModel(model.getUserDetailModel()); + if(refs != null && refs.size() > 0){ + for (SysRefUserDepartment ref : refs) { + idList.add(ref.getUserId()); + } + } + + ListPager result = personnelService.querySysUserPagerByUserDetailModelOrIds(model.getUserDetailModel(), model.getPager(), idList); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(result); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + /** * 数据必填校验 * @param model @@ -450,33 +485,6 @@ public class PersonnelController extends CoreBaseController { /** * 用户信息初始化 - * @param info - * @param user - * @throws Exception - */ - private void initUserDetail(SysUserInfo info ,SysUser user)throws Exception{ - if(StringUtils.isBlank(info.getUserJoinDate())){ - info.setUserJoinDate(TimeTool.getToday()); - } - - if(info != null){ - info.setUserInfoStatus(CommonEnumUtil.USER_INFO_STATUS.INCUMBENT.getValue()); - info.setUserLoginNum(0); - info.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue()); - ConvertBean.modelInitialize(info, AuthUtil.getSessionUser()); - } - - if(user != null){ - user.setUserType(CommonEnumUtil.USER_TYPE.USER.getValue()); - user.setUserStatus(CommonEnumUtil.USER_STATUS.ENABLE.getValue()); - user.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue()); - user.setUserLoginNum(0); - ConvertBean.modelInitialize(user, AuthUtil.getSessionUser()); - } - } - - /** - * 用户信息初始化 * @param model * @param user * @throws Exception diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java index 99017b1..63c6147 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; +import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; import cn.estsh.i3plus.core.api.iservice.busi.ISysConfigService; import cn.estsh.i3plus.core.apiservice.util.MailUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -42,9 +43,13 @@ public class SysConfigController extends CoreBaseController { @Autowired private ISysConfigService sysConfigService; + @Autowired private MailUtil mailUtil; + @Autowired + private ISystemInitService systemInitService; + @PostMapping("/insert") @ApiOperation(value = "添加系统参数",notes = "添加系统参数") public ResultBean insertSysConfig(SysConfig sysConfig) { @@ -63,6 +68,7 @@ public class SysConfigController extends CoreBaseController { ConvertBean.modelInitialize(sysConfig,user); sysConfigService.insertSysConfig(sysConfig); + systemInitService.loadSysConfig(); return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -87,6 +93,7 @@ public class SysConfigController extends CoreBaseController { } sysConfigService.deleteSysConfigById(Long.parseLong(idStr)); + systemInitService.loadSysConfig(); return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -113,6 +120,7 @@ public class SysConfigController extends CoreBaseController { ConvertBean.modelUpdate(sysConfig,user); sysConfigService.updateSysConfig(sysConfig); + systemInitService.loadSysConfig(); return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -213,6 +221,7 @@ public class SysConfigController extends CoreBaseController { ValidatorBean.checkNotNull(value,"值不能为空"); sysConfigService.updateSysConfigByCode(code,value); + systemInitService.loadSysConfig(); return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -240,4 +249,18 @@ public class SysConfigController extends CoreBaseController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @GetMapping("/find-group/{group}") + @ApiOperation(value = "根据参数组查询系统参数") + public ResultBean findSysConfigByGroup(@PathVariable("group") Integer group){ + try { + ValidatorBean.checkNotNull(group,"参数组不能为空"); + List sysConfigList = sysConfigService.findSysConfigByGroup(group); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(sysConfigList); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java index 6941388..9fe63fd 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java @@ -109,22 +109,6 @@ public class SysDepartmentController extends CoreBaseController { } } - @DeleteMapping(value = "/delete/{id}") - @ApiOperation(value = "删除部门", notes = "根据部门id删除信息") - public ResultBean deleteSysDepartment(@PathVariable("id") String id) { - try { - //条件验证 - ValidatorBean.checkNotNull(id, "id为空。"); - - departmentService.deleteSysDepartmentById(Long.parseLong(id)); - return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } catch (ImppBusiException busExcep) { - return ResultBean.fail(busExcep); - } catch (Exception e) { - return ImppExceptionBuilder.newInstance().buildExceptionResult(e); - } - } - @GetMapping(value = "/list") @ApiOperation(value = "查询所有部门", notes = "查询所有部门") public ResultBean findSysDepartmentAll() { @@ -183,6 +167,22 @@ public class SysDepartmentController extends CoreBaseController { } } + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "删除部门", notes = "根据部门id删除信息") + public ResultBean deleteSysDepartment(@PathVariable("id") String id) { + try { + //条件验证 + ValidatorBean.checkNotNull(id, "id为空。"); + + departmentService.deleteSysDepartmentById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @DeleteMapping(value = "/batch-delete") @ApiOperation(value = "根据id批量删除", notes = "根据id批量删除") public ResultBean deleteSysDepartmentByIds(String[] ids){ diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDictionaryController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDictionaryController.java index ccd2042..a0f5a23 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDictionaryController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDictionaryController.java @@ -3,8 +3,8 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.StringTool; -import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -168,15 +168,15 @@ public class SysDictionaryController extends CoreBaseController{ public ResultBean findSysDictionaryUserInfo() { try { Map resultMap = new HashMap<>(); - resultMap.put("1",sysDictionaryService.findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_SEX)); - resultMap.put("2",sysDictionaryService.findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_FILE_TYPE)); - resultMap.put("3",sysDictionaryService.findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_MARRIAGE)); - resultMap.put("4",sysDictionaryService.findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_EDUCATION)); - resultMap.put("5",sysDictionaryService.findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_NATIONALITY)); - resultMap.put("6",sysDictionaryService.findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_CERTIFICATE_TYPE)); - resultMap.put("7",sysDictionaryService.findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_GRADE)); - resultMap.put("8",sysDictionaryService.findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_POLITICAL_STATUS)); - resultMap.put("9",sysDictionaryService.findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_EMPLOYEE_TYPE)); + resultMap.put("1",sysDictionaryService.findSysDictionaryByParentCode(BaseConstWords.DICTIONARY_SEX)); + resultMap.put("2",sysDictionaryService.findSysDictionaryByParentCode(BaseConstWords.DICTIONARY_FILE_TYPE)); + resultMap.put("3",sysDictionaryService.findSysDictionaryByParentCode(BaseConstWords.DICTIONARY_MARRIAGE)); + resultMap.put("4",sysDictionaryService.findSysDictionaryByParentCode(BaseConstWords.DICTIONARY_EDUCATION)); + resultMap.put("5",sysDictionaryService.findSysDictionaryByParentCode(BaseConstWords.DICTIONARY_NATIONALITY)); + resultMap.put("6",sysDictionaryService.findSysDictionaryByParentCode(BaseConstWords.DICTIONARY_CERTIFICATE_TYPE)); + resultMap.put("7",sysDictionaryService.findSysDictionaryByParentCode(BaseConstWords.DICTIONARY_EMPLOYEE_GRADE)); + resultMap.put("8",sysDictionaryService.findSysDictionaryByParentCode(BaseConstWords.DICTIONARY_POLITICAL_STATUS)); + resultMap.put("9",sysDictionaryService.findSysDictionaryByParentCode(BaseConstWords.DICTIONARY_EMPLOYEE_TYPE)); return ResultBean.success("查询成功").setResultMap(resultMap).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java index 02845e8..3bbcbf4 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java @@ -161,4 +161,18 @@ public class SysEnumController extends CoreBaseController{ return new ResultBean(true, "操作成功", Arrays.asList(ImppEnumUtil.SYS_VALUE_TYPE.values())); } + + @GetMapping("/sys-math-symbol") + @ApiOperation(value = "数学表达式", notes = "数学表达式") + public ResultBean getSysMathSymbol(){ + return new ResultBean(true, "操作成功", + Arrays.asList(CommonEnumUtil.MATH_SYMBOL.values())); + } + + @GetMapping("/sys-config-group") + @ApiOperation(value = "系统配置组", notes = "系统配置组") + public ResultBean getSysConfigGroup(){ + return new ResultBean(true, "操作成功", + Arrays.asList(ImppEnumUtil.SYS_CONFIG_GROUP.values())); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java index bcaa485..b01698b 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java @@ -3,22 +3,17 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; import cn.estsh.i3plus.platform.common.tool.StringTool; -import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; -import cn.estsh.i3plus.pojo.platform.bean.SessionUser; -import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; import cn.estsh.i3plus.pojo.platform.bean.SysFile; import cn.estsh.impp.framework.base.controller.CoreBaseController; -import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; import cn.estsh.impp.framework.boot.fastdfs.FastDFSClient; -import cn.estsh.impp.framework.boot.fastdfs.FastDFSFile; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; @@ -26,20 +21,14 @@ import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.InputStreamResource; -import org.springframework.core.io.Resource; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.*; -import java.net.URLConnection; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.List; /** @@ -161,7 +150,7 @@ public class SysFileController extends CoreBaseController{ @PostMapping("/upload") @ApiOperation(value = "文件上传",notes = "文件上传") - public ResultBean singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) { + public ResultBean singleFileUpload(@RequestParam("file") MultipartFile file) { try { if(file.isEmpty()){ throw ImppExceptionBuilder.newInstance() @@ -181,25 +170,7 @@ public class SysFileController extends CoreBaseController{ .build(); } - - FastDFSFile dfsFile = dfsClient.saveFile(file); - String filePath = dfsClient.getHostUi() + "/" + dfsFile.getDfsGroupName() + "/" + dfsFile.getDfsFileName(); - SysDictionary dictionary = dictionaryService.getSysDictionaryByParentCodeAndCode( - CommonConstWords.DICTIONARY_FILE_TYPE, - StringTool.getStringFileSuffix(file.getOriginalFilename(),false)); - - SysFile sysFile = new SysFile(); - sysFile.setDfsGroupName(dfsFile.getDfsGroupName()); - sysFile.setDfsFileName(dfsFile.getDfsFileName()); - sysFile.setFileSize(dfsFile.getContent().length); - sysFile.setFilePath(filePath); - sysFile.setFileOriginalName(file.getOriginalFilename()); - sysFile.setFileTypeId(dictionary.getId()); - sysFile.setFileTypeName(dictionary.getName()); - sysFile.setUserId(getSessionUser().getUserId()); - sysFile.setDownloadNum(0); - - SysFile fileDb = sysFileService.insertSysFile(sysFile); + SysFile fileDb = sysFileService.uploadFile(file); return ResultBean.success("上传成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(fileDb); }catch(ImppBusiException busExcep){ @@ -239,17 +210,17 @@ public class SysFileController extends CoreBaseController{ response.addHeader("Content-type", "application/octet-stream");// 设置文件名 BufferedInputStream bis = null; - try { - bis = new BufferedInputStream(fis); - OutputStream os = response.getOutputStream(); - byte[] buffer = new byte[1024]; - int i = bis.read(buffer); - while (i != -1) { - os.write(buffer, 0, i); - i = bis.read(buffer); - } - } catch (Exception e) { - e.printStackTrace(); + try { + bis = new BufferedInputStream(fis); + OutputStream os = response.getOutputStream(); + byte[] buffer = new byte[1024]; + int i = bis.read(buffer); + while (i != -1) { + os.write(buffer, 0, i); + i = bis.read(buffer); + } + } catch (Exception e) { + e.printStackTrace(); } finally { if (bis != null) { try { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogExceptionController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogExceptionController.java index 173ea70..aac7848 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogExceptionController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogExceptionController.java @@ -1,13 +1,23 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; +import cn.estsh.i3plus.core.api.iservice.busi.ISysConfigService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; import cn.estsh.i3plus.core.api.iservice.busi.ISysLogExceptionService; +import cn.estsh.i3plus.core.apiservice.util.ExcelUtil; +import cn.estsh.i3plus.core.apiservice.util.FileUtil; +import cn.estsh.i3plus.core.apiservice.util.ZipUtil; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.platform.platbean.SysLogException; +import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSClient; import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -18,6 +28,11 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.io.File; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + /** * @Description : 系统异常日志服务 * @Reference : @@ -28,15 +43,24 @@ import org.springframework.web.bind.annotation.RestController; @RestController @Api(description = "系统异常日志服务") @RequestMapping(PlatformConstWords.BASE_URL + "/sys-log-exception") -public class SysLogExceptionController { +public class SysLogExceptionController extends CoreBaseController { public static final Logger LOGGER = LoggerFactory.getLogger(SysLogExceptionController.class); @Autowired private ISysLogExceptionService sysLogExceptionService; + @Autowired + private ISysDictionaryService sysDictionaryService; + + @Autowired + private ISysConfigService sysConfigService; + + @Autowired + private ISysFileService sysFileService; + @GetMapping(value = "/query") @ApiOperation(value = "异常日志复杂查询,分页,排序",notes = "异常日志复杂查询,分页,排序") - public ResultBean querySysLogOperateByPager(SysLogException sysLogException, Pager pager){ + public ResultBean querySysLogExceptionByPager(SysLogException sysLogException, Pager pager){ try { ListPager logExceptionList = sysLogExceptionService.querySysLogExceptionByPager(sysLogException, pager); return ResultBean.success("查询成功").setListPager(logExceptionList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); @@ -46,4 +70,82 @@ public class SysLogExceptionController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @GetMapping("/get-col") + @ApiOperation(value = "获取系统操作日志字段") + public ResultBean getSysLogExceptionCol(){ + try { + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultMap(ExcelUtil.getColName(SysLogException.class)); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/export") + @ApiOperation(value = "导出系统异常日志") + public ResultBean exportSysLogException(SysLogException sysLogException, String[] colName, int pageSize,boolean isZip) { + ListPager listPager; + List result = new ArrayList(); + File zipFile = null; + File excelDir = null; + File excelFile; + try { + Pager pager = new Pager(); + pager.setCurrentPage(1); + // 判断是否超过excel最大导出数量设定值 + int maxPageSize = Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.EXCEL_EXPORT_MAX_ROW).getConfigValue()); + if (pageSize == 0 || pageSize >= maxPageSize) { + pager.setPageSize(maxPageSize); + } else { + pager.setPageSize(pageSize); + } + + // 数据校验 + if(colName==null || colName.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) + .setErrorDetail("导出列不能为空") + .build(); + } + + excelDir = new File(System.getProperty("java.io.tmpdir") + File.separator + new Date().getTime()); + excelDir.mkdir(); + do { + listPager = sysLogExceptionService.querySysLogExceptionByPager(sysLogException, pager); + pager = listPager.getObjectPager(); + + // 将excel导出至临时文件夹并上传 + excelFile = new File(excelDir + File.separator + SysLogException.class.getSimpleName() + pager.getCurrentPage() + ".xls"); + excelFile.createNewFile(); + + ExcelUtil.exportData(excelFile, listPager.getObjectList(), SysLogException.class, colName); + result.add(sysFileService.uploadFile(excelFile)); + + pager.setCurrentPage(pager.getCurrentPage() + 1); + } while (pager.getCurrentPage() <= pager.getTotalPages()); + + // 将所有excel文件打包 + if(isZip){ + zipFile = ZipUtil.zipFile(null, excelDir); + result.add(sysFileService.uploadFile(zipFile)); + ExcelUtil.sendStationLetter(result,getSessionUser().getUser().getId()); + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + } else { + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + } + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } finally { + // 清理临时文件文件 + if (zipFile != null) { + FileUtil.deletefile(zipFile.getPath()); + } + FileUtil.deletefile(excelDir.getPath()); + } + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogOperateController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogOperateController.java index d3b6ad5..28c8ace 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogOperateController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogOperateController.java @@ -1,14 +1,23 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; +import cn.estsh.i3plus.core.api.iservice.busi.ISysConfigService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; import cn.estsh.i3plus.core.api.iservice.busi.ISysLogOperateService; +import cn.estsh.i3plus.core.apiservice.util.ExcelUtil; +import cn.estsh.i3plus.core.apiservice.util.FileUtil; +import cn.estsh.i3plus.core.apiservice.util.ZipUtil; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.platform.platbean.SysLogOperate; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSClient; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; @@ -19,6 +28,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.websocket.server.PathParam; +import java.io.File; +import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -37,6 +49,15 @@ public class SysLogOperateController extends CoreBaseController { @Autowired private ISysLogOperateService logOperateService; + @Autowired + private ISysDictionaryService sysDictionaryService; + + @Autowired + private ISysConfigService sysConfigService; + + @Autowired + private ISysFileService sysFileService; + @PostMapping(value = "/insert") @ApiOperation(value = "添加操作日志",notes = "添加操作日志") public ResultBean insertSysLogOperateController(SysLogOperate logOperate){ @@ -111,4 +132,83 @@ public class SysLogOperateController extends CoreBaseController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @GetMapping("/get-col") + @ApiOperation(value = "获取系统操作日志字段") + public ResultBean getSysLogOperateCol(){ + try { + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultMap(ExcelUtil.getColName(SysLogOperate.class)); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/export") + @ApiOperation(value = "导出操作日志") + public ResultBean exportSysLogOperate(SysLogOperate sysLogOperate, String[] colName, int pageSize, boolean isZip) { + ListPager listPager; + List result = new ArrayList(); + File zipFile = null; + File excelDir = null; + File excelFile; + try { + Pager pager = new Pager(); + pager.setCurrentPage(1); + // 判断是否超过excel最大导出数量设定值 + int maxPageSize = Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.EXCEL_EXPORT_MAX_ROW).getConfigValue()); + if (pageSize == 0 || pageSize >= maxPageSize) { + pager.setPageSize(maxPageSize); + } else { + pager.setPageSize(pageSize); + } + + // 数据校验 + if(colName==null || colName.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) + .setErrorDetail("导出列不能为空") + .build(); + } + + excelDir = new File(System.getProperty("java.io.tmpdir") + File.separator + new Date().getTime()); + excelDir.mkdir(); + do { + listPager = logOperateService.querySysLogOperateByPager(sysLogOperate, pager); + pager = listPager.getObjectPager(); + + // 将excel导出至临时文件夹并上传 + excelFile = new File(excelDir + File.separator + SysLogOperate.class.getSimpleName() + pager.getCurrentPage() + ".xls"); + excelFile.createNewFile(); + + ExcelUtil.exportData(excelFile, listPager.getObjectList(), SysLogOperate.class, colName); + result.add(sysFileService.uploadFile(excelFile)); + + pager.setCurrentPage(pager.getCurrentPage() + 1); + } while (pager.getCurrentPage() <= pager.getTotalPages()); + + // 将所有excel文件打包 + if(isZip){ + zipFile = ZipUtil.zipFile(null, excelDir); + result.add(sysFileService.uploadFile(zipFile)); + ExcelUtil.sendStationLetter(result,getSessionUser().getUser().getId()); + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + } else { + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + } + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } finally { + // 清理临时文件文件 + // 清理临时文件文件 + if (zipFile != null) { + FileUtil.deletefile(zipFile.getPath()); + } + FileUtil.deletefile(excelDir.getPath()); + } + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java index e2d1303..047e84a 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java @@ -5,20 +5,19 @@ import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; import cn.estsh.i3plus.core.api.iservice.busi.ISysLogSystemService; import cn.estsh.i3plus.core.apiservice.util.ExcelUtil; -import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.core.apiservice.util.FileUtil; +import cn.estsh.i3plus.core.apiservice.util.ZipUtil; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; -import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; -import cn.estsh.i3plus.pojo.platform.bean.SysFile; -import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; import cn.estsh.impp.framework.boot.fastdfs.FastDFSClient; -import cn.estsh.impp.framework.boot.fastdfs.FastDFSFile; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; @@ -28,7 +27,9 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.io.File; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -48,17 +49,11 @@ public class SysLogSystemController extends CoreBaseController{ private ISysLogSystemService logSystemService; @Autowired - private ISysDictionaryService sysDictionaryService; - - @Autowired private ISysConfigService sysConfigService; @Autowired private ISysFileService sysFileService; - @Autowired - private FastDFSClient dfsClient; - @PostMapping(value = "/insert") @ApiOperation(value="新增系统日志",notes = "新增系统日志") public ResultBean insertSysLogSystem(SysLogSystem logSystem) { @@ -146,48 +141,68 @@ public class SysLogSystemController extends CoreBaseController{ } @GetMapping(value = "/export") - @ApiOperation(value = "导出系统日志") - public ResultBean exportSysLogSystem(SysLogSystem sysLogSystem, String[] colName){ + @ApiOperation(value = "导出系统异常日志") + public ResultBean exportSysLogSystem(SysLogSystem sysLogSystem, String[] colName, int pageSize, boolean isZip) { + ListPager listPager; + List result = new ArrayList(); + File zipFile = null; + File excelDir = null; + File excelFile; try { Pager pager = new Pager(); pager.setCurrentPage(1); - pager.setPageSize(Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.EXCEL_EXPORT_MAX_ROW).getConfigValue())); - ListPager listPager; - String[] fileAbsolutePath; - List result = new ArrayList(); + // 判断是否超过excel最大导出数量设定值 + int maxPageSize = Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.EXCEL_EXPORT_MAX_ROW).getConfigValue()); + if (pageSize == 0 || pageSize >= maxPageSize) { + pager.setPageSize(maxPageSize); + } else { + pager.setPageSize(pageSize); + } + + // 数据校验 + if(colName==null || colName.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) + .setErrorDetail("导出列不能为空") + .build(); + } + + excelDir = new File(System.getProperty("java.io.tmpdir") + File.separator + new Date().getTime()); + excelDir.mkdir(); do { listPager = logSystemService.querySysLogSystemByPager(sysLogSystem, pager); pager = listPager.getObjectPager(); - // 上传至文件服务器 - FastDFSFile fastDFSFile = new FastDFSFile(SysOrderNoRule.class.getSimpleName() + pager.getCurrentPage() + ".xls", - ExcelUtil.exportData(listPager.getObjectList(),SysOrderNoRule.class,colName),"xls"); - - fileAbsolutePath = dfsClient.upload(fastDFSFile); + // 将excel导出至临时文件夹并上传 + excelFile = new File(excelDir + File.separator + SysLogSystem.class.getSimpleName() + pager.getCurrentPage() + ".xls"); + excelFile.createNewFile(); - // 保证系统文件表中 - String filePath = dfsClient.getHostUi() + "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1]; - SysDictionary dictionary = sysDictionaryService.getSysDictionaryByParentCodeAndCode( - CommonConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); - - SysFile sysFile = new SysFile(); - sysFile.setDfsGroupName(fileAbsolutePath[0]); - sysFile.setDfsFileName(fileAbsolutePath[1]); - sysFile.setFileSize(fastDFSFile.getContent().length); - sysFile.setFilePath(filePath); - sysFile.setFileOriginalName(fastDFSFile.getName()); - sysFile.setFileTypeId(dictionary.getId()); - sysFile.setFileTypeName(dictionary.getName()); - sysFile.setDownloadNum(0); - result.add(sysFileService.insertSysFile(sysFile)); + ExcelUtil.exportData(excelFile, listPager.getObjectList(), SysLogSystem.class, colName); + result.add(sysFileService.uploadFile(excelFile)); pager.setCurrentPage(pager.getCurrentPage() + 1); } while (pager.getCurrentPage() <= pager.getTotalPages()); - return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); - }catch(ImppBusiException busExcep){ + + // 将所有excel文件打包 + if(isZip){ + zipFile = ZipUtil.zipFile(null, excelDir); + result.add(sysFileService.uploadFile(zipFile)); + ExcelUtil.sendStationLetter(result,getSessionUser().getUser().getId()); + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + } else { + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + } + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } finally { + // 清理临时文件文件 + if (zipFile != null) { + FileUtil.deletefile(zipFile.getPath()); + } + FileUtil.deletefile(excelDir.getPath()); } } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java index 9c39549..37e86cd 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java @@ -5,9 +5,12 @@ import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; import cn.estsh.i3plus.core.api.iservice.busi.ISysOrderNoRuleService; import cn.estsh.i3plus.core.apiservice.util.ExcelUtil; +import cn.estsh.i3plus.core.apiservice.util.FileUtil; +import cn.estsh.i3plus.core.apiservice.util.ZipUtil; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; @@ -16,6 +19,8 @@ import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; import cn.estsh.i3plus.pojo.platform.bean.SysFile; import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; +import cn.estsh.i3plus.pojo.platform.bean.SysUserInfo; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogOperate; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -36,6 +41,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.OutputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -214,48 +220,68 @@ public class SysOrderNoRuleController extends CoreBaseController { } @GetMapping(value = "/export") - @ApiOperation(value = "导出单号规则") - public ResultBean exportSysOrderNoRule(SysOrderNoRule sysOrderNoRule, String[] colName){ + @ApiOperation(value = "导出操作日志") + public ResultBean exportSysOrderNoRule(SysOrderNoRule sysOrderNoRule, String[] colName, int pageSize, boolean isZip) { + ListPager listPager; + List result = new ArrayList(); + File zipFile = null; + File excelDir = null; + File excelFile; try { Pager pager = new Pager(); pager.setCurrentPage(1); - pager.setPageSize(Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.EXCEL_EXPORT_MAX_ROW).getConfigValue())); - ListPager listPager; - String[] fileAbsolutePath; - List result = new ArrayList(); + // 判断是否超过excel最大导出数量设定值 + int maxPageSize = Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.EXCEL_EXPORT_MAX_ROW).getConfigValue()); + if (pageSize == 0 || pageSize >= maxPageSize) { + pager.setPageSize(maxPageSize); + } else { + pager.setPageSize(pageSize); + } + + // 数据校验 + if(colName==null || colName.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) + .setErrorDetail("导出列不能为空") + .build(); + } + + excelDir = new File(System.getProperty("java.io.tmpdir") + File.separator + new Date().getTime()); + excelDir.mkdir(); do { listPager = sysOrderNoRuleService.querySysOrderNoRuleByPager(sysOrderNoRule, pager); pager = listPager.getObjectPager(); - // 上传至文件服务器 - FastDFSFile fastDFSFile = new FastDFSFile(SysOrderNoRule.class.getSimpleName() + pager.getCurrentPage() + ".xls", - ExcelUtil.exportData(listPager.getObjectList(),SysOrderNoRule.class,colName),"xls"); - - fileAbsolutePath = dfsClient.upload(fastDFSFile); - - // 保证系统文件表中 - String filePath = dfsClient.getHostUi() + "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1]; - SysDictionary dictionary = sysDictionaryService.getSysDictionaryByParentCodeAndCode( - CommonConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); + // 将excel导出至临时文件夹并上传 + excelFile = new File(excelDir + File.separator + SysOrderNoRule.class.getSimpleName() + pager.getCurrentPage() + ".xls"); + excelFile.createNewFile(); - SysFile sysFile = new SysFile(); - sysFile.setDfsGroupName(fileAbsolutePath[0]); - sysFile.setDfsFileName(fileAbsolutePath[1]); - sysFile.setFileSize(fastDFSFile.getContent().length); - sysFile.setFilePath(filePath); - sysFile.setFileOriginalName(fastDFSFile.getName()); - sysFile.setFileTypeId(dictionary.getId()); - sysFile.setFileTypeName(dictionary.getName()); - sysFile.setDownloadNum(0); - result.add(sysFileService.insertSysFile(sysFile)); + ExcelUtil.exportData(excelFile, listPager.getObjectList(), SysOrderNoRule.class, colName); + result.add(sysFileService.uploadFile(excelFile)); pager.setCurrentPage(pager.getCurrentPage() + 1); } while (pager.getCurrentPage() <= pager.getTotalPages()); - return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); - }catch(ImppBusiException busExcep){ + + // 将所有excel文件打包 + if(isZip){ + zipFile = ZipUtil.zipFile(null, excelDir); + result.add(sysFileService.uploadFile(zipFile)); + ExcelUtil.sendStationLetter(result,getSessionUser().getUser().getId()); + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + } else { + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + } + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } finally { + // 清理临时文件文件 + if (zipFile != null) { + FileUtil.deletefile(zipFile.getPath()); + } + FileUtil.deletefile(excelDir.getPath()); } } @@ -264,15 +290,7 @@ public class SysOrderNoRuleController extends CoreBaseController { public ResultBean importSysOrderNoRule(@RequestParam("file") MultipartFile file){ try { List sysOrderNoRuleList = ExcelUtil.importData(file.getOriginalFilename(),file.getInputStream(),SysOrderNoRule.class); - for (SysOrderNoRule item : sysOrderNoRuleList) { - //校验及初始化数据 - validatorSysOrderNoRule(item); - item.setOrderNoRuleStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); - item.setSerialNo(CommonEnumUtil.PARENT.DEFAULT.getValue()); - - sysOrderNoRuleService.insertSysOrderNoRule(item); - } - + sysOrderNoRuleService.insertSysOrderNoRuleList(sysOrderNoRuleList); return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -293,7 +311,7 @@ public class SysOrderNoRuleController extends CoreBaseController { // 保证系统文件表中 String filePath = dfsClient.getHostUi() + "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1]; SysDictionary dictionary = sysDictionaryService.getSysDictionaryByParentCodeAndCode( - CommonConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); + BaseConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); SysFile sysFile = new SysFile(); sysFile.setDfsGroupName(fileAbsolutePath[0]); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysPositionController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysPositionController.java index dc0ec77..0a8ed72 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysPositionController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysPositionController.java @@ -99,22 +99,6 @@ public class SysPositionController extends CoreBaseController { } } - @DeleteMapping(value="/delete/{id}") - @ApiOperation(value="删除岗位",notes="根据岗位id删除信息") - public ResultBean deleteSysPosition(@PathVariable("id") String id){ - try { - //条件验证 - ValidatorBean.checkNotNull(id,"id为空"); - - positionService.deleteSysPositionById(Long.parseLong(id)); - return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } catch (ImppBusiException busExcep) { - return ResultBean.fail(busExcep); - } catch (Exception e) { - return ResultBean.fail(e).setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); - } - } - @GetMapping(value="/list") @ApiOperation(value="查询所有岗位",notes="查询所有岗位") public ResultBean findSysPositionAll(){ @@ -161,6 +145,22 @@ public class SysPositionController extends CoreBaseController { } } + @DeleteMapping(value="/delete/{id}") + @ApiOperation(value="删除岗位",notes="根据岗位id删除信息") + public ResultBean deleteSysPosition(@PathVariable("id") String id){ + try { + //条件验证 + ValidatorBean.checkNotNull(id,"id为空"); + + positionService.deleteSysPositionById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ResultBean.fail(e).setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + @DeleteMapping(value = "/batch-delete") @ApiOperation(value = "根据id批量删除", notes = "根据id批量删除") public ResultBean deleteSysPositionByIds(String[] ids){ @@ -182,5 +182,4 @@ public class SysPositionController extends CoreBaseController { return ResultBean.fail(e).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); } } - } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java index 4cddce5..06f5199 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java @@ -412,6 +412,8 @@ public class SysUserController extends CoreBaseController{ ValidatorBean.checkNotNull(password,"新密码不能为空"); ValidatorBean.checkNotNull(email,"邮件不能为空"); + personnelService.checkSysUserPassword(password); + String redisKey = CommonConstWords.SESSION_VERIFICATION_USER_EMAIL + "_" + getSessionUser().getUserId(); Object redisValue = redisCore.getObject(redisKey); if(redisValue != null){ diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java index 7b98104..d49a53e 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java @@ -1,8 +1,9 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; -import cn.estsh.i3plus.core.api.iservice.busi.ISysDepartmentService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysPositionService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysUserInfoService; +import cn.estsh.i3plus.core.api.iservice.busi.*; +import cn.estsh.i3plus.core.apiservice.util.ExcelUtil; +import cn.estsh.i3plus.core.apiservice.util.FileUtil; +import cn.estsh.i3plus.core.apiservice.util.ZipUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; @@ -17,6 +18,7 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSClient; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; @@ -26,8 +28,9 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.io.File; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Date; import java.util.List; /** @@ -53,6 +56,12 @@ public class SysUserInfoController extends CoreBaseController{ @Autowired private ISysPositionService sysPositionService; + @Autowired + private ISysConfigService sysConfigService; + + @Autowired + private ISysFileService sysFileService; + @PostMapping(value="/insert") @ApiOperation(value="添加用户信息",notes="返回内容添加用户信息") public ResultBean insertSysUserInfo(SysUserInfo userInfo){ @@ -297,4 +306,83 @@ public class SysUserInfoController extends CoreBaseController{ LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); } } + + @GetMapping(value = "/export") + @ApiOperation(value = "导出用户信息") + public ResultBean exportSysUserInfo(SysUserInfo sysUserInfo, String[] colName, int pageSize,boolean isZip) { + ListPager listPager; + List result = new ArrayList(); + File zipFile = null; + File excelDir = null; + File excelFile; + + try { + Pager pager = new Pager(); + pager.setCurrentPage(1); + // 判断是否超过excel最大导出数量设定值 + int maxPageSize = Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.EXCEL_EXPORT_MAX_ROW).getConfigValue()); + if (pageSize == 0 || pageSize >= maxPageSize) { + pager.setPageSize(maxPageSize); + } else { + pager.setPageSize(pageSize); + } + + // 数据校验 + if(colName==null || colName.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) + .setErrorDetail("导出列不能为空") + .build(); + } + + excelDir = new File(System.getProperty("java.io.tmpdir") + File.separator + new Date().getTime()); + excelDir.mkdir(); + do { + listPager = sysUserInfoService.querySysUserInfo(sysUserInfo, pager); + pager = listPager.getObjectPager(); + + // 将excel导出至临时文件夹并上传 + excelFile = new File(excelDir + File.separator + SysUserInfo.class.getSimpleName() + pager.getCurrentPage() + ".xls"); + excelFile.createNewFile(); + + ExcelUtil.exportData(excelFile, listPager.getObjectList(), SysUserInfo.class, colName); + result.add(sysFileService.uploadFile(excelFile)); + + pager.setCurrentPage(pager.getCurrentPage() + 1); + } while (pager.getCurrentPage() <= pager.getTotalPages()); + + // 将所有excel文件打包 + if(isZip){ + zipFile = ZipUtil.zipFile(null, excelDir); + result.add(sysFileService.uploadFile(zipFile)); + ExcelUtil.sendStationLetter(result,getSessionUser().getUser().getId()); + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + } else { + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + } + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } finally { + // 清理临时文件文件 + if (zipFile != null) { + FileUtil.deletefile(zipFile.getPath()); + } + FileUtil.deletefile(excelDir.getPath()); + } + } + + @GetMapping("/get-col") + @ApiOperation(value = "获取用户可导出字段") + public ResultBean getSysUserInfoColName(){ + try { + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultMap(ExcelUtil.getColName(SysUserInfo.class)); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java index b37a399..693bd0f 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java @@ -9,7 +9,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.platform.bean.SysMessage; import cn.estsh.i3plus.pojo.platform.bean.SysRefUserMessage; import cn.estsh.i3plus.pojo.platform.bean.SysUser; -import com.alibaba.fastjson.JSON; +import com.fasterxml.jackson.databind.ObjectMapper; import com.rabbitmq.client.Channel; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -58,7 +58,8 @@ public class MessageLetterQueueReceiver { SysRefUserMessage refUserMessage; SysUser sysUser; - List userMessage; + List userMessage; + ObjectMapper mapper = new ObjectMapper(); for (int i = 0; i < messageReceiver.length; i++) { sysUser = sysUserService.getSysUserById(Long.parseLong(messageReceiver[i])); @@ -73,13 +74,14 @@ public class MessageLetterQueueReceiver { refUserMessage.setReceiverNameRdd(sysUser.getUserName()); refUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue()); refUserMessage.setReceiverTime(TimeTool.getNowTime(true)); + refUserMessage.setIsUrgent(msg.getIsUrgent()); sysMessageService.insertSysRefUserMessage(refUserMessage); - userMessage = sysMessageService.findSysRefUserMessageByUserIdAndStatus(sysUser.getUserInfoId(), + userMessage = sysMessageService.findSysRefUserMessageByUserIdAndStatus(sysUser.getId(), ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue()); MessageWebSocket.sendMessage(sysUser.getUserInfoId(), - JSON.toJSONString(userMessage) + mapper.writeValueAsString(userMessage) ); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/DataSimpleServiceImpl.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/DataSimpleService.java similarity index 95% rename from modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/DataSimpleServiceImpl.java rename to modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/DataSimpleService.java index 1994a30..5ec3c4a 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/DataSimpleServiceImpl.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/DataSimpleService.java @@ -13,7 +13,7 @@ import org.springframework.stereotype.Service; * @Modify: **/ @Service -public class DataSimpleServiceImpl implements IDataSimpleService { +public class DataSimpleService implements IDataSimpleService { private Logger LOGGER = LoggerFactory.getLogger(this.getClass()); /*@Autowired diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java new file mode 100644 index 0000000..f4fd2e5 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java @@ -0,0 +1,148 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysConfig; +import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; +import cn.estsh.i3plus.pojo.platform.repository.SysConfigRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysDictionaryRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysLocaleLanguageRepository; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Description : + * @Reference : + * @Author : Adair Peng + * @CreateDate : 2019-01-11 12:34 + * @Modify: + **/ +@Service +public class SystemInitService implements ISystemInitService { + + private static final Logger LOGGER = LoggerFactory.getLogger(SystemLoginService.class); + + @Autowired + private SysConfigRepository configRDao; + + @Autowired + private SysDictionaryRepository dictionaryRDao; + + @Autowired + private SysLocaleLanguageRepository localeLanguageRDao; + + @Resource(name="redisRes") + private ImppRedis redisRes; + + private int type = ImppEnumUtil.SYS_CACHE_TYPE.REDIS.getValue(); + + @Override + @ApiOperation(value = "初始化加载所有数据",notes = "初始化加载所有数据") + public void loadAll() { + type = ImppEnumUtil.SYS_CACHE_TYPE.REDIS.getValue(); + loadSysConfig(); + loadSysDictionary(); + loadSysLocaleLanguage(); + } + + @Override + @ApiOperation(value = "加载系统配置",notes = "加载系统配置") + public void loadSysConfig() { + String redisKey = null; + List list = configRDao.findAll(); + for (SysConfig config : list) { + redisKey = CommonConstWords.REDIS_PREFIX_CACHE_CONFIG + "_" + config.getConfigCode(); + + //存放于缓存 + putDataToCache(redisKey, config,SysConfig.class); + } + LOGGER.info("加载系统配置数量:【{}】",list.size()); + } + + @Override + @ApiOperation(value = "加载字典数据",notes = "加载字典数据") + public void loadSysDictionary() { + try { + List list = dictionaryRDao.findAll(); + if(list != null && list.size() > 0){ + Map> parentCodeMap = list.stream().collect(Collectors.groupingBy(SysDictionary::getParentCodeRdd)); + Map> parentIdMap = list.stream().collect(Collectors.groupingBy(SysDictionary::getParentId)); + + for (String key : parentCodeMap.keySet()) { + //存放于缓存 + putDataToCache(CommonConstWords.REDIS_PREFIX_CACHE_DICTIONARY + "_" + key, + parentCodeMap.get(key),List.class); + } + + for (long key : parentIdMap.keySet()) { + putDataToCache(CommonConstWords.REDIS_PREFIX_CACHE_DICTIONARY + "_" + key, + parentIdMap.get(key),List.class); + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + @Override + @ApiOperation(value = "加载语言数据",notes = "加载语言数据") + public void loadSysLocaleLanguage() { + // Redis 缓存 + if(type == ImppEnumUtil.SYS_CACHE_TYPE.REDIS.getValue()){ + // TODO 汪云昊 实现 + } + } + + + /** + * 缓存存放数据统一管理 + * @param key + * @param data + * @param dataType + */ + private void putDataToCache(String key,Object data,Class dataType){ + if(type == ImppEnumUtil.SYS_CACHE_TYPE.REDIS.getValue()){ + LOGGER.info(" Put Cache Redis Key:{},value:{},dataType:{}",key,data,dataType); + // Redis 缓存 + if(dataType == List.class){ + redisRes.putList(key,data,-1); + }else if(dataType == SysConfig.class){ + redisRes.putObject(key,data,-1); + }else{ + LOGGER.error("不支持树形{}存放缓存!",dataType); + } + } + } + + /** + * 从缓存获取对象数据 + * @param key + * @param dataType + * @return + */ + @Override + @ApiOperation(value = "获取缓存中的数据",notes = "获取缓存中的数据") + public Object getDataFromCache(String key,Class dataType){ + if(type == ImppEnumUtil.SYS_CACHE_TYPE.REDIS.getValue()){ + // Redis 缓存 + if(dataType == List.class){ + return redisRes.getList(key,0,-1); + }else if(dataType == SysConfig.class){ + return redisRes.getObject(key); + }else{ + LOGGER.error("不支持树形{}存放缓存!",dataType); + } + } + return null; + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/PersonnelServiceService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/PersonnelServiceService.java index 96df3fb..7237f47 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/PersonnelServiceService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/PersonnelServiceService.java @@ -1,12 +1,16 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; import cn.estsh.i3plus.core.api.iservice.busi.IPersonnelService; import cn.estsh.i3plus.core.api.iservice.busi.ISysRoleService; import cn.estsh.i3plus.core.apiservice.util.HqlModelPack; +import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; import cn.estsh.i3plus.pojo.base.tool.HqlPack; import cn.estsh.i3plus.pojo.model.platform.UserDetailModel; @@ -84,6 +88,12 @@ public class PersonnelServiceService implements IPersonnelService { @Resource(name="redisCore") protected ImppRedis redisCore; + @Resource(name="redisRes") + private ImppRedis redisRes; + + @Autowired + private ISystemInitService systemInitService; + @Override public SysUser saveSysUser(SysUser user) { LOGGER.debug("平台账号 SysUser user:{}", user); @@ -147,6 +157,16 @@ public class PersonnelServiceService implements IPersonnelService { } @Override + @ApiOperation(value = "查询账号信息") + public ListPager querySysUserPagerByUserDetailModelOrIds(UserDetailModel model,Pager pager, List ids) { + LOGGER.debug("平台用户 SysUser model:{} ids:{}", model, ids); + String modeWhere = HqlModelPack.packHqlSysUserByModelOrIds(model, ids); + + pager = PagerHelper.getPager(pager, userRDao.findByHqlWhereCount(modeWhere)); + return new ListPager(userRDao.findByHqlWherePage(modeWhere + model.orderBy(), pager), pager); + } + + @Override public SysUserInfo getSysUserInfoById(Long id) { return userInfoRDao.getById(id); } @@ -388,19 +408,52 @@ public class PersonnelServiceService implements IPersonnelService { .setErrorSolution("请先删除子集信息在操作") .build(); } - - long refPositionCount = refUserPositionRDao.findByPropertyCount("positionId",positionId); - if (refPositionCount >= 1) { +// long refPositionCount = refUserPositionRDao.findByPropertyCount("positionId",positionId); +// if (refPositionCount >= 1) { +// throw ImppExceptionBuilder.newInstance() +// .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) +// .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) +// .setErrorDetail("存在用户关系引用信息无法删除!") +// .setErrorSolution("请先删除用户关系信息再操作") +// .build(); +// } + long refUserInfoCount = userInfoRDao.findByPropertyCount("positionId",positionId); + if (refUserInfoCount >= 1) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("存在用户关系引用信息无法删除!") - .setErrorSolution("请先删除用户关系信息再操作") + .setErrorDetail("存在用户信息无法删除!") + .setErrorSolution("请先删除用户引用信息再操作") .build(); } + } + } - long refUserInfoCount = userInfoRDao.findByPropertyCount("positionId",positionId); - if (refUserInfoCount >= 1) { + @Override + public void checkSysDepartmentRef(Long departmentId) { + LOGGER.debug("平台部门 SysDepartment departmentId:{}", departmentId); + + if(departmentId != null){ + long departmentCount = departmentRDao.findByPropertyCount("parentId",departmentId); + if (departmentCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在相关部门信息无法删除!") + .setErrorSolution("请先删除子集信息在操作") + .build(); + } +// long refPositionCount = refUserPositionRDao.findByPropertyCount("positionId",positionId); +// if (refPositionCount >= 1) { +// throw ImppExceptionBuilder.newInstance() +// .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) +// .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) +// .setErrorDetail("存在用户关系引用信息无法删除!") +// .setErrorSolution("请先删除用户关系信息再操作") +// .build(); +// } + long userInfoCount = userInfoRDao.findByPropertyCount("departmentId",departmentId); + if (userInfoCount >= 1) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) @@ -408,101 +461,146 @@ public class PersonnelServiceService implements IPersonnelService { .setErrorSolution("请先删除用户引用信息再操作") .build(); } + + long userCount = userRDao.findByPropertyCount("departmentId",departmentId); + if (userCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在账号信息无法删除!") + .setErrorSolution("请先删除账号引用信息再操作") + .build(); + } } } - /************************************ 用户唯一检查 ****************************************/ + @Override + public void checkSysOrganizeRef(Long organizeId) { + LOGGER.debug("平台部门 SysOrganize organizeId:{}", organizeId); - /** - * 登录名 唯一检查 - * @param userLoginName - * @param userId - * @return - */ - private boolean checkSysUserLoginName(String userLoginName, long userId) { - int count = 0; - if(userId > 0){ - StringBuffer sw = new StringBuffer(); - HqlPack.getNumEqualPack(CommonEnumUtil.IS_VAILD.VAILD.getValue(),"isValid",sw); - HqlPack.getStringEqualPack(userLoginName,"userLoginName",sw); - HqlPack.getNumNOEqualPack(userId,"id",sw); - count = userRDao.findByHqlWhereCount(sw.toString()); + if(organizeId != null){ + long organizeCount = organizeRDao.findByPropertyCount("parentId",organizeId); + if (organizeCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在相关组织信息无法删除!") + .setErrorSolution("请先删除子集信息在操作") + .build(); + } - }else{ - count = userRDao.findByPropertyCount( - new String[]{"userLoginName","isValid"}, - new Object[]{userLoginName,CommonEnumUtil.IS_VAILD.VAILD.getValue()}); - } - return count <= 0 ; - } +// long refPositionCount = refUserPositionRDao.findByPropertyCount("positionId",positionId); +// if (refPositionCount >= 1) { +// throw ImppExceptionBuilder.newInstance() +// .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) +// .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) +// .setErrorDetail("存在用户关系引用信息无法删除!") +// .setErrorSolution("请先删除用户关系信息再操作") +// .build(); +// } + + long departmentCount = departmentRDao.findByPropertyCount("organizeId",organizeId); + if (departmentCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在部门信息无法删除!") + .setErrorSolution("请先删除部门引用信息再操作") + .build(); + } - /** - * 用户邮箱唯一检查 - * @param email - * @param infoId - * @return - */ - private boolean checkSysUserEmail(String email, long infoId) { - int count; - if(infoId > 0){ - StringBuffer sw = new StringBuffer(); - HqlPack.getNumEqualPack(CommonEnumUtil.IS_VAILD.VAILD.getValue(),"isValid",sw); - HqlPack.getStringEqualPack(email,"userEmail",sw); - HqlPack.getNumNOEqualPack(infoId,"userInfoId",sw); - count = userRDao.findByHqlWhereCount(sw.toString()); + long userInfoCount = userInfoRDao.findByPropertyCount("organizeId",organizeId); + if (userInfoCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在用户信息无法删除!") + .setErrorSolution("请先删除用户引用信息再操作") + .build(); + } - }else{ - count = userRDao.findByPropertyCount( - new String[]{"userEmail","isValid"}, - new Object[]{email,CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + long userCount = userRDao.findByPropertyCount("organizeId",organizeId); + if (userCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在账号信息无法删除!") + .setErrorSolution("请先删除账号引用信息再操作") + .build(); + } } - return count <= 0 ; } - /** - * 手机号码 唯一校验 - * @param phone - * @param infoId - * @return - */ - private boolean checkSysUserPhone(String phone, long infoId) { - int count; - if(infoId > 0){ - StringBuffer sw = new StringBuffer(); - HqlPack.getNumEqualPack(CommonEnumUtil.IS_VAILD.VAILD.getValue(),"isValid",sw); - HqlPack.getStringEqualPack(phone,"userPhone",sw); - HqlPack.getNumNOEqualPack(infoId,"userInfoId",sw); - count = userRDao.findByHqlWhereCount(sw.toString()); + @Override + public void checkSysUserPassword(String password) { + LOGGER.debug("平台用户 SysUser password:{}", password); - }else{ - count = userRDao.findByPropertyCount( - new String[]{"userPhone","isValid"}, - new Object[]{phone,CommonEnumUtil.IS_VAILD.VAILD.getValue()}); - } - return count <= 0 ; - } + if(StringUtils.isNotBlank(password)){ + // 密码长度校验 + String redisKey = CommonConstWords.REDIS_PREFIX_CACHE_CONFIG + "_" + CommonConstWords.CONFIG_PWD_LENGTH; + SysConfig config = (SysConfig) systemInitService.getDataFromCache(redisKey, SysConfig.class); - /** - * 工号唯一检查 - * @param empNo - * @param infoId - * @return - */ - private boolean checkSysUserEmpNo(String empNo, long infoId) { - int count; - if(infoId > 0){ - StringBuffer sw = new StringBuffer(); - HqlPack.getNumEqualPack(CommonEnumUtil.IS_VAILD.VAILD.getValue(),"isValid",sw); - HqlPack.getStringEqualPack(empNo,"userEmpNo",sw); - HqlPack.getNumNOEqualPack(infoId,"userInfoId",sw); - count = userRDao.findByHqlWhereCount(sw.toString()); + if(!checkPasswordLength(config,password)){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) + .setErrorDetail("密码长度不足") + .setErrorSolution("请重新输入") + .build(); + } - }else{ - count = userRDao.findByPropertyCount( - new String[]{"userEmpNo","isValid"}, - new Object[]{empNo,CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + // 密码小写校验 + redisKey = CommonConstWords.REDIS_PREFIX_CACHE_CONFIG + "_" + CommonConstWords.CONFIG_PWD_EXIST_LOWER_ENGLISH; + config = (SysConfig) systemInitService.getDataFromCache(redisKey, SysConfig.class); + + if(!checkPasswordLowerEnglish(config,password)){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) + .setErrorDetail("密码必须包含小写英文") + .setErrorSolution("请重新输入") + .build(); + } + + // 密码大写校验 + redisKey = CommonConstWords.REDIS_PREFIX_CACHE_CONFIG + "_" + CommonConstWords.CONFIG_PWD_EXIST_UPPERCASE_ENGLISH; + config = (SysConfig) systemInitService.getDataFromCache(redisKey, SysConfig.class); + + if(!checkPasswordUpperEnglish(config,password)){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) + .setErrorDetail("密码必须包含大写英文") + .setErrorSolution("请重新输入") + .build(); + } + + // 密码特殊字符 + redisKey = CommonConstWords.REDIS_PREFIX_CACHE_CONFIG + "_" + CommonConstWords.CONFIG_PWD_EXIST_SPECIAL_CHAR; + config = (SysConfig) systemInitService.getDataFromCache(redisKey, SysConfig.class); + + if(!checkPasswordSpecialChar(config,password)){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) + .setErrorDetail("密码必须包含特殊字符") + .setErrorSolution("请重新输入") + .build(); + } + + // 密码特殊字符 + redisKey = CommonConstWords.REDIS_PREFIX_CACHE_CONFIG + "_" + CommonConstWords.CONFIG_PWD_EXIST_NUMBER; + config = (SysConfig) systemInitService.getDataFromCache(redisKey, SysConfig.class); + + if(!checkPasswordNumber(config,password)){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) + .setErrorDetail("密码必须包含数字") + .setErrorSolution("请重新输入") + .build(); + } } - return count <= 0 ; } @Override @@ -958,4 +1056,211 @@ public class PersonnelServiceService implements IPersonnelService { } } } + +/*********************************** 检查方法封装 ***********************************/ + + /** + * 校验密码长度 + * @return + */ + private boolean checkPasswordLength(SysConfig config,String password){ + if(config != null){ + if(config.getConfigValue() == null || config.getConfigType().equals(ImppEnumUtil.SYS_VALUE_TYPE.NUMBER.getValue())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) + .setErrorDetail("系统配置格式错误(密码长度)") + .setErrorSolution("请先配置系统参数") + .build(); + }else { + int length = Integer.parseInt(config.getConfigValue()); + return password.trim().length() >= length; + } + } + return true; + } + + /** + * 校验密码小写 + * @param password + * @return + */ + private boolean checkPasswordLowerEnglish(SysConfig config,String password){ + if(config != null){ + if(config.getConfigValue() == null || config.getConfigType().equals(ImppEnumUtil.SYS_VALUE_TYPE.SWITCH.getValue())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) + .setErrorDetail("系统配置格式错误(密码英文小写配置)") + .setErrorSolution("请先配置系统参数") + .build(); + }else { + if(config.getConfigValue().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())){ + return StringTool.isContainLowerCase(password); + } + } + } + return true; + } + + /** + * 校验密码大写 + * @param password + * @return + */ + private boolean checkPasswordUpperEnglish(SysConfig config,String password){ + if(config != null){ + if(config.getConfigValue() == null || config.getConfigType().equals(ImppEnumUtil.SYS_VALUE_TYPE.SWITCH.getValue())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) + .setErrorDetail("系统配置格式错误(密码英文大写配置)") + .setErrorSolution("请先配置系统参数") + .build(); + }else { + if(config.getConfigValue().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())){ + return StringTool.isContainUpperCase(password); + } + } + } + return true; + } + + /** + * 校验密码大写 + * @param password + * @return + */ + private boolean checkPasswordNumber(SysConfig config,String password){ + if(config != null){ + if(config.getConfigValue() == null || config.getConfigType().equals(ImppEnumUtil.SYS_VALUE_TYPE.SWITCH.getValue())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) + .setErrorDetail("系统配置格式错误(密码数字配置)") + .setErrorSolution("请先配置系统参数") + .build(); + }else { + if(config.getConfigValue().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())){ + return StringTool.isContainNumber(password); + } + } + } + return true; + } + + /** + * 校验密码特殊字符 + * @param password + * @return + */ + private boolean checkPasswordSpecialChar(SysConfig config,String password){ + if(config != null){ + if(config.getConfigValue() == null || config.getConfigType().equals(ImppEnumUtil.SYS_VALUE_TYPE.SWITCH.getValue())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode()) + .setErrorDetail("系统配置格式错误(密码特殊字符配置)") + .setErrorSolution("请先配置系统参数") + .build(); + }else { + if(config.getConfigValue().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())){ + return StringTool.isConSpeCharacters(password); + } + } + } + return true; + } + + /** + * 登录名 唯一检查 + * @param userLoginName + * @param userId + * @return + */ + private boolean checkSysUserLoginName(String userLoginName, long userId) { + int count = 0; + if(userId > 0){ + StringBuffer sw = new StringBuffer(); + HqlPack.getNumEqualPack(CommonEnumUtil.IS_VAILD.VAILD.getValue(),"isValid",sw); + HqlPack.getStringEqualPack(userLoginName,"userLoginName",sw); + HqlPack.getNumNOEqualPack(userId,"id",sw); + count = userRDao.findByHqlWhereCount(sw.toString()); + + }else{ + count = userRDao.findByPropertyCount( + new String[]{"userLoginName","isValid"}, + new Object[]{userLoginName,CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + } + return count <= 0 ; + } + + /** + * 用户邮箱唯一检查 + * @param email + * @param infoId + * @return + */ + private boolean checkSysUserEmail(String email, long infoId) { + int count; + if(infoId > 0){ + StringBuffer sw = new StringBuffer(); + HqlPack.getNumEqualPack(CommonEnumUtil.IS_VAILD.VAILD.getValue(),"isValid",sw); + HqlPack.getStringEqualPack(email,"userEmail",sw); + HqlPack.getNumNOEqualPack(infoId,"userInfoId",sw); + count = userRDao.findByHqlWhereCount(sw.toString()); + + }else{ + count = userRDao.findByPropertyCount( + new String[]{"userEmail","isValid"}, + new Object[]{email,CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + } + return count <= 0 ; + } + + /** + * 手机号码 唯一校验 + * @param phone + * @param infoId + * @return + */ + private boolean checkSysUserPhone(String phone, long infoId) { + int count; + if(infoId > 0){ + StringBuffer sw = new StringBuffer(); + HqlPack.getNumEqualPack(CommonEnumUtil.IS_VAILD.VAILD.getValue(),"isValid",sw); + HqlPack.getStringEqualPack(phone,"userPhone",sw); + HqlPack.getNumNOEqualPack(infoId,"userInfoId",sw); + count = userRDao.findByHqlWhereCount(sw.toString()); + + }else{ + count = userRDao.findByPropertyCount( + new String[]{"userPhone","isValid"}, + new Object[]{phone,CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + } + return count <= 0 ; + } + + /** + * 工号唯一检查 + * @param empNo + * @param infoId + * @return + */ + private boolean checkSysUserEmpNo(String empNo, long infoId) { + int count; + if(infoId > 0){ + StringBuffer sw = new StringBuffer(); + HqlPack.getNumEqualPack(CommonEnumUtil.IS_VAILD.VAILD.getValue(),"isValid",sw); + HqlPack.getStringEqualPack(empNo,"userEmpNo",sw); + HqlPack.getNumNOEqualPack(infoId,"userInfoId",sw); + count = userRDao.findByHqlWhereCount(sw.toString()); + + }else{ + count = userRDao.findByPropertyCount( + new String[]{"userEmpNo","isValid"}, + new Object[]{empNo,CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + } + return count <= 0 ; + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysConfigService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysConfigService.java index 745b9cf..b33b313 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysConfigService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysConfigService.java @@ -105,4 +105,10 @@ public class SysConfigService implements ISysConfigService { SysConfigRDao.updateByProperties("configCode",value,"configValue",value); } + @Override + @ApiOperation(value = "根据系统参数组来查找系统参数") + public List findSysConfigByGroup(Integer group) { + return SysConfigRDao.findByProperty("configGroup",group); + } + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java index 5a86ac2..061a1b6 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java @@ -95,9 +95,9 @@ public class SysDepartmentService implements ISysDepartmentService { .setErrorSolution("请先删除子集信息在操作") .build(); } - - // 删除部门 - LOGGER.info("部门信息 DEPARTMENT :{}", id); + // 检查部门引用管理 + personnelService.checkSysDepartmentRef(id); + // 删除数据 departmentRDao.deleteById(id); } @@ -114,6 +114,10 @@ public class SysDepartmentService implements ISysDepartmentService { .setErrorSolution("请先删除子集信息在操作") .build(); }else { + for (Long id : ids) { + personnelService.checkSysDepartmentRef(id); + } + departmentRDao.deleteByIds(ids); } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java index ab9639b..3039946 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; @@ -153,7 +154,7 @@ public class SysDictionaryService implements ISysDictionaryService { @Override @ApiOperation(value = "检出文件名称是否符合系统规范") public boolean checkFileName(String fileName) { - List list = findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_FILE_TYPE); + List list = findSysDictionaryByParentCode(BaseConstWords.DICTIONARY_FILE_TYPE); if(list != null && list.size()> 0){ String suffix = StringTool.getStringFileSuffix(fileName,true); @@ -170,12 +171,8 @@ public class SysDictionaryService implements ISysDictionaryService { @Override @ApiOperation(value = "根据父节点 以及当前节点CODE 获取字典信息") public SysDictionary getSysDictionaryByParentCodeAndCode(String parentCode, String code) { - List list = sysDictionaryRDao.findByProperty(new String[]{"parentCodeRdd","dictionaryCode"}, + return sysDictionaryRDao.getByProperty(new String[]{"parentCodeRdd","dictionaryCode"}, new Object[]{parentCode,code}); - if(list != null && list.size() > 0){ - return list.get(0); - } - return null; } @Override @@ -188,4 +185,18 @@ public class SysDictionaryService implements ISysDictionaryService { sysDictionaryRDao.updateByProperties("id",id, "isDefault",CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); } + + @Override + @ApiOperation(value = "根据父节点 以及当前节点值 获取字典信息") + public SysDictionary getSysDictionaryByParentCodeAndValue(String parentCode, String value) { + return sysDictionaryRDao.getByProperty(new String[]{"parentCodeRdd","dictionaryValue"}, + new Object[]{parentCode,value}); + } + + @Override + @ApiOperation(value = "根据父节点 以及当前节点名称 获取字典信息") + public SysDictionary getSysDictionaryByParentCodeAndName(String parentCode, String name) { + return sysDictionaryRDao.getByProperty(new String[]{"parentCodeRdd","name"}, + new Object[]{parentCode,name}); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysFileServiceImpl.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysFileServiceImpl.java index dc8a70d..a13da7d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysFileServiceImpl.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysFileServiceImpl.java @@ -1,18 +1,28 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; +import cn.estsh.i3plus.core.apiservice.util.FileUtil; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; import cn.estsh.i3plus.pojo.platform.bean.SysFile; +import cn.estsh.i3plus.pojo.platform.repository.SysDictionaryRepository; import cn.estsh.i3plus.pojo.platform.repository.SysFileRepository; import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSClient; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSFile; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import java.io.File; import java.util.List; /** @@ -27,7 +37,13 @@ public class SysFileServiceImpl implements ISysFileService { public static final Logger LOGGER = LoggerFactory.getLogger(SysFileServiceImpl.class); @Autowired - public SysFileRepository sysFileRDao; + private SysFileRepository sysFileRDao; + + @Autowired + private SysDictionaryRepository sysDictionaryRDao; + + @Autowired + private FastDFSClient dfsClient; @Override @ApiOperation(value = "新增资源信息") @@ -83,4 +99,37 @@ public class SysFileServiceImpl implements ISysFileService { LOGGER.info("文件资源 SYS_FILE ids:{}", ids.toString()); sysFileRDao.deleteByIds(ids); } + + @Override + @ApiOperation(value = "上传文件资源",notes = "上传文件资源") + public SysFile uploadFile(Object file) throws Exception{ + FastDFSFile fastDFSFile; + // 判断参数类型 + if(file instanceof File){ + fastDFSFile = new FastDFSFile(((File)file).getName(), FileUtil.file2Byte(((File)file).getPath()), + StringTool.getStringFileSuffix(((File)file).getName(),true)); + }else{ + fastDFSFile = dfsClient.saveFile((MultipartFile) file); + } + + String[] fileAbsolutePath = dfsClient.upload(fastDFSFile); + + // 保存到系统文件表中 + String filePath = dfsClient.getHostUi() + "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1]; + SysDictionary dictionary = sysDictionaryRDao.getByProperty(new String[]{"parentCodeRdd","dictionaryValue"}, + new Object[]{BaseConstWords.DICTIONARY_FILE_TYPE, fastDFSFile.getExt()}); + + SysFile sysFile = new SysFile(); + sysFile.setDfsGroupName(fileAbsolutePath[0]); + sysFile.setDfsFileName(fileAbsolutePath[1]); + sysFile.setFileSize(fastDFSFile.getContent().length); + sysFile.setFilePath(filePath); + sysFile.setFileOriginalName(fastDFSFile.getName()); + sysFile.setFileTypeId(dictionary.getId()); + sysFile.setFileTypeName(dictionary.getName()); + sysFile.setDownloadNum(0); + sysFile.setCreateDatetime(TimeTool.getNowTime(true)); + + return insertSysFile(sysFile); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrganizeService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrganizeService.java index 958fdd7..354b4a3 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrganizeService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrganizeService.java @@ -102,6 +102,9 @@ public class SysOrganizeService implements ISysOrganizeService { .setErrorSolution("请先删除子集信息在操作") .build(); } + // 检查引用关系 + personnelService.checkSysOrganizeRef(id); + // 删除数据 organizeRDao.deleteById(id); } @@ -117,6 +120,10 @@ public class SysOrganizeService implements ISysOrganizeService { .setErrorSolution("请先删除子集信息在操作") .build(); }else { + // 检查引用关系 + for (Long id : ids) { + personnelService.checkSysOrganizeRef(id); + } organizeRDao.deleteByIds(ids); } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ExcelUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ExcelUtil.java index 532433f..fb410d1 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ExcelUtil.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ExcelUtil.java @@ -1,28 +1,38 @@ package cn.estsh.i3plus.core.apiservice.util; import cn.estsh.i3plus.core.api.iservice.busi.ISysConfigService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; +import cn.estsh.i3plus.platform.common.tool.ReflexTool; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; +import cn.estsh.i3plus.pojo.platform.bean.SysFile; +import cn.estsh.i3plus.pojo.platform.bean.SysMessage; import cn.estsh.i3plus.pojo.platform.bean.SysTool; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; import io.swagger.annotations.ApiParam; +import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.ss.usermodel.CellType; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.io.*; +import javax.persistence.EntityManager; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -39,9 +49,6 @@ import java.util.*; public class ExcelUtil { public static final Logger LOGGER = LoggerFactory.getLogger(ExcelUtil.class); - private ExcelUtil() throws IOException { - } - private static ISysConfigService sysConfigService; @Autowired @@ -49,6 +56,27 @@ public class ExcelUtil { ExcelUtil.sysConfigService = sysConfigService; } + private static EntityManager entityManager; + + @Autowired + public void setEntityManager(EntityManager entityManager) { + ExcelUtil.entityManager = entityManager; + } + + private static ISysDictionaryService sysDictionaryService; + + @Autowired + public void setSysDictionaryService(ISysDictionaryService sysDictionaryService){ + ExcelUtil.sysDictionaryService = sysDictionaryService; + } + + private static RabbitTemplate rabbitTemplate; + + @Autowired + public void setRabbitTemplate(RabbitTemplate rabbitTemplate) { + this.rabbitTemplate = rabbitTemplate; + } + /** * 导出 * @@ -56,15 +84,11 @@ public class ExcelUtil { * @param exportClass 导出数据类型 * @param exportCol 需要导出的列 */ - public static byte[] exportData(List data, Class exportClass, String[] exportCol) { - File excelFile = null; + public static File exportData(File excelFile,List data, Class exportClass, String[] exportCol) { FileOutputStream fos = null; //创建HSSFWorkbook对象(excel的文档对象) HSSFWorkbook workbook = new HSSFWorkbook(); try { - //创建临时文件 - excelFile = File.createTempFile(exportClass.getSimpleName() + new Date().getTime(), ".xls"); - LOGGER.info("临时文件所在的本地路径:" + excelFile.getCanonicalPath()); fos = new FileOutputStream(excelFile); //建立新的sheet对象(excel的表单) @@ -74,18 +98,26 @@ public class ExcelUtil { HSSFRow tableHeader = sheet.createRow(0); // 类数据 - Field[] declaredFields = exportClass.getDeclaredFields(); Field[] fields = new Field[exportCol.length]; + Field[] allFields = ReflexTool.getAllField(exportClass.getName()); + String colName; + // 获取字段中文名 优先使用 OutputColumn.name for (int i = 0; i < exportCol.length; i++) { - for (Field field : declaredFields) { - if (field.getName().equals(exportCol[i])) { - fields[i] = field; + for (int j = 0 ; j < allFields.length ; j++){ + if(exportCol[i].equals(allFields[j].getName())){ + fields[i] = allFields[j]; - if (field.isAnnotationPresent(ApiParam.class)) { - ApiParam fieldAnno = field.getAnnotation(ApiParam.class); - tableHeader.createCell(i, CellType.STRING).setCellValue(fieldAnno.value()); + colName = null; + + if (fields[i].isAnnotationPresent(AnnoOutputColumn.class)) { + colName = fields[i].getAnnotation(AnnoOutputColumn.class).name(); + } + + if (fields[i].isAnnotationPresent(ApiParam.class) && StringUtils.isBlank(colName)) { + colName = fields[i].getAnnotation(ApiParam.class).value(); } + tableHeader.createCell(i, CellType.STRING).setCellValue(colName); } } } @@ -93,26 +125,48 @@ public class ExcelUtil { //加载数据至excel对象 HSSFRow hssfRow; Method method; + AnnoOutputColumn outputColumn; + Object cellValue; + for (int i = 0; i < data.size(); i++) { hssfRow = sheet.createRow(i + 1); for (int j = 0; j < fields.length; j++) { - method = exportClass.getDeclaredMethod("get" + StringTool.toUpperCaseFirstOne(fields[j].getName())); - hssfRow.createCell(j, CellType.STRING).setCellValue( - String.valueOf(method.invoke(data.get(i))) - ); + fields[j].setAccessible(true); + cellValue = fields[j].get(data.get(i)); + + // 判断是否存在引用关系 + if (fields[j].isAnnotationPresent(AnnoOutputColumn.class)) { + outputColumn = fields[j].getAnnotation(AnnoOutputColumn.class); + + // 判断是否为枚举字段 + if (outputColumn.refClass().isEnum()) { + method = outputColumn.refClass().getDeclaredMethod( + outputColumn.refForeignKey() + "Of" + StringTool.toUpperCaseFirstOne(outputColumn.value()), + outputColumn.refClass().getDeclaredMethod("get" + + StringTool.toUpperCaseFirstOne(outputColumn.refForeignKey())).getReturnType()); + cellValue = method.invoke(data.get(i), cellValue); + }else if(outputColumn.refClass().equals(SysDictionary.class) && cellValue != null){ + cellValue = sysDictionaryService.getSysDictionaryByParentCodeAndValue(outputColumn.refForeignKey(), String.valueOf(cellValue)).getName(); + } else if(!outputColumn.refClass().equals(Object.class) && !outputColumn.refClass().equals(SysDictionary.class)){ + cellValue = selectByProperty(outputColumn.refClass(), outputColumn.value(), outputColumn.refForeignKey(), cellValue); + } + } + + // excel 文本框最大长度 + if(String.valueOf(cellValue).length() > 30000){ + hssfRow.createCell(j, CellType.STRING).setCellValue(String.valueOf(cellValue).substring(0,30000)); + }else{ + hssfRow.createCell(j, CellType.STRING).setCellValue(String.valueOf(cellValue)); + } + } } workbook.write(fos); fos.flush(); - return file2Byte(excelFile); - } catch (NoSuchMethodException e) { - LOGGER.error("属性get方法不存在!", e); - } catch (IllegalAccessException e) { - LOGGER.error("Excel 导出异常!", e); - } catch (InvocationTargetException e) { - LOGGER.error("Excel 导出异常!", e); - } catch (IOException e) { + return excelFile; + } catch (Exception e) { + e.printStackTrace(); throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.IO_EXCEPTION_FILE.getCode()) @@ -121,13 +175,11 @@ public class ExcelUtil { } finally { try { workbook.close(); - fos.close(); - excelFile.deleteOnExit(); + fos.close();; } catch (IOException e) { LOGGER.error("IOException!", e); } } - return null; } /** @@ -172,11 +224,12 @@ public class ExcelUtil { // excel列名与字段名映射 Map colName = new HashMap<>(); - ApiParam fieldAnno; - for (Field field : importClass.getDeclaredFields()) { - if (field.isAnnotationPresent(ApiParam.class)) { - fieldAnno = field.getAnnotation(ApiParam.class); - colName.put(fieldAnno.value(), field); + for (Field field : ReflexTool.getAllField(importClass.getName())) { + if (field.isAnnotationPresent(AnnoOutputColumn.class) + && !StringUtils.isBlank(field.getAnnotation(AnnoOutputColumn.class).name())) { + colName.put(field.getAnnotation(AnnoOutputColumn.class).name(), field); + } else if (field.isAnnotationPresent(ApiParam.class)) { + colName.put(field.getAnnotation(ApiParam.class).value(), field); } } @@ -191,61 +244,42 @@ public class ExcelUtil { Row row; Object obj; Object cellValue = null; + AnnoOutputColumn inputColumn; + Method method; + for (int i = 1; i <= sheet.getLastRowNum(); i++) { row = sheet.getRow(i); obj = importClass.newInstance(); for (int j = 0; j < fields.length; j++) { - row.getCell(j).setCellType(CellType.STRING); - if("".equals(row.getCell(j).getStringCellValue())){ - cellValue = null; - }else if (fields[j].getType() == String.class) { + // 判断是否存在引用关系 + if (fields[j].isAnnotationPresent(AnnoOutputColumn.class)) { + inputColumn = fields[j].getAnnotation(AnnoOutputColumn.class); cellValue = row.getCell(j).getStringCellValue(); - } else if (fields[j].getType() == Integer.class) { - cellValue = Integer.parseInt(row.getCell(j).getStringCellValue()); - } else if (fields[j].getType() == Long.class) { - cellValue = Long.parseLong(row.getCell(j).getStringCellValue()); + + // 判断是否为枚举字段 + if (inputColumn.refClass().isEnum()) { + method = inputColumn.refClass().getDeclaredMethod( + inputColumn.value() + "Of" + StringTool.toUpperCaseFirstOne(inputColumn.refForeignKey()), + inputColumn.refClass().getDeclaredMethod("get" + + StringTool.toUpperCaseFirstOne(inputColumn.value())).getReturnType()); + cellValue = method.invoke(null,cellValue); + }else if(inputColumn.refClass().equals(SysDictionary.class) && cellValue != null){ + cellValue = sysDictionaryService.getSysDictionaryByParentCodeAndName(inputColumn.refForeignKey(), String.valueOf(cellValue)).getName(); + } else if(!inputColumn.refClass().equals(Object.class) && !inputColumn.refClass().equals(SysDictionary.class)){ + cellValue = selectByProperty(inputColumn.refClass(), inputColumn.refForeignKey(), inputColumn.value(), cellValue); + } + }else{ + cellValue = getExcelCell(row.getCell(j),fields[j].getType()); } - importClass.getDeclaredMethod("set" + StringTool.toUpperCaseFirstOne(fields[j].getName()), fields[j].getType()) - .invoke(obj, cellValue); + fields[j].setAccessible(true); + fields[j].set(obj,cellValue); } dataList.add(obj); } - } catch (IOException e) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) - .setErrorDetail("IO输入输出异常") - .build(); - } catch (IllegalAccessException e) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.REFLEX_EXCEPTION.getCode()) - .setErrorDetail("无法访问导入类") - .setErrorSolution("请检查导入类访问修饰符") - .build(); - } catch (InstantiationException e) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.REFLEX_EXCEPTION.getCode()) - .setErrorDetail("无法实例化导入类") - .setErrorSolution("请检查导入类是拥有无参构造方法") - .build(); - } catch (InvocationTargetException e) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.REFLEX_EXCEPTION.getCode()) - .setErrorDetail("属性set方法实现错误") - .setErrorSolution("请检查属性set方法参数类型是否正确") - .build(); - } catch (NoSuchMethodException e) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.REFLEX_EXCEPTION.getCode()) - .setErrorDetail("没有找到属性set方法") - .setErrorSolution("请检查属性set方法是否存在") - .build(); + } catch (Exception e){ + e.printStackTrace(); } return dataList; } @@ -272,27 +306,35 @@ public class ExcelUtil { // 创建表头 HSSFRow tableHeader = sheet.createRow(0); - HSSFRow tableData = sheet.createRow(1); // 类数据 - Field[] declaredFields = exportClass.getDeclaredFields(); - ApiParam fieldAnno; + Field[] fields = ReflexTool.getAllField(exportClass.getName()); int col = 0; - for (int i = 0; i < declaredFields.length; i++) { - if (declaredFields[i].isAnnotationPresent(ApiParam.class)) { - fieldAnno = declaredFields[i].getAnnotation(ApiParam.class); - if (!fieldAnno.hidden()) { - tableHeader.createCell(col, CellType.STRING).setCellValue(fieldAnno.value()); + for (int i = 0; i < fields.length; i++) { + if (fields[i].isAnnotationPresent(AnnoOutputColumn.class)) { + // 是否隐藏列 + if(!fields[i].getAnnotation(AnnoOutputColumn.class).hidden()){ + if (fields[i].isAnnotationPresent(AnnoOutputColumn.class)) { + tableHeader.createCell(col, CellType.STRING).setCellValue(fields[i].getAnnotation(AnnoOutputColumn.class).name()); + } - tableData.createCell(col, CellType.STRING).setCellValue(fieldAnno.example()); + // 优先使用 AnnoOutputColumn.name() + if (fields[i].isAnnotationPresent(ApiParam.class) && StringUtils.isBlank(fields[i].getAnnotation(AnnoOutputColumn.class).name())) { + tableHeader.createCell(col, CellType.STRING).setCellValue(fields[i].getAnnotation(ApiParam.class).value()); + } + col++; + } + } else { + if (fields[i].isAnnotationPresent(ApiParam.class)) { + tableHeader.createCell(col, CellType.STRING).setCellValue(fields[i].getAnnotation(ApiParam.class).value()); col++; } } } workbook.write(fos); - return file2Byte(excelFile); + return FileUtil.file2Byte(excelFile.getPath()); } catch (IOException e) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) @@ -312,67 +354,97 @@ public class ExcelUtil { /** * 获取实体列集合 - * * @param pojoClass * @return */ public static Map getColName(Class pojoClass) { Map colName = new LinkedHashMap(); - Field[] field = pojoClass.getDeclaredFields(); - ApiParam fieldAnno; - - for (int i = 0; i < field.length; i++) { - if (field[i].isAnnotationPresent(ApiParam.class)) { - fieldAnno = field[i].getAnnotation(ApiParam.class); - if (!fieldAnno.hidden()) { - colName.put(field[i].getAnnotation(ApiParam.class).value(), field[i].getName()); + Field[] fields = ReflexTool.getAllField(pojoClass.getName()); + + for (int i = 0; i < fields.length; i++) { + if (fields[i].isAnnotationPresent(ApiParam.class)) { + colName.put(fields[i].getName(),fields[i].getAnnotation(ApiParam.class).value()); + } + + if (fields[i].isAnnotationPresent(AnnoOutputColumn.class)) { + // 判断是否隐藏 + if(fields[i].getAnnotation(AnnoOutputColumn.class).hidden()){ + colName.remove(fields[i].getName()); + } + // 如果AnnoOutputColumn存在name属性则优先使用 + if(!StringUtils.isBlank(fields[i].getAnnotation(AnnoOutputColumn.class).name())){ + colName.put(fields[i].getName(),fields[i].getAnnotation(AnnoOutputColumn.class).name()); } } } - return colName; } - public static void main(String[] args) { - List sysTools = new ArrayList<>(); - SysTool sysTool = new SysTool(); - for (int i = 0; i < 14; i++) { - sysTool.setName("ddd"); - sysTools.add(sysTool); - } - String[] colName = new String[]{"name", "toolTypeNameRdd", "toolStatus", "toolIp", "toolPort", "toolConnType", "toolDataType", "toolOperating", "toolDescription"}; - try { - FileOutputStream ds = new FileOutputStream("E://testOut.xls"); - ds.write(ExcelUtil.exportData(sysTools, SysTool.class, colName)); - ds.flush(); - ds.close(); -// ExcelUtil.importData("testOut.xls", new FileInputStream("E://testOut.xls"), SysTool.class); -// ExcelUtil.importTemplate(new FileOutputStream("E://testOut.xls"), SysTool.class, colName); + /** + * 查询外键信息 + * @param persistentClass + * @param colName + * @param propertyName + * @param value + * @return + */ + public static Object selectByProperty(Class persistentClass, String colName, String propertyName, Object value) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + String queryString = "select model." + colName + " from " + persistentClass.getSimpleName() + + " as model where model." + propertyName + "= :" + propertyName; + return entityManager.createQuery(queryString).setParameter(propertyName, value).getSingleResult(); + } - } catch (IOException e) { - e.printStackTrace(); + /** + * 获取excel单元格值 + * @param cell + * @param cellClass + * @return + */ + private static Object getExcelCell(Cell cell, Class cellClass) { + if (cell != null) { + cell.setCellType(CellType.STRING); + + if ("".equals(cell.getStringCellValue()) || "null".equals(cell.getStringCellValue())) { + return null; + } else if (cellClass == String.class) { + return cell.getStringCellValue(); + } else if (cellClass == Integer.class) { + return Integer.parseInt(cell.getStringCellValue()); + } else if (cellClass == Long.class) { + return Long.parseLong(cell.getStringCellValue()); + } else if (cellClass == Double.class) { + return Long.parseLong(cell.getStringCellValue()); + } } + return null; } - - public static byte[] file2Byte(File file) { - byte[] buffer = null; - try { - FileInputStream fis = new FileInputStream(file); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - byte[] b = new byte[1024]; - int n; - while ((n = fis.read(b)) != -1) { - bos.write(b, 0, n); - } - fis.close(); - bos.close(); - buffer = bos.toByteArray(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); + /** + * 发送包含文件列表的站内信 + * @param fileList + * @param userId + */ + public static void sendStationLetter(List fileList, Long userId){ + StringBuffer letter = new StringBuffer(); + letter.append("导出文件列表:"); + for (SysFile sysFile:fileList) { + letter.append(""); + letter.append(sysFile.getFileOriginalName()); + letter.append(""); } - return buffer; + + // 消息提示 + SysMessage sysMessage = new SysMessage(); + sysMessage.setMessageSenderNameRdd(CommonEnumUtil.SOFT_TYPE.CORE.getDescription()); + sysMessage.setMessageTitle("数据导出"); + sysMessage.setMessageContent(letter.toString()); + sysMessage.setMessageType(ImppEnumUtil.MESSAGE_TYPE.LETTER.getValue()); + sysMessage.setMessageContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getValue()); + sysMessage.setMessageSendTime(TimeTool.getNowTime(true)); + sysMessage.setIsSystem(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + sysMessage.setMessageReceiversId(String.valueOf(userId)); + + rabbitTemplate.convertAndSend(PlatformConstWords.IMPP_MESSAGE_LETTER_QUEUE,sysMessage); } + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/FileUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/FileUtil.java new file mode 100644 index 0000000..4735e14 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/FileUtil.java @@ -0,0 +1,106 @@ +package cn.estsh.i3plus.core.apiservice.util; + +import java.io.*; + +/** + * @Description : 文件工具类 + * @Reference : + * @Author : yunhao + * @CreateDate : 2019-01-11 13:34 + * @Modify: + **/ +public class FileUtil { + + /** + * 对临时生成的文件夹和文件夹下的文件进行删除 + */ + public static void deletefile(String delpath) { + try { + File file = new File(delpath); + if (!file.isDirectory()) { + file.delete(); + } else if (file.isDirectory()) { + String[] filelist = file.list(); + for (int i = 0; i < filelist.length; i++) { + File delfile = new File(delpath + File.separator + filelist[i]); + if (!delfile.isDirectory()) { + delfile.delete(); + } else if (delfile.isDirectory()) { + deletefile(delpath + File.separator + filelist[i]); + } + } + file.delete(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * File 转 byte[] + * + * @param filePath + * @return + */ + public static byte[] file2Byte(String filePath){ + byte[] buffer = null; + try { + File file = new File(filePath); + FileInputStream fis = new FileInputStream(file); + ByteArrayOutputStream bos = new ByteArrayOutputStream(1000); + byte[] b = new byte[1000]; + int n; + while ((n = fis.read(b)) != -1) { + bos.write(b, 0, n); + } + fis.close(); + bos.close(); + buffer = bos.toByteArray(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return buffer; + } + + + /** + * byte[] 转 File + * @param buf + * @param filePath + * @param fileName + */ + public static void byte2File(byte[] buf, String filePath, String fileName) { + BufferedOutputStream bos = null; + FileOutputStream fos = null; + File file = null; + try { + File dir = new File(filePath); + if (!dir.exists() && dir.isDirectory()) { + dir.mkdirs(); + } + file = new File(filePath + File.separator + fileName); + fos = new FileOutputStream(file); + bos = new BufferedOutputStream(fos); + bos.write(buf); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (bos != null) { + try { + bos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (fos != null) { + try { + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/HqlModelPack.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/HqlModelPack.java index 6995928..5c93ccb 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/HqlModelPack.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/HqlModelPack.java @@ -27,6 +27,8 @@ public class HqlModelPack { // And HqlPack.getNumEqualPack(model.getUserStatus(),"userStatus",result); + HqlPack.getNumEqualPack(model.getUserPhone(),"userPhone",result); + if(idList != null && idList.size() > 0){ HqlPack.getInPack(StringUtils.join(idList, ","), "id", result); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ZipUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ZipUtil.java new file mode 100644 index 0000000..5079e0e --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ZipUtil.java @@ -0,0 +1,181 @@ +package cn.estsh.i3plus.core.apiservice.util; + +import cn.estsh.i3plus.pojo.platform.bean.SysUserInfo; +import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipFile; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.Enumeration; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * @Description : + * 压缩或解压zip:由于直接使用java.util.zip工具包下的类,会出现中文乱码问题, + * 所以使用ant.jar中的org.apache.tools.zip下的工具类 + * @Reference : + * @Author : yunhao + * @CreateDate : 2019-01-11 10:16 + * @Modify: + **/ +public class ZipUtil { + + public static final Logger LOGGER = LoggerFactory.getLogger(ZipUtil.class); + + private static byte[] _byte = new byte[1024]; + + /** + * 压缩文件或路径 + * + * @param zip 压缩的目的地址 + * @param srcFiles 压缩的源文件 + */ + public static File zipFile(String zip, List srcFiles) { + try { + // zip == null 则创建临时文件 + if(StringUtils.isBlank(zip)){ + zip = File.createTempFile("zip" + new Date().getTime(), ".zip").getPath(); + } + File zipFile = new File(zip); + if (zip.endsWith(".zip") || zip.endsWith(".ZIP")) { + ZipOutputStream _zipOut = new ZipOutputStream(new FileOutputStream(zipFile)); + for (File _f : srcFiles) { + handlerFile(zip, _zipOut, _f, ""); + } + _zipOut.close(); + } else { + LOGGER.error("target file[" + zip + "] is not .zip type file"); + } + return zipFile; + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 压缩文件或路径 + * + * @param zip 压缩的目的地址 + * @param srcFiles 压缩的源文件 + */ + public static File zipFile(String zip, File srcFiles) { + try { + File zipFile = null; + // zip == null 则创建临时文件 + if(StringUtils.isBlank(zip)){ + zipFile = new File(System.getProperty("java.io.tmpdir") + File.separator + SysUserInfo.class.getSimpleName()+ ".zip"); + zipFile.createNewFile(); + zip = zipFile.getPath(); + } + if (zip.endsWith(".zip") || zip.endsWith(".ZIP")) { + zipFile = new File(zip); + ZipOutputStream _zipOut = new ZipOutputStream(new FileOutputStream(zipFile)); + handlerFile(zip, _zipOut, srcFiles, ""); + _zipOut.close(); + } else { + LOGGER.error("target file[" + zip + "] is not .zip type file"); + } + return zipFile; + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + /** + * @param zip 压缩的目的地址 + * @param zipOut + * @param srcFile 被压缩的文件信息 + * @param path 在zip中的相对路径 + * @throws IOException + */ + private static void handlerFile(String zip, ZipOutputStream zipOut, File srcFile, String path) throws IOException { + LOGGER.debug(" begin to compression file[" + srcFile.getName() + "]"); + if (!"".equals(path) && !path.endsWith(File.separator)) { + path += File.separator; + } + if (!srcFile.getPath().equals(zip)) { + // 判断是否为文件目录如果为文件目录则打包目录下所有文件 + if (srcFile.isDirectory()) { + File[] _files = srcFile.listFiles(); + if (_files.length == 0) { + zipOut.putNextEntry(new ZipEntry(path + srcFile.getName() + File.separator)); + zipOut.closeEntry(); + } else { + for (File _f : _files) { + handlerFile(zip, zipOut, _f, path + srcFile.getName()); + } + } + } else { + InputStream _in = new FileInputStream(srcFile); + zipOut.putNextEntry(new ZipEntry(path + srcFile.getName())); + int len = 0; + while ((len = _in.read(_byte)) > 0) { + zipOut.write(_byte, 0, len); + } + _in.close(); + zipOut.closeEntry(); + } + } + } + + /** + * 解压缩ZIP文件,将ZIP文件里的内容解压到targetDIR目录下 + * + * @param zipPath 待解压缩的ZIP文件路径 + * @param descDir 目标目录 + */ + public static List upzipFile(String zipPath, String descDir) { + return upzipFile(new File(zipPath), descDir); + } + + /** + * 对.zip文件进行解压缩 + * + * @param zipFile 解压缩文件 + * @param descDir 压缩的目标地址,如:D:\\测试 或 /mnt/d/测试 + * @return + */ + @SuppressWarnings("rawtypes") + public static List upzipFile(File zipFile, String descDir) { + List _list = new ArrayList<>(); + try { + ZipFile _zipFile = new ZipFile(zipFile); + for (Enumeration entries = _zipFile.getEntries(); entries.hasMoreElements(); ) { + ZipEntry entry = (ZipEntry) entries.nextElement(); + File _file = new File(descDir + File.separator + entry.getName()); + if (entry.isDirectory()) { + _file.mkdirs(); + } else { + File _parent = _file.getParentFile(); + if (!_parent.exists()) { + _parent.mkdirs(); + } + InputStream _in = _zipFile.getInputStream((ZipArchiveEntry) entry); + OutputStream _out = new FileOutputStream(_file); + int len; + while ((len = _in.read(_byte)) > 0) { + _out.write(_byte, 0, len); + } + _in.close(); + _out.flush(); + _out.close(); + _list.add(_file); + } + } + } catch (IOException e) { + } + return _list; + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/MessageWebSocket.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/MessageWebSocket.java index 77ff2a2..7ffdbe8 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/MessageWebSocket.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/MessageWebSocket.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentMap; * @CreateDate : 2018-11-24 16:57 * @Modify: **/ -@ServerEndpoint(value= PlatformConstWords.BASE_URL + "/message-websocket/{userId}") +@ServerEndpoint(value= PlatformConstWords.WEBSOCKET_URL + "/message-websocket/{userId}") @Component public class MessageWebSocket { @@ -84,9 +84,13 @@ public class MessageWebSocket { public static void sendMessage(Long userId, String message){ try { MessageWebSocket websocket = webSocketSet.get(userId); - if (websocket != null){ - websocket.session.getBasicRemote().sendText(message + "=" + sendCount); - sendCount++; + if(websocket != null) { + if (message.equals("heartBit")) { + websocket.session.getBasicRemote().sendText(message + "=" + sendCount); + sendCount++; + } else { + websocket.session.getBasicRemote().sendText(message); + } } } catch (IOException e) { e.printStackTrace(); diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties index ce37a0f..b21c055 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties @@ -63,14 +63,14 @@ eureka.instance.lease-renewal-interval-in-seconds=20 #打开feign的熔断 feign.hystrix.enabled=true -#读取数据时长 -ribbon.ReadTimeout=3000 -#连接时长 -ribbon.ConnectTimeout=3000 #重试 ribbon.maxAutoRetries=2 +#读取数据时长 +ribbon.ReadTimeout=30000 +#连接时长 +ribbon.ConnectTimeout=30000 #响应超过时长,进行熔断(熔断超时需要大于读取时长及连接时长) -hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000 +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=35000 #集群名 eureka.instance.metadata-map.cluster=impp_cluster diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-prod.properties b/modules/i3plus-core-apiservice/src/main/resources/application-prod.properties index 07fc220..4b3bc09 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-prod.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-prod.properties @@ -58,14 +58,14 @@ eureka.instance.lease-renewal-interval-in-seconds=20 #打开feign的熔断 feign.hystrix.enabled=true -#读取数据时长 -ribbon.ReadTimeout=3000 -#连接时长 -ribbon.ConnectTimeout=3000 #重试 ribbon.maxAutoRetries=2 +#读取数据时长 +ribbon.ReadTimeout=30000 +#连接时长 +ribbon.ConnectTimeout=30000 #响应超过时长,进行熔断(熔断超时需要大于读取时长及连接时长) -hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000 +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=35000 #集群名 eureka.instance.metadata-map.cluster=impp_cluster diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-test.properties b/modules/i3plus-core-apiservice/src/main/resources/application-test.properties index 3da4b58..97ede48 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-test.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-test.properties @@ -63,14 +63,14 @@ eureka.instance.lease-renewal-interval-in-seconds=20 #打开feign的熔断 feign.hystrix.enabled=true -#读取数据时长 -ribbon.ReadTimeout=3000 -#连接时长 -ribbon.ConnectTimeout=3000 #重试 ribbon.maxAutoRetries=2 +#读取数据时长 +ribbon.ReadTimeout=30000 +#连接时长 +ribbon.ConnectTimeout=30000 #响应超过时长,进行熔断(熔断超时需要大于读取时长及连接时长) -hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000 +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=35000 #集群名 eureka.instance.metadata-map.cluster=impp_cluster diff --git a/modules/i3plus-core-apiservice/src/main/resources/init/sys-config.xlsx b/modules/i3plus-core-apiservice/src/main/resources/init/sys-config.xlsx index 94b8479..db2137d 100644 Binary files a/modules/i3plus-core-apiservice/src/main/resources/init/sys-config.xlsx and b/modules/i3plus-core-apiservice/src/main/resources/init/sys-config.xlsx differ