From 30dfcca6b9bee266a8f7658c06ef86c9c0b01b15 Mon Sep 17 00:00:00 2001 From: zhangchao Date: Thu, 7 Mar 2024 15:28:32 +0800 Subject: [PATCH] =?UTF-8?q?#fix=20=E6=96=B0=E5=A2=9E=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E5=9B=9E=E5=A4=8D=E6=B6=88=E6=81=AF=E6=8F=90=E9=86=92=E3=80=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8=E5=90=8C=E6=AD=A5his?= =?UTF-8?q?=E7=97=85=E4=BE=8B=E3=80=81=E6=96=B0=E5=A2=9E=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ChatGroupController.java | 488 +++++++++++++-------- .../controller/LymsHisInfoController.java | 48 +- .../controller/LymsWorkMessageController.java | 72 +++ .../controller/PushMessageController.java | 13 +- .../com/lyms/talkonlineweb/domain/LymsHisInfo.java | 14 + .../talkonlineweb/domain/LymsPatientWechat.java | 26 ++ .../lyms/talkonlineweb/domain/LymsWorkMessage.java | 54 +++ .../com/lyms/talkonlineweb/enums/ChatEnum.java | 29 ++ .../mapper/LymsDoctorWorktimeMapper.java | 1 + .../talkonlineweb/mapper/LymsHisInfoMapper.java | 5 + .../mapper/LymsPatientWechatMapper.java | 8 + .../mapper/LymsWorkMessageMapper.java | 15 + .../service/LymsDoctorWorktimeService.java | 1 + .../talkonlineweb/service/LymsHisInfoService.java | 2 +- .../service/LymsPatientWechatService.java | 7 + .../service/LymsWorkMessageService.java | 13 + .../com/lyms/talkonlineweb/service/PushTask.java | 5 + .../impl/LymsDoctorWorktimeServiceImpl.java | 5 + .../service/impl/LymsHisInfoServiceImpl.java | 354 ++++++++++----- .../service/impl/LymsPatientWechatServiceImpl.java | 14 + .../service/impl/LymsWorkMessageServiceImpl.java | 22 + .../talkonlineweb/task/DoctorMsgNotifyTask.java | 37 ++ .../task/HisPatientsAutoUploadTask.java | 12 +- .../resources/mapper/LymsDoctorWorktimeMapper.xml | 15 + .../main/resources/mapper/LymsHisInfoMapper.xml | 10 + .../resources/mapper/LymsPatientWechatMapper.xml | 10 + .../resources/mapper/LymsWorkMessageMapper.xml | 18 + 27 files changed, 956 insertions(+), 342 deletions(-) create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/LymsWorkMessageController.java create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsPatientWechat.java create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsWorkMessage.java create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/enums/ChatEnum.java create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsPatientWechatMapper.java create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsWorkMessageMapper.java create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsPatientWechatService.java create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsWorkMessageService.java create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/PushTask.java create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsPatientWechatServiceImpl.java create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsWorkMessageServiceImpl.java create mode 100644 talkonlineweb/src/main/resources/mapper/LymsPatientWechatMapper.xml create mode 100644 talkonlineweb/src/main/resources/mapper/LymsWorkMessageMapper.xml diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/ChatGroupController.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/ChatGroupController.java index 7dafea1..3aaa8ee 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/ChatGroupController.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/ChatGroupController.java @@ -12,13 +12,11 @@ import com.lyms.talkonlineweb.annotation.TokenRequired; import com.lyms.talkonlineweb.constants.ErrorCodeConstants; import com.lyms.talkonlineweb.domain.*; import com.lyms.talkonlineweb.enums.MessageEnum; +import com.lyms.talkonlineweb.param.DataEntity; import com.lyms.talkonlineweb.request.MsgDelParam; import com.lyms.talkonlineweb.result.BaseResponse; import com.lyms.talkonlineweb.service.*; -import com.lyms.talkonlineweb.util.Constant; -import com.lyms.talkonlineweb.util.DateUtil; -import com.lyms.talkonlineweb.util.HXService; -import com.lyms.talkonlineweb.util.StringUtil; +import com.lyms.talkonlineweb.util.*; import lombok.extern.log4j.Log4j2; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -33,6 +31,7 @@ import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.nio.charset.Charset; import java.util.*; +import java.util.concurrent.*; @RestController @RequestMapping("chat") @@ -84,25 +83,25 @@ public class ChatGroupController { @TokenRequired public BaseResponse saveChatGroup(@RequestBody LymsChatgroup group) { BaseResponse baseResponse = new BaseResponse(); - String retDlogin=group.getRetDlogin(); + String retDlogin = group.getRetDlogin(); List gLst = lymsChatgroupService.list(Wrappers.query(group).orderByDesc("id")); if (group.getOwnerk() == null) { group.setOwnerk(hxuser); } - LymsPatient patient= lymsPatientService.getOne(new QueryWrapper() + LymsPatient patient = lymsPatientService.getOne(new QueryWrapper() .lambda().eq(LymsPatient::getIdno, group.getFromp())); - LymsDoctor doctor= lymsDoctorService.getOne(new QueryWrapper() + LymsDoctor doctor = lymsDoctorService.getOne(new QueryWrapper() .lambda().eq(LymsDoctor::getDlogin, group.getTarget())); if (gLst.size() > 0) { LymsChatgroup group2 = gLst.get(0); group = group2; //回访的状态才去执行(上次关闭了再次点击会开启) - if (1==group.getType()&&group.getStat()==1) { + if (1 == group.getType() && group.getStat() == 1) { group.setStat(0); //修改群组状态 lymsChatgroupService.updateById(group); //添加回访记录 - LymsReturnVisitRecord returnVisitRecord=new LymsReturnVisitRecord(); + LymsReturnVisitRecord returnVisitRecord = new LymsReturnVisitRecord(); returnVisitRecord.setDlogin(retDlogin);//前端传的当前登录医生账号 returnVisitRecord.setDpid(doctor.getDpid()); returnVisitRecord.setIdno(patient.getIdno()); @@ -112,7 +111,7 @@ public class ChatGroupController { lymsReturnVisitRecordService.save(returnVisitRecord); } //患者消费问诊卡 咨询结束后 - if(0==group.getType()){ + if (0 == group.getType()) { group.setType(1); lymsChatgroupService.updateById(group); @@ -127,28 +126,28 @@ public class ChatGroupController { lymsReturnVisitRecordService.save(returnVisitRecord2); } } else { - List adminDlogins=new ArrayList<>(); + List adminDlogins = new ArrayList<>(); adminDlogins.add(group.getFromp()); - List groupnames=new ArrayList<>(); + List groupnames = new ArrayList<>(); groupnames.add(patient.getPname()); //患者注册环信 if (StringUtil.isEmpty(patient.getHxid())) { patient = lymsPatientService.addPatientHxId(patient); } //查询值班医生 - List doctorAminList= lymsDoctorService.list(new QueryWrapper() + List doctorAminList = lymsDoctorService.list(new QueryWrapper() .lambda().eq(LymsDoctor::getDpid, doctor.getDpid()) - .in(LymsDoctor::getAdminType, new int[]{1,2}) + .in(LymsDoctor::getAdminType, new int[]{1, 2}) .orderByAsc(LymsDoctor::getAdminType)); //科室值班医生注册环信 for (LymsDoctor lymsDoctor : doctorAminList) { - if(StringUtil.isEmpty(lymsDoctor.getHxid())) { + if (StringUtil.isEmpty(lymsDoctor.getHxid())) { lymsDoctorService.addDoctorHxId(lymsDoctor); } adminDlogins.add(lymsDoctor.getDlogin()); groupnames.add(lymsDoctor.getDname()); } - if ( ! adminDlogins.contains(doctor.getDlogin())) { + if (!adminDlogins.contains(doctor.getDlogin())) { //医生注册环信 if (StringUtil.isEmpty(doctor.getHxid())) { lymsDoctorService.addDoctorHxId(doctor); @@ -191,6 +190,7 @@ public class ChatGroupController { /** * 查询聊天历史记录(本地) + * * @param targetId 分组ID * @param current * @param size @@ -198,17 +198,17 @@ public class ChatGroupController { */ @GetMapping("getHistoryLogs") @TokenRequired - public BaseResponse getHistoryLogs(String targetId,Integer current, Integer size){ + public BaseResponse getHistoryLogs(String targetId, Integer current, Integer size) { - if (StringUtil.isEmpty(targetId)){ + if (StringUtil.isEmpty(targetId)) { return BaseResponse.error("聊天组ID不能为空"); } BaseResponse baseResponse = new BaseResponse(); - Page page = new Page(current,size); + Page page = new Page(current, size); QueryWrapper query = new QueryWrapper(); - query.eq("targetid",targetId); + query.eq("targetid", targetId); query.orderByDesc("sendtime"); - page=lymsMessageService.page(page,query); + page = lymsMessageService.page(page, query); baseResponse.setObject(page); baseResponse.setErrorcode(0); baseResponse.setErrormsg("成功"); @@ -221,12 +221,12 @@ public class ChatGroupController { boolean b = hxService.recallMsg(msgDelParam); - if(b){ + if (b) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("hx_msg_id",msgDelParam.getMsg_id()); - queryWrapper.eq("yn",1); - LymsMessage lymsMessage = lymsMessageService.getOne(queryWrapper,false); - if(lymsMessage != null){ + queryWrapper.eq("hx_msg_id", msgDelParam.getMsg_id()); + queryWrapper.eq("yn", 1); + LymsMessage lymsMessage = lymsMessageService.getOne(queryWrapper, false); + if (lymsMessage != null) { LymsMessage m = new LymsMessage(); m.setId(lymsMessage.getId()); m.setYn(0); @@ -239,6 +239,7 @@ public class ChatGroupController { /** * 根据群组ID获取患者和医生信息 + * * @param chatgroup * @return */ @@ -249,11 +250,11 @@ public class ChatGroupController { BaseResponse baseResponse = new BaseResponse(); Map rs = new HashMap<>(); //不作为条件查询 - Integer type=chatgroup.getType(); + Integer type = chatgroup.getType(); chatgroup.setType(null); List gLst = lymsChatgroupService.list(Wrappers.query(chatgroup).orderByDesc("id")); - if (gLst.size()>0){ + if (gLst.size() > 0) { chatgroup = gLst.get(0); } LymsDoctor doctor = new LymsDoctor(); @@ -266,25 +267,25 @@ public class ChatGroupController { List> tmpList = lymsChatgroupService.getPinfoBySesson(null, doctor.getDid().toString(), chatgroup.getHxgroupid()); if (tmpList.size() > 0) { - if(null==type) { + if (null == type) { rs.put("sess", tmpList.get(0)); - }else { + } else { //修改为恢复聊天状态 - LymsTkrecord tkrecord=new LymsTkrecord(); + LymsTkrecord tkrecord = new LymsTkrecord(); tkrecord.setId((Integer) tmpList.get(0).get("rid")); tkrecord.setStat(0); lymsTkrecordService.updateById(tkrecord); - if (chatgroup.getId()!=null){ + if (chatgroup.getId() != null) { chatgroup.setStat(0); lymsChatgroupService.updateById(chatgroup); } tmpList.get(0).put("stat", 0); rs.put("sess", tmpList.get(0)); } - }else { + } else { //防止重复创建组 - if(null!=type && 1==type && CollectionUtils.isNotEmpty(gLst)){ - Map map=new HashMap<>(); + if (null != type && 1 == type && CollectionUtils.isNotEmpty(gLst)) { + Map map = new HashMap<>(); map.put("stat", 0); rs.put("sess", tmpList.add(map)); } @@ -321,8 +322,8 @@ public class ChatGroupController { /** * 医生端--回话会话列表获取患者信息 * - * @param froms 发送人员ID - * @param did 问诊医生ID + * @param froms 发送人员ID + * @param did 问诊医生ID * @param groupid 群组ID * @return */ @@ -345,27 +346,27 @@ public class ChatGroupController { @PostMapping("getChatList") @TokenRequired public BaseResponse getSessionListInfoNew(HttpServletRequest request) { - JSONArray rs=new JSONArray(); - try{ + JSONArray rs = new JSONArray(); + try { request.setCharacterEncoding("utf-8"); - String res=IOUtils.toString(request.getInputStream(),Charset.forName("UTF-8")); - JSONObject jsonObject= JSON.parseObject(res); - JSONArray conversations =jsonObject.getJSONArray("conversations"); - if(conversations == null || conversations.size()==0) { + String res = IOUtils.toString(request.getInputStream(), Charset.forName("UTF-8")); + JSONObject jsonObject = JSON.parseObject(res); + JSONArray conversations = jsonObject.getJSONArray("conversations"); + if (conversations == null || conversations.size() == 0) { return BaseResponse.error("参数错误"); } - for(int i = 0,size = conversations.size();i< size;i++){ + for (int i = 0, size = conversations.size(); i < size; i++) { JSONObject conversation = conversations.getJSONObject(i); JSONObject lastMessage = conversation.getJSONObject("lastMessage"); - lastMessage.put("unReadCount",conversation.getInteger("unReadCount")); + lastMessage.put("unReadCount", conversation.getInteger("unReadCount")); String hxgroupid = lastMessage.getString("to"); QueryWrapper groupQuery = new QueryWrapper<>(); - groupQuery.eq("hxgroupid",hxgroupid); - LymsChatgroup chatgroup = lymsChatgroupService.getOne(groupQuery); + groupQuery.eq("hxgroupid", hxgroupid); + LymsChatgroup chatgroup = lymsChatgroupService.getOne(groupQuery); //如果环信有聊天组信息,本地数据库中没有,则不显示(该情况可能是本地测试删除了数据) - if(chatgroup == null){ + if (chatgroup == null) { continue; } @@ -398,8 +399,8 @@ public class ChatGroupController { } - }catch (Exception e){ - log.error("",e); + } catch (Exception e) { + log.error("", e); } return BaseResponse.ok(rs); } @@ -408,58 +409,58 @@ public class ChatGroupController { @TokenRequired public BaseResponse getChatgroupListInfoNew(@RequestParam("excludeGroups") List excludeGroups, int current, int size) { List rs = new ArrayList<>(); - LambdaQueryWrapper chatgroupQueryWrapper=new QueryWrapper().lambda(); - if(CollectionUtils.isNotEmpty(excludeGroups)){ - chatgroupQueryWrapper.notIn(LymsChatgroup::getHxgroupid,excludeGroups); + LambdaQueryWrapper chatgroupQueryWrapper = new QueryWrapper().lambda(); + if (CollectionUtils.isNotEmpty(excludeGroups)) { + chatgroupQueryWrapper.notIn(LymsChatgroup::getHxgroupid, excludeGroups); } - chatgroupQueryWrapper.eq(LymsChatgroup::getYn,1) + chatgroupQueryWrapper.eq(LymsChatgroup::getYn, 1) .orderByDesc(LymsChatgroup::getCtime); - Page chatGroupPage = new Page<>(current,size); + Page chatGroupPage = new Page<>(current, size); chatGroupPage = lymsChatgroupService.page(chatGroupPage, chatgroupQueryWrapper); - for(LymsChatgroup lymsChatgroup : chatGroupPage.getRecords() ){ + for (LymsChatgroup lymsChatgroup : chatGroupPage.getRecords()) { //患者信息 - LambdaQueryWrapper patientQueryWrapper=new QueryWrapper().lambda(); + LambdaQueryWrapper patientQueryWrapper = new QueryWrapper().lambda(); patientQueryWrapper.eq(LymsPatient::getIdno, lymsChatgroup.getFromp()); LymsPatient patient = lymsPatientService.getOne(patientQueryWrapper); - if (null==patient) { + if (null == patient) { continue; } //医生信息 - LambdaQueryWrapper appgetdoctorlistInfoQueryWrapper=new QueryWrapper().lambda(); + LambdaQueryWrapper appgetdoctorlistInfoQueryWrapper = new QueryWrapper().lambda(); appgetdoctorlistInfoQueryWrapper.eq(AppgetdoctorlistInfo::getDlogin, lymsChatgroup.getTarget()); List dLst = appgetdoctorlistInfoService.list(appgetdoctorlistInfoQueryWrapper); - if (dLst.size()==0) { + if (dLst.size() == 0) { continue; } //聊天记录 - LambdaQueryWrapper messageQueryWrapper=new QueryWrapper().lambda(); + LambdaQueryWrapper messageQueryWrapper = new QueryWrapper().lambda(); messageQueryWrapper.eq(LymsMessage::getTargetid, lymsChatgroup.getHxgroupid()) - .eq(LymsMessage::getYn,1) + .eq(LymsMessage::getYn, 1) .orderByDesc(LymsMessage::getSendtime) .last(" limit 1"); final List lymsMessageList = lymsMessageService.list(messageQueryWrapper); - if(lymsMessageList.size() == 0){ + if (lymsMessageList.size() == 0) { continue; } LymsMessage lymsMessage = lymsMessageList.get(0); JSONObject reusltJsonObject = new JSONObject(); - reusltJsonObject.put("unReadCount",0); - reusltJsonObject.put("stat",lymsChatgroup.getStat()); - reusltJsonObject.put("pat",patient); - reusltJsonObject.put("msg",lymsMessage.getContent()); + reusltJsonObject.put("unReadCount", 0); + reusltJsonObject.put("stat", lymsChatgroup.getStat()); + reusltJsonObject.put("pat", patient); + reusltJsonObject.put("msg", lymsMessage.getContent()); reusltJsonObject.put("type", MessageEnum.getName(lymsMessage.getMtype())); - reusltJsonObject.put("doc",dLst.get(0)); - reusltJsonObject.put("from",lymsChatgroup.getFromp()); - reusltJsonObject.put("to",lymsChatgroup.getHxgroupid()); - reusltJsonObject.put("chatType","groupchat"); - reusltJsonObject.put("time",lymsMessage.getSendtime().getTime()); + reusltJsonObject.put("doc", dLst.get(0)); + reusltJsonObject.put("from", lymsChatgroup.getFromp()); + reusltJsonObject.put("to", lymsChatgroup.getHxgroupid()); + reusltJsonObject.put("chatType", "groupchat"); + reusltJsonObject.put("time", lymsMessage.getSendtime().getTime()); rs.add(reusltJsonObject); } - Page returnPage = new Page(current,size); + Page returnPage = new Page(current, size); returnPage.setTotal(chatGroupPage.getTotal()); returnPage.setRecords(rs); return BaseResponse.ok(returnPage); @@ -467,6 +468,7 @@ public class ChatGroupController { /** * 根据环信传入的会话,获取用户信息 + * * @param request * @return */ @@ -475,14 +477,14 @@ public class ChatGroupController { public BaseResponse getSessionListInfo(HttpServletRequest request) { BaseResponse baseResponse = new BaseResponse(); log.info(">>>>>>>>> getSessionListInfo 根据环信传入的会话,获取用户信息"); - JSONArray rs=new JSONArray(); + JSONArray rs = new JSONArray(); try { request.setCharacterEncoding("utf-8"); - String res=IOUtils.toString(request.getInputStream(),Charset.forName("UTF-8")); + String res = IOUtils.toString(request.getInputStream(), Charset.forName("UTF-8")); log.info(res); - JSONObject jsonObject= JSON.parseObject(res); - JSONArray channel_infos=jsonObject.getJSONArray("channel_infos"); - if(channel_infos.size()>0) { + JSONObject jsonObject = JSON.parseObject(res); + JSONArray channel_infos = jsonObject.getJSONArray("channel_infos"); + if (channel_infos.size() > 0) { for (int i = 0; i < channel_infos.size(); i++) { JSONObject row = channel_infos.getJSONObject(i); @@ -505,7 +507,7 @@ public class ChatGroupController { List cLst = lymsChatgroupService.list(Wrappers.query(chatgroup)); //如果环信有聊天组信息,本地数据库中没有,则不显示(该情况可能是本地测试删除了数据) - if(CollectionUtils.isEmpty(cLst)){ + if (CollectionUtils.isEmpty(cLst)) { continue; } @@ -539,7 +541,7 @@ public class ChatGroupController { getChatRecord(rs, jsonObject); } catch (IOException e) { - log.error("getSessionListInfo exception",e); + log.error("getSessionListInfo exception", e); } baseResponse.setObject(rs); return baseResponse; @@ -547,125 +549,129 @@ public class ChatGroupController { /** * 获取聊天群组,组装数据 - * @param rs 最后的结果 + * + * @param rs 最后的结果 * @param jsonObject 参数集合 */ - public void getChatRecord(JSONArray rs,JSONObject jsonObject){ + public void getChatRecord(JSONArray rs, JSONObject jsonObject) { //环信组id - JSONArray groupData=jsonObject.getJSONArray("groupData"); - List groupidList=new ArrayList<>(); + JSONArray groupData = jsonObject.getJSONArray("groupData"); + List groupidList = new ArrayList<>(); for (Object groupDatum : groupData) { groupidList.add(((JSONObject) JSON.toJSON(groupDatum)).get("groupid").toString()); } //如果结果集中包含了该聊天组,过滤掉 - for (int i=0;i< rs.size(); i++) { + for (int i = 0; i < rs.size(); i++) { JSONObject rjson = (JSONObject) JSON.toJSON(rs.get(i)); - if(groupidList.contains(rjson.get("to").toString())){ + if (groupidList.contains(rjson.get("to").toString())) { groupidList.remove(rjson.get("to").toString()); } } - if(groupidList.size() == 0){ + if (groupidList.size() == 0) { return; } - LambdaQueryWrapper chatgroupQueryWrapper=new QueryWrapper().lambda(); - chatgroupQueryWrapper.in(LymsChatgroup::getHxgroupid,groupidList); - List chatgroupList=lymsChatgroupService.list(chatgroupQueryWrapper); + LambdaQueryWrapper chatgroupQueryWrapper = new QueryWrapper().lambda(); + chatgroupQueryWrapper.in(LymsChatgroup::getHxgroupid, groupidList); + List chatgroupList = lymsChatgroupService.list(chatgroupQueryWrapper); for (LymsChatgroup lymsChatgroup : chatgroupList) { //组装结果 JSONObject reusltJsonObject = new JSONObject(); - reusltJsonObject.put("unread_num",0); - reusltJsonObject.put("stat",lymsChatgroup.getStat()); + reusltJsonObject.put("unread_num", 0); + reusltJsonObject.put("stat", lymsChatgroup.getStat()); //患者信息 - LambdaQueryWrapper patientQueryWrapper=new QueryWrapper().lambda(); + LambdaQueryWrapper patientQueryWrapper = new QueryWrapper().lambda(); patientQueryWrapper.eq(LymsPatient::getIdno, lymsChatgroup.getFromp()); LymsPatient patient = lymsPatientService.getOne(patientQueryWrapper); - if (null==patient) { + if (null == patient) { continue; } - reusltJsonObject.put("pat",patient); + reusltJsonObject.put("pat", patient); //聊天记录 - LambdaQueryWrapper messageQueryWrapper=new QueryWrapper().lambda(); + LambdaQueryWrapper messageQueryWrapper = new QueryWrapper().lambda(); messageQueryWrapper.eq(LymsMessage::getTargetid, lymsChatgroup.getHxgroupid()); - messageQueryWrapper.eq(LymsMessage::getYn,1); + messageQueryWrapper.eq(LymsMessage::getYn, 1); messageQueryWrapper.orderByDesc(LymsMessage::getSendtime).last(" limit 1"); final List lymsMessageList = lymsMessageService.list(messageQueryWrapper); - Map map=new HashMap(); - map.put("msg",lymsMessageList.size()>0?lymsMessageList.get(0).getContent():""); - map.put("type","txt"); - reusltJsonObject.put("bodies",Arrays.asList(map)); + Map map = new HashMap(); + map.put("msg", lymsMessageList.size() > 0 ? lymsMessageList.get(0).getContent() : ""); + map.put("type", "txt"); + reusltJsonObject.put("bodies", Arrays.asList(map)); //医生信息 - LambdaQueryWrapper appgetdoctorlistInfoQueryWrapper=new QueryWrapper().lambda(); + LambdaQueryWrapper appgetdoctorlistInfoQueryWrapper = new QueryWrapper().lambda(); appgetdoctorlistInfoQueryWrapper.eq(AppgetdoctorlistInfo::getDlogin, lymsChatgroup.getTarget()); List dLst = appgetdoctorlistInfoService.list(appgetdoctorlistInfoQueryWrapper); - if (dLst.size()==0) { + if (dLst.size() == 0) { continue; } - reusltJsonObject.put("doc",dLst.get(0)); - reusltJsonObject.put("from",lymsChatgroup.getFromp()); - reusltJsonObject.put("to",lymsChatgroup.getHxgroupid()); - reusltJsonObject.put("type","groupchat"); - reusltJsonObject.put("timestamp",lymsMessageList.size()>0?lymsMessageList.get(0).getSendtime().getTime():""); + reusltJsonObject.put("doc", dLst.get(0)); + reusltJsonObject.put("from", lymsChatgroup.getFromp()); + reusltJsonObject.put("to", lymsChatgroup.getHxgroupid()); + reusltJsonObject.put("type", "groupchat"); + reusltJsonObject.put("timestamp", lymsMessageList.size() > 0 ? lymsMessageList.get(0).getSendtime().getTime() : ""); rs.add(reusltJsonObject); } } /** - * 获取专家组\客服人员信息 + * 获取专家组\客服人员信息 + * * @param request * @return */ @GetMapping("getPreMsg") @TokenRequired - public BaseResponse getPreMsg(HttpServletRequest request){ - BaseResponse baseResponse =new BaseResponse(); - Map param=new HashMap<>(); - param.put("vtype",998); - List dLst=lymsDictService.listByMap(param); - if(dLst.size()>0){ + public BaseResponse getPreMsg(HttpServletRequest request) { + BaseResponse baseResponse = new BaseResponse(); + Map param = new HashMap<>(); + param.put("vtype", 998); + List dLst = lymsDictService.listByMap(param); + if (dLst.size() > 0) { baseResponse.setObject(dLst.get(0)); } return baseResponse; } + /** - * 医生端获取自己的患者列表 - * @param doctorId 医生id - * @param current 页数 - * @param size 条数 + * 医生端获取自己的患者列表 + * + * @param doctorId 医生id + * @param current 页数 + * @param size 条数 * @param synthesisQuery 综合筛选条件 - * @param did 科室id 值班医生/值班护士 时需要传。doctorId 就不能传 + * @param did 科室id 值班医生/值班护士 时需要传。doctorId 就不能传 * @return */ @GetMapping("getDoctorPatient") @TokenRequired - public BaseResponse getDoctorPatient(Integer doctorId,Integer current, Integer size,String synthesisQuery, - Integer did){ - BaseResponse baseResponse =new BaseResponse(); - if((null==doctorId && null==did)||(null!=doctorId && null!=did)){ + public BaseResponse getDoctorPatient(Integer doctorId, Integer current, Integer size, String synthesisQuery, + Integer did) { + BaseResponse baseResponse = new BaseResponse(); + if ((null == doctorId && null == did) || (null != doctorId && null != did)) { baseResponse.setErrorcode(ErrorCodeConstants.PARAMETER_ERROR); baseResponse.setErrormsg("参数错误"); return baseResponse; } - Page> page=new Page<>(current,size); - QueryWrapper queryWrapper=new QueryWrapper<>(); - if(null!=did){ + Page> page = new Page<>(current, size); + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (null != did) { //科室下的患者 queryWrapper.eq("pc.did", did); - }else { + } else { //医生下的患者 queryWrapper.eq("pc.dtid", doctorId); } - if (StringUtil.isNotEmpty(synthesisQuery)){ + if (StringUtil.isNotEmpty(synthesisQuery)) { queryWrapper.like("p.pname", synthesisQuery); } - List> list=lymsChatgroupService.getDoctorPatient(page,queryWrapper); + List> list = lymsChatgroupService.getDoctorPatient(page, queryWrapper); for (Map map : list) { - if(map.get("sex")!=null) { - map.put("sex",(int)map.get("sex")==1?"男":"女"); + if (map.get("sex") != null) { + map.put("sex", (int) map.get("sex") == 1 ? "男" : "女"); } - if(map.get("birth")!=null){ + if (map.get("birth") != null) { map.put("birth", DateUtil.getAge(DateUtil.parseYMD(map.get("birth").toString()))); } } @@ -675,14 +681,15 @@ public class ChatGroupController { } /** - * 前端3秒执行一次调用。聊天室状态(患者、医生分别查询) + * 前端3秒执行一次调用。聊天室状态(患者、医生分别查询) + * * @param groupId * @return */ @GetMapping("getChatStat") //@TokenRequired - public BaseResponse getChatStat(String groupId){ - BaseResponse baseResponse =new BaseResponse(); + public BaseResponse getChatStat(String groupId) { + BaseResponse baseResponse = new BaseResponse(); try { final LymsChatgroup chatgroup = lymsChatgroupService.getOne(new QueryWrapper() .lambda().eq(LymsChatgroup::getHxgroupid, groupId)); @@ -691,66 +698,72 @@ public class ChatGroupController { .lambda().eq(LymsTkrecord::getHxgroupid, groupId) .groupBy(LymsTkrecord::getHxgroupid));*/ final LymsTkrecord tkrecord = lymsTkrecordService.getLeastRecordByHxgroupId(groupId); - Map map= new LinkedHashMap<>(); - map.put("groupStat",null==chatgroup?"":chatgroup.getStat()); - map.put("tkrecordStat",null==tkrecord?"":tkrecord.getStat()); + Map map = new LinkedHashMap<>(); + map.put("groupStat", null == chatgroup ? "" : chatgroup.getStat()); + map.put("tkrecordStat", null == tkrecord ? "" : tkrecord.getStat()); baseResponse.setObject(map); } catch (Exception e) { e.printStackTrace(); } return baseResponse; } + /** - * 添加/修改 回访聊天信息自动回复话术 + * 添加/修改 回访聊天信息自动回复话术 + * * @param chatInfo * @return */ @PostMapping("addOrUpdateLymsChatInfo") @TokenRequired - public BaseResponse addOrUpdateLymsChatInfo(@RequestBody LymsChatInfo chatInfo){ - BaseResponse baseResponse =new BaseResponse(); + public BaseResponse addOrUpdateLymsChatInfo(@RequestBody LymsChatInfo chatInfo) { + BaseResponse baseResponse = new BaseResponse(); try { final boolean b = lymsChatInfoService.saveOrUpdate(chatInfo); - baseResponse.setErrorcode(b?0:1); - baseResponse.setErrormsg(b?"成功":"失败"); + baseResponse.setErrorcode(b ? 0 : 1); + baseResponse.setErrormsg(b ? "成功" : "失败"); } catch (Exception e) { e.printStackTrace(); } return baseResponse; } + /** - * 删除 回访聊天信息自动回复话术 + * 删除 回访聊天信息自动回复话术 + * * @param id * @return */ @DeleteMapping("delLymsChatInfo") @TokenRequired - public BaseResponse delLymsChatInfo(Integer id){ - BaseResponse baseResponse =new BaseResponse(); + public BaseResponse delLymsChatInfo(Integer id) { + BaseResponse baseResponse = new BaseResponse(); try { final boolean b = lymsChatInfoService.removeById(id); - baseResponse.setErrorcode(b?0:1); - baseResponse.setErrormsg(b?"成功":"失败"); + baseResponse.setErrorcode(b ? 0 : 1); + baseResponse.setErrormsg(b ? "成功" : "失败"); } catch (Exception e) { e.printStackTrace(); } return baseResponse; } + /** - * 查询列表 回访聊天信息自动回复话术 + * 查询列表 回访聊天信息自动回复话术 + * * @param chatInfo - * @param current 页数 - * @param size 条数 + * @param current 页数 + * @param size 条数 * @return */ @GetMapping("getLymsChatInfo") @TokenRequired - public BaseResponse getLymsChatInfo(LymsChatInfo chatInfo, int current, int size){ - BaseResponse baseResponse =new BaseResponse(); + public BaseResponse getLymsChatInfo(LymsChatInfo chatInfo, int current, int size) { + BaseResponse baseResponse = new BaseResponse(); try { QueryWrapper queryWrapper = Wrappers.query(chatInfo); Page page = new Page<>(current, size); - Page patientPagePage = lymsChatInfoService.page(page,queryWrapper); + Page patientPagePage = lymsChatInfoService.page(page, queryWrapper); baseResponse.setObject(patientPagePage); baseResponse.setErrorcode(0); baseResponse.setErrormsg("成功"); @@ -759,21 +772,23 @@ public class ChatGroupController { } return baseResponse; } + /** - * 患者点咨询。查询是否有回访。有就直接进入聊天。不消耗问诊卡 + * 患者点咨询。查询是否有回访。有就直接进入聊天。不消耗问诊卡 + * * @param chatgroup * @return */ @GetMapping("getYnReturnVisit") @TokenRequired - public BaseResponse getYnReturnVisit(LymsChatgroup chatgroup){ - BaseResponse baseResponse =new BaseResponse(); + public BaseResponse getYnReturnVisit(LymsChatgroup chatgroup) { + BaseResponse baseResponse = new BaseResponse(); try { final LymsChatgroup lymsChatgroup = lymsChatgroupService.getOne(new QueryWrapper() .lambda().eq(LymsChatgroup::getFromp, chatgroup.getFromp()) .eq(LymsChatgroup::getTarget, chatgroup.getTarget()) .eq(LymsChatgroup::getPcid, chatgroup.getPcid())); - if (null!=lymsChatgroup) { + if (null != lymsChatgroup) { baseResponse.setObject(lymsChatgroup); } baseResponse.setErrorcode(0); @@ -783,41 +798,43 @@ public class ChatGroupController { } return baseResponse; } + /** - * 有回访记录时。患者消耗问诊卡修改环信组状态 并加问诊记录,开启聊天 + * 有回访记录时。患者消耗问诊卡修改环信组状态 并加问诊记录,开启聊天 + * * @param chatgroup * @return */ @PostMapping("updateGroupStat") @TokenRequired @Transactional(rollbackFor = Exception.class) - public BaseResponse updateGroupStat(@RequestBody LymsChatgroup chatgroup){ - BaseResponse baseResponse =new BaseResponse(); + public BaseResponse updateGroupStat(@RequestBody LymsChatgroup chatgroup) { + BaseResponse baseResponse = new BaseResponse(); try { final boolean b = lymsChatgroupService.updateById(chatgroup); - if(!b){ + if (!b) { baseResponse.setErrorcode(1); - log.error("updateGroupStat回滚LymsChatgroup失败,{}",chatgroup); + log.error("updateGroupStat回滚LymsChatgroup失败,{}", chatgroup); throw new RuntimeException("回滚状态,执行失败,请联系管理员"); } final List patientInfos = patientInfoService.list(new QueryWrapper() .lambda().eq(PatientInfo::getCid, chatgroup.getPcid()).last(" limit 1")); if (CollectionUtils.isEmpty(patientInfos)) { baseResponse.setErrorcode(1); - log.error("updateGroupStat回滚查询患者信息失败,{}",chatgroup); + log.error("updateGroupStat回滚查询患者信息失败,{}", chatgroup); throw new RuntimeException("回滚状态,执行失败,请联系管理员"); } PatientInfo patientInfo = patientInfos.get(0); - LymsTkrecord tkrecord=new LymsTkrecord(); + LymsTkrecord tkrecord = new LymsTkrecord(); LymsTcard tcard = new LymsTcard(); tcard.setPid(patientInfo.getId()); tcard.setPcid(patientInfo.getCid()); // 获取问诊卡按照先从医院购买的问诊卡消费 - List rLst = lymsTcardService.queryUnused(tcard); + List rLst = lymsTcardService.queryUnused(tcard); if (rLst.size() > 0) { tkrecord.setCid(rLst.get(0).getId()); tkrecord.setFid((byte) 2); - }else{ + } else { //小程序购买的问诊卡 tcard.setPcid(null); tcard.setFid(1); @@ -825,10 +842,10 @@ public class ChatGroupController { if (xLst.size() > 0) { tkrecord.setCid(xLst.get(0).getId()); tkrecord.setFid((byte) 1); - }else{ + } else { baseResponse.setErrorcode(1); baseResponse.setErrormsg("已经没有咨询卡,请联系客服购买!"); - return baseResponse; + return baseResponse; } } @@ -843,7 +860,7 @@ public class ChatGroupController { final boolean save = lymsTkrecordService.save(tkrecord); if (!save) { baseResponse.setErrorcode(1); - log.error("updateGroupStat回滚保存tkrecode失败,{}",chatgroup); + log.error("updateGroupStat回滚保存tkrecode失败,{}", chatgroup); throw new RuntimeException("回滚状态,执行失败,请联系管理员"); } //修改同一群组记录的状态 @@ -857,58 +874,61 @@ public class ChatGroupController { baseResponse.setErrormsg("成功"); } catch (Exception e) { baseResponse.setErrorcode(1); - log.error("updateGroupStat异常",e); + log.error("updateGroupStat异常", e); //这里想触发事务回滚需抛运行时异常 throw new RuntimeException("回滚状态,执行失败,请联系管理员"); } return baseResponse; } + /** * 添加自动回复信息-查重 - * @param type 自动回复类型 - * @param illid 疾病id - * @param id 修改时用 + * + * @param type 自动回复类型 + * @param illid 疾病id + * @param id 修改时用 * @return true 可以使用,false已经存在 */ @GetMapping("getChatInfoRepetition") @TokenRequired - public BaseResponse getChatInfoRepetition(Integer type, Integer illid, @RequestParam(required = false) Integer id){ - BaseResponse baseResponse=new BaseResponse(); + public BaseResponse getChatInfoRepetition(Integer type, Integer illid, @RequestParam(required = false) Integer id) { + BaseResponse baseResponse = new BaseResponse(); try { - Map map= new HashMap<>(); - map.put("type", true);map.put("illid", true); - QueryWrapper queryWrapper=new QueryWrapper<>(); + Map map = new HashMap<>(); + map.put("type", true); + map.put("illid", true); + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("type", type); queryWrapper.eq("illid", illid); - if(null!=id){//修改的时候判断是否重复 - QueryWrapper queryWrapper2=new QueryWrapper<>(); + if (null != id) {//修改的时候判断是否重复 + QueryWrapper queryWrapper2 = new QueryWrapper<>(); queryWrapper2.eq("id", id); - LymsChatInfo chatInfo2=lymsChatInfoService.getOne(queryWrapper2); - List chatInfoList=lymsChatInfoService.list(queryWrapper); - if(CollectionUtils.isNotEmpty(chatInfoList)){ - if(null!=type && !chatInfo2.getType().equals(type)){ + LymsChatInfo chatInfo2 = lymsChatInfoService.getOne(queryWrapper2); + List chatInfoList = lymsChatInfoService.list(queryWrapper); + if (CollectionUtils.isNotEmpty(chatInfoList)) { + if (null != type && !chatInfo2.getType().equals(type)) { for (LymsChatInfo chatInfo : chatInfoList) { - if(chatInfo.getType().equals(type)){ + if (chatInfo.getType().equals(type)) { map.put("type", false); } } } - if(null!=illid && !chatInfo2.getIllid().equals(illid)){ + if (null != illid && !chatInfo2.getIllid().equals(illid)) { for (LymsChatInfo chatInfo : chatInfoList) { - if(chatInfo.getIllid().equals(illid)){ + if (chatInfo.getIllid().equals(illid)) { map.put("illid", false); } } } } baseResponse.setObject(map); - }else { - LymsChatInfo chatInfo=lymsChatInfoService.getOne(queryWrapper); - if (null!=chatInfo) { - if(null!=type && chatInfo.getType().equals(type)){ + } else { + LymsChatInfo chatInfo = lymsChatInfoService.getOne(queryWrapper); + if (null != chatInfo) { + if (null != type && chatInfo.getType().equals(type)) { map.put("type", false); } - if(null!=illid && illid.equals(chatInfo.getIllid())){ + if (null != illid && illid.equals(chatInfo.getIllid())) { map.put("illid", false); } } @@ -923,5 +943,85 @@ public class ChatGroupController { return baseResponse; } + @Value("${getAccessToken.on_off}") + public boolean on_off;//配置yml 微信公众号获取access_token(测试环境部署不要开启。会与线上环境冲突) + + @Autowired + private LymsPatientWechatService lymsPatientWechatService; + + private static final ScheduledExecutorService executor = Executors.newScheduledThreadPool(5); + /** + ** 患者如果有未读消息发送微信公众号消息给患者 + ** + ** @return + */ + @GetMapping("sendPatientWeChatMsg") + @TokenRequired + public BaseResponse sendPatientWeChatMsg(String idCard) { + if (!on_off) { + return BaseResponse.ok(); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("idcard", idCard); + queryWrapper.eq("status", 0); + LymsPatientWechat lymsPatientWechat = lymsPatientWechatService.getOne(queryWrapper); + if (lymsPatientWechat == null) { + lymsPatientWechat = new LymsPatientWechat(); + lymsPatientWechat.setCreated(new Date()); + lymsPatientWechat.setIdCard(idCard); + lymsPatientWechat.setStatus(0); + lymsPatientWechatService.save(lymsPatientWechat); + // 设置延迟时间(单位:毫秒) + long delayTimeInMillis = TimeUnit.MINUTES.toMillis(30); + // 创建一个Runnable对象作为需要延迟执行的任务 + PushTask pushTask = new PushTask() { + String idno = idCard; + @Override + public void run() { + log.info("开始执行患者未读消息推送 idno: {}",idno); + QueryWrapper qw = new QueryWrapper(); + qw.eq("idno", idno); + LymsPatient lymsPatient = lymsPatientService.getOne(qw); + + if (lymsPatient == null || StringUtil.isEmpty(lymsPatient.getGzopenid())) { + log.error("患者消息提醒,未获取到公众号openid:{}", lymsPatient); + return; + } + Map mapTemplate = new HashMap<>(); + mapTemplate.put("first", "患者消息提醒"); + mapTemplate.put("keyword1", new DataEntity("尊敬的患者:" + lymsPatient.getPname(), "#173177")); + mapTemplate.put("keyword2", new DataEntity("您对医生的回复满意吗?", "#173177")); + mapTemplate.put("remark", "请点击下方进入小程序,查看医生回访信息。"); + Map map = new HashMap<>(); + map.put("plogin", lymsPatient.getEnrolmentPhone()); + map.put("passwd", lymsPatient.getPpasswd()); + try { + Integer code = WeiXinUtil.DoctorSendWeChatMsg(lymsPatient.getGzopenid(), Constant.GZ_TEMPLATE_ID_DOCTOR_VISIT, mapTemplate, map); + log.info("患者消息提醒,code:{},{}", code, lymsPatient); + if (code==0){ + QueryWrapper query = new QueryWrapper<>(); + query.eq("idcard", idno); + query.eq("status", 0); + LymsPatientWechat patientWechat = lymsPatientWechatService.getOne(query); + if (patientWechat!=null){ + patientWechat.setStatus(1); + lymsPatientWechatService.updateById(patientWechat); + } + } + } catch (Exception e) { + log.error("患者消息提醒异常,{}", lymsPatient, e); + } + } + @Override + public PushTask setParam(String param) { + idno = param; + return this; + } + }; + // 将任务提交到线程池并指定延迟时间 + executor.schedule(pushTask, delayTimeInMillis, TimeUnit.MILLISECONDS); + } + return BaseResponse.ok(); + } } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/LymsHisInfoController.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/LymsHisInfoController.java index c7c1e9e..898e152 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/LymsHisInfoController.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/LymsHisInfoController.java @@ -1,27 +1,23 @@ package com.lyms.talkonlineweb.controller; -import com.baomidou.mybatisplus.core.conditions.Wrapper; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.lyms.talkonlineweb.annotation.Resubmit; import com.lyms.talkonlineweb.annotation.TokenRequired; -import com.lyms.talkonlineweb.domain.LymsDict; import com.lyms.talkonlineweb.domain.LymsHisInfo; -import com.lyms.talkonlineweb.domain.LymsUser; import com.lyms.talkonlineweb.result.BaseResponse; -import com.lyms.talkonlineweb.result.CheckResult; import com.lyms.talkonlineweb.service.LymsHisInfoService; -import com.lyms.talkonlineweb.service.LymsUserService; -import com.lyms.talkonlineweb.util.JwtUtils; import com.lyms.talkonlineweb.util.StringUtil; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.servlet.http.HttpServletRequest; -import java.util.Date; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; import java.util.List; /** @@ -33,8 +29,6 @@ public class LymsHisInfoController { @Autowired private LymsHisInfoService lymsHisInfoService; - @Autowired - private LymsUserService lymsUserService; /** * 获取医院患者His列表 @@ -60,6 +54,9 @@ public class LymsHisInfoController { .or().eq("phone", hisInfo.getSynthesisQuery()) .or().eq("idCard", hisInfo.getSynthesisQuery())); } + if (StringUtil.isNotEmpty(hisInfo.getDept())){ + query.eq("dept", hisInfo.getDept()); + } if(StringUtil.isNotEmpty(hisInfo.getStartCreatedtime())){ query.ge("created", hisInfo.getStartCreatedtime()); } @@ -78,12 +75,13 @@ public class LymsHisInfoController { */ @PostMapping("upHisInfo") @TokenRequired + @Resubmit public BaseResponse upHisInfo( @RequestBody @Validated LymsHisInfo lymsHisInfo){ BaseResponse baseResponse=new BaseResponse(); try { baseResponse.setErrorcode(0); baseResponse.setErrormsg("患者上传成功"); - String result = lymsHisInfoService.upHisInfo(lymsHisInfo); + String result = lymsHisInfoService.upHisInfo(lymsHisInfo,1); if(StringUtil.isNotEmpty(result)){ baseResponse.setErrorcode(1); baseResponse.setErrormsg(result); @@ -101,7 +99,7 @@ public class LymsHisInfoController { * @return */ @PostMapping("upAllHisInfo") - @TokenRequired + // @TokenRequired @Resubmit public BaseResponse upAllHisInfo(){ BaseResponse baseResponse=new BaseResponse(); @@ -151,7 +149,25 @@ public class LymsHisInfoController { } return baseResponse; } + @PostMapping("/export") + @TokenRequired + public void export( HttpServletResponse response) throws Exception{ + QueryWrapper query=new QueryWrapper(); + query.eq("up_type",2); + List list= lymsHisInfoService.list(query); - - + Workbook result = ExcelExportUtil.exportExcel( + new ExportParams("his病例上传失败列表", "his病例上传失败列表"), + LymsHisInfo.class, list); + //写出 + ServletOutputStream outputStream = response.getOutputStream(); + //设置请求头,解决文件名中文乱码问题 + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + response.setHeader("Content-disposition", + "attachment;filename=" + URLEncoder.encode("his病例上传失败列表","utf-8") + ".xls"); + result.write(outputStream); + outputStream.close(); + result.close(); + } } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/LymsWorkMessageController.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/LymsWorkMessageController.java new file mode 100644 index 0000000..1e59614 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/LymsWorkMessageController.java @@ -0,0 +1,72 @@ +package com.lyms.talkonlineweb.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.lyms.talkonlineweb.annotation.TokenRequired; +import com.lyms.talkonlineweb.domain.LymsHisInfo; +import com.lyms.talkonlineweb.result.BaseResponse; +import com.lyms.talkonlineweb.util.StringUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import com.lyms.talkonlineweb.domain.LymsWorkMessage; +import com.lyms.talkonlineweb.service.LymsWorkMessageService; + +/** + * ;(lyms_work_message)表控制层 + * @author : http://www.chiner.pro + * @date : 2024-2-6 + */ +@RestController +@RequestMapping("/workMessage") +public class LymsWorkMessageController{ + @Autowired + private LymsWorkMessageService lymsWorkMessageService; + + @GetMapping("getList") + @TokenRequired + public BaseResponse getList( int current, int size,Integer hospitalId + ,String dept,Integer type,String startTime,String endTime){ + BaseResponse baseResponse=new BaseResponse(); + Page page=new Page<>(current,size); + QueryWrapper query=new QueryWrapper(); + if(hospitalId!=null) { + query.eq("hospital_id", hospitalId); + } + if(null!=type){ + query.eq("type", type); + } + if(StringUtil.isNotEmpty(startTime)&&StringUtil.isNotEmpty(endTime)){ + query.ge("created", startTime+" 00:00:00"); + query.le("created", endTime+" 23:59:59"); + } + if (StringUtil.isNotEmpty(dept)){ + query.eq("dept", dept); + } + Page messagePage=lymsWorkMessageService.page(page,query); + baseResponse.setObject(messagePage); + return baseResponse; + } + @GetMapping("getInfo") + @TokenRequired + public BaseResponse getInfo(Integer id){ + BaseResponse baseResponse=new BaseResponse(); + LymsWorkMessage lymsWorkMessage= lymsWorkMessageService.getById(id); + lymsWorkMessage.setIsRead(1); + lymsWorkMessageService.updateById(lymsWorkMessage); + baseResponse.setObject(lymsWorkMessage); + return baseResponse; + } + @GetMapping("getReadList") + @TokenRequired + public BaseResponse getReadList(Integer type){ + BaseResponse baseResponse=new BaseResponse(); + QueryWrapper query=new QueryWrapper(); + if (type!=null){ + query.eq("type",type); + } + query.eq("is_read",0); + baseResponse.setObject(lymsWorkMessageService.list(query)); + return baseResponse; + } +} \ No newline at end of file diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/PushMessageController.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/PushMessageController.java index 3de77a9..53b1926 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/PushMessageController.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/PushMessageController.java @@ -1,5 +1,7 @@ package com.lyms.talkonlineweb.controller; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.lyms.talkonlineweb.annotation.TokenRequired; @@ -8,11 +10,13 @@ import com.lyms.talkonlineweb.result.BaseResponse; import com.lyms.talkonlineweb.service.LymsPushMessageService; import com.lyms.talkonlineweb.util.StringUtil; import lombok.RequiredArgsConstructor; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; @@ -65,4 +69,7 @@ public class PushMessageController { lymsPushMessageService.updateById(lymsPushMessage); return BaseResponse.ok(); } + + + } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsHisInfo.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsHisInfo.java index 76ec495..5acdfad 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsHisInfo.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsHisInfo.java @@ -1,5 +1,7 @@ package com.lyms.talkonlineweb.domain; +import cn.afterturn.easypoi.excel.annotation.Excel; +import cn.afterturn.easypoi.excel.annotation.ExcelTarget; import com.baomidou.mybatisplus.annotation.*; import java.io.Serializable; @@ -15,6 +17,7 @@ import javax.validation.constraints.NotNull; */ @TableName(value ="lyms_his_info") @Data +@ExcelTarget("lyms_his_info") public class LymsHisInfo implements Serializable { /** * @@ -28,6 +31,7 @@ public class LymsHisInfo implements Serializable { */ @TableField(value = "vcCardNo") @NotNull(message = "vccardno不能为空") + @Excel(name = "编号", width = 10,orderNum = "0") private String vccardno; /** @@ -35,6 +39,7 @@ public class LymsHisInfo implements Serializable { */ @TableField(value = "name") @NotNull(message = "name不能为空") + @Excel(name = "患者姓名", width = 20,orderNum = "1") private String name; /** @@ -56,6 +61,7 @@ public class LymsHisInfo implements Serializable { */ @TableField(value = "phone") @NotNull(message = "phone不能为空") + @Excel(name = "电话", width = 25,orderNum = "2") private String phone; /** @@ -63,6 +69,7 @@ public class LymsHisInfo implements Serializable { */ @TableField(value = "idCard") //@NotNull(message = "idcard不能为空") + @Excel(name = "身份证号", width = 30,orderNum = "3") private String idcard; /** @@ -70,6 +77,7 @@ public class LymsHisInfo implements Serializable { */ @TableField(value = "dept") @NotNull(message = "dept不能为空") + @Excel(name = "科室名称", width = 20,orderNum = "4") private String dept; /** @@ -77,6 +85,7 @@ public class LymsHisInfo implements Serializable { */ @TableField(value = "diagnose") @NotNull(message = "diagnose不能为空") + @Excel(name = "疾病名称", width = 20,orderNum = "5") private String diagnose; /** @@ -84,6 +93,7 @@ public class LymsHisInfo implements Serializable { */ @TableField(value = "doctor") @NotNull(message = "doctor不能为空") + @Excel(name = "医生姓名", width = 20,orderNum = "6") private String doctor; /** * 医院id @@ -124,8 +134,12 @@ public class LymsHisInfo implements Serializable { * 失败原因 */ @TableField(value = "remark") + @Excel(name = "失败原因", width = 50,orderNum = "8") private String remark; + @TableField(value = "is_open") + private Integer isOpen; + /** * 筛选开始时间 */ diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsPatientWechat.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsPatientWechat.java new file mode 100644 index 0000000..954090f --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsPatientWechat.java @@ -0,0 +1,26 @@ +package com.lyms.talkonlineweb.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +@Data +@TableName(value ="lyms_patient_wechat") +public class LymsPatientWechat { + /** + * id + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + @TableField(value = "idcard") + private String idCard; + @TableField(value = "status") + private Integer status; + @TableField(value = "created") + private Date created; + +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsWorkMessage.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsWorkMessage.java new file mode 100644 index 0000000..b792bcd --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsWorkMessage.java @@ -0,0 +1,54 @@ +package com.lyms.talkonlineweb.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + + /** + * ; + * @author : http://www.chiner.pro + * @date : 2024-2-6 + */ + @TableName(value ="lyms_work_message") + @Data +public class LymsWorkMessage implements Serializable{ + + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + /** ID */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id ; + /** his病例ID */ + @TableField(value = "his_info_id") + private Integer hisInfoId ; + /** 姓名 */ + private String username ; + /** 医院ID */ + @TableField(value = "hospital_id") + private Integer hospitalId ; + /** 医院名称 */ + private String hospital ; + /** 科室 */ + private String dept ; + /** 手机号 */ + private String phone ; + /** */ + private String content ; + /** 失败原因 */ + private String remark ; + /** 岗位类型 1为客服 2为编辑 3为学术经理 */ + private Integer type ; + /** 0为未读 1为已读 */ + @TableField(value = "is_read") + private Integer isRead ; + /** 创建时间 */ + private Date created ; + + +} \ No newline at end of file diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/enums/ChatEnum.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/enums/ChatEnum.java new file mode 100644 index 0000000..4b5d93e --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/enums/ChatEnum.java @@ -0,0 +1,29 @@ +package com.lyms.talkonlineweb.enums; + +import lombok.Getter; + +@Getter +public enum ChatEnum { + TWO(1,"第二天"), + FIVE(2,"第五天"), + TEN(3,"第十天"), + TWENTY(4,"第二十天"), + THIRTY(5,"第三十天"); + + private Integer code; + private String name; + + ChatEnum(Integer code,String name){ + this.code = code; + this.name = name; + } + public static String getName(Integer code) { + MessageEnum[] values = MessageEnum.values(); + for (MessageEnum value : values) { + if (value.getCode().equals(code)) { + return value.getName(); + } + } + return ""; + } +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsDoctorWorktimeMapper.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsDoctorWorktimeMapper.java index 178b982..131b86c 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsDoctorWorktimeMapper.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsDoctorWorktimeMapper.java @@ -14,6 +14,7 @@ import java.util.Map; public interface LymsDoctorWorktimeMapper extends BaseMapper { List selectDoctorChatCount(@Param("startTime") String startTime); + List selectDoctorChat(); } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsHisInfoMapper.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsHisInfoMapper.java index 6de5e95..1f1f30c 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsHisInfoMapper.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsHisInfoMapper.java @@ -2,12 +2,17 @@ package com.lyms.talkonlineweb.mapper; import com.lyms.talkonlineweb.domain.LymsHisInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; /** * @Entity com.lyms.talkonlineweb.domain.LymsHisInfo */ public interface LymsHisInfoMapper extends BaseMapper { + List selectByOrder(@Param("endTime") Date endTime); } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsPatientWechatMapper.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsPatientWechatMapper.java new file mode 100644 index 0000000..fe98b1f --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsPatientWechatMapper.java @@ -0,0 +1,8 @@ +package com.lyms.talkonlineweb.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.lyms.talkonlineweb.domain.LymsHisInfo; +import com.lyms.talkonlineweb.domain.LymsPatientWechat; + +public interface LymsPatientWechatMapper extends BaseMapper { +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsWorkMessageMapper.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsWorkMessageMapper.java new file mode 100644 index 0000000..a8270d0 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsWorkMessageMapper.java @@ -0,0 +1,15 @@ +package com.lyms.talkonlineweb.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import com.lyms.talkonlineweb.domain.LymsWorkMessage; + + /** + * ;(lyms_work_message)表数据库访问层 + * @author : http://www.chiner.pro + * @date : 2024-2-6 + */ +public interface LymsWorkMessageMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsDoctorWorktimeService.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsDoctorWorktimeService.java index e0c63c7..3775412 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsDoctorWorktimeService.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsDoctorWorktimeService.java @@ -13,4 +13,5 @@ import java.util.Map; */ public interface LymsDoctorWorktimeService extends IService { List selectDoctorChatCount(String startTime); + List selectDoctorChat(); } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsHisInfoService.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsHisInfoService.java index ec297bb..7097d52 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsHisInfoService.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsHisInfoService.java @@ -9,7 +9,7 @@ import com.lyms.talkonlineweb.result.Diagnose; */ public interface LymsHisInfoService extends IService { - String upHisInfo(LymsHisInfo lymsHisInfo) throws Exception; + String upHisInfo(LymsHisInfo lymsHisInfo,Integer upType) throws Exception; void upAllHisInfo(); diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsPatientWechatService.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsPatientWechatService.java new file mode 100644 index 0000000..9bc8a9a --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsPatientWechatService.java @@ -0,0 +1,7 @@ +package com.lyms.talkonlineweb.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.lyms.talkonlineweb.domain.LymsPatientWechat; + +public interface LymsPatientWechatService extends IService { +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsWorkMessageService.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsWorkMessageService.java new file mode 100644 index 0000000..364c51b --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsWorkMessageService.java @@ -0,0 +1,13 @@ +package com.lyms.talkonlineweb.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.lyms.talkonlineweb.domain.LymsWorkMessage; + + /** + * ;(lyms_work_message)表服务接口 + * @author : http://www.chiner.pro + * @date : 2024-2-6 + */ +public interface LymsWorkMessageService extends IService { + +} \ No newline at end of file diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/PushTask.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/PushTask.java new file mode 100644 index 0000000..e53bc0f --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/PushTask.java @@ -0,0 +1,5 @@ +package com.lyms.talkonlineweb.service; + +public interface PushTask extends Runnable { + PushTask setParam(String param); +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsDoctorWorktimeServiceImpl.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsDoctorWorktimeServiceImpl.java index 2a21272..2903932 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsDoctorWorktimeServiceImpl.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsDoctorWorktimeServiceImpl.java @@ -27,6 +27,11 @@ public class LymsDoctorWorktimeServiceImpl extends ServiceImpl selectDoctorChatCount(String startTime) { return doctorWorktimeMapper.selectDoctorChatCount(startTime); } + + @Override + public List selectDoctorChat() { + return doctorWorktimeMapper.selectDoctorChat(); + } } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsHisInfoServiceImpl.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsHisInfoServiceImpl.java index e940c6f..8c93b6e 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsHisInfoServiceImpl.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsHisInfoServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.lyms.talkonlineweb.domain.*; import com.lyms.talkonlineweb.enums.ChargeWay; +import com.lyms.talkonlineweb.enums.ChatEnum; import com.lyms.talkonlineweb.param.DataEntity; import com.lyms.talkonlineweb.result.BaseResponse; import com.lyms.talkonlineweb.result.Diagnose; @@ -19,6 +20,7 @@ import com.lyms.talkonlineweb.util.StringUtil; import com.lyms.talkonlineweb.util.WeiXinUtil; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.DigestUtils; @@ -31,6 +33,7 @@ import java.util.stream.Collectors; */ @Service @Log4j2 +@Transactional public class LymsHisInfoServiceImpl extends ServiceImpl implements LymsHisInfoService{ @@ -64,12 +67,18 @@ public class LymsHisInfoServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("pname",lymsHisInfo.getName()); - queryWrapper.eq("enrolment_phone",lymsHisInfo.getPhone()); - List list = lymsPatientService.list(queryWrapper); - if(CollectionUtils.isNotEmpty(list)){ - patient=list.get(0); + if (on_off) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(3000); + LymsPatient patient =null; + String idCard = lymsHisInfo.getIdcard(); + if (StringUtil.isEmpty(idCard)) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("pname",lymsHisInfo.getName()); + queryWrapper.eq("enrolment_phone",lymsHisInfo.getPhone()); + List list = lymsPatientService.list(queryWrapper); + if(CollectionUtils.isNotEmpty(list)){ + patient=list.get(0); + } + }else { + //判断患者是否存在 + LymsPatient patientQuery = new LymsPatient(); + patientQuery.setIdno(idCard.toLowerCase()); + patient = lymsPatientService.getOne(Wrappers.query(patientQuery)); } - }else { - //判断患者是否存在 - LymsPatient patientQuery = new LymsPatient(); - patientQuery.setIdno(idCard.toLowerCase()); - patient = lymsPatientService.getOne(Wrappers.query(patientQuery)); - } - if (patient!=null){ - List orderList= lymsOrderService.selectPushOrder(patient.getId()); - log.info("SendWeChatMsg--->orderList,"+orderList.toString()); - if (CollectionUtils.isNotEmpty(orderList)){ - LymsPushMessage lymsPushMessage=new LymsPushMessage(); - PushOrderResult order= orderList.get(0); - lymsPushMessage.setIdno(patient.getIdno()); - lymsPushMessage.setHospital(order.getHname()); - lymsPushMessage.setDept(order.getDname()); - lymsPushMessage.setCid(order.getCid()); - lymsPushMessage.setDiagnose(order.getIname()); - lymsPushMessage.setMessageType(3); - lymsPushMessage.setPushType(1); - lymsPushMessage.setTitle("通知:您有一条服务内容推送消息,请点击此处及时查看。"); - lymsPushMessage.setName(patient.getPname()); - lymsPushMessage.setPushTime(new Date()); - lymsPushMessage.setType(0); - //推送微信公众号 - Map map=new HashMap<>(); - map.put("keyword1",new DataEntity(order.getPname(),"#173177")); - map.put("keyword2",new DataEntity(order.getHname(),"#173177")); - map.put("keyword3",new DataEntity(order.getDname()+"【点击此提醒可查看服务具体内容】","#173177")); - - //公众号跳转小程序需要的登录信息 - Map mapInfo =lymsUserService.pLoginInfo(order.getPid(),3); - try { - log.info("SendWeChatMsg--->startup"); - Integer code= WeiXinUtil.SendWeChatMsg(order.getGzopenid(),Constant.GZ_TEMPLATE_ID,map,mapInfo); - log.info("SendWeChatMsg--->code, "+code); - if (null == code || code != 0) { - lymsPushMessage.setStatus(0); - lymsPushMessage.setRemark(String.valueOf(code)); - }else { - lymsPushMessage.setStatus(1); + if (patient!=null){ + List orderList= lymsOrderService.selectPushOrder(patient.getId()); + log.info("SendWeChatMsg--->orderList,"+orderList.toString()); + if (CollectionUtils.isNotEmpty(orderList)){ + LymsPushMessage lymsPushMessage=new LymsPushMessage(); + PushOrderResult order= orderList.get(0); + lymsPushMessage.setIdno(patient.getIdno()); + lymsPushMessage.setHospital(order.getHname()); + lymsPushMessage.setDept(order.getDname()); + lymsPushMessage.setCid(order.getCid()); + lymsPushMessage.setDiagnose(order.getIname()); + lymsPushMessage.setMessageType(3); + lymsPushMessage.setPushType(1); + lymsPushMessage.setTitle("通知:您有一条服务内容推送消息,请点击此处及时查看。"); + lymsPushMessage.setName(patient.getPname()); + lymsPushMessage.setPushTime(new Date()); + lymsPushMessage.setType(0); + //推送微信公众号 + Map map=new HashMap<>(); + map.put("keyword1",new DataEntity(order.getPname(),"#173177")); + map.put("keyword2",new DataEntity(order.getHname(),"#173177")); + map.put("keyword3",new DataEntity(order.getDname()+"【点击此提醒可查看服务具体内容】","#173177")); + + //公众号跳转小程序需要的登录信息 + Map mapInfo =lymsUserService.pLoginInfo(order.getPid(),3); + try { + log.info("SendWeChatMsg--->startup"); + Integer code= WeiXinUtil.SendWeChatMsg(order.getGzopenid(),Constant.GZ_TEMPLATE_ID,map,mapInfo); + log.info("SendWeChatMsg--->code, "+code); + if (null == code || code != 0) { + lymsPushMessage.setStatus(0); + lymsPushMessage.setRemark(String.valueOf(code)); + }else { + lymsPushMessage.setStatus(1); + } + lymsPushMessageService.save(lymsPushMessage); + } catch (Exception e) { + log.error("serviceContent Exception,"+e.getMessage()); } - lymsPushMessageService.save(lymsPushMessage); - } catch (Exception e) { - log.error("serviceContent Exception,"+e.getMessage()); } } + }catch (Exception e){ + log.error("upHisInfo---> Thread Exception"+e.getMessage()); } - }catch (Exception e){ - log.error("upHisInfo---> Thread Exception"+e.getMessage()); } - } - }).start(); + }).start(); + } + } return result; } @Override public void upAllHisInfo() { - LambdaQueryWrapper query = new QueryWrapper() - .lambda().eq(LymsHisInfo::getUpType, 0); - List list = this.list(query); + + List list = lymsHisInfoMapper.selectByOrder(new Date()); if (CollectionUtils.isNotEmpty(list)){ for(LymsHisInfo hisInfo : list){ try{ - String result = upHisInfo(hisInfo); + String result = upHisInfo(hisInfo,2); if(StringUtil.isNotEmpty(result)){ log.error("upAllHisInfo--->his患者上传失败,result={},info={}",result,hisInfo); } @@ -212,23 +223,47 @@ public class LymsHisInfoServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); + wrapper.eq("pname",lymsHisInfo.getName()); + wrapper.eq("enrolment_phone",lymsHisInfo.getPhone()); + List listPatient = lymsPatientService.list(wrapper); + LymsPatient patient=CollectionUtils.isNotEmpty(listPatient) ? listPatient.get(0) : null; + Boolean b=false; + Map params=new HashMap<>(); //姓名 String name = lymsHisInfo.getName(); if (StringUtil.isEmpty(name)){ - String remark= "患者姓名不能为空,请补全信息后再上传。"; - lymsHisInfo.setRemark(remark); - return remark; + if(patient!=null&&StringUtil.isNotEmpty(patient.getPname())) { + b=true; + String pname = patient.getPname(); + lymsHisInfo.setName(pname); + // this.updateById(lymsHisInfo); + }else { + String remark= "患者姓名不能为空,请补全信息后再上传。"; + // lymsHisInfo.setRemark(remark); + params.put(1,remark); + + } } //性别 Integer sex = null; if (StringUtil.isEmpty(lymsHisInfo.getSex())){ - String remark= "患者性别不能为空,请补全信息后再上传。"; - lymsHisInfo.setRemark(remark); - return remark; + if(patient!=null&&patient.getSex()!=null) { + b=true; + lymsHisInfo.setSex(patient.getSex()==1?"男":"女"); + // this.updateById(lymsHisInfo); + }else { + String remark= "患者性别不能为空,请补全信息后再上传。"; + //lymsHisInfo.setRemark(remark); + params.put(2,remark); + + } } if("男".equals(lymsHisInfo.getSex())){ sex=1; @@ -238,47 +273,66 @@ public class LymsHisInfoServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("pname",lymsHisInfo.getName()); - queryWrapper.eq("enrolment_phone",lymsHisInfo.getPhone()); - List list = lymsPatientService.list(queryWrapper); - if(CollectionUtils.isNotEmpty(list)){ - String idno = list.get(0).getIdno(); + if(CollectionUtils.isNotEmpty(listPatient)){ + b=true; + String idno = patient.getIdno(); lymsHisInfo.setIdcard(idno); - this.updateById(lymsHisInfo); + // this.updateById(lymsHisInfo); }else{ String remark= "患者身份证号不存在,请等待患者注册补全身份证信息后再上传。"; - lymsHisInfo.setRemark(remark); - return remark; + //lymsHisInfo.setRemark(remark); + params.put(5,remark); + } } - //判断患者是否存在 - LymsPatient patientQuery = new LymsPatient(); - patientQuery.setIdno(idCard.toLowerCase()); - LymsPatient patient = lymsPatientService.getOne(Wrappers.query(patientQuery)); + + + + + /* patientQuery.setIdno(idCard.toLowerCase()); + LymsPatient patient = lymsPatientService.getOne(Wrappers.query(patientQuery));*/ //判断医院是否平台收费,是否存在订单 LymsHospital lymsHospital = lymsHospitalService.getById(Integer.valueOf(lymsHisInfo.getHospitalId())); if(ChargeWay.PLATFORM.getCode()==lymsHospital.getChargeWay()){ if(patient == null){ String remark= "患者还没有缴费,暂时不能上传"; - lymsHisInfo.setRemark(remark); - return remark; + // lymsHisInfo.setRemark(remark); + params.put(6,remark); + } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("pid",patient.getId()); @@ -287,8 +341,10 @@ public class LymsHisInfoServiceImpl extends ServiceImpl list = lymsOrderService.list(queryWrapper); if(CollectionUtils.isEmpty(list)){ String remark= "患者还没有缴费,暂时不能上传"; - lymsHisInfo.setRemark(remark); - return remark; + // lymsHisInfo.setRemark(remark); + params.put(6,remark); + }else { + lymsHisInfo.setIsOpen(1); } } @@ -303,8 +359,9 @@ public class LymsHisInfoServiceImpl extends ServiceImpl1){ String remark= "该患者存在多种疾病,请手动上传"; - lymsHisInfo.setRemark(remark); - return remark; + //lymsHisInfo.setRemark(remark); + params.put(10,remark); } /* List diagnoseOrmIds = new ArrayList<>();//疾病映射ids @@ -377,25 +435,78 @@ public class LymsHisInfoServiceImpl extends ServiceImpl articleList= articleInfoService.list(new QueryWrapper() - .in("iid",diagnoseIds)); - if (CollectionUtils.isEmpty(articleList)||articleList.size()<18){ - String remark= "该患者疾病文章不足18篇"; - lymsHisInfo.setRemark(remark); - return remark; + if (diagnoseIds.size()>0){ + List articleList= articleInfoService.list(new QueryWrapper() + .in("iid",diagnoseIds)); + if (CollectionUtils.isEmpty(articleList)||articleList.size()<18){ + String remark= "该患者疾病文章不足18篇,(缺少"+(18-articleList.size())+"篇)"; + //lymsHisInfo.setRemark(remark); + params.put(11,remark); + } } + } + //当前科室不为产科并且是自动上传时才卡 + if(!deptName.contains("产科")&&type==2){ //回访 - List chatList= lymsChatInfoService.list(new QueryWrapper().in("illid",diagnoseIds)); - if (CollectionUtils.isEmpty(chatList) || - chatList.stream().collect(Collectors.groupingBy(LymsChatInfo::getType)).size()<5){ - String remark= "该患者疾病回访内容不足5种类型"; - lymsHisInfo.setRemark(remark); - return remark; + if (diagnoseIds.size()>0){ + List chatList= lymsChatInfoService.list(new QueryWrapper().in("illid",diagnoseIds)); + Map> map= chatList.stream().collect(Collectors.groupingBy(LymsChatInfo::getType)); + if (CollectionUtils.isEmpty(chatList) || + map.size()<5){ + //1:第二天2:第五天3:第十天4:第二十天5:第三十天 + String str=""; + for (int i = 1; i <6 ; i++) { + if (!map.containsKey(i)){ + str+= ChatEnum.getName(i)+" "; + } + } + String remark= "该患者疾病回访内容不足5种类型(缺少 "+str+")"; + //lymsHisInfo.setRemark(remark); + params.put(12,remark); + } } } + if (CollectionUtils.isNotEmpty(params)){ + //自动同步his用户基本信息 + if (b){ + this.updateById(lymsHisInfo); + } + List workMessageList=new ArrayList<>(); + StringBuffer sb=new StringBuffer(); + params.entrySet().stream().forEach(entry -> { + LymsWorkMessage lymsWorkMessage=new LymsWorkMessage(); + Integer key = entry.getKey(); + String value = entry.getValue(); + if (key==9 ||key==10 ){ + lymsWorkMessage.setType(1); + }else if (key==11 ||key==12){ + lymsWorkMessage.setType(2); + }else { + lymsWorkMessage.setType(3); + } + sb.append(value).append(","); + lymsWorkMessage.setRemark(value); + lymsWorkMessage.setCreated(new Date()); + lymsWorkMessage.setDept(deptName); + lymsWorkMessage.setHisInfoId(lymsHisInfo.getId()); + lymsWorkMessage.setHospital(lymsHospital.getHname()); + lymsWorkMessage.setHospitalId(lymsHospital.getHid()); + lymsWorkMessage.setPhone(phone); + lymsWorkMessage.setUsername(name); + workMessageList.add(lymsWorkMessage); + }); + if (CollectionUtils.isNotEmpty(workMessageList)){ + lymsWorkMessageService.saveBatch(workMessageList); + lymsHisInfo.setRemark(sb.toString().substring(0,sb.length()-1)); + } + return params.toString(); + } + + if (null != patient) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("pid", patient.getId()); @@ -448,6 +559,7 @@ public class LymsHisInfoServiceImpl extends ServiceImpl diagnoseMap) { diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsPatientWechatServiceImpl.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsPatientWechatServiceImpl.java new file mode 100644 index 0000000..a475d30 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsPatientWechatServiceImpl.java @@ -0,0 +1,14 @@ +package com.lyms.talkonlineweb.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.lyms.talkonlineweb.domain.LymsPatientWechat; +import com.lyms.talkonlineweb.mapper.LymsPatientWechatMapper; +import com.lyms.talkonlineweb.service.LymsPatientWechatService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +@Service +public class LymsPatientWechatServiceImpl extends ServiceImpl + implements LymsPatientWechatService { +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsWorkMessageServiceImpl.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsWorkMessageServiceImpl.java new file mode 100644 index 0000000..5737631 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsWorkMessageServiceImpl.java @@ -0,0 +1,22 @@ +package com.lyms.talkonlineweb.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.lyms.talkonlineweb.domain.LymsUser; +import com.lyms.talkonlineweb.mapper.LymsUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.lyms.talkonlineweb.domain.LymsWorkMessage; +import com.lyms.talkonlineweb.mapper.LymsWorkMessageMapper; +import com.lyms.talkonlineweb.service.LymsWorkMessageService; + /** + * ;(lyms_work_message)表服务实现类 + * @author : http://www.chiner.pro + * @date : 2024-2-6 + */ +@Service +public class LymsWorkMessageServiceImpl extends ServiceImpl implements LymsWorkMessageService{ + + + +} \ No newline at end of file diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/DoctorMsgNotifyTask.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/DoctorMsgNotifyTask.java index a87a96e..0cefcee 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/DoctorMsgNotifyTask.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/DoctorMsgNotifyTask.java @@ -1,6 +1,7 @@ package com.lyms.talkonlineweb.task; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.lyms.talkonlineweb.domain.DoctorChatCount; import com.lyms.talkonlineweb.domain.LymsDoctor; @@ -66,7 +67,43 @@ public class DoctorMsgNotifyTask { } + } + /** + * 每天上午11点和下午16点给医生推送未读消息 + */ + @Scheduled(cron = "0 0 11,16 * * ?") + public void doctorMsgTask(){ + if(!on_off){ + return; + } + String startTime = DateUtil.getDateTime(new Date(),"HH:mm"); + log.info("医生消息提醒,时间:{}",startTime); + List doctorChatCounts = doctorWorktimeService.selectDoctorChat(); + if (CollectionUtils.isNotEmpty(doctorChatCounts)){ + for(DoctorChatCount doctor: doctorChatCounts) { + if(StringUtil.isEmpty(doctor.getGzopenid())){ + log.warn("医生消息提醒,未获取到公众号openid:{}",doctor); + continue; + } + Map mapTemplate=new HashMap<>(); + mapTemplate.put("first","医生消息提醒"); + mapTemplate.put("keyword1",new DataEntity("尊敬的医生:"+doctor.getDname(),"#173177")); + mapTemplate.put("keyword2",new DataEntity("您有患者消息"+doctor.getCount()+"条,请及时查看","#173177")); + mapTemplate.put("remark","请点击下方进入小程序,根据病例点咨询查看医生回访信息。"); + Map map=new HashMap<>(); + map.put("plogin", doctor.getDlogin()); + map.put("passwd", doctor.getDpasswd()); + try { + Integer code= WeiXinUtil.DoctorSendWeChatMsg(doctor.getGzopenid(), Constant.GZ_TEMPLATE_ID_DOCTOR_VISIT,mapTemplate,map); + log.info("医生消息提醒,code:{},{}",code,doctor); + } catch (Exception e) { + log.error("医生消息提醒异常,{}",doctor,e); + } + } + } } + } + diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/HisPatientsAutoUploadTask.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/HisPatientsAutoUploadTask.java index 4398ef5..4769cb1 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/HisPatientsAutoUploadTask.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/HisPatientsAutoUploadTask.java @@ -35,17 +35,14 @@ public class HisPatientsAutoUploadTask { @Autowired private LymsHisInfoService lymsHisInfoService; - @Autowired - private LymsHospitalService lymsHospitalService; //医院 - - // @Scheduled(cron = "0 0 13,21 * * ?") + @Scheduled(cron = "0 0 0 * * ?") public void hisPatientsAutoUploadTask(){ if(!on_off){ return; } log.info("his患者信息自动上传任务开始..."); //查询3天内未上传的数据 - LambdaQueryWrapper query = new QueryWrapper() + /* LambdaQueryWrapper query = new QueryWrapper() .lambda().eq(LymsHisInfo::getUpType, 0) .ge(LymsHisInfo::getCreatedtime, DateUtil.addDay(new Date(),-3)); List list = lymsHisInfoService.list(query); @@ -53,7 +50,7 @@ public class HisPatientsAutoUploadTask { if (CollectionUtils.isNotEmpty(list)){ for(LymsHisInfo hisInfo : list){ try{ - String result = lymsHisInfoService.upHisInfo(hisInfo); + String result = lymsHisInfoService.upHisInfo(hisInfo,2); if(StringUtil.isNotEmpty(result)){ log.error("his患者上传失败,result={},info={}",result,hisInfo); } @@ -62,7 +59,8 @@ public class HisPatientsAutoUploadTask { log.error("his患者信息自动上传任务异常",e); } } - } + }*/ + lymsHisInfoService.upAllHisInfo(); log.info("his患者信息自动上传任务结束..."); diff --git a/talkonlineweb/src/main/resources/mapper/LymsDoctorWorktimeMapper.xml b/talkonlineweb/src/main/resources/mapper/LymsDoctorWorktimeMapper.xml index 0211c2f..5fd0d2b 100644 --- a/talkonlineweb/src/main/resources/mapper/LymsDoctorWorktimeMapper.xml +++ b/talkonlineweb/src/main/resources/mapper/LymsDoctorWorktimeMapper.xml @@ -35,4 +35,19 @@ + diff --git a/talkonlineweb/src/main/resources/mapper/LymsHisInfoMapper.xml b/talkonlineweb/src/main/resources/mapper/LymsHisInfoMapper.xml index b526667..3c64260 100644 --- a/talkonlineweb/src/main/resources/mapper/LymsHisInfoMapper.xml +++ b/talkonlineweb/src/main/resources/mapper/LymsHisInfoMapper.xml @@ -29,4 +29,14 @@ doctor,up_type,up_time,created, createdtime + diff --git a/talkonlineweb/src/main/resources/mapper/LymsPatientWechatMapper.xml b/talkonlineweb/src/main/resources/mapper/LymsPatientWechatMapper.xml new file mode 100644 index 0000000..24fbdb2 --- /dev/null +++ b/talkonlineweb/src/main/resources/mapper/LymsPatientWechatMapper.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/talkonlineweb/src/main/resources/mapper/LymsWorkMessageMapper.xml b/talkonlineweb/src/main/resources/mapper/LymsWorkMessageMapper.xml new file mode 100644 index 0000000..2bebef6 --- /dev/null +++ b/talkonlineweb/src/main/resources/mapper/LymsWorkMessageMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file -- 1.8.3.1