| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 | package com.yihu.wlyy.service.app.talk;import java.io.UnsupportedEncodingException;import java.sql.ResultSet;import java.sql.SQLException;import java.text.SimpleDateFormat;import java.util.*;import javax.transaction.Transactional;import com.yihu.wlyy.entity.doctor.profile.Doctor;import com.yihu.wlyy.repository.doctor.DoctorDao;import com.yihu.wlyy.util.DateUtil;import com.yihu.wlyy.util.HttpUtil;import com.yihu.wlyy.util.SystemConf;import org.json.JSONArray;import org.json.JSONObject;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import org.springframework.stereotype.Service;import com.yihu.wlyy.entity.discussion.WlyyTalkGroup;import com.yihu.wlyy.entity.discussion.WlyyTalkGroupMember;import com.yihu.wlyy.repository.discussion.DiscussionGroupDao;import com.yihu.wlyy.repository.discussion.DiscussionGroupMemberDao;import com.yihu.wlyy.service.BaseService;import org.springframework.util.StringUtils;@Service@Transactionalpublic class TalkGroupService extends BaseService {    // 讨论组DAO    @Autowired    DiscussionGroupDao discussionGroupDao;    @Autowired    // 讨论组成员DAO    DiscussionGroupMemberDao discussionGroupMemberDao;    @Autowired    JdbcTemplate jdbcTemplate;    @Autowired    DoctorDao doctorDao;    /**     * 讨论组保存     *     * @param talkGroup     * @return     */    public void saveTalkGroup(WlyyTalkGroup talkGroup, List<WlyyTalkGroupMember> members) {        discussionGroupDao.save(talkGroup);        discussionGroupMemberDao.save(members);    }    /**     * 保存成员     *     * @param members     */    public void saveMembers(List<WlyyTalkGroupMember> members) {        discussionGroupMemberDao.save(members);    }    /**     * 讨论组成员添加     *     * @param member     */    public void saveTalkMember(WlyyTalkGroupMember member) {        discussionGroupMemberDao.save(member);    }    /**     * 移除讨论组成员     *     * @param groupCode  讨论组标识     * @param memberCode 成员标识     */    public void deleteTalkMember(String groupCode, String memberCode) {        WlyyTalkGroupMember member = discussionGroupMemberDao.findByGroupCodeAndMemberCode(groupCode, memberCode);        member.setStatus(2);    }    /**     * 创建咨询对应的讨论组     *     * @param doctor     * @param doctorName     * @param patient     * @param patientName     */    public void createConsultTalkGroup(String doctor, String doctorName, String hospitalCode, String hospitalName,                                       String patient, String patientName, String consult) {        //讨论组建立        WlyyTalkGroup talkGroup = new WlyyTalkGroup();        SimpleDateFormat dateFormat = new SimpleDateFormat("yyy-MM-dd");        String name = patientName + "—咨询(" + dateFormat.format(new Date()) + ")";        talkGroup.setCode(getCode());        talkGroup.setName(name);        talkGroup.setType(1);        talkGroup.setCreator(patient);        talkGroup.setCreatorName(patientName);        talkGroup.setPatient(patient);        talkGroup.setPatientName(patientName);        talkGroup.setHospitalCode(hospitalCode);        talkGroup.setHospitalName(hospitalName);        talkGroup.setConsultCode(consult);        talkGroup.setCzrq(new Date());        List<WlyyTalkGroupMember> members = new ArrayList<WlyyTalkGroupMember>();        WlyyTalkGroupMember patientMember = new WlyyTalkGroupMember();        patientMember.setMemberCode(patient);        patientMember.setMemberName(patientName);        patientMember.setGroupCode(talkGroup.getCode());        patientMember.setGroupName(name);        patientMember.setType(4);        patientMember.setStatus(1);        patientMember.setCzrq(new Date());        members.add(patientMember);        //当前医生加入讨论组        WlyyTalkGroupMember doctorMember = new WlyyTalkGroupMember();        doctorMember.setMemberCode(doctor);        doctorMember.setMemberName(doctorName);        doctorMember.setGroupCode(talkGroup.getCode());        doctorMember.setGroupName(name);        doctorMember.setType(3);        doctorMember.setStatus(1);        doctorMember.setCzrq(new Date());        members.add(doctorMember);        saveTalkGroup(talkGroup, members);    }    /**     * 获取医生讨论组列表     *     * @param doctor     * @return     */    public List<WlyyTalkGroup> findDoctorTalkGroups(String doctor) {        return discussionGroupDao.findDoctorTalkGroups(doctor);    }    /**     * 根据医生姓名搜索讨论组     *     * @param doctorName     * @return     */    public List<WlyyTalkGroup> searchTalkGroupsByDoctorName(String doctor, String doctorName) {        String doctorNameCon = "%" + doctorName + "%";        List<String> argStrings = new ArrayList<String>();        List<WlyyTalkGroup> groups = discussionGroupDao.findDoctorTalkGroups(doctor);        //查询参数        argStrings.add(doctorNameCon);        argStrings.add(doctor);        //查询语句        String sb = "select DISTINCT tg.* from wlyy_talk_group tg,wlyy_talk_group_member tgm " +                " where tg.code = tgm.group_code and tgm.member_name like ? and tg.code in ( select group_code from " +                " wlyy_talk_group_member where member_code = ?)";        List<WlyyTalkGroup> result = jdbcTemplate.query(sb, argStrings.toArray(), new RowMapper<WlyyTalkGroup>() {            @Override            public WlyyTalkGroup mapRow(ResultSet rs, int rowNum) throws SQLException {                WlyyTalkGroup group = new WlyyTalkGroup();                group.setId(rs.getLong("id"));                group.setCode(rs.getString("code"));                group.setName(rs.getString("name"));                group.setType(rs.getInt("type"));                group.setPatient(rs.getString("patient"));                group.setPatientName(rs.getString("patient_name"));                group.setConsultCode(rs.getString("consult_code"));                group.setHospitalCode(rs.getString("hospital_code"));                group.setHospitalName(rs.getString("hospital_name"));                group.setCreator(rs.getString("creator"));                group.setCreatorName(rs.getString("creator_name"));                group.setCzrq(rs.getDate("czrq"));                return group;            }        });        if (result == null) {            return new ArrayList<WlyyTalkGroup>();        } else {            return result;        }    }    /**     * 查询讨论组签约量     *     * @param groups     * @return     */    public List<Map<String, Object>> getTalkGroupsSing(String[] groups) {        String params = "";        List<String> paramList = new ArrayList<>();        for (int i = 0; i < groups.length; i++) {            params += (i == 0 ? "?" : ",?");        }        paramList.addAll(Arrays.asList(groups));        paramList.addAll(Arrays.asList(groups));        String sqlgp = "select group_code,member_code from wlyy_talk_group_member where group_code in (" + params + ") and type = 2";        String sqlgpm = "select member_code from wlyy_talk_group_member where group_code in (" + params + ") and type = 2";        String sqlQu = "select * from wlyy_quota_result where qkdoctor_code in (" + sqlgpm + ") and quato_code = '1' and level1_type = '1'";        String sqlQuSum = "select a.group_code,sum(ifnull(b.result,0)) sign from (" + sqlgp + ") a left join (" + sqlQu + ") b on a.member_code = b.qkdoctor_code group by a.group_code ";        return jdbcTemplate.queryForList(sqlQuSum, paramList.toArray());    }    /**     * 查询对应讨论组成员列表     *     * @param groupCode     * @return     */    public List<WlyyTalkGroupMember> findTalkGroupMembers(String groupCode) {        return discussionGroupMemberDao.findByGroupCode(groupCode);    }    /**     * 查找讨论组     *     * @param groupCode     * @return     */    public WlyyTalkGroup findTalkGroup(String groupCode) {        return discussionGroupDao.findByCode(groupCode);    }    /**     * 查询咨询对应讨论组     *     * @param consult     * @return     * @throws Exception     */    public JSONObject findConsultTalkGroup(String consult) throws Exception {        WlyyTalkGroup talkGroup = discussionGroupDao.findByConsultCode(consult);        if (talkGroup != null) {            JSONObject result = new JSONObject(talkGroup);            List<WlyyTalkGroupMember> members = discussionGroupMemberDao.findByGroupCode(talkGroup.getCode());            if (members != null) {                result.put("members", members);            } else {                result.put("members", "");            }            return result;        } else {            throw new Exception("没有对应咨询讨论组");        }    }    /**     * 获取医生对应病人的讨论组纪录     *     * @param doctor     * @param patient     * @return     */    public JSONArray getTalkGroupHistories(String doctor, String patient) {        List<WlyyTalkGroup> groups = discussionGroupDao.findByDoctorAndPatient(doctor, patient);        return new JSONArray(groups);    }    /**     * 获取两个成员同在的讨论组     *     * @param memberFirst     * @param memberSencond     * @return     */    public List<WlyyTalkGroup> getTalkGroupRelated(String memberFirst, String memberSencond) {        List<WlyyTalkGroup> result = new ArrayList<>();        //查询语句        String sqlIn = " select tg.* from wlyy_talk_group tg where tg.code in ("                + " select tgm.group_code "                + " from "                + "     (select * from wlyy_talk_group_member where member_code = ?) tgm "                + "  inner join "                + "     (select * from wlyy_talk_group_member where member_code = ?) tgmm "                + "  on tgm.group_code = tgmm.group_code )";        //查询        result = jdbcTemplate.query(sqlIn, new Object[]{memberFirst, memberSencond}, new RowMapper<WlyyTalkGroup>() {            @Override            public WlyyTalkGroup mapRow(ResultSet rs, int rowNum) throws SQLException {                WlyyTalkGroup group = new WlyyTalkGroup();                group.setId(rs.getLong("id"));                group.setCode(rs.getString("code"));                group.setName(rs.getString("name"));                group.setType(rs.getInt("type"));                group.setPatient(rs.getString("patient"));                group.setPatientName(rs.getString("patient_name"));                group.setConsultCode(rs.getString("consult_code"));                group.setHospitalCode(rs.getString("hospital_code"));                group.setHospitalName(rs.getString("hospital_name"));                group.setCreator(rs.getString("creator"));                group.setCreatorName(rs.getString("creator_name"));                group.setCzrq(rs.getDate("czrq"));                return group;            }        });        return result;    }    /**     * 获取医生的讨论组统计个数     *     * @param doctor     * @return     */    public long getDoctorTalkGroupCount(String doctor) {        return discussionGroupMemberDao.countByMemberCode(doctor);    }    /**     * 获取以上一对一聊天     *     * @param doctor     * @param doctorName     * @return     */    public JSONArray getOneToOneIm(String doctor,String doctorName) throws UnsupportedEncodingException {        JSONArray result = null;        JSONArray resultArray = new JSONArray();        String url = SystemConf.getInstance().getSystemProperties().getProperty("im_list_get")                + "statistic/getchatlist.im";        String json = HttpUtil.sendGet(url, "uid=" + doctor);        if(!StringUtils.isEmpty(json) && json.trim().startsWith("[") && json.trim().endsWith("]")) {            System.out.println("one-to-one:" + json);            result = new JSONArray(json);        }        if (result != null && result.length() > 0) {            for (int i = 0; i < result.length(); i++) {                JSONObject obj = result.getJSONObject(i);                if (obj.getInt("msg_type") == 1 && obj.get("peer_uid") != null) {                    JSONObject objRe = new JSONObject();                    Doctor fromDoctor = doctorDao.findByCode(obj.get("peer_uid").toString());                    if(fromDoctor == null){                        continue;                    }                    if(!StringUtils.isEmpty(doctorName)){                        if(!fromDoctor.getName().contains(doctorName)){                            continue;                        }                    }                    objRe.put("uid",obj.get("uid") != null ? obj.getString("uid") :"");                    objRe.put("fromUid",obj.get("peer_uid") != null ? obj.get("peer_uid").toString() : "");                    objRe.put("fromName",fromDoctor.getName());                    objRe.put("fromLevel",fromDoctor.getLevel());                    objRe.put("photo",StringUtils.isEmpty(fromDoctor.getPhoto())?"":fromDoctor.getPhoto());                    objRe.put("sex",fromDoctor.getSex());                    objRe.put("lastContentType",obj.getInt("last_content_type"));                    objRe.put("lastContent",obj.get("last_content") != null?new String(obj.getString("last_content").getBytes(),"utf-8"):"");                    objRe.put("newMsgCount",obj.getInt("new_msg_count"));                    objRe.put("lastMsgTime",obj.get("timestamp") != null ? DateUtil.dateToStr(new Date(obj.getLong("timestamp")),DateUtil.YYYY_MM_DD_HH_MM):"");                    resultArray.put(objRe);                }            }        }        return resultArray;    }}
 |