后端通用方法 ## 1.获取登录用户权限字段 ```bash //获取带逗号的权限字符 String res = SecurityUtils.getPermissionCharSea(); 例如: ,1, //获取不带逗号的权限 String ress = SecurityUtils.getPermissionCharIns(); 例如: 1 ``` ## 2.用户数据权限查询视图 ```bash 使用方法 SELECT p.premession_char FROM (SELECT @premessionStr:=',1,' p) param , getpremessionview p 2024修改,个人权限可以选择多个 使用新方法 getpremessionview_chars, 传参处需修改, 权限字符以 A,B,C 的形式传入 SELECT p.premession_char FROM (SELECT @premessionStr:='120,119' p) param , getpremessionview_chars p 其中,1,为登录用户的权限字符串,直接获取传入。 在查询用户数据列表时 select s.* from XXX s (数据源表) inner join ( SELECT p.premession_char FROM (SELECT @premessionStr:=',1,' p) param , getpremessionview p ) permission on permission.premession_char = s.premession_char (关联用户权限表。只查询出带有权限的数据列) where ......... ``` ## 3.区域代理商采番 ```bash 使用commonService下的getCommonID commonService.getCommonID("seq_area_agent") 传人参数为固定值 seq_area_agent ``` ## 5.时区转换 ```bash 获取当前登录用户时区 String ss = SecurityUtils.getTimeZone(); 此方法为 时间字符串 获取 UTC时间字符串 的方法 参数:time 为当地时间 ; Asia/Shanghai为当前时区 String UTC_Time = DateUtils.UTCTimeStr(Object time,"Asia/Shanghai"); 方法优化现拆分为两个方法,传入time参数可输入日期或string,返回类型根据需要调用不同方法 UTCTimeStr(Object time,"Asia/Shanghai") 返回string UTCTimeDate(Object time,"Asia/Shanghai") 返回Date 此方法为 UTC时间字符串 转 当地时间字符串 的方法 参数:time 为UTC时间 ; Asia/Shanghai为要转换的时区 String LOCAL_Time = DateUtils.LocalTime(Object time,"Asia/Shanghai"); ``` ## 6.消息推送 ```bash 在需要推送消息时 需调用 sseEmitterService.sendSaveMessage(ids,message);方法 例如: List ids = new ArrayList<>(); ids.add(1L); Message message = new Message(); message.setMessageContent("测试推送消息"); sseEmitterService.sendSaveMessage(ids,message); 其中 ids为需要发送的人员id, message为消息实体,具体内容按需填充。其中消息内容和消息类型需设置。 ``` ## 7.业务流水采番 ```bash String No = RedisCache.generateSerialNumber(业务前缀) ``` ## 8.导入excel ```bash 导入主要修改文件 ExcelRestController / TableTypeEnum 1.首先修改TableTypeEnum枚举类,新增你需要的导入文件类型 2.在/resources/excelTemplate,放入模板文件,注意名称要和枚举类/前端传入文件名相同 3.修改ExcelRestController-downloadTemplate方法,将枚举类填入switch中,此方法为下载模板方法 4.新增导入实体类,参考 CustomerInfoHelper 。其中导入文件字段顺序需和实体中index保持一致。 其余详细配置项参考官方文档 5..修改ExcelRestController-check方法,将验证导入数据是否正确的方法写在checkSheets()方法中。 此方法在运行时会调用传入的验证方法。 6..修改ExcelRestController-saveBatch方法,此方法为保存数据方法。增加新的类型并填入保存方法完成保存。 详细代码及实例见ExcelRestController ``` ## 9. 后台推送站内信或微信等 ```bash ①根据i18n中的msg,分别获取多种语言的msg内容。 例: MessageSource messageSource = SpringUtils.getBean(MessageSource.class); String messageContent = messageSource.getMessage("message.reminderNotFollowingProject", args, new Locale("zh","CN")); String messageContentUS = messageSource.getMessage("message.reminderNotFollowingProject", args,new Locale("en","US")); String messageContentRU = messageSource.getMessage("message.reminderNotFollowingProject", args,new Locale("ru","RU")); String messageContentES = messageSource.getMessage("message.reminderNotFollowingProject", args,new Locale("es","ES")); ②MessageType用字典中的value设定,便于前端国际化。 例: message.setMessageType(MessageTypeEnum.PROJECT_UN_FOLLOW.getValue()); <-- 项目跟踪提醒 ③定时任务的场合,创建人必须设定。 message.setCreateBy("1"); <-- 项目创建人设为admin ``` ## 10.业务排他校验 ```bash 在更新接口处加入如下注解 @DataUpdateCheck 例:@PutMapping @DataUpdateCheck(key = "id", tableName ="tp_elevator_model") public AjaxResult edit(@RequestBody TpElevatorModel tpElevatorModel) { return toAjax(tpElevatorModelService.updateTpElevatorModel(tpElevatorModel)); } 其中key 为数据表主键字段 tableName 为修改表名 注意 1.该注解只针对传入实体对应的表,key字段在传入实体中必须要存在,且字段名一致。 2.还需传入updateTime字段,作为判断依据 ``` ## 11.处理查询时的一些特殊字符转义 可以使用``com.ruoyi.common.utils.SpecialCharacterEscaper.escapeSpecialCharacters(R r, SFunction... consumers) ``方法 第一个参数是要处理的参数对象, 第二个参数是可变参数,需要处理的字段, 取对应字段的get方法引用即可。 使用方法如下: ```bash public List selectTcLeadList(LeadListReq tcLead) { SpecialCharacterEscaper.escapeSpecialCharacters(tcLead, LeadListReq::getLeadNo, LeadListReq::getAccountNo, LeadListReq::getCompany, LeadListReq::getOwnerName, LeadListReq::getContact, LeadListReq::getRequirement, LeadListReq::getAddress, LeadListReq::getCreateByName); return tcLeadMapper.selectTcLeadList(tcLead); } ``` ## 12.代理商销售之间数据隔离 ```bash 修改点有2个 1. impl 参数中追加 loginUserId(该项目在BaseEnatity里已追加) Long loginUserId = SecurityUtils.getUserId(); // 代理商销售经理的场合 if(SecurityUtils.hasRole("agent_sales")){ tcFollow.setLoginUserId(loginUserId); } 2. Mapper.xml里追加检索条件 and (sub1.permission_char <> #{permissionChar} or sub1.create_by = #{loginUserId}) ```