Kaynağa Gözat

查看医嘱名费用和医嘱时间不能大于入院时间

xiaochan 3 yıl önce
ebeveyn
işleme
0be77fd382

+ 62 - 0
src/main/java/thyyxxk/webserver/constants/sidicts/ChargeStatus.java

@@ -0,0 +1,62 @@
+package thyyxxk.webserver.constants.sidicts;
+
+
+import thyyxxk.webserver.utils.StringUtil;
+
+public enum ChargeStatus {
+
+    /**
+     * 费用状态
+     */
+    INPUT("1", "录入"),
+    ACCOUNT("2", "上账"),
+    CLOSE_AN_ACCOUNT("3", "结算"),
+    MEDICATION_LIST_NOT_CONFIRMED("5", "未确认药单"),
+    NOT_RECEIVED("6", "未接收"),
+    REFUSE_TO_CONFIRM("7", "拒绝确认"),
+    MEDICAL_TECHNOLOGY_DEPARTMENT("8", "医技科室"),
+    MEDICATION_ORDER_NOT_SUBMITTED("9", "未提交药单");
+
+    private final String code;
+    private final String name;
+
+    ChargeStatus(String code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public static String getValue(String code) {
+        if (StringUtil.isBlank(code)) {
+            return "";
+        }
+        for (ChargeStatus item : ChargeStatus.values()) {
+            if (code.trim().equals(item.getCode())) {
+                return item.getName();
+            }
+        }
+        return "";
+    }
+
+
+    public static ChargeStatus getEnum(String code) {
+        if (StringUtil.isBlank(code)) {
+            return null;
+        }
+        for (ChargeStatus item : ChargeStatus.values()) {
+            if (code.trim().equals(item.getCode())) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+
+}

+ 8 - 0
src/main/java/thyyxxk/webserver/controller/zhuyuanyizheng/YizhuLuRuController.java

@@ -6,6 +6,7 @@ import org.springframework.web.bind.annotation.*;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
 import thyyxxk.webserver.entity.datamodify.YzActOrder;
+import thyyxxk.webserver.entity.zhuyuanyisheng.DoctorSOrderFee;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.*;
 import thyyxxk.webserver.service.zhuyuanyisheng.YiZhuLuRuServer;
 
@@ -130,4 +131,11 @@ public class YizhuLuRuController {
     public ResultVo<String> piLiangXiuGaiTingZhiShiJian(@RequestBody @Validated YiZhuTingZhiShiJian param) {
         return server.piLiangXiuGaiTingZhiShiJian(param);
     }
+
+    @GetMapping("/expensesForGettingADoctorSOrder")
+    public ResultVo<Map<String, Object>> expensesForGettingADoctorSOrder(@RequestParam("patNo") String patNo,
+                                                                         @RequestParam("times") Integer times) {
+        return server.expensesForGettingADoctorSOrder(patNo, times);
+    }
+
 }

+ 0 - 3
src/main/java/thyyxxk/webserver/dao/his/zhuyuanyiji/QueRenYiZhuShouFeiDao.java

@@ -21,9 +21,6 @@ import java.util.List;
 @Mapper
 public interface QueRenYiZhuShouFeiDao {
 
-    @Select("select code from zd_unit_code where (parent_code = #{deptCode} or code = #{deptCode} )")
-    List<String> getKeShiLieBiao(String deptCode);
-
     @Select("<script>" +
             "select  " +
             "rtrim(a.inpatient_no) inpatient_no, a.admiss_times, bed_no =b.bed_no," +

+ 12 - 0
src/main/java/thyyxxk/webserver/dao/his/zhuyuanyisheng/YiZhuLuRuDao.java

@@ -5,10 +5,13 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import org.apache.ibatis.annotations.*;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
 import thyyxxk.webserver.entity.datamodify.YzActOrder;
+import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
+import thyyxxk.webserver.entity.zhuyuanyisheng.DoctorSOrderFee;
 import thyyxxk.webserver.entity.zhuyuanyisheng.ZyOrderZk;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.*;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 import java.util.Set;
 
@@ -892,4 +895,13 @@ public interface YiZhuLuRuDao {
             "values (#{actOrderNo},#{oldWard},#{oldDept},#{newWard},#{newDept})")
     void insertDoctorSOrder(ZyOrderZk zk);
 
+
+    @Select("execute dbo.xc_zy_order_fee;1 @in_no = #{patNo}, @in_times = #{times}")
+    List<DoctorSOrderFee> expensesForGettingADoctorSOrder(@Param("patNo") String patNo,
+                                                          @Param("times") Integer times);
+
+    @Select("select admiss_date " +
+            "from zy_actpatient " +
+            "where inpatient_no = #{patNo}")
+    Date patientAdmissionTime(String patNo);
 }

+ 7 - 0
src/main/java/thyyxxk/webserver/entity/datamodify/YzActOrder.java

@@ -196,6 +196,13 @@ public class YzActOrder implements Serializable {
      */
     private String id;
 
+    public String getActOrderNoStr() {
+        if (actOrderNo != null) {
+            return actOrderNo.stripTrailingZeros().toPlainString();
+        }
+        return null;
+    }
+
 
     /* 费用标志 自备标志 1 自备 2 嘱托 3 基数药 */
     public String getSelfBuyName() {

+ 90 - 0
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/DoctorSOrderFee.java

@@ -0,0 +1,90 @@
+package thyyxxk.webserver.entity.zhuyuanyisheng;
+
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class DoctorSOrderFee {
+
+    /*------------------------医嘱信息---------------------------*/
+    private BigDecimal actOrderNo;
+    private String orderCode;
+    private Date orderTime;
+    private String frequCode;
+    private Date enterTime;
+    private String enterOper;
+    private Date startTime;
+    private Date endTime;
+    private String infantFlag;
+    private String drugFlag;
+    private String supplyCode;
+    private Date performanceTime;
+    private String physician;
+    private String statusFlag;
+    private BigDecimal drugQuan;
+    private String instruction;
+    private String drugSpecification;
+    private BigDecimal dose;
+    private String doseUnit;
+    private BigDecimal excluActOrderNo;
+    private String orderName;
+    private String groupNo;
+    private String serial;
+    private String paySelf;
+    private String selfBuy;
+    private String cxFlag;
+    private String supplyClass;
+
+    /*------------------------费用信息---------------------------*/
+    private Integer admissTimes;
+    private Integer ledgerSn;
+    private Integer detailSn;
+    private Date chargeDate;
+    private String opIdCode;
+    private String chargeCode;
+    private String chargeStatus;
+    private String chargeStatusName;
+
+    private BigDecimal chargeFee;
+    private String selfFlag;
+    private String separateFlag;
+    private String suppressFlag;
+    private String wardCode;
+    private String wardCodeName;
+    private String deptCode;
+    private String deptCodeName;
+    private BigDecimal orderNo;
+    private String opeFlag;
+    private String execUnit;
+    private String execUnitName;
+    private BigDecimal chargeAmount;
+    private String chargeName;
+    private String pageNo;
+    private Date genTime;
+    private Date listTime;
+
+    public String getActOrderNoStr() {
+        if (actOrderNo == null) {
+            return "";
+
+        } else if (actOrderNo.compareTo(BigDecimal.ZERO) == 0) {
+            return "0";
+        }
+        return actOrderNo.stripTrailingZeros().toPlainString();
+
+    }
+
+    public String getOrderNoStr() {
+        if (orderNo == null) {
+            return null;
+
+        } else if (orderNo.compareTo(BigDecimal.ZERO) == 0) {
+            return "0";
+        }
+        return orderNo.stripTrailingZeros().toPlainString();
+
+    }
+}

+ 12 - 0
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/yizhuluru/FeeSum.java

@@ -0,0 +1,12 @@
+package thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru;
+
+import lombok.Data;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class FeeSum {
+    private String amount;
+    private String sum;
+}

+ 5 - 0
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/yizhuluru/XinZhenYzActOrder.java

@@ -18,6 +18,11 @@ import java.util.Date;
 @Data
 public class XinZhenYzActOrder {
 
+    /**
+     * 上传给合理用药的id
+     */
+    private String rationalDrugUseId;
+
     /**
      * 临时 id 用来做父子医嘱
      */

+ 1 - 0
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/yizhuluru/YiZhuFeiYongChaXunTiaoJian.java

@@ -28,4 +28,5 @@ public class YiZhuFeiYongChaXunTiaoJian {
     private String frequCode;
     private String orderName;
     private Integer zhuangTai;
+    private String actOrderNo;
 }

+ 2 - 1
src/main/java/thyyxxk/webserver/service/heliyongyao/RationalUseServer.java

@@ -212,11 +212,12 @@ public class RationalUseServer {
                 yp = new YaoPin();
                 yp.setPackRetprice(BigDecimal.valueOf(1));
             }
+            item.setRationalDrugUseId(SnowFlakeId.instance().nextId());
             // 因为我要入库才能生成医嘱号所以这里用雪花算法
             sb.append("<medicine>")
                     .append("<cf_id>").append("0").append("</cf_id>")
                     // 因为我要入库才能生成医嘱号所以这里用雪花算法
-                    .append("<oeridid>").append(item.getId()).append("</oeridid>")
+                    .append("<oeridid>").append(item.getRationalDrugUseId()).append("</oeridid>")
                     .append("<is_current>").append("1").append("</is_current>")
                     .append("<pres_type>").append("ONCE".equals(item.getFrequCode()) ? "T" : "L").append("</pres_type>")
                     .append("<pres_time>").append(DateUtil.formatDatetime(item.getOrderTime())).append("</pres_time>")

+ 83 - 3
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/YiZhuLuRuServer.java

@@ -5,17 +5,20 @@ import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sun.org.apache.bcel.internal.generic.NEW;
 import lombok.extern.slf4j.Slf4j;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import thyyxxk.webserver.config.exception.BizException;
 import thyyxxk.webserver.config.exception.ExceptionEnum;
+import thyyxxk.webserver.constants.sidicts.ChargeStatus;
 import thyyxxk.webserver.dao.his.zhuyuanyisheng.YiZhuLuRuDao;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.RoleCode;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
 import thyyxxk.webserver.entity.datamodify.YzActOrder;
+import thyyxxk.webserver.entity.zhuyuanyisheng.DoctorSOrderFee;
 import thyyxxk.webserver.entity.zhuyuanyisheng.ZyOrderZk;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.*;
 import thyyxxk.webserver.service.PublicServer;
@@ -82,7 +85,6 @@ public class YiZhuLuRuServer {
      * @param param 查询条件
      * @return 返回分页数据,同时做了树状图,这样会有一个问题,那就是开了套餐的数据查询不出来
      */
-    @StringTrim
     public ResultVo<IPage<YzActOrder>> huoQuYiZhuShuJu(YiZhuFeiYongChaXunTiaoJian param) {
         QueryWrapper<?> qw = new QueryWrapper<>();
         qw.eq("inpatient_no", param.getPatNo())
@@ -94,6 +96,9 @@ public class YiZhuLuRuServer {
             qw.ge("order_time", param.getStartTime())
                     .le("order_time", param.getEndTime());
         }
+        if (StringUtil.notBlank(param.getActOrderNo())) {
+            qw.eq("act_order_no", param.getActOrderNo());
+        }
 
         if (StringUtil.notBlank(param.getFrequCode())) {
             qw.eq("frequ_code", param.getFrequCode());
@@ -421,7 +426,7 @@ public class YiZhuLuRuServer {
      * @param needRule     需要的权限
      * @param yaoPingXinXi 药品信息
      * @param xiangMuXinXi 项目信息
-     * @param yiShenDengJi 医生登记
+     * @param yiShenDengJi 医生等级
      * @param index        当前下标
      * @param listSize     数据大小
      * @param item         当前数据
@@ -477,10 +482,15 @@ public class YiZhuLuRuServer {
             }
             // 插入模板就不需要 填写时间 这里为什么不要使用 插入医嘱 这个判断就是因为还需要校验数据
             if (!param.getChaRuMuBan()) {
+                Date adminDate = dao.patientAdmissionTime(param.getInpatientNo());
                 if (item.getOrderTime() == null) {
                     cuoWuXinXi.append(getCuoWuXinXi("医嘱时间不能为空", listSize, index));
                 } else if (item.getStartTime() == null) {
                     cuoWuXinXi.append(getCuoWuXinXi("开始时间不能为空", listSize, index));
+                } else if (adminDate == null) {
+                    cuoWuXinXi.append(getCuoWuXinXi("没有查询到患者的入院时间", listSize, index));
+                } else if (DateUtil.shiJianDaXiao(item.getStartTime(), adminDate, "<")) {
+                    cuoWuXinXi.append(getCuoWuXinXi("开始时间不能在患者入院之前,患者入院时间" + DateUtil.formatDatetime(adminDate), listSize, index));
                 } else if (DateUtil.shiJianDaXiao(item.getStartTime(), item.getOrderTime(), "<")) {
                     cuoWuXinXi.append(getCuoWuXinXi("开始时间不能在开医嘱之前", listSize, index));
                 }
@@ -503,7 +513,7 @@ public class YiZhuLuRuServer {
                 cuoWuXinXi.append(getCuoWuXinXi("您没有开此药品的权限", listSize, index));
             }
             if (feiYongXinXi.getDelFlag() == 1) {
-                cuoWuXinXi.append(getCuoWuXinXi("已被物价科停用,请联系物价科。", listSize, index));
+                cuoWuXinXi.append(getCuoWuXinXi("药品已经被停用了,请联系药剂科。", listSize, index));
             }
         } else {
             feiYongXinXi = xiangMuXinXi.get(item.getOrderCode().trim());
@@ -1004,4 +1014,74 @@ public class YiZhuLuRuServer {
         return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
     }
 
+    public ResultVo<Map<String, Object>> expensesForGettingADoctorSOrder(String patNo, Integer times) {
+        List<DoctorSOrderFee> feeDate = dao.expensesForGettingADoctorSOrder(patNo, times);
+//        Map<String, String> chargeStatus = new HashMap<>(4);
+//        chargeStatus.put("1", "录入");
+//        chargeStatus.put("2", "上账");
+//        chargeStatus.put("3", "结算");
+//        chargeStatus.put("5", "未确认药单");
+//        chargeStatus.put("6", "未接收");
+//        chargeStatus.put("7", "拒绝确认");
+//        chargeStatus.put("8", "医技科室");
+//        chargeStatus.put("9", "未提交药单");
+        List<String> problem = Arrays.asList("5", "6", "7", "9");
+
+        Map<String, String> problemDoctorSOrder = new HashMap<>();
+        Map<String, FeeSum> totalCost = new HashMap<>();
+
+        Map<String, List<DoctorSOrderFee>> map = new HashMap<>(feeDate.size());
+        for (DoctorSOrderFee fee : feeDate) {
+            // 如果这个没有就代表没有产生费用
+            if (fee.getOrderNoStr() == null) {
+                continue;
+            }
+            String chargeStatusName = ChargeStatus.getValue(fee.getChargeStatus());
+            log.info("医嘱号:{},费用类型:{},名称:{}", fee.getOrderNoStr(), fee.getChargeStatus(), chargeStatusName);
+
+            String amount = fee.getChargeAmount().abs().stripTrailingZeros().toPlainString();
+            String money = fee.getChargeFee().stripTrailingZeros().toPlainString();
+
+            // 计算费用总和
+            if (totalCost.containsKey(fee.getOrderNoStr())) {
+                FeeSum sum = totalCost.get(fee.getOrderNoStr());
+                sum.setSum(DecimalUtil.add(money, sum.getSum()));
+                sum.setAmount(DecimalUtil.add(amount, sum.getAmount()));
+                totalCost.replace(fee.getOrderNoStr(), sum);
+            } else {
+                FeeSum sum = new FeeSum();
+                sum.setAmount(amount);
+                sum.setSum(money);
+                totalCost.put(fee.getOrderNoStr(), sum);
+            }
+
+            if (problem.contains(fee.getChargeStatus())) {
+
+                problemDoctorSOrder.put(fee.getOrderNoStr(), chargeStatusName);
+            }
+
+            fee.setChargeStatusName(chargeStatusName);
+
+            if (map.containsKey(fee.getOrderNoStr())) {
+                map.get(fee.getOrderNoStr()).add(fee);
+            } else {
+                List<DoctorSOrderFee> list = new ArrayList<>();
+                list.add(fee);
+                map.put(fee.getOrderNoStr(), list);
+            }
+        }
+
+        Map<String, Object> feeData = new HashMap<>(3);
+        feeData.put("data", map);
+        feeData.put("problem", problemDoctorSOrder);
+        feeData.put("totalCost", totalCost);
+
+        return ResultVoUtil.success(feeData);
+    }
+
+    public static void main(String[] args) {
+        BigDecimal a = new BigDecimal("-12.323231");
+        System.out.println(a.abs());
+    }
+
 }