钱惠东 e904b68c08 bug修改 5 days ago
..
bin cdba2e0898 init 一期 3 months ago
doc cdba2e0898 init 一期 3 months ago
sql cdba2e0898 init 一期 3 months ago
src e904b68c08 bug修改 5 days ago
.gitignore df1eed7e02 bug修改 1 month ago
LICENSE cdba2e0898 init 一期 3 months ago
README.md e5f4ef7a91 补充提交 2 months ago
pom.xml f623838c0c bug修改 1 week ago
ry.bat cdba2e0898 init 一期 3 months ago
ry.sh cdba2e0898 init 一期 3 months ago

README.md

后端通用方法

1.获取登录用户权限字段

//获取带逗号的权限字符
String res = SecurityUtils.getPermissionCharSea();
例如: ,1,
//获取不带逗号的权限
String ress = SecurityUtils.getPermissionCharIns();
例如: 1

2.用户数据权限查询视图

使用方法
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.区域代理商采番

使用commonService下的getCommonID
commonService.getCommonID("seq_area_agent")
传人参数为固定值 seq_area_agent

5.时区转换

获取当前登录用户时区
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.消息推送

在需要推送消息时
需调用 sseEmitterService.sendSaveMessage(ids,message);方法

例如:
  List<Long> ids = new ArrayList<>();
        ids.add(1L);
        Message message = new Message();
        message.setMessageContent("测试推送消息");
        sseEmitterService.sendSaveMessage(ids,message);
其中 ids为需要发送的人员id,
message为消息实体,具体内容按需填充。其中消息内容和消息类型需设置。

7.业务流水采番

String No = RedisCache.generateSerialNumber(业务前缀)

8.导入excel

导入主要修改文件 ExcelRestController / TableTypeEnum
1.首先修改TableTypeEnum枚举类,新增你需要的导入文件类型
2.在/resources/excelTemplate,放入模板文件,注意名称要和枚举类/前端传入文件名相同
3.修改ExcelRestController-downloadTemplate方法,将枚举类填入switch中,此方法为下载模板方法
4.新增导入实体类,参考 CustomerInfoHelper 。其中导入文件字段顺序需和实体中index保持一致。
其余详细配置项参考官方文档
5..修改ExcelRestController-check方法,将验证导入数据是否正确的方法写在checkSheets()方法中。
此方法在运行时会调用传入的验证方法。
6..修改ExcelRestController-saveBatch方法,此方法为保存数据方法。增加新的类型并填入保存方法完成保存。

详细代码及实例见ExcelRestController

9. 后台推送站内信或微信等

①根据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.业务排他校验

在更新接口处加入如下注解 @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<R, Object>... consumers)方法 第一个参数是要处理的参数对象, 第二个参数是可变参数,需要处理的字段, 取对应字段的get方法引用即可。

使用方法如下:

public List<TcLead> 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.代理商销售之间数据隔离

修改点有2个
1. impl 参数中追加 loginUserId(该项目在BaseEnatity里已追加)
        Long loginUserId = SecurityUtils.getUserId();
        // 代理商销售经理的场合
        if(SecurityUtils.hasRole("agent_sales")){
            tcFollow.setLoginUserId(loginUserId);
        }
2. Mapper.xml里追加检索条件
        <where>
            <if test="loginUserId != null  and loginUserId != ''">
                and (sub1.permission_char &lt;&gt; #{permissionChar} or sub1.create_by = #{loginUserId})
            </if>

13.聊天室配置项

1. 如果以后涉及 服务器ip、nginx代理接口发生变化,需要变更yml中的(fileConfig.file-prefix)配置(一定要变更,否则聊天室图片功能将不能正常使用)
这个配置:
    (1): 前端访问的controller层接口 前的请求路径,端口后不跟“/”,
        例如 
          本地:“http://localhost:8080”
          高达测试环境:“http://139.196.75.129:8852”
    (2):上下文(/prod-api)已经在上传接口中处理,如果后期不需要上下文,则在 CommonController
        下的 /upload 接口中,去掉上下文拼接
2.nginx.conf文件限制了 文件上传的大小,
    (1)仅前端或者后端checkAllow单方面调整限制无效,需要同步至nginx.conf,
                  目前配置限制了5m,,如果后续要变更,需要同步ngxin配置;           
                  client_max_body_size 5m; 加在 http级别下