123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957 |
- package com.yihu.jw.complaint;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.yihu.jw.dict.dao.DictHospitalDeptDao;
- import com.yihu.jw.doctor.dao.BaseDoctorDao;
- import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
- import com.yihu.jw.doctor.dao.BaseDoctorRoleDao;
- import com.yihu.jw.entity.base.complaint.BaseComplaintDO;
- import com.yihu.jw.entity.base.complaint.BaseComplaintDictDO;
- import com.yihu.jw.entity.base.complaint.BaseComplaintDoctorDO;
- import com.yihu.jw.entity.base.complaint.BaseComplaintOperateLogDO;
- import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
- import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
- import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
- import com.yihu.jw.entity.base.doctor.BaseDoctorRoleDO;
- import com.yihu.jw.entity.base.patient.BasePatientDO;
- import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
- import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
- import com.yihu.jw.patient.dao.BasePatientDao;
- import com.yihu.jw.restmodel.web.MixEnvelop;
- import com.yihu.jw.utils.hibernate.HibenateUtils;
- import com.yihu.jw.wechat.enterprise.EnterpriseService;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.util.*;
- @Service
- public class BaseComplaintService {
- @Autowired
- private BaseComplaintDictDao baseComplaintDictDao;
- @Autowired
- private BaseComplaintDoctorDao baseComplaintDoctorDao;
- @Autowired
- private BaseDoctorDao baseDoctorDao;
- @Autowired
- private BaseDoctorHospitalDao baseDoctorHospitalDao;
- @Autowired
- private HibenateUtils hibenateUtils;
- @Autowired
- private BaseComplaintDao baseComplaintDao;
- @Autowired
- private ObjectMapper objectMapper;
- @Autowired
- private DictHospitalDeptDao dictHospitalDeptDao;
- @Autowired
- private BaseComplaintOperateDao baseComplaintOperateDao;
- @Autowired
- private BaseDoctorRoleDao baseDoctorRoleDao;
- @Autowired
- private BasePatientDao basePatientDao;
- @Autowired
- private EnterpriseService enterpriseService;
- @Autowired
- private WlyyHospitalSysDictDao wlyyHospitalSysDictDao;
- @Autowired
- JdbcTemplate jdbcTemplate;
- @Value("${wechat.id}")
- private String wxId;
- @Value("${wechat.flag}")
- private boolean flag;
- //修改新增
- public BaseComplaintDictDO createOrUpdateDict(String id, String name) {
- BaseComplaintDictDO baseComplaintDictDO = new BaseComplaintDictDO();
- if (StringUtils.isNoneBlank(id)) {
- baseComplaintDictDO = baseComplaintDictDao.findByIdAndIsDel(id);
- baseComplaintDictDO.setName(name);
- baseComplaintDictDO.setUpdateTime(new Date());
- } else {
- baseComplaintDictDO.setIsDel("1");
- baseComplaintDictDO.setName(name);
- baseComplaintDictDO.setCreateTime(new Date());
- }
- return baseComplaintDictDao.save(baseComplaintDictDO);
- }
- //删除
- public BaseComplaintDictDO deleteDict(String id) {
- BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findByIdAndIsDel(id);
- if (null != baseComplaintDictDO) {
- baseComplaintDictDO.setIsDel("0");
- baseComplaintDictDO.setUpdateTime(new Date());
- baseComplaintDictDao.save(baseComplaintDictDO);
- }
- List<BaseComplaintDoctorDO> baseComplaintDoctorDOs = baseComplaintDoctorDao.findbyComplaintId(id);
- for (BaseComplaintDoctorDO baseComplaintDoctorDO : baseComplaintDoctorDOs) {
- baseComplaintDoctorDO.setIsDel("0");
- }
- baseComplaintDoctorDao.saveAll(baseComplaintDoctorDOs);
- return baseComplaintDictDO;
- }
- public BaseComplaintDictDO findOneDict(String id) {
- BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findByIdAndIsDel(id);
- return baseComplaintDictDO;
- }
- //查询
- public List<BaseComplaintDictDO> findAll(String name) {
- List<BaseComplaintDictDO> list = new ArrayList<>();
- if (StringUtils.isNoneBlank(name)) {
- list = baseComplaintDictDao.findByName(name);
- } else {
- list = baseComplaintDictDao.findByAll();
- }
- return list;
- }
- //新增投诉管理医生
- @Transactional
- public void createOrUpdateComplainDoctor(String id, String complaintId, String doctorList) throws Exception {
- JSONArray jsonArray = JSON.parseArray(doctorList);
- for (int i = 0; i < jsonArray.size(); i++) {
- JSONObject jsonObject = jsonArray.getJSONObject(i);
- String doctor = jsonObject.getString("doctor");
- String deptCode = jsonObject.getString("deptCode");
- String deptName = "";
- String doctorName = "";
- // BaseComplaintDoctorDO preDoctor = baseComplaintDoctorDao.findbyDoctorAndDel(doctor);
- BaseDoctorDO baseDoctorDO = baseDoctorDao.findByIdAndDel(doctor);
- List<BaseDoctorRoleDO> baseDoctorRoleDOs = baseDoctorRoleDao.findByDoctorCode(doctor);
- if (baseDoctorRoleDOs == null || baseDoctorRoleDOs.size() == 0) {
- BaseDoctorRoleDO baseDoctorRoleDO = new BaseDoctorRoleDO();
- baseDoctorRoleDO.setDoctorCode(doctor);
- baseDoctorRoleDO.setRoleCode("specialist");
- baseDoctorRoleDao.save(baseDoctorRoleDO);
- } else if (baseDoctorRoleDOs != null) {
- Boolean addRoleFlag = true;//是否为对应医生添加专科医生角色表示 true即为添加
- for (BaseDoctorRoleDO baseDoctorRoleDO : baseDoctorRoleDOs) {
- if (baseDoctorRoleDO.getRoleCode().equalsIgnoreCase("specialist")) {
- addRoleFlag = false;
- }
- }
- if (addRoleFlag) {
- BaseDoctorRoleDO baseDoctorRoleDO = new BaseDoctorRoleDO();
- baseDoctorRoleDO.setDoctorCode(doctor);
- baseDoctorRoleDO.setRoleCode("specialist");
- baseDoctorRoleDao.save(baseDoctorRoleDO);
- }
- }
- if (null != baseDoctorDO) {
- doctorName = baseDoctorDO.getName();
- }
- // if (preDoctor!=null){
- // throw new Exception("医生"+doctorName+"已有负责的投诉类型");
- // }
- List<BaseDoctorHospitalDO> baseDoctorHospitalDO = baseDoctorHospitalDao.findByDeptCodeDoctorCode(deptCode, doctor);
- if (baseDoctorHospitalDO != null && baseDoctorHospitalDO.size() > 0) {
- deptName = baseDoctorHospitalDO.get(0).getDeptName();
- }
- if (StringUtils.isNoneBlank(id)) {
- BaseComplaintDoctorDO baseComplaintDoctorDO = new BaseComplaintDoctorDO();
- baseComplaintDoctorDO.setDept(deptCode);
- baseComplaintDoctorDO.setDeptName(deptName);
- baseComplaintDoctorDO.setComplaintId(id);
- baseComplaintDoctorDO.setDoctor(doctor);
- baseComplaintDoctorDO.setDoctorName(doctorName);
- baseComplaintDoctorDO.setIsDel("1");
- baseComplaintDoctorDO.setCreateTime(new Date());
- baseComplaintDoctorDao.save(baseComplaintDoctorDO);
- }
- }
- }
- //删除管理医生
- public BaseComplaintDoctorDO deleteDoctorComplain(String id) {
- BaseComplaintDoctorDO baseComplaintDoctorDO = baseComplaintDoctorDao.findByDelAndId(id);
- if (null != baseComplaintDoctorDO) {
- baseComplaintDoctorDO.setIsDel("0");
- baseComplaintDoctorDO.setUpdateTime(new Date());
- baseComplaintDoctorDao.save(baseComplaintDoctorDO);
- }
- return baseComplaintDoctorDO;
- }
- public MixEnvelop findComplaintDoctor(String doctor, String doctorName, String deptName, String complaintType, Integer page, Integer pageSize) {
- String sql = "select t.id as \"id\"," +
- " t.complaint_id as \"complaintId\"," +
- " t.doctor as \"doctor\"," +
- " t.doctor_name as \"doctorName\"," +
- " t.dept as \"dept\"," +
- " t.dept_name as \"deptName\"," +
- " t.is_del as \"isDel\"," +
- " t.create_time as \"createTime\"," +
- " t.update_time as \"updateTime\"," +
- " d.photo as \"photo\"," +
- " b.name as \"name\" " +
- " from base_complaint_doctor t left join base_complaint_dict b" +
- " on t.complaint_id=b.id " +
- " left join base_doctor d on t.doctor=d.id where t.is_del='1'";
- if (StringUtils.isNoneBlank(doctorName)) {
- sql += " and t.doctor_name like '%" + doctorName + "%'";
- }
- if (StringUtils.isNoneBlank(deptName)) {
- sql += " and t.dept_name like '%" + deptName + "%'";
- }
- if (StringUtils.isNoneBlank(complaintType)) {
- sql += " and t.complaint_id = '" + complaintType + "'";
- }
- if (StringUtils.isNoneBlank(doctor)) {
- sql += " and t.doctor = '" + doctor + "'";
- }
- sql += "order by t.create_time desc";
- List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql, page, pageSize);
- List<Map<String, Object>> listCount = hibenateUtils.createSQLQuery(sql);
- MixEnvelop mixEnvelop = new MixEnvelop();
- mixEnvelop.setTotalCount(listCount == null ? 0 : listCount.size());
- mixEnvelop.setPageSize(pageSize);
- mixEnvelop.setCurrPage(page);
- mixEnvelop.setDetailModelList(list);
- return mixEnvelop;
- }
- /**
- * 去重医生
- */
- public MixEnvelop findComplaintDoctorNew(String doctor, String doctorName,String role, String deptName, String complaintType, Integer page, Integer pageSize) {
- String sql = "select " +
- " t.doctor as \"doctor\"," +
- " t.doctor_name as \"doctorName\"," +
- " t.dept as \"dept\"," +
- " t.dept_name as \"deptName\"," +
- " t.is_del as \"isDel\"," +
- " t.create_time as \"createTime\"," +
- " t.update_time as \"updateTime\"," +
- " d.photo as \"photo\"," +
- " t.complaint_id as \"complaintId\"," +
- " group_concat(b.name) as \"name\" " +
- " from base_complaint_doctor t " +
- " INNER join base_complaint_dict b on t.complaint_id=b.id " +
- " INNER join base_doctor d on t.doctor=d.id" +
- " where t.is_del='1'";
- if (StringUtils.isNoneBlank(doctorName)) {
- sql += " and t.doctor_name like '%" + doctorName + "%'";
- }
- if (StringUtils.isNoneBlank(deptName)) {
- sql += " and t.dept_name like '%" + deptName + "%'";
- }
- if (StringUtils.isNoneBlank(complaintType)) {
- sql += " and t.complaint_id = '" + complaintType + "'";
- }
- if (StringUtils.isNoneBlank(doctor)) {
- sql += " and t.doctor = '" + doctor + "'";
- }
- sql += "order by t.create_time desc";
- List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql, page, pageSize);
- List<Map<String, Object>> listCount = hibenateUtils.createSQLQuery(sql);
- MixEnvelop mixEnvelop = new MixEnvelop();
- mixEnvelop.setTotalCount(listCount == null ? 0 : listCount.size());
- mixEnvelop.setPageSize(pageSize);
- mixEnvelop.setCurrPage(page);
- mixEnvelop.setDetailModelList(list);
- return mixEnvelop;
- }
- public BaseComplaintDoctorDO findOneDoctorComplain(String id) {
- BaseComplaintDoctorDO baseComplaintDoctorDO = baseComplaintDoctorDao.findByDelAndId(id);
- return baseComplaintDoctorDO;
- }
- /*
- * 患者举报接口
- * */
- public BaseComplaintDO patiemtComplaint(String json) throws Exception {
- WlyyHospitalSysDictDO wlyyHospitalSysDictDO = wlyyHospitalSysDictDao.findById("complaintOpenControl").orElse(null);
- if (wlyyHospitalSysDictDO != null) {
- if (!"1".equalsIgnoreCase(wlyyHospitalSysDictDO.getDictCode())) {
- throw new Exception("投诉通道已关闭");
- }
- } else {
- throw new Exception("投诉通道已关闭");
- }
- BaseComplaintDO baseComplaintDO = objectMapper.readValue(json, BaseComplaintDO.class);
- if(StringUtils.isBlank(baseComplaintDO.getComplaintId())){
- //其他
- List<BaseComplaintDictDO> dictDOList = baseComplaintDictDao.findByName(baseComplaintDO.getComplaintName());
- if(dictDOList.size()>0){
- baseComplaintDO.setComplaintId(dictDOList.get(0).getId());
- }
- }else {
- BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findByIdAndIsDel(baseComplaintDO.getComplaintId());
- if (baseComplaintDictDO != null) {
- baseComplaintDO.setComplaintName(baseComplaintDictDO.getName());
- }
- }
- if (StringUtils.isNoneBlank(baseComplaintDO.getVisitDept())) {
- DictHospitalDeptDO dictHospitalDeptDO = dictHospitalDeptDao.findByCode(baseComplaintDO.getVisitDept());
- if (dictHospitalDeptDO != null) {
- baseComplaintDO.setVisitDeptName(dictHospitalDeptDO.getName());
- }
- }
- /*if(StringUtils.isNoneBlank(baseComplaintDO.getPatient())){
- BasePatientDO basePatientDO= basePatientDao.findById(baseComplaintDO.getPatient());
- if (basePatientDO!=null){
- basePatientDO.setIdcardFront(baseComplaintDO.getIdcardFront());
- basePatientDO.setIdcardBack(baseComplaintDO.getIdcardBack());
- basePatientDao.save(basePatientDO);
- }
- }*/
- baseComplaintDO.setIsDel("1");
- baseComplaintDO.setStatus("0");
- baseComplaintDO.setCreateTime(new Date());
- baseComplaintDO.setDefaultdoctor("defalutDoctor");
- baseComplaintDO = baseComplaintDao.save(baseComplaintDO);
- BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
- baseComplaintOperateLogDO.setOperateFrom(baseComplaintDO.getPatient());
- baseComplaintOperateLogDO.setStatus("0");
- baseComplaintOperateLogDO.setOperateType("投诉提交");
- baseComplaintOperateLogDO.setRelationCode(baseComplaintDO.getId());
- baseComplaintOperateLogDO.setCreateTime(new Date());
- baseComplaintOperateDao.save(baseComplaintOperateLogDO);
- try {
- List<BaseComplaintDoctorDO> doctorList = baseComplaintDoctorDao.findbyComplaintId(baseComplaintDO.getComplaintId());
- for (BaseComplaintDoctorDO baseComplaintDoctorDO : doctorList) {
- String url = "https://hlwyy.xmzsh.com/hlwyy/ims-app-web/#/complaint/detail?id=" + baseComplaintDO.getId();
- enterpriseService.sendTWMesByDoctor("zsyy", baseComplaintDoctorDO.getDoctor(), "投诉反馈", "您收到一条投诉反馈,点击查看。", url);
- }
- } catch (Exception e) {
- }
- return baseComplaintDao.save(baseComplaintDO);
- }
- /*
- * 医生转交
- * */
- public BaseComplaintDO passTo(String id, String complaintId, String doctor, String operator, String reason) {
- BaseComplaintDO baseComplaintDO = baseComplaintDao.findById(id).orElse(null);
- BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
- String doctorName = "";
- String complaitTypeName = "";
- if (null != baseComplaintDO) {
- baseComplaintOperateLogDO.setOperateFrom(operator);
- baseComplaintOperateLogDO.setReason(reason);
- baseComplaintOperateLogDO.setOperateTo(doctor);
- baseComplaintOperateLogDO.setComplaintTo(complaintId);
- baseComplaintOperateLogDO.setComplaintFrom(baseComplaintDO.getComplaintId());
- baseComplaintOperateLogDO.setStatus("3");
- baseComplaintOperateLogDO.setOperateType("转交");
- baseComplaintOperateLogDO.setRelationCode(id);
- baseComplaintOperateLogDO.setCreateTime(new Date());
- baseComplaintOperateDao.save(baseComplaintOperateLogDO);
- /*BaseDoctorDO baseDoctorDO = baseDoctorDao.findByIdAndDel(doctor);
- if (null != baseDoctorDO) {
- doctorName=baseDoctorDO.getName();
- baseComplaintDO.setAcceptorName(doctorName);
- }
- baseComplaintDO.setAcceptor(doctor);*/
- if ("1".equalsIgnoreCase(baseComplaintDO.getStatus())) {
- baseComplaintDO.setStatus("0");
- }
- baseComplaintDO.setDefaultdoctor(doctor);
- baseComplaintDO.setComplaintId(complaintId);
- baseComplaintDO.setPassto(doctor);
- BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findByIdAndIsDel(complaintId);
- if (baseComplaintDictDO != null) {
- complaitTypeName = baseComplaintDictDO.getName();
- baseComplaintDO.setComplaintName(complaitTypeName);
- }
- baseComplaintDO = baseComplaintDao.save(baseComplaintDO);
- try {
- /*List<BaseComplaintDoctorDO> doctorList=baseComplaintDoctorDao.findbyComplaintId(baseComplaintDO.getComplaintId());
- for (BaseComplaintDoctorDO baseComplaintDoctorDO:doctorList)*/
- String url = "https://hlwyy.xmzsh.com/hlwyy/ims-app-web/#/complaint/detail?id=" + baseComplaintDO.getId();
- enterpriseService.sendTWMesByDoctor("zsyy", doctor, "投诉反馈", "您收到一条投诉反馈,点击查看。", url);
- } catch (Exception e) {
- }
- return baseComplaintDO;
- }
- return null;
- }
- //接受投诉
- public BaseComplaintDO doctorAccept(String id, String doctor) throws Exception {
- BaseComplaintDO baseComplaintDO = baseComplaintDao.findById(id).orElse(null);
- if (baseComplaintDO != null) {
- baseComplaintDO.setStatus("1");
- BaseDoctorDO baseDoctorDO = baseDoctorDao.findByIdAndDel(doctor);
- if (null != baseDoctorDO) {
- baseComplaintDO.setAcceptorName(baseDoctorDO.getName());
- }
- baseComplaintDO.setAcceptor(doctor);
- baseComplaintDO.setDefaultdoctor(doctor);
- baseComplaintDO.setAcceptTime(new Date());
- baseComplaintDao.save(baseComplaintDO);
- BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
- baseComplaintOperateLogDO.setOperateFrom(doctor);
- baseComplaintOperateLogDO.setStatus("1");
- baseComplaintOperateLogDO.setOperateType("接受");
- baseComplaintOperateLogDO.setRelationCode(id);
- baseComplaintOperateLogDO.setCreateTime(new Date());
- baseComplaintOperateDao.save(baseComplaintOperateLogDO);
- }/*else if ("1".equalsIgnoreCase(baseComplaintDO.getStatus())){
- throw new Exception("该工单已被接受");
- }else {
- throw new Exception("该工单已被处理完成");
- }*/
- return baseComplaintDO;
- }
- //反馈投诉
- public BaseComplaintDO dealComplaint(String id, String operator, String content, String imgUrl, String deptCode) throws Exception {
- BaseComplaintDO baseComplaintDO = baseComplaintDao.findById(id).orElse(null);
- if (baseComplaintDO != null) {
- baseComplaintDO.setDealTime(new Date());
- baseComplaintDO.setFeedBack(content);
- baseComplaintDO.setFeedImg(imgUrl);
- baseComplaintDO.setOperator(operator);
- baseComplaintDO.setDefaultdoctor(operator);
- baseComplaintDO.setStatus("2");
- BaseDoctorDO baseDoctorDO = baseDoctorDao.findByIdAndDel(operator);
- if (null != baseDoctorDO) {
- baseComplaintDO.setOperatorName(baseDoctorDO.getName());
- }
- baseComplaintDO.setOperatorDept(deptCode);
- List<BaseDoctorHospitalDO> baseDoctorHospitalDO = baseDoctorHospitalDao.findByDeptCodeDoctorCode(deptCode, operator);
- if (baseDoctorHospitalDO != null && baseDoctorHospitalDO.size() > 0) {
- baseComplaintDO.setOperatorDeptName(baseDoctorHospitalDO.get(0).getDeptName());
- }
- baseComplaintDao.save(baseComplaintDO);
- BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
- baseComplaintOperateLogDO.setOperateFrom(operator);
- baseComplaintOperateLogDO.setStatus("2");
- baseComplaintOperateLogDO.setOperateType("反馈");
- baseComplaintOperateLogDO.setRelationCode(id);
- baseComplaintOperateLogDO.setCreateTime(new Date());
- baseComplaintOperateDao.save(baseComplaintOperateLogDO);
- }/*else if ("2".equalsIgnoreCase(baseComplaintDO.getStatus())){
- throw new Exception("该工单已被处理完成");
- }else if ("0".equalsIgnoreCase(baseComplaintDO.getStatus())){
- throw new Exception("该工单未被接收");
- }*/
- return baseComplaintDO;
- }
- //查询投诉列表
- //passto 已转交
- public MixEnvelop findComplaintList(String role, String doctor, String status, String patientName, String patientId, String keyWord, String complaintId,
- String startTime, String endTime, Integer page, Integer pageSize, String pcAdmin) {
- MixEnvelop mixEnvelop = new MixEnvelop();
- Boolean queryAll = false;
- String sql = "select DISTINCT t.id as \"id\"," +
- " t.complaint_id as \"complaintId\"," +
- " t.complaint_name as \"complaintName\"," +
- " t.complaint_content as \"complaintContent\"," +
- " t.visit_type as \"visitType\"," +
- " case t.visit_type when '1' then '门诊' else '住院' end as \"visitTypeName\"," +
- " t.visit_time as \"visitTime\"," +
- " t.visit_dept as \"visitDept\"," +
- " t.visit_dept_name as \"visitDeptName\"," +
- " t.adm_no as \"admNo\"," +
- " t.patient as \"patient\"," +
- " t.patient_name as \"patientName\"," +
- " t.patient_idcard as \"patientIdcard\"," +
- " t.idcard_front as \"idcardFront\"," +
- " t.idcard_back as \"idcardBack\"," +
- " t.img_url as \"imgUrl\"," +
- " t.is_del as \"isDel\"," +
- " t.status as \"status\"," +
- " t.create_time as \"createTime\"," +
- " t.accept_time as \"acceptTime\"," +
- " t.deal_time as \"dealTime\"," +
- " t.operator_dept as \"operatorDept\"," +
- " t.operator_dept_name as \"operatorDeptName\"," +
- " t.operator as \"operator\"," +
- " t.operator_name as \"operatorName\"," +
- " t.feed_back as \"feedBack\"," +
- " t.feed_img as \"feedImg\"," +
- " t.acceptor as \"acceptor\"," +
- " t.mobile as \"mobile\"," +
- " t.passto as \"passto\"," +
- " t.acceptor_name as \"acceptorName\"" +
- " from base_complaint t " +
- " left join base_patient b on t.patient=b.id ";
- sql += " left join base_complaint_operate_log g on t.id=g.relation_code where t.is_del='1' ";
- if (!"1".equals(pcAdmin)) {
- //排除撤销的
- sql += " and t.status<>'-1' ";
- } else {
- queryAll = true;
- }
- if (StringUtils.isNoneBlank(status) && "3".equalsIgnoreCase(status)) {
- sql += " and g.status='3' ";
- }
- boolean flag = false;
- if (!queryAll) {
- String isOther = "";
- String complaint = "";
- String sql1 = "SELECT distinct di.id,di.`name` from base_complaint_doctor d,base_complaint_dict di " +
- "WHERE di.id=d.complaint_id and d.is_del=1 and di.is_del=1 and d.doctor='"+doctor+"'";
- List<Map<String, Object>> list = jdbcTemplate.queryForList(sql1);
- if(list.size()==0){
- mixEnvelop.setTotalCount(0);
- mixEnvelop.setDetailModelList(new ArrayList());
- mixEnvelop.setPageSize(pageSize);
- mixEnvelop.setCurrPage(page);
- return mixEnvelop;
- }
- for (Map<String, Object> map:list){
- String id = map.get("id")+"";
- String name = map.get("name")+"";
- if("其他".equals(name)){
- isOther = id;
- }else {
- complaint += id+",";
- }
- }
- if(StringUtils.isNotBlank(complaint)){
- complaint = complaint.substring(0,complaint.length()-1);
- complaint = complaint.replaceAll(",","','");
- }
- if (StringUtils.isNoneBlank(status) && "3".equalsIgnoreCase(status)) {
- sql += " and g.operate_from='" + doctor;
- } else if (StringUtils.isNoneBlank(status) && "0".equalsIgnoreCase(status)) {
- if(StringUtils.isNotBlank(isOther)){
- //其他权限医生可以看到所有已投诉的工单
- sql += " and t.status='0' and ((t.passto='" + doctor + "' and t.complaint_id in ('"+complaint+"')) or t.complaint_id='"+isOther+"' ) ";
- }else {
- sql += " and t.status='0' and t.passto='" + doctor + "' and t.complaint_id in ('"+complaint+"') ";
- }
- } else if (StringUtils.isNoneBlank(status) && "1".equalsIgnoreCase(status)) {
- sql += " and t.status='1' and t.acceptor='" + doctor + "' ";
- } else if (StringUtils.isNoneBlank(status) && "2".equalsIgnoreCase(status)) {
- sql += " and t.status='2' and t.operator='" + doctor + "' ";
- } else {
- String statusSql = "";
- if(StringUtils.isNotBlank(isOther)){
- //其他权限医生可以看到所有已投诉的工单
- statusSql += " t.status='0' and ((t.passto='" + doctor + "' and t.complaint_id in ('"+complaint+"')) or t.complaint_id='"+isOther+"' ) ";
- }else {
- statusSql += " t.status='0' and t.passto='" + doctor + "' and t.complaint_id in ('"+complaint+"') ";
- }
- sql += " and ((t.status='2' and t.operator='" + doctor + "') or (t.status='1' and t.acceptor='" + doctor + "') " +
- " or (" + statusSql + " )) ";
- }
- } else {
- if (StringUtils.isNoneBlank(complaintId)) {
- sql += " and t.complaint_id='" + complaintId + "'";
- }
- if (StringUtils.isNoneBlank(status)) {
- sql += " and t.status ='" + status + "'";
- }
- }
- if (StringUtils.isNoneBlank(patientName)) {
- sql += " and t.patient_name like '%" + patientName + "%'";
- }
- if (StringUtils.isNoneBlank(patientId)) {
- sql += " and t.patient ='" + patientId + "'";
- }
- if (StringUtils.isNoneBlank(keyWord)) {
- sql += " and (t.patient_idcard like '%" + keyWord + "%' or t.patient_name like '%" + keyWord + "%')";
- }
- if (StringUtils.isNotBlank(startTime)) {
- if ("xm_ykyy_wx".equals(wxId)) {
- if (flag) {
- sql += " and t.create_time > '" + startTime + "'";
- } else {
- sql += " and t.create_time > to_date('" + startTime + "', 'yyyy-mm-dd hh24:mi:ss') ";
- }
- } else {
- sql += " and t.create_time > '" + startTime + "'";
- }
- }
- if (StringUtils.isNotBlank(endTime)) {
- if ("xm_ykyy_wx".equals(wxId)) {
- if (flag) {
- sql += " and t.create_time<='" + endTime + "'";
- } else {
- sql += " and t.create_time<= to_date('" + endTime + "','yyyy-mm-dd hh24:mi:ss')";
- }
- } else {
- sql += " and t.create_time<='" + endTime + "'";
- }
- }
- sql += " order by t.create_time desc ";
- System.out.println("sql" + sql);
- List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql, page, pageSize);
- String sqlcount = "SELECT COUNT(1) AS \"total\" FROM (" + sql + ") q";
- Long count = 0L;
- List<Map<String, Object>> total = hibenateUtils.createSQLQuery(sqlcount);
- if (total != null) {
- //mysql 与 Oracle 聚合函数返回类型不一致,需要判断装换
- count = hibenateUtils.objTransformLong(total.get(0).get("total"));
- }
- mixEnvelop.setTotalCount(count.intValue());
- mixEnvelop.setDetailModelList(list);
- mixEnvelop.setPageSize(pageSize);
- mixEnvelop.setCurrPage(page);
- return mixEnvelop;
- }
- public BaseComplaintDO findOnePaitentComplaint(String id) {
- BaseComplaintDO baseComplaintDO = baseComplaintDao.findById(id).orElse(null);
- BasePatientDO basePatientDO = basePatientDao.findById(baseComplaintDO.getPatient()).orElse(null);
- if (null != basePatientDO) {
- baseComplaintDO.setMobile(basePatientDO.getMobile());
- }
- WlyyHospitalSysDictDO wlyyHospitalSysDictDO = wlyyHospitalSysDictDao.findById("latestFeedBackTime").orElse(null);
- Integer timeOut = 15;
- if (wlyyHospitalSysDictDO != null) {
- timeOut = Integer.parseInt(wlyyHospitalSysDictDO.getDictValue());
- }
- long latestDate = baseComplaintDO.getCreateTime().getTime() + timeOut * 24 * 60 * 60 * 1000;
- baseComplaintDO.setLatestFeedTime((new Date(latestDate)));
- baseComplaintDO.setVisitTypeName(baseComplaintDO.getVisitType().equalsIgnoreCase("1") ? "门诊" : "住院");
- return baseComplaintDO;
- }
- //查询投诉列表
- public MixEnvelop findPatientComplaintList(String status, String patientName, String patientId,
- String startTime, String endTime, String complaintType, Integer page, Integer pageSize) {
- MixEnvelop mixEnvelop = new MixEnvelop();
- String sql = "select t.id as \"id\"," +
- " t.complaint_id as \"complaintId\"," +
- " t.complaint_name as \"complaintName\"," +
- " t.complaint_content as \"complaintContent\"," +
- " t.visit_type as \"visitType\"," +
- " case t.visit_type when '1' then '门诊' else '住院' end as \"visitTypeName\"," +
- " t.visit_time as \"visitTime\"," +
- " t.visit_dept as \"visitDept\"," +
- " t.visit_dept_name as \"visitDeptName\"," +
- " t.adm_no as \"admNo\"," +
- " t.patient as \"patient\"," +
- " t.patient_name as \"patientName\"," +
- " t.patient_idcard as \"patientIdcard\"," +
- " t.idcard_front as \"idcardFront\"," +
- " t.idcard_back as \"idcardBack\"," +
- " t.img_url as \"imgUrl\"," +
- " t.is_del as \"isDel\"," +
- " t.status as \"status\"," +
- " t.create_time as \"createTime\"," +
- " t.accept_time as \"acceptTime\"," +
- " t.deal_time as \"dealTime\"," +
- " t.operator_dept as \"operatorDept\"," +
- " t.operator_dept_name as \"operatorDeptName\"," +
- " t.operator as \"operator\"," +
- " t.operator_name as \"operatorName\"," +
- " t.feed_back as \"feedBack\"," +
- " t.feed_img as \"feedImg\"," +
- " t.acceptor as \"acceptor\"," +
- " t.mobile as \"mobile\"," +
- " t.acceptor_name as \"acceptorName\"" +
- " from base_complaint t " +
- " left join base_patient b on t.patient=b.id" +
- " where t.is_del='1'";
- if (StringUtils.isNoneBlank(status)) {
- sql += " and t.status ='" + status + "'";
- }
- if (StringUtils.isNoneBlank(patientName)) {
- sql += " and t.patient_name like '%" + patientName + "%'";
- }
- if (StringUtils.isNoneBlank(patientId)) {
- sql += " and t.patient ='" + patientId + "'";
- }
- if (StringUtils.isNoneBlank(complaintType)) {
- sql += " and t.complaint_id ='" + complaintType + "'";
- }
- if (StringUtils.isNotBlank(startTime)) {
- if ("xm_ykyy_wx".equals(wxId)) {
- if (flag) {
- sql += " and t.create_time > '" + startTime + "'";
- } else {
- sql += " and t.create_time > to_date('" + startTime + "', 'yyyy-mm-dd hh24:mi:ss') ";
- }
- } else {
- sql += " and t.create_time > '" + startTime + "'";
- }
- }
- if (StringUtils.isNotBlank(endTime)) {
- if ("xm_ykyy_wx".equals(wxId)) {
- if (flag) {
- sql += " and t.create_time<='" + endTime + "'";
- } else {
- sql += " and t.create_time<= to_date('" + endTime + "','yyyy-mm-dd hh24:mi:ss')";
- }
- } else {
- sql += " and t.create_time<='" + endTime + "'";
- }
- }
- sql += " order by t.create_time desc ";
- List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql, page, pageSize);
- String sqlcount = "SELECT COUNT(1) AS \"total\" FROM (" + sql + ") q";
- Long count = 0L;
- List<Map<String, Object>> total = hibenateUtils.createSQLQuery(sqlcount);
- if (total != null) {
- //mysql 与 Oracle 聚合函数返回类型不一致,需要判断装换
- count = hibenateUtils.objTransformLong(total.get(0).get("total"));
- }
- mixEnvelop.setTotalCount(count.intValue());
- mixEnvelop.setDetailModelList(list);
- mixEnvelop.setPageSize(pageSize);
- mixEnvelop.setCurrPage(page);
- return mixEnvelop;
- }
- /*
- * 查询投诉数量*/
- public Map<String, Object> findComplaintCount(String doctor, String role, String pcAdmin) {
- Integer complaints = 0;
- Integer recieve = 0;
- Integer deal = 0;
- Integer cacel = 0;
- Integer passto = 0;
- Integer total = 0;
- Boolean queryAll = false;
- if ("1".equalsIgnoreCase(pcAdmin)) {
- queryAll = true;
- }
- if (!queryAll) {
- String complaint = "";
- String isOther = "";
- String sql1 = "SELECT distinct di.id,di.`name` from base_complaint_doctor d,base_complaint_dict di " +
- "WHERE di.id=d.complaint_id and d.is_del=1 and di.is_del=1 and d.doctor='"+doctor+"'";
- List<Map<String, Object>> list = jdbcTemplate.queryForList(sql1);
- if(list.size()==0){
- Map map = new HashMap();
- map.put("complaints", complaints);
- map.put("recieve", recieve);
- map.put("deal", deal);
- map.put("passto", passto);
- map.put("cacel", cacel);
- map.put("total", total);
- return map;
- }
- for (Map<String, Object> map:list){
- String id = map.get("id")+"";
- String name = map.get("name")+"";
- complaint += id+",";
- if("其他".equals(name)){
- isOther = id;
- }else {
- complaint += id+",";
- }
- }
- if(StringUtils.isNotBlank(complaint)){
- complaint = complaint.substring(0,complaint.length()-1);
- complaint = complaint.replaceAll(",","','");
- }
- complaints = getCountByStatus(doctor, "0",complaint,isOther);
- recieve = getCountByStatus(doctor, "1",complaint,"");
- deal = getCountByStatus(doctor, "2",complaint,"");
- // passto = getCountByPassto(doctor);
- // total = getCountByStatus(doctor, "",complaint);
- //撤销
- cacel = getCountByStatus(doctor, "-1",complaint,"");
- if (StringUtils.isNotBlank(pcAdmin)) {
- total = complaints + recieve+deal+cacel;
- System.out.println("是pc管理员");
- } else {
- total = complaints + recieve+deal;
- }
- //cacel=baseComplaintDao.getCountByStatusAndComplaintId("-1",baseComplaintDoctorDO.getComplaintId());
- } else {
- complaints = baseComplaintDao.getCountByStatus("0");
- recieve = baseComplaintDao.getCountByStatus("1");
- deal = baseComplaintDao.getCountByStatus("2");
- cacel = baseComplaintDao.getCountByStatus("-1");
- // passto = getCountByPassto("");
- total = complaints + recieve + deal+cacel;
- }
- Map map = new HashMap();
- map.put("complaints", complaints);
- map.put("recieve", recieve);
- map.put("deal", deal);
- map.put("passto", passto);
- map.put("cacel", cacel);
- map.put("total", total);
- return map;
- }
- public Integer getCountByPassto(String doctor) {
- String sql = "select count(1) as \"total\" from (select DISTINCT t.id from base_complaint t left join base_complaint_operate_log b" +
- " on t.id=b.relation_code where t.is_del='1' and t.passto is not null ";
- if (StringUtils.isNoneBlank(doctor)) {
- sql += " and b.operate_from='" + doctor + "'";
- }
- sql += ") m";
- List<Map<String, Object>> listcount = hibenateUtils.createSQLQuery(sql);
- Integer count = 0;
- if (listcount != null && listcount.size() > 0) {
- count = Integer.valueOf(listcount.get(0).get("total").toString());
- }
- return count;
- }
- public Integer getCountByStatus(String doctor, String status,String complaint,String isOther) {
- String sql = "select count(1) as \"count\" from (select DISTINCT t.id " +
- " from base_complaint t " +
- " left join base_patient b on t.patient=b.id ";
- sql += " left join base_complaint_operate_log g on t.id=g.relation_code where t.is_del='1' ";
- if ("3".equalsIgnoreCase(status)) {
- sql += " and g.status='3' ";
- }
- if (StringUtils.isNoneBlank(status) && "3".equalsIgnoreCase(status)) {
- sql += " and g.operate_from='" + doctor + "'";
- } else if (StringUtils.isNoneBlank(status) && "0".equalsIgnoreCase(status)) {
- if(StringUtils.isNotBlank(isOther)){
- //其他权限医生可以看到所有已投诉的工单
- sql += " and t.status='0' and ((t.passto='" + doctor + "' and t.complaint_id in ('"+complaint+"')) or t.complaint_id='"+isOther+"' ) ";
- }else {
- sql += " and t.status='0' and t.passto='" + doctor + "' and t.complaint_id in ('"+complaint+"') ";
- }
- } else if (StringUtils.isNoneBlank(status) && "1".equalsIgnoreCase(status)) {
- sql += " and t.status='1' and t.acceptor='" + doctor + "' ";
- } else if (StringUtils.isNoneBlank(status) && "2".equalsIgnoreCase(status)) {
- sql += " and t.status='2' and t.operator='" + doctor + "' ";
- }
- if (!StringUtils.isNoneBlank(status)) {
- sql += " and t.status !='-1'";
- }
- //complaint=complaint+","+types;
- System.out.println("sql" + sql);
- Integer count = 0;
- sql += ")g";
- List<Map<String, Object>> total = hibenateUtils.createSQLQuery(sql);
- if (total != null && total.size() > 0) {
- //mysql 与 Oracle 聚合函数返回类型不一致,需要判断装换
- count = Integer.valueOf(total.get(0).get("count").toString());
- }
- return count;
- }
- /*
- * 查询投诉数量*/
- public Map<String, Object> findComplaintCountPatient(String patient) {
- Integer complaints = 0;
- Integer recieve = 0;
- Integer deal = 0;
- Integer cacel = 0;
- complaints = baseComplaintDao.getCountByStatusByPatient("0", patient);
- recieve = baseComplaintDao.getCountByStatusByPatient("1", patient);
- deal = baseComplaintDao.getCountByStatusByPatient("2", patient);
- cacel = baseComplaintDao.getCountByStatusByPatient("-1", patient);
- Integer total = complaints + recieve + deal + cacel;
- Map map = new HashMap();
- map.put("complaints", complaints);
- map.put("recieve", recieve);
- map.put("deal", deal);
- map.put("cacel", cacel);
- map.put("total", total);
- return map;
- }
- public BaseComplaintDO cancelPaitentComplaint(String id, String patient) throws Exception {
- BaseComplaintDO baseComplaintDO = baseComplaintDao.findById(id).orElse(null);
- if (baseComplaintDO != null) {
- if ("0".equalsIgnoreCase(baseComplaintDO.getStatus())) {
- baseComplaintDO.setStatus("-1");
- baseComplaintDO = baseComplaintDao.save(baseComplaintDO);
- BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
- baseComplaintOperateLogDO.setOperateFrom(patient);
- baseComplaintOperateLogDO.setStatus("-1");
- baseComplaintOperateLogDO.setOperateType("居民撤销投诉");
- baseComplaintOperateLogDO.setRelationCode(baseComplaintDO.getId());
- baseComplaintOperateLogDO.setCreateTime(new Date());
- baseComplaintOperateDao.save(baseComplaintOperateLogDO);
- } else {
- throw new Exception("不允许撤销");
- }
- }
- return baseComplaintDO;
- }
- public List<Map<String, Object>> findComplaintOperateLog(String complaintId) {
- String sql = "select t.id as \"id\"," +
- " p.name as \"complaintNameFrom\" ," +
- " n.name as \"complaintNameto\", " +
- " t.operate_from as \"operateFrom\" ," +
- " t.reason as \"reason\" ," +
- " t.operate_to as \"operateTo\" ," +
- " t.cancel_by as \"cancelBy\", " +
- " t.operate_type as \"operateType\", " +
- " t.status as \"status\", " +
- " t.create_time as \"createTime\" ," +
- " t.relation_code as \"relationCode\" " +
- " from base_complaint_operate_log t left join base_complaint c" +
- " on t.relation_code=c.id" +
- " left join base_complaint_dict p on t.complaint_from= p.id" +
- " left join base_complaint_dict n on t.complaint_to=n.id where 1=1 ";
- if (StringUtils.isNoneBlank(complaintId)) {
- sql += " and t.relation_code='" + complaintId + "'";
- }
- sql += " order by t.create_time desc";
- List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql);
- List<WlyyHospitalSysDictDO> typeList = wlyyHospitalSysDictDao.findByDictName("complaintStatus");
- for (Map<String, Object> map : list) {
- if (map.get("operateFrom") != null) {
- if (map.get("status") != null) {
- for (WlyyHospitalSysDictDO wlyyHospitalSysDictDO : typeList) {
- if (map.get("status").toString().equalsIgnoreCase(wlyyHospitalSysDictDO.getDictCode())) {
- map.put("operateType", wlyyHospitalSysDictDO.getDictValue());
- }
- }
- if ("0".equalsIgnoreCase(map.get("status").toString()) || "-1".equalsIgnoreCase(map.get("status").toString())) {
- BasePatientDO basePatientDO = basePatientDao.findById(map.get("operateFrom").toString()).orElse(null);
- if (basePatientDO != null) {
- map.put("operateFromName", basePatientDO.getName());
- }
- } else {
- BaseDoctorDO baseDoctorDO = baseDoctorDao.findByIdAndDel(map.get("operateFrom").toString());
- if (baseDoctorDO != null) {
- map.put("operateFromName", baseDoctorDO.getName());
- }
- List<BaseDoctorHospitalDO> baseDoctorHospitalDO = baseDoctorHospitalDao.findByDoctorCode(map.get("operateFrom").toString());
- if (baseDoctorHospitalDO != null && baseDoctorHospitalDO.size() > 0) {
- map.put("operateFromDeptName", baseDoctorHospitalDO.get(0).getDeptName());
- }
- }
- }
- }
- if (map.get("operateTo") != null) {
- BaseDoctorDO baseDoctorDO = baseDoctorDao.findByIdAndDel(map.get("operateTo").toString());
- if (baseDoctorDO != null) {
- map.put("operateToName", baseDoctorDO.getName());
- }
- List<BaseDoctorHospitalDO> baseDoctorHospitalDO = baseDoctorHospitalDao.findByDoctorCode(map.get("operateTo").toString());
- if (baseDoctorHospitalDO != null && baseDoctorHospitalDO.size() > 0) {
- map.put("operateToDeptName", baseDoctorHospitalDO.get(0).getDeptName());
- }
- }
- }
- return list;
- }
- public List<Map<String, Object>> getComplaintList(String doctorCode) {
- String sql = " SELECT t.complaint_id from base_complaint_doctor t where t.is_del='1' and t.doctor='" + doctorCode + "'";
- List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
- return list;
- }
- }
|