Parcourir la source

医嘱确费 5 确认 7 取消

xiaochan il y a 3 ans
Parent
commit
46cdc51659

+ 1 - 1
pom.xml

@@ -10,7 +10,7 @@
     </parent>
     <groupId>thyyxxk</groupId>
     <artifactId>web-server</artifactId>
-    <version>10.1.4</version>
+    <version>10.1.5</version>
     <name>web-server</name>
     <description>server for yibao-web</description>
     <properties>

+ 11 - 1
src/main/java/thyyxxk/webserver/controller/querydata/KeShiShouRuController.java

@@ -1,13 +1,17 @@
 package thyyxxk.webserver.controller.querydata;
 
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.querydata.KeShiFeiiYongTongJi;
 import thyyxxk.webserver.entity.querydata.QueryDrugsAndProjects;
 import thyyxxk.webserver.service.querydata.KeShiShouRuServer;
 
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * <p>
  * 描述: 各个科室收入的情况
@@ -27,9 +31,15 @@ public class KeShiShouRuController {
     }
 
     @PostMapping("/getKeShouFei")
-    public ResultVo<QueryDrugsAndProjects> getKeShouFei(@RequestBody QueryDrugsAndProjects param) {
+    public ResultVo<KeShiFeiiYongTongJi> getKeShouFei(@RequestBody QueryDrugsAndProjects param) {
         return service.getKeShouFei(param);
     }
 
+    @PostMapping("/exportExcel")
+    public void exportExcel(HttpServletResponse response,
+                            @RequestBody @Validated QueryDrugsAndProjects param) {
+        service.exportExcel(response, param);
+    }
+
 
 }

+ 13 - 0
src/main/java/thyyxxk/webserver/dao/his/PublicDao.java

@@ -53,6 +53,19 @@ public interface PublicDao {
     @Select("select code from zd_unit_code where (parent_code = #{deptCode} or code = #{deptCode}) and isnull(del_flag,0) = 0")
     List<String> getKeShiLieBiao(String deptCode);
 
+    @Select("<script>" +
+            "select code from zd_unit_code where (parent_code in " +
+            "<foreach collection='deptCodeList' item='item' index='index' open='(' close=')' separator=','>" +
+            " #{item,jdbcType = CHAR}" +
+            "</foreach> " +
+            "or code in " +
+            "<foreach collection='deptCodeList' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item,jdbcType = CHAR}" +
+            "</foreach>" +
+            ") and isnull(del_flag,0) = 0" +
+            "</script>")
+    List<String> getKeShiLieBiaoList(@Param("deptCodeList") List<String> deptCodeList);
+
     /**
      * 获取人员信息
      *

+ 361 - 41
src/main/java/thyyxxk/webserver/dao/his/querydata/KeShiShouRuDao.java

@@ -1,10 +1,13 @@
 package thyyxxk.webserver.dao.his.querydata;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
-import thyyxxk.webserver.entity.querydata.QueryDrugsAndProjects;
+import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
+import thyyxxk.webserver.entity.querydata.KeShiFeiiYongTongJi;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -16,75 +19,392 @@ import java.util.List;
  */
 public interface KeShiShouRuDao {
 
+    /**
+     * 查询住院患者的费用
+     *
+     * @param currentPage  当前页
+     * @param pageSize     页大小
+     * @param execUnit     执行科室 (大科室要看到子科室的时间)
+     * @param startTime    开始时间
+     * @param endTime      结束时间
+     * @param chargeCodeMx 项目编码
+     * @param code         人员的 编码
+     * @param codeRs       坑爹的老系统 还会保存不同的 rs
+     * @param reqDept      申请科室
+     * @return 返回信息
+     */
+    @Select({"<script>" +
+            "select top ${pageSize} * from (select ROW_NUMBER() over (ORDER BY charge_date ) as RowNumber," +
+            "rtrim(inpatient_no) patient,admiss_times times,rtrim(charge_code_mx) charge_code_mx,charge_date," +
+            "rtrim(op_id_code)op_id_code,rtrim(exec_unit)exec_unit," +
+            "rtrim(ward_code)ward_code,convert(decimal(18,2),charge_fee) charge_fee,convert(decimal(18,2),charge_amount) charge_amount,source = '住院' " +
+            "from zy_detail_charge a " +
+            "where " +
+            " charge_date &gt;= #{startTime,jdbcType=TIMESTAMP} and charge_date &lt;= #{endTime,jdbcType=TIMESTAMP} and trans_flag_yb &lt;&gt; 2 " +
+            "<when test='list != null and list.size > 0 '>" +
+            "  and  a.exec_unit in " +
+            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item,jdbcType=CHAR}" +
+            "</foreach>" +
+            "</when>" +
+            "<when test=\"chargeCodeMx != null and chargeCodeMx != '' \">" +
+            "  and a.charge_code_mx = #{chargeCodeMx,jdbcType=CHAR}" +
+            "</when>" +
+            "<when test=\"code != null and code != '' \">" +
+            " and a.op_id_code in (#{code,jdbcType=CHAR},#{codeRs,jdbcType = CHAR})  " +
+            "</when>" +
+            "<when test=\"reqDept != null and reqDept != '' \">" +
+            " and a.ward_code = #{reqDept,jdbcType=CHAR} " +
+            "</when>" +
+            ") temp where RowNumber > ${pageSize} * (${currentPage} - 1) order by RowNumber " +
+            "</script>"})
+    List<KeShiFeiiYongTongJi> getKeShiFeiYongZhuYuan(@Param("currentPage") long currentPage,
+                                                     @Param("pageSize") long pageSize,
+                                                     @Param("list") List<String> execUnit,
+                                                     @Param("startTime") String startTime,
+                                                     @Param("endTime") String endTime,
+                                                     @Param("chargeCodeMx") String chargeCodeMx,
+                                                     @Param("code") String code,
+                                                     @Param("codeRs") String codeRs,
+                                                     @Param("reqDept") String reqDept);
 
+    /**
+     * 查询住院患者的费用 的总条数
+     *
+     * @param execUnit     执行科室 (大科室要看到子科室的时间)
+     * @param startTime    开始时间
+     * @param endTime      结束时间
+     * @param chargeCodeMx 项目编码
+     * @param code         人员的 编码
+     * @param codeRs       坑爹的老系统 还会保存不同的 rs
+     * @param reqDept      申请科室
+     * @return 返回 条数和金额
+     */
     @Select("<script>" +
-            "select top ${pageSize} * from (select ROW_NUMBER() over (ORDER BY charge_date desc ) as RowNumber,rtrim(a.inpatient_no) patient," +
-            "a.admiss_times times," +
-            "rtrim(c.name) patient_name,a.charge_date, " +
-            "xm_name = (case when a.charge_code like '%BILL%' then (select top(1) name from yp_zd_dict where yp_zd_dict.code = a.charge_code_mx)   " +
-            "else (select top(1) name from zd_charge_item where zd_charge_item.code = a.charge_code_mx) end ),   " +
-            "a.charge_code_mx charge_code_mx,rtrim(b.name) op_name, req_name = (select rtrim(name) from zd_unit_code where zd_unit_code.code = a.ward_code),   " +
-            "exec_unit = (select name from zd_unit_code where zd_unit_code.code = a.exec_unit),   " +
-            "    a.charge_fee amountOfMoney,a.charge_amount number,source = '住院'   " +
-            "from zy_detail_charge a,a_employee_mi b,a_patient_mi c   " +
+            "select count(1) total,sum(a.charge_fee) charge_fee " +
+            "from zy_detail_charge a  " +
             "where " +
-            "  (a.op_id_code = b.code)   " +
-            "  and a.inpatient_no = c.inpatient_no " +
+            "charge_date &gt;= #{startTime,jdbcType=TIMESTAMP} and charge_date &lt;= #{endTime,jdbcType=TIMESTAMP} and trans_flag_yb &lt;&gt; 2 " +
             "<if test=\"list != null and list.size > 0 \">" +
             "  and  a.exec_unit in " +
             "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
-            "#{item}" +
+            "#{item,jdbcType = CHAR}" +
             "</foreach>" +
             "</if>" +
-            "  and charge_date &gt;= #{startTime} and charge_date &lt;= #{endTime} " +
             "<if test=\"chargeCodeMx != null and chargeCodeMx != '' \">" +
-            "  and a.charge_code_mx = #{chargeCodeMx}" +
+            "  and a.charge_code_mx = #{chargeCodeMx,jdbcType = CHAR}" +
             "</if>" +
-            "<if test=\"opId != null and opId != '' \">" +
-            " and a.op_id_code = #{opId}" +
+            "<if test=\"code != null and code != '' \">" +
+            " and a.op_id_code in (#{code,jdbcType = CHAR},#{codeRs,jdbcType = CHAR}) " +
             "</if>" +
             "<if test=\"reqDept != null and reqDept != '' \">" +
-            " and a.ward_code = #{reqDept} " +
+            " and a.ward_code = #{reqDept,jdbcType = CHAR} " +
             "</if>" +
-            ") temp where RowNumber > ${pageSize} * (${currentPage} - 1) order by RowNumber desc" +
             "</script>")
-    List<QueryDrugsAndProjects> getKeShiFeiYongZhuYuan(@Param("currentPage") long currentPage,
-                                                       @Param("pageSize") long pageSize,
-                                                       @Param("list") List<String> execUnit,
-                                                       @Param("startTime") String startTime,
-                                                       @Param("endTime") String endTime,
-                                                       @Param("chargeCodeMx") String chargeCodeMx,
-                                                       @Param("opId") String opId,
-                                                       @Param("reqDept") String reqDept);
-
+    KeShiFeiiYongTongJi getKeShiFeiYongZhuYuanTotal(@Param("list") List<String> execUnit,
+                                                    @Param("startTime") String startTime,
+                                                    @Param("endTime") String endTime,
+                                                    @Param("chargeCodeMx") String chargeCodeMx,
+                                                    @Param("code") String code,
+                                                    @Param("codeRs") String codeRs,
+                                                    @Param("reqDept") String reqDept);
 
+    /**
+     * 根据分类来查询
+     *
+     * @param page         分页
+     * @param execUnit     执行科室
+     * @param startTime    开始时间
+     * @param endTime      结束时间
+     * @param chargeCodeMx 项目编码
+     * @param code         人员编码
+     * @param codeRs       人事的人员编码
+     * @param reqDept      申请科室
+     * @param fenLei       分类的类型
+     * @return 返回分页数据
+     */
     @Select("<script>" +
-            "select count(1) total,sum(a.charge_fee) amountOfMoney " +
-            "from zy_detail_charge a   " +
+            "select " +
+            "${fenLei}," +
+            "sum(charge_fee) charge_fee,sum(charge_amount) charge_amount,count(1) total,source = '住院' " +
+            "from zy_detail_charge a  " +
             "where " +
-            "charge_date &gt;= #{startTime} and charge_date &lt;= #{endTime} " +
+            "charge_date &gt;= #{startTime,jdbcType=TIMESTAMP} and charge_date &lt;= #{endTime,jdbcType=TIMESTAMP} and trans_flag_yb &lt;&gt; 2 " +
             "<if test=\"list != null and list.size > 0 \">" +
             "  and  a.exec_unit in " +
             "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item,jdbcType = CHAR}" +
+            "</foreach>" +
+            "</if>" +
+            "<if test=\"chargeCodeMx != null and chargeCodeMx != '' \">" +
+            "  and a.charge_code_mx = #{chargeCodeMx,jdbcType = CHAR}" +
+            "</if>" +
+            "<if test=\"code != null and code != '' \">" +
+            " and a.op_id_code in (#{code,jdbcType = CHAR},#{codeRs,jdbcType = CHAR}) " +
+            "</if>" +
+            "<if test=\"reqDept != null and reqDept != '' \">" +
+            " and a.ward_code = #{reqDept,jdbcType = CHAR} " +
+            "</if>" +
+            "group by " +
+            "<choose>" +
+            "<when test=\"fenLei == 'CONVERT(varchar(100), charge_date, 23) charge_date_string' \">" +
+            "CONVERT(varchar(100), charge_date, 23)" +
+            "</when>" +
+            "<otherwise>" +
+            "${fenLei}" +
+            "</otherwise>" +
+            "</choose>" +
+            "</script>")
+    List<KeShiFeiiYongTongJi> getZhuYuanFeiYongXiangMuFenLei(IPage<KeShiFeiiYongTongJi> page,
+                                                             @Param("list") List<String> execUnit,
+                                                             @Param("startTime") String startTime,
+                                                             @Param("endTime") String endTime,
+                                                             @Param("chargeCodeMx") String chargeCodeMx,
+                                                             @Param("code") String code,
+                                                             @Param("codeRs") String codeRs,
+                                                             @Param("reqDept") String reqDept,
+                                                             @Param("fenLei") String fenLei);
+
+
+    /**
+     * 这个是获取门诊费用的
+     *
+     * @param currentPage  当前页
+     * @param pageSize     页大小
+     * @param execUnitList 执行科室的list1
+     * @param startTime    开始时间
+     * @param endTime      结束时间
+     * @param chargeCodeMx 项目编码
+     * @param code         人员 编码
+     * @param codeRs       人事的人员编码
+     * @param reqDept      申请科室
+     * @return 返回信息
+     */
+    @Select("<script>" +
+            "select top ${pageSize} * from (select ROW_NUMBER() over (ORDER BY charge_date ) as RowNumber, rtrim(patient_id) patient," +
+            "times,rtrim(name) patient_name,\n" +
+            "rtrim(charge_item_code) charge_code_mx,charge_date,confirm_id op_id_code,rtrim(exec_dept) exec_unit,rtrim(warn_dept) ward_code,\n" +
+            "cast ((quantity*drug_win) as decimal(14,2)) charge_amount,\n" +
+            "cast ((quantity*drug_win*unit_price) as decimal(14,2)) charge_fee,source = '门诊'\n" +
+            "from mz_charge_detail where  bill_item_code NOT IN ('TC','020') and\n" +
+            "charge_date &gt;= #{startTime,jdbcType = TIMESTAMP} and charge_date &lt;= #{endTime,jdbcType = TIMESTAMP}" +
+            "<if test=\"list != null and list.size > 0 \">" +
+            " and exec_dept in " +
+            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item,jdbcType = CHAR}" +
+            "</foreach>" +
+            "</if>" +
+            "<if test=\"chargeCodeMx != null and chargeCodeMx != '' \">" +
+            " and charge_item_code  = #{chargeCodeMx,jdbcType = CHAR} " +
+            "</if>" +
+            "<if test=\"code != null and code != '' \">" +
+            " and confirm_id in (#{code,jdbcType = CHAR},#{codeRs,jdbcType = CHAR}) " +
+            "</if>" +
+            "<if test=\"reqDept != null and reqDept != '' \">" +
+            " and warn_dept = #{reqDept,jdbcType = CHAR}" +
+            "</if>" +
+            ") temp where\n" +
+            "RowNumber > ${pageSize} * (${currentPage} - 1) order by RowNumber " +
+            "</script>")
+    List<KeShiFeiiYongTongJi> getMenZhenFeiYong(@Param("currentPage") long currentPage,
+                                                @Param("pageSize") long pageSize,
+                                                @Param("list") List<String> execUnitList,
+                                                @Param("startTime") String startTime,
+                                                @Param("endTime") String endTime,
+                                                @Param("chargeCodeMx") String chargeCodeMx,
+                                                @Param("code") String code,
+                                                @Param("codeRs") String codeRs,
+                                                @Param("reqDept") String reqDept);
+
+    /**
+     * 获取门诊 费用的总条数
+     *
+     * @param execUnitList 执行科室
+     * @param startTime    开始时间
+     * @param endTime      结束时间
+     * @param chargeCodeMx 项目编码
+     * @param code         人员编码
+     * @param codeRs       人事的人员编码
+     * @param reqDept      申请科室
+     * @return 返回条数 和 总金额
+     */
+    @Select("<script>" +
+            "select count(*) total, sum (cast ((quantity*drug_win*unit_price) as decimal(14,2))) charge_fee  " +
+            "from mz_charge_detail where  bill_item_code NOT IN ('TC','020') and\n" +
+            "charge_date &gt;= #{startTime,jdbcType = TIMESTAMP} and charge_date &lt;= #{endTime,jdbcType = TIMESTAMP}" +
+            "<if test=\"execUnitList != null and execUnitList.size > 0 \">" +
+            " and exec_dept in " +
+            "<foreach collection='execUnitList' item='item' index='index' open='(' close=')' separator=','>" +
             "#{item}" +
             "</foreach>" +
             "</if>" +
             "<if test=\"chargeCodeMx != null and chargeCodeMx != '' \">" +
-            "  and a.charge_code_mx = #{chargeCodeMx}" +
+            " and charge_item_code  = #{chargeCodeMx,jdbcType = CHAR} " +
             "</if>" +
-            "<if test=\"opId != null and opId != '' \">" +
-            " and a.op_id_code = #{opId}" +
+            "<if test=\"code != null and code != '' \">" +
+            " and confirm_id in (#{code,jdbcType = CHAR},#{codeRs,jdbcType = CHAR}) " +
             "</if>" +
             "<if test=\"reqDept != null and reqDept != '' \">" +
-            " and a.ward_code = #{reqDept} " +
+            " and warn_dept = #{reqDept,jdbcType = CHAR}" +
             "</if>" +
             "</script>")
-    QueryDrugsAndProjects getKeShiFeiYongZhuYuanTotal(@Param("list") List<String> execUnit,
-                                                      @Param("startTime") String startTime,
-                                                      @Param("endTime") String endTime,
-                                                      @Param("chargeCodeMx") String chargeCodeMx,
-                                                      @Param("opId") String opId,
-                                                      @Param("reqDept") String reqDept);
+    KeShiFeiiYongTongJi getMenZhenFeiYongTotal(@Param("execUnitList") List<String> execUnitList,
+                                               @Param("startTime") String startTime,
+                                               @Param("endTime") String endTime,
+                                               @Param("chargeCodeMx") String chargeCodeMx,
+                                               @Param("code") String code,
+                                               @Param("codeRs") String codeRs,
+                                               @Param("reqDept") String reqDept);
+
+    /**
+     * 门诊的项目分类
+     *
+     * @param page         分页
+     * @param execUnitList 执行科室
+     * @param startTime    开始时间
+     * @param endTime      结束时间
+     * @param chargeCodeMx 项目编码
+     * @param code         人员编码
+     * @param codeRs       人事的人员编码
+     * @param reqDept      申请科室
+     * @param fenLei       分类
+     * @return 返回分类信息
+     */
+    @Select("<script>" +
+            "select " +
+            "<choose>" +
+            "<when test=\"fenLei == 'charge_item_code' \">" +
+            "charge_item_code charge_code_mx," +
+            "</when>" +
+            "<when test=\"fenLei == 'confirm_id' \">" +
+            "confirm_id op_id_code," +
+            "</when>" +
+            "<otherwise>" +
+            "CONVERT(varchar(100), charge_date, 23) charge_date_string ," +
+            "</otherwise>" +
+            "</choose>" +
+            "sum(cast ((quantity*drug_win*unit_price) as decimal(14,2))) charge_fee,\n" +
+            "sum(cast ((quantity*drug_win) as decimal(14,2))) charge_amount,source= '门诊' " +
+            "from mz_charge_detail where  bill_item_code NOT IN ('TC','020') and\n" +
+            "charge_date &gt;= #{startTime,jdbcType = TIMESTAMP} and charge_date &lt;= #{endTime,jdbcType = TIMESTAMP}" +
+            "<if test=\"execUnitList != null and execUnitList.size > 0 \">" +
+            " and exec_dept in " +
+            "<foreach collection='execUnitList' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item}" +
+            "</foreach>" +
+            "</if>" +
+            "<if test=\"chargeCodeMx != null and chargeCodeMx != '' \">" +
+            " and charge_item_code  = #{chargeCodeMx,jdbcType = CHAR} " +
+            "</if>" +
+            "<if test=\"code != null and code != '' \">" +
+            " and confirm_id in (#{code,jdbcType = CHAR},#{codeRs,jdbcType = CHAR}) " +
+            "</if>" +
+            "<if test=\"reqDept != null and reqDept != '' \">" +
+            " and warn_dept = #{reqDept,jdbcType = CHAR} " +
+            "</if>" +
+            "group by ${fenLei}" +
+            "</script>")
+    List<KeShiFeiiYongTongJi> getMenZhenFeiYongXiangMuFenLei(IPage<KeShiFeiiYongTongJi> page,
+                                                             @Param("execUnitList") List<String> execUnitList,
+                                                             @Param("startTime") String startTime,
+                                                             @Param("endTime") String endTime,
+                                                             @Param("chargeCodeMx") String chargeCodeMx,
+                                                             @Param("code") String code,
+                                                             @Param("codeRs") String codeRs,
+                                                             @Param("reqDept") String reqDept,
+                                                             @Param("fenLei") String fenLei);
+
+
+    /**
+     * 获取住院或门诊的患者 信息
+     *
+     * @param huanZheHaoList 人员编码集合
+     * @param tableName      表名
+     * @return 返回基本信息
+     */
+    @Select({"<script>" +
+            "select distinct " +
+            "<if test=\"tableName == 'zy_patient' \">" +
+            "rtrim(inpatient_no) code," +
+            "</if>" +
+            "<if test=\"tableName == 'mz_patient_mi' \">" +
+            "rtrim(patient_id) code," +
+            "</if>" +
+            "rtrim(name) name from ${tableName} where " +
+            "<if test=\"tableName == 'zy_patient' \">" +
+            "inpatient_no in " +
+            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item,jdbcType = CHAR}" +
+            "</foreach>" +
+            "</if>" +
+            "<if test=\"tableName == 'mz_patient_mi' \">" +
+            "patient_id in " +
+            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item,jdbcType = CHAR}" +
+            "</foreach>" +
+            "</if>" +
+            "</script>"})
+    List<GetDropdownBox> huanZheXingMing(@Param("list") Set<String> huanZheHaoList,
+                                         @Param("tableName") String tableName);
+
+
+    /**
+     * 分会项目的名称
+     *
+     * @param xiangMuBianMa 项目编码 集合
+     * @return 返回名称
+     */
+    @Select("<script>" +
+            "select rtrim(code) code,rtrim(name) name from yp_zd_dict " +
+            "where code in " +
+            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item,jdbcType=CHAR}" +
+            "</foreach>" +
+            "union " +
+            "select rtrim(code) code,rtrim(name) name from zd_charge_item " +
+            "where code in " +
+            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item,jdbcType=CHAR}" +
+            "</foreach>" +
+            "</script>")
+    List<GetDropdownBox> xiangMuMingChen(@Param("list") Set<String> xiangMuBianMa);
+
+
+    /**
+     * 获取科室人员的名称
+     *
+     * @param luRuRen   录入人的名字
+     * @param tableName 表名
+     * @return 返回
+     */
+    @Select("<script>" +
+            "select rtrim(code) code,rtrim(name) name" +
+            "<if test=\"tableName == 'a_employee_mi' \">" +
+            ",rtrim(code_rs) code_rs" +
+            "</if>" +
+            " from ${tableName} where code in " +
+            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item,jdbcType=CHAR}" +
+            "</foreach>" +
+            "<if test=\"tableName == 'a_employee_mi' \">" +
+            " or " +
+            "code_rs in" +
+            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item,jdbcType=CHAR}" +
+            "</foreach>" +
+            "</if>" +
+            "</script>")
+    List<GetDropdownBox> huoQuKeShiHuoRenYuan(@Param("list") Set<String> luRuRen,
+                                              @Param("tableName") String tableName);
+
+    /**
+     * 获取人员的两个编码
+     *
+     * @param code 人员编码
+     * @return 返回人员编码
+     */
+    @Select("select top(1) rtrim(code) code,rtrim(code_rs) code_rs from a_employee_mi where (code = #{code} or code_rs = #{code})")
+    GetDropdownBox huoQuRenYuanDeCodeHeCodeRs(String code);
 
 
 }

+ 1 - 2
src/main/java/thyyxxk/webserver/dao/his/querydata/QueryDrugsAndProjectsDao.java

@@ -149,8 +149,7 @@ public interface QueryDrugsAndProjectsDao {
                                                                 @Param("endTime") String endTime,
                                                                 @Param("chargeCode") String chargeCode,
                                                                 @Param("dept") String dept);
-
-
+    
     /**
      * 查询药品
      *

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

@@ -1,7 +1,10 @@
 package thyyxxk.webserver.dao.his.yibao;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import thyyxxk.webserver.entity.datamodify.YzActOrder;
 
 import java.math.BigDecimal;
@@ -18,6 +21,19 @@ import java.util.List;
 @Mapper
 public interface ZhuYuanYiZhuDao {
 
+    /**
+     * 分页查询 可以退费的医嘱信息
+     *
+     * @param page        页数
+     * @param inpatientNo 住院号
+     * @param admissTimes 住院次数
+     * @param orderCode   医嘱编码
+     * @param actOrderNo  医嘱号
+     * @param startTime   开始时间
+     * @param endTime     结束时间
+     * @param infantFlag  婴儿标志
+     * @return 返回分页数据
+     */
     @Select("<script>" +
             "select drug_flag, " +
             "       order_name, " +
@@ -36,8 +52,7 @@ public interface ZhuYuanYiZhuDao {
             "       group_no = (select rtrim(group_name) from yp_zd_group_name where a.group_no = yp_zd_group_name.group_no), " +
             "       serial, " +
             "       discription, " +
-            "       act_order_no," +
-            "       isnull(tf_flag,0) tf_flag " +
+            "       act_order_no " +
             "from yz_act_order a ,yp_zd_unit b ,yz_supply_type c, a_employee_mi d , zd_unit_code e " +
             "where group_no != 00 and frequ_code = 'ONCE' and a.dose_unit = b.code and a.supply_code = c.supply_code " +
             "and a.physician = d.code and a.exec_unit = e.code  and infant_flag = #{infantFlag} " +
@@ -51,9 +66,6 @@ public interface ZhuYuanYiZhuDao {
             "<if test=\"startTime != null and startTime != '' \">" +
             "and order_time &gt;= #{startTime} and order_time &lt;= #{endTime} " +
             "</if>" +
-            "<if test=\"tfFlag != null and tfFlag != 3 \">" +
-            "and isnull(tf_flag,0) = #{tfFlag}" +
-            "</if>" +
             "</script>")
     IPage<YzActOrder> getYzXinXi(IPage<YzActOrder> page,
                                  @Param("inpatientNo") String inpatientNo,
@@ -62,9 +74,16 @@ public interface ZhuYuanYiZhuDao {
                                  @Param("actOrderNo") BigDecimal actOrderNo,
                                  @Param("startTime") String startTime,
                                  @Param("endTime") String endTime,
-                                 @Param("infantFlag") int infantFlag,
-                                 @Param("tfFlag") int tfFlag);
+                                 @Param("infantFlag") int infantFlag);
 
+    /**
+     * 查询原来的医嘱信息
+     *
+     * @param inpatientNo      住院号
+     * @param admissTimes      住院次数
+     * @param xuTuiFeiYiZhuHao 里面带上一些医嘱号
+     * @return 返回被退费的医嘱信息
+     */
     @Select("<script>" +
             "select order_code, order_name, frequ_code, discription, infant_flag,   " +
             "       order_time, start_time, confirm_time,status_time,enter_time, end_time,performance_time,print_order_change,refer_physician,consult_physician," +
@@ -79,8 +98,14 @@ public interface ZhuYuanYiZhuDao {
             "</script>")
     List<YzActOrder> yuanYiZhu(@Param("inpatientNo") String inpatientNo,
                                @Param("admissTimes") Integer admissTimes,
-                               @Param("list") List<YzActOrder> tuiFeiList);
+                               @Param("list") List<YzActOrder> xuTuiFeiYiZhuHao);
 
+    /**
+     * 生成 退费数据 和
+     *
+     * @param list 生成新的医嘱数据
+     * @param code 操作人的编码
+     */
     @Insert("<script>" +
             "INSERT INTO  " +
             "    yz_act_order  " +
@@ -107,13 +132,33 @@ public interface ZhuYuanYiZhuDao {
     void yiZhuTuiFei(@Param("list") List<YzActOrder> list,
                      @Param("code") String code);
 
-    @Update("<script>" +
-            "update yz_act_order set tf_flag = 1 where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and act_order_no in " +
+
+    /**
+     * 获取是否已经有存在了的退费医嘱
+     *
+     * @param yiZhuHao 要查询的医嘱号
+     * @return 返回已经推过的医嘱
+     */
+    @Select("<script>" +
+            "select act_order_no from yz_act_order_tf where act_order_no in " +
             "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
             "#{item.actOrderNo}" +
             "</foreach>" +
             "</script>")
-    void genXinTuiFeiFlag(@Param("inpatientNo") String inpatientNo,
-                          @Param("admissTimes") Integer admissTimes,
-                          @Param("list") List<YzActOrder> list);
+    List<YzActOrder> getTuiFei(@Param("list") List<YzActOrder> yiZhuHao);
+
+    /**
+     * 插入已经退费的 被退的医嘱号 和 生成的退费数据的医嘱号
+     *
+     * @param yzActOrderList 被退的医嘱号 和 生成的退费数据的医嘱号
+     */
+    @Insert("<script>" +
+            "insert into yz_act_order_tf (act_order_no, act_order_no_tf) values " +
+            "<foreach collection='list' item='item' separator=','>" +
+            "(#{item.actOrderNo},#{item.newActOrderNo})" +
+            "</foreach>" +
+            "</script>")
+    void insertYzActOrderTf(@Param("list") List<YzActOrder> yzActOrderList);
+
+
 }

+ 3 - 0
src/main/java/thyyxxk/webserver/entity/datamodify/GetDropdownBox.java

@@ -8,6 +8,9 @@ public class GetDropdownBox {
     private String code;
     private String name;
 
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private String codeRs;
+
     @JsonInclude(JsonInclude.Include.NON_NULL)
     private String siCaty;
 

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

@@ -30,6 +30,8 @@ public class YzActOrder implements Serializable {
 
     private BigDecimal actOrderNo;
 
+    private BigDecimal actOrderNoTf;
+
     private String inpatientNo;
 
     /**

+ 74 - 0
src/main/java/thyyxxk/webserver/entity/querydata/KeShiFeiiYongTongJi.java

@@ -0,0 +1,74 @@
+package thyyxxk.webserver.entity.querydata;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 描述: 科室费用统计
+ * </p>
+ *
+ * @author xc
+ * @date 2021-10-22 11:56
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class KeShiFeiiYongTongJi {
+    private long currentPage;
+    private long pageSize;
+    private long total;
+    private String startTime;
+    private String endTime;
+
+    /**
+     * 住院号
+     */
+    private String patient;
+    private String patientName;
+
+    /**
+     * 次数
+     */
+    private Integer times;
+
+    /**
+     * 项目编码
+     */
+    private String chargeCodeMx;
+    private String chargeCodeName;
+
+    /**
+     * 录入人
+     */
+    private String opIdCode;
+    private String opName;
+
+    /**
+     * 执行科室
+     */
+    private String execUnit;
+    private String execUnitName;
+    private List<String> execUnitList;
+
+    /**
+     * 申请科室
+     */
+    private String wardCode;
+    private String wardCodeName;
+
+    private Date chargeDate;
+    private String chargeDateString;
+
+    private String source;
+
+    private BigDecimal chargeFee;
+    private BigDecimal chargeAmount;
+
+    private List<KeShiFeiiYongTongJi> data;
+
+
+}

+ 17 - 2
src/main/java/thyyxxk/webserver/entity/querydata/QueryDrugsAndProjects.java

@@ -3,6 +3,7 @@ package thyyxxk.webserver.entity.querydata;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -48,6 +49,8 @@ public class QueryDrugsAndProjects {
      */
     private String opId;
 
+    private String opIdCode;
+
     /**
      * 录入人的姓名
      */
@@ -71,13 +74,13 @@ public class QueryDrugsAndProjects {
     /**
      * 数量
      */
-    private Double number;
+    private BigDecimal number;
 
 
     /**
      * 金额
      */
-    private Double amountOfMoney;
+    private BigDecimal amountOfMoney;
 
     /**
      * 来源
@@ -91,6 +94,7 @@ public class QueryDrugsAndProjects {
     private String startTime;
     private String endTime;
     private String ward;
+    private String wardCode;
     private long currentPage;
     private long pageSize;
     private long total;
@@ -194,10 +198,21 @@ public class QueryDrugsAndProjects {
 
     private String disDiagComment;
 
+    private BigDecimal chargeFee;
+    private BigDecimal chargeAmount;
+
     /**
      * 执行科室
      */
     private String execUnit;
 
 
+    /**
+     * 执行科室
+     */
+    private List<String> execUnitList;
+
+    private Integer fenLei;
+
+
 }

+ 18 - 1
src/main/java/thyyxxk/webserver/service/PublicServer.java

@@ -1,14 +1,17 @@
 package thyyxxk.webserver.service;
 
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import thyyxxk.webserver.dao.his.PublicDao;
 import thyyxxk.webserver.dao.his.yibao.TransferInOfExpensesDao;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
+import thyyxxk.webserver.utils.ListUtil;
 import thyyxxk.webserver.utils.ResultVoUtil;
 import thyyxxk.webserver.utils.StringUtil;
 import thyyxxk.webserver.utils.TokenUtil;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -20,6 +23,7 @@ import java.util.List;
  * @date 2021-09-17 10:54
  */
 @Service
+@Slf4j
 public class PublicServer {
     private final PublicDao dao;
 
@@ -99,10 +103,17 @@ public class PublicServer {
      * @param deptCode 科室代码
      * @return 返回科室
      */
-    public List<String> getKeShiLieBiao(String deptCode) {
+    public List<String> getKeShiLieBiaoList(String deptCode) {
         return dao.getKeShiLieBiao(deptCode);
     }
 
+    public List<String> getKeShiLieBiaoList(List<String> deptCodeList) {
+        if (ListUtil.isBlank(deptCodeList)) {
+            return new ArrayList<>();
+        }
+        return dao.getKeShiLieBiaoList(deptCodeList);
+    }
+
     /**
      * 获取人员信息
      *
@@ -132,5 +143,11 @@ public class PublicServer {
         return ResultVoUtil.success(dao.getDept());
     }
 
+
+    public void pingJieXinXi() {
+
+
+    }
+
 }
 

+ 179 - 7
src/main/java/thyyxxk/webserver/service/querydata/KeShiShouRuServer.java

@@ -1,15 +1,27 @@
 package thyyxxk.webserver.service.querydata;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import thyyxxk.webserver.config.exception.ExceptionEnum;
 import thyyxxk.webserver.dao.his.querydata.KeShiShouRuDao;
 import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
+import thyyxxk.webserver.entity.querydata.KeShiFeiiYongTongJi;
 import thyyxxk.webserver.entity.querydata.QueryDrugsAndProjects;
 import thyyxxk.webserver.service.PublicServer;
+import thyyxxk.webserver.utils.DateUtil;
+import thyyxxk.webserver.utils.ExcelUtil;
 import thyyxxk.webserver.utils.ResultVoUtil;
 import thyyxxk.webserver.utils.StringUtil;
 
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  * 描述: 各个科室收入的情况
@@ -32,23 +44,183 @@ public class KeShiShouRuServer {
     }
 
 
-    public ResultVo<QueryDrugsAndProjects> getKeShouFei(QueryDrugsAndProjects param) {
+    public ResultVo<KeShiFeiiYongTongJi> getKeShouFei(QueryDrugsAndProjects param) {
         if (StringUtil.isBlank(param.getStartTime()) || StringUtil.isBlank(param.getEndTime())) {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "开始时间和结束时间为空 ∑(っ°Д°;)っ");
         }
-        QueryDrugsAndProjects qp = new QueryDrugsAndProjects();
+
+        KeShiFeiiYongTongJi qp = new KeShiFeiiYongTongJi();
         log.info("查询科室收费统计 ==> 执行科室:{},开始{},结束:{}。项目编码:{},录入人:{},申请科室:{}", param.getExecUnit(), param.getStartTime(), param.getEndTime(),
                 param.getChargeCodeMx(), param.getOpId(), param.getReqDeptCode());
+        List<String> keShiLieBiao = publicServer.getKeShiLieBiaoList(param.getExecUnitList());
+        GetDropdownBox renHuanCodeHeCodeRs = new GetDropdownBox();
+        if (StringUtil.notBlank(param.getOpId())) {
+            renHuanCodeHeCodeRs = dao.huoQuRenYuanDeCodeHeCodeRs(param.getOpId());
+        }
+        String huanZheBiao = "zy_patient";
+        Page<KeShiFeiiYongTongJi> page;
+        if (param.getTotal() > 0) {
+            page = new Page<>(param.getCurrentPage(), param.getPageSize(), false);
+        } else {
+            page = new Page<>(param.getCurrentPage(), param.getPageSize());
+        }
         if (param.getLaiYuan() == 0) {
-            qp = dao.getKeShiFeiYongZhuYuanTotal(publicServer.getKeShiLieBiao(param.getExecUnit()), param.getStartTime(), param.getEndTime(),
-                    param.getChargeCodeMx(), param.getOpId(), param.getReqDeptCode());
-            qp.setList(dao.getKeShiFeiYongZhuYuan(param.getCurrentPage(), param.getPageSize(), publicServer.getKeShiLieBiao(param.getExecUnit()), param.getStartTime(), param.getEndTime(),
-                    param.getChargeCodeMx(), param.getOpId(), param.getReqDeptCode()));
+            switch (param.getFenLei()) {
+                case 0:
+                    qp.setData(dao.getZhuYuanFeiYongXiangMuFenLei(page, keShiLieBiao, param.getStartTime(),
+                            param.getEndTime(), param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(),
+                            param.getReqDeptCode(), "CONVERT(varchar(100), charge_date, 23) charge_date_string"));
+                    qp.setTotal(page.getTotal());
+                    break;
+                case 1:
+                    qp.setData(dao.getZhuYuanFeiYongXiangMuFenLei(page, keShiLieBiao, param.getStartTime(),
+                            param.getEndTime(), param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(),
+                            param.getReqDeptCode(), "op_id_code"));
+                    qp.setTotal(page.getTotal());
+                    break;
+                case 2:
+                    qp.setData(dao.getZhuYuanFeiYongXiangMuFenLei(page, keShiLieBiao, param.getStartTime(),
+                            param.getEndTime(), param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(),
+                            param.getReqDeptCode(), "charge_code_mx"));
+                    qp.setTotal(page.getTotal());
+                    break;
+                default:
+                    if (param.getTotal() == 0) {
+                        qp = dao.getKeShiFeiYongZhuYuanTotal(keShiLieBiao, param.getStartTime(), param.getEndTime(),
+                                param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(), param.getReqDeptCode());
+                    }
+                    qp.setData(dao.getKeShiFeiYongZhuYuan(param.getCurrentPage(), param.getPageSize(), keShiLieBiao, param.getStartTime(), param.getEndTime(),
+                            param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(), param.getReqDeptCode()));
+                    break;
+            }
         } else {
-            log.info("门诊");
+            huanZheBiao = "mz_patient_mi";
+            switch (param.getFenLei()) {
+                case 0:
+                    qp.setData(dao.getMenZhenFeiYongXiangMuFenLei(page, keShiLieBiao, param.getStartTime(), param.getEndTime(),
+                            param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(), param.getReqDeptCode(), "CONVERT(varchar(100),charge_date, 23)"));
+                    qp.setTotal(page.getTotal());
+                    break;
+                case 1:
+                    qp.setData(dao.getMenZhenFeiYongXiangMuFenLei(page, keShiLieBiao, param.getStartTime(), param.getEndTime(),
+                            param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(), param.getReqDeptCode(), "confirm_id"));
+                    qp.setTotal(page.getTotal());
+                    break;
+                case 2:
+                    qp.setData(dao.getMenZhenFeiYongXiangMuFenLei(page, keShiLieBiao, param.getStartTime(), param.getEndTime(),
+                            param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(), param.getReqDeptCode(), "charge_item_code"));
+                    qp.setTotal(page.getTotal());
+                    break;
+                default:
+                    if (param.getTotal() == 0) {
+                        qp = dao.getMenZhenFeiYongTotal(keShiLieBiao, param.getStartTime(), param.getEndTime(),
+                                param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(), param.getReqDeptCode());
+                    }
+                    qp.setData(dao.getMenZhenFeiYong(param.getCurrentPage(), param.getPageSize(), keShiLieBiao, param.getStartTime(), param.getEndTime(),
+                            param.getChargeCodeMx(), renHuanCodeHeCodeRs.getCode(), renHuanCodeHeCodeRs.getCodeRs(), param.getReqDeptCode()));
+                    break;
+            }
+
         }
+        pingJieZiDuanMingChen(qp, huanZheBiao);
         return ResultVoUtil.success(qp);
     }
 
+    private void pingJieZiDuanMingChen(KeShiFeiiYongTongJi qp, String huanZheBiao) {
+        if (qp.getData() != null && !qp.getData().isEmpty()) {
+            Set<String> huanZheHaoSet = new HashSet<>();
+            Set<String> keShiSet = new HashSet<>();
+            Set<String> xiangMuSet = new HashSet<>();
+            Set<String> luRuRenSet = new HashSet<>();
+
+            qp.getData().forEach(item -> {
+                huanZheHaoSet.add(item.getPatient());
+                keShiSet.add(item.getExecUnit());
+                keShiSet.add(item.getWardCode());
+                xiangMuSet.add(item.getChargeCodeMx());
+                luRuRenSet.add(item.getOpIdCode());
+            });
+            Map<String, String> huanZheXingMingMap = dao.huanZheXingMing(huanZheHaoSet, huanZheBiao)
+                    .stream()
+                    .collect(Collectors.toMap(GetDropdownBox::getCode, GetDropdownBox::getName, (key1, key2) -> key1));
+            Map<String, String> xiangMuMingChenMap = dao.xiangMuMingChen(xiangMuSet)
+                    .stream()
+                    .collect(Collectors.toMap(GetDropdownBox::getCode, GetDropdownBox::getName, (key1, key2) -> key1));
+
+            Map<String, String> huoQuKeShiMap = dao.huoQuKeShiHuoRenYuan(keShiSet, "zd_unit_code")
+                    .stream()
+                    .collect(Collectors.toMap(GetDropdownBox::getCode, GetDropdownBox::getName, (key1, key2) -> key1));
+
+            // 获取人员信息
+            List<GetDropdownBox> RenYuan = dao.huoQuKeShiHuoRenYuan(luRuRenSet, "a_employee_mi");
+            // 第一次用 code 匹配
+            Map<String, String> luRuRenXingMingMap = RenYuan
+                    .stream()
+                    .collect(Collectors.toMap(GetDropdownBox::getCode, GetDropdownBox::getName, (key1, key2) -> key1));
+
+            // 第二次用 code_rs 匹配
+            Map<String, String> luRuRenXingMingRenShiMap = RenYuan
+                    .stream()
+                    .collect(Collectors.toMap(GetDropdownBox::getCodeRs, GetDropdownBox::getName, (key1, key2) -> key1));
+
+            qp.getData().forEach(item -> {
+                if (huanZheXingMingMap.containsKey(item.getPatient())) {
+                    item.setPatientName(huanZheXingMingMap.get(item.getPatient()));
+                }
+                if (xiangMuMingChenMap.containsKey(item.getChargeCodeMx())) {
+                    item.setChargeCodeName(xiangMuMingChenMap.get(item.getChargeCodeMx()));
+                }
+                if (huoQuKeShiMap.containsKey(item.getExecUnit())) {
+                    item.setExecUnitName(huoQuKeShiMap.get(item.getExecUnit()));
+                }
+                if (huoQuKeShiMap.containsKey(item.getWardCode())) {
+                    item.setWardCodeName(huoQuKeShiMap.get(item.getWardCode()));
+                }
+                if (luRuRenXingMingMap.containsKey(item.getOpIdCode())) {
+                    item.setOpName(luRuRenXingMingMap.get(item.getOpIdCode()));
+                } else if (luRuRenXingMingRenShiMap.containsKey(item.getOpIdCode())) {
+                    item.setOpName(luRuRenXingMingRenShiMap.get(item.getOpIdCode()));
+                } else {
+                    item.setOpName(item.getOpIdCode());
+                }
+            });
+        }
+    }
+
+    public void exportExcel(HttpServletResponse response, QueryDrugsAndProjects param) {
+        List<KeShiFeiiYongTongJi> keShiFeiiYongTongJisList = getKeShouFei(param).getData().getData();
+        String[] title = null;
+        if (param.getFenLei() == 3) {
+            title = new String[]{"患者姓名", "住院/门诊号", "次数", "项目编码", "项目名称", "收费日期", "录入人", "执行科室", "申请科室", "金额", "数量", "来源"};
+        } else {
+            title = new String[]{param.getFenLei() == 0 ? "日期" : param.getFenLei() == 1 ? "录入人" : "项目编码", "金额", "数量", "来源"};
+        }
+        String[][] content = new String[keShiFeiiYongTongJisList.size()][];
+        for (int i = 0; i < keShiFeiiYongTongJisList.size(); i++) {
+            content[i] = new String[title.length];
+            KeShiFeiiYongTongJi pojo = keShiFeiiYongTongJisList.get(i);
+            if (param.getFenLei() == 3) {
+                content[i][0] = pojo.getPatientName();
+                content[i][1] = pojo.getPatient();
+                content[i][2] = pojo.getTimes().toString();
+                content[i][3] = pojo.getChargeCodeMx();
+                content[i][4] = pojo.getChargeCodeName();
+                content[i][5] = DateUtil.formatDatetime(pojo.getChargeDate());
+                content[i][6] = pojo.getOpName();
+                content[i][7] = pojo.getExecUnitName();
+                content[i][8] = pojo.getWardCodeName();
+                content[i][9] = pojo.getChargeFee().toString();
+                content[i][10] = pojo.getChargeAmount().toString();
+                content[i][9] = pojo.getSource();
+            } else {
+                content[i][0] = param.getFenLei() == 0 ? pojo.getChargeDateString() : param.getFenLei() == 1 ? pojo.getOpName() : pojo.getChargeCodeName();
+                content[i][1] = pojo.getPatient();
+                content[i][2] = pojo.getTimes().toString();
+                content[i][3] = pojo.getChargeCodeMx();
+            }
+        }
+        ExcelUtil.exportExcel(response, title, content);
+    }
+
 
 }

+ 40 - 9
src/main/java/thyyxxk/webserver/service/yibao/ZhuYuanYiZhuServer.java

@@ -14,7 +14,10 @@ import thyyxxk.webserver.entity.datamodify.YzActOrder;
 import thyyxxk.webserver.service.PublicServer;
 import thyyxxk.webserver.utils.*;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -39,10 +42,10 @@ public class ZhuYuanYiZhuServer {
     }
 
     /**
-     * 获取患者的医嘱
+     * 分页获取可以退费的医嘱号 只有 临时医嘱才能退费
      *
-     * @param param 住院号
-     * @return 返回
+     * @param param 查询条件 分页 住院号 ,次数 ,医嘱编码,医嘱号,开始时间,结束时间
+     * @return 返回分页数据
      */
     public ResultVo<IPage<YzActOrder>> getOrderList(YzActOrder param) {
         int infantFlag = 0;
@@ -55,13 +58,34 @@ public class ZhuYuanYiZhuServer {
         }
         IPage<YzActOrder> page = new Page<>(param.getCurrentPage(), param.getPageSize());
         dao.getYzXinXi(page, param.getInpatientNo(), param.getAdmissTimes(), param.getOrderCode(),
-                param.getActOrderNo(), param.getQueryStartTime(), param.getQueryEndTime(), infantFlag, param.getTfFlag());
+                param.getActOrderNo(), param.getQueryStartTime(), param.getQueryEndTime(), infantFlag);
         if (page.getRecords().isEmpty()) {
             return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
         }
+        List<YzActOrder> tuiFeiYiZhuHaoList = dao.getTuiFei(page.getRecords());
+        if (ListUtil.notBlank(tuiFeiYiZhuHaoList)) {
+            Map<BigDecimal, YzActOrder> yiTuiFeiYiZhuMap = tuiFeiYiZhuHaoList.stream().collect(Collectors.toMap(YzActOrder::getActOrderNo, a -> a, (k1, k2) -> k1));
+            page.getRecords().forEach(item -> {
+                if (yiTuiFeiYiZhuMap.containsKey(item.getActOrderNo())) {
+                    item.setTfFlag(1);
+                } else if (item.getDrugQuan().signum() == -1) {
+                    item.setTfFlag(2);
+                } else {
+                    item.setTfFlag(0);
+                }
+
+            });
+        }
         return ResultVoUtil.success(page);
     }
 
+    /**
+     * 生成退费医嘱数据
+     * 不能重复退费,不能退负数
+     *
+     * @param param 需要,住院号,次数,医嘱号
+     * @return 返回提示
+     */
     @Transactional(rollbackFor = Exception.class)
     public ResultVo<String> yiZhuTuiFei(YzActOrder param) {
         if (ListUtil.isBlank(param.getTuiFeiList())) {
@@ -74,18 +98,25 @@ public class ZhuYuanYiZhuServer {
         if (ListUtil.isBlank(yuanYiZhuShuJu)) {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "未查询到对应的住院号。┌(。Д。)┐");
         }
+        List<YzActOrder> tuiFeiList = dao.getTuiFei(param.getTuiFeiList());
+        if (!tuiFeiList.isEmpty()) {
+            StringBuilder sb = new StringBuilder();
+            tuiFeiList.forEach(item -> {
+                sb.append("<span style='color:red'>【").append(item.getActOrderNo()).append("】</span><br>");
+            });
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("%s 以上医嘱重复退费", sb));
+        }
+
         for (YzActOrder yzActOrder : yuanYiZhuShuJu) {
-            // 同时满足 tf_flag 不等于 0 以及 价格 不为负数 才能退费
-            if (yzActOrder.getTfFlag() != 0) {
-                return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("医嘱号为:【%s】已退费无法重复退费。( ´Д`)y━・~~", yzActOrder.getActOrderNo()));
-            } else if (yzActOrder.getDrugQuan().signum() == -1) {
+            // 价格 不为负数 才能退费
+            if (yzActOrder.getDrugQuan().signum() == -1) {
                 return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("医嘱号为:【%s】费用为负数无法退费。( ´Д`)y━・~~", yzActOrder.getActOrderNo()));
             }
             yzActOrder.setDrugQuan(yzActOrder.getDrugQuan().negate());
             yzActOrder.setNewActOrderNo(publicServer.getActOrderNo());
         }
         dao.yiZhuTuiFei(yuanYiZhuShuJu, TokenUtil.getTokenUserId());
-        dao.genXinTuiFeiFlag(param.getInpatientNo(), param.getAdmissTimes(), param.getTuiFeiList());
+        dao.insertYzActOrderTf(yuanYiZhuShuJu);
         log.info("医嘱退费:操作人:{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONStringWithDateFormat(yuanYiZhuShuJu, DateUtil.DEFAULT_PATTERN));
         return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "操作成功。*.。(๑・∀・๑)*.。");
     }

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

@@ -56,7 +56,7 @@ public class QueRenYiZhuShouFeiServer {
         }
         log.info("查询需确费医嘱:数据:{}", JSON.toJSONString(yzActOrder));
         dao.getXuQueFeiYiZhu(page, yzActOrder.getInpatientNo(), yzActOrder.getAdmissTimes(), yzActOrder.getExecUnit(),
-                yzActOrder.getWardCode(), publicServer.getKeShiLieBiao(yzActOrder.getExecUnit()));
+                yzActOrder.getWardCode(), publicServer.getKeShiLieBiaoList(yzActOrder.getExecUnit()));
         if (page.getRecords().isEmpty()) {
             return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
         }
@@ -72,7 +72,8 @@ public class QueRenYiZhuShouFeiServer {
      * @return 返回
      */
     public ResultVo<List<YzActOrder>> getXuQueFeiXiangXiXinXi(String inpatientNo, Integer admissTimes, String execUnit) {
-        List<YzActOrder> list = dao.getXuQueFeiXiangXiXinXi(inpatientNo, admissTimes, execUnit, publicServer.getKeShiLieBiao(execUnit));
+        List<YzActOrder> list = dao.getXuQueFeiXiangXiXinXi(inpatientNo, admissTimes, execUnit, publicServer.getKeShiLieBiaoList(execUnit));
+        System.out.println(publicServer.getKeShiLieBiaoList(execUnit));
         if (list.isEmpty()) {
             return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "没有数据 ヽ(゜Q。)ノ?");
         }
@@ -91,16 +92,15 @@ public class QueRenYiZhuShouFeiServer {
             if (StringUtil.isBlank(yzActOrder.getChargeStatus())) {
                 return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER);
             }
-            if (yzActOrder.getChargeStatus().equals("0")) {
+            if (yzActOrder.getChargeStatus().equals("5")) {
                 ZyDetailCharge zy = new ZyDetailCharge();
                 zy.setChargeAmount(yzActOrder.getOrderCount());
-                // 这里是价格传过来的价格是总价 所以我要先变成单价 才能计算不失误   这个除法是保留小数点后两位的
-                zy.setChargeFee(yzActOrder.getChargeFee().divide(yzActOrder.getOrderCount(), 2, BigDecimal.ROUND_HALF_UP));
+                zy.setChargeFee(yzActOrder.getChargeFee());
                 zy.setBillItemCode(yzActOrder.getBillItemCode());
                 zyDetailCharges.add(zy);
                 sum = sum.add(zy.getChargeAmount().multiply(zy.getChargeFee()));
                 shangChuanList.add(yzActOrder);
-            } else if (yzActOrder.getChargeStatus().equals("1")) {
+            } else if (yzActOrder.getChargeStatus().equals("7")) {
                 yzActOrder.setOccTimeString(DateUtil.formatDatetime(yzActOrder.getOccTime()));
                 shangChuanList.add(yzActOrder);
             }
@@ -108,7 +108,7 @@ public class QueRenYiZhuShouFeiServer {
         if (shangChuanList.isEmpty()) {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "没有选择任何操作 !!!∑(゚Д゚ノ)ノ");
         } else {
-            shangChuanList.forEach(System.out::println);
+            log.info("测试:{}", JSON.toJSONString(shangChuanList));
             dao.baoCunYiZhuQueFei(param.getInpatientNo(), param.getAdmissTimes(), shangChuanList, TokenUtil.getTokenUserId());
         }
         if (!zyDetailCharges.isEmpty()) {