消息推送问题梳理-团队管理
管理用户界面:
新增加用户列表:这些用有资格收到推送消户息
当删除一个医生的时候,重新添加这个人的时候 发现团队中没有这个人了 ,这个时候 需要重新添加这个人。
处理这个问题遵循的原则:
- 删除这个用户的时候,应该先检查这个用户是否在一个团队当中,如果在,则应该先删除该用户与团队的关联后,再删除用户。
- 或者删除这个用户的时候,级联删除该用户与团队的关联。
当停用这个用户的时候,是否应该在用户与团队的关联表中增加一个状态字段?
如果已经删除的用户,应该提供一个再把用户与团队关联的功能,否则 则需要重新管理机构的问题!如果这样就不太合理啊。
(这个界面要细化,做得更精细一些)
取消团队与组织结构关联的时候报错:
在尝试更新数据库时,遇到了以下详细错误信息:
错误类型: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_…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...