完善接口:输出值班医生的电话,查询小程序的密钥

发布时间 2023-05-05 10:36:39作者: 葬爱_坤疤

接口的开发:

输出值班医生的电话

我发现我之前创建的管理员的表是多余的,我可以直接借用若依自带的表来做。其中还有这角色,正好符合添加值班医生,而且后台管理的前端页面是有着功能的,这样更为方便,也可以添加值班医生的信息,我将自带的实体类导入到项目代码的指定的位置。根据角色和管理员的关联表,从中读取是值班医生的id,根据值班医生的id,去管理员表中找指定值班医生们,将其的个数反馈出来。然后随机一个医生来输出电话。

@Autowired
private IUserRoleService iSysUserRoleService;

@Autowired
private IUserService iSysUserService;
/**
* 查询值班医生的电话
* @return
*/
@Override
public String AdminPhonenumber() {
   //查询正在值班的医生
   LambdaQueryWrapper<UserRole> lambdaQueryWrapper = new LambdaQueryWrapper<>();
   lambdaQueryWrapper.eq(UserRole::getRoleId,3);
   //查询出多个值班医生
   List<UserRole> list = iSysUserRoleService.list(lambdaQueryWrapper);
   //有几个值班医生
   int size = list.size();
   //随机取一个值班医生的
   Random random = new Random();
   int i = random.nextInt(size);

   UserRole sysUserRole = list.get(i);
   Long userId = sysUserRole.getUserId();
   //到系统用户表中找到这个值班医生的电话
   LambdaQueryWrapper<User> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
   lambdaQueryWrapper1.eq(User::getUserId,userId);
   User one = iSysUserService.getOne(lambdaQueryWrapper1);
   String phonenumber = one.getPhonenumber();

   return phonenumber;

}

 

查询小程序的密钥

前端要求那边现在需要一个接口就是,可以返回我的小程序密钥。因为我不能直接在前端代码中写入这个密钥,会存在泄漏的安全风险。所以要你那边写个接口给我返回这个数据。所以我就将其的配置文件的中的数据返回出来

@Value("${appId}")
private String appId;

@Value("${secret}")
private String secret;

/**
* 返回passworedKey
* @return
*/
@Override
public Map<String, Object> getsecret() {
   Map<String, Object> objectObjectHashMap = new HashMap<>();
   objectObjectHashMap.put("secret", this.secret);
   return objectObjectHashMap;
}

 

 

问题及解决

查询值班医生的电话出现的bug

问题的分析:这个值班的医生是若依系统自带的数据库,其中就是登录到后台管理的一些信息,所以这里的两个实体类及业务层之类id没有导入到项目代码中。我生成了其类,复制到IDEA中。一运行就出现了这个报错

报错的信息:是因为实体类名重复,出现重复映射

解决:我直接将实体类改一个名字,在若依中其中会有一个如果去自带的中去带的话更耗费时间,所以就改了实体类的名字就解决了这个问题

 

 

 

学习重点及理解

随机数的学习

就比如上面随机一个医生的电话号码进行输出:

首先将其所以医生都要查询出来:

//查询出多个值班医生
List<UserRole> list = iSysUserRoleService.list(lambdaQueryWrapper);

然后就是找到有多少个医生

//有几个值班医生
int size = list.size();

再创建一个随机数的对象,将其中的几个医生的个数放到其中这里的执行范围是 [0~(个数-1)],就是说他是从0到这个个数减一这个范围中随机

//随机取一个值班医生的
Random random = new Random();
int i = random.nextInt(size);

最后就是在list中找到随机出来的(i)数字找到指定的值班医生,然后读取他的电话就好了

UserRole sysUserRole = list.get(i);
Long userId = sysUserRole.getUserId();

 

扩展学习

Spring 获取配置文件属性的三种方法

  • 方法一:
    • 通过 Environment env获取配置属性:

      • import org.springframework.core.env.Environment;

        @Configuration
        public class MyBatisConfig
        {
           @Autowired
           private Environment env;
           @Bean
           public void sqlSessionFactory(DataSource dataSource) throws Exception
          {
               String typeAliasesPackage = env.getProperty("mybatis-plus.typeAliasesPackage");
               String mapperLocations = env.getProperty("mybatis-plus.mapperLocations");
          }  
        }
    • 此处配置文件(yml 配置,配置文件如下):

      • mybatis-plus:
         # 搜索指定包别名
        typeAliasesPackage: com.ruoyi.project.**.domain
         # 配置mapper的扫描,找到所有的mapper.xml映射文件
        mapperLocations: classpath*:mybatis/**/*Mapper.xml

         

  • 方法二:
    • 绑定实体类,获取一组配置:

      • import org.springframework.boot.context.properties.ConfigurationProperties;
        import org.springframework.stereotype.Component;
        import lombok.Getter;
        import lombok.Setter;
        /**
        * 读取项目相关配置
        */
        @Component
        @Getter
        @Setter
        @ConfigurationProperties(prefix = "peng")
        public class RuoYiConfig
        {
           /** 项目名称 */
           private String name;
           /** 版本 */
           private String version;
           /** 版权年份 */
           private String copyrightYear;
           /** 实例演示开关 */
           private boolean demoEnabled;
           /** 上传路径 */
           private static String profile;
           /** 获取地址开关 */
           private static boolean addressEnabled;  
        }

    • 此处配置文件(yml 配置,配置文件如下):

      • peng:
         # 名称
        name: RuoYi
         # 版本
        version: 2.0.0
         # 版权年份
        copyrightYear: 2019
         # 实例演示开关
        demoEnabled: true
         # 文件路径 示例
        profile: /home/huawei/zdh/
         # 获取ip地址开关
        addressEnabled: true

         

  • 方法三:
    • 通过 @Value标签绑定数据

      • import org.springframework.beans.factory.annotation.Value;
        import org.springframework.context.annotation.Configuration;
        import com.alibaba.druid.pool.DruidDataSource;

        /**
        * druid 配置属性
        */
        @Configuration
        public class DruidProperties
        {
           @Value("${spring.datasource.druid.initialSize}")
           private int initialSize;

           @Value("${spring.datasource.druid.minIdle}")
           private int minIdle;

           @Value("${spring.datasource.druid.maxActive}")
           private int maxActive;

        }
    • 此处配置文件(yml 配置,配置文件如下):

      • spring:
        datasource:
          druid:
             # 初始连接数
            initialSize: 5
             # 最小连接池数量
            minIdle: 10
             # 最大连接池数量
            maxActive: 20

总结

今天的学习的状态是不错的完成了,完善接口的不足的地方,将前端缺少的接口开发出来,其中的出现一个bug,也是解决掉了。接下来还去摸索消息订阅和新项目的部署的操作。今天比较难的就是随机数这块的内容,还有的是在获取配置文件中的数据的时候返回不出来就返回一个注释中的内容,后面上网查了一下是少了一个$的符号。