123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- package thyyxxk.webserver.service.zhuyuanyiji;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import thyyxxk.webserver.config.exception.ExceptionEnum;
- import thyyxxk.webserver.constants.GetDateFormat;
- import thyyxxk.webserver.dao.his.zhuyuanyiji.QueRenYiZhuShouFeiDao;
- import thyyxxk.webserver.entity.ResultVo;
- import thyyxxk.webserver.entity.datamodify.YzActOrder;
- import thyyxxk.webserver.entity.yibao.patient.Patient;
- import thyyxxk.webserver.service.PublicServer;
- import thyyxxk.webserver.service.yibao.PatientService;
- import thyyxxk.webserver.utils.*;
- import thyyxxk.webserver.websocket.WebSocketServer;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.function.Function;
- import java.util.stream.Collectors;
- /**
- * <p>
- * 描述: 确认医嘱收费
- * </p>
- *
- * @author xc
- * @date 2021-09-27 11:50
- */
- @Service
- @Slf4j
- public class QueRenYiZhuShouFeiServer {
- private final QueRenYiZhuShouFeiDao dao;
- private final PublicServer publicServer;
- private final PatientService patientService;
- public QueRenYiZhuShouFeiServer(QueRenYiZhuShouFeiDao dao, PublicServer server, PatientService patientService) {
- this.dao = dao;
- this.publicServer = server;
- this.patientService = patientService;
- }
- /**
- * @param yzActOrder 查询条件 住院号,住院次数,执行科室, 分页
- * @return 返回分页数据
- */
- public ResultVo<IPage<YzActOrder>> getXuQueFeiYiZhu(YzActOrder yzActOrder) {
- IPage<YzActOrder> page = new Page<>(yzActOrder.getCurrentPage(), yzActOrder.getPageSize(), false);
- List<String> execUnitList = publicServer.getKeShiLieBiaoList(yzActOrder.getExecUnit());
- if (StringUtil.isBlank(yzActOrder.getExecUnit())) {
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "科室信息为空 [・_・?]");
- }
- String liShi = "=";
- if (yzActOrder.getLiShi() == 1) {
- if (StringUtil.isBlank(yzActOrder.getStartTimeString()) || StringUtil.isBlank(yzActOrder.getEndTimeString())) {
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "查看历史数据时需要携带医嘱时间");
- }
- liShi = "<>";
- }
- log.info("查询需确费医嘱:数据:{}", JSON.toJSONString(yzActOrder));
- String fenLei = "a.ward_code";
- if (yzActOrder.getFenLei() != null && yzActOrder.getFenLei().equals(1)) {
- fenLei = "(select count(*) from yz_zy_patient_fee " +
- "where op_id = '" + TokenUtil.getTokenUserId() + "' and inpatient_no = a.inpatient_no and admiss_times = a.admiss_times and charge_status <> 3)";
- }
- page.setTotal(dao.getXuQueFeiYiZhuTotal(yzActOrder.getInpatientNo(), yzActOrder.getWardCode(), execUnitList, yzActOrder.getStartTimeString(), yzActOrder.getEndTimeString(), liShi));
- dao.getXuQueFeiYiZhu(page, yzActOrder.getInpatientNo(), yzActOrder.getWardCode(), execUnitList, yzActOrder.getStartTimeString(), yzActOrder.getEndTimeString(),
- fenLei, liShi);
- if (page.getRecords().isEmpty()) {
- return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
- }
- List<YzActOrder> ziJieDian = dao.getXuQueFeiXiangXiXinXi(execUnitList, page.getRecords(), yzActOrder.getStartTimeString(), yzActOrder.getEndTimeString(), liShi);
- Map<String, List<YzActOrder>> ziJieDianMap = ziJieDian.stream().collect(
- Collectors.groupingBy(item -> item.getInpatientNo() + item.getAdmissTimes())
- );
- for (int i = 0; i < page.getRecords().size(); i++) {
- YzActOrder yz = page.getRecords().get(i);
- String key = yz.getInpatientNo() + yz.getAdmissTimes();
- if (yz.getList() == null) {
- yz.setList(new ArrayList<>());
- }
- if (ziJieDianMap.containsKey(key)) {
- yz.getList().addAll(ziJieDianMap.get(key));
- }
- }
- return ResultVoUtil.success(page);
- }
- /**
- * @param param
- * @return
- */
- @Transactional(rollbackFor = Exception.class)
- public ResultVo<String> baoCunYiZhuQueFeiShuJu(YzActOrder param) {
- List<Patient> xuYaoFeiYongJieShou = new ArrayList<>();
- List<YzActOrder> xuYaoQueFei = new ArrayList<>();
- if (ListUtil.isBlank(param.getList())) {
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请选择需要确费的数据 ヽ(ー_ー)ノ");
- }
- if (StringUtil.isBlank(param.getExecUnit())) {
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "科室信息为空 ∑(っ°Д°;)っ卧槽,不见了");
- }
- for (YzActOrder yzActOrder : param.getList()) {
- if (yzActOrder.getList() != null && !yzActOrder.getList().isEmpty()) {
- for (YzActOrder actOrder : yzActOrder.getList()) {
- if (actOrder.getChargeStatus().equals("1")) {
- xuYaoQueFei.add(actOrder);
- Patient xuQueFei = new Patient();
- xuQueFei.setInpatientNo(yzActOrder.getInpatientNo());
- xuQueFei.setAdmissTimes(yzActOrder.getAdmissTimes());
- xuQueFei.setName(yzActOrder.getName());
- xuQueFei.setLedgerSn(yzActOrder.getLedgerSn());
- if (!xuYaoFeiYongJieShou.contains(xuQueFei)) {
- xuYaoFeiYongJieShou.add(xuQueFei);
- }
- } else if (actOrder.getChargeStatus().equals("2")) {
- xuYaoQueFei.add(actOrder);
- }
- }
- }
- }
- if (xuYaoFeiYongJieShou.isEmpty()) {
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "没有进行确认操作请勿点击。 ψ(*`ー´)ψ");
- } else {
- List<YzActOrder> yiQueFei = dao.huoQuLiShiQueFeiXinXi("", "",
- publicServer.getKeShiLieBiaoList(param.getExecUnit()), "", xuYaoFeiYongJieShou);
- Map<String, YzActOrder> yiQueFeiMap = yiQueFei.stream().collect(
- Collectors.toMap(L -> L.getInpatientNo() + L.getAdmissTimes() + DateUtil.formatDatetime(L.getOccTime()) + L.getChargeCode() + L.getChargeFee() + L.getOrderCount(), Function.identity()));
- for (YzActOrder yzActOrder : xuYaoQueFei) {
- String key = yzActOrder.getInpatientNo() + yzActOrder.getAdmissTimes() + DateUtil.formatDatetime(yzActOrder.getOccTime()) +
- yzActOrder.getChargeCode() + yzActOrder.getChargeFee() + yzActOrder.getOrderCount();
- if (yiQueFeiMap.containsKey(key)) {
- YzActOrder queRenTiShi = yiQueFeiMap.get(key);
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("存在已被确费的项目,请对该项目选择不操作或刷新数据重新加载。 !!!∑(゚Д゚ノ)ノ <br>患者姓名:【%s】<br>项目:【%s】<br> 医嘱号:【%s】<br> 医嘱时间:【%s】<br>执行人:【%s】<br> 操作时间:【%s】", queRenTiShi.getPatientName(),
- queRenTiShi.getOrderName(), queRenTiShi.getActOrderNo(), DateUtil.formatDatetime(queRenTiShi.getOccTime()), queRenTiShi.getOpIdName(), DateUtil.formatDatetime(queRenTiShi.getOpDate())));
- }
- }
- }
- dao.baoCunYiZhuQueFei(xuYaoQueFei, TokenUtil.getTokenUserId());
- for (Patient patient : xuYaoFeiYongJieShou) {
- try {
- patientService.receiveAndRecalculateCost(patient);
- } catch (Exception e) {
- JSONObject obj = new JSONObject();
- obj.put("name", "systemNotification");
- obj.put("message", String.format("患者名字为:【%s】,医嘱确认成功但接受费用失败,请护士重新接受费用", patient.getName()));
- String message = obj.toJSONString();
- WebSocketServer.sendMessageByUserCode(TokenUtil.getTokenUserId(), message);
- }
- }
- log.info("医嘱确费保存==》操作人:{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONStringWithDateFormat(xuYaoQueFei, GetDateFormat.DATE_TIME));
- return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "操作成功 (๑*◡*๑)");
- }
- }
|