登录接口的开发,删除签约医生信息

发布时间 2023-04-07 10:26:30作者: 葬爱_坤疤

摘要:

删除签约医生信息

  • 其中涉及到单张表( TbDoctor表,User表)

  • 这个接口的设计思路:当后台管理中一个签约医生要退休了,不干了。我们将他的数据删除,删除了医生表外,还有一个user表中,有一条字段就是表示签约医生的,我们将刚刚删除的医生的id到user表中读取该医生签约的患者们,将他们的签约医生的id改为空

  • TbDoctorController

    • /**
      * 删除签约医生
      * @param doctorId
      * @return
      */
      @DeleteMapping()
      public AjaxResult delDoctorInfo(Long doctorId){
         boolean b = tbDoctorService.delDoctorInfo(doctorId);
         return AjaxResult.success(b);
      }
  • ITbDoctorService

    • /**
      * 删除医生信息
      * @param doctorId
      * @return
      */
      public boolean delDoctorInfo(Long doctorId);
  • TbDoctorServiceImpl

    • /**
      * 删除医生信息
      * @param doctorId
      * @return
      */
      @Override
      public boolean delDoctorInfo(Long doctorId) {
         boolean remove = false;
         boolean remove1 = false;
         boolean save = false;
         LambdaQueryWrapper<TbUser> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
         userLambdaQueryWrapper.eq(TbUser::getDoctorId,doctorId);
         List<TbUser> list = iTbUserService.list(userLambdaQueryWrapper);
         for (TbUser tbUser : list) {
             LambdaQueryWrapper<TbUser> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.eq(TbUser::getUserId,tbUser.getUserId());
             TbUser one = iTbUserService.getOne(queryWrapper);

             //封装数据
             TbUser tbUser1 = new TbUser();
             //拷贝实体类
             BeanUtils.copyProperties(one,tbUser1);
             tbUser1.setDoctorId(null);
             remove1 = iTbUserService.remove(queryWrapper);
             save = iTbUserService.save(tbUser1);
        }

         LambdaQueryWrapper<TbDoctor> tbDoctorLambdaQueryWrapper = new LambdaQueryWrapper<>();
         tbDoctorLambdaQueryWrapper.eq(TbDoctor::getDoctorId,doctorId);
         remove = tbDoctorService.remove(tbDoctorLambdaQueryWrapper);


         return remove1 && remove && save;
      }

 

 

问题及解决

bug:userId为4的重复

 

问题分析:我在做删除医生接口的时候出现了bug,当一个签约医生的被删除时,原本属于这个签约的患者信息要修改,将这个user表中的doctorId清空。但是一直报这样的错误。

解决:后来我直接用原始的方法,将数据读取,再封装,然后删除数据,最后添加数据。这样就成功了

for (TbUser tbUser : list) {
   LambdaQueryWrapper<TbUser> queryWrapper = new LambdaQueryWrapper<>();
   queryWrapper.eq(TbUser::getUserId,tbUser.getUserId());
   TbUser one = iTbUserService.getOne(queryWrapper);

   //封装数据
   TbUser tbUser1 = new TbUser();
   //拷贝实体类
   BeanUtils.copyProperties(one,tbUser1);
   tbUser1.setDoctorId(null);
   remove1 = iTbUserService.remove(queryWrapper);
   save = iTbUserService.save(tbUser1);
}

 

学习重点及理解

微信小程序登录接口

1、首先要到微信开发者工具中,注册一个AppId,数据邮箱和密码

 

 

  • 如何得到了appid和secret,将其写入配置中

    • appId: wx26205c53e7ffd579
      secret: 8e11f230a4bdae4503f526e5b0cf9078
  • 代码写在DoctorController中

  • 生成openId

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

      @Value("{secret}")
         private String secret;
      /**
      *微信的生成openId
      * @param code
      * @return
      */
      @GetMapping("/login")
      public AjaxResult OpenId(String code){

         StringBuilder url = new StringBuilder("https://api.weixin.qq.com/sns/jscode2session?");
         url.append("appid=").append(appId);//appid设置
         url.append("&secret=").append(secret);//secret设置
         url.append("&js_code=").append(code);//code设置
         url.append("&grant_type=authorization_code");
         JSONObject res = null;
         try {
             res = JSONObject.parseObject(HttpUtil.get(url.toString()));    //构建一个GET请求
        } catch (Exception e) {
             e.printStackTrace();
        }

         LambdaQueryWrapper<TbUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(TbUser::getOpenId, res.getString("openid"));
         TbUser one = iTbUserService.getOne(lambdaQueryWrapper);
         if (one==null){
             return AjaxResult.error("没有绑定账号",res.getString("openid"));
        }
         Long userId = one.getUserId();
             return AjaxResult.success("登录成功",userId);
      }
  • 绑定账号

    • /**
          * //绑定这个用户的openId
          * @param banDing
          * @return
          */
         @PostMapping("/banding")
         public AjaxResult banding(@RequestBody BanDing banDing){
             String openId = banDing.getOpenId();
             String password = banDing.getPassword();
             String accountNumber = banDing.getAccountNumber();

             LambdaQueryWrapper<TbUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
             lambdaQueryWrapper.eq(TbUser::getAccountNumber,accountNumber);
             TbUser one = iTbUserService.getOne(lambdaQueryWrapper);
             if (one==null){
                 return AjaxResult.error("没有次账号!");
            }else if (!one.getPassword().equals(password)){
                 return AjaxResult.error("密码输入错误!");
            }else {
                 one.setOpenId(openId);
                 iTbUserService.updateById(one);
                 return AjaxResult.success("登录成功");

            }
        }
  • 创建了一个实体类(其中就要有openId,账号还有密码)

  • 数据库中userId表,一些医生表也要加一个openId

    • @Data
      public class BanDing {
         /**
          * 账号
          */
         @Excel(name = "账号")
         private String accountNumber;

         /**
          * 密码
          */
         @Excel(name = "密码")
         private String password;
         /**
          * openId
          */
         private String openId;
      }

 

总结

今天的状态是不错的,将其完成了用户端的登录接口,不过在删除医生信息这个接口上花费的时间很多,对于删除多个患者的签约医生时候,一直都删除一个,后来就用最老土的方法,先删在添加解决了这个问题。