BaseComplaintService.java 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719
  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.hospital.prescription.service.entrance.EntranceService;
  22. import com.yihu.jw.patient.dao.BasePatientDao;
  23. import com.yihu.jw.restmodel.web.MixEnvelop;
  24. import com.yihu.jw.utils.StringUtil;
  25. import com.yihu.jw.utils.hibernate.HibenateUtils;
  26. import com.yihu.jw.wechat.enterprise.EnterpriseService;
  27. import org.apache.commons.lang3.StringUtils;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.beans.factory.annotation.Value;
  30. import org.springframework.stereotype.Service;
  31. import org.springframework.transaction.annotation.Transactional;
  32. import java.util.*;
  33. @Service
  34. public class BaseComplaintService {
  35. @Autowired
  36. private BaseComplaintDictDao baseComplaintDictDao;
  37. @Autowired
  38. private BaseComplaintDoctorDao baseComplaintDoctorDao;
  39. @Autowired
  40. private BaseDoctorDao baseDoctorDao;
  41. @Autowired
  42. private BaseDoctorHospitalDao baseDoctorHospitalDao;
  43. @Autowired
  44. private HibenateUtils hibenateUtils;
  45. @Autowired
  46. private BaseComplaintDao baseComplaintDao;
  47. @Autowired
  48. private ObjectMapper objectMapper;
  49. @Autowired
  50. private DictHospitalDeptDao dictHospitalDeptDao;
  51. @Autowired
  52. private BaseComplaintOperateDao baseComplaintOperateDao;
  53. @Autowired
  54. private BaseDoctorRoleDao baseDoctorRoleDao;
  55. @Autowired
  56. private BasePatientDao basePatientDao;
  57. @Autowired
  58. private EnterpriseService enterpriseService;
  59. @Autowired
  60. private WlyyHospitalSysDictDao wlyyHospitalSysDictDao;
  61. @Value("${wechat.id}")
  62. private String wxId;
  63. @Value("${wechat.flag}")
  64. private boolean flag;
  65. //修改新增
  66. public BaseComplaintDictDO createOrUpdateDict(String id, String name) {
  67. BaseComplaintDictDO baseComplaintDictDO = new BaseComplaintDictDO();
  68. if (StringUtils.isNoneBlank(id)) {
  69. baseComplaintDictDO = baseComplaintDictDao.findById(id);
  70. baseComplaintDictDO.setName(name);
  71. baseComplaintDictDO.setUpdateTime(new Date());
  72. } else {
  73. baseComplaintDictDO.setIsDel("1");
  74. baseComplaintDictDO.setName(name);
  75. baseComplaintDictDO.setCreateTime(new Date());
  76. }
  77. return baseComplaintDictDao.save(baseComplaintDictDO);
  78. }
  79. //删除
  80. public BaseComplaintDictDO deleteDict(String id) {
  81. BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findById(id);
  82. if (null != baseComplaintDictDO) {
  83. baseComplaintDictDO.setIsDel("0");
  84. baseComplaintDictDO.setUpdateTime(new Date());
  85. baseComplaintDictDao.save(baseComplaintDictDO);
  86. }
  87. return baseComplaintDictDO;
  88. }
  89. public BaseComplaintDictDO findOneDict(String id) {
  90. BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findById(id);
  91. return baseComplaintDictDO;
  92. }
  93. //查询
  94. public List<BaseComplaintDictDO> findAll(String name) {
  95. List<BaseComplaintDictDO> list = new ArrayList<>();
  96. if (StringUtils.isNoneBlank(name)) {
  97. list = baseComplaintDictDao.findByName(name);
  98. } else {
  99. list = baseComplaintDictDao.findByAll();
  100. }
  101. return list;
  102. }
  103. //新增投诉管理医生
  104. @Transactional
  105. public void createOrUpdateComplainDoctor(String id, String complaintId, String doctorList) throws Exception {
  106. JSONArray jsonArray = JSON.parseArray(doctorList);
  107. for (int i=0;i<jsonArray.size();i++){
  108. JSONObject jsonObject = jsonArray.getJSONObject(i);
  109. String doctor = jsonObject.getString("doctor");
  110. String deptCode = jsonObject.getString("deptCode");
  111. String deptName = "";
  112. String doctorName = "";
  113. BaseComplaintDoctorDO preDoctor= baseComplaintDoctorDao.findbyDoctorAndDel(doctor);
  114. BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(doctor);
  115. if (null != baseDoctorDO) {
  116. doctorName = baseDoctorDO.getName();
  117. }
  118. if (preDoctor!=null){
  119. throw new Exception("医生"+doctorName+"已有负责的投诉类型");
  120. }
  121. List<BaseDoctorHospitalDO> baseDoctorHospitalDO = baseDoctorHospitalDao.findByDeptCodeDoctorCode(deptCode, doctor);
  122. if (baseDoctorHospitalDO != null && baseDoctorHospitalDO.size() > 0) {
  123. deptName = baseDoctorHospitalDO.get(0).getDeptName();
  124. }
  125. if (StringUtils.isNoneBlank(id)) {
  126. BaseComplaintDoctorDO baseComplaintDoctorDO = new BaseComplaintDoctorDO();
  127. baseComplaintDoctorDO.setDept(deptCode);
  128. baseComplaintDoctorDO.setDeptName(deptName);
  129. baseComplaintDoctorDO.setComplaintId(id);
  130. baseComplaintDoctorDO.setDoctor(doctor);
  131. baseComplaintDoctorDO.setDoctorName(doctorName);
  132. baseComplaintDoctorDO.setIsDel("1");
  133. baseComplaintDoctorDO.setCreateTime(new Date());
  134. baseComplaintDoctorDao.save(baseComplaintDoctorDO);
  135. }
  136. }
  137. }
  138. //删除管理医生
  139. public BaseComplaintDoctorDO deleteDoctorComplain(String id) {
  140. BaseComplaintDoctorDO baseComplaintDoctorDO = baseComplaintDoctorDao.findByDelAndId(id);
  141. if (null != baseComplaintDoctorDO) {
  142. baseComplaintDoctorDO.setIsDel("0");
  143. baseComplaintDoctorDO.setUpdateTime(new Date());
  144. baseComplaintDoctorDao.save(baseComplaintDoctorDO);
  145. }
  146. return baseComplaintDoctorDO;
  147. }
  148. public MixEnvelop findComplaintDoctor(String doctor,String doctorName, String deptName, String complaintType, Integer page, Integer pageSize) {
  149. String sql = "select t.id as \"id\"," +
  150. " t.complaint_id as \"complaintId\"," +
  151. " t.doctor as \"doctor\"," +
  152. " t.doctor_name as \"doctorName\"," +
  153. " t.dept as \"dept\"," +
  154. " t.dept_name as \"deptName\"," +
  155. " t.is_del as \"isDel\"," +
  156. " t.create_time as \"createTime\"," +
  157. " t.update_time as \"updateTime\"," +
  158. " d.photo as \"photo\"," +
  159. " b.name as \"name\" " +
  160. " from base_complaint_doctor t left join base_complaint_dict b" +
  161. " on t.complaint_id=b.id " +
  162. " left join base_doctor d on t.doctor=d.id where t.is_del='1'";
  163. if (StringUtils.isNoneBlank(doctorName)) {
  164. sql += " and t.doctor_name like '%" + doctorName + "%'";
  165. }
  166. if (StringUtils.isNoneBlank(deptName)) {
  167. sql += " and t.dept_name like '%" + deptName + "%'";
  168. }
  169. if (StringUtils.isNoneBlank(complaintType)) {
  170. sql += " and t.complaint_id = '" + complaintType + "'";
  171. }
  172. if (StringUtils.isNoneBlank(doctor)) {
  173. sql += " and t.doctor = '" + doctor + "'";
  174. }
  175. sql += "order by t.create_time desc";
  176. List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql, page, pageSize);
  177. List<Map<String, Object>> listCount = hibenateUtils.createSQLQuery(sql);
  178. MixEnvelop mixEnvelop = new MixEnvelop();
  179. mixEnvelop.setTotalCount(listCount == null ? 0 : listCount.size());
  180. mixEnvelop.setPageSize(pageSize);
  181. mixEnvelop.setCurrPage(page);
  182. mixEnvelop.setDetailModelList(list);
  183. return mixEnvelop;
  184. }
  185. public BaseComplaintDoctorDO findOneDoctorComplain(String id) {
  186. BaseComplaintDoctorDO baseComplaintDoctorDO = baseComplaintDoctorDao.findByDelAndId(id);
  187. return baseComplaintDoctorDO;
  188. }
  189. /*
  190. * 患者举报接口
  191. * */
  192. public BaseComplaintDO patiemtComplaint(String json) throws Exception{
  193. WlyyHospitalSysDictDO wlyyHospitalSysDictDO= wlyyHospitalSysDictDao.findById("complaintOpenControl");
  194. if (wlyyHospitalSysDictDO!=null){
  195. if (!"1".equalsIgnoreCase(wlyyHospitalSysDictDO.getDictCode())){
  196. throw new Exception("投诉通道已关闭");
  197. }
  198. }else {
  199. throw new Exception("投诉通道已关闭");
  200. }
  201. BaseComplaintDO baseComplaintDO =objectMapper.readValue(json,BaseComplaintDO.class);
  202. BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findById(baseComplaintDO.getComplaintId());
  203. if (baseComplaintDictDO!=null){
  204. baseComplaintDO.setComplaintName(baseComplaintDictDO.getName());
  205. }
  206. if (StringUtils.isNoneBlank(baseComplaintDO.getVisitDept())){
  207. DictHospitalDeptDO dictHospitalDeptDO=dictHospitalDeptDao.findByCode(baseComplaintDO.getVisitDept());
  208. if (dictHospitalDeptDO!=null){
  209. baseComplaintDO.setVisitDeptName(dictHospitalDeptDO.getName());
  210. }
  211. }
  212. /*if(StringUtils.isNoneBlank(baseComplaintDO.getPatient())){
  213. BasePatientDO basePatientDO= basePatientDao.findById(baseComplaintDO.getPatient());
  214. if (basePatientDO!=null){
  215. basePatientDO.setIdcardFront(baseComplaintDO.getIdcardFront());
  216. basePatientDO.setIdcardBack(baseComplaintDO.getIdcardBack());
  217. basePatientDao.save(basePatientDO);
  218. }
  219. }*/
  220. baseComplaintDO.setIsDel("1");
  221. baseComplaintDO.setStatus("0");
  222. baseComplaintDO.setCreateTime(new Date());
  223. baseComplaintDO= baseComplaintDao.save(baseComplaintDO);
  224. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  225. baseComplaintOperateLogDO.setOperateFrom(baseComplaintDO.getPatient());
  226. baseComplaintOperateLogDO.setStatus("0");
  227. baseComplaintOperateLogDO.setOperateType("投诉提交");
  228. baseComplaintOperateLogDO.setRelationCode(baseComplaintDO.getId());
  229. baseComplaintOperateLogDO.setCreateTime(new Date());
  230. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  231. try {
  232. List<BaseComplaintDoctorDO> doctorList=baseComplaintDoctorDao.findbyComplaintId(baseComplaintDO.getComplaintId());
  233. for (BaseComplaintDoctorDO baseComplaintDoctorDO:doctorList){
  234. String url="https://hlwyy.xmzsh.com/hlwyy/ims-app-web/#/complaint/detail?id="+baseComplaintDO.getId();
  235. enterpriseService.sendTWMesByDoctor("zsyy",baseComplaintDoctorDO.getDoctor(),"投诉反馈","您收到一条投诉反馈,点击查看。",url);
  236. }
  237. }catch (Exception e){
  238. }
  239. return baseComplaintDao.save(baseComplaintDO);
  240. }
  241. /*
  242. * 医生转交
  243. * */
  244. public BaseComplaintDO passTo(String id,String complaintId,String doctor,String operator){
  245. BaseComplaintDO baseComplaintDO = baseComplaintDao.findOne(id);
  246. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  247. String doctorName="";
  248. String complaitTypeName="";
  249. if (null!=baseComplaintDO){
  250. baseComplaintOperateLogDO.setOperateFrom(operator);
  251. baseComplaintOperateLogDO.setOperateTo(doctor);
  252. baseComplaintOperateLogDO.setComplaintTo(complaintId);
  253. baseComplaintOperateLogDO.setComplaintFrom(baseComplaintDO.getComplaintId());
  254. baseComplaintOperateLogDO.setStatus("3");
  255. baseComplaintOperateLogDO.setOperateType("转交");
  256. baseComplaintOperateLogDO.setRelationCode(id);
  257. baseComplaintOperateLogDO.setCreateTime(new Date());
  258. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  259. BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(doctor);
  260. if (null != baseDoctorDO) {
  261. doctorName=baseDoctorDO.getName();
  262. baseComplaintDO.setAcceptorName(doctorName);
  263. }
  264. baseComplaintDO.setAcceptor(doctor);
  265. baseComplaintDO.setComplaintId(complaintId);
  266. BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findById(complaintId);
  267. if (baseComplaintDictDO!=null){
  268. complaitTypeName=baseComplaintDictDO.getName();
  269. baseComplaintDO.setComplaintName(complaitTypeName);
  270. }
  271. baseComplaintDO= baseComplaintDao.save(baseComplaintDO);
  272. try {
  273. List<BaseComplaintDoctorDO> doctorList=baseComplaintDoctorDao.findbyComplaintId(baseComplaintDO.getComplaintId());
  274. for (BaseComplaintDoctorDO baseComplaintDoctorDO:doctorList){
  275. String url="https://hlwyy.xmzsh.com/hlwyy/ims-app-web/#/complaint/detail?id="+baseComplaintDO.getId();
  276. enterpriseService.sendTWMesByDoctor("zsyy",baseComplaintDoctorDO.getDoctor(),"投诉反馈","您收到一条投诉反馈,点击查看。",url);
  277. }
  278. }catch (Exception e){
  279. }
  280. return baseComplaintDO;
  281. }
  282. return null;
  283. }
  284. //接受投诉
  285. public BaseComplaintDO doctorAccept(String id,String doctor) throws Exception{
  286. BaseComplaintDO baseComplaintDO = baseComplaintDao.findOne(id);
  287. if (baseComplaintDO!=null&&"0".equalsIgnoreCase(baseComplaintDO.getStatus())){
  288. baseComplaintDO.setStatus("1");
  289. BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(doctor);
  290. if (null != baseDoctorDO) {
  291. baseComplaintDO.setAcceptorName(baseDoctorDO.getName());
  292. }
  293. baseComplaintDO.setAcceptor(doctor);
  294. baseComplaintDO.setAcceptTime(new Date());
  295. baseComplaintDao.save(baseComplaintDO);
  296. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  297. baseComplaintOperateLogDO.setOperateFrom(doctor);
  298. baseComplaintOperateLogDO.setStatus("1");
  299. baseComplaintOperateLogDO.setOperateType("接受");
  300. baseComplaintOperateLogDO.setRelationCode(id);
  301. baseComplaintOperateLogDO.setCreateTime(new Date());
  302. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  303. }else if ("1".equalsIgnoreCase(baseComplaintDO.getStatus())){
  304. throw new Exception("该工单已被接受");
  305. }else {
  306. throw new Exception("该工单已被处理完成");
  307. }
  308. return baseComplaintDO;
  309. }
  310. //反馈投诉
  311. public BaseComplaintDO dealComplaint(String id,String operator,String content,String imgUrl ,String deptCode) throws Exception{
  312. BaseComplaintDO baseComplaintDO = baseComplaintDao.findOne(id);
  313. if (baseComplaintDO!=null&&"1".equalsIgnoreCase(baseComplaintDO.getStatus())){
  314. baseComplaintDO.setDealTime(new Date());
  315. baseComplaintDO.setFeedBack(content);
  316. baseComplaintDO.setFeedImg(imgUrl);
  317. baseComplaintDO.setOperator(operator);
  318. baseComplaintDO.setStatus("2");
  319. BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(operator);
  320. if (null != baseDoctorDO) {
  321. baseComplaintDO.setOperatorName(baseDoctorDO.getName());
  322. }
  323. baseComplaintDO.setOperatorDept(deptCode);
  324. List<BaseDoctorHospitalDO> baseDoctorHospitalDO = baseDoctorHospitalDao.findByDeptCodeDoctorCode(deptCode, operator);
  325. if (baseDoctorHospitalDO != null && baseDoctorHospitalDO.size() > 0) {
  326. baseComplaintDO.setOperatorDeptName(baseDoctorHospitalDO.get(0).getDeptName());
  327. }
  328. baseComplaintDao.save(baseComplaintDO);
  329. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  330. baseComplaintOperateLogDO.setOperateFrom(operator);
  331. baseComplaintOperateLogDO.setStatus("2");
  332. baseComplaintOperateLogDO.setOperateType("反馈");
  333. baseComplaintOperateLogDO.setRelationCode(id);
  334. baseComplaintOperateLogDO.setCreateTime(new Date());
  335. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  336. }else if ("2".equalsIgnoreCase(baseComplaintDO.getStatus())){
  337. throw new Exception("该工单已被处理完成");
  338. }else if ("0".equalsIgnoreCase(baseComplaintDO.getStatus())){
  339. throw new Exception("该工单未被接收");
  340. }
  341. return baseComplaintDO;
  342. }
  343. //查询投诉列表
  344. public MixEnvelop findComplaintList(String role,String doctor,String status,String patientName,String patientId,String keyWord,String complaintId,
  345. String startTime,String endTime,Integer page ,Integer pageSize){
  346. MixEnvelop mixEnvelop = new MixEnvelop();
  347. Boolean queryAll=false;
  348. if ("admin".equalsIgnoreCase(role)){
  349. queryAll=true;
  350. }
  351. String sql="select t.id as \"id\"," +
  352. " t.complaint_id as \"complaintId\"," +
  353. " t.complaint_name as \"complaintName\"," +
  354. " t.complaint_content as \"complaintContent\"," +
  355. " t.visit_type as \"visitType\"," +
  356. " case t.visit_type when '1' then '门诊' else '住院' end as \"visitTypeName\"," +
  357. " t.visit_time as \"visitTime\"," +
  358. " t.visit_dept as \"visitDept\"," +
  359. " t.visit_dept_name as \"visitDeptName\"," +
  360. " t.adm_no as \"admNo\"," +
  361. " t.patient as \"patient\"," +
  362. " t.patient_name as \"patientName\"," +
  363. " t.patient_idcard as \"patientIdcard\"," +
  364. " t.idcard_front as \"idcardFront\"," +
  365. " t.idcard_back as \"idcardBack\"," +
  366. " t.img_url as \"imgUrl\"," +
  367. " t.is_del as \"isDel\"," +
  368. " t.status as \"status\"," +
  369. " t.create_time as \"createTime\"," +
  370. " t.accept_time as \"acceptTime\"," +
  371. " t.deal_time as \"dealTime\"," +
  372. " t.operator_dept as \"operatorDept\"," +
  373. " t.operator_dept_name as \"operatorDeptName\"," +
  374. " t.operator as \"operator\"," +
  375. " t.operator_name as \"operatorName\"," +
  376. " t.feed_back as \"feedBack\"," +
  377. " t.feed_img as \"feedImg\"," +
  378. " t.acceptor as \"acceptor\"," +
  379. " b.mobile as \"mobile\"," +
  380. " t.acceptor_name as \"acceptorName\"" +
  381. "from base_complaint t " +
  382. " left join base_patient b on t.patient=b.id" +
  383. " where t.is_del=1";
  384. if (!queryAll){
  385. BaseComplaintDoctorDO baseComplaintDoctorDO= baseComplaintDoctorDao.findbyDoctorAndDel(doctor);
  386. /*List<BaseComplaintOperateLogDO> logList =baseComplaintOperateDao.findbyOperateFrom(doctor);
  387. String types= "";
  388. if (logList!=null&&logList.size()>0){
  389. for (int i=0;i<logList.size();i++){
  390. if (i==logList.size()-1){
  391. types+=logList.get(i).getComplaintTo();
  392. }else {
  393. types+=logList.get(i).getComplaintTo()+",";
  394. }
  395. }
  396. }*/
  397. String complaint="";
  398. if (baseComplaintDoctorDO!=null){
  399. complaint=baseComplaintDoctorDO.getComplaintId();
  400. }
  401. //complaint=complaint+","+types;
  402. if (StringUtils.isNoneBlank(complaint)){
  403. //sql+=" and t.complaint_id in ('"+complaint.replace(",","','")+"')";
  404. sql+=" and t.complaint_id='"+complaint+"'";
  405. }else {
  406. return null;
  407. }
  408. }else {
  409. if (StringUtils.isNoneBlank(complaintId)){
  410. //sql+=" and t.complaint_id in ('"+complaint.replace(",","','")+"')";
  411. sql+=" and t.complaint_id='"+complaintId+"'";
  412. }
  413. }
  414. if (StringUtils.isNoneBlank(status)){
  415. sql+=" and t.status ='"+status+"'";
  416. }
  417. if (StringUtils.isNoneBlank(patientName)){
  418. sql+=" and t.patient_name like '%"+patientName+"%'";
  419. }
  420. if (StringUtils.isNoneBlank(patientId)){
  421. sql+=" and t.patient ='"+patientId+"'";
  422. }
  423. if (StringUtils.isNoneBlank(keyWord)){
  424. sql+=" and (t.patient_idcard like '%"+keyWord+"%' or t.patient_name like '%"+keyWord+"%')";
  425. }
  426. if (StringUtils.isNotBlank(startTime)){
  427. if("xm_ykyy_wx".equals(wxId)){
  428. if (flag){
  429. sql+=" and t.create_time > '"+startTime+"'";
  430. }else {
  431. sql+=" and t.create_time > to_date('" + startTime + "', 'yyyy-mm-dd hh24:mi:ss') ";
  432. }
  433. }else{
  434. sql+=" and t.create_time > '"+startTime+"'";
  435. }
  436. }
  437. if (StringUtils.isNotBlank(endTime)){
  438. if("xm_ykyy_wx".equals(wxId)){
  439. if (flag){
  440. sql+=" and t.create_time<='" + endTime + "'";
  441. }else {
  442. sql+=" and t.create_time<= to_date('" + endTime + "','yyyy-mm-dd hh24:mi:ss')";
  443. }
  444. }else{
  445. sql+=" and t.create_time<='" + endTime + "'";
  446. }
  447. }
  448. sql+=" order by t.create_time desc ";
  449. List<Map<String,Object>> list = hibenateUtils.createSQLQuery(sql,page,pageSize);
  450. String sqlcount = "SELECT COUNT(1) AS \"total\" FROM ("+sql+") q";
  451. Long count = 0L;
  452. List<Map<String,Object>> total = hibenateUtils.createSQLQuery(sqlcount);
  453. if(total!=null){
  454. //mysql 与 Oracle 聚合函数返回类型不一致,需要判断装换
  455. count = hibenateUtils.objTransformLong(total.get(0).get("total"));
  456. }
  457. mixEnvelop.setTotalCount(count.intValue());
  458. mixEnvelop.setDetailModelList(list);
  459. mixEnvelop.setPageSize(pageSize);
  460. mixEnvelop.setCurrPage(page);
  461. return mixEnvelop;
  462. }
  463. public BaseComplaintDO findOnePaitentComplaint(String id){
  464. BaseComplaintDO baseComplaintDO = baseComplaintDao.findOne(id);
  465. BasePatientDO basePatientDO=basePatientDao.findById(baseComplaintDO.getPatient());
  466. if (null!=basePatientDO){
  467. baseComplaintDO.setMobile(basePatientDO.getMobile());
  468. }
  469. baseComplaintDO.setVisitTypeName(baseComplaintDO.getVisitType().equalsIgnoreCase("1")?"门诊":"住院");
  470. return baseComplaintDO;
  471. }
  472. //查询投诉列表
  473. public MixEnvelop findPatientComplaintList(String status,String patientName,String patientId,
  474. String startTime,String endTime,String complaintType,Integer page ,Integer pageSize){
  475. MixEnvelop mixEnvelop = new MixEnvelop();
  476. String sql="select t.id as \"id\"," +
  477. " t.complaint_id as \"complaintId\"," +
  478. " t.complaint_name as \"complaintName\"," +
  479. " t.complaint_content as \"complaintContent\"," +
  480. " t.visit_type as \"visitType\"," +
  481. " case t.visit_type when '1' then '门诊' else '住院' end as \"visitTypeName\"," +
  482. " t.visit_time as \"visitTime\"," +
  483. " t.visit_dept as \"visitDept\"," +
  484. " t.visit_dept_name as \"visitDeptName\"," +
  485. " t.adm_no as \"admNo\"," +
  486. " t.patient as \"patient\"," +
  487. " t.patient_name as \"patientName\"," +
  488. " t.patient_idcard as \"patientIdcard\"," +
  489. " t.idcard_front as \"idcardFront\"," +
  490. " t.idcard_back as \"idcardBack\"," +
  491. " t.img_url as \"imgUrl\"," +
  492. " t.is_del as \"isDel\"," +
  493. " t.status as \"status\"," +
  494. " t.create_time as \"createTime\"," +
  495. " t.accept_time as \"acceptTime\"," +
  496. " t.deal_time as \"dealTime\"," +
  497. " t.operator_dept as \"operatorDept\"," +
  498. " t.operator_dept_name as \"operatorDeptName\"," +
  499. " t.operator as \"operator\"," +
  500. " t.operator_name as \"operatorName\"," +
  501. " t.feed_back as \"feedBack\"," +
  502. " t.feed_img as \"feedImg\"," +
  503. " t.acceptor as \"acceptor\"," +
  504. " b.mobile as \"mobile\"," +
  505. " t.acceptor_name as \"acceptorName\"" +
  506. " from base_complaint t " +
  507. " left join base_patient b on t.patient=b.id" +
  508. " where t.is_del=1";
  509. if (StringUtils.isNoneBlank(status)){
  510. sql+=" and t.status ='"+status+"'";
  511. }
  512. if (StringUtils.isNoneBlank(patientName)){
  513. sql+=" and t.patient_name like '%"+patientName+"%'";
  514. }
  515. if (StringUtils.isNoneBlank(patientId)){
  516. sql+=" and t.patient ='"+patientId+"'";
  517. }
  518. if (StringUtils.isNoneBlank(complaintType)){
  519. sql+=" and t.complaint_id ='"+complaintType+"'";
  520. }
  521. if (StringUtils.isNotBlank(startTime)){
  522. if("xm_ykyy_wx".equals(wxId)){
  523. if (flag){
  524. sql+=" and t.create_time > '"+startTime+"'";
  525. }else {
  526. sql+=" and t.create_time > to_date('" + startTime + "', 'yyyy-mm-dd hh24:mi:ss') ";
  527. }
  528. }else{
  529. sql+=" and t.create_time > '"+startTime+"'";
  530. }
  531. }
  532. if (StringUtils.isNotBlank(endTime)){
  533. if("xm_ykyy_wx".equals(wxId)){
  534. if (flag){
  535. sql+=" and t.create_time<='" + endTime + "'";
  536. }else {
  537. sql+=" and t.create_time<= to_date('" + endTime + "','yyyy-mm-dd hh24:mi:ss')";
  538. }
  539. }else{
  540. sql+=" and t.create_time<='" + endTime + "'";
  541. }
  542. }
  543. sql+=" order by t.create_time desc ";
  544. List<Map<String,Object>> list = hibenateUtils.createSQLQuery(sql,page,pageSize);
  545. String sqlcount = "SELECT COUNT(1) AS \"total\" FROM ("+sql+") q";
  546. Long count = 0L;
  547. List<Map<String,Object>> total = hibenateUtils.createSQLQuery(sqlcount);
  548. if(total!=null){
  549. //mysql 与 Oracle 聚合函数返回类型不一致,需要判断装换
  550. count = hibenateUtils.objTransformLong(total.get(0).get("total"));
  551. }
  552. mixEnvelop.setTotalCount(count.intValue());
  553. mixEnvelop.setDetailModelList(list);
  554. mixEnvelop.setPageSize(pageSize);
  555. mixEnvelop.setCurrPage(page);
  556. return mixEnvelop;
  557. }
  558. /*
  559. * 查询投诉数量*/
  560. public Map<String,Object> findComplaintCount(String doctor,String role){
  561. BaseComplaintDoctorDO baseComplaintDoctorDO=baseComplaintDoctorDao.findbyDoctorAndDel(doctor);
  562. Integer complaints=0;
  563. Integer recieve=0;
  564. Integer deal=0;
  565. Integer cacel=0;
  566. if (baseComplaintDoctorDO!=null){
  567. Boolean queryAll=false;
  568. if ("admin".equalsIgnoreCase(role)){
  569. queryAll=true;
  570. }
  571. if (!queryAll){
  572. complaints=baseComplaintDao.getCountByStatusAndComplaintId("0",baseComplaintDoctorDO.getComplaintId());
  573. recieve=baseComplaintDao.getCountByStatusAndComplaintId("1",baseComplaintDoctorDO.getComplaintId());
  574. deal=baseComplaintDao.getCountByStatusAndComplaintId("2",baseComplaintDoctorDO.getComplaintId());
  575. cacel=baseComplaintDao.getCountByStatusAndComplaintId("-1",baseComplaintDoctorDO.getComplaintId());
  576. }else {
  577. complaints=baseComplaintDao.getCountByStatus("0");
  578. recieve=baseComplaintDao.getCountByStatus("1");
  579. deal=baseComplaintDao.getCountByStatus("2");
  580. cacel=baseComplaintDao.getCountByStatus("-1");
  581. }
  582. }
  583. Integer total = complaints+recieve+deal+cacel;
  584. Map map=new HashMap();
  585. map.put("complaints",complaints);
  586. map.put("recieve",recieve);
  587. map.put("deal",deal);
  588. map.put("cacel",cacel);
  589. map.put("total",total);
  590. return map;
  591. }
  592. /*
  593. * 查询投诉数量*/
  594. public Map<String,Object> findComplaintCountPatient(String patient){
  595. Integer complaints=0;
  596. Integer recieve=0;
  597. Integer deal=0;
  598. Integer cacel=0;
  599. complaints=baseComplaintDao.getCountByStatusByPatient("0",patient);
  600. recieve=baseComplaintDao.getCountByStatusByPatient("1",patient);
  601. deal=baseComplaintDao.getCountByStatusByPatient("2",patient);
  602. cacel=baseComplaintDao.getCountByStatusByPatient("-1",patient);
  603. Integer total = complaints+recieve+deal+cacel;
  604. Map map=new HashMap();
  605. map.put("complaints",complaints);
  606. map.put("recieve",recieve);
  607. map.put("deal",deal);
  608. map.put("cacel",cacel);
  609. map.put("total",total);
  610. return map;
  611. }
  612. public BaseComplaintDO cancelPaitentComplaint(String id,String patient) throws Exception{
  613. BaseComplaintDO baseComplaintDO = baseComplaintDao.findOne(id);
  614. if (baseComplaintDO!=null){
  615. if ("0".equalsIgnoreCase(baseComplaintDO.getStatus())){
  616. baseComplaintDO.setStatus("-1");
  617. baseComplaintDO=baseComplaintDao.save(baseComplaintDO);
  618. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  619. baseComplaintOperateLogDO.setOperateFrom(patient);
  620. baseComplaintOperateLogDO.setStatus("-1");
  621. baseComplaintOperateLogDO.setOperateType("居民撤销投诉");
  622. baseComplaintOperateLogDO.setRelationCode(baseComplaintDO.getId());
  623. baseComplaintOperateLogDO.setCreateTime(new Date());
  624. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  625. }else {
  626. throw new Exception("不允许撤销");
  627. }
  628. }
  629. return baseComplaintDO;
  630. }
  631. public List<Map<String,Object>> findComplaintOperateLog(String complaintId){
  632. String sql ="select t.id as \"id\"," +
  633. " p.name as \"complaintNameFrom\" ," +
  634. " n.name as \"complaintNameto\", " +
  635. " t.operate_from as \"operateFrom\" ," +
  636. " t.operate_to as \"operateTo\" ," +
  637. " t.cancel_by as \"cancelBy\", " +
  638. " t.operate_type as \"operateType\", " +
  639. " t.status as \"status\", " +
  640. " t.create_time as \"createTime\" ," +
  641. " b.name as \"patientName\", " +
  642. " t.relation_code as \"relationCode\" " +
  643. " from base_complaint_operate_log t left join base_complaint c" +
  644. " on t.relation_code=c.id" +
  645. " left join base_patient b on t.cancel_by=b.id " +
  646. " left join base_complaint_dict p on t.complaint_from= p.id" +
  647. " left join base_complaint_dict n on t.complaint_to=n.id where 1=1 " ;
  648. if (StringUtils.isNoneBlank(complaintId)){
  649. sql+=" and t.relation_code='"+complaintId+"'";
  650. }
  651. sql+=" order by t.create_time desc";
  652. List<Map<String,Object>> list = hibenateUtils.createSQLQuery(sql);
  653. List<WlyyHospitalSysDictDO> typeList=wlyyHospitalSysDictDao.findByDictName("complaintStatus");
  654. for (Map<String,Object> map:list){
  655. if (map.get("operateFrom")!=null){
  656. if (map.get("status")!=null){
  657. for (WlyyHospitalSysDictDO wlyyHospitalSysDictDO:typeList){
  658. if (map.get("status").toString().equalsIgnoreCase(wlyyHospitalSysDictDO.getDictCode())){
  659. map.put("operateType",wlyyHospitalSysDictDO.getDictValue());
  660. }
  661. }
  662. if ("0".equalsIgnoreCase(map.get("status").toString())||"-1".equalsIgnoreCase(map.get("status").toString())){
  663. BasePatientDO basePatientDO = basePatientDao.findById(map.get("operateFrom").toString());
  664. if (basePatientDO!=null){
  665. map.put("operateFromName",basePatientDO.getName());
  666. }
  667. }else {
  668. BaseDoctorDO baseDoctorDO= baseDoctorDao.findById(map.get("operateFrom").toString());
  669. if (baseDoctorDO!=null){
  670. map.put("operateFromName",baseDoctorDO.getName());
  671. }
  672. List<BaseDoctorHospitalDO> baseDoctorHospitalDO= baseDoctorHospitalDao.findByDoctorCode(map.get("operateFrom").toString());
  673. if (baseDoctorHospitalDO!=null&&baseDoctorHospitalDO.size()>0){
  674. map.put("operateFromDeptName",baseDoctorHospitalDO.get(0).getDeptName());
  675. }
  676. }
  677. }
  678. }
  679. if (map.get("operateTo")!=null){
  680. BaseDoctorDO baseDoctorDO= baseDoctorDao.findById(map.get("operateTo").toString());
  681. if (baseDoctorDO!=null){
  682. map.put("operateToName",baseDoctorDO.getName());
  683. }
  684. List<BaseDoctorHospitalDO> baseDoctorHospitalDO= baseDoctorHospitalDao.findByDoctorCode(map.get("operateTo").toString());
  685. if (baseDoctorHospitalDO!=null&&baseDoctorHospitalDO.size()>0){
  686. map.put("operateToDeptName",baseDoctorHospitalDO.get(0).getDeptName());
  687. }
  688. }
  689. }
  690. return list;
  691. }
  692. }