xiaochan 3 anni fa
parent
commit
f02c2c9222

+ 9 - 0
src/main/java/thyyxxk/webserver/controller/yibao/XiangMuLuRuController.java

@@ -3,9 +3,11 @@ package thyyxxk.webserver.controller.yibao;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import thyyxxk.webserver.config.auth.PassToken;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
 import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
+import thyyxxk.webserver.entity.yibao.WeiGuiFeiYongFenXi;
 import thyyxxk.webserver.service.yibao.XiangMuLuRuService;
 
 import java.util.List;
@@ -110,4 +112,11 @@ public class XiangMuLuRuController {
                                           @RequestParam("detailSn") Integer detailSn) {
         return service.cheXiaoTuiFei(inpatientNo, admissTimes, ledger, detailSn);
     }
+
+    @PassToken
+    @GetMapping("/weiGuiFeiYongFenXi")
+    public ResultVo<WeiGuiFeiYongFenXi> weiGuiFeiYongFenXi(@RequestParam("inpatientNo") String inpatientNo,
+                                                           @RequestParam("admissTimes") Integer admissTimes) {
+        return service.weiGuiFeiYongFenXi(inpatientNo, admissTimes);
+    }
 }

+ 71 - 0
src/main/java/thyyxxk/webserver/dao/his/yibao/XiangMuLuRuDao.java

@@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.*;
 import thyyxxk.webserver.entity.datamodify.FeiYongLeiXin;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
 import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
+import thyyxxk.webserver.entity.yibao.WeiGuiFeiYongFenXi;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -891,4 +892,74 @@ public interface XiangMuLuRuDao extends BaseMapper<ZyDetailCharge> {
                                      @Param("admissTimes") Integer admissTimes,
                                      @Param("ledger") Integer ledger,
                                      @Param("detailSn") Integer detailSn);
+
+
+    // 违规费用 分析
+
+
+    @Select("select ori_detail_sn from zy_detail_charge " +
+            "where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn = #{ledger} " +
+            "and infant_flag = #{infantFlag} " +
+            "  and charge_fee < 0 " +
+            "  and ori_detail_sn is not null " +
+            "group by ori_detail_sn having count(1)  > 1")
+    List<Integer> chongFuTuiFei(@Param("inpatientNo") String inpatientNo,
+                                @Param("admissTimes") Integer admissTimes,
+                                @Param("ledger") Integer ledger,
+                                @Param("infantFlag") Integer infantFlag);
+
+    @Update("<script>" +
+            "update zy_detail_charge set ori_detail_sn = null where inpatient_no = '0402330' and admiss_times = 1 and ledger_sn = 1 and infant_flag = 0 and ori_detail_sn in " +
+            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item}" +
+            "</foreach>" +
+            "</script>")
+    void chongZhiWeiGuiYuanLiuShui(@Param("inpatientNo") String inpatientNo,
+                                   @Param("admissTimes") Integer admissTimes,
+                                   @Param("ledger") Integer ledger,
+                                   @Param("infantFlag") Integer infantFlag,
+                                   @Param("list") List<Integer> oriDetailSn);
+
+    /**
+     * 违规药品 信息 没有匹配的
+     *
+     * @param inpatientNo 住院号
+     * @param admissTimes 住院次数
+     * @param ledger      账页号
+     * @return 返回违规药品 没有匹配的
+     */
+    @Select("select charge_code_mx,b.name,national_code from zy_detail_charge a, yp_zd_dict b " +
+            "where order_no <> 6 and trans_flag_yb not in (1,2)  and charge_code like 'BILL%' " +
+            "  and  isnull(b.national_code,'') = '' and inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn = #{ledger} " +
+            "and a.infant_flag = #{infantFlag} " +
+            "  and a.charge_code_mx = b.code " +
+            "group by  charge_code_mx, b.name, national_code")
+    List<WeiGuiFeiYongFenXi> weiGuiYaoPin(@Param("inpatientNo") String inpatientNo,
+                                          @Param("admissTimes") Integer admissTimes,
+                                          @Param("ledger") Integer ledger,
+                                          @Param("infantFlag") Integer infantFlag);
+
+    @Select("select charge_code_mx,b.name,national_code from zy_detail_charge a, zd_charge_item b  " +
+            "where order_no <> 6 and trans_flag_yb not in (1,2)  and charge_code not like 'BILL%'  " +
+            "  and  isnull(b.national_code,'') = '' and inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn = #{ledger}  " +
+            " and a.infant_flag = #{infantFlag} " +
+            "  and a.charge_code_mx = b.code  " +
+            "group by  charge_code_mx, b.name, national_code")
+    List<WeiGuiFeiYongFenXi> weiGuiXiangMu(@Param("inpatientNo") String inpatientNo,
+                                           @Param("admissTimes") Integer admissTimes,
+                                           @Param("ledger") Integer ledger,
+                                           @Param("infantFlag") Integer infantFlag);
+
+
+    @Select("select rtrim(inpatient_no) inpatient_no,admiss_times,ledger_sn,charge_code_mx,detail_sn,ori_detail_sn,charge_fee,charge_amount, " +
+            "       exec_unit_name = (select rtrim(name) name from zd_unit_code where exec_unit = code),charge_date,trans_flag_yb, " +
+            "       op_id_code = (select rtrim(name) name from a_employee_mi where code  = op_id_code) from zy_detail_charge " +
+            "where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn = #{ledger} " +
+            "  and charge_fee < 0 " +
+            "  and  trans_flag_yb not in (1,2) " +
+            "  and ori_detail_sn is null")
+    List<ZyDetailCharge> weiXieDaiYuanLiuShui(@Param("inpatientNo") String inpatientNo,
+                                              @Param("admissTimes") Integer admissTimes,
+                                              @Param("ledger") Integer ledger,
+                                              @Param("infantFlag") Integer infantFlag);
 }

+ 4 - 4
src/main/java/thyyxxk/webserver/dao/his/yibao/ZhuYuanYiZhuDao.java

@@ -89,7 +89,7 @@ public interface ZhuYuanYiZhuDao {
             "       order_time, start_time, confirm_time,status_time,enter_time, end_time,performance_time,print_order_change,refer_physician,consult_physician," +
             "       drug_specification, drug_quan,drug_flag,act_order_no,   " +
             "       mini_unit, drug_weight_unit,self_buy, dose, dose_unit, drug_occ, drug_volume,   " +
-            "       drug_vol_unit, pay_self, serial, group_no, doctor_flag,isnull(tf_flag,0) tf_flag,  " +
+            "       drug_vol_unit, pay_self, serial, group_no, doctor_flag,  " +
             "       inpatient_no, admiss_times, exec_unit, dept_code, ward_code, reg_flag, yb_self_flag   " +
             "        from yz_act_order where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and act_order_no in " +
             "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
@@ -118,15 +118,15 @@ public interface ZhuYuanYiZhuDao {
             "  inpatient_no, admiss_times, exec_unit, dept_code, ward_code, reg_flag, yb_self_flag,  " +
             "  supply_code,  " +
             "  status_flag,  " +
-            "  enter_oper,physician,signer,tf_flag,end_time,performance_time,print_order_change,refer_physician,consult_physician) values " +
+            "  enter_oper,physician,signer,end_time,performance_time,print_order_change,refer_physician,consult_physician) values " +
             "<foreach collection='list' item='item' separator=','>" +
             "(#{item.orderCode},#{item.orderName},#{item.frequCode},#{item.discription},#{item.infantFlag},   " +
-            "#{item.orderTime},#{item.startTime},#{item.confirmTime},#{item.statusTime},#{item.enterTime},   " +
+            "getdate(),getdate(),getdate(),#{item.statusTime},#{item.enterTime},   " +
             "#{item.drugSpecification}, cast(#{item.drugQuan,jdbcType=DECIMAL} as decimal(14,5)),#{item.drugFlag},   " +
             "#{item.newActOrderNo},#{item.miniUnit},#{item.drugWeightUnit},#{item.selfBuy},cast(#{item.dose,jdbcType=DECIMAL} as decimal(14,5)),#{item.doseUnit},   " +
             "cast(#{item.drugOcc,jdbcType=DECIMAL} as decimal(14,5)),cast(#{item.drugVolume,jdbcType=DECIMAL} as decimal(14,5)) ,#{item.drugVolUnit},#{item.paySelf},#{item.serial},#{item.groupNo},#{item.doctorFlag},   " +
             "#{item.inpatientNo},#{item.admissTimes},#{item.execUnit},#{item.deptCode},#{item.wardCode},#{item.regFlag},#{item.ybSelfFlag},   " +
-            "'068','2',#{code},#{code},#{code},2,null,null,#{item.printOrderChange},#{item.referPhysician},#{item.consultPhysician})" +
+            "'068','2',#{code},#{code},#{code},null,null,#{item.printOrderChange},#{item.referPhysician},#{item.consultPhysician})" +
             "</foreach>" +
             "</script>")
     void yiZhuTuiFei(@Param("list") List<YzActOrder> list,

+ 30 - 0
src/main/java/thyyxxk/webserver/entity/yibao/WeiGuiFeiYongFenXi.java

@@ -0,0 +1,30 @@
+package thyyxxk.webserver.entity.yibao;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 描述: 违规费用分析,医保。
+ * </p>
+ *
+ * @author xc
+ * @date 2021-11-13 08:34
+ */
+@Data
+public class WeiGuiFeiYongFenXi {
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private String chargeCodeMx;
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private String name;
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private String nationalCode;
+
+    private List<ZyDetailCharge> weiXieDaiYuanLiuShui;
+
+    private List<WeiGuiFeiYongFenXi> weiPiPei;
+}

+ 4 - 4
src/main/java/thyyxxk/webserver/service/PublicServer.java

@@ -62,13 +62,12 @@ public class PublicServer {
      */
     public int getInfantFlag(String inpatientNo) {
         if (StringUtil.isBlank(inpatientNo)) {
-            return 999;
+            return 0;
         }
-        int infantFlag = 0;
         if (inpatientNo.contains("$")) {
-            infantFlag = 1;
+            return 1;
         }
-        return infantFlag;
+        return 0;
     }
 
     /**
@@ -87,6 +86,7 @@ public class PublicServer {
         return inpatientNo;
     }
 
+
     /**
      * 获取最大流水号
      *

+ 26 - 5
src/main/java/thyyxxk/webserver/service/yibao/XiangMuLuRuService.java

@@ -13,6 +13,7 @@ import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.datamodify.FeiYongLeiXin;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
 import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
+import thyyxxk.webserver.entity.yibao.WeiGuiFeiYongFenXi;
 import thyyxxk.webserver.service.PublicServer;
 import thyyxxk.webserver.utils.*;
 
@@ -250,9 +251,9 @@ public class XiangMuLuRuService {
      */
     public ResultVo<List<ZyDetailCharge>> queryXiangMu(String pyCode, Integer xiangMuHuoYaoPinFlag) {
         if (xiangMuHuoYaoPinFlag == 0) {
-            return ResultVoUtil.success(dao.queryXiangMu(pyCode.toUpperCase() + "%"));
+            return ResultVoUtil.success(dao.queryXiangMu("%" + pyCode.toUpperCase() + "%"));
         }
-        return ResultVoUtil.success(dao.queryYaoPin(pyCode.toUpperCase() + "%"));
+        return ResultVoUtil.success(dao.queryYaoPin("%" + pyCode.toUpperCase() + "%"));
     }
 
     /**
@@ -551,13 +552,33 @@ public class XiangMuLuRuService {
         if (!zyDetailCharge.getTransFlagYb().equals("0")) {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "费用已经被上传了,无法撤销。");
         }
-        if (zyDetailCharge.getOriDetailSn() == null) {
-            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "未携带原流水号。");
+        if (zyDetailCharge.getOriDetailSn() != null && zyDetailCharge.getOriDetailSn() == -1) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "被退数据无法删除。");
         }
         dao.cheXiaoFeiYong(inpatientNo, admissTimes, ledger, detailSn);
         dao.cheXiaoHouHuanYuanZhenShuJu(inpatientNo, admissTimes, ledger, zyDetailCharge.getOriDetailSn());
         log.info("撤销退费 ==> 操作人:{},住院号:{},住院次数:{},账页号:{},流水号:{},原流水号:{}", TokenUtil.getTokenUserId(), inpatientNo, admissTimes, ledger, detailSn, zyDetailCharge.getOriDetailSn());
-        return ResultVoUtil.success(ExceptionEnum.SUCCESS, "撤销成功。");
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "撤销成功,请刷新数据。");
+    }
+
+
+    public ResultVo<WeiGuiFeiYongFenXi> weiGuiFeiYongFenXi(String inpatientNo, Integer admissTimes) {
+        inpatientNo = publicServer.getInpatientNo(inpatientNo);
+        int infantFlag = publicServer.getInfantFlag(inpatientNo);
+        Integer ledger = publicServer.getLedgerSn(inpatientNo, admissTimes);
+
+        List<Integer> chongFuTuiFei = dao.chongFuTuiFei(inpatientNo, admissTimes, ledger, infantFlag);
+
+        if (ListUtil.notBlank(chongFuTuiFei)) {
+            dao.chongZhiWeiGuiYuanLiuShui(inpatientNo, admissTimes, ledger, infantFlag, chongFuTuiFei);
+        }
+        WeiGuiFeiYongFenXi weiGuiFeiYongFenXi = new WeiGuiFeiYongFenXi();
+        weiGuiFeiYongFenXi.setWeiPiPei(new ArrayList<>());
+        weiGuiFeiYongFenXi.setWeiXieDaiYuanLiuShui(new ArrayList<>());
+        weiGuiFeiYongFenXi.getWeiPiPei().addAll(dao.weiGuiYaoPin(inpatientNo, admissTimes, ledger, infantFlag));
+        weiGuiFeiYongFenXi.getWeiPiPei().addAll(dao.weiGuiXiangMu(inpatientNo, admissTimes, ledger, infantFlag));
+        weiGuiFeiYongFenXi.getWeiXieDaiYuanLiuShui().addAll(dao.weiXieDaiYuanLiuShui(inpatientNo, admissTimes, ledger, infantFlag));
+        return ResultVoUtil.success(weiGuiFeiYongFenXi);
     }
 }
 

+ 1 - 1
src/main/java/thyyxxk/webserver/service/zhuyuanyiji/QueRenYiZhuShouFeiServer.java

@@ -72,7 +72,7 @@ public class QueRenYiZhuShouFeiServer {
         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)";
+                    "where op_id = '" + TokenUtil.getTokenUserId() + "' and inpatient_no = a.inpatient_no and admiss_times = a.admiss_times and charge_status <> 3) desc";
         }
         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(),