MedicineManagementService.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package thyyxxk.webserver.service.zhuyuanyiji;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. import thyyxxk.webserver.config.exception.ExceptionEnum;
  6. import thyyxxk.webserver.dao.his.zhuyuanyiji.MedicineManagementDao;
  7. import thyyxxk.webserver.entity.ResultVo;
  8. import thyyxxk.webserver.entity.medicaltechnology.FetchMedicines;
  9. import thyyxxk.webserver.entity.medicaltechnology.MedicinePage;
  10. import thyyxxk.webserver.entity.medicaltechnology.PoisonousAnesthetics;
  11. import thyyxxk.webserver.service.PublicServer;
  12. import thyyxxk.webserver.utils.ResultVoUtil;
  13. import thyyxxk.webserver.utils.StringUtil;
  14. import thyyxxk.webserver.utils.TokenUtil;
  15. import java.math.BigDecimal;
  16. import java.util.*;
  17. @Slf4j
  18. @Service
  19. public class MedicineManagementService {
  20. private final MedicineManagementDao dao;
  21. private final PublicServer publicService;
  22. @Autowired
  23. public MedicineManagementService(MedicineManagementDao dao, PublicServer publicService) {
  24. this.dao = dao;
  25. this.publicService = publicService;
  26. }
  27. public ResultVo<List<MedicinePage>> fetchMedicinePages(FetchMedicines params) {
  28. transformDateToDatetime(params);
  29. buildChildDepartments(params);
  30. List<MedicinePage> list = dao.selectMedicinePages(params);
  31. if (list.isEmpty()) {
  32. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
  33. }
  34. return ResultVoUtil.success(list);
  35. }
  36. public ResultVo<List<MedicinePage>> fetchUsedMedicines(FetchMedicines params) {
  37. transformDateToDatetime(params);
  38. buildChildDepartments(params);
  39. List<MedicinePage> list = dao.selectUsedMedicines(params);
  40. if (list.isEmpty()) {
  41. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
  42. }
  43. return ResultVoUtil.success(list);
  44. }
  45. public ResultVo<List<MedicinePage>> submitMedicinePages(FetchMedicines newMedicinePage) {
  46. if (StringUtil.isBlank(newMedicinePage.getChargeCodes())) {
  47. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "请勾选需要提交的药品。");
  48. }
  49. int pageNo = publicService.getTheDrugListNo();
  50. dao.deleteExistTargetPageNo(pageNo);
  51. transformDateToDatetime(newMedicinePage);
  52. newMedicinePage.setPageNo(pageNo);
  53. dao.insertNewPageNo(newMedicinePage);
  54. dao.submitMedicinePages(newMedicinePage);
  55. log.info("【操作员:{}】提交药品单:{}", TokenUtil.getTokenUserId(), newMedicinePage);
  56. return ResultVoUtil.success(dao.selectMedicinePages(newMedicinePage));
  57. }
  58. public ResultVo<Map<String, Object>> fetchPoisonousAnesthetics(FetchMedicines params) {
  59. transformDateToDatetime(params);
  60. List<PoisonousAnesthetics> list = dao.selectPoisonousAnesthetics(params);
  61. if (list.isEmpty()) {
  62. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
  63. }
  64. Map<String, List<PoisonousAnesthetics>> medicines = new TreeMap<>();
  65. for (PoisonousAnesthetics item : list) {
  66. String key = item.getChargeDate() + "^" + item.getChargeCode();
  67. if (medicines.containsKey(key)) {
  68. medicines.get(key).add(item);
  69. } else {
  70. List<PoisonousAnesthetics> temp = new ArrayList<>();
  71. temp.add(item);
  72. medicines.put(key, temp);
  73. }
  74. }
  75. Map<String, BigDecimal> amounts = new HashMap<>();
  76. for (Map.Entry<String, List<PoisonousAnesthetics>> entry : medicines.entrySet()) {
  77. BigDecimal sum = BigDecimal.ZERO;
  78. for (PoisonousAnesthetics item : entry.getValue()) {
  79. sum = sum.add(item.getChargeAmount());
  80. }
  81. amounts.put(entry.getKey(), sum);
  82. }
  83. Map<String, Object> map = new HashMap<>();
  84. map.put("medicines", medicines);
  85. map.put("amounts", amounts);
  86. return ResultVoUtil.success(map);
  87. }
  88. private void transformDateToDatetime(FetchMedicines params) {
  89. params.setStart(params.getStart() + " 00:00:00.000");
  90. params.setEnd(params.getEnd() + " 23:59:59.999");
  91. }
  92. private void buildChildDepartments(FetchMedicines params) {
  93. String dept = params.getDept();
  94. List<String> children = dao.selectChildDepartments(dept);
  95. StringBuilder builder = new StringBuilder();
  96. builder.append("'").append(dept).append("'");
  97. for (String child : children) {
  98. builder.append(",'").append(child).append("'");
  99. }
  100. params.setDept(builder.toString());
  101. }
  102. }