瀏覽代碼

结算单中提取数据

DESKTOP-0GD05B0\Administrator 2 年之前
父節點
當前提交
fc897b36da

+ 164 - 1
src/main/java/thyyxxk/webserver/dao/his/medicalinsurance/UpIdCollectionDao.java

@@ -1,6 +1,7 @@
 package thyyxxk.webserver.dao.his.medicalinsurance;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import org.apache.ibatis.annotations.*;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
@@ -10,6 +11,7 @@ import thyyxxk.webserver.entity.medicalinsurance.inpatient.BatjBa4;
 import thyyxxk.webserver.entity.medicalinsurance.inpatient.YbZyDisDiag;
 import thyyxxk.webserver.entity.medicalinsurance.inpatient.ZyDisDiagYb;
 import thyyxxk.webserver.entity.medicalinsurance.inpatient.ZyInactpatient;
+import thyyxxk.webserver.entity.medicalinsurance.log.SiLog;
 import thyyxxk.webserver.entity.medicalinsurance.setllistupld.*;
 import thyyxxk.webserver.entity.querydata.SiSetlinfoTemp;
 import thyyxxk.webserver.entity.querydata.TAutoUploadBill;
@@ -28,7 +30,7 @@ import java.util.Set;
  * @date 2021-11-25 08:42
  */
 @Mapper
-public interface UpIdCollectionDao {
+public interface UpIdCollectionDao extends BaseMapper<SetlinfoUpld> {
 
     @Select("select count(1) from t_case_frontsheet_main where bah = #{patNo} " + "  and admiss_times = #{times}")
     Integer shiFouQianShou(@Param("patNo") String patNo, @Param("times") Integer times);
@@ -677,4 +679,165 @@ public interface UpIdCollectionDao {
     List<TAutoUploadBill> exportAutoUploadInfo(@Param("startTime") String startTime,
                                                @Param("endTime") String endTime);
 
+
+    @Select("select count(1)\n" +
+            "from t_si_setlinfo a,\n" +
+            "     t_si_log b\n" +
+            "where (b.infno = '4101' and a.pat_no = b.pat_no and a.times = b.times and a.ledger_sn = b.ledger_sn)")
+    Integer 获取已经上传的数据总数();
+
+    @Select("select top ${pageSize} *\n" +
+            "from (select row_number() over (order by create_datetime) row_index, create_datetime, body, result\n" +
+            "      from t_si_setlinfo a,\n" +
+            "           t_si_log b\n" +
+            "      where (b.infno = '4101' and a.pat_no = b.pat_no and a.times = b.times and a.ledger_sn = b.ledger_sn)) temp\n" +
+            "where row_index > (${currentPage} - 1) * ${pageSize}\n" +
+            "order by row_index")
+    List<SiLog> 获取上传的文件(int currentPage, int pageSize);
+
+    /**
+     * 是否有上传结算单信息
+     *
+     * @param setlId
+     * @return
+     */
+    @Select("select max(setl_id) from t_settlement_setlinfo where setl_id = #{setlId}")
+    Integer whetherThereIsUploadInfo(String setlId);
+
+    /**
+     * 根据setld 删除
+     *
+     * @param id
+     */
+    @Delete("delete t_settlement_diseinfo where setl_id = #{setlId};" +
+            "delete t_settlement_opspdiseinfo where setl_id = #{setlId};" +
+            "delete t_settlement_oprninfo where setl_id = #{setlId}; " +
+            "delete t_settlement_setlinfo where setl_id = #{setlId};" +
+            "delete t_settlement_icuinfo where setl_id = #{setlId};" +
+            "delete t_settlement_bldinfo where setl_id = #{setlId};" +
+            "delete t_settlement_payinfo where setl_id = #{setlId};" +
+            "delete t_settlement_iteminfo where setl_id = #{setlId};")
+    void deleteAccordingToSetlId(String id);
+
+    /**
+     * 插入结算单诊断信息
+     *
+     * @param setlId id
+     * @param list   诊断数据
+     */
+    @Insert("<script>" +
+            "insert into t_settlement_diseinfo " +
+            "(setl_id, subscript, diag_type, diag_code, diag_name, adm_cond_type, maindiag_flag) " +
+            "values " +
+            "<foreach collection='list' item='item' index='index' separator=','>" +
+            "(#{setlId}, ${index} + 1, #{item.diagType}, #{item.diagCode}, #{item.diagName}, #{item.admCondType}, " +
+            "#{item.maindiagFlag})" +
+            "</foreach>" +
+            "</script>")
+    void insertStatementDiagnosisInfo(String setlId, List<DiseinfoUpld> list);
+
+
+    /**
+     * 插入结算单基金支付信息
+     *
+     * @param setlId id
+     * @param list   基金支付信息
+     */
+    @Insert("<script>" +
+            "insert into t_settlement_payinfo (setl_id, subscript, fund_pay_type, fund_payamt) " +
+            " values " +
+            "<foreach collection='list' item='item' index='index' separator=','>" +
+            " (#{setlId},${index} + 1,#{item.fundPayType},#{item.fundPayamt}) " +
+            "</foreach>" +
+            "</script>")
+    void insertFundPaymentInfoOfStatement(String setlId, List<PayinfoUpld> list);
+
+
+    /**
+     * 插入收费项目信息
+     *
+     * @param setlId id
+     * @param list   收费项目
+     */
+    @Insert("<script>" +
+            "insert into t_settlement_iteminfo (setl_id, subscript, med_chrgitm, amt, claa_sumfee, clab_amt, fulamt_ownpay_amt," +
+            " oth_amt)" +
+            "values " +
+            "<foreach collection='list' item='item' index='index' separator=','>" +
+            "(#{setlId},${index} + 1,#{item.medChrgitm},#{item.amt},#{item.claaSumfee},#{item.clabAmt},#{item.fulamtOwnpayAmt}," +
+            "#{item.othAmt})" +
+            "</foreach>" +
+            "</script>")
+    void insertChargingItemInfo(String setlId, List<IteminfoUpld> list);
+
+    /**
+     * 插入门诊慢特病
+     *
+     * @param setlId id
+     * @param list   数据
+     */
+    @Insert("<script>" +
+            "insert into t_settlement_opspdiseinfo (setl_id, subscript, diag_name, diag_code, oprn_oprt_name, oprn_oprt_code," +
+            "maindiag_flag) " +
+            " values " +
+            "<foreach collection='list' item='item' index='index' separator=','>" +
+            "(#{setlId}, ${index} + 1, #{item.diagName}, #{item.diagCode}, #{item.oprnOprtName}, #{item.oprnOprtCode}," +
+            "#{item.maindiagFlag})" +
+            "</foreach>" +
+            "</script>")
+    void insertionOfOutpatientChronicDiseases(String setlId, List<OpspdiseinfoUpld> list);
+
+    /**
+     * 插入手术操作信息
+     *
+     * @param setlId id
+     * @param list   数据
+     */
+    @Insert("<script>" +
+            "insert into t_settlement_oprninfo(setl_id, subscript, oprn_oprt_type, oprn_oprt_name, oprn_oprt_code," +
+            "oprn_oprt_date, " +
+            "anst_way, oper_dr_name, oper_dr_code, anst_dr_name, anst_dr_code, oprn_oprt_begntime,\n" +
+            "oprn_oprt_endtime, anst_begntime, anst_endtime)\n" +
+            "values " +
+            "<foreach collection='list' item='item' index='index' separator=','>" +
+            "(#{setlId},${index} + 1,#{item.oprnOprtType},#{item.oprnOprtName},#{item.oprnOprtCode}," +
+            "#{item.oprnOprtDate},#{item.anstWay},#{item.operDrName},#{item.operDrCode},#{item.anstDrName},#{item.anstDrCode}," +
+            "#{item.oprnOprtBegntime},#{item.oprnOprtEndtime},#{item.anstBegntime},#{item.anstEndtime})" +
+            "</foreach>" +
+            "</script>")
+    void insertSurgicalOperationInfo(String setlId, List<OprninfoUpld> list);
+
+    /**
+     * 插入重症监护信息
+     *
+     * @param setlId id
+     * @param list   数据
+     */
+    @Insert("<script>" +
+            "insert into t_settlement_icuinfo (setl_id, subscript, scs_cutd_ward_type, scs_cutd_inpool_time, " +
+            "scs_cutd_exit_time,scs_cutd_sum_dura) " +
+            "values " +
+            "<foreach collection='list' item='item' index='index' separator=','>" +
+            "(#{setlId},${index} + 1,#{item.scsCutdWardType},#{item.scsCutdInpoolTime}," +
+            "#{item.scsCutdExitTime},#{item.scsCutdSumDura})" +
+            "</foreach>" +
+            "</script>")
+    void insertIntensiveCareInfor(String setlId, List<IcuinfoUpld> list);
+
+    /**
+     * 插入 输血信息
+     *
+     * @param setlId id
+     * @param list   数据
+     */
+    @Insert("<script>" +
+            "insert into t_settlement_bldinfo (setl_id, subscript, bld_cat, bld_amt, bld_unt) " +
+            " values " +
+            "<foreach collection='list' item='item' index='index' separator=','>" +
+            " (#{setlId},${index} + 1,#{item.bldCat},#{item.bldAmt},#{item.bldUnt})" +
+            "</foreach>" +
+            "</script>")
+    void insertTransfusionInfo(String setlId, List<Bldinfo> list);
+
+
 }

+ 6 - 1
src/main/java/thyyxxk/webserver/entity/medicalinsurance/setllistupld/SetlinfoUpld.java

@@ -1,6 +1,8 @@
 package thyyxxk.webserver.entity.medicalinsurance.setllistupld;
 
 import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -14,6 +16,7 @@ import java.util.Date;
  * @author Administrator
  */
 @Data
+@TableName(value = "t_settlement_setlinfo")
 public class SetlinfoUpld implements Serializable {
     private static final long serialVersionUID = 2704605758808060437L;
     /**
@@ -297,7 +300,7 @@ public class SetlinfoUpld implements Serializable {
     /**
      * 主诊断标志
      */
-    @JSONField(name = "maindiag_flag")
+    @TableField(exist = false)
     private String maindiagFlag;
 
     /**
@@ -478,6 +481,8 @@ public class SetlinfoUpld implements Serializable {
      */
     @JSONField(name = "resp_nurs_code")
     private String respNursCode;
+
+    @TableField(exist = false)
     private String respNursName;
     /**
      * 状态分类

+ 53 - 0
src/main/java/thyyxxk/webserver/service/medicalinsurance/SetlListUpldService.java

@@ -168,6 +168,11 @@ public class SetlListUpldService {
         }
         if (infcode == 0) {
             dao.fanHuiLiuShuiHao(result.getJSONObject(OUTPUT).getString("setl_list_id"), upldCollection.getData().getSetlinfo().getSetlId());
+            try {
+                settlementDocDataReceipt(upldCollection.getData());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
             return ResultVoUtil.success(ExceptionEnum.SUCCESS, "上传成功");
         }
         String errMsg = result.getString("err_msg");
@@ -177,6 +182,54 @@ public class SetlListUpldService {
         return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("医保中心报错的:【%s】 ", errMsg));
     }
 
+
+    public void settlementDocDataReceipt(UpldCollection param) {
+        SetlinfoUpld setlinfo = param.getSetlinfo();
+        String setlId = setlinfo.getSetlId();
+        Integer id = dao.whetherThereIsUploadInfo(setlinfo.getSetlId());
+        if (id != null) {
+            dao.deleteAccordingToSetlId(setlinfo.getSetlId());
+        }
+        // 结算清单信息
+        dao.insert(setlinfo);
+        // 基金支付信息
+        List<PayinfoUpld> payinfo = param.getPayinfo();
+        if (ListUtil.notBlank(payinfo)) {
+            dao.insertFundPaymentInfoOfStatement(setlId, payinfo);
+        }
+        //插入收费项目信息
+        List<IteminfoUpld> iteminfo = param.getIteminfo();
+        if (ListUtil.notBlank(iteminfo)) {
+            dao.insertChargingItemInfo(setlId, iteminfo);
+        }
+        // 插入门诊慢特病信息
+        List<OpspdiseinfoUpld> opspdiseinfo = param.getOpspdiseinfo();
+        if (ListUtil.notBlank(opspdiseinfo)) {
+            dao.insertionOfOutpatientChronicDiseases(setlId, opspdiseinfo);
+        }
+        // 获取患者诊断
+        List<DiseinfoUpld> diseinfo = param.getDiseinfo();
+        if (ListUtil.notBlank(diseinfo)) {
+            dao.insertStatementDiagnosisInfo(setlId, diseinfo);
+        }
+        // 手术操作信息
+        List<OprninfoUpld> oprninfo = param.getOprninfo();
+        if (ListUtil.notBlank(oprninfo)) {
+            dao.insertSurgicalOperationInfo(setlId, oprninfo);
+        }
+        // 重症监护信息
+        List<IcuinfoUpld> icuinfo = param.getIcuinfo();
+        if (ListUtil.notBlank(icuinfo)) {
+            dao.insertIntensiveCareInfor(setlId, icuinfo);
+        }
+        // 输血信息
+        List<Bldinfo> bldinfo = param.getBldinfo();
+        if (ListUtil.notBlank(bldinfo)) {
+            dao.insertTransfusionInfo(setlId, bldinfo);
+        }
+    }
+
+
     /**
      * 获取上传到医保的信息
      *

+ 10 - 8
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/YiZhuLuRuServer.java

@@ -4,7 +4,13 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import thyyxxk.webserver.config.exception.BizException;
@@ -26,6 +32,8 @@ import thyyxxk.webserver.service.redislike.RedisLikeService;
 import thyyxxk.webserver.utils.*;
 import thyyxxk.webserver.websocket.WebSocketServer;
 
+import java.io.File;
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -491,9 +499,7 @@ public class YiZhuLuRuServer {
 
         dao.chaRuMuBan(param);
 
-        Map<String, XinZhenYzActOrder> map = param.getList().stream().collect(
-                Collectors.toMap(XinZhenYzActOrder::getId, a -> a, (k1, k2) -> k1)
-        );
+        Map<String, XinZhenYzActOrder> map = param.getList().stream().collect(Collectors.toMap(XinZhenYzActOrder::getId, a -> a, (k1, k2) -> k1));
 
         for (XinZhenYzActOrder item : param.getList()) {
             // 设置模板号
@@ -538,11 +544,7 @@ public class YiZhuLuRuServer {
 
     }
 
-    private Map<String, Object> checkData(XinZhenYzActOrder item,
-                                          Map<String, XinZhenYzActOrder> drug,
-                                          Map<String, List<XinZhenYzActOrder>> project,
-                                          XinZhenYiZhu huanZheXinXi,
-                                          Integer 医生级别) {
+    private Map<String, Object> checkData(XinZhenYzActOrder item, Map<String, XinZhenYzActOrder> drug, Map<String, List<XinZhenYzActOrder>> project, XinZhenYiZhu huanZheXinXi, Integer 医生级别) {
         Boolean 严格校验 = huanZheXinXi != null;
         List<String> 错误信息 = new ArrayList<>();
         List<String> 警告信息 = new ArrayList<>();

+ 99 - 0
src/main/java/thyyxxk/webserver/xcTest/Test.java

@@ -0,0 +1,99 @@
+package thyyxxk.webserver.xcTest;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import thyyxxk.webserver.dao.his.medicalinsurance.UpIdCollectionDao;
+import thyyxxk.webserver.entity.medicalinsurance.log.SiLog;
+import thyyxxk.webserver.entity.medicalinsurance.setllistupld.*;
+import thyyxxk.webserver.utils.ListUtil;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+
+@Component
+@Slf4j
+@DS("his")
+public class Test {
+
+    private final UpIdCollectionDao dao;
+
+    public Test(UpIdCollectionDao dao) {
+        this.dao = dao;
+    }
+
+//    @PostConstruct
+    public void test() {
+        Integer 日志文件数量 = dao.获取已经上传的数据总数();
+        Integer a = (日志文件数量 + 500 - 1) / 500;
+
+        for (Integer i = 1; i < a + 1; i++) {
+            List<SiLog> list = dao.获取上传的文件(i, 500);
+            extracted(list);
+        }
+
+        System.out.println(a);
+    }
+
+    private void extracted(List<SiLog> list) {
+        for (SiLog siLog : list) {
+            JSONObject result = JSONObject.parseObject(siLog.getResult());
+            if ("0".equals(result.getString("infcode"))) {
+                JSONObject body = JSONObject.parseObject(siLog.getBody());
+                JSONObject input = body.getJSONObject("input");
+                // 患者信息
+                SetlinfoUpld setlinfo = JSONObject.parseObject(input.getString("setlinfo"), SetlinfoUpld.class);
+                String setlId = setlinfo.getSetlId();
+                if (setlId == null) {
+                    log.info("没有id:{},数据:{}", setlId, JSON.toJSONString(setlinfo));
+                    continue;
+                }
+                Integer id = dao.whetherThereIsUploadInfo(setlinfo.getSetlId());
+                if (id != null) {
+                    dao.deleteAccordingToSetlId(setlinfo.getSetlId());
+                }
+                // 结算清单信息
+                dao.insert(setlinfo);
+                // 基金支付信息
+                List<PayinfoUpld> payinfo = JSONObject.parseArray(input.getString("payinfo"), PayinfoUpld.class);
+                if (ListUtil.notBlank(payinfo)) {
+                    dao.insertFundPaymentInfoOfStatement(setlId, payinfo);
+                }
+                //插入收费项目信息
+                List<IteminfoUpld> iteminfo = JSONObject.parseArray(input.getString("iteminfo"), IteminfoUpld.class);
+                if (ListUtil.notBlank(iteminfo)) {
+                    dao.insertChargingItemInfo(setlId, iteminfo);
+                }
+                // 插入门诊慢特病信息
+                List<OpspdiseinfoUpld> opspdiseinfo = JSONObject.parseArray(input.getString("opspdiseinfo"), OpspdiseinfoUpld.class);
+                if (ListUtil.notBlank(opspdiseinfo)) {
+                    dao.insertionOfOutpatientChronicDiseases(setlId, opspdiseinfo);
+                }
+                // 获取患者诊断
+                List<DiseinfoUpld> diseinfo = JSONObject.parseArray(input.getString("diseinfo"), DiseinfoUpld.class);
+                if (ListUtil.notBlank(diseinfo)) {
+                    dao.insertStatementDiagnosisInfo(setlId, diseinfo);
+                }
+                // 手术操作信息
+                List<OprninfoUpld> oprninfo = JSONObject.parseArray(input.getString("oprninfo"), OprninfoUpld.class);
+                if (ListUtil.notBlank(oprninfo)) {
+                    dao.insertSurgicalOperationInfo(setlId, oprninfo);
+                }
+                // 重症监护信息
+                List<IcuinfoUpld> icuinfo = JSONObject.parseArray(input.getString("icuinfo"), IcuinfoUpld.class);
+                if (ListUtil.notBlank(icuinfo)) {
+                    dao.insertIntensiveCareInfor(setlId, icuinfo);
+                }
+                // 输血信息
+                List<Bldinfo> bldinfo = JSONObject.parseArray(input.getString("bldinfo"), Bldinfo.class);
+                if (ListUtil.notBlank(bldinfo)) {
+                    dao.insertTransfusionInfo(setlId, bldinfo);
+                }
+            }
+        }
+    }
+
+
+}

+ 0 - 37
src/main/test/thyyxxk/webserver/WebServerApplicationTest.java

@@ -1,37 +0,0 @@
-package thyyxxk.webserver;
-
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.annotation.TableField;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-import thyyxxk.webserver.dao.his.PublicDao;
-import thyyxxk.webserver.service.test.TestServer;
-
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = WebServerApplication.class)
-@Slf4j
-public class WebServerApplicationTest {
-
-    @Autowired
-    private TestServer server;
-
-    @Autowired
-    private PublicDao publicDao;
-
-
-    @Test
-    public void test() {
-        server.更新过敏源的拼音和五笔();
-    }
-
-    @Test
-    public void 测试修改变量() {
-
-    }
-
-}