浏览代码

科室核算报表开发

hurugang 5 年之前
父节点
当前提交
fd11ed89f1

+ 1 - 1
src/main/java/cn/hnthyy/thmz/controller/ChargeFeeVoController.java

@@ -645,6 +645,7 @@ public class ChargeFeeVoController {
                 resultMap.put("message", "查询费用汇总报表失败,查询时间为空");
                 return resultMap;
             }
+
             List<String> operaotors = chargeFeeVoService.queryAllOperatorFromReceipt(chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate());
             List<String> ghOperaotors = chargeFeeVoService.queryAllOperatorFromReqrec(chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate());
             ghOperaotors.forEach(o -> {
@@ -663,7 +664,6 @@ public class ChargeFeeVoController {
             }
             chargeFeeVoService.refeshInconformityData(chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate());
 
-
             //挂号收入构成表格数据
             ReqrecVo reqrecVo = chargeFeeVoService.queryMzReceiptSerialCount(null, null, chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate()).get(0);
             reqrecVo.fomartReqrecVo();

+ 138 - 56
src/main/java/cn/hnthyy/thmz/controller/MzChargeDetailController.java

@@ -43,6 +43,7 @@ public class MzChargeDetailController {
     private YpZdDictService ypZdDictService;
     @Autowired
     private MzPatientMiService mzPatientMiService;
+
     /**
      * 查询费用列表
      *
@@ -50,7 +51,7 @@ public class MzChargeDetailController {
      */
     @UserLoginToken
     @RequestMapping(value = "/listMzChargeDetail", method = {RequestMethod.POST})
-    public Map<String, Object> listMzChargeDetail(@RequestBody MzChargeDetailPageDto mzChargeDetailPageDto,HttpServletRequest httpServletRequest) {
+    public Map<String, Object> listMzChargeDetail(@RequestBody MzChargeDetailPageDto mzChargeDetailPageDto, HttpServletRequest httpServletRequest) {
         Map<String, Object> resultMap = new HashMap<>();
         try {
             if (mzChargeDetailPageDto == null || mzChargeDetailPageDto.getMzChargeDetail() == null) {
@@ -60,16 +61,16 @@ public class MzChargeDetailController {
             }
             PageViewVo pageViewVo = new PageViewVo();
             MzChargeDetail mzChargeDetail = mzChargeDetailPageDto.getMzChargeDetail();
-            List<MzChargeDetail> mzChargeDetails=new ArrayList<>();
+            List<MzChargeDetail> mzChargeDetails = new ArrayList<>();
             if (PayMarkEnum.NO_CHARGE.code.equals(mzChargeDetail.getPayMark())) {
                 if (StringUtils.isNotBlank(mzChargeDetail.getPatientId())) {
-                    mzChargeDetails.addAll( mzChargeDetailService.unPaidToFullChargeDetail(mzChargeDetail.getPatientId()));
+                    mzChargeDetails.addAll(mzChargeDetailService.unPaidToFullChargeDetail(mzChargeDetail.getPatientId()));
                 }
-                if(StringUtils.isNotBlank(mzChargeDetail.getName())){
-                    List<MzPatientMi> mzPatientMis=mzPatientMiService.queryByName(mzChargeDetail.getName());
-                    if(mzPatientMis!=null && mzPatientMis.size()>0){
-                        for (MzPatientMi m:mzPatientMis){
-                            if(m!=null && StringUtils.isNotBlank(m.getPatientId())){
+                if (StringUtils.isNotBlank(mzChargeDetail.getName())) {
+                    List<MzPatientMi> mzPatientMis = mzPatientMiService.queryByName(mzChargeDetail.getName());
+                    if (mzPatientMis != null && mzPatientMis.size() > 0) {
+                        for (MzPatientMi m : mzPatientMis) {
+                            if (m != null && StringUtils.isNotBlank(m.getPatientId())) {
                                 mzChargeDetails.addAll(mzChargeDetailService.unPaidToFullChargeDetail(m.getPatientId()));
                             }
                         }
@@ -106,7 +107,7 @@ public class MzChargeDetailController {
                 if (StringUtils.isBlank(mzChargeDetail.getDoctorCode())) {
                     mzChargeDetail.setDoctorCode(null);
                 }
-                if(YesNoEnum.YES.equals(mzChargeDetailPageDto.getOwnData())){
+                if (YesNoEnum.YES.equals(mzChargeDetailPageDto.getOwnData())) {
                     User tokenUser = TokenUtil.getUser(httpServletRequest);
                     mzChargeDetailPageDto.setOpId(tokenUser.getUserIdCode());
                 }
@@ -122,12 +123,12 @@ public class MzChargeDetailController {
             resultMap.put("message", "查询费用列表信息成功");
             resultMap.put("pageViewVo", pageViewVo);
             return resultMap;
-        }catch (MzException e) {
+        } catch (MzException e) {
             log.error("查询费用列表失败,错误信息{}", e);
             resultMap.put("code", -1);
-            resultMap.put("message", "查询费用列表失败"+e.getMessage());
+            resultMap.put("message", "查询费用列表失败" + e.getMessage());
             return resultMap;
-        }  catch (Exception e) {
+        } catch (Exception e) {
             e.printStackTrace();
             resultMap.put("code", -1);
             resultMap.put("message", "查询费用列表失败,系统出错,请联系管理员");
@@ -312,7 +313,7 @@ public class MzChargeDetailController {
 //                        return resultMap;
 //                    }
 //                }
-                int receiptNo=mzChargeDetailService.chargeFeeForByjz(tokenUser.getUserIdCode(), mzDepositFileVo);
+                int receiptNo = mzChargeDetailService.chargeFeeForByjz(tokenUser.getUserIdCode(), mzDepositFileVo);
                 resultMap.put("receiptNo", receiptNo);
             } else {
                 mzChargeDetailService.chargeFee(tokenUser.getUserIdCode(), mzDepositFileVo);
@@ -331,7 +332,7 @@ public class MzChargeDetailController {
             e.printStackTrace();
             resultMap.put("code", -1);
             resultMap.put("message", "缴费失败,系统出错,请联系管理员");
-            log.error("缴费失败,系统异常"+e);
+            log.error("缴费失败,系统异常" + e);
             return resultMap;
         }
     }
@@ -339,6 +340,7 @@ public class MzChargeDetailController {
 
     /**
      * 修改病人姓名  120病人缴费时调用
+     *
      * @param mzChargeDetail
      * @return
      */
@@ -347,7 +349,7 @@ public class MzChargeDetailController {
     public Map<String, Object> changePatientIdName(@RequestBody MzChargeDetail mzChargeDetail) {
         Map<String, Object> resultMap = new HashMap<>();
         try {
-            if(mzChargeDetail==null){
+            if (mzChargeDetail == null) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "参数不能为空");
                 return resultMap;
@@ -362,16 +364,16 @@ public class MzChargeDetailController {
                 resultMap.put("message", "病人编码不能为空");
                 return resultMap;
             }
-            if (mzChargeDetail.getTimes()==null) {
+            if (mzChargeDetail.getTimes() == null) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "病人就诊次数集合不能为空");
                 return resultMap;
             }
-            mzChargeDetailService.modifyNameByPatientIdAndTimes(mzChargeDetail.getName(),mzChargeDetail.getPatientId(),mzChargeDetail.getTimes());
+            mzChargeDetailService.modifyNameByPatientIdAndTimes(mzChargeDetail.getName(), mzChargeDetail.getPatientId(), mzChargeDetail.getTimes());
             resultMap.put("code", 0);
             resultMap.put("message", "病人姓名更新成功");
             return resultMap;
-        }catch (Exception e) {
+        } catch (Exception e) {
             resultMap.put("code", -1);
             resultMap.put("message", "病人姓名更新失败,系统出错,请联系管理员");
             log.error("病人姓名更新失败,系统异常,错误信息{}", e.getMessage());
@@ -771,7 +773,7 @@ public class MzChargeDetailController {
             BigDecimal totalPriceCount = BigDecimal.ZERO;
             totalPriceCount = getBigDecimal(data, totalPriceCount);
             User tokenUser = TokenUtil.getUser(httpServletRequest);
-            MzReceiptSerial mzReceiptSerial=mzReceiptSerialService.queryReceiptDetailsByReceiptSn(Integer.valueOf(chargeFeeParamsVo.getSerialNo()));
+            MzReceiptSerial mzReceiptSerial = mzReceiptSerialService.queryReceiptDetailsByReceiptSn(Integer.valueOf(chargeFeeParamsVo.getSerialNo()));
             resultMap.put("code", 0);
             resultMap.put("data", data);
             resultMap.put("totalPriceCount", totalPriceCount);
@@ -794,7 +796,6 @@ public class MzChargeDetailController {
     }
 
 
-
     /**
      * 查询病人的所有缴费明细
      *
@@ -825,13 +826,13 @@ public class MzChargeDetailController {
                 resultMap.put("message", "病人id不能为空");
                 return resultMap;
             }
-            List<Map<String,Object>>  mzChargeDetailList= mzChargeDetailService.queryChargeListByPatient(chargeFeeParamsVo.getHisData(), "%" + chargeFeeParamsVo.getPatientId() + "%", null, null, chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate());
-            List<Map<String, Object>> data=new ArrayList<>();
-            if(mzChargeDetailList!=null){
-                for(Map<String,Object> map:mzChargeDetailList){
-                    if(map!=null){
-                      Integer realNo= (Integer)map.get("real_no");
-                        data.addAll(mzChargeDetailService.queryChargeDetailByPatient(chargeFeeParamsVo.getHisData(), chargeFeeParamsVo.getPatientId(),realNo.toString()));
+            List<Map<String, Object>> mzChargeDetailList = mzChargeDetailService.queryChargeListByPatient(chargeFeeParamsVo.getHisData(), "%" + chargeFeeParamsVo.getPatientId() + "%", null, null, chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate());
+            List<Map<String, Object>> data = new ArrayList<>();
+            if (mzChargeDetailList != null) {
+                for (Map<String, Object> map : mzChargeDetailList) {
+                    if (map != null) {
+                        Integer realNo = (Integer) map.get("real_no");
+                        data.addAll(mzChargeDetailService.queryChargeDetailByPatient(chargeFeeParamsVo.getHisData(), chargeFeeParamsVo.getPatientId(), realNo.toString()));
                     }
                 }
             }
@@ -854,7 +855,7 @@ public class MzChargeDetailController {
     }
 
     private BigDecimal getBigDecimal(List<Map<String, Object>> data, BigDecimal totalPriceCount) {
-        if (data != null &&data.size() > 0) {
+        if (data != null && data.size() > 0) {
             for (Map<String, Object> entity : data) {
                 Double totalPriceD = (Double) entity.get("total_price");
                 BigDecimal totalPrice = BigDecimal.ZERO;
@@ -882,8 +883,6 @@ public class MzChargeDetailController {
     }
 
 
-
-
     /**
      * 查询科室核算报表 caseType = 1 申请科室核算报表  0 执行科室核算报表
      *
@@ -923,24 +922,24 @@ public class MzChargeDetailController {
             List<Map<String, Object>> depetBusinessReports = mzChargeDetailService.queryDepetBusinessReport(thmzmxsrParamsVo);
             thmzmxsrParamsVo.setHisData(YesNoEnum.YES);
             List<Map<String, Object>> depetBusinessReportsHis = mzChargeDetailService.queryDepetBusinessReport(thmzmxsrParamsVo);
-            BigDecimal totalAmount = fomartThmzmxsr(depetBusinessReports,depetBusinessReportsHis);
-            resultMap.put("data", depetBusinessReports);
-            resultMap.put("totalAmount", totalAmount);
+
+
+            if (fomartThmzBussinessReport(resultMap, depetBusinessReports, depetBusinessReportsHis)) return resultMap;
+            resultMap.put("code", -1);
+            resultMap.put("message", "未查询到科室核算报表");
             return resultMap;
         } catch (Exception e) {
             e.printStackTrace();
-            log.error("查询门诊收费明细失败,错误信息{}", e.getMessage());
+            log.error("查询科室核算报表失败,错误信息{}", e.getMessage());
             resultMap.put("code", -1);
-            resultMap.put("message", "查询门诊收费明细失败");
+            resultMap.put("message", "查询科室核算报表失败");
             return resultMap;
         }
     }
 
-
-
-    private BigDecimal fomartThmzmxsr(List<Map<String, Object>> depetBusinessReports,List<Map<String, Object>> depetBusinessReportsHis) {
-        BigDecimal totalAmount = BigDecimal.ZERO;
+    private boolean fomartThmzBussinessReport(Map<String, Object> resultMap, List<Map<String, Object>> depetBusinessReports, List<Map<String, Object>> depetBusinessReportsHis) {
         if (depetBusinessReports != null && depetBusinessReports.size() > 0) {
+            String defaultDept ="defaultDept";
             List<MzBillItem> mzBillItems = mzBillItemService.queryMzBillItem();
             Map<String, String> mzBillItemMap = null;
             if (mzBillItems != null) {
@@ -954,26 +953,109 @@ public class MzChargeDetailController {
             //科室排重集
             Set<String> depetSet = new HashSet<>();
             //父类码与核算码的关系
-            Map<String,List<String>> parentMap = new HashMap<>();
+            Map<String, List<String>> parentMap = new HashMap<>();
             for (Map<String, Object> map : depetBusinessReports) {
-                repeatSet.add((Date)map.get("charge_dcount_date"));
+                repeatSet.add((Date) map.get("charge_dcount_date"));
                 fomartData(mzBillItemMap, parentList, depetList, depetSet, parentMap, map);
-
             }
             for (Map<String, Object> map : depetBusinessReportsHis) {
-                if(repeatSet.contains(map.get("charge_dcount_date"))){
+                if (repeatSet.contains(map.get("charge_dcount_date"))) {
                     continue;
                 }
                 depetBusinessReports.add(map);
                 fomartData(mzBillItemMap, parentList, depetList, depetSet, parentMap, map);
             }
+            Map<String,BigDecimal> formatMap = new HashMap<>();
 
+            StringBuffer sbf = new StringBuffer();
+            for (Map<String, Object> map : depetBusinessReports) {
+                sbf.setLength(0);
+                sbf.append(map.get("audit_code")).append("_").append(map.get("exec_dept"));
+                String key = sbf.toString();
+                BigDecimal hadAmount= formatMap.get(key);
+                BigDecimal thisAmount=(BigDecimal)map.get("total_charge");
+                if(hadAmount==null){
+                    hadAmount=BigDecimal.ZERO;
+                }
+                if(thisAmount==null){
+                    thisAmount=BigDecimal.ZERO;
+                }
+                hadAmount=hadAmount.add(thisAmount);
+                formatMap.put(key,hadAmount);
+            }
+            //按部门统计的总额
+            Map<String,BigDecimal> depeAmounts = new HashMap<>();
+            //按核算码统计的总额
+            Map<String,BigDecimal> auditCodeAmounts = new HashMap<>();
+            List<List<BigDecimal>> realDatas = new ArrayList<>();
+            boolean hasNullKey = false;
+            for (int j=0;j<parentList.size();j++){
+                Map<String, Object> parent = parentList.get(j);
+                List<String> auditCodeList = (List<String>)parent.get("hsmList");
+                for (int k = 0;k<auditCodeList.size();k++){
+                    List<BigDecimal> tempList = new ArrayList<>();
+                    for (int i =0;i<depetList.size();i++){
+                        sbf.setLength(0);
+                        sbf.append(auditCodeList.get(k)).append("_").append(depetList.get(i).get("exec_dept"));
+                        BigDecimal tempAmount=formatMap.get(sbf.toString());
+                        tempList.add(tempAmount);
+                        if(tempAmount!=null){
+                            String execDept =(String) depetList.get(i).get("exec_dept");
+                            if(execDept==null){
+                                execDept=defaultDept;
+                                hasNullKey=true;
+                            }
+                            BigDecimal countDeptAmont=depeAmounts.get(execDept);
+                            if(countDeptAmont==null){
+                                countDeptAmont=BigDecimal.ZERO;
+                            }
+                            countDeptAmont=countDeptAmont.add(tempAmount);
+                            depeAmounts.put(execDept,countDeptAmont);
+
+                            BigDecimal countAuditAmont=auditCodeAmounts.get(auditCodeList.get(k));
+                            if(countAuditAmont==null){
+                                countAuditAmont=BigDecimal.ZERO;
+                            }
+                            countAuditAmont=countAuditAmont.add(tempAmount);
+                            auditCodeAmounts.put(auditCodeList.get(k),countAuditAmont);
+                        }
+                    }
+                    realDatas.add(tempList);
+                }
+            }
+            BigDecimal totalAmount = BigDecimal.ZERO;
+            for (Map<String, Object> map:depetList){
+                BigDecimal deptAmount=depeAmounts.get(map.get("exec_dept"));
+                if(hasNullKey && map.get("exec_dept")==null){
+                    deptAmount=depeAmounts.get(defaultDept);
+                }
+                if(deptAmount!=null){
+                    totalAmount=totalAmount.add(deptAmount);
+                }
+                map.put("amount",deptAmount);
+            }
+            List<BigDecimal> hsmAmounts = new ArrayList<>();
+            for (Map<String, Object> map:parentList){
+                List<String> auditCodeList = (List<String>)map.get("hsmList");
+                for (String str:auditCodeList){
+                    hsmAmounts.add(auditCodeAmounts.get(str));
+                }
+            }
+            resultMap.put("message", "查询科室核算报表成功");
+            resultMap.put("depetList", depetList);
+            resultMap.put("parentList", parentList);
+            resultMap.put("realDatas", realDatas);
+            resultMap.put("hsmAmounts", hsmAmounts);
+            resultMap.put("totalAmount", totalAmount);
+            return true;
         }
-        return totalAmount.setScale(2, BigDecimal.ROUND_FLOOR);
+        return false;
     }
 
+
     /**
      * 将数据库数据格式转成页面表格需要格式  结构化数据
+     *
      * @param mzBillItemMap
      * @param parentList
      * @param depetList
@@ -982,28 +1064,28 @@ public class MzChargeDetailController {
      * @param map
      */
     private void fomartData(Map<String, String> mzBillItemMap, List<Map<String, Object>> parentList, List<Map<String, Object>> depetList, Set<String> depetSet, Map<String, List<String>> parentMap, Map<String, Object> map) {
-        String execDept=(String) map.get("exec_dept");
-        if(!depetSet.contains(execDept)){
+        String execDept = (String) map.get("exec_dept");
+        if (!depetSet.contains(execDept)) {
             depetSet.add(execDept);
             Map<String, Object> deptTemp = new HashMap<>();
-            deptTemp.put("execDeptName",zdUnitCodeService.queryDeptNameByIdInCache(execDept));
-            deptTemp.put("execDeptCode",execDept);
+          //  deptTemp.put("execDeptName", zdUnitCodeService.queryDeptNameByIdInCache(execDept));
+            deptTemp.put("exec_dept", execDept);
             depetList.add(deptTemp);
         }
-        String parent=(String) map.get("parent");
+        String parent = (String) map.get("parent");
         List<String> auditCodeList = parentMap.get(parent);
-        if(auditCodeList==null){
+        if (auditCodeList == null) {
             Map<String, Object> parentTemp = new HashMap<>();
             parentTemp.put("parentName", mzBillItemMap.get(parent));
-            parentTemp.put("parentCode",parent);
+            parentTemp.put("parentCode", parent);
             auditCodeList = new ArrayList<>();
             auditCodeList.add((String) map.get("audit_code"));
-            parentTemp.put("hsmList",auditCodeList);
+            parentTemp.put("hsmList", auditCodeList);
             parentList.add(parentTemp);
-            parentMap.put(parent,auditCodeList);
-        }else {
-            String auditCode=(String) map.get("audit_code");
-            if(!auditCodeList.contains(auditCode)){
+            parentMap.put(parent, auditCodeList);
+        } else {
+            String auditCode = (String) map.get("audit_code");
+            if (!auditCodeList.contains(auditCode)) {
                 auditCodeList.add(auditCode);
             }
         }

+ 10 - 0
src/main/java/cn/hnthyy/thmz/controller/NavigationController.java

@@ -157,4 +157,14 @@ public class NavigationController {
         return "mzhbtj";
     }
 
+
+    /**
+     * 门诊应收核算报表
+     * @return
+     */
+    @RequestMapping("/bissinessReport")
+    public String bissinessReport() {
+        return "bissinessReport";
+    }
+
 }

+ 11 - 12
src/main/java/cn/hnthyy/thmz/mapper/his/MzChargeDetailMapper.java

@@ -741,11 +741,7 @@ public interface MzChargeDetailMapper {
      */
     @Select({"<script>",
             "SELECT " +
-                    "  exec_dept=case '1' when #{caseType} then " +
-                    "      case when isnull(a.warn_dept,'')='' then  a.exec_dept else a.warn_dept end " +
-                    "      else  " +
-                    "     case when isnull(a.exec_dept,'') ='' then a.warn_dept else a.exec_dept end " +
-                    "  end ," +
+                    "  exec_dept= z.name," +
                     "       charge_bill_code= case a.charge_bill_code when 'BILL10' then 'BILL01' when 'BILL11' then 'BILL28' when 'BILL12' then 'BILL02' else a.charge_bill_code end," +
                     "         parent=max( d.parent_code )," +
                     "         total_charge=isnull(sum(round(convert(decimal(18,3),((convert(decimal(18,3),unit_price)) * (quantity * isnull(drug_win,1)))),2)),0)," +
@@ -760,7 +756,7 @@ public interface MzChargeDetailMapper {
                     "                (case 1 when '0' then isnull(dcount_no,0) " +
                     "                 else 1 end) = isnull(dcount_no,0) ) as b, " +
                     "         zd_charge_item c," +
-                    "         zy_zd_audit_item d " +
+                    "         zy_zd_audit_item d, zd_unit_code  z " +
                     "   WHERE ( a.patient_id = b.patient_id )    and  " +
                     "           a.times=b.times and " +
                     "           a.receipt_no=b.receipt_no and   " +
@@ -769,20 +765,23 @@ public interface MzChargeDetailMapper {
                     "           a.serial_no=b.serial_no and " +
                     "           a.real_no=b.receipt_sn and " +
                     "            a.bill_item_code <![CDATA[<>]]> 'TC'  " +
+                    "  and ( case 1 when #{caseType} then " +
+                    "      case when isnull(a.warn_dept,'')='' then  a.exec_dept else a.warn_dept end " +
+                    "      else  " +
+                    "     case when isnull(a.exec_dept,'') ='' then a.warn_dept else a.exec_dept end " +
+                    "  end )*=z.code " +
+
 //                    "          and isnull(a.dept_no,'') like '%' " +
+                    "<when test='execDept!=null'>",
                     "          and ( case '1' when #{caseType} then " +
                     "      case when isnull(a.warn_dept,'')='' then  a.exec_dept else a.warn_dept end " +
                     "      else  " +
                     "     case when isnull(a.exec_dept,'') ='' then a.warn_dept else a.exec_dept end " +
                     "  end " +
                     ") =#{execDept} " +
+                     "</when>"       +
                     "group by " +
-                    "  case '1' when #{caseType} then " +
-                    "      case when isnull(a.warn_dept,'')='' then  a.exec_dept else a.warn_dept end " +
-                    "      else  " +
-                    "     case when isnull(a.exec_dept,'') ='' then a.warn_dept else a.exec_dept end " +
-                    "  end ," +
-                    "c.audit_code,isnull(a.group_no,'00')," +
+                    "z.name,c.audit_code,isnull(a.group_no,'00')," +
                     " case a.charge_bill_code when 'BILL10' then 'BILL01' when 'BILL11' then 'BILL28' when 'BILL12' then 'BILL02' else a.charge_bill_code end" +
                     ",b.charge_dcount_date ",
             "</script>"})

+ 1 - 1
src/main/resources/application.yml

@@ -38,4 +38,4 @@ mybatis:
 #打印SQL信息
 logging:
   level:
-    cn.hnthyy.thmz.mapper: info
+    cn.hnthyy.thmz.mapper: debug

+ 200 - 0
src/main/resources/static/js/bissinessReport.js

@@ -0,0 +1,200 @@
+//@ sourceURL=bissinessReport.js
+$(function () {
+    //init_daterangepicker();
+   daterangepicker(initkshsTable);
+    //重置查询参数
+    $('#btn_clean').click(function () {
+        cleanParams();
+    });
+    //初始化页面上面的按钮事件
+    $("#btn_query").click(function (t) {
+        initkshsTable();
+    });
+
+    $(".selectpicker").selectpicker({
+        dropuAuto: false
+    });
+
+    //初始化页面上面的按钮事件
+    $("#btn_excel").click(function (t) {
+        exportExcel();
+    });
+    initSelect();
+    initkshsTable();
+});
+
+
+
+/**
+ * 初始化下拉选
+ */
+function initSelect() {
+    $(".selectpicker").selectpicker({
+        dropuAuto: false
+    });
+    initDeptSelect();
+    var type = '<option value="0">执行科室核算报表</option><option value="1">申请科室核算报表</option>';
+    $('#timeParam').html(type);
+    $('#timeParam').selectpicker('refresh');
+    $("#timeParam").selectpicker('val', 0);//默认选中
+    $("#timeParam").selectpicker('refresh');
+}
+
+
+
+/**
+ * 挂号列表中的科室列表
+ */
+function initDeptSelect() {
+    //科室列表
+    $.ajax({
+        type: "GET",
+        url: '/thmz/allMzUnitCode',
+        dataType: "json",
+        headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
+        success: function (data) {
+            if (data == '401' || data == 401) {
+                window.location.href = '/thmz/login/view'
+                return;
+            }
+            var html = '';
+            $.each(data.data, function (commentIndex, comment) {
+                html += '<option value="' + comment.code + '">' + comment.name + '(' + comment.pyCode + ')</option>';
+            });
+            $('#execDept').empty();
+            $('#execDept').html(html);
+            $('#execDept').selectpicker('refresh');
+        }
+    });
+}
+
+
+
+/**
+ * 科室核算报表
+ */
+function initkshsTable() {
+    var rePortRangeArr = getRePortRangeArr();
+    $.ajax({
+        type: "POST",
+        url: '/thmz/getDepetBusinessReport',
+        contentType: "application/json;charset=UTF-8",
+        dataType: "json",
+        headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
+        data: JSON.stringify({
+            "beginDate": rePortRangeArr[0],
+            "endDate": rePortRangeArr[1],
+            "caseType": $('#timeParam').val(),
+            "execDept": $("#execDept").val()
+        }),
+        success: function (res) {
+            if (res == '401' || res == 401) {
+                window.location.href = '/thmz/login/view';
+                return;
+            }
+            if (res.code == 0) {
+                if (res.depetList != null && res.depetList.length > 0 && res.parentList != null && res.parentList.length > 0) {
+                    var html = "<thead><tr><th class='text-center' >父类码</th><th class='text-center'>核算码</th>";
+                    var totalTrHtml = "<tr><td>总计</td><td></td>";
+                    for (var i = 0; i < res.depetList.length; i++) {
+                        var execDeptName=res.depetList[i].exec_dept;
+                        if(execDeptName==null){
+                            execDeptName="";
+                        }
+                        html += "<th class='text-center'>" + execDeptName + "</th>";
+                        totalTrHtml+="<td>"+res.depetList[i].amount.toFixed(2)+"</td>";
+                    }
+                    totalTrHtml+="<td>"+res.totalAmount.toFixed(2)+"</td></tr>";
+                    html += "<td>金额</td></tr></thead>";
+                    html += "<tbody>";
+                    //当前迭代数据下标
+                    var index = 0;
+                    //当前迭代的父类码的小计的下标
+                    var xjIndex=0;
+                    for (var i=0;i<res.parentList.length;i++){
+                        var hsmList = res.parentList[i].hsmList;
+                        var rows = hsmList.length;
+                        xjIndex=index;
+                        var xjData=res.realDatas[xjIndex];
+                        var xjAmount=0;
+                        for(var j=0;j<hsmList.length;j++){
+                            html+="<tr>";
+                            if(j==0){
+                                html+= "<td rowspan='"+rows+"'>"+res.parentList[i].parentName+"</td>";
+                            }
+                            html+="<td>"+ hsmList[j]+"</td>";
+                            var realData=res.realDatas[index];
+                            for(var t=0;t<realData.length;t++){
+                              var temp=realData[t];
+                              if(temp==null){
+                                  html+="<td></td>";
+                              }else {
+                                  if(index>xjIndex){
+                                      xjData[t]= xjData[t]+temp;
+                                  }
+                                  html+="<td>"+temp.toFixed(2)+"</td>";
+                              }
+                            }
+                            xjAmount=xjAmount+res.hsmAmounts[index];
+                            html+="<td>"+res.hsmAmounts[index].toFixed(2)+"</td>";
+                            index++;
+                            html+="</tr>";
+                        }
+                        html+="<tr><td>小计:</td><td></td>";
+                        for (var l=0;l<xjData.length;l++){
+                            if(xjData[l]==null){
+                                html+="<td>0.00</td>";
+                            }else{
+                                html+="<td>"+xjData[l].toFixed(2)+"</td>";
+                            }
+                        }
+                        html+="<td>"+xjAmount.toFixed(2)+"</td>";
+                        html+="</tr>";
+                    }
+                    html+=totalTrHtml;
+                    html += "</tbody>";
+                    $("#tb_table").html(html);
+                }
+            }else {
+                $("#tb_table").find("tbody").html(null);
+            }
+        }
+    });
+}
+
+
+
+
+/**
+ * 获取时间选择器的时间数组
+ * @returns {string[]}
+ */
+function getRePortRangeArr() {
+    var rePortRange = $('#reportrange span').html();
+    var rePortRangeArr = rePortRange.split(" - ");
+    rePortRangeArr[0] = rePortRangeArr[0] + " 00:00:00"
+    rePortRangeArr[1] = rePortRangeArr[1] + " 23:59:59"
+    return rePortRangeArr;
+}
+
+
+
+/**
+ * 清空查询条件
+ */
+function cleanParams() {
+    $('#reportrange span').html(moment().format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
+    $("#timeParam").selectpicker('val', 0);//默认选中
+    $("#timeParam").selectpicker('refresh');
+    $("#execDept").selectpicker('val', null);//默认选中
+    $("#execDept").selectpicker('refresh');
+}
+
+/**
+ * 导出excel
+ */
+function exportExcel() {
+    var table2excel = new Table2Excel();
+// 传入你的tableId即可导出
+    table2excel.export($('#tb_table'), "门诊科室核算报表");
+}

+ 89 - 0
src/main/resources/static/js/common/date-util.js

@@ -182,3 +182,92 @@ function paseToFullTime(time){
 
 
 
+
+/**
+ * 日期改变事件
+ * @param callback 回调函数
+ */
+function daterangepicker(callback) {
+
+    if (typeof ($.fn.daterangepicker) === 'undefined') {
+        return;
+    }
+    console.log('init_daterangepicker');
+
+    var cb = function (start, end, label) {
+        console.log(start.toISOString(), end.toISOString(), label);
+        $('#reportrange span').html(start.format('YYYY-MM-DD') + ' - ' + end.format('YYYY-MM-DD'));
+        if(callback!=null){
+            callback();
+        }
+    };
+    var optionSet1 = {
+        //startDate: moment().subtract(29, 'days'),
+        startDate: moment(),
+        endDate: moment(),
+        minDate: '2012-01-01',
+        maxDate: nowString(),
+        dateLimit: {
+            days: 1200
+        },
+        showDropdowns: true,
+        showWeekNumbers: true,
+        timePicker: false,
+        timePickerIncrement: 1,
+        timePicker12Hour: true,
+        ranges: {
+            '今天': [moment(), moment()],
+            '昨天': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
+            '最近7天': [moment().subtract(6, 'days'), moment()],
+            '最近30天': [moment().subtract(29, 'days'), moment()],
+            '当月': [moment().startOf('month'), moment().endOf('month')],
+            '上个月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
+        },
+        opens: 'left',
+        buttonClasses: ['btn btn-default'],
+        applyClass: 'btn-small btn-primary',
+        cancelClass: 'btn-small',
+        format: 'YYYY-MM-DD',
+        separator: ' to ',
+        locale: {
+            applyLabel: '确定',
+            cancelLabel: '取消',
+            fromLabel: 'From',
+            toLabel: 'To',
+            customRangeLabel: '自定义',
+            daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'],
+            monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
+            firstDay: 1
+        }
+    };
+
+    //$('#reportrange span').html(moment().subtract(29, 'days').format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
+    $('#reportrange span').html(moment().format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
+    if(callback!=null){
+        callback();
+    }
+    $('#reportrange').daterangepicker(optionSet1, cb);
+    $('#reportrange').on('show.daterangepicker', function () {
+        console.log("show event fired");
+    });
+    $('#reportrange').on('hide.daterangepicker', function () {
+        console.log("hide event fired");
+    });
+    $('#reportrange').on('apply.daterangepicker', function (ev, picker) {
+        console.log("apply event fired, start/end dates are " + picker.startDate.format('YYYY-MM-DD') + " to " + picker.endDate.format('YYYY-MM-DD'));
+    });
+    $('#reportrange').on('cancel.daterangepicker', function (ev, picker) {
+        console.log("cancel event fired");
+    });
+    $('#options1').click(function () {
+        $('#reportrange').data('daterangepicker').setOptions(optionSet1, cb);
+    });
+    $('#options2').click(function () {
+        $('#reportrange').data('daterangepicker').setOptions(optionSet2, cb);
+    });
+    $('#destroy').click(function () {
+        $('#reportrange').data('daterangepicker').remove();
+    });
+
+}
+

+ 0 - 84
src/main/resources/static/js/daily_collect.js

@@ -862,90 +862,6 @@ function print() {
 }
 
 
-/**
- * 日期改变事件
- * @param callback 回调函数
- */
-function daterangepicker(callback) {
-
-    if (typeof ($.fn.daterangepicker) === 'undefined') {
-        return;
-    }
-    console.log('init_daterangepicker');
-
-    var cb = function (start, end, label) {
-        console.log(start.toISOString(), end.toISOString(), label);
-        $('#reportrange span').html(start.format('YYYY-MM-DD') + ' - ' + end.format('YYYY-MM-DD'));
-        callback();
-    };
-    var optionSet1 = {
-        //startDate: moment().subtract(29, 'days'),
-        startDate: moment(),
-        endDate: moment(),
-        minDate: '2012-01-01',
-        maxDate: nowString(),
-        dateLimit: {
-            days: 1200
-        },
-        showDropdowns: true,
-        showWeekNumbers: true,
-        timePicker: false,
-        timePickerIncrement: 1,
-        timePicker12Hour: true,
-        ranges: {
-            '今天': [moment(), moment()],
-            '昨天': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
-            '最近7天': [moment().subtract(6, 'days'), moment()],
-            '最近30天': [moment().subtract(29, 'days'), moment()],
-            '当月': [moment().startOf('month'), moment().endOf('month')],
-            '上个月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
-        },
-        opens: 'left',
-        buttonClasses: ['btn btn-default'],
-        applyClass: 'btn-small btn-primary',
-        cancelClass: 'btn-small',
-        format: 'YYYY-MM-DD',
-        separator: ' to ',
-        locale: {
-            applyLabel: '确定',
-            cancelLabel: '取消',
-            fromLabel: 'From',
-            toLabel: 'To',
-            customRangeLabel: '自定义',
-            daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'],
-            monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
-            firstDay: 1
-        }
-    };
-
-    //$('#reportrange span').html(moment().subtract(29, 'days').format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
-    $('#reportrange span').html(moment().format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
-    callback();
-    $('#reportrange').daterangepicker(optionSet1, cb);
-    $('#reportrange').on('show.daterangepicker', function () {
-        console.log("show event fired");
-    });
-    $('#reportrange').on('hide.daterangepicker', function () {
-        console.log("hide event fired");
-    });
-    $('#reportrange').on('apply.daterangepicker', function (ev, picker) {
-        console.log("apply event fired, start/end dates are " + picker.startDate.format('YYYY-MM-DD') + " to " + picker.endDate.format('YYYY-MM-DD'));
-    });
-    $('#reportrange').on('cancel.daterangepicker', function (ev, picker) {
-        console.log("cancel event fired");
-    });
-    $('#options1').click(function () {
-        $('#reportrange').data('daterangepicker').setOptions(optionSet1, cb);
-    });
-    $('#options2').click(function () {
-        $('#reportrange').data('daterangepicker').setOptions(optionSet2, cb);
-    });
-    $('#destroy').click(function () {
-        $('#reportrange').data('daterangepicker').remove();
-    });
-
-}
-
 
 
 /**

+ 0 - 83
src/main/resources/static/js/daily_repeat_print.js

@@ -868,89 +868,6 @@ function print() {
 }
 
 
-/**
- * 日期改变事件
- * @param callback 回调函数
- */
-function daterangepicker(callback) {
-
-    if (typeof ($.fn.daterangepicker) === 'undefined') {
-        return;
-    }
-    console.log('init_daterangepicker');
-
-    var cb = function (start, end, label) {
-        console.log(start.toISOString(), end.toISOString(), label);
-        $('#reportrange span').html(start.format('YYYY-MM-DD') + ' - ' + end.format('YYYY-MM-DD'));
-        callback();
-    };
-    var optionSet1 = {
-        //startDate: moment().subtract(29, 'days'),
-        startDate: moment(),
-        endDate: moment(),
-        minDate: '2012-01-01',
-        maxDate: nowString(),
-        dateLimit: {
-            days: 1200
-        },
-        showDropdowns: true,
-        showWeekNumbers: true,
-        timePicker: false,
-        timePickerIncrement: 1,
-        timePicker12Hour: true,
-        ranges: {
-            '今天': [moment(), moment()],
-            '昨天': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
-            '最近7天': [moment().subtract(6, 'days'), moment()],
-            '最近30天': [moment().subtract(29, 'days'), moment()],
-            '当月': [moment().startOf('month'), moment().endOf('month')],
-            '上个月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
-        },
-        opens: 'left',
-        buttonClasses: ['btn btn-default'],
-        applyClass: 'btn-small btn-primary',
-        cancelClass: 'btn-small',
-        format: 'YYYY-MM-DD',
-        separator: ' to ',
-        locale: {
-            applyLabel: '确定',
-            cancelLabel: '取消',
-            fromLabel: 'From',
-            toLabel: 'To',
-            customRangeLabel: '自定义',
-            daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'],
-            monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
-            firstDay: 1
-        }
-    };
-
-    //$('#reportrange span').html(moment().subtract(29, 'days').format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
-    $('#reportrange span').html(moment().format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
-    callback();
-    $('#reportrange').daterangepicker(optionSet1, cb);
-    $('#reportrange').on('show.daterangepicker', function () {
-        console.log("show event fired");
-    });
-    $('#reportrange').on('hide.daterangepicker', function () {
-        console.log("hide event fired");
-    });
-    $('#reportrange').on('apply.daterangepicker', function (ev, picker) {
-        console.log("apply event fired, start/end dates are " + picker.startDate.format('YYYY-MM-DD') + " to " + picker.endDate.format('YYYY-MM-DD'));
-    });
-    $('#reportrange').on('cancel.daterangepicker', function (ev, picker) {
-        console.log("cancel event fired");
-    });
-    $('#options1').click(function () {
-        $('#reportrange').data('daterangepicker').setOptions(optionSet1, cb);
-    });
-    $('#options2').click(function () {
-        $('#reportrange').data('daterangepicker').setOptions(optionSet2, cb);
-    });
-    $('#destroy').click(function () {
-        $('#reportrange').data('daterangepicker').remove();
-    });
-
-}
 
 
 /**

+ 63 - 0
src/main/resources/templates/bissinessReport.html

@@ -0,0 +1,63 @@
+<link rel="stylesheet" href="/thmz/css/bootstrap/css/bootstrap-select.css"/>
+<link rel="stylesheet" href="/thmz/css/bootstrap/css/daterangepicker.css"/>
+<link rel="stylesheet" href="/thmz/css/custom.min.css">
+<link rel="stylesheet" href="/thmz/css/toll_administration.css">
+<script src="/thmz/js/bootstrap-select.js"></script>
+<script src="/thmz/js/daterangepicker.js"></script>
+<script src="/thmz/js/excel/table2excel.js"></script>
+<script src="/thmz/js/common/date-util.js"></script>
+<script src="/thmz/js/bissinessReport.js"></script>
+<div class="row">
+    <div class="col-md-12 col-sm-12 col-xs-12">
+        <div class="x_panel">
+            <div class="panel-body">
+                <form id="formSearch" class="form-horizontal" autocomplete="off">
+                    <div class="form-group col-md-12 col-sm-12 col-xs-12">
+                        <!--<div class="col-md-6 col-sm-6 col-xs-12"></div>-->
+                        <label class="control-label col-md-1 col-sm-1 col-xs-12" for="timeParam">报表类型
+                        </label>
+                        <div class="col-md-2 col-sm-2 col-xs-12">
+                            <select class="form-control selectpicker show-tick" data-live-search="true" title="请选择"
+                                    id="timeParam">
+                            </select>
+                        </div>
+                        <label class="control-label col-md-1 col-sm-1 col-xs-12" for="execDept">科室
+                        </label>
+                        <div class="col-md-2 col-sm-2 col-xs-12">
+                            <select class="form-control selectpicker show-tick" data-live-search="true" title="请选择"
+                                    id="execDept">
+                            </select>
+                        </div>
+                        <label class="control-label col-md-1 col-sm-1 col-xs-12" for="reportrange"> 核算时间
+                        </label>
+                        <div class="col-md-2 col-sm-2 col-xs-12">
+                            <div id="reportrange" class="pull-right"
+                                 style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc">
+                                <i class="glyphicon glyphicon-calendar fa fa-calendar"></i>
+                                <span>December 30, 2014 - January 28, 2015</span> <b class="caret"></b>
+                            </div>
+                        </div>
+                        <div class="col-md-2 col-sm-2 col-xs-12" style="text-align:left;margin-left: 50px;">
+                            <button type="button" id="btn_clean" class="btn btn-primary"
+                                    title="重置"><i class="fa fa-rotate-left"></i>
+                            </button>
+                            <button type="button" id="btn_query" class="btn btn-primary"
+                                    title="查询"><i class="fa fa-search"></i>
+                            </button>
+                            <button type="button" id="btn_excel" class="btn btn-primary"
+                                    title="导出EXCEL"><i class="fa fa-file-excel-o"></i>
+                            </button>
+                        </div>
+                    </div>
+
+
+                </form>
+            </div>
+            <div style="overflow:scroll;max-height: 900px;">
+                <table id="tb_table" class="table table-striped table-bordered bulk_action"></table>
+            </div>
+        </div>
+    </div>
+</div>
+
+

+ 1 - 0
src/main/resources/templates/daily_collect.html

@@ -4,6 +4,7 @@
 <link rel="stylesheet" href="/thmz/css/toll_administration.css">
 <script src="/thmz/js/bootstrap-select.js"></script>
 <script src="/thmz/js/daterangepicker.js"></script>
+<script src="/thmz/js/common/date-util.js"></script>
 <script src="/thmz/js/daily_collect.js"></script>
 <script src="/thmz/js/LodopFuncs.js"></script>
 <!-- 打印的样式-->

+ 1 - 0
src/main/resources/templates/daily_repeat_print.html

@@ -4,6 +4,7 @@
 <link rel="stylesheet" href="/thmz/css/toll_administration.css">
 <script src="/thmz/js/bootstrap-select.js"></script>
 <script src="/thmz/js/daterangepicker.js"></script>
+<script src="/thmz/js/common/date-util.js"></script>
 <script src="/thmz/js/daily_repeat_print.js"></script>
 <script src="/thmz/js/LodopFuncs.js"></script>
 <!-- 打印的样式-->

+ 1 - 0
src/main/resources/templates/menu.html

@@ -81,6 +81,7 @@
                                     <li><a href="#" onclick="changeContent('/thmz/daily-collect')">日结汇总</a></li>
                                     <li><a href="#" onclick="changeContent('/thmz/mzsrmx')">门诊明细收入</a></li>
                                     <li><a href="#" onclick="changeContent('/thmz/mzhbtj')">门诊号别统计</a></li>
+                                    <li><a href="#" onclick="changeContent('/thmz/bissinessReport')">门诊科室核算报表</a></li>
                                 </ul>
                             </li>
                             <li><a><i class="fa fa-medkit"></i> 药品管理 <span class="fa fa-chevron-down"></span></a>

+ 1 - 1
src/main/resources/templates/mzsrmx.html

@@ -25,7 +25,7 @@
                                     id="timeParam">
                             </select>
                         </div>
-                        <label class="control-label col-md-1 col-sm-1 col-xs-12" for="reportrange"> 日结时间
+                        <label class="control-label col-md-1 col-sm-1 col-xs-12" for="reportrange"> 查询时间
                         </label>
                         <div class="col-md-3 col-sm-3 col-xs-12">
                             <div id="reportrange" class="pull-right"