BaseComplaintService.java 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758
  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.text.SimpleDateFormat;
  33. import java.util.*;
  34. @Service
  35. public class BaseComplaintService {
  36. @Autowired
  37. private BaseComplaintDictDao baseComplaintDictDao;
  38. @Autowired
  39. private BaseComplaintDoctorDao baseComplaintDoctorDao;
  40. @Autowired
  41. private BaseDoctorDao baseDoctorDao;
  42. @Autowired
  43. private BaseDoctorHospitalDao baseDoctorHospitalDao;
  44. @Autowired
  45. private HibenateUtils hibenateUtils;
  46. @Autowired
  47. private BaseComplaintDao baseComplaintDao;
  48. @Autowired
  49. private ObjectMapper objectMapper;
  50. @Autowired
  51. private DictHospitalDeptDao dictHospitalDeptDao;
  52. @Autowired
  53. private BaseComplaintOperateDao baseComplaintOperateDao;
  54. @Autowired
  55. private BaseDoctorRoleDao baseDoctorRoleDao;
  56. @Autowired
  57. private BasePatientDao basePatientDao;
  58. @Autowired
  59. private EnterpriseService enterpriseService;
  60. @Autowired
  61. private WlyyHospitalSysDictDao wlyyHospitalSysDictDao;
  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.findById(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.findById(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.save(baseComplaintDoctorDOs);
  93. return baseComplaintDictDO;
  94. }
  95. public BaseComplaintDictDO findOneDict(String id) {
  96. BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findById(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.findById(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. public BaseComplaintDoctorDO findOneDoctorComplain(String id) {
  212. BaseComplaintDoctorDO baseComplaintDoctorDO = baseComplaintDoctorDao.findByDelAndId(id);
  213. return baseComplaintDoctorDO;
  214. }
  215. /*
  216. * 患者举报接口
  217. * */
  218. public BaseComplaintDO patiemtComplaint(String json) throws Exception{
  219. WlyyHospitalSysDictDO wlyyHospitalSysDictDO= wlyyHospitalSysDictDao.findById("complaintOpenControl");
  220. if (wlyyHospitalSysDictDO!=null){
  221. if (!"1".equalsIgnoreCase(wlyyHospitalSysDictDO.getDictCode())){
  222. throw new Exception("投诉通道已关闭");
  223. }
  224. }else {
  225. throw new Exception("投诉通道已关闭");
  226. }
  227. BaseComplaintDO baseComplaintDO =objectMapper.readValue(json,BaseComplaintDO.class);
  228. BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findById(baseComplaintDO.getComplaintId());
  229. if (baseComplaintDictDO!=null){
  230. baseComplaintDO.setComplaintName(baseComplaintDictDO.getName());
  231. }
  232. if (StringUtils.isNoneBlank(baseComplaintDO.getVisitDept())){
  233. DictHospitalDeptDO dictHospitalDeptDO=dictHospitalDeptDao.findByCode(baseComplaintDO.getVisitDept());
  234. if (dictHospitalDeptDO!=null){
  235. baseComplaintDO.setVisitDeptName(dictHospitalDeptDO.getName());
  236. }
  237. }
  238. /*if(StringUtils.isNoneBlank(baseComplaintDO.getPatient())){
  239. BasePatientDO basePatientDO= basePatientDao.findById(baseComplaintDO.getPatient());
  240. if (basePatientDO!=null){
  241. basePatientDO.setIdcardFront(baseComplaintDO.getIdcardFront());
  242. basePatientDO.setIdcardBack(baseComplaintDO.getIdcardBack());
  243. basePatientDao.save(basePatientDO);
  244. }
  245. }*/
  246. baseComplaintDO.setIsDel("1");
  247. baseComplaintDO.setStatus("0");
  248. baseComplaintDO.setCreateTime(new Date());
  249. baseComplaintDO= baseComplaintDao.save(baseComplaintDO);
  250. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  251. baseComplaintOperateLogDO.setOperateFrom(baseComplaintDO.getPatient());
  252. baseComplaintOperateLogDO.setStatus("0");
  253. baseComplaintOperateLogDO.setOperateType("投诉提交");
  254. baseComplaintOperateLogDO.setRelationCode(baseComplaintDO.getId());
  255. baseComplaintOperateLogDO.setCreateTime(new Date());
  256. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  257. try {
  258. List<BaseComplaintDoctorDO> doctorList=baseComplaintDoctorDao.findbyComplaintId(baseComplaintDO.getComplaintId());
  259. for (BaseComplaintDoctorDO baseComplaintDoctorDO:doctorList){
  260. String url="https://hlwyy.xmzsh.com/hlwyy/ims-app-web/#/complaint/detail?id="+baseComplaintDO.getId();
  261. enterpriseService.sendTWMesByDoctor("zsyy",baseComplaintDoctorDO.getDoctor(),"投诉反馈","您收到一条投诉反馈,点击查看。",url);
  262. }
  263. }catch (Exception e){
  264. }
  265. return baseComplaintDao.save(baseComplaintDO);
  266. }
  267. /*
  268. * 医生转交
  269. * */
  270. public BaseComplaintDO passTo(String id,String complaintId,String doctor,String operator){
  271. BaseComplaintDO baseComplaintDO = baseComplaintDao.findOne(id);
  272. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  273. String doctorName="";
  274. String complaitTypeName="";
  275. if (null!=baseComplaintDO){
  276. baseComplaintOperateLogDO.setOperateFrom(operator);
  277. baseComplaintOperateLogDO.setOperateTo(doctor);
  278. baseComplaintOperateLogDO.setComplaintTo(complaintId);
  279. baseComplaintOperateLogDO.setComplaintFrom(baseComplaintDO.getComplaintId());
  280. baseComplaintOperateLogDO.setStatus("3");
  281. baseComplaintOperateLogDO.setOperateType("转交");
  282. baseComplaintOperateLogDO.setRelationCode(id);
  283. baseComplaintOperateLogDO.setCreateTime(new Date());
  284. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  285. /*BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(doctor);
  286. if (null != baseDoctorDO) {
  287. doctorName=baseDoctorDO.getName();
  288. baseComplaintDO.setAcceptorName(doctorName);
  289. }
  290. baseComplaintDO.setAcceptor(doctor);*/
  291. baseComplaintDO.setComplaintId(complaintId);
  292. BaseComplaintDictDO baseComplaintDictDO = baseComplaintDictDao.findById(complaintId);
  293. if (baseComplaintDictDO!=null){
  294. complaitTypeName=baseComplaintDictDO.getName();
  295. baseComplaintDO.setComplaintName(complaitTypeName);
  296. }
  297. baseComplaintDO= baseComplaintDao.save(baseComplaintDO);
  298. try {
  299. /*List<BaseComplaintDoctorDO> doctorList=baseComplaintDoctorDao.findbyComplaintId(baseComplaintDO.getComplaintId());
  300. for (BaseComplaintDoctorDO baseComplaintDoctorDO:doctorList)*/
  301. String url="https://hlwyy.xmzsh.com/hlwyy/ims-app-web/#/complaint/detail?id="+baseComplaintDO.getId();
  302. enterpriseService.sendTWMesByDoctor("zsyy",doctor,"投诉反馈","您收到一条投诉反馈,点击查看。",url);
  303. }catch (Exception e){
  304. }
  305. return baseComplaintDO;
  306. }
  307. return null;
  308. }
  309. //接受投诉
  310. public BaseComplaintDO doctorAccept(String id,String doctor) throws Exception{
  311. BaseComplaintDO baseComplaintDO = baseComplaintDao.findOne(id);
  312. if (baseComplaintDO!=null){
  313. baseComplaintDO.setStatus("1");
  314. BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(doctor);
  315. if (null != baseDoctorDO) {
  316. baseComplaintDO.setAcceptorName(baseDoctorDO.getName());
  317. }
  318. baseComplaintDO.setAcceptor(doctor);
  319. baseComplaintDO.setAcceptTime(new Date());
  320. baseComplaintDao.save(baseComplaintDO);
  321. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  322. baseComplaintOperateLogDO.setOperateFrom(doctor);
  323. baseComplaintOperateLogDO.setStatus("1");
  324. baseComplaintOperateLogDO.setOperateType("接受");
  325. baseComplaintOperateLogDO.setRelationCode(id);
  326. baseComplaintOperateLogDO.setCreateTime(new Date());
  327. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  328. }/*else if ("1".equalsIgnoreCase(baseComplaintDO.getStatus())){
  329. throw new Exception("该工单已被接受");
  330. }else {
  331. throw new Exception("该工单已被处理完成");
  332. }*/
  333. return baseComplaintDO;
  334. }
  335. //反馈投诉
  336. public BaseComplaintDO dealComplaint(String id,String operator,String content,String imgUrl ,String deptCode) throws Exception{
  337. BaseComplaintDO baseComplaintDO = baseComplaintDao.findOne(id);
  338. if (baseComplaintDO!=null){
  339. baseComplaintDO.setDealTime(new Date());
  340. baseComplaintDO.setFeedBack(content);
  341. baseComplaintDO.setFeedImg(imgUrl);
  342. baseComplaintDO.setOperator(operator);
  343. baseComplaintDO.setStatus("2");
  344. BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(operator);
  345. if (null != baseDoctorDO) {
  346. baseComplaintDO.setOperatorName(baseDoctorDO.getName());
  347. }
  348. baseComplaintDO.setOperatorDept(deptCode);
  349. List<BaseDoctorHospitalDO> baseDoctorHospitalDO = baseDoctorHospitalDao.findByDeptCodeDoctorCode(deptCode, operator);
  350. if (baseDoctorHospitalDO != null && baseDoctorHospitalDO.size() > 0) {
  351. baseComplaintDO.setOperatorDeptName(baseDoctorHospitalDO.get(0).getDeptName());
  352. }
  353. baseComplaintDao.save(baseComplaintDO);
  354. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  355. baseComplaintOperateLogDO.setOperateFrom(operator);
  356. baseComplaintOperateLogDO.setStatus("2");
  357. baseComplaintOperateLogDO.setOperateType("反馈");
  358. baseComplaintOperateLogDO.setRelationCode(id);
  359. baseComplaintOperateLogDO.setCreateTime(new Date());
  360. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  361. }/*else if ("2".equalsIgnoreCase(baseComplaintDO.getStatus())){
  362. throw new Exception("该工单已被处理完成");
  363. }else if ("0".equalsIgnoreCase(baseComplaintDO.getStatus())){
  364. throw new Exception("该工单未被接收");
  365. }*/
  366. return baseComplaintDO;
  367. }
  368. //查询投诉列表
  369. public MixEnvelop findComplaintList(String role,String doctor,String status,String patientName,String patientId,String keyWord,String complaintId,
  370. String startTime,String endTime,Integer page ,Integer pageSize){
  371. MixEnvelop mixEnvelop = new MixEnvelop();
  372. Boolean queryAll=false;
  373. if ("admin".equalsIgnoreCase(role)){
  374. queryAll=true;
  375. }
  376. String sql="select t.id as \"id\"," +
  377. " t.complaint_id as \"complaintId\"," +
  378. " t.complaint_name as \"complaintName\"," +
  379. " t.complaint_content as \"complaintContent\"," +
  380. " t.visit_type as \"visitType\"," +
  381. " case t.visit_type when '1' then '门诊' else '住院' end as \"visitTypeName\"," +
  382. " t.visit_time as \"visitTime\"," +
  383. " t.visit_dept as \"visitDept\"," +
  384. " t.visit_dept_name as \"visitDeptName\"," +
  385. " t.adm_no as \"admNo\"," +
  386. " t.patient as \"patient\"," +
  387. " t.patient_name as \"patientName\"," +
  388. " t.patient_idcard as \"patientIdcard\"," +
  389. " t.idcard_front as \"idcardFront\"," +
  390. " t.idcard_back as \"idcardBack\"," +
  391. " t.img_url as \"imgUrl\"," +
  392. " t.is_del as \"isDel\"," +
  393. " t.status as \"status\"," +
  394. " t.create_time as \"createTime\"," +
  395. " t.accept_time as \"acceptTime\"," +
  396. " t.deal_time as \"dealTime\"," +
  397. " t.operator_dept as \"operatorDept\"," +
  398. " t.operator_dept_name as \"operatorDeptName\"," +
  399. " t.operator as \"operator\"," +
  400. " t.operator_name as \"operatorName\"," +
  401. " t.feed_back as \"feedBack\"," +
  402. " t.feed_img as \"feedImg\"," +
  403. " t.acceptor as \"acceptor\"," +
  404. " t.mobile as \"mobile\"," +
  405. " t.acceptor_name as \"acceptorName\"" +
  406. "from base_complaint t " +
  407. " left join base_patient b on t.patient=b.id" +
  408. " where t.is_del=1";
  409. if (!queryAll){
  410. BaseComplaintDoctorDO baseComplaintDoctorDO= baseComplaintDoctorDao.findbyDoctorAndDel(doctor);
  411. /*List<BaseComplaintOperateLogDO> logList =baseComplaintOperateDao.findbyOperateFrom(doctor);
  412. String types= "";
  413. if (logList!=null&&logList.size()>0){
  414. for (int i=0;i<logList.size();i++){
  415. if (i==logList.size()-1){
  416. types+=logList.get(i).getComplaintTo();
  417. }else {
  418. types+=logList.get(i).getComplaintTo()+",";
  419. }
  420. }
  421. }*/
  422. String complaint="";
  423. if (baseComplaintDoctorDO!=null){
  424. if (baseComplaintDoctorDO.getComplaintId().equalsIgnoreCase("808080eb7a194099017a1943fa820004")){
  425. complaint=baseComplaintDoctorDO.getComplaintId();
  426. }
  427. }
  428. //complaint=complaint+","+types;
  429. if (StringUtils.isNoneBlank(complaint)){
  430. //sql+=" and t.complaint_id in ('"+complaint.replace(",","','")+"')";
  431. sql+=" and t.complaint_id='"+complaint+"'";
  432. }else {
  433. sql+=" and t.id IN (select col.relation_code from base_complaint_operate_log col where col.operate_to = '"+doctor+"' )";
  434. }
  435. if (!StringUtils.isNoneBlank(status)){
  436. sql+=" and t.status !='-1'";
  437. }
  438. //complaint=complaint+","+types;
  439. }else {
  440. if (StringUtils.isNoneBlank(complaintId)){
  441. //sql+=" and t.complaint_id in ('"+complaint.replace(",","','")+"')";
  442. sql+=" and t.complaint_id='"+complaintId+"'";
  443. }
  444. }
  445. if (StringUtils.isNoneBlank(status)){
  446. sql+=" and t.status ='"+status+"'";
  447. }
  448. if (StringUtils.isNoneBlank(patientName)){
  449. sql+=" and t.patient_name like '%"+patientName+"%'";
  450. }
  451. if (StringUtils.isNoneBlank(patientId)){
  452. sql+=" and t.patient ='"+patientId+"'";
  453. }
  454. if (StringUtils.isNoneBlank(keyWord)){
  455. sql+=" and (t.patient_idcard like '%"+keyWord+"%' or t.patient_name like '%"+keyWord+"%')";
  456. }
  457. if (StringUtils.isNotBlank(startTime)){
  458. if("xm_ykyy_wx".equals(wxId)){
  459. if (flag){
  460. sql+=" and t.create_time > '"+startTime+"'";
  461. }else {
  462. sql+=" and t.create_time > to_date('" + startTime + "', 'yyyy-mm-dd hh24:mi:ss') ";
  463. }
  464. }else{
  465. sql+=" and t.create_time > '"+startTime+"'";
  466. }
  467. }
  468. if (StringUtils.isNotBlank(endTime)){
  469. if("xm_ykyy_wx".equals(wxId)){
  470. if (flag){
  471. sql+=" and t.create_time<='" + endTime + "'";
  472. }else {
  473. sql+=" and t.create_time<= to_date('" + endTime + "','yyyy-mm-dd hh24:mi:ss')";
  474. }
  475. }else{
  476. sql+=" and t.create_time<='" + endTime + "'";
  477. }
  478. }
  479. sql+=" order by t.create_time desc ";
  480. System.out.println("sql"+sql);
  481. List<Map<String,Object>> list = hibenateUtils.createSQLQuery(sql,page,pageSize);
  482. String sqlcount = "SELECT COUNT(1) AS \"total\" FROM ("+sql+") q";
  483. Long count = 0L;
  484. List<Map<String,Object>> total = hibenateUtils.createSQLQuery(sqlcount);
  485. if(total!=null){
  486. //mysql 与 Oracle 聚合函数返回类型不一致,需要判断装换
  487. count = hibenateUtils.objTransformLong(total.get(0).get("total"));
  488. }
  489. mixEnvelop.setTotalCount(count.intValue());
  490. mixEnvelop.setDetailModelList(list);
  491. mixEnvelop.setPageSize(pageSize);
  492. mixEnvelop.setCurrPage(page);
  493. return mixEnvelop;
  494. }
  495. public BaseComplaintDO findOnePaitentComplaint(String id){
  496. BaseComplaintDO baseComplaintDO = baseComplaintDao.findOne(id);
  497. BasePatientDO basePatientDO=basePatientDao.findById(baseComplaintDO.getPatient());
  498. if (null!=basePatientDO){
  499. baseComplaintDO.setMobile(basePatientDO.getMobile());
  500. }
  501. WlyyHospitalSysDictDO wlyyHospitalSysDictDO =wlyyHospitalSysDictDao.findById("latestFeedBackTime");
  502. Integer timeOut=15;
  503. if (wlyyHospitalSysDictDO!=null){
  504. timeOut =Integer.parseInt(wlyyHospitalSysDictDO.getDictValue());
  505. }
  506. long latestDate=baseComplaintDO.getCreateTime().getTime()+timeOut*24*60*60*1000;
  507. baseComplaintDO.setLatestFeedTime( (new Date(latestDate)));
  508. baseComplaintDO.setVisitTypeName(baseComplaintDO.getVisitType().equalsIgnoreCase("1")?"门诊":"住院");
  509. return baseComplaintDO;
  510. }
  511. //查询投诉列表
  512. public MixEnvelop findPatientComplaintList(String status,String patientName,String patientId,
  513. String startTime,String endTime,String complaintType,Integer page ,Integer pageSize){
  514. MixEnvelop mixEnvelop = new MixEnvelop();
  515. String sql="select t.id as \"id\"," +
  516. " t.complaint_id as \"complaintId\"," +
  517. " t.complaint_name as \"complaintName\"," +
  518. " t.complaint_content as \"complaintContent\"," +
  519. " t.visit_type as \"visitType\"," +
  520. " case t.visit_type when '1' then '门诊' else '住院' end as \"visitTypeName\"," +
  521. " t.visit_time as \"visitTime\"," +
  522. " t.visit_dept as \"visitDept\"," +
  523. " t.visit_dept_name as \"visitDeptName\"," +
  524. " t.adm_no as \"admNo\"," +
  525. " t.patient as \"patient\"," +
  526. " t.patient_name as \"patientName\"," +
  527. " t.patient_idcard as \"patientIdcard\"," +
  528. " t.idcard_front as \"idcardFront\"," +
  529. " t.idcard_back as \"idcardBack\"," +
  530. " t.img_url as \"imgUrl\"," +
  531. " t.is_del as \"isDel\"," +
  532. " t.status as \"status\"," +
  533. " t.create_time as \"createTime\"," +
  534. " t.accept_time as \"acceptTime\"," +
  535. " t.deal_time as \"dealTime\"," +
  536. " t.operator_dept as \"operatorDept\"," +
  537. " t.operator_dept_name as \"operatorDeptName\"," +
  538. " t.operator as \"operator\"," +
  539. " t.operator_name as \"operatorName\"," +
  540. " t.feed_back as \"feedBack\"," +
  541. " t.feed_img as \"feedImg\"," +
  542. " t.acceptor as \"acceptor\"," +
  543. " t.mobile as \"mobile\"," +
  544. " t.acceptor_name as \"acceptorName\"" +
  545. " from base_complaint t " +
  546. " left join base_patient b on t.patient=b.id" +
  547. " where t.is_del=1";
  548. if (StringUtils.isNoneBlank(status)){
  549. sql+=" and t.status ='"+status+"'";
  550. }
  551. if (StringUtils.isNoneBlank(patientName)){
  552. sql+=" and t.patient_name like '%"+patientName+"%'";
  553. }
  554. if (StringUtils.isNoneBlank(patientId)){
  555. sql+=" and t.patient ='"+patientId+"'";
  556. }
  557. if (StringUtils.isNoneBlank(complaintType)){
  558. sql+=" and t.complaint_id ='"+complaintType+"'";
  559. }
  560. if (StringUtils.isNotBlank(startTime)){
  561. if("xm_ykyy_wx".equals(wxId)){
  562. if (flag){
  563. sql+=" and t.create_time > '"+startTime+"'";
  564. }else {
  565. sql+=" and t.create_time > to_date('" + startTime + "', 'yyyy-mm-dd hh24:mi:ss') ";
  566. }
  567. }else{
  568. sql+=" and t.create_time > '"+startTime+"'";
  569. }
  570. }
  571. if (StringUtils.isNotBlank(endTime)){
  572. if("xm_ykyy_wx".equals(wxId)){
  573. if (flag){
  574. sql+=" and t.create_time<='" + endTime + "'";
  575. }else {
  576. sql+=" and t.create_time<= to_date('" + endTime + "','yyyy-mm-dd hh24:mi:ss')";
  577. }
  578. }else{
  579. sql+=" and t.create_time<='" + endTime + "'";
  580. }
  581. }
  582. sql+=" order by t.create_time desc ";
  583. List<Map<String,Object>> list = hibenateUtils.createSQLQuery(sql,page,pageSize);
  584. String sqlcount = "SELECT COUNT(1) AS \"total\" FROM ("+sql+") q";
  585. Long count = 0L;
  586. List<Map<String,Object>> total = hibenateUtils.createSQLQuery(sqlcount);
  587. if(total!=null){
  588. //mysql 与 Oracle 聚合函数返回类型不一致,需要判断装换
  589. count = hibenateUtils.objTransformLong(total.get(0).get("total"));
  590. }
  591. mixEnvelop.setTotalCount(count.intValue());
  592. mixEnvelop.setDetailModelList(list);
  593. mixEnvelop.setPageSize(pageSize);
  594. mixEnvelop.setCurrPage(page);
  595. return mixEnvelop;
  596. }
  597. /*
  598. * 查询投诉数量*/
  599. public Map<String,Object> findComplaintCount(String doctor,String role){
  600. BaseComplaintDoctorDO baseComplaintDoctorDO=baseComplaintDoctorDao.findbyDoctorAndDel(doctor);
  601. Integer complaints=0;
  602. Integer recieve=0;
  603. Integer deal=0;
  604. Integer cacel=0;
  605. if (baseComplaintDoctorDO!=null){
  606. Boolean queryAll=false;
  607. if ("admin".equalsIgnoreCase(role)){
  608. queryAll=true;
  609. }
  610. if (!queryAll){
  611. complaints=baseComplaintDao.getCountByStatusAndComplaintId("0",baseComplaintDoctorDO.getComplaintId());
  612. recieve=baseComplaintDao.getCountByStatusAndComplaintId("1",baseComplaintDoctorDO.getComplaintId());
  613. deal=baseComplaintDao.getCountByStatusAndComplaintId("2",baseComplaintDoctorDO.getComplaintId());
  614. //cacel=baseComplaintDao.getCountByStatusAndComplaintId("-1",baseComplaintDoctorDO.getComplaintId());
  615. }else {
  616. complaints=baseComplaintDao.getCountByStatus("0");
  617. recieve=baseComplaintDao.getCountByStatus("1");
  618. deal=baseComplaintDao.getCountByStatus("2");
  619. cacel=baseComplaintDao.getCountByStatus("-1");
  620. }
  621. }
  622. Integer total = complaints+recieve+deal+cacel;
  623. Map map=new HashMap();
  624. map.put("complaints",complaints);
  625. map.put("recieve",recieve);
  626. map.put("deal",deal);
  627. map.put("cacel",cacel);
  628. map.put("total",total);
  629. return map;
  630. }
  631. /*
  632. * 查询投诉数量*/
  633. public Map<String,Object> findComplaintCountPatient(String patient){
  634. Integer complaints=0;
  635. Integer recieve=0;
  636. Integer deal=0;
  637. Integer cacel=0;
  638. complaints=baseComplaintDao.getCountByStatusByPatient("0",patient);
  639. recieve=baseComplaintDao.getCountByStatusByPatient("1",patient);
  640. deal=baseComplaintDao.getCountByStatusByPatient("2",patient);
  641. cacel=baseComplaintDao.getCountByStatusByPatient("-1",patient);
  642. Integer total = complaints+recieve+deal+cacel;
  643. Map map=new HashMap();
  644. map.put("complaints",complaints);
  645. map.put("recieve",recieve);
  646. map.put("deal",deal);
  647. map.put("cacel",cacel);
  648. map.put("total",total);
  649. return map;
  650. }
  651. public BaseComplaintDO cancelPaitentComplaint(String id,String patient) throws Exception{
  652. BaseComplaintDO baseComplaintDO = baseComplaintDao.findOne(id);
  653. if (baseComplaintDO!=null){
  654. if ("0".equalsIgnoreCase(baseComplaintDO.getStatus())){
  655. baseComplaintDO.setStatus("-1");
  656. baseComplaintDO=baseComplaintDao.save(baseComplaintDO);
  657. BaseComplaintOperateLogDO baseComplaintOperateLogDO = new BaseComplaintOperateLogDO();
  658. baseComplaintOperateLogDO.setOperateFrom(patient);
  659. baseComplaintOperateLogDO.setStatus("-1");
  660. baseComplaintOperateLogDO.setOperateType("居民撤销投诉");
  661. baseComplaintOperateLogDO.setRelationCode(baseComplaintDO.getId());
  662. baseComplaintOperateLogDO.setCreateTime(new Date());
  663. baseComplaintOperateDao.save(baseComplaintOperateLogDO);
  664. }else {
  665. throw new Exception("不允许撤销");
  666. }
  667. }
  668. return baseComplaintDO;
  669. }
  670. public List<Map<String,Object>> findComplaintOperateLog(String complaintId){
  671. String sql ="select t.id as \"id\"," +
  672. " p.name as \"complaintNameFrom\" ," +
  673. " n.name as \"complaintNameto\", " +
  674. " t.operate_from as \"operateFrom\" ," +
  675. " t.operate_to as \"operateTo\" ," +
  676. " t.cancel_by as \"cancelBy\", " +
  677. " t.operate_type as \"operateType\", " +
  678. " t.status as \"status\", " +
  679. " t.create_time as \"createTime\" ," +
  680. " t.relation_code as \"relationCode\" " +
  681. " from base_complaint_operate_log t left join base_complaint c" +
  682. " on t.relation_code=c.id" +
  683. " left join base_complaint_dict p on t.complaint_from= p.id" +
  684. " left join base_complaint_dict n on t.complaint_to=n.id where 1=1 " ;
  685. if (StringUtils.isNoneBlank(complaintId)){
  686. sql+=" and t.relation_code='"+complaintId+"'";
  687. }
  688. sql+=" order by t.create_time desc";
  689. List<Map<String,Object>> list = hibenateUtils.createSQLQuery(sql);
  690. List<WlyyHospitalSysDictDO> typeList=wlyyHospitalSysDictDao.findByDictName("complaintStatus");
  691. for (Map<String,Object> map:list){
  692. if (map.get("operateFrom")!=null){
  693. if (map.get("status")!=null){
  694. for (WlyyHospitalSysDictDO wlyyHospitalSysDictDO:typeList){
  695. if (map.get("status").toString().equalsIgnoreCase(wlyyHospitalSysDictDO.getDictCode())){
  696. map.put("operateType",wlyyHospitalSysDictDO.getDictValue());
  697. }
  698. }
  699. if ("0".equalsIgnoreCase(map.get("status").toString())||"-1".equalsIgnoreCase(map.get("status").toString())){
  700. BasePatientDO basePatientDO = basePatientDao.findById(map.get("operateFrom").toString());
  701. if (basePatientDO!=null){
  702. map.put("operateFromName",basePatientDO.getName());
  703. }
  704. }else {
  705. BaseDoctorDO baseDoctorDO= baseDoctorDao.findById(map.get("operateFrom").toString());
  706. if (baseDoctorDO!=null){
  707. map.put("operateFromName",baseDoctorDO.getName());
  708. }
  709. List<BaseDoctorHospitalDO> baseDoctorHospitalDO= baseDoctorHospitalDao.findByDoctorCode(map.get("operateFrom").toString());
  710. if (baseDoctorHospitalDO!=null&&baseDoctorHospitalDO.size()>0){
  711. map.put("operateFromDeptName",baseDoctorHospitalDO.get(0).getDeptName());
  712. }
  713. }
  714. }
  715. }
  716. if (map.get("operateTo")!=null){
  717. BaseDoctorDO baseDoctorDO= baseDoctorDao.findById(map.get("operateTo").toString());
  718. if (baseDoctorDO!=null){
  719. map.put("operateToName",baseDoctorDO.getName());
  720. }
  721. List<BaseDoctorHospitalDO> baseDoctorHospitalDO= baseDoctorHospitalDao.findByDoctorCode(map.get("operateTo").toString());
  722. if (baseDoctorHospitalDO!=null&&baseDoctorHospitalDO.size()>0){
  723. map.put("operateToDeptName",baseDoctorHospitalDO.get(0).getDeptName());
  724. }
  725. }
  726. }
  727. return list;
  728. }
  729. }