消息推送问题梳理-团队管理
管理用户界面:
新增加用户列表:这些用有资格收到推送消户息
当删除一个医生的时候,重新添加这个人的时候 发现团队中没有这个人了 ,这个时候 需要重新添加这个人。
处理这个问题遵循的原则:
- 删除这个用户的时候,应该先检查这个用户是否在一个团队当中,如果在,则应该先删除该用户与团队的关联后,再删除用户。
- 或者删除这个用户的时候,级联删除该用户与团队的关联。
当停用这个用户的时候,是否应该在用户与团队的关联表中增加一个状态字段?
如果已经删除的用户,应该提供一个再把用户与团队关联的功能,否则 则需要重新管理机构的问题!如果这样就不太合理啊。
(这个界面要细化,做得更精细一些)
取消团队与组织结构关联的时候报错:
在尝试更新数据库时,遇到了以下详细错误信息:
错误类型:java.sql.SQLIntegrityConstraintViolationException
,表明数据完整性约束被违反。
具体错误:尝试将重复的主键值 '1818518351819870209-45'
插入到 sys_team_doctor
表中。由于该表的主键约束,不允许存在重复值,因此插入操作失败。
涉及的代码:错误可能源自 com/edwin/java/biz/mapper/TeamDoctorMapper.java
文件中的相关代码。
SQL 语句:出错的 SQL 语句为 INSERT INTO sys_team_doctor ( team_id, doct_id ) VALUES ( ?, ? )
。
解决方案:
- 检查数据:在插入数据前,确保
team_id
和doct_id
的组合是唯一的。 - 审查数据库约束:确认
sys_team_doctor
表的主键约束设置正确,避免重复值。 - 优化代码逻辑:在
TeamDoctorMapper.java
文件中,增加数据存在性检查,防止重复插入。
小程序端进入专家团队页面的时候:
1 首先要列出当前登录用户所在的团队, 切换团队列表的时候,下面成员列表也要跟随变动
2 团队成员应该有某种排序(如按团队所在医院 等)
3、应该有个检索(按医院 名字 职称三要素)
4 如果后端改变,前端应该提供立即查询后台数据刷新的功能
5、bug:当前是刷新一次会把上次的名单追加一次!
(上面人员应该提供排序功能!)
http://127.0.0.1:7877/chat/wechat/client/getTeamList/350
首先查找团队医生关系表,再根据这个关系表获得的团队 去查询团队信息
public List<Team> getTeamList(Integer doctorId) {List<TeamDoctor> teamDocts = teamDoctorMapper.selectList(Wrappers.<TeamDoctor>lambdaQuery().eq(TeamDoctor::getDoctId, doctorId));if (CollUtil.isEmpty(teamDocts)) {return Collections.emptyList();}return teamMapper.selectBatchIds(teamDocts.stream().map(TeamDoctor::getTeamId).collect(Collectors.toList()));}
试着解决第4个问题 :
.... <div class="patient-select"><uni-data-select v-model="teamId" :localdata="teamList"placeholder="请选择团队" @change="querySearch"></uni-data-select></div></view><view class="homyz-content"><div class="patient-list-box"><div class="patient-list-content"><block v-for="(itemDemo,indexDemo) in dataList" :key="indexDemo"><div class="item" v-for="(item,index) in itemDemo.doctorsList" :index="index" :key="index"@click="changeSelect($event,item)"><div class="img-box"><div class="tag">{{ item.patientCount }}</div><img class="img" :src="item.imgUrl"></div><div class="item-cont"><div class="title"><div class="name">{{ item.userName }}</div><div class="sub">{{ postList.find(o => o.value === item.positionName).text }}</div></div><div class="desc">{{ item.remark }}</div></div><div class="type">{{ itemDemo.name }}</div></div></block></div></div></view>...querySearch() {this.getDoctorList(this.teamId)// this.closeDrawer('showLeft')},getDoctorList(teamId) {// 获取 团队的医生信息uni.request({url: loginRequest.baseURL + 'teamDoctorList/' + this.teamId,header: {'auth-token': wx.getStorageSync("token")},success: res => {if (res.data.code === 200) {this.showRight = truethis.dataList = res.data.dataif (res.data.data.length == 0) {uni.showToast({title: '暂无数据',icon: 'none'})}}}})},
无效!
进一步检查 还有个问题
进一步检查发现,
SELECT doct_id
FROM `sys_team_doctor`
WHERE team_id = 4
AND doct_id NOT IN (SELECT id FROM sys_doctors);
竟然有2条记录 说明 当初删掉用户的时候 这个表有记录没有删除!
先手动清理掉多的2条记录,后面再检查删除用户的时候 是否删除了这个关系表
DELETE from sys_team_doctor WHERE doct_id in (317,326)
1 先检查后端是否有多的数据查询出来!
2 然后检查前端是否重复追加数据了 前端没有追加数据啊 后端的问题!
后端有个类:DoctorInfoVO 描述团队 及其团队中的医生信息
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DoctorInfoVO implements Serializable {private static final long serialVersionUID = 1880890718591700580L;@ApiModelProperty(value = "部门名称")private String name; //团队名称private String id; //团队idprivate List<Doctors> doctorsList; //医生列表
}
查询的时候,代码逻辑有问题 ,重新写了一下:
public List<DoctorInfoVO> teamDoctorList(Long teamId) {List<TeamDoctor> teamDocts = teamDoctorMapper.selectList(Wrappers.<TeamDoctor>lambdaQuery().eq(TeamDoctor::getTeamId, teamId));if (CollUtil.isEmpty(teamDocts)) {return Collections.emptyList();};//teamIdlong team_Id = teamDocts.get(0).getTeamId();Team team = teamMapper.selectById(team_Id);List<Doctors> doctors = listByIds(teamDocts.stream().map(TeamDoctor::getDoctId).collect(Collectors.toList()));DoctorInfoVO vo = new DoctorInfoVO();vo.setId(String.valueOf(team_Id));if (team != null) {vo.setName(team.getName());}vo.setDoctorsList(doctors);return Collections.singletonList(vo);}
现在正常了:
相关文章:

消息推送问题梳理-团队管理
管理用户界面: 新增加用户列表:这些用有资格收到推送消户息 当删除一个医生的时候,重新添加这个人的时候 发现团队中没有这个人了 ,这个时候 需要重新添加这个人。 处理这个问题遵循的原则: 删除这个用户的时候&…...

如何在 Ubuntu 上使用 Docker 部署 LibreOffice Online
简介 LibreOffice Online(也称为Collabora Online)是一个开源的在线办公套件,它提供了与LibreOffice桌面版相似的功能,但完全在云端运行。这意味着用户可以通过浏览器访问和编辑文档,而无需在本地计算机上安装任何软件…...

MongoDB数据备份与恢复(内含工具下载、数据处理以及常见问题解决方法)
一、工具准备 对MongoDB进行导入导出、备份恢复等操作时需要用到命令工具,我们要先检查一下MongoDB安装目录下是否有这些工具,正常情况下是没有的:),因为新版本的MongoDB安装时不包含这些工具,需要我们手动下载安装。下载成功之后…...
代码随想录第三十一天| 56. 合并区间 738.单调递增的数字
56. 合并区间 题目描述 给定一个区间的集合 intervals,请合并所有重叠的区间。 解题思路 排序区间 按照每个区间的起点 start 升序排序,便于后续合并。 合并区间 使用两个变量 start 和 right 分别记录当前区间的起点和终点。遍历排序后的区间&#x…...
C语言基本知识 2.2void 函数
在C语言中, void 是一个重要的关键字,具有多种用途,以下是详细介绍: 函数返回值类型声明 - 当函数不需要返回任何值时,可以将函数的返回值类型声明为 void 。例如: void printMessage() { printf(…...
Spring 框架中哪些接口可以创建对象
Spring 框架中哪些接口可以创建对象 在 Spring 框架中,向 IOC 容器中添加 Bean 主要有以下几种接口和方式。Spring 提供了不同的手段来实现对象的创建和管理,涵盖了不同的需求和场景。以下是几种常用的接口和方式: 1. BeanFactory 接口 Be…...

豆瓣书摘 | 爬虫 | Python
获取豆瓣书摘,存入MongoDB中。 import logging import timeimport requests from bs4 import BeautifulSoup from pymongo import MongoClientheaders {accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,image/apng,*/*;q0.8,…...

Oracle数据库物理存储结构管理
大家好,我是程序员小羊! 前言: 安装和配置Oracle数据库是一个涉及多个步骤的任务,通常包括环境准备、软件安装、数据库创建和基本配置等。以下是详细的安装与配置流程。 一、环境准备 1. 系统要求 操作系统:Wind…...
java——Map接口
Java的Map接口是一种键值对的数据结构,用于存储和操作键值对的集合。它是Java集合框架中的一部分,提供了一种以键值对形式组织数据的方法。 Map接口有多个实现类,常用的有HashMap、TreeMap和LinkedHashMap。每种实现类都有不同的特点和适用场…...
量子计算机全面解析:技术、应用与未来
标题:量子计算机全面解析:技术、应用与未来 一、什么是量子计算机? 量子计算机是一种利用量子力学原理(如叠加、纠缠和干涉)进行计算的新型计算设备。与传统计算机基于比特(0 和 1)的运算方式不…...
IDEA相关(包括但不限于快捷键,使用技巧)成长笔记
1.IDEA创建及命名规范 IDEA创建是:项目、模块、包、类 命名规范: 1.项目名全部小写 2.包名全部小写 3.类名首字母大写,一般都是使用驼峰式命名。 如:public class MyFirstClass{} 4.同上: 变量名、方法名首字母小…...

【再谈设计模式】适配器模式 ~接口兼容的桥梁
一、引言 在软件开发的复杂世界里,不同的组件、类或者系统往往有着各自独立的设计和接口定义。当需要将这些原本不兼容的部分整合在一起协同工作时,就像尝试将方形的榫头插入圆形的卯眼一样困难。适配器设计模式就如同一位神奇的工匠,能够巧妙…...

使用Cursor和Claude AI打造你的第一个App
大家好,使用Cursor和Claude AI打造应用程序是一个结合智能代码辅助和人工智能对话的创新过程。Cursor是一个编程辅助工具,它通过智能代码补全、聊天式AI对话和代码生成等功能,帮助开发者提高编程效率。Claude AI则是一个强大的人工智能平台&a…...

粗读Apache Paimon 的基本概念及其组成结构
文章目录 一、Paimon的基本概念(一)快照(二)分区(三)分桶(四)一致性保证 二、Paimon的组成结构(一)文件布局(二)存储结构(…...

c++调用 c# dll 通过 P/Invoke (详细避坑)
项目场景: VS2022 .NET8 , 项目应用的库需要支持AOT,不支持AOT的库看这里 我的c项目很奇怪,如果使用 clr 调用c# dll,会有很多报错,所以使用 P/Invoke方法,这个方法不会有任何奇怪的报错 解决方案 示例…...
李春葆《数据结构》——图相关代码
邻接矩阵结构体: #define MAX<最大结点个数> #define INF 32765 //定义无穷 typedef struct{int no;//顶点的编号;InfoType info;//顶点的其他信息 }vertexType;//顶点的类型 typedef struct{int edges[MAX][Max];//邻接矩阵数组 int vertexTy…...

Linux驱动开发第2步_“物理内存”和“虚拟内存”的映射
“新字符设备的GPIO驱动”和“设备树下的GPIO驱动”都要用到寄存器地址,使用“物理内存”和“虚拟内存”映射时,非常不方便,而pinctrl和gpio子系统的GPIO驱动,非常简化。因此,要重点学习pinctrl和gpio子系统下的GPIO驱…...

告别多品牌乱战,吉利开始觉醒
科技新知 原创作者丨思原 编辑丨蕨影 2007年,是国内自主品牌汽车萌芽的一年,当时行业普遍奉行“多生孩子好打架”战略,吉利也是在这样的背景下发布了《宁波宣言》,奠定了之后十多年的发展主导思想。 然而,新能源的快…...
Target-absent Human Attention
Abstract 预测人类注视行为对于构建能够预测用户注意力的人机交互系统非常重要。已经开发出计算机视觉模型来预测人们在搜索目标物体时的注视点。但当目标不存在于图像中时,又该如何处理呢?同样重要的是要了解当人们找不到目标时,他们如何进行搜索,以及何时停止搜索。在本文…...

<QNAP 453D QTS-5.x> 日志记录:在 Docker 中运行的 Flask 应用安装 自签名 SSL 证书 解决 Chrome 等浏览器证书安全
原因:Chrome 不信任 ssc 证书 使启用了 HTTPS,即使有使用 自签名证书 (self-signed certificate 非由可信的证书颁发机构 【CA,Certificate Authority】签发的)。浏览器 Chrome 默认不信任自签名证书,也会报 NET::ERR_…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...