xiaochan 3 лет назад
Родитель
Сommit
fb3f8ae5ed

+ 43 - 12
src/main/java/thyyxxk/webserver/dao/his/PublicDao.java

@@ -9,8 +9,8 @@ import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
 import thyyxxk.webserver.entity.login.UserInfo;
 import thyyxxk.webserver.entity.yibao.ZyActpatient;
 
+import java.math.BigDecimal;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 /**
@@ -111,6 +111,32 @@ public interface PublicDao {
             "bed_no,total_charge,balance from zy_actpatient a where inpatient_no = #{inpatientNo} ")
     ZyActpatient getHuanZheJiBenXinXi(@Param("inpatientNo") String inpatientNo);
 
+    @Update("update zy_detail_charge set ori_detail_sn = null where inpatient_no = #{inpatientNo} " +
+            "and admiss_times = #{admissTimes} and ledger_sn = #{ledgerSn} and ori_detail_sn = -1 and charge_amount > 0")
+    void chongZhiZhenLiuShui(@Param("inpatientNo") String inpatientNo,
+                             @Param("admissTimes") Integer admissTimes,
+                             @Param("ledgerSn") Integer ledgerSn);
+
+
+    @Select("select ori_detail_sn from zy_detail_charge where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn = #{ledgerSn} " +
+            "and ori_detail_sn is not null " +
+            "and  charge_amount < 0")
+    List<Integer> huoQuTuiFeiYuanLiuShui(@Param("inpatientNo") String inpatientNo,
+                                         @Param("admissTimes") Integer admissTimes,
+                                         @Param("ledgerSn") Integer ledgerSn);
+
+    @Update("<script>" +
+            "update zy_detail_charge set ori_detail_sn = -1 where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn = #{ledgerSn} " +
+            "and charge_amount &gt; 0 and detail_sn in " +
+            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item}" +
+            "</foreach>" +
+            "</script>")
+    void genXingFuLiuShui(@Param("inpatientNo") String inpatientNo,
+                          @Param("admissTimes") Integer admissTimes,
+                          @Param("ledgerSn") Integer ledgerSn,
+                          @Param("list") List<Integer> detailSnList);
+
     @Select("select ori_detail_sn,sum(charge_fee) charge_fee,sum(charge_amount) charge_amount " +
             "from zy_detail_charge a " +
             "where inpatient_no=#{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn = #{ledgerSn}  and order_no <> 6 and trans_flag_yb <> 2 " +
@@ -128,10 +154,10 @@ public interface PublicDao {
             "#{sn}" +
             "</foreach>" +
             "</script>")
-    List<ZyDetailCharge> zhenShuLiuShui(@Param("inpatientNo") String inpatientNo,
-                                        @Param("admissTimes") Integer admissTimes,
-                                        @Param("ledgerSn") Integer ledgerSn,
-                                        @Param("oriSn") Set<Integer> oriSn);
+    List<ZyDetailCharge> getZhenShuLiuShui(@Param("inpatientNo") String inpatientNo,
+                                           @Param("admissTimes") Integer admissTimes,
+                                           @Param("ledgerSn") Integer ledgerSn,
+                                           @Param("oriSn") Set<Integer> oriSn);
 
     @Update("<script>" +
             "<foreach collection='list' item='item' separator=';'>" +
@@ -144,22 +170,27 @@ public interface PublicDao {
                                @Param("ledgerSn") Integer ledgerSn,
                                @Param("list") List<Integer> oriDetailSn);
 
+    @Select("select isnull(sum(charge_fee),0)  from zy_detail_charge  " +
+            "where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn = #{ledger} and trans_flag_yb=2")
+    BigDecimal zhenFuXingDiFeiYong(@Param("inpatientNo") String inpatientNo,
+                                   @Param("admissTimes") Integer admissTimes,
+                                   @Param("ledger") Integer ledger);
+
+    @Update("update zy_detail_charge set trans_flag_yb = 0 where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn = #{ledger} and  trans_flag_yb = 2")
+    void chongXingZhengFuXiangDi(@Param("inpatientNo") String inpatientNo,
+                                 @Param("admissTimes") Integer admissTimes,
+                                 @Param("ledger") Integer ledger);
+
     @Select("select detail_sn from zy_detail_charge where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn =  #{ledgerSn}" +
             " and ori_detail_sn = -1 and charge_amount > 0")
     List<Integer> zhenShuLiuShui(@Param("inpatientNo") String inpatientNo,
                                  @Param("admissTimes") Integer admissTimes,
                                  @Param("ledgerSn") Integer ledgerSn);
 
-    @Select("select ori_detail_sn from zy_detail_charge where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn =  #{ledgerSn}" +
-            " and ori_detail_sn > 0 and charge_amount < 0 group by ori_detail_sn")
-    List<Integer> fuShuLiuShui(@Param("inpatientNo") String inpatientNo,
-                               @Param("admissTimes") Integer admissTimes,
-                               @Param("ledgerSn") Integer ledgerSn);
-
     @Update("<script>" +
             "update zy_detail_charge set ori_detail_sn = null where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn =  #{ledgerSn} " +
             "and detail_sn in " +
-            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "<foreach collection='detailSn' item='item' index='index' open='(' close=')' separator=','>" +
             "#{item}" +
             "</foreach>" +
             "</script>")

+ 1 - 11
src/main/java/thyyxxk/webserver/dao/his/yibao/XiangMuLuRuDao.java

@@ -942,17 +942,7 @@ public interface XiangMuLuRuDao extends BaseMapper<ZyDetailCharge> {
                                      @Param("ledger") Integer ledger,
                                      @Param("detailSn") Integer detailSn);
 
-    @Select("select isnull(sum(charge_fee),0)  from zy_detail_charge  " +
-            "where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn = #{ledger} and trans_flag_yb=2")
-    BigDecimal zhenFuXingDiFeiYong(@Param("inpatientNo") String inpatientNo,
-                                   @Param("admissTimes") Integer admissTimes,
-                                   @Param("ledger") Integer ledger);
-
-    @Update("update zy_detail_charge set trans_flag_yb = 0 where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn = #{ledger} and  trans_flag_yb = 2")
-    void chongXingZhengFuXiangDi(@Param("inpatientNo") String inpatientNo,
-                                 @Param("admissTimes") Integer admissTimes,
-                                 @Param("ledger") Integer ledger);
-
+ 
     @Select("select act_order_no as order_no,exec_unit from yz_erase_order where act_order_no in  " +
             "(select order_no from zy_detail_charge where  inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and ledger_sn = #{ledger}   " +
             "and exec_unit is null AND charge_fee < 0 and ori_detail_sn is null)")

+ 12 - 10
src/main/java/thyyxxk/webserver/service/PublicServer.java

@@ -1,6 +1,7 @@
 package thyyxxk.webserver.service;
 
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.ListUtils;
 import org.springframework.stereotype.Service;
 import thyyxxk.webserver.config.exception.BizException;
 import thyyxxk.webserver.config.exception.ExceptionEnum;
@@ -177,22 +178,19 @@ public class PublicServer {
      * @param ledger      账页号
      */
     public void genXingYuanLiuShuiBiaoZhi(String inpatientNo, Integer admissTimes, Integer ledger) {
-        List<Integer> zhenShuLiuShui = dao.zhenShuLiuShui(inpatientNo, admissTimes, ledger);
-        List<Integer> fuShuLiuShui = dao.fuShuLiuShui(inpatientNo, admissTimes, ledger);
-        List<Integer> genXingWeiKongDeLiuShui = new ArrayList<>();
-        for (Integer integer : zhenShuLiuShui) {
-            if (!fuShuLiuShui.contains(integer)) {
-                genXingWeiKongDeLiuShui.add(integer);
+        dao.chongZhiZhenLiuShui(inpatientNo, admissTimes, ledger);
+        List<Integer> huoQuTuiFeiYuanLiuShui = dao.huoQuTuiFeiYuanLiuShui(inpatientNo, admissTimes, ledger);
+        if (ListUtil.notBlank(huoQuTuiFeiYuanLiuShui)) {
+            List<List<Integer>> fenGeFuLiuShui = ListUtils.partition(huoQuTuiFeiYuanLiuShui, 100);
+            for (List<Integer> integers : fenGeFuLiuShui) {
+                dao.genXingFuLiuShui(inpatientNo, admissTimes, ledger, integers);
             }
         }
-        if (ListUtil.notBlank(genXingWeiKongDeLiuShui)) {
-            dao.genXingWeiKongLiuShui(inpatientNo, admissTimes, ledger, genXingWeiKongDeLiuShui);
-        }
         Map<Integer, ZyDetailCharge> chongFuLiuShuiMap = dao.chongFuLiuShui(inpatientNo, admissTimes, ledger).stream().collect(
                 Collectors.toMap(ZyDetailCharge::getOriDetailSn, a -> a, (k1, k2) -> k1)
         );
         if (!chongFuLiuShuiMap.isEmpty()) {
-            List<ZyDetailCharge> chongFuTuiFeiZhenShu = dao.zhenShuLiuShui(inpatientNo, admissTimes, ledger, chongFuLiuShuiMap.keySet());
+            List<ZyDetailCharge> chongFuTuiFeiZhenShu = dao.getZhenShuLiuShui(inpatientNo, admissTimes, ledger, chongFuLiuShuiMap.keySet());
             List<Integer> xuYaoChongZhiLiuShui = new ArrayList<>();
             if (ListUtil.notBlank(chongFuTuiFeiZhenShu)) {
                 for (ZyDetailCharge zyDetailCharge : chongFuTuiFeiZhenShu) {
@@ -205,6 +203,10 @@ public class PublicServer {
             if (ListUtil.notBlank(xuYaoChongZhiLiuShui)) {
                 dao.chongFuTuiFeiChongZhi(inpatientNo, admissTimes, ledger, xuYaoChongZhiLiuShui);
             }
+            // 这个是判断 trans_flag_yb = 2 费用相加 不为 0 的 就重置一下
+            if (!BigUtils.dengYu(dao.zhenFuXingDiFeiYong(inpatientNo, admissTimes, ledger), 0)) {
+                dao.chongXingZhengFuXiangDi(inpatientNo, admissTimes, ledger);
+            }
         }
     }
 

+ 0 - 4
src/main/java/thyyxxk/webserver/service/yibao/XiangMuLuRuService.java

@@ -610,10 +610,6 @@ public class XiangMuLuRuService {
         // 药品 分大包装和小包装 可能大包装 匹配了 小包装没有 匹配 所以这里编码同步 一下
         List<String> yaoPingBianMaTongBu = dao.weiGuiYaoPinInt(patient.getInpatientNo(), patient.getAdmissTimes(), patient.getLedgerSn(), patient.getInfantFlag());
 
-        // 这个是判断 trans_flag_yb = 2 费用相加 不为 0 的 就重置一下
-        if (!BigUtils.dengYu(dao.zhenFuXingDiFeiYong(patient.getInpatientNo(), patient.getAdmissTimes(), patient.getLedgerSn()), 0)) {
-            dao.chongXingZhengFuXiangDi(patient.getInpatientNo(), patient.getAdmissTimes(), patient.getLedgerSn());
-        }
         // 这里退药 医嘱 有可能会没有携带 执行科室
         List<ZyDetailCharge> huoQuYaoPingZhongKeShiWeiKongDe = dao.huoQuYaoPingZhongKeShiWeiKongDe(inpatientNo, patient.getAdmissTimes(), patient.getLedgerSn());
         if (!huoQuYaoPingZhongKeShiWeiKongDe.isEmpty()) {