消息推送问题梳理-团队管理
管理用户界面:
新增加用户列表:这些用有资格收到推送消户息

当删除一个医生的时候,重新添加这个人的时候 发现团队中没有这个人了 ,这个时候 需要重新添加这个人。
处理这个问题遵循的原则:
- 删除这个用户的时候,应该先检查这个用户是否在一个团队当中,如果在,则应该先删除该用户与团队的关联后,再删除用户。
- 或者删除这个用户的时候,级联删除该用户与团队的关联。
当停用这个用户的时候,是否应该在用户与团队的关联表中增加一个状态字段?
如果已经删除的用户,应该提供一个再把用户与团队关联的功能,否则 则需要重新管理机构的问题!如果这样就不太合理啊。


(这个界面要细化,做得更精细一些)
取消团队与组织结构关联的时候报错:

在尝试更新数据库时,遇到了以下详细错误信息:
错误类型: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_…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
