BaseComplaintService.java 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957
  1. package com.yihu.jw.complaint;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.yihu.jw.dict.dao.DictHospitalDeptDao;
  7. import com.yihu.jw.doctor.dao.BaseDoctorDao;
  8. import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
  9. import com.yihu.jw.doctor.dao.BaseDoctorRoleDao;
  10. import com.yihu.jw.entity.base.complaint.BaseComplaintDO;
  11. import com.yihu.jw.entity.base.complaint.BaseComplaintDictDO;
  12. import com.yihu.jw.entity.base.complaint.BaseComplaintDoctorDO;
  13. import com.yihu.jw.entity.base.complaint.BaseComplaintOperateLogDO;
  14. import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
  15. import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
  16. import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
  17. import com.yihu.jw.entity.base.doctor.BaseDoctorRoleDO;
  18. import com.yihu.jw.entity.base.patient.BasePatientDO;
  19. import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
  20. import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
  21. import com.yihu.jw.patient.dao.BasePatientDao;
  22. import com.yihu.jw.restmodel.web.MixEnvelop;
  23. import com.yihu.jw.utils.hibernate.HibenateUtils;
  24. import com.yihu.jw.wechat.enterprise.EnterpriseService;
  25. import org.apache.commons.lang3.StringUtils;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.beans.factory.annotation.Value;
  28. import org.springframework.jdbc.core.JdbcTemplate;
  29. import org.springframework.stereotype.Service;
  30. import org.springframework.transaction.annotation.Transactional;
  31. import java.util.*;
  32. @Service
  33. public class BaseComplaintService {
  34. @Autowired
  35. private BaseComplaintDictDao baseComplaintDictDao;
  36. @Autowired
  37. private BaseComplaintDoctorDao baseComplaintDoctorDao;
  38. @Autowired
  39. private BaseDoctorDao baseDoctorDao;
  40. @Autowired
  41. private BaseDoctorHospitalDao baseDoctorHospitalDao;
  42. @Autowired
  43. private HibenateUtils hibenateUtils;
  44. @Autowired
  45. private BaseComplaintDao baseComplaintDao;
  46. @Autowired
  47. private ObjectMapper objectMapper;
  48. @Autowired
  49. private DictHospitalDeptDao dictHospitalDeptDao;
  50. @Autowired
  51. private BaseComplaintOperateDao baseComplaintOperateDao;
  52. @Autowired
  53. private BaseDoctorRoleDao baseDoctorRoleDao;
  54. @Autowired
  55. private BasePatientDao basePatientDao;
  56. @Autowired
  57. private EnterpriseService enterpriseService;
  58. @Autowired
  59. private WlyyHospitalSysDictDao wlyyHospitalSysDictDao;
  60. @Autowired
  61. JdbcTemplate jdbcTemplate;
  62. @Value("${wechat.id}")
  63. private String wxId;
  64. @Value("${wechat.flag}")
  65. private boolean flag;
  66. //修改新增
  67. public BaseComplaintDictDO createOrUpdateDict(String id, String name) {
  68. BaseComplaintDictDO baseComplaintDictDO = new BaseComplaintDictDO();
  69. if (StringUtils.isNoneBlank(id)) {
  70. baseComplaintDictDO = baseComplaintDictDao.findByIdAndIsDel(id);
  71. baseComplaintDictDO.setName(name);
  72. baseComplaintDictDO.setUpdateTime(new Date());
  73. } else {
  74. baseComplaintDictDO.setIsDel("1");
  75. baseComplaintDictDO.setName(name);
  76. baseComplaintDictDO.setCreateTime(new Date());
  77. }
  78. return baseComplaintDictDao.save(baseComplaintDictDO);
  79. }
  80. //删除
  81. public BaseComplaintDictDO deleteDict(String id) {
  82. BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findByIdAndIsDel(id);
  83. if (null != baseComplaintDictDO) {
  84. baseComplaintDictDO.setIsDel("0");
  85. baseComplaintDictDO.setUpdateTime(new Date());
  86. baseComplaintDictDao.save(baseComplaintDictDO);
  87. }
  88. List<BaseComplaintDoctorDO> baseComplaintDoctorDOs = baseComplaintDoctorDao.findbyComplaintId(id);
  89. for (BaseComplaintDoctorDO baseComplaintDoctorDO : baseComplaintDoctorDOs) {
  90. baseComplaintDoctorDO.setIsDel("0");
  91. }
  92. baseComplaintDoctorDao.saveAll(baseComplaintDoctorDOs);
  93. return baseComplaintDictDO;
  94. }
  95. public BaseComplaintDictDO findOneDict(String id) {
  96. BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findByIdAndIsDel(id);
  97. return baseComplaintDictDO;
  98. }
  99. //查询
  100. public List<BaseComplaintDictDO> findAll(String name) {
  101. List<BaseComplaintDictDO> list = new ArrayList<>();
  102. if (StringUtils.isNoneBlank(name)) {
  103. list = baseComplaintDictDao.findByName(name);
  104. } else {
  105. list = baseComplaintDictDao.findByAll();
  106. }
  107. return list;
  108. }
  109. //新增投诉管理医生
  110. @Transactional
  111. public void createOrUpdateComplainDoctor(String id, String complaintId, String doctorList) throws Exception {
  112. JSONArray jsonArray = JSON.parseArray(doctorList);
  113. for (int i = 0; i < jsonArray.size(); i++) {
  114. JSONObject jsonObject = jsonArray.getJSONObject(i);
  115. String doctor = jsonObject.getString("doctor");
  116. String deptCode = jsonObject.getString("deptCode");
  117. String deptName = "";
  118. String doctorName = "";
  119. // BaseComplaintDoctorDO preDoctor = baseComplaintDoctorDao.findbyDoctorAndDel(doctor);
  120. BaseDoctorDO baseDoctorDO = baseDoctorDao.findByIdAndDel(doctor);
  121. List<BaseDoctorRoleDO> baseDoctorRoleDOs = baseDoctorRoleDao.findByDoctorCode(doctor);
  122. if (baseDoctorRoleDOs == null || baseDoctorRoleDOs.size() == 0) {
  123. BaseDoctorRoleDO baseDoctorRoleDO = new BaseDoctorRoleDO();
  124. baseDoctorRoleDO.setDoctorCode(doctor);
  125. baseDoctorRoleDO.setRoleCode("specialist");
  126. baseDoctorRoleDao.save(baseDoctorRoleDO);
  127. } else if (baseDoctorRoleDOs != null) {
  128. Boolean addRoleFlag = true;//是否为对应医生添加专科医生角色表示 true即为添加
  129. for (BaseDoctorRoleDO baseDoctorRoleDO : baseDoctorRoleDOs) {
  130. if (baseDoctorRoleDO.getRoleCode().equalsIgnoreCase("specialist")) {
  131. addRoleFlag = false;
  132. }
  133. }
  134. if (addRoleFlag) {
  135. BaseDoctorRoleDO baseDoctorRoleDO = new BaseDoctorRoleDO();
  136. baseDoctorRoleDO.setDoctorCode(doctor);
  137. baseDoctorRoleDO.setRoleCode("specialist");
  138. baseDoctorRoleDao.save(baseDoctorRoleDO);
  139. }
  140. }
  141. if (null != baseDoctorDO) {
  142. doctorName = baseDoctorDO.getName();
  143. }
  144. // if (preDoctor!=null){
  145. // throw new Exception("医生"+doctorName+"已有负责的投诉类型");
  146. // }
  147. List<BaseDoctorHospitalDO> baseDoctorHospitalDO = baseDoctorHospitalDao.findByDeptCodeDoctorCode(deptCode, doctor);
  148. if (baseDoctorHospitalDO != null && baseDoctorHospitalDO.size() > 0) {
  149. deptName = baseDoctorHospitalDO.get(0).getDeptName();
  150. }
  151. if (StringUtils.isNoneBlank(id)) {
  152. BaseComplaintDoctorDO baseComplaintDoctorDO = new BaseComplaintDoctorDO();
  153. baseComplaintDoctorDO.setDept(deptCode);
  154. baseComplaintDoctorDO.setDeptName(deptName);
  155. baseComplaintDoctorDO.setComplaintId(id);
  156. baseComplaintDoctorDO.setDoctor(doctor);
  157. baseComplaintDoctorDO.setDoctorName(doctorName);
  158. baseComplaintDoctorDO.setIsDel("1");
  159. baseComplaintDoctorDO.setCreateTime(new Date());
  160. baseComplaintDoctorDao.save(baseComplaintDoctorDO);
  161. }
  162. }
  163. }
  164. //删除管理医生
  165. public BaseComplaintDoctorDO deleteDoctorComplain(String id) {
  166. BaseComplaintDoctorDO baseComplaintDoctorDO = baseComplaintDoctorDao.findByDelAndId(id);
  167. if (null != baseComplaintDoctorDO) {
  168. baseComplaintDoctorDO.setIsDel("0");
  169. baseComplaintDoctorDO.setUpdateTime(new Date());
  170. baseComplaintDoctorDao.save(baseComplaintDoctorDO);
  171. }
  172. return baseComplaintDoctorDO;
  173. }
  174. public MixEnvelop findComplaintDoctor(String doctor, String doctorName, String deptName, String complaintType, Integer page, Integer pageSize) {
  175. String sql = "select t.id as \"id\"," +
  176. " t.complaint_id as \"complaintId\"," +
  177. " t.doctor as \"doctor\"," +
  178. " t.doctor_name as \"doctorName\"," +
  179. " t.dept as \"dept\"," +
  180. " t.dept_name as \"deptName\"," +
  181. " t.is_del as \"isDel\"," +
  182. " t.create_time as \"createTime\"," +
  183. " t.update_time as \"updateTime\"," +
  184. " d.photo as \"photo\"," +
  185. " b.name as \"name\" " +
  186. " from base_complaint_doctor t left join base_complaint_dict b" +
  187. " on t.complaint_id=b.id " +
  188. " left join base_doctor d on t.doctor=d.id where t.is_del='1'";
  189. if (StringUtils.isNoneBlank(doctorName)) {
  190. sql += " and t.doctor_name like '%" + doctorName + "%'";
  191. }
  192. if (StringUtils.isNoneBlank(deptName)) {
  193. sql += " and t.dept_name like '%" + deptName + "%'";
  194. }
  195. if (StringUtils.isNoneBlank(complaintType)) {
  196. sql += " and t.complaint_id = '" + complaintType + "'";
  197. }
  198. if (StringUtils.isNoneBlank(doctor)) {
  199. sql += " and t.doctor = '" + doctor + "'";
  200. }
  201. sql += "order by t.create_time desc";
  202. List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql, page, pageSize);
  203. List<Map<String, Object>> listCount = hibenateUtils.createSQLQuery(sql);
  204. MixEnvelop mixEnvelop = new MixEnvelop();
  205. mixEnvelop.setTotalCount(listCount == null ? 0 : listCount.size());
  206. mixEnvelop.setPageSize(pageSize);
  207. mixEnvelop.setCurrPage(page);
  208. mixEnvelop.setDetailModelList(list);
  209. return mixEnvelop;
  210. }
  211. /**
  212. * 去重医生
  213. */
  214. public MixEnvelop findComplaintDoctorNew(String doctor, String doctorName,String role, String deptName, String complaintType, Integer page, Integer pageSize) {
  215. String sql = "select " +
  216. " t.doctor as \"doctor\"," +
  217. " t.doctor_name as \"doctorName\"," +
  218. " t.dept as \"dept\"," +
  219. " t.dept_name as \"deptName\"," +
  220. " t.is_del as \"isDel\"," +
  221. " t.create_time as \"createTime\"," +
  222. " t.update_time as \"updateTime\"," +
  223. " d.photo as \"photo\"," +
  224. " t.complaint_id as \"complaintId\"," +
  225. " group_concat(b.name) as \"name\" " +
  226. " from base_complaint_doctor t " +
  227. " INNER join base_complaint_dict b on t.complaint_id=b.id " +
  228. " INNER join base_doctor d on t.doctor=d.id" +
  229. " where t.is_del='1'";
  230. if (StringUtils.isNoneBlank(doctorName)) {
  231. sql += " and t.doctor_name like '%" + doctorName + "%'";
  232. }
  233. if (StringUtils.isNoneBlank(deptName)) {
  234. sql += " and t.dept_name like '%" + deptName + "%'";
  235. }
  236. if (StringUtils.isNoneBlank(complaintType)) {
  237. sql += " and t.complaint_id = '" + complaintType + "'";
  238. }
  239. if (StringUtils.isNoneBlank(doctor)) {
  240. sql += " and t.doctor = '" + doctor + "'";
  241. }
  242. sql += "order by t.create_time desc";
  243. List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql, page, pageSize);
  244. List<Map<String, Object>> listCount = hibenateUtils.createSQLQuery(sql);
  245. MixEnvelop mixEnvelop = new MixEnvelop();
  246. mixEnvelop.setTotalCount(listCount == null ? 0 : listCount.size());
  247. mixEnvelop.setPageSize(pageSize);
  248. mixEnvelop.setCurrPage(page);
  249. mixEnvelop.setDetailModelList(list);
  250. return mixEnvelop;
  251. }
  252. public BaseComplaintDoctorDO findOneDoctorComplain(String id) {
  253. BaseComplaintDoctorDO baseComplaintDoctorDO = baseComplaintDoctorDao.findByDelAndId(id);
  254. return baseComplaintDoctorDO;
  255. }
  256. /*
  257. * 患者举报接口
  258. * */
  259. public BaseComplaintDO patiemtComplaint(String json) throws Exception {
  260. WlyyHospitalSysDictDO wlyyHospitalSysDictDO = wlyyHospitalSysDictDao.findById("complaintOpenControl").orElse(null);
  261. if (wlyyHospitalSysDictDO != null) {
  262. if (!"1".equalsIgnoreCase(wlyyHospitalSysDictDO.getDictCode())) {
  263. throw new Exception("投诉通道已关闭");
  264. }
  265. } else {
  266. throw new Exception("投诉通道已关闭");
  267. }
  268. BaseComplaintDO baseComplaintDO = objectMapper.readValue(json, BaseComplaintDO.class);
  269. if(StringUtils.isBlank(baseComplaintDO.getComplaintId())){
  270. //其他
  271. List<BaseComplaintDictDO> dictDOList = baseComplaintDictDao.findByName(baseComplaintDO.getComplaintName());
  272. if(dictDOList.size()>0){
  273. baseComplaintDO.setComplaintId(dictDOList.get(0).getId());
  274. }
  275. }else {
  276. BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findByIdAndIsDel(baseComplaintDO.getComplaintId());
  277. if (baseComplaintDictDO != null) {
  278. baseComplaintDO.setComplaintName(baseComplaintDictDO.getName());
  279. }
  280. }
  281. if (StringUtils.isNoneBlank(baseComplaintDO.getVisitDept())) {
  282. DictHospitalDeptDO dictHospitalDeptDO = dictHospitalDeptDao.findByCode(baseComplaintDO.getVisitDept());
  283. if (dictHospitalDeptDO != null) {
  284. baseComplaintDO.setVisitDeptName(dictHospitalDeptDO.getName());
  285. }
  286. }
  287. /*if(StringUtils.isNoneBlank(baseComplaintDO.getPatient())){
  288. BasePatientDO basePatientDO= basePatientDao.findById(baseComplaintDO.getPatient());
  289. if (basePatientDO!=null){
  290. basePatientDO.setIdcardFront(baseComplaintDO.getIdcardFront());
  291. basePatientDO.setIdcardBack(baseComplaintDO.getIdcardBack());
  292. basePatientDao.save(basePatientDO);
  293. }
  294. }*/
  295. baseComplaintDO.setIsDel("1");
  296. baseComplaintDO.setStatus("0");
  297. baseComplaintDO.setCreateTime(new Date());
  298. baseComplaintDO.setDefaultdoctor("defalutDoctor");
  299. baseComplaintDO = baseComplaintDao.save(baseComplaintDO);
  300. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  301. baseComplaintOperateLogDO.setOperateFrom(baseComplaintDO.getPatient());
  302. baseComplaintOperateLogDO.setStatus("0");
  303. baseComplaintOperateLogDO.setOperateType("投诉提交");
  304. baseComplaintOperateLogDO.setRelationCode(baseComplaintDO.getId());
  305. baseComplaintOperateLogDO.setCreateTime(new Date());
  306. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  307. try {
  308. List<BaseComplaintDoctorDO> doctorList = baseComplaintDoctorDao.findbyComplaintId(baseComplaintDO.getComplaintId());
  309. for (BaseComplaintDoctorDO baseComplaintDoctorDO : doctorList) {
  310. String url = "https://hlwyy.xmzsh.com/hlwyy/ims-app-web/#/complaint/detail?id=" + baseComplaintDO.getId();
  311. enterpriseService.sendTWMesByDoctor("zsyy", baseComplaintDoctorDO.getDoctor(), "投诉反馈", "您收到一条投诉反馈,点击查看。", url);
  312. }
  313. } catch (Exception e) {
  314. }
  315. return baseComplaintDao.save(baseComplaintDO);
  316. }
  317. /*
  318. * 医生转交
  319. * */
  320. public BaseComplaintDO passTo(String id, String complaintId, String doctor, String operator, String reason) {
  321. BaseComplaintDO baseComplaintDO = baseComplaintDao.findById(id).orElse(null);
  322. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  323. String doctorName = "";
  324. String complaitTypeName = "";
  325. if (null != baseComplaintDO) {
  326. baseComplaintOperateLogDO.setOperateFrom(operator);
  327. baseComplaintOperateLogDO.setReason(reason);
  328. baseComplaintOperateLogDO.setOperateTo(doctor);
  329. baseComplaintOperateLogDO.setComplaintTo(complaintId);
  330. baseComplaintOperateLogDO.setComplaintFrom(baseComplaintDO.getComplaintId());
  331. baseComplaintOperateLogDO.setStatus("3");
  332. baseComplaintOperateLogDO.setOperateType("转交");
  333. baseComplaintOperateLogDO.setRelationCode(id);
  334. baseComplaintOperateLogDO.setCreateTime(new Date());
  335. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  336. /*BaseDoctorDO baseDoctorDO = baseDoctorDao.findByIdAndDel(doctor);
  337. if (null != baseDoctorDO) {
  338. doctorName=baseDoctorDO.getName();
  339. baseComplaintDO.setAcceptorName(doctorName);
  340. }
  341. baseComplaintDO.setAcceptor(doctor);*/
  342. if ("1".equalsIgnoreCase(baseComplaintDO.getStatus())) {
  343. baseComplaintDO.setStatus("0");
  344. }
  345. baseComplaintDO.setDefaultdoctor(doctor);
  346. baseComplaintDO.setComplaintId(complaintId);
  347. baseComplaintDO.setPassto(doctor);
  348. BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findByIdAndIsDel(complaintId);
  349. if (baseComplaintDictDO != null) {
  350. complaitTypeName = baseComplaintDictDO.getName();
  351. baseComplaintDO.setComplaintName(complaitTypeName);
  352. }
  353. baseComplaintDO = baseComplaintDao.save(baseComplaintDO);
  354. try {
  355. /*List<BaseComplaintDoctorDO> doctorList=baseComplaintDoctorDao.findbyComplaintId(baseComplaintDO.getComplaintId());
  356. for (BaseComplaintDoctorDO baseComplaintDoctorDO:doctorList)*/
  357. String url = "https://hlwyy.xmzsh.com/hlwyy/ims-app-web/#/complaint/detail?id=" + baseComplaintDO.getId();
  358. enterpriseService.sendTWMesByDoctor("zsyy", doctor, "投诉反馈", "您收到一条投诉反馈,点击查看。", url);
  359. } catch (Exception e) {
  360. }
  361. return baseComplaintDO;
  362. }
  363. return null;
  364. }
  365. //接受投诉
  366. public BaseComplaintDO doctorAccept(String id, String doctor) throws Exception {
  367. BaseComplaintDO baseComplaintDO = baseComplaintDao.findById(id).orElse(null);
  368. if (baseComplaintDO != null) {
  369. baseComplaintDO.setStatus("1");
  370. BaseDoctorDO baseDoctorDO = baseDoctorDao.findByIdAndDel(doctor);
  371. if (null != baseDoctorDO) {
  372. baseComplaintDO.setAcceptorName(baseDoctorDO.getName());
  373. }
  374. baseComplaintDO.setAcceptor(doctor);
  375. baseComplaintDO.setDefaultdoctor(doctor);
  376. baseComplaintDO.setAcceptTime(new Date());
  377. baseComplaintDao.save(baseComplaintDO);
  378. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  379. baseComplaintOperateLogDO.setOperateFrom(doctor);
  380. baseComplaintOperateLogDO.setStatus("1");
  381. baseComplaintOperateLogDO.setOperateType("接受");
  382. baseComplaintOperateLogDO.setRelationCode(id);
  383. baseComplaintOperateLogDO.setCreateTime(new Date());
  384. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  385. }/*else if ("1".equalsIgnoreCase(baseComplaintDO.getStatus())){
  386. throw new Exception("该工单已被接受");
  387. }else {
  388. throw new Exception("该工单已被处理完成");
  389. }*/
  390. return baseComplaintDO;
  391. }
  392. //反馈投诉
  393. public BaseComplaintDO dealComplaint(String id, String operator, String content, String imgUrl, String deptCode) throws Exception {
  394. BaseComplaintDO baseComplaintDO = baseComplaintDao.findById(id).orElse(null);
  395. if (baseComplaintDO != null) {
  396. baseComplaintDO.setDealTime(new Date());
  397. baseComplaintDO.setFeedBack(content);
  398. baseComplaintDO.setFeedImg(imgUrl);
  399. baseComplaintDO.setOperator(operator);
  400. baseComplaintDO.setDefaultdoctor(operator);
  401. baseComplaintDO.setStatus("2");
  402. BaseDoctorDO baseDoctorDO = baseDoctorDao.findByIdAndDel(operator);
  403. if (null != baseDoctorDO) {
  404. baseComplaintDO.setOperatorName(baseDoctorDO.getName());
  405. }
  406. baseComplaintDO.setOperatorDept(deptCode);
  407. List<BaseDoctorHospitalDO> baseDoctorHospitalDO = baseDoctorHospitalDao.findByDeptCodeDoctorCode(deptCode, operator);
  408. if (baseDoctorHospitalDO != null && baseDoctorHospitalDO.size() > 0) {
  409. baseComplaintDO.setOperatorDeptName(baseDoctorHospitalDO.get(0).getDeptName());
  410. }
  411. baseComplaintDao.save(baseComplaintDO);
  412. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  413. baseComplaintOperateLogDO.setOperateFrom(operator);
  414. baseComplaintOperateLogDO.setStatus("2");
  415. baseComplaintOperateLogDO.setOperateType("反馈");
  416. baseComplaintOperateLogDO.setRelationCode(id);
  417. baseComplaintOperateLogDO.setCreateTime(new Date());
  418. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  419. }/*else if ("2".equalsIgnoreCase(baseComplaintDO.getStatus())){
  420. throw new Exception("该工单已被处理完成");
  421. }else if ("0".equalsIgnoreCase(baseComplaintDO.getStatus())){
  422. throw new Exception("该工单未被接收");
  423. }*/
  424. return baseComplaintDO;
  425. }
  426. //查询投诉列表
  427. //passto 已转交
  428. public MixEnvelop findComplaintList(String role, String doctor, String status, String patientName, String patientId, String keyWord, String complaintId,
  429. String startTime, String endTime, Integer page, Integer pageSize, String pcAdmin) {
  430. MixEnvelop mixEnvelop = new MixEnvelop();
  431. Boolean queryAll = false;
  432. String sql = "select DISTINCT t.id as \"id\"," +
  433. " t.complaint_id as \"complaintId\"," +
  434. " t.complaint_name as \"complaintName\"," +
  435. " t.complaint_content as \"complaintContent\"," +
  436. " t.visit_type as \"visitType\"," +
  437. " case t.visit_type when '1' then '门诊' else '住院' end as \"visitTypeName\"," +
  438. " t.visit_time as \"visitTime\"," +
  439. " t.visit_dept as \"visitDept\"," +
  440. " t.visit_dept_name as \"visitDeptName\"," +
  441. " t.adm_no as \"admNo\"," +
  442. " t.patient as \"patient\"," +
  443. " t.patient_name as \"patientName\"," +
  444. " t.patient_idcard as \"patientIdcard\"," +
  445. " t.idcard_front as \"idcardFront\"," +
  446. " t.idcard_back as \"idcardBack\"," +
  447. " t.img_url as \"imgUrl\"," +
  448. " t.is_del as \"isDel\"," +
  449. " t.status as \"status\"," +
  450. " t.create_time as \"createTime\"," +
  451. " t.accept_time as \"acceptTime\"," +
  452. " t.deal_time as \"dealTime\"," +
  453. " t.operator_dept as \"operatorDept\"," +
  454. " t.operator_dept_name as \"operatorDeptName\"," +
  455. " t.operator as \"operator\"," +
  456. " t.operator_name as \"operatorName\"," +
  457. " t.feed_back as \"feedBack\"," +
  458. " t.feed_img as \"feedImg\"," +
  459. " t.acceptor as \"acceptor\"," +
  460. " t.mobile as \"mobile\"," +
  461. " t.passto as \"passto\"," +
  462. " t.acceptor_name as \"acceptorName\"" +
  463. " from base_complaint t " +
  464. " left join base_patient b on t.patient=b.id ";
  465. sql += " left join base_complaint_operate_log g on t.id=g.relation_code where t.is_del='1' ";
  466. if (!"1".equals(pcAdmin)) {
  467. //排除撤销的
  468. sql += " and t.status<>'-1' ";
  469. } else {
  470. queryAll = true;
  471. }
  472. if (StringUtils.isNoneBlank(status) && "3".equalsIgnoreCase(status)) {
  473. sql += " and g.status='3' ";
  474. }
  475. boolean flag = false;
  476. if (!queryAll) {
  477. String isOther = "";
  478. String complaint = "";
  479. String sql1 = "SELECT distinct di.id,di.`name` from base_complaint_doctor d,base_complaint_dict di " +
  480. "WHERE di.id=d.complaint_id and d.is_del=1 and di.is_del=1 and d.doctor='"+doctor+"'";
  481. List<Map<String, Object>> list = jdbcTemplate.queryForList(sql1);
  482. if(list.size()==0){
  483. mixEnvelop.setTotalCount(0);
  484. mixEnvelop.setDetailModelList(new ArrayList());
  485. mixEnvelop.setPageSize(pageSize);
  486. mixEnvelop.setCurrPage(page);
  487. return mixEnvelop;
  488. }
  489. for (Map<String, Object> map:list){
  490. String id = map.get("id")+"";
  491. String name = map.get("name")+"";
  492. if("其他".equals(name)){
  493. isOther = id;
  494. }else {
  495. complaint += id+",";
  496. }
  497. }
  498. if(StringUtils.isNotBlank(complaint)){
  499. complaint = complaint.substring(0,complaint.length()-1);
  500. complaint = complaint.replaceAll(",","','");
  501. }
  502. if (StringUtils.isNoneBlank(status) && "3".equalsIgnoreCase(status)) {
  503. sql += " and g.operate_from='" + doctor;
  504. } else if (StringUtils.isNoneBlank(status) && "0".equalsIgnoreCase(status)) {
  505. if(StringUtils.isNotBlank(isOther)){
  506. //其他权限医生可以看到所有已投诉的工单
  507. sql += " and t.status='0' and ((t.passto='" + doctor + "' and t.complaint_id in ('"+complaint+"')) or t.complaint_id='"+isOther+"' ) ";
  508. }else {
  509. sql += " and t.status='0' and t.passto='" + doctor + "' and t.complaint_id in ('"+complaint+"') ";
  510. }
  511. } else if (StringUtils.isNoneBlank(status) && "1".equalsIgnoreCase(status)) {
  512. sql += " and t.status='1' and t.acceptor='" + doctor + "' ";
  513. } else if (StringUtils.isNoneBlank(status) && "2".equalsIgnoreCase(status)) {
  514. sql += " and t.status='2' and t.operator='" + doctor + "' ";
  515. } else {
  516. String statusSql = "";
  517. if(StringUtils.isNotBlank(isOther)){
  518. //其他权限医生可以看到所有已投诉的工单
  519. statusSql += " t.status='0' and ((t.passto='" + doctor + "' and t.complaint_id in ('"+complaint+"')) or t.complaint_id='"+isOther+"' ) ";
  520. }else {
  521. statusSql += " t.status='0' and t.passto='" + doctor + "' and t.complaint_id in ('"+complaint+"') ";
  522. }
  523. sql += " and ((t.status='2' and t.operator='" + doctor + "') or (t.status='1' and t.acceptor='" + doctor + "') " +
  524. " or (" + statusSql + " )) ";
  525. }
  526. } else {
  527. if (StringUtils.isNoneBlank(complaintId)) {
  528. sql += " and t.complaint_id='" + complaintId + "'";
  529. }
  530. if (StringUtils.isNoneBlank(status)) {
  531. sql += " and t.status ='" + status + "'";
  532. }
  533. }
  534. if (StringUtils.isNoneBlank(patientName)) {
  535. sql += " and t.patient_name like '%" + patientName + "%'";
  536. }
  537. if (StringUtils.isNoneBlank(patientId)) {
  538. sql += " and t.patient ='" + patientId + "'";
  539. }
  540. if (StringUtils.isNoneBlank(keyWord)) {
  541. sql += " and (t.patient_idcard like '%" + keyWord + "%' or t.patient_name like '%" + keyWord + "%')";
  542. }
  543. if (StringUtils.isNotBlank(startTime)) {
  544. if ("xm_ykyy_wx".equals(wxId)) {
  545. if (flag) {
  546. sql += " and t.create_time > '" + startTime + "'";
  547. } else {
  548. sql += " and t.create_time > to_date('" + startTime + "', 'yyyy-mm-dd hh24:mi:ss') ";
  549. }
  550. } else {
  551. sql += " and t.create_time > '" + startTime + "'";
  552. }
  553. }
  554. if (StringUtils.isNotBlank(endTime)) {
  555. if ("xm_ykyy_wx".equals(wxId)) {
  556. if (flag) {
  557. sql += " and t.create_time<='" + endTime + "'";
  558. } else {
  559. sql += " and t.create_time<= to_date('" + endTime + "','yyyy-mm-dd hh24:mi:ss')";
  560. }
  561. } else {
  562. sql += " and t.create_time<='" + endTime + "'";
  563. }
  564. }
  565. sql += " order by t.create_time desc ";
  566. System.out.println("sql" + sql);
  567. List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql, page, pageSize);
  568. String sqlcount = "SELECT COUNT(1) AS \"total\" FROM (" + sql + ") q";
  569. Long count = 0L;
  570. List<Map<String, Object>> total = hibenateUtils.createSQLQuery(sqlcount);
  571. if (total != null) {
  572. //mysql 与 Oracle 聚合函数返回类型不一致,需要判断装换
  573. count = hibenateUtils.objTransformLong(total.get(0).get("total"));
  574. }
  575. mixEnvelop.setTotalCount(count.intValue());
  576. mixEnvelop.setDetailModelList(list);
  577. mixEnvelop.setPageSize(pageSize);
  578. mixEnvelop.setCurrPage(page);
  579. return mixEnvelop;
  580. }
  581. public BaseComplaintDO findOnePaitentComplaint(String id) {
  582. BaseComplaintDO baseComplaintDO = baseComplaintDao.findById(id).orElse(null);
  583. BasePatientDO basePatientDO = basePatientDao.findById(baseComplaintDO.getPatient()).orElse(null);
  584. if (null != basePatientDO) {
  585. baseComplaintDO.setMobile(basePatientDO.getMobile());
  586. }
  587. WlyyHospitalSysDictDO wlyyHospitalSysDictDO = wlyyHospitalSysDictDao.findById("latestFeedBackTime").orElse(null);
  588. Integer timeOut = 15;
  589. if (wlyyHospitalSysDictDO != null) {
  590. timeOut = Integer.parseInt(wlyyHospitalSysDictDO.getDictValue());
  591. }
  592. long latestDate = baseComplaintDO.getCreateTime().getTime() + timeOut * 24 * 60 * 60 * 1000;
  593. baseComplaintDO.setLatestFeedTime((new Date(latestDate)));
  594. baseComplaintDO.setVisitTypeName(baseComplaintDO.getVisitType().equalsIgnoreCase("1") ? "门诊" : "住院");
  595. return baseComplaintDO;
  596. }
  597. //查询投诉列表
  598. public MixEnvelop findPatientComplaintList(String status, String patientName, String patientId,
  599. String startTime, String endTime, String complaintType, Integer page, Integer pageSize) {
  600. MixEnvelop mixEnvelop = new MixEnvelop();
  601. String sql = "select t.id as \"id\"," +
  602. " t.complaint_id as \"complaintId\"," +
  603. " t.complaint_name as \"complaintName\"," +
  604. " t.complaint_content as \"complaintContent\"," +
  605. " t.visit_type as \"visitType\"," +
  606. " case t.visit_type when '1' then '门诊' else '住院' end as \"visitTypeName\"," +
  607. " t.visit_time as \"visitTime\"," +
  608. " t.visit_dept as \"visitDept\"," +
  609. " t.visit_dept_name as \"visitDeptName\"," +
  610. " t.adm_no as \"admNo\"," +
  611. " t.patient as \"patient\"," +
  612. " t.patient_name as \"patientName\"," +
  613. " t.patient_idcard as \"patientIdcard\"," +
  614. " t.idcard_front as \"idcardFront\"," +
  615. " t.idcard_back as \"idcardBack\"," +
  616. " t.img_url as \"imgUrl\"," +
  617. " t.is_del as \"isDel\"," +
  618. " t.status as \"status\"," +
  619. " t.create_time as \"createTime\"," +
  620. " t.accept_time as \"acceptTime\"," +
  621. " t.deal_time as \"dealTime\"," +
  622. " t.operator_dept as \"operatorDept\"," +
  623. " t.operator_dept_name as \"operatorDeptName\"," +
  624. " t.operator as \"operator\"," +
  625. " t.operator_name as \"operatorName\"," +
  626. " t.feed_back as \"feedBack\"," +
  627. " t.feed_img as \"feedImg\"," +
  628. " t.acceptor as \"acceptor\"," +
  629. " t.mobile as \"mobile\"," +
  630. " t.acceptor_name as \"acceptorName\"" +
  631. " from base_complaint t " +
  632. " left join base_patient b on t.patient=b.id" +
  633. " where t.is_del='1'";
  634. if (StringUtils.isNoneBlank(status)) {
  635. sql += " and t.status ='" + status + "'";
  636. }
  637. if (StringUtils.isNoneBlank(patientName)) {
  638. sql += " and t.patient_name like '%" + patientName + "%'";
  639. }
  640. if (StringUtils.isNoneBlank(patientId)) {
  641. sql += " and t.patient ='" + patientId + "'";
  642. }
  643. if (StringUtils.isNoneBlank(complaintType)) {
  644. sql += " and t.complaint_id ='" + complaintType + "'";
  645. }
  646. if (StringUtils.isNotBlank(startTime)) {
  647. if ("xm_ykyy_wx".equals(wxId)) {
  648. if (flag) {
  649. sql += " and t.create_time > '" + startTime + "'";
  650. } else {
  651. sql += " and t.create_time > to_date('" + startTime + "', 'yyyy-mm-dd hh24:mi:ss') ";
  652. }
  653. } else {
  654. sql += " and t.create_time > '" + startTime + "'";
  655. }
  656. }
  657. if (StringUtils.isNotBlank(endTime)) {
  658. if ("xm_ykyy_wx".equals(wxId)) {
  659. if (flag) {
  660. sql += " and t.create_time<='" + endTime + "'";
  661. } else {
  662. sql += " and t.create_time<= to_date('" + endTime + "','yyyy-mm-dd hh24:mi:ss')";
  663. }
  664. } else {
  665. sql += " and t.create_time<='" + endTime + "'";
  666. }
  667. }
  668. sql += " order by t.create_time desc ";
  669. List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql, page, pageSize);
  670. String sqlcount = "SELECT COUNT(1) AS \"total\" FROM (" + sql + ") q";
  671. Long count = 0L;
  672. List<Map<String, Object>> total = hibenateUtils.createSQLQuery(sqlcount);
  673. if (total != null) {
  674. //mysql 与 Oracle 聚合函数返回类型不一致,需要判断装换
  675. count = hibenateUtils.objTransformLong(total.get(0).get("total"));
  676. }
  677. mixEnvelop.setTotalCount(count.intValue());
  678. mixEnvelop.setDetailModelList(list);
  679. mixEnvelop.setPageSize(pageSize);
  680. mixEnvelop.setCurrPage(page);
  681. return mixEnvelop;
  682. }
  683. /*
  684. * 查询投诉数量*/
  685. public Map<String, Object> findComplaintCount(String doctor, String role, String pcAdmin) {
  686. Integer complaints = 0;
  687. Integer recieve = 0;
  688. Integer deal = 0;
  689. Integer cacel = 0;
  690. Integer passto = 0;
  691. Integer total = 0;
  692. Boolean queryAll = false;
  693. if ("1".equalsIgnoreCase(pcAdmin)) {
  694. queryAll = true;
  695. }
  696. if (!queryAll) {
  697. String complaint = "";
  698. String isOther = "";
  699. String sql1 = "SELECT distinct di.id,di.`name` from base_complaint_doctor d,base_complaint_dict di " +
  700. "WHERE di.id=d.complaint_id and d.is_del=1 and di.is_del=1 and d.doctor='"+doctor+"'";
  701. List<Map<String, Object>> list = jdbcTemplate.queryForList(sql1);
  702. if(list.size()==0){
  703. Map map = new HashMap();
  704. map.put("complaints", complaints);
  705. map.put("recieve", recieve);
  706. map.put("deal", deal);
  707. map.put("passto", passto);
  708. map.put("cacel", cacel);
  709. map.put("total", total);
  710. return map;
  711. }
  712. for (Map<String, Object> map:list){
  713. String id = map.get("id")+"";
  714. String name = map.get("name")+"";
  715. complaint += id+",";
  716. if("其他".equals(name)){
  717. isOther = id;
  718. }else {
  719. complaint += id+",";
  720. }
  721. }
  722. if(StringUtils.isNotBlank(complaint)){
  723. complaint = complaint.substring(0,complaint.length()-1);
  724. complaint = complaint.replaceAll(",","','");
  725. }
  726. complaints = getCountByStatus(doctor, "0",complaint,isOther);
  727. recieve = getCountByStatus(doctor, "1",complaint,"");
  728. deal = getCountByStatus(doctor, "2",complaint,"");
  729. // passto = getCountByPassto(doctor);
  730. // total = getCountByStatus(doctor, "",complaint);
  731. //撤销
  732. cacel = getCountByStatus(doctor, "-1",complaint,"");
  733. if (StringUtils.isNotBlank(pcAdmin)) {
  734. total = complaints + recieve+deal+cacel;
  735. System.out.println("是pc管理员");
  736. } else {
  737. total = complaints + recieve+deal;
  738. }
  739. //cacel=baseComplaintDao.getCountByStatusAndComplaintId("-1",baseComplaintDoctorDO.getComplaintId());
  740. } else {
  741. complaints = baseComplaintDao.getCountByStatus("0");
  742. recieve = baseComplaintDao.getCountByStatus("1");
  743. deal = baseComplaintDao.getCountByStatus("2");
  744. cacel = baseComplaintDao.getCountByStatus("-1");
  745. // passto = getCountByPassto("");
  746. total = complaints + recieve + deal+cacel;
  747. }
  748. Map map = new HashMap();
  749. map.put("complaints", complaints);
  750. map.put("recieve", recieve);
  751. map.put("deal", deal);
  752. map.put("passto", passto);
  753. map.put("cacel", cacel);
  754. map.put("total", total);
  755. return map;
  756. }
  757. public Integer getCountByPassto(String doctor) {
  758. String sql = "select count(1) as \"total\" from (select DISTINCT t.id from base_complaint t left join base_complaint_operate_log b" +
  759. " on t.id=b.relation_code where t.is_del='1' and t.passto is not null ";
  760. if (StringUtils.isNoneBlank(doctor)) {
  761. sql += " and b.operate_from='" + doctor + "'";
  762. }
  763. sql += ") m";
  764. List<Map<String, Object>> listcount = hibenateUtils.createSQLQuery(sql);
  765. Integer count = 0;
  766. if (listcount != null && listcount.size() > 0) {
  767. count = Integer.valueOf(listcount.get(0).get("total").toString());
  768. }
  769. return count;
  770. }
  771. public Integer getCountByStatus(String doctor, String status,String complaint,String isOther) {
  772. String sql = "select count(1) as \"count\" from (select DISTINCT t.id " +
  773. " from base_complaint t " +
  774. " left join base_patient b on t.patient=b.id ";
  775. sql += " left join base_complaint_operate_log g on t.id=g.relation_code where t.is_del='1' ";
  776. if ("3".equalsIgnoreCase(status)) {
  777. sql += " and g.status='3' ";
  778. }
  779. if (StringUtils.isNoneBlank(status) && "3".equalsIgnoreCase(status)) {
  780. sql += " and g.operate_from='" + doctor + "'";
  781. } else if (StringUtils.isNoneBlank(status) && "0".equalsIgnoreCase(status)) {
  782. if(StringUtils.isNotBlank(isOther)){
  783. //其他权限医生可以看到所有已投诉的工单
  784. sql += " and t.status='0' and ((t.passto='" + doctor + "' and t.complaint_id in ('"+complaint+"')) or t.complaint_id='"+isOther+"' ) ";
  785. }else {
  786. sql += " and t.status='0' and t.passto='" + doctor + "' and t.complaint_id in ('"+complaint+"') ";
  787. }
  788. } else if (StringUtils.isNoneBlank(status) && "1".equalsIgnoreCase(status)) {
  789. sql += " and t.status='1' and t.acceptor='" + doctor + "' ";
  790. } else if (StringUtils.isNoneBlank(status) && "2".equalsIgnoreCase(status)) {
  791. sql += " and t.status='2' and t.operator='" + doctor + "' ";
  792. }
  793. if (!StringUtils.isNoneBlank(status)) {
  794. sql += " and t.status !='-1'";
  795. }
  796. //complaint=complaint+","+types;
  797. System.out.println("sql" + sql);
  798. Integer count = 0;
  799. sql += ")g";
  800. List<Map<String, Object>> total = hibenateUtils.createSQLQuery(sql);
  801. if (total != null && total.size() > 0) {
  802. //mysql 与 Oracle 聚合函数返回类型不一致,需要判断装换
  803. count = Integer.valueOf(total.get(0).get("count").toString());
  804. }
  805. return count;
  806. }
  807. /*
  808. * 查询投诉数量*/
  809. public Map<String, Object> findComplaintCountPatient(String patient) {
  810. Integer complaints = 0;
  811. Integer recieve = 0;
  812. Integer deal = 0;
  813. Integer cacel = 0;
  814. complaints = baseComplaintDao.getCountByStatusByPatient("0", patient);
  815. recieve = baseComplaintDao.getCountByStatusByPatient("1", patient);
  816. deal = baseComplaintDao.getCountByStatusByPatient("2", patient);
  817. cacel = baseComplaintDao.getCountByStatusByPatient("-1", patient);
  818. Integer total = complaints + recieve + deal + cacel;
  819. Map map = new HashMap();
  820. map.put("complaints", complaints);
  821. map.put("recieve", recieve);
  822. map.put("deal", deal);
  823. map.put("cacel", cacel);
  824. map.put("total", total);
  825. return map;
  826. }
  827. public BaseComplaintDO cancelPaitentComplaint(String id, String patient) throws Exception {
  828. BaseComplaintDO baseComplaintDO = baseComplaintDao.findById(id).orElse(null);
  829. if (baseComplaintDO != null) {
  830. if ("0".equalsIgnoreCase(baseComplaintDO.getStatus())) {
  831. baseComplaintDO.setStatus("-1");
  832. baseComplaintDO = baseComplaintDao.save(baseComplaintDO);
  833. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  834. baseComplaintOperateLogDO.setOperateFrom(patient);
  835. baseComplaintOperateLogDO.setStatus("-1");
  836. baseComplaintOperateLogDO.setOperateType("居民撤销投诉");
  837. baseComplaintOperateLogDO.setRelationCode(baseComplaintDO.getId());
  838. baseComplaintOperateLogDO.setCreateTime(new Date());
  839. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  840. } else {
  841. throw new Exception("不允许撤销");
  842. }
  843. }
  844. return baseComplaintDO;
  845. }
  846. public List<Map<String, Object>> findComplaintOperateLog(String complaintId) {
  847. String sql = "select t.id as \"id\"," +
  848. " p.name as \"complaintNameFrom\" ," +
  849. " n.name as \"complaintNameto\", " +
  850. " t.operate_from as \"operateFrom\" ," +
  851. " t.reason as \"reason\" ," +
  852. " t.operate_to as \"operateTo\" ," +
  853. " t.cancel_by as \"cancelBy\", " +
  854. " t.operate_type as \"operateType\", " +
  855. " t.status as \"status\", " +
  856. " t.create_time as \"createTime\" ," +
  857. " t.relation_code as \"relationCode\" " +
  858. " from base_complaint_operate_log t left join base_complaint c" +
  859. " on t.relation_code=c.id" +
  860. " left join base_complaint_dict p on t.complaint_from= p.id" +
  861. " left join base_complaint_dict n on t.complaint_to=n.id where 1=1 ";
  862. if (StringUtils.isNoneBlank(complaintId)) {
  863. sql += " and t.relation_code='" + complaintId + "'";
  864. }
  865. sql += " order by t.create_time desc";
  866. List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql);
  867. List<WlyyHospitalSysDictDO> typeList = wlyyHospitalSysDictDao.findByDictName("complaintStatus");
  868. for (Map<String, Object> map : list) {
  869. if (map.get("operateFrom") != null) {
  870. if (map.get("status") != null) {
  871. for (WlyyHospitalSysDictDO wlyyHospitalSysDictDO : typeList) {
  872. if (map.get("status").toString().equalsIgnoreCase(wlyyHospitalSysDictDO.getDictCode())) {
  873. map.put("operateType", wlyyHospitalSysDictDO.getDictValue());
  874. }
  875. }
  876. if ("0".equalsIgnoreCase(map.get("status").toString()) || "-1".equalsIgnoreCase(map.get("status").toString())) {
  877. BasePatientDO basePatientDO = basePatientDao.findById(map.get("operateFrom").toString()).orElse(null);
  878. if (basePatientDO != null) {
  879. map.put("operateFromName", basePatientDO.getName());
  880. }
  881. } else {
  882. BaseDoctorDO baseDoctorDO = baseDoctorDao.findByIdAndDel(map.get("operateFrom").toString());
  883. if (baseDoctorDO != null) {
  884. map.put("operateFromName", baseDoctorDO.getName());
  885. }
  886. List<BaseDoctorHospitalDO> baseDoctorHospitalDO = baseDoctorHospitalDao.findByDoctorCode(map.get("operateFrom").toString());
  887. if (baseDoctorHospitalDO != null && baseDoctorHospitalDO.size() > 0) {
  888. map.put("operateFromDeptName", baseDoctorHospitalDO.get(0).getDeptName());
  889. }
  890. }
  891. }
  892. }
  893. if (map.get("operateTo") != null) {
  894. BaseDoctorDO baseDoctorDO = baseDoctorDao.findByIdAndDel(map.get("operateTo").toString());
  895. if (baseDoctorDO != null) {
  896. map.put("operateToName", baseDoctorDO.getName());
  897. }
  898. List<BaseDoctorHospitalDO> baseDoctorHospitalDO = baseDoctorHospitalDao.findByDoctorCode(map.get("operateTo").toString());
  899. if (baseDoctorHospitalDO != null && baseDoctorHospitalDO.size() > 0) {
  900. map.put("operateToDeptName", baseDoctorHospitalDO.get(0).getDeptName());
  901. }
  902. }
  903. }
  904. return list;
  905. }
  906. public List<Map<String, Object>> getComplaintList(String doctorCode) {
  907. String sql = " SELECT t.complaint_id from base_complaint_doctor t where t.is_del='1' and t.doctor='" + doctorCode + "'";
  908. List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
  909. return list;
  910. }
  911. }