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

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...