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 1a95ebd..97bad67 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/ChatGroupController.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/ChatGroupController.java @@ -22,6 +22,7 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -77,6 +78,7 @@ public class ChatGroupController { @TokenRequired public BaseResponse saveChatGroup(@RequestBody LymsChatgroup group) { BaseResponse baseResponse = new BaseResponse(); + String retDlogin=group.getRetDlogin(); List gLst = lymsChatgroupService.list(Wrappers.query(group).orderByDesc("id")); if (group.getOwnerk() == null) { group.setOwnerk("test"); @@ -88,11 +90,35 @@ public class ChatGroupController { if (gLst.size() > 0) { LymsChatgroup group2 = gLst.get(0); group = group2; - //回访的状态才去执行 - if (1==gLst.get(0).getType()) { - group2.setStat(0); + //回访的状态才去执行(上次关闭了再次点击会开启) + if (1==group.getType()&&group.getStat()==1) { + group.setStat(0); //修改群组状态 - lymsChatgroupService.updateById(group2); + lymsChatgroupService.updateById(group); + //添加回访记录 + LymsReturnVisitRecord returnVisitRecord=new LymsReturnVisitRecord(); + returnVisitRecord.setDlogin(retDlogin);//前端传的当前登录医生账号 + returnVisitRecord.setDpid(doctor.getDpid()); + returnVisitRecord.setIdno(patient.getIdno()); + returnVisitRecord.setType(1); + returnVisitRecord.setPcid(group.getPcid()); + returnVisitRecord.setHxgroupid(group.getHxgroupid()); + lymsReturnVisitRecordService.save(returnVisitRecord); + } + //患者消费问诊卡 咨询结束后 + if(0==group.getType()){ + + group.setType(1); + lymsChatgroupService.updateById(group); + //添加回访记录 + LymsReturnVisitRecord returnVisitRecord2 = new LymsReturnVisitRecord(); + returnVisitRecord2.setDlogin(retDlogin);//前端传的当前登录医生账号 + returnVisitRecord2.setDpid(doctor.getDpid()); + returnVisitRecord2.setIdno(patient.getIdno()); + returnVisitRecord2.setType(1); + returnVisitRecord2.setPcid(group.getPcid()); + returnVisitRecord2.setHxgroupid(group.getHxgroupid()); + lymsReturnVisitRecordService.save(returnVisitRecord2); } } else { List adminDlogins=new ArrayList<>(); @@ -111,7 +137,8 @@ public class ChatGroupController { //查询值班医生 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())) { @@ -146,7 +173,6 @@ public class ChatGroupController { group.setDescription(StringUtils.join(adminDlogins.toArray(), ",")); //环信群组名称更改为姓名串-用于PC端问诊展示 group.setGroupname(StringUtils.join(groupnames.toArray(), ",")); - group.setCtime(new Date()); lymsChatgroupService.saveOrUpdate(group); } @@ -420,7 +446,8 @@ public class ChatGroupController { final LymsChatgroup chatgroup = lymsChatgroupService.getOne(new QueryWrapper() .lambda().eq(LymsChatgroup::getHxgroupid, groupId)); final LymsTkrecord tkrecord = lymsTkrecordService.getOne(new QueryWrapper() - .lambda().eq(LymsTkrecord::getHxgroupid, groupId)); + .lambda().eq(LymsTkrecord::getHxgroupid, groupId) + .groupBy(LymsTkrecord::getHxgroupid)); Map map= new LinkedHashMap<>(); map.put("groupStat",null==chatgroup?"":chatgroup.getStat()); map.put("tkrecordStat",null==tkrecord?"":tkrecord.getStat()); @@ -514,20 +541,82 @@ 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(); try { final boolean b = lymsChatgroupService.updateById(chatgroup); - baseResponse.setErrorcode(b?0:1); - baseResponse.setErrormsg(b?"成功":"失败"); + if(!b){ + baseResponse.setErrorcode(1); + throw new RuntimeException("回滚状态,执行失败,请联系管理员"); + } + final PatientInfo patientInfo = patientInfoService.getOne(new QueryWrapper() + .lambda().eq(PatientInfo::getCid, chatgroup.getPcid())); + if (null==patientInfo) { + baseResponse.setErrorcode(1); + throw new RuntimeException("回滚状态,执行失败,请联系管理员"); + } + LymsTkrecord tkrecord=new LymsTkrecord(); + LymsTcard tcard = new LymsTcard(); + tcard.setPid(patientInfo.getId()); + tcard.setPcid(patientInfo.getCid()); +// 获取问诊卡按照先从医院购买的问诊卡消费 + List rLst = lymsTcardService.list(Wrappers.query(tcard).notInSql("id", "SELECT r.cid FROM lyms_tkrecord r").orderByDesc("fid")); + +// 小程序购买的问诊卡 + tcard.setPcid(null); + tcard.setFid(1); + List xLst = lymsTcardService.list(Wrappers.query(tcard).notInSql("id", "SELECT r.cid FROM lyms_tkrecord r").orderByDesc("fid")); + + if (rLst.size() > 0 || xLst.size() > 0) { + if (rLst.size() > 0) { + tkrecord.setCid(rLst.get(0).getId()); + tkrecord.setFid((byte) 2); + } else { + tkrecord.setCid(xLst.get(0).getId()); + tkrecord.setFid((byte) 1); + } + + } else { + baseResponse.setErrorcode(1); + throw new RuntimeException("已经没有咨询卡,请联系客服购买!"); + } + + tkrecord.setPid(patientInfo.getId()); + tkrecord.setPcid(patientInfo.getCid()); + tkrecord.setDid(patientInfo.getDtid()); + tkrecord.setDid(patientInfo.getDtid()); + tkrecord.setHxgroupid(chatgroup.getHxgroupid()); + tkrecord.setCreatedtime(new Date()); + final boolean save = lymsTkrecordService.save(tkrecord); + if (!save) { + baseResponse.setErrorcode(1); + throw new RuntimeException("回滚状态,执行失败,请联系管理员"); + } + //修改同一群组记录的状态 + final List tkrecordList = lymsTkrecordService.list(new QueryWrapper() + .lambda().eq(LymsTkrecord::getHxgroupid, chatgroup.getHxgroupid())); + for (LymsTkrecord lymsTkrecord : tkrecordList) { + lymsTkrecord.setStat(0); + final boolean saveOrUpdate = lymsTkrecordService.updateById(lymsTkrecord); + if (!saveOrUpdate) { + baseResponse.setErrorcode(1); + throw new RuntimeException("回滚状态,执行失败,请联系管理员"); + } + } + baseResponse.setErrorcode(0); + baseResponse.setErrormsg("成功"); } catch (Exception e) { + baseResponse.setErrorcode(1); e.printStackTrace(); + //这里想触发事务回滚需抛运行时异常 + throw new RuntimeException("回滚状态,执行失败,请联系管理员"); } return baseResponse; } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/CommonController.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/CommonController.java index 1f5bb05..6ca920b 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/CommonController.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/CommonController.java @@ -63,7 +63,10 @@ public class CommonController { tkrecord.setUpdatedby(updateby); tkrecord.setHxgroupid(hxgroupid); boolean f=lymsTkrecordService.saveOrUpdate(tkrecord); - + LymsChatgroup lymsChatgroup= new LymsChatgroup(); + lymsChatgroup.setId(gLst.get(0).getId()); + lymsChatgroup.setStat(1); + lymsChatgroupService.updateById(lymsChatgroup); baseResponse.setErrorcode(f==true?0:1); }else { if (CollectionUtils.isNotEmpty(gLst) && gLst.get(0).getType()==1) { diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/TkRecordController.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/TkRecordController.java index 1a47129..959de8e 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/TkRecordController.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/TkRecordController.java @@ -82,86 +82,98 @@ public class TkRecordController { return baseResponse; } } - LymsChatgroup group =new LymsChatgroup(); LymsDoctor doctor=lymsDoctorService.getById(tkrecord.getDid()); LymsPatient patient=lymsPatientService.getById(tkrecord.getPid()); - group.setOwnerk("test"); - List adminDlogins=new ArrayList<>(); - adminDlogins.add(patient.getIdno()); - List groupnames=new ArrayList<>(); - groupnames.add(patient.getPname()); - //患者注册环信 - if (StringUtil.isEmpty(patient.getHxid())) { - JSONObject json = hxService.addUser(patient.getIdno(), Constant.COMMON_PASSWD, patient.getPname()); - JSONArray rArr = json.getJSONArray("entities"); - if (rArr.size() > 0) { - patient.setHxid(rArr.getJSONObject(0).getString("uuid")); - lymsPatientService.updateById(patient); - } - } - //查询值班医生/值班护士 - List doctorAminList= lymsDoctorService.list(new QueryWrapper() - .lambda().eq(LymsDoctor::getDpid, doctor.getDpid()) - .in(LymsDoctor::getAdminType, Arrays.asList(1,2))); - //科室值班医生注册环信 - for (LymsDoctor lymsDoctor : doctorAminList) { - if(StringUtil.isEmpty(lymsDoctor.getHxid())) { - JSONObject json = hxService.addUser(lymsDoctor.getDlogin(), Constant.COMMON_PASSWD, lymsDoctor.getDname()); + + List gLst = lymsChatgroupService.list(new QueryWrapper() + .lambda().eq(LymsChatgroup::getPcid, tkrecord.getPcid())); + //之前有这个病例的问诊就不用新创建组 + if (0==gLst.size()) { + group.setOwnerk("test"); + List adminDlogins=new ArrayList<>(); + adminDlogins.add(patient.getIdno()); + List groupnames=new ArrayList<>(); + groupnames.add(patient.getPname()); + //患者注册环信 + if (StringUtil.isEmpty(patient.getHxid())) { + JSONObject json = hxService.addUser(patient.getIdno(), Constant.COMMON_PASSWD, patient.getPname()); JSONArray rArr = json.getJSONArray("entities"); if (rArr.size() > 0) { - lymsDoctor.setHxid(rArr.getJSONObject(0).getString("uuid")); - lymsDoctorService.updateById(lymsDoctor); + patient.setHxid(rArr.getJSONObject(0).getString("uuid")); + lymsPatientService.updateById(patient); } } - adminDlogins.add(lymsDoctor.getDlogin()); - groupnames.add(lymsDoctor.getDname()); - } - if ( ! adminDlogins.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); + //查询值班医生/值班护士 + List doctorAminList= lymsDoctorService.list(new QueryWrapper() + .lambda().eq(LymsDoctor::getDpid, doctor.getDpid()) + .in(LymsDoctor::getAdminType, Arrays.asList(1,2)) + .orderByAsc(LymsDoctor::getAdminType)); + //科室值班医生注册环信 + for (LymsDoctor lymsDoctor : doctorAminList) { + if(StringUtil.isEmpty(lymsDoctor.getHxid())) { + JSONObject json = hxService.addUser(lymsDoctor.getDlogin(), Constant.COMMON_PASSWD, lymsDoctor.getDname()); + JSONArray rArr = json.getJSONArray("entities"); + if (rArr.size() > 0) { + lymsDoctor.setHxid(rArr.getJSONObject(0).getString("uuid")); + lymsDoctorService.updateById(lymsDoctor); + } } + adminDlogins.add(lymsDoctor.getDlogin()); + groupnames.add(lymsDoctor.getDname()); + } + if ( ! adminDlogins.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); + } + } + adminDlogins.add(doctor.getDlogin()); + groupnames.add(doctor.getDname()); } - adminDlogins.add(doctor.getDlogin()); - groupnames.add(doctor.getDname()); - } - log.info("创建环信组:{} description:{}", group.getOwnerk(), StringUtils.join(adminDlogins.toArray(), ",")); - JSONObject rJson = hxService.addChatGroups(StringUtils.join(adminDlogins.toArray(), ","), group.getOwnerk(), adminDlogins.toArray(new String[adminDlogins.size()])); - log.info("rJson:" + rJson); - group.setHxgroupid(rJson.getJSONObject("data").getString("groupid")); - group.setDescription(StringUtils.join(adminDlogins.toArray(), ",")); - //环信群组名称更改为姓名串-用于PC端问诊展示 - group.setGroupname(StringUtils.join(groupnames.toArray(), ",")); - group.setFromp(patient.getIdno()); - group.setTarget(doctor.getDlogin()); - group.setRetDlogin(tkrecord.getRetDlogin());//前端传的当前登录医生账号 - group.setPcid(tkrecord.getPcid()); - if(null==tkrecord.getType()) { - lymsChatgroupService.saveOrUpdate(group); - lymsTkrecordService.save(tkrecord); + log.info("创建环信组:{} description:{}", group.getOwnerk(), StringUtils.join(adminDlogins.toArray(), ",")); + JSONObject rJson = hxService.addChatGroups(StringUtils.join(adminDlogins.toArray(), ","), group.getOwnerk(), adminDlogins.toArray(new String[adminDlogins.size()])); + log.info("rJson:" + rJson); + group.setHxgroupid(rJson.getJSONObject("data").getString("groupid")); + group.setDescription(StringUtils.join(adminDlogins.toArray(), ",")); + //环信群组名称更改为姓名串-用于PC端问诊展示 + group.setGroupname(StringUtils.join(groupnames.toArray(), ",")); + group.setFromp(patient.getIdno()); + group.setTarget(doctor.getDlogin()); + group.setPcid(tkrecord.getPcid()); + if(null==tkrecord.getType()) { + lymsChatgroupService.saveOrUpdate(group); + tkrecord.setHxgroupid(group.getHxgroupid()); + lymsTkrecordService.save(tkrecord); + }else { + group.setType(1); + lymsChatgroupService.saveOrUpdate(group); + LymsReturnVisitRecord returnVisitRecord=new LymsReturnVisitRecord(); + returnVisitRecord.setDlogin(tkrecord.getRetDlogin());//前端传的当前登录医生账号 + returnVisitRecord.setDpid(doctor.getDpid()); + returnVisitRecord.setIdno(patient.getIdno()); + returnVisitRecord.setType(1); + returnVisitRecord.setPcid(tkrecord.getPcid()); + returnVisitRecord.setHxgroupid(group.getHxgroupid()); + lymsReturnVisitRecordService.save(returnVisitRecord); + } }else { - group.setType(1); - lymsChatgroupService.saveOrUpdate(group); - LymsReturnVisitRecord returnVisitRecord=new LymsReturnVisitRecord(); - returnVisitRecord.setDlogin(group.getRetDlogin()); - returnVisitRecord.setDpid(doctor.getDpid()); - returnVisitRecord.setIdno(patient.getIdno()); - returnVisitRecord.setType(1); - returnVisitRecord.setPcid(tkrecord.getPcid()); - returnVisitRecord.setHxgroupid(rJson.getJSONObject("data").getString("groupid")); - lymsReturnVisitRecordService.save(returnVisitRecord); + group=gLst.get(0); + tkrecord.setHxgroupid(group.getHxgroupid()); + lymsTkrecordService.save(tkrecord); } + baseResponse.setObject(group); baseResponse.setErrormsg("成功"); } catch (Exception e) { + baseResponse.setErrorcode(1); baseResponse.setErrormsg("失败"); e.printStackTrace(); } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsChatgroup.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsChatgroup.java index 7b3cae7..cb07d74 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsChatgroup.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsChatgroup.java @@ -74,16 +74,17 @@ public class LymsChatgroup implements Serializable { */ @TableField(value = "stat") private Integer stat; - /** - * 回访医生dlogin - */ - @TableField(value = "retdlogin") - private String retDlogin; + /** * 病例id */ @TableField(value = "pcid") private Integer pcid; + /** + * 回访医生dlogin + */ + @TableField(exist = false) + private String retDlogin; @TableField(exist = false) private static final long serialVersionUID = 1L; diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsPatientMapper.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsPatientMapper.java index 0f4245b..2cfdb54 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsPatientMapper.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/mapper/LymsPatientMapper.java @@ -41,6 +41,22 @@ public interface LymsPatientMapper extends BaseMapper { "GROUP BY p.idno "+ ""}) List getPatient(@Param("ew")QueryWrapper ew); + + @Select("SELECT " + + "p.id," + + "p.pname," + + "p.idno," + + "p.hxid," + + "pc.pcid," + + "pc.did," + + "pc.dname," + + "dc.dlogin," + + "pc.createdtime " + + "FROM " + + "lyms_patient p " + + "LEFT JOIN lyms_pcase pc ON pc.pid = p.id " + + "LEFT JOIN lyms_doctor dc ON dc.did=pc.dtid ") + List> getPcInfoList(); } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsPatientService.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsPatientService.java index 1e3da04..24fcd49 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsPatientService.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/LymsPatientService.java @@ -11,8 +11,11 @@ import java.util.Map; * */ public interface LymsPatientService extends IService { + List> getAppPatientHospital(Integer patientId); List getPatient(QueryWrapper queryWrapper); + + List> getPcInfoList(); } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsPatientServiceImpl.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsPatientServiceImpl.java index 2eb3d1a..cb1465f 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsPatientServiceImpl.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/service/impl/LymsPatientServiceImpl.java @@ -29,6 +29,11 @@ public class LymsPatientServiceImpl extends ServiceImpl getPatient(QueryWrapper queryWrapper) { return lymsPatientMapper.getPatient(queryWrapper); } + + @Override + public List> getPcInfoList() { + return lymsPatientMapper.getPcInfoList(); + } } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/PushChatInfoTask.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/PushChatInfoTask.java index 5d0db8c..0817851 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/PushChatInfoTask.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/PushChatInfoTask.java @@ -1,22 +1,23 @@ package com.lyms.talkonlineweb.task; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.lyms.talkonlineweb.domain.*; import com.lyms.talkonlineweb.service.*; -import com.lyms.talkonlineweb.util.Constant; -import com.lyms.talkonlineweb.util.StringUtil; -import com.lyms.talkonlineweb.util.WeiXinUtil; +import com.lyms.talkonlineweb.util.*; import lombok.Data; import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.StringUtils; 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 org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 回访信息回复 @@ -25,7 +26,8 @@ import java.util.Map; @Component @Log4j2 public class PushChatInfoTask { - + @Value("${hx.hxuser}") + private String hxuser; @Autowired private LymsArticleService lymsArticleService; @Autowired @@ -41,24 +43,403 @@ public class PushChatInfoTask { @Autowired private LymsPcaseService lymsPcaseService;//病例 @Autowired - private LymsDictService lymsDictService; + private LymsDoctorService lymsDoctorService; @Autowired public LymsPushAttentionRecordService lymsPushAttentionRecordService; @Autowired private LymsChatgroupService lymsChatgroupService; @Autowired private LymsReturnVisitRecordService lymsReturnVisitRecordService; + @Autowired + private HXService hxService; + @Autowired + private LymsIllnessService lymsIllnessService; + @Autowired + private LymsChatInfoService lymsChatInfoService; + @Autowired + private LymsMessageService lymsMessageService; + + @Autowired + private LymsTkrecordService lymsTkrecordService; /** - * 每天12点执行回访信息系统回复 + * 每天19点执行回访信息系统回复 */ -// @Scheduled(cron = "0 0 12 * * ?") +// @Scheduled(cron = "0 0 19 * * ?") public void pushChatInfo() { - final List chatgroupList = lymsChatgroupService.list(); - for (LymsChatgroup lymsChatgroup : chatgroupList) { - final List lymsReturnVisitRecords = lymsReturnVisitRecordService.list(new QueryWrapper() - .lambda().eq(LymsReturnVisitRecord::getHxgroupid, lymsChatgroup.getHxgroupid())); + List> PcInfoList=lymsPatientService.getPcInfoList(); + for (Map map : PcInfoList) { + LymsChatgroup chatgroup = lymsChatgroupService.getOne(new QueryWrapper() + .lambda().eq(LymsChatgroup::getPcid, (Integer)map.get("pcid"))); + LymsPatient patient= lymsPatientService.getOne(new QueryWrapper() + .lambda().eq(LymsPatient::getIdno, map.get("idno").toString())); + LymsDoctor doctor= lymsDoctorService.getOne(new QueryWrapper() + .lambda().eq(LymsDoctor::getDlogin, map.get("dlogin").toString())); + if(null==chatgroup){ + //创建聊天群组 + chatgroup=addChatGroup(map,patient,doctor); + } + + if (null!=chatgroup) { + final List returnVisitRecords = lymsReturnVisitRecordService.list(new QueryWrapper() + .lambda().eq(LymsReturnVisitRecord::getPcid, (Integer)map.get("pcid"))); + List doctorAminList= lymsDoctorService.list(new QueryWrapper() + .lambda().eq(LymsDoctor::getDpid, doctor.getDpid()) + .in(LymsDoctor::getAdminType, Arrays.asList(1,2)) + .orderByAsc(LymsDoctor::getAdminType)); + int day = DateUtil.daysBetween(DateUtil.parseYMD(map.get("createdtime").toString()),new Date()); + switch (returnVisitRecords.size()) { + case 0: + if (day==2) { + final List lymsIllnessList = lymsIllnessService.list(new QueryWrapper() + .lambda().eq(LymsIllness::getPcid, (Integer) map.get("pcid"))); + int i=0; + for (LymsIllness lymsIllness : lymsIllnessList) { + final LymsChatInfo chatInfo = lymsChatInfoService.getOne(new QueryWrapper() + .lambda().eq(LymsChatInfo::getIllid, lymsIllness.getIid()) + .eq(LymsChatInfo::getType, 1)); + //推送回访 + if (null!=chatInfo && StringUtil.isNotEmpty(chatgroup.getHxgroupid()) && null!=doctor) { + JSONObject jsonObject = hxService.sendGroupMsg(new String[]{chatgroup.getHxgroupid()}, chatInfo.getConten(), doctor.getDlogin()); + if (null!=jsonObject) { + i++; + //保存发送消息记录 + LymsMessage message=new LymsMessage(); + message.setContent(chatInfo.getConten()); + message.setFromid(doctor.getDlogin()); + message.setTargetid(chatgroup.getHxgroupid()); + message.setMtype("TEXT"); + message.setSendtime(new Date()); + message.setType(1); + lymsMessageService.save(message); + } + } + } + if (i!=0) { + //增加回访记录 + LymsReturnVisitRecord returnVisitRecord=new LymsReturnVisitRecord(); + returnVisitRecord.setDlogin(doctor.getDlogin());//第二天,就诊医生自动回复 + returnVisitRecord.setDpid(doctor.getDpid()); + returnVisitRecord.setIdno(patient.getIdno()); + returnVisitRecord.setType(0); + returnVisitRecord.setHxgroupid(chatgroup.getHxgroupid()); + lymsReturnVisitRecordService.save(returnVisitRecord); + chatgroup.setStat(0); + final boolean b = lymsChatgroupService.updateById(chatgroup); + if (!b) { + break; + } + //修改同一群组记录的状态 + final List tkrecordList = lymsTkrecordService.list(new QueryWrapper() + .lambda().eq(LymsTkrecord::getHxgroupid, chatgroup.getHxgroupid())); + for (LymsTkrecord lymsTkrecord : tkrecordList) { + lymsTkrecord.setStat(0); + final boolean saveOrUpdate = lymsTkrecordService.updateById(lymsTkrecord); + if (!saveOrUpdate) { + break; + } + } + } + } + break; + case 1: + if (day==5) { + //获取值班护士 + String dlogin=""; + for (LymsDoctor lymsDoctor : doctorAminList) { + if (lymsDoctor.getAdminType()==2) { + dlogin=lymsDoctor.getDlogin(); + return; + } + } + final List lymsIllnessList = lymsIllnessService.list(new QueryWrapper() + .lambda().eq(LymsIllness::getPcid, (Integer) map.get("pcid"))); + int i=0; + for (LymsIllness lymsIllness : lymsIllnessList) { + final LymsChatInfo chatInfo = lymsChatInfoService.getOne(new QueryWrapper() + .lambda().eq(LymsChatInfo::getIllid, lymsIllness.getIid()) + .eq(LymsChatInfo::getType, 2)); + //推送回访 + if (null!=chatInfo && StringUtil.isNotEmpty(chatgroup.getHxgroupid()) && null!=doctor) { + JSONObject jsonObject = hxService.sendGroupMsg(new String[]{chatgroup.getHxgroupid()}, chatInfo.getConten(), StringUtil.isEmpty(dlogin)? doctor.getDlogin():dlogin); + if (null!=jsonObject) { + i++; + //保存发送消息记录 + LymsMessage message=new LymsMessage(); + message.setContent(chatInfo.getConten()); + message.setFromid(StringUtil.isEmpty(dlogin)? doctor.getDlogin():dlogin); + message.setTargetid(chatgroup.getHxgroupid()); + message.setMtype("TEXT"); + message.setSendtime(new Date()); + message.setType(1); + lymsMessageService.save(message); + } + } + } + if (i!=0) { + //增加回访记录 + LymsReturnVisitRecord returnVisitRecord=new LymsReturnVisitRecord(); + returnVisitRecord.setDlogin(StringUtil.isEmpty(dlogin)? doctor.getDlogin():dlogin);//第五天,值班护士自动回复 + returnVisitRecord.setDpid(doctor.getDpid()); + returnVisitRecord.setIdno(patient.getIdno()); + returnVisitRecord.setType(0); + returnVisitRecord.setHxgroupid(chatgroup.getHxgroupid()); + lymsReturnVisitRecordService.save(returnVisitRecord); + chatgroup.setStat(0); + final boolean b = lymsChatgroupService.updateById(chatgroup); + if (!b) { + break; + } + //修改同一群组记录的状态 + final List tkrecordList = lymsTkrecordService.list(new QueryWrapper() + .lambda().eq(LymsTkrecord::getHxgroupid, chatgroup.getHxgroupid())); + for (LymsTkrecord lymsTkrecord : tkrecordList) { + lymsTkrecord.setStat(0); + final boolean saveOrUpdate = lymsTkrecordService.updateById(lymsTkrecord); + if (!saveOrUpdate) { + break; + } + } + } + } + break; + case 2: + if (day==10) { + //获取值班医生 + String dlogin=""; + for (LymsDoctor lymsDoctor : doctorAminList) { + if (lymsDoctor.getAdminType()==1) { + dlogin=lymsDoctor.getDlogin(); + return; + } + } + final List lymsIllnessList = lymsIllnessService.list(new QueryWrapper() + .lambda().eq(LymsIllness::getPcid, (Integer) map.get("pcid"))); + int i=0; + for (LymsIllness lymsIllness : lymsIllnessList) { + final LymsChatInfo chatInfo = lymsChatInfoService.getOne(new QueryWrapper() + .lambda().eq(LymsChatInfo::getIllid, lymsIllness.getIid()) + .eq(LymsChatInfo::getType, 3)); + //推送回访 + if (null!=chatInfo && StringUtil.isNotEmpty(chatgroup.getHxgroupid()) && null!=doctor) { + JSONObject jsonObject = hxService.sendGroupMsg(new String[]{chatgroup.getHxgroupid()}, chatInfo.getConten(), StringUtil.isEmpty(dlogin)? doctor.getDlogin():dlogin); + if (null!=jsonObject) { + i++; + //保存发送消息记录 + LymsMessage message=new LymsMessage(); + message.setContent(chatInfo.getConten()); + message.setFromid(StringUtil.isEmpty(dlogin)? doctor.getDlogin():dlogin); + message.setTargetid(chatgroup.getHxgroupid()); + message.setMtype("TEXT"); + message.setSendtime(new Date()); + message.setType(1); + lymsMessageService.save(message); + } + } + } + if (i!=0) { + //增加回访记录 + LymsReturnVisitRecord returnVisitRecord=new LymsReturnVisitRecord(); + returnVisitRecord.setDlogin(StringUtil.isEmpty(dlogin)? doctor.getDlogin():dlogin);//第十天,值班医生自动回复 + returnVisitRecord.setDpid(doctor.getDpid()); + returnVisitRecord.setIdno(patient.getIdno()); + returnVisitRecord.setType(0); + returnVisitRecord.setHxgroupid(chatgroup.getHxgroupid()); + lymsReturnVisitRecordService.save(returnVisitRecord); + chatgroup.setStat(0); + final boolean b = lymsChatgroupService.updateById(chatgroup); + if (!b) { + break; + } + //修改同一群组记录的状态 + final List tkrecordList = lymsTkrecordService.list(new QueryWrapper() + .lambda().eq(LymsTkrecord::getHxgroupid, chatgroup.getHxgroupid())); + for (LymsTkrecord lymsTkrecord : tkrecordList) { + lymsTkrecord.setStat(0); + final boolean saveOrUpdate = lymsTkrecordService.updateById(lymsTkrecord); + if (!saveOrUpdate) { + break; + } + } + } + } + break; + case 3: + if (day==20) { + final List lymsIllnessList = lymsIllnessService.list(new QueryWrapper() + .lambda().eq(LymsIllness::getPcid, (Integer) map.get("pcid"))); + int i=0; + for (LymsIllness lymsIllness : lymsIllnessList) { + final LymsChatInfo chatInfo = lymsChatInfoService.getOne(new QueryWrapper() + .lambda().eq(LymsChatInfo::getIllid, lymsIllness.getIid()) + .eq(LymsChatInfo::getType, 4)); + //推送回访 + if (null!=chatInfo && StringUtil.isNotEmpty(chatgroup.getHxgroupid()) && null!=doctor) { + JSONObject jsonObject = hxService.sendGroupMsg(new String[]{chatgroup.getHxgroupid()}, chatInfo.getConten(), doctor.getDlogin()); + if (null!=jsonObject) { + i++; + //保存发送消息记录 + LymsMessage message=new LymsMessage(); + message.setContent(chatInfo.getConten()); + message.setFromid(doctor.getDlogin()); + message.setTargetid(chatgroup.getHxgroupid()); + message.setMtype("TEXT"); + message.setSendtime(new Date()); + message.setType(1); + lymsMessageService.save(message); + } + } + } + if (i!=0) { + //增加回访记录 + LymsReturnVisitRecord returnVisitRecord=new LymsReturnVisitRecord(); + returnVisitRecord.setDlogin(doctor.getDlogin());//第二十天,就诊医生自动回复 + returnVisitRecord.setDpid(doctor.getDpid()); + returnVisitRecord.setIdno(patient.getIdno()); + returnVisitRecord.setType(0); + returnVisitRecord.setHxgroupid(chatgroup.getHxgroupid()); + lymsReturnVisitRecordService.save(returnVisitRecord); + chatgroup.setStat(0); + final boolean b = lymsChatgroupService.updateById(chatgroup); + if (!b) { + break; + } + //修改同一群组记录的状态 + final List tkrecordList = lymsTkrecordService.list(new QueryWrapper() + .lambda().eq(LymsTkrecord::getHxgroupid, chatgroup.getHxgroupid())); + for (LymsTkrecord lymsTkrecord : tkrecordList) { + lymsTkrecord.setStat(0); + final boolean saveOrUpdate = lymsTkrecordService.updateById(lymsTkrecord); + if (!saveOrUpdate) { + break; + } + } + } + } + break; + case 4: + if (day==30) { + //获取值班医生 + String dlogin=""; + for (LymsDoctor lymsDoctor : doctorAminList) { + if (lymsDoctor.getAdminType()==1) { + dlogin=lymsDoctor.getDlogin(); + return; + } + } + final List lymsIllnessList = lymsIllnessService.list(new QueryWrapper() + .lambda().eq(LymsIllness::getPcid, (Integer) map.get("pcid"))); + int i=0; + for (LymsIllness lymsIllness : lymsIllnessList) { + final LymsChatInfo chatInfo = lymsChatInfoService.getOne(new QueryWrapper() + .lambda().eq(LymsChatInfo::getIllid, lymsIllness.getIid()) + .eq(LymsChatInfo::getType, 5)); + //推送回访 + if (null!=chatInfo && StringUtil.isNotEmpty(chatgroup.getHxgroupid()) && null!=doctor) { + JSONObject jsonObject = hxService.sendGroupMsg(new String[]{chatgroup.getHxgroupid()}, chatInfo.getConten(), StringUtil.isEmpty(dlogin)? doctor.getDlogin():dlogin); + if (null!=jsonObject) { + i++; + //保存发送消息记录 + LymsMessage message=new LymsMessage(); + message.setContent(chatInfo.getConten()); + message.setFromid(StringUtil.isEmpty(dlogin)? doctor.getDlogin():dlogin); + message.setTargetid(chatgroup.getHxgroupid()); + message.setMtype("TEXT"); + message.setSendtime(new Date()); + message.setType(1); + lymsMessageService.save(message); + } + } + } + if (i!=0) { + //增加回访记录 + LymsReturnVisitRecord returnVisitRecord=new LymsReturnVisitRecord(); + returnVisitRecord.setDlogin(StringUtil.isEmpty(dlogin)? doctor.getDlogin():dlogin);//第三十天,值班医生自动回复 + returnVisitRecord.setDpid(doctor.getDpid()); + returnVisitRecord.setIdno(patient.getIdno()); + returnVisitRecord.setType(0); + returnVisitRecord.setHxgroupid(chatgroup.getHxgroupid()); + lymsReturnVisitRecordService.save(returnVisitRecord); + chatgroup.setStat(0); + final boolean b = lymsChatgroupService.updateById(chatgroup); + if (!b) { + break; + } + //修改同一群组记录的状态 + final List tkrecordList = lymsTkrecordService.list(new QueryWrapper() + .lambda().eq(LymsTkrecord::getHxgroupid, chatgroup.getHxgroupid())); + for (LymsTkrecord lymsTkrecord : tkrecordList) { + lymsTkrecord.setStat(0); + final boolean saveOrUpdate = lymsTkrecordService.updateById(lymsTkrecord); + if (!saveOrUpdate) { + break; + } + } + } + } + break; + } + } + } + } + public LymsChatgroup addChatGroup(Map map,LymsPatient patient,LymsDoctor doctor) { + List adminDlogins=new ArrayList<>(); + adminDlogins.add(patient.getIdno()); + List groupnames=new ArrayList<>(); + groupnames.add(patient.getPname()); + //患者注册环信 + if (StringUtil.isEmpty(patient.getHxid())) { + JSONObject json = hxService.addUser(patient.getIdno(), Constant.COMMON_PASSWD, patient.getPname()); + JSONArray rArr = json.getJSONArray("entities"); + if (rArr.size() > 0) { + patient.setHxid(rArr.getJSONObject(0).getString("uuid")); + lymsPatientService.updateById(patient); + } + } + //查询值班医生/值班护士 + List doctorAminList= lymsDoctorService.list(new QueryWrapper() + .lambda().eq(LymsDoctor::getDpid, doctor.getDpid()) + .in(LymsDoctor::getAdminType, Arrays.asList(1,2)) + .orderByAsc(LymsDoctor::getAdminType)); + //科室值班医生注册环信 + for (LymsDoctor lymsDoctor : doctorAminList) { + if(StringUtil.isEmpty(lymsDoctor.getHxid())) { + JSONObject json = hxService.addUser(lymsDoctor.getDlogin(), Constant.COMMON_PASSWD, lymsDoctor.getDname()); + JSONArray rArr = json.getJSONArray("entities"); + if (rArr.size() > 0) { + lymsDoctor.setHxid(rArr.getJSONObject(0).getString("uuid")); + lymsDoctorService.updateById(lymsDoctor); + } + } + adminDlogins.add(lymsDoctor.getDlogin()); + groupnames.add(lymsDoctor.getDname()); + } + if ( ! adminDlogins.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); + } + } + adminDlogins.add(doctor.getDlogin()); + groupnames.add(doctor.getDname()); } + JSONObject rJson = hxService.addChatGroups(StringUtils.join(adminDlogins.toArray(), ","), hxuser, adminDlogins.toArray(new String[adminDlogins.size()])); + LymsChatgroup group =new LymsChatgroup(); + group.setGroupname(StringUtils.join(groupnames.toArray(), ",")); + group.setDescription(StringUtils.join(adminDlogins.toArray(), ",")); + group.setOwnerk(hxuser); + group.setFromp(patient.getIdno()); + group.setHxgroupid(rJson.getJSONObject("data").getString("groupid")); + group.setTarget(doctor.getDlogin()); + group.setType(1); + group.setStat(0); + group.setPcid((Integer)map.get("pcid")); + lymsChatgroupService.save(group); + return group; } } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/DateUtil.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/DateUtil.java index 3f7cdac..bacae97 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/DateUtil.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/DateUtil.java @@ -3,6 +3,7 @@ package com.lyms.talkonlineweb.util; import lombok.extern.slf4j.Slf4j; import java.text.DateFormat; +import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -231,4 +232,33 @@ public class DateUtil { return (Math.abs(year1 - year2) + i); } + + /** + * 时间差 + * @param start + * @param end + * @return + */ + public static int daysBetween(Date smdate, Date bdate) { + if (smdate == null || bdate == null) { + return -1; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + smdate = sdf.parse(sdf.format(smdate)); + bdate = sdf.parse(sdf.format(bdate)); + Calendar cal = Calendar.getInstance(); + cal.setTime(smdate); + long time1 = cal.getTimeInMillis(); + cal.setTime(bdate); + long time2 = cal.getTimeInMillis(); + long between_days = (time2 - time1) / (1000 * 3600 * 24); + return Integer.parseInt(String.valueOf(between_days)); + } catch (ParseException e) { + e.printStackTrace(); + } + + return 0; + } + } 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 c9b66b0..c7855e1 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/HXService.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/HXService.java @@ -160,6 +160,43 @@ public class HXService { } /** + * 群组发送消息 + * @param target hxgroupid + * @param target_type 发送的目标类型: + * • users:给用户发消息; + * • chatgroups:给群发消息; + * • chatrooms:给聊天室发消息。 + * @param msgContent + * @param from + * @return + */ + public JSONObject sendGroupMsg(String[] target ,String msgContent,String from){ + JSONObject rs=new JSONObject(); + Map param=new HashMap<>(); + HttpHeaders headers=new HttpHeaders(); + + headers.add("Authorization","Bearer "+getToken()); + List lParam=new ArrayList(); + param.put("target_type","chatgroups"); + param.put("target",target); + Map msg=new HashMap<>(); + msg.put("type","txt"); + msg.put("msg",msgContent); + + param.put("msg",msg); + param.put("from",from); + + lParam.add(param); + HttpEntity entity=new HttpEntity(param,headers); + resp=restTemplate.postForEntity(getUrl()+"messages",entity,String.class); + if (resp.getStatusCodeValue()==200){ + rs= JSON.parseObject(resp.getBody()); + } + log.info(rs); + return rs; + } + + /** * 获取聊天记录 * @param time 查询的时间格式为10位数字形式(YYYYMMDDHH) * @return