From b4b4678fc43d1247d1362c48837d37dc5b042710 Mon Sep 17 00:00:00 2001 From: cfl Date: Wed, 1 Nov 2023 18:22:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=A2=9E=E5=8A=A0=E6=92=A4?= =?UTF-8?q?=E5=9B=9E=E6=8E=A5=E5=8F=A3,=E7=8E=AF=E4=BF=A1=E8=81=8A?= =?UTF-8?q?=E5=A4=A9=E5=A2=9E=E5=8A=A0=E7=BB=84=E6=A0=87=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ChatGroupController.java | 28 +++++- .../talkonlineweb/controller/DoctorController.java | 10 +- .../controller/PatientController.java | 1 + .../lyms/talkonlineweb/domain/DoctorChatCount.java | 21 ++++ .../com/lyms/talkonlineweb/domain/LymsMessage.java | 9 ++ .../mapper/LymsDoctorWorktimeMapper.java | 5 + .../lyms/talkonlineweb/request/MsgDelParam.java | 19 ++++ .../service/LymsDoctorWorktimeService.java | 5 +- .../impl/LymsDoctorWorktimeServiceImpl.java | 12 +++ .../talkonlineweb/task/DoctorMsgNotifyTask.java | 71 ++++++++++++++ .../java/com/lyms/talkonlineweb/task/HXTask.java | 35 ++++++- .../java/com/lyms/talkonlineweb/util/Constant.java | 5 + .../com/lyms/talkonlineweb/util/HXService.java | 109 +++++++++++++++------ .../com/lyms/talkonlineweb/util/WeiXinUtil.java | 52 ++++++++++ .../resources/mapper/LymsDoctorWorktimeMapper.xml | 21 ++++ 15 files changed, 361 insertions(+), 42 deletions(-) create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/DoctorChatCount.java create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/request/MsgDelParam.java create mode 100644 talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/DoctorMsgNotifyTask.java 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 3fa9564..3babd8d 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/ChatGroupController.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/ChatGroupController.java @@ -12,6 +12,7 @@ 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.request.MsgDelParam; import com.lyms.talkonlineweb.result.BaseResponse; import com.lyms.talkonlineweb.service.*; import com.lyms.talkonlineweb.util.Constant; @@ -181,11 +182,34 @@ public class ChatGroupController { public BaseResponse saveMsg(@RequestBody LymsMessage message) { BaseResponse baseResponse = new BaseResponse(); message.setSendtime(new Date()); + message.setYn(1); boolean f = lymsMessageService.saveOrUpdate(message); baseResponse.setErrorcode(f == true ? 0 : 1); return baseResponse; } + @PostMapping("delMsg") + @TokenRequired + public BaseResponse delMsg(@RequestBody MsgDelParam msgDelParam) { + + + boolean b = hxService.recallMsg(msgDelParam); + 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){ + LymsMessage m = new LymsMessage(); + m.setId(lymsMessage.getId()); + m.setYn(0); + lymsMessageService.updateById(m); + } + return BaseResponse.ok(); + } + return BaseResponse.error("消息撤回失败"); + } + /** * 根据群组ID获取患者和医生信息 * @param chatgroup @@ -380,6 +404,7 @@ public class ChatGroupController { //聊天记录 LambdaQueryWrapper messageQueryWrapper=new QueryWrapper().lambda(); messageQueryWrapper.eq(LymsMessage::getTargetid, lymsChatgroup.getHxgroupid()) + .eq(LymsMessage::getYn,1) .orderByDesc(LymsMessage::getSendtime) .last(" limit 1"); final List lymsMessageList = lymsMessageService.list(messageQueryWrapper); @@ -532,7 +557,8 @@ public class ChatGroupController { //聊天记录 LambdaQueryWrapper messageQueryWrapper=new QueryWrapper().lambda(); messageQueryWrapper.eq(LymsMessage::getTargetid, lymsChatgroup.getHxgroupid()); - messageQueryWrapper.orderByDesc(LymsMessage::getSendtime); + 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():""); diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/DoctorController.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/DoctorController.java index e6ea207..abac6f5 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/DoctorController.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/DoctorController.java @@ -238,6 +238,7 @@ public class DoctorController { Map map=new HashMap<>(); map.put("doctor",doctor); map.put("token",jwt); + map.put("hxuser",hxService.getHxuser()); // if (StringUtil.isEmpty(doctor.getHxid())) { // JSONObject json = hxService.addUser(doctor.getDlogin(), Constant.COMMON_PASSWD, doctor.getDname()); // JSONArray rArr = json.getJSONArray("entities"); @@ -416,7 +417,7 @@ public class DoctorController { } /** * 小程序回访统计,按医生 - * @param groupId 群组ID + * @param * @return */ @GetMapping("getReturnVisit") @@ -532,12 +533,7 @@ public class DoctorController { if (!descriptionList.contains(doctor.getDlogin())) { //注册环信 if (StringUtil.isEmpty(doctor.getHxid())) { - JSONObject json = hxService.addUser(doctor.getDlogin(), Constant.COMMON_PASSWD, doctor.getDname()); - JSONArray rArr = json.getJSONArray("entities"); - if (rArr.size() > 0) { - doctor.setHxid(rArr.getJSONObject(0).getString("uuid")); - lymsDoctorService.updateById(doctor); - } + lymsDoctorService.addDoctorHxId(doctor); } //添加到环信群组中 JSONObject json = hxService.addUserHxGroup(lymsChatgroup.getHxgroupid(), doctor.getDlogin()); diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/PatientController.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/PatientController.java index bc5ef4d..463b6d3 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/PatientController.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/PatientController.java @@ -447,6 +447,7 @@ public class PatientController { map.put("token", jwt); map.put("pcaseSize", pcases.size()); map.put("isPregnant",flag); + map.put("hxuser",hxService.getHxuser()); baseResponse.setErrorcode(0); baseResponse.setObject(map); } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/DoctorChatCount.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/DoctorChatCount.java new file mode 100644 index 0000000..a2b5443 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/DoctorChatCount.java @@ -0,0 +1,21 @@ +package com.lyms.talkonlineweb.domain; + +import lombok.Data; + +@Data +public class DoctorChatCount { + + private Integer did; + + private String dlogin; + + private String dpasswd; + + private String dname; + + private String mobile; + + private String gzopenid; + + private Integer count; +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsMessage.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsMessage.java index 04aad9f..00815f0 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsMessage.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsMessage.java @@ -62,6 +62,15 @@ public class LymsMessage implements Serializable { @TableField(exist = false) private static final long serialVersionUID = 1L; + @TableField(value = "hx_msg_id") + private String hxMsgId; + + /** + * 1 有效 0 删除 + */ + @TableField(value = "del_status") + private int yn; + @Override public boolean equals(Object that) { if (this == that) { 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 b44c249..178b982 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsDoctorWorktimeMapper.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsDoctorWorktimeMapper.java @@ -1,15 +1,20 @@ package com.lyms.talkonlineweb.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.lyms.talkonlineweb.domain.DoctorChatCount; import com.lyms.talkonlineweb.domain.LymsDoctor; import com.lyms.talkonlineweb.domain.LymsDoctorWorkTime; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; import java.util.Map; public interface LymsDoctorWorktimeMapper extends BaseMapper { + + List selectDoctorChatCount(@Param("startTime") String startTime); + } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/request/MsgDelParam.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/request/MsgDelParam.java new file mode 100644 index 0000000..8226bcd --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/request/MsgDelParam.java @@ -0,0 +1,19 @@ +package com.lyms.talkonlineweb.request; + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class MsgDelParam { + + private String msg_id; + + private String to; + + private String chat_type; + + private String from; + + private Boolean force; +} 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 b69edc7..e0c63c7 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsDoctorWorktimeService.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsDoctorWorktimeService.java @@ -1,13 +1,16 @@ package com.lyms.talkonlineweb.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.lyms.talkonlineweb.domain.DoctorChatCount; import com.lyms.talkonlineweb.domain.LymsDoctorWorkTime; +import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; /** * */ public interface LymsDoctorWorktimeService extends IService { - + List selectDoctorChatCount(String startTime); } 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 dc83580..2a21272 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 @@ -2,11 +2,16 @@ package com.lyms.talkonlineweb.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.lyms.talkonlineweb.domain.DoctorChatCount; import com.lyms.talkonlineweb.domain.LymsDoctorWorkTime; import com.lyms.talkonlineweb.mapper.LymsDoctorWorktimeMapper; import com.lyms.talkonlineweb.service.LymsDoctorWorktimeService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.List; + /** * @@ -15,6 +20,13 @@ import org.springframework.stereotype.Service; public class LymsDoctorWorktimeServiceImpl extends ServiceImpl implements LymsDoctorWorktimeService{ + + @Resource + LymsDoctorWorktimeMapper doctorWorktimeMapper; + @Override + public List selectDoctorChatCount(String startTime) { + return doctorWorktimeMapper.selectDoctorChatCount(startTime); + } } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/DoctorMsgNotifyTask.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/DoctorMsgNotifyTask.java new file mode 100644 index 0000000..1698a29 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/DoctorMsgNotifyTask.java @@ -0,0 +1,71 @@ +package com.lyms.talkonlineweb.task; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.lyms.talkonlineweb.domain.DoctorChatCount; +import com.lyms.talkonlineweb.domain.LymsDoctor; +import com.lyms.talkonlineweb.domain.LymsDoctorWorkTime; +import com.lyms.talkonlineweb.service.LymsDoctorWorktimeService; +import com.lyms.talkonlineweb.util.Constant; +import com.lyms.talkonlineweb.util.DateUtil; +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.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@Log4j2 +public class DoctorMsgNotifyTask { + + @Value("${getAccessToken.on_off}") + public boolean on_off;//配置yml 微信公众号获取access_token(测试环境部署不要开启。会与线上环境冲突) + + @Autowired + LymsDoctorWorktimeService doctorWorktimeService; + + @Scheduled(initialDelay=10000, fixedRate=60000) + public void doctorMsgNotify(){ + if(!on_off){ + return; + } + String startTime = DateUtil.getDateTime(new Date(),"HH:mm"); + log.info("医生消息提醒,时间:{}",startTime); + List doctorChatCounts = doctorWorktimeService.selectDoctorChatCount(startTime); + int size = doctorChatCounts.size(); + log.info("医生消息提醒,数量:{}",size); + for(DoctorChatCount doctorChatCount: doctorChatCounts) { + if(StringUtil.isEmpty(doctorChatCount.getGzopenid())){ + log.warn("医生消息提醒,未获取到公众号openid:{}",doctorChatCount); + continue; + } + Map mapTemplate=new HashMap<>(); + mapTemplate.put("first","医生消息提醒"); + mapTemplate.put("keyword1","尊敬的医生:"+doctorChatCount.getDname()); + mapTemplate.put("keyword2","您有患者消息"+doctorChatCount.getCount()+"条,请及时查看"); + mapTemplate.put("remark","请点击下方进入小程序,根据病例点咨询查看医生回访信息。"); + Map map=new HashMap<>(); + map.put("plogin", doctorChatCount.getDlogin()); + map.put("passwd", doctorChatCount.getDpasswd()); + try { + Integer code= WeiXinUtil.DoctorSendWeChatMsg(doctorChatCount.getGzopenid(), Constant.GZ_TEMPLATE_ID_DOCTOR_VISIT,mapTemplate,map); + log.info("医生消息提醒,code:{},{}",code,doctorChatCount); + } catch (Exception e) { + log.error("医生消息提醒异常,{}",doctorChatCount,e); + } + + } + + + + } +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/HXTask.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/HXTask.java index bee041f..78bfbe9 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/HXTask.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/HXTask.java @@ -1,7 +1,9 @@ package com.lyms.talkonlineweb.task; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.lyms.talkonlineweb.domain.LymsDict; import com.lyms.talkonlineweb.domain.LymsDoctor; import com.lyms.talkonlineweb.domain.LymsPushedart; @@ -45,7 +47,7 @@ public class HXTask { param.put("vtype",999); List dcLst=lymsDictService.listByMap(param); if (dcLst.size()>0 && dcLst.get(0).getCode()==1){ - List dLst=lymsDoctorService.list(); + /*List dLst=lymsDoctorService.list(); List dlLst=dLst.stream().map(d->d.getDlogin()).collect(Collectors.toList()); String[] usernames = new String[dlLst.size()]; JSONObject jsonObject=hxService.chkUserStatus(dlLst.toArray(usernames)); @@ -62,7 +64,36 @@ public class HXTask { updateWrapper.eq("dlogin",json[0].replaceAll("\"","")); boolean f=lymsDoctorService.update(doctor,updateWrapper); - }); + });*/ + + QueryWrapper query = new QueryWrapper(); + query.isNotNull("hxid"); + query.orderByAsc("updated_time"); + int count = this.lymsDoctorService.count(query); + + int page = (int)Math.ceil((double)count / 50.0); + + for(int i = 1; i <= page; ++i) { + Page pageC = new Page((long)i, 50L); + Page pageDoctors = (Page)this.lymsDoctorService.page(pageC, query); + List dLst = pageDoctors.getRecords(); + List dlLst=dLst.stream().map(d->d.getDlogin()).collect(Collectors.toList()); + String[] usernames = new String[dlLst.size()]; + JSONObject jsonObject = this.hxService.chkUserStatus((String[])dlLst.toArray(usernames)); + jsonObject.getJSONArray("data").stream().forEach((e) -> { + UpdateWrapper updateWrapper = new UpdateWrapper(); + LymsDoctor doctor = new LymsDoctor(); + String[] json = e.toString().replaceAll("\\{", "").replaceAll("}", "").split(":"); + if ("online".equals(json[1].replaceAll("\"", ""))) { + doctor.setStat((byte)1); + } else { + doctor.setStat((byte)0); + } + + updateWrapper.eq("dlogin", json[0].replaceAll("\"", "")); + this.lymsDoctorService.update(doctor, updateWrapper); + }); + } } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/Constant.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/Constant.java index c677c0f..802833d 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/Constant.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/Constant.java @@ -14,6 +14,11 @@ public class Constant { */ public static final String MCHID = "1426009502"; + /** + * 医生端小程序appid + */ + public static final String DOCTOR_APP_ID = "wxd29c4c19dffc95d5"; + /** * 患者小程序appid diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/HXService.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/HXService.java index 60b020a..99804ea 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/HXService.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/HXService.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.util.IOUtils; +import com.lyms.talkonlineweb.request.MsgDelParam; import lombok.extern.log4j.Log4j2; import org.apache.commons.io.FileUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -43,9 +44,14 @@ public class HXService { @Value("${hx.app_name}") private String appName; + @Value("${hx.hxuser}") + private String hxuser; + @Value("${hx.hxpasswd}") + private String hxpasswd; + @Autowired private RestTemplate restTemplate; - private ResponseEntity resp; + //private ResponseEntity resp; // @Autowired // private RestTemplate restTemplate; @@ -62,6 +68,23 @@ public class HXService { // return service; // } + public String getHxuser(){ + return hxuser; + } + + public String getHxpasswd() { + return hxpasswd; + } + + /** + * 在环信注册的账号,增加前缀 + * @param username + * @return + */ + public String assembleHxLoginAccout(String username){ + return hxuser+"_"+username; + } + public String getUrl(){ return String.format("http://a1.easemob.com/%s/%s/",orgName,appName); } @@ -81,6 +104,7 @@ public class HXService { } public JSONObject getUser(String username){ + username = assembleHxLoginAccout(username); JSONObject user=new JSONObject(); String token=getToken(); HttpHeaders headers=new HttpHeaders(); @@ -101,6 +125,7 @@ public class HXService { } public JSONObject addUser(String username,String passwd,String nickname){ + username = assembleHxLoginAccout(username); JSONObject rs=new JSONObject(); Map param=new HashMap<>(); HttpHeaders headers=new HttpHeaders(); @@ -114,7 +139,7 @@ public class HXService { lParam.add(param); log.info("注册环信用户:"+param); HttpEntity entity=new HttpEntity(param,headers); - resp=restTemplate.postForEntity(getUrl()+"users",entity,String.class); + ResponseEntity resp=restTemplate.postForEntity(getUrl()+"users",entity,String.class); if (resp.getStatusCodeValue()==200){ rs= JSON.parseObject(resp.getBody()); } @@ -128,12 +153,13 @@ public class HXService { * @return */ public JSONObject delUser(String username){ + username = assembleHxLoginAccout(username); JSONObject user=new JSONObject(); String token=getToken(); HttpHeaders headers=new HttpHeaders(); headers.add("Authorization","Bearer "+token); HttpEntity param=new HttpEntity(headers); - resp=restTemplate.exchange(getUrl()+"users/"+username, HttpMethod.DELETE,param,String.class); + ResponseEntity resp=restTemplate.exchange(getUrl()+"users/"+username, HttpMethod.DELETE,param,String.class); if (resp.getStatusCodeValue()==200){ user= JSON.parseObject(resp.getBody()); } @@ -158,7 +184,7 @@ public class HXService { lParam.add(param); HttpEntity entity=new HttpEntity(param,headers); - resp=restTemplate.postForEntity(getUrl()+"messages",entity,String.class); + ResponseEntity resp = restTemplate.postForEntity(getUrl()+"messages",entity,String.class); if (resp.getStatusCodeValue()==200){ rs= JSON.parseObject(resp.getBody()); } @@ -168,11 +194,7 @@ public class HXService { /** * 群组发送消息 - * @param target hxgroupid - * @param target_type 发送的目标类型: - * • users:给用户发消息; - * • chatgroups:给群发消息; - * • chatrooms:给聊天室发消息。 + * @param target * @param msgContent * @param from * @return @@ -195,7 +217,7 @@ public class HXService { lParam.add(param); HttpEntity entity=new HttpEntity(param,headers); - resp=restTemplate.postForEntity(getUrl()+"messages",entity,String.class); + ResponseEntity resp =restTemplate.postForEntity(getUrl()+"messages",entity,String.class); if (resp.getStatusCodeValue()==200){ rs= JSON.parseObject(resp.getBody()); } @@ -216,22 +238,21 @@ public class HXService { headers.add("Authorization","Bearer "+token); HttpEntity param=new HttpEntity(headers); try { - resp = restTemplate.exchange(getUrl() + "chatmessages/" + time, HttpMethod.GET, param, String.class); - - if (resp.getStatusCodeValue()==200){ - msg= JSON.parseObject(resp.getBody()); - log.info(msg); - JSONArray data=msg.getJSONArray("data"); - if(data.size()>0){ - for (int i = 0; i < data.size() ; i++) { - String url=data.getJSONObject(i).getString("url"); - File file=getFileFromUrl(url); - FileUtils.copyURLToFile(new URL(url),file); - file=doUncompressFile(file); - cLst=FileUtils.readLines(file,"utf-8"); + ResponseEntity resp = restTemplate.exchange(getUrl() + "chatmessages/" + time, HttpMethod.GET, param, String.class); + if (resp.getStatusCodeValue()==200){ + msg= JSON.parseObject(resp.getBody()); + log.info(msg); + JSONArray data=msg.getJSONArray("data"); + if(data.size()>0){ + for (int i = 0; i < data.size() ; i++) { + String url=data.getJSONObject(i).getString("url"); + File file=getFileFromUrl(url); + FileUtils.copyURLToFile(new URL(url),file); + file=doUncompressFile(file); + cLst=FileUtils.readLines(file,"utf-8"); + } } } - } }catch (Exception e){ log.error(e.getMessage()); e.printStackTrace(); @@ -324,7 +345,9 @@ public class HXService { JSONObject rs=new JSONObject(); Map param=new HashMap<>(); HttpHeaders headers=new HttpHeaders(); - + for(int i = 0 ;i < members.length;i++){ + members[i] = assembleHxLoginAccout(members[i]); + } headers.add("Authorization","Bearer "+getToken()); List lParam=new ArrayList(); param.put("groupname", Arrays.toString(members)); @@ -335,7 +358,7 @@ public class HXService { lParam.add(param); HttpEntity entity=new HttpEntity(param,headers); - resp=restTemplate.postForEntity(getUrl()+"chatgroups",entity,String.class); + ResponseEntity resp=restTemplate.postForEntity(getUrl()+"chatgroups",entity,String.class); if (resp.getStatusCodeValue()==200){ rs= JSON.parseObject(resp.getBody()); } @@ -359,16 +382,18 @@ public class HXService { lParam.add(param); HttpEntity entity=new HttpEntity(param,headers); - resp=restTemplate.postForEntity(getUrl()+"users/batch/status",entity,String.class); + ResponseEntity resp=restTemplate.postForEntity(getUrl()+"users/batch/status",entity,String.class); if (resp.getStatusCodeValue()==200){ rs= JSON.parseObject(resp.getBody()); } log.info(rs); return rs; } + /** * 环信群组增加用户 - * @param usernames + * @param hxgid + * @param dlogin * @return */ public JSONObject addUserHxGroup(String hxgid,String dlogin) { @@ -379,16 +404,18 @@ public class HXService { headers.add("Authorization","Bearer "+getToken()); HttpEntity entity=new HttpEntity(param,headers); - resp=restTemplate.postForEntity(getUrl()+"chatgroups/"+hxgid+"/users/"+dlogin,entity,String.class); + ResponseEntity resp=restTemplate.postForEntity(getUrl()+"chatgroups/"+hxgid+"/users/"+dlogin,entity,String.class); if (resp.getStatusCodeValue()==200){ rs= JSON.parseObject(resp.getBody()); } log.info(rs); return rs; } + /** * 环信群组移除组用户 - * @param usernames + * @param hxgid + * @param dlogin * @return */ public JSONObject delUserHxGroup(String hxgid,String dlogin) { @@ -397,10 +424,30 @@ public class HXService { HttpHeaders headers=new HttpHeaders(); headers.add("Authorization","Bearer "+token); HttpEntity param=new HttpEntity(headers); - resp=restTemplate.exchange(getUrl()+"chatgroups/"+hxgid+"/users/"+dlogin, HttpMethod.DELETE,param,String.class); + ResponseEntity resp=restTemplate.exchange(getUrl()+"chatgroups/"+hxgid+"/users/"+dlogin, HttpMethod.DELETE,param,String.class); if (resp.getStatusCodeValue()==200){ rs= JSON.parseObject(resp.getBody()); } return rs; } + + /** + * 消息撤回接口 + * @param param + * @return + */ + public boolean recallMsg(MsgDelParam param){ + HttpHeaders headers=new HttpHeaders(); + headers.add("Authorization","Bearer "+getToken()); + HttpEntity entity=new HttpEntity(JSON.toJSON(param),headers); + ResponseEntity resp=restTemplate.postForEntity(getUrl()+"messages/msg_recall",entity,String.class); + log.info("消息撤回接口返回:{},{}",param,resp); + if (resp.getStatusCodeValue()==200){ + JSONObject json = JSON.parseObject(resp.getBody()); + if("yes".equals(json.getJSONObject("data").getString("recalled"))){ + return true; + } + } + return false; + } } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/WeiXinUtil.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/WeiXinUtil.java index 7e67367..8cb4233 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/WeiXinUtil.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/WeiXinUtil.java @@ -126,6 +126,58 @@ public class WeiXinUtil { } /** + * 医生端公众号消息 + * @param openid + * @param template_id + * @param dataMap + * @param mapInfo + * @return + * @throws Exception + */ + public static Integer DoctorSendWeChatMsg(String openid, String template_id, Map dataMap, Map mapInfo)throws Exception { + //整体参数map + Map paramMap = new HashMap(); + paramMap.put("touser", openid); + paramMap.put("template_id", template_id); + //跳转到小程序用到miniprogram集合参数 + paramMap.put("url", "http://weixin.qq.com"); + TreeMap miniprogram = new TreeMap(); + miniprogram.put("appid",Constant.DOCTOR_APP_ID); + //登录数据 + if(CollectionUtils.isNotEmpty(mapInfo) && null!=mapInfo.get("plogin") && null!=mapInfo.get("passwd")){ + if(null==mapInfo.get("type") || 1==(int) mapInfo.get("type")) {//null是正常推送状态。 1有值是亲属关注时的状态 2没有病例的时候 + miniprogram.put("pagepath", "pages/news/news?plogin=" + mapInfo.get("plogin") + "&passwd=" + mapInfo.get("passwd"));// 注意,这里是支持传参的!!! + }else { + miniprogram.put("pagepath","pages/concernList/concernList?plogin="+mapInfo.get("plogin")+"&passwd="+mapInfo.get("passwd"));// 没有病例跳转地址 + } + + }else { + //意外情况自行登录 + miniprogram.put("pagepath","pages/enroll/enroll");// 注意,这里是支持传参的!!! + } + paramMap.put("miniprogram", miniprogram); + paramMap.put("data", dataMap); + // 接口地址 + //处理access_token失效报40001 + Integer code=null; + for(int i=0;i<3;i++) { + String sendMsgApi = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + AccessTokenServlet.accessToken; + String result = repeatDoGetPost(sendMsgApi, "POST", paramMap); + log.info("template push result: {}",result); + if (StringUtil.isEmpty(result)) { + break; + } + Map resultMap = JSON.parseObject(result, HashMap.class); + code=Integer.parseInt(resultMap.get("errcode").toString()); + if(!code.equals(40001)){ + break; + } + Thread.sleep(1000 * 1);//解决access_token替换时间差保证access_token长期有效 + } + return code; + } + + /** * 获取微信用户的公众号openid * * @param code 登录时获取的code diff --git a/talkonlineweb/src/main/resources/mapper/LymsDoctorWorktimeMapper.xml b/talkonlineweb/src/main/resources/mapper/LymsDoctorWorktimeMapper.xml index 79f40fa..0211c2f 100644 --- a/talkonlineweb/src/main/resources/mapper/LymsDoctorWorktimeMapper.xml +++ b/talkonlineweb/src/main/resources/mapper/LymsDoctorWorktimeMapper.xml @@ -14,4 +14,25 @@ + + -- 1.8.3.1