KeShiShouRuServer.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. package thyyxxk.webserver.service.reports;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.stereotype.Service;
  6. import thyyxxk.webserver.config.exception.ExceptionEnum;
  7. import thyyxxk.webserver.dao.his.reports.KeShiShouRuDao;
  8. import thyyxxk.webserver.entity.ResultVo;
  9. import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
  10. import thyyxxk.webserver.utils.ToolExcel;
  11. import thyyxxk.webserver.entity.querydata.KeShiFeiiYongTongJi;
  12. import thyyxxk.webserver.entity.querydata.QueryDrugsAndProjects;
  13. import thyyxxk.webserver.service.PublicServer;
  14. import thyyxxk.webserver.utils.*;
  15. import javax.servlet.http.HttpServletResponse;
  16. import java.util.*;
  17. /**
  18. * <p>
  19. * 描述: 各个科室收入的情况
  20. * </p>
  21. *
  22. * @author xc
  23. * @date 2021-10-19 14:50
  24. */
  25. @Service
  26. @Slf4j
  27. public class KeShiShouRuServer {
  28. private final KeShiShouRuDao dao;
  29. private final PublicServer publicServer;
  30. public KeShiShouRuServer(KeShiShouRuDao dao, PublicServer publicServer) {
  31. this.dao = dao;
  32. this.publicServer = publicServer;
  33. }
  34. static class PersonComparator implements Comparator<KeShiFeiiYongTongJi> {
  35. @Override
  36. public int compare(KeShiFeiiYongTongJi p1, KeShiFeiiYongTongJi p2) {
  37. if (p1.getChargeDateString() != null && p2.getChargeDateString() != null) {
  38. Date o1 = DateUtil.parse(p1.getChargeDateString(), DateUtil.DATE);
  39. Date o2 = DateUtil.parse(p2.getChargeDateString(), DateUtil.DATE);
  40. assert o1 != null;
  41. return o1.compareTo(o2);
  42. }
  43. return -1;
  44. }
  45. }
  46. public ResultVo<KeShiFeiiYongTongJi> getKeShouFei(QueryDrugsAndProjects param) {
  47. if (StringUtil.isBlank(param.getStartTime()) || StringUtil.isBlank(param.getEndTime())) {
  48. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "开始时间和结束时间为空 ∑(っ°Д°;)っ");
  49. }
  50. KeShiFeiiYongTongJi qp = new KeShiFeiiYongTongJi();
  51. log.info("查询科室收费统计 ==> 执行科室:{},开始{},结束:{}。项目编码:{},录入人:{},申请科室:{},总数:{},当前页:{},页大小:{}", param.getExecUnitList(), param.getStartTime(), param.getEndTime(), param.getChargeCodeMx(), param.getOpId(), param.getReqDeptCode(), param.getTotal(), param.getCurrentPage(), param.getPageSize());
  52. List<String> keShiLieBiao = publicServer.getKeShiLieBiaoList(param.getExecUnitList());
  53. GetDropdownBox renHuanCodeHeCodeRs = new GetDropdownBox();
  54. if (StringUtil.notBlank(param.getOpId())) {
  55. renHuanCodeHeCodeRs = dao.huoQuRenYuanDeCodeHeCodeRs(param.getOpId());
  56. }
  57. Page<KeShiFeiiYongTongJi> page;
  58. if (param.getTotal() > 0) {
  59. page = new Page<>(param.getCurrentPage(), param.getPageSize(), false);
  60. } else {
  61. page = new Page<>(param.getCurrentPage(), param.getPageSize());
  62. }
  63. QueryWrapper<?> qw = new QueryWrapper<>();
  64. if (param.getLaiYuan() == 0) {
  65. qw.ge("charge_date", param.getStartTime());
  66. qw.le("charge_date", param.getEndTime());
  67. if (ListUtil.notBlank(keShiLieBiao)) {
  68. qw.in("a.exec_unit", keShiLieBiao);
  69. }
  70. if (StringUtil.notBlank(param.getChargeCodeMx())) {
  71. qw.eq("a.charge_code_mx", param.getChargeCodeMx());
  72. }
  73. if (StringUtil.notBlank(renHuanCodeHeCodeRs.getCode())) {
  74. qw.eq("a.op_id_code", renHuanCodeHeCodeRs.getCode());
  75. }
  76. if (StringUtil.notBlank(param.getReqDeptCode())) {
  77. qw.eq("a.ward_code", param.getReqDeptCode());
  78. }
  79. switch (param.getFenLei()) {
  80. case 0:
  81. qw.groupBy("CONVERT(varchar(100), charge_date, 23)");
  82. qp.setData(dao.getZhuYuanFeiYongXiangMuFenLeiV2(page,
  83. qw,
  84. " CONVERT(varchar(100), charge_date, 23) charge_date_string,"));
  85. qp.setTotal(page.getTotal());
  86. break;
  87. case 1:
  88. qw.groupBy("op_id_code");
  89. qp.setData(dao.getZhuYuanFeiYongXiangMuFenLeiV2(page,
  90. qw,
  91. "op_id_code,opName = (select rtrim(name) from a_employee_mi where code = op_id_code ),"));
  92. qp.setTotal(page.getTotal());
  93. break;
  94. case 2:
  95. qw.groupBy("charge_code_mx,serial");
  96. qp.setData(dao.getZhuYuanFeiYongXiangMuFenLeiV2(page,
  97. qw,
  98. "charge_code_mx,charge_code_name =(select dbo.get_charge_name(charge_code_mx, serial)),"));
  99. qp.setTotal(page.getTotal());
  100. break;
  101. case 3:
  102. if (param.getTotal() == 0) {
  103. qp = dao.getKeShiFeiYongZhuYuanTotal(keShiLieBiao, param.getStartTime(), param.getEndTime(), param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(), param.getReqDeptCode());
  104. }
  105. qp.setData(dao.getKeShiFeiYongZhuYuan(param.getCurrentPage(), param.getPageSize(), keShiLieBiao, param.getStartTime(), param.getEndTime(), param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(), param.getReqDeptCode()));
  106. break;
  107. case 4:
  108. qw.groupBy("a.ward_code");
  109. qp.setData(dao.getZhuYuanFeiYongXiangMuFenLeiV2(page,
  110. qw,
  111. "a.ward_code,wardCodeName = (select rtrim(name) from zd_unit_code where code = a.ward_code),"));
  112. qp.setTotal(page.getTotal());
  113. break;
  114. case 5:
  115. qw.groupBy("a.inpatient_no,a.admiss_times");
  116. qp.setData(dao.getZhuYuanFeiYongXiangMuFenLeiV2(page,
  117. qw,
  118. "a.inpatient_no as patient," +
  119. "(select rtrim(name) from a_patient_mi where a.inpatient_no = a_patient_mi.inpatient_no) as patient_name," +
  120. "a.admiss_times as times,"));
  121. qp.setTotal(page.getTotal());
  122. break;
  123. default:
  124. break;
  125. }
  126. } else {
  127. if (StringUtil.notBlank(param.getStartTime())) {
  128. qw.ge("confirm_time", param.getStartTime());
  129. qw.le("confirm_time", param.getEndTime());
  130. }
  131. if (ListUtil.notBlank(param.getExecUnitList())) {
  132. qw.in("exec_dept", param.getExecUnitList());
  133. }
  134. if (StringUtil.notBlank(param.getChargeCodeMx())) {
  135. qw.eq("charge_item_code", param.getChargeCodeMx());
  136. }
  137. if (StringUtil.notBlank(param.getCode())) {
  138. qw.eq("confirm_id", param.getCode());
  139. }
  140. if (StringUtil.notBlank(param.getReqDeptCode())) {
  141. qw.eq("warn_dept", param.getReqDeptCode());
  142. }
  143. switch (param.getFenLei()) {
  144. case 0:
  145. qw.groupBy("CONVERT(varchar(100),confirm_time, 23)");
  146. qp.setData(dao.getMenZhenFeiYongXiangMuFenLeiV2(
  147. page,
  148. qw,
  149. "CONVERT(varchar(100),confirm_time, 23) as charge_date_string,"
  150. ));
  151. qp.setTotal(page.getTotal());
  152. break;
  153. case 1:
  154. qw.groupBy("confirm_id");
  155. qp.setData(
  156. dao.getMenZhenFeiYongXiangMuFenLeiV2(page,
  157. qw,
  158. "confirm_id,opName = (select rtrim(name) from a_employee_mi where code = confirm_id),")
  159. );
  160. qp.setTotal(page.getTotal());
  161. break;
  162. case 2:
  163. qw.groupBy("charge_item_code,group_no");
  164. qp.setData(
  165. dao.getMenZhenFeiYongXiangMuFenLeiV2(page,
  166. qw,
  167. "charge_item_code as charge_code_mx,charge_code_name =(select dbo.get_charge_name(charge_item_code, group_no)),")
  168. );
  169. qp.setTotal(page.getTotal());
  170. break;
  171. case 3:
  172. if (param.getTotal() == 0) {
  173. qp = dao.getMenZhenFeiYongTotal(keShiLieBiao, param.getStartTime(), param.getEndTime(), param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(), param.getReqDeptCode());
  174. }
  175. qp.setData(dao.getMenZhenFeiYong(param.getCurrentPage(), param.getPageSize(), keShiLieBiao, param.getStartTime(), param.getEndTime(), param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(), param.getReqDeptCode()));
  176. break;
  177. case 4:
  178. qw.groupBy("warn_dept");
  179. qp.setData(dao.getMenZhenFeiYongXiangMuFenLeiV2(
  180. page,
  181. qw,
  182. "warn_dept as wardCode,wardCodeName = (select rtrim(name) from zd_unit_code where code = warn_dept),"));
  183. qp.setTotal(page.getTotal());
  184. break;
  185. case 5:
  186. qw.groupBy("patient_id,times,name");
  187. qp.setData(dao.getMenZhenFeiYongXiangMuFenLeiV2(
  188. page,
  189. qw,
  190. "rtrim(patient_id) as patient,times,rtrim(name) as patient_name,"));
  191. qp.setTotal(page.getTotal());
  192. break;
  193. default:
  194. break;
  195. }
  196. }
  197. return ResultVoUtil.success(qp);
  198. }
  199. public void exportExcel(HttpServletResponse response, QueryDrugsAndProjects param) {
  200. double pageSize = 1000;
  201. double currentPage = param.getTotal() / pageSize;
  202. int fenDuan = (int) Math.ceil(currentPage);
  203. List<KeShiFeiiYongTongJi> keShiFeiiYongTongJisList = new ArrayList<>();
  204. param.setPageSize(1000);
  205. for (long i = 0; i < fenDuan; i++) {
  206. param.setCurrentPage(i + 1);
  207. keShiFeiiYongTongJisList.addAll(getKeShouFei(param).getData().getData());
  208. }
  209. ToolExcel excel = new ToolExcel();
  210. switch (param.getFenLei()) {
  211. case 0:
  212. excel.addTitle("chargeDateString", "收费日期", 21);
  213. break;
  214. case 1:
  215. excel.addTitle("opName", "录入人");
  216. break;
  217. case 2:
  218. excel.addTitle("chargeCodeMx", "项目编码")
  219. .addTitle("chargeCodeName", "项目名称", 30);
  220. break;
  221. case 3:
  222. excel.addTitle("patientName", "姓名")
  223. .addTitle("patient", "住院号")
  224. .addTitle("times", "次数")
  225. .addTitle("chargeCodeMx", "项目编码")
  226. .addTitle("chargeCodeName", "项目名称", 30)
  227. .addTitle("chargeDate", "执行日期", 21)
  228. .addTitle("chargeDateString", "收费日期", 21)
  229. .addTitle("opName", "录入人")
  230. .addTitle("execUnitName", "执行科室")
  231. .addTitle("wardCodeName", "申请科室");
  232. break;
  233. case 4:
  234. excel.addTitle("wardCodeName", "申请科室");
  235. break;
  236. case 5:
  237. excel.addTitle("patientName", "姓名")
  238. .addTitle("patient", "住院号")
  239. .addTitle("times", "次数");
  240. break;
  241. }
  242. excel.addTitle("chargeFee", "金额")
  243. .addTitle("chargeAmount", "数量")
  244. .addTitle("source", "来源")
  245. .exportExcel(keShiFeiiYongTongJisList, response);
  246. }
  247. }