package thyyxxk.webserver.service.reports;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.reports.KeShiShouRuDao;
import thyyxxk.webserver.entity.ResultVo;
import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
import thyyxxk.webserver.utils.ToolExcel;
import thyyxxk.webserver.entity.querydata.KeShiFeiiYongTongJi;
import thyyxxk.webserver.entity.querydata.QueryDrugsAndProjects;
import thyyxxk.webserver.service.PublicServer;
import thyyxxk.webserver.utils.*;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
/**
*
* 描述: 各个科室收入的情况
*
*
* @author xc
* @date 2021-10-19 14:50
*/
@Service
@Slf4j
public class KeShiShouRuServer {
private final KeShiShouRuDao dao;
private final PublicServer publicServer;
public KeShiShouRuServer(KeShiShouRuDao dao, PublicServer publicServer) {
this.dao = dao;
this.publicServer = publicServer;
}
static class PersonComparator implements Comparator {
@Override
public int compare(KeShiFeiiYongTongJi p1, KeShiFeiiYongTongJi p2) {
if (p1.getChargeDateString() != null && p2.getChargeDateString() != null) {
Date o1 = DateUtil.parse(p1.getChargeDateString(), DateUtil.DATE);
Date o2 = DateUtil.parse(p2.getChargeDateString(), DateUtil.DATE);
assert o1 != null;
return o1.compareTo(o2);
}
return -1;
}
}
public ResultVo getKeShouFei(QueryDrugsAndProjects param) {
if (StringUtil.isBlank(param.getStartTime()) || StringUtil.isBlank(param.getEndTime())) {
return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "开始时间和结束时间为空 ∑(っ°Д°;)っ");
}
KeShiFeiiYongTongJi qp = new KeShiFeiiYongTongJi();
log.info("查询科室收费统计 ==> 执行科室:{},开始{},结束:{}。项目编码:{},录入人:{},申请科室:{},总数:{},当前页:{},页大小:{}", param.getExecUnitList(), param.getStartTime(), param.getEndTime(), param.getChargeCodeMx(), param.getOpId(), param.getReqDeptCode(), param.getTotal(), param.getCurrentPage(), param.getPageSize());
List keShiLieBiao = publicServer.getKeShiLieBiaoList(param.getExecUnitList());
GetDropdownBox renHuanCodeHeCodeRs = new GetDropdownBox();
if (StringUtil.notBlank(param.getOpId())) {
renHuanCodeHeCodeRs = dao.huoQuRenYuanDeCodeHeCodeRs(param.getOpId());
}
Page page;
if (param.getTotal() > 0) {
page = new Page<>(param.getCurrentPage(), param.getPageSize(), false);
} else {
page = new Page<>(param.getCurrentPage(), param.getPageSize());
}
QueryWrapper> qw = new QueryWrapper<>();
if (param.getLaiYuan() == 0) {
qw.ge("charge_date", param.getStartTime());
qw.le("charge_date", param.getEndTime());
if (ListUtil.notBlank(keShiLieBiao)) {
qw.in("a.exec_unit", keShiLieBiao);
}
if (StringUtil.notBlank(param.getChargeCodeMx())) {
qw.eq("a.charge_code_mx", param.getChargeCodeMx());
}
if (StringUtil.notBlank(renHuanCodeHeCodeRs.getCode())) {
qw.eq("a.op_id_code", renHuanCodeHeCodeRs.getCode());
}
if (StringUtil.notBlank(param.getReqDeptCode())) {
qw.eq("a.ward_code", param.getReqDeptCode());
}
switch (param.getFenLei()) {
case 0:
qw.groupBy("CONVERT(varchar(100), charge_date, 23)");
qp.setData(dao.getZhuYuanFeiYongXiangMuFenLeiV2(page,
qw,
" CONVERT(varchar(100), charge_date, 23) charge_date_string,"));
qp.setTotal(page.getTotal());
break;
case 1:
qw.groupBy("op_id_code");
qp.setData(dao.getZhuYuanFeiYongXiangMuFenLeiV2(page,
qw,
"op_id_code,opName = (select rtrim(name) from a_employee_mi where code = op_id_code ),"));
qp.setTotal(page.getTotal());
break;
case 2:
qw.groupBy("charge_code_mx,serial");
qp.setData(dao.getZhuYuanFeiYongXiangMuFenLeiV2(page,
qw,
"charge_code_mx,charge_code_name =(select dbo.get_charge_name(charge_code_mx, serial)),"));
qp.setTotal(page.getTotal());
break;
case 3:
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;
case 4:
qw.groupBy("a.ward_code");
qp.setData(dao.getZhuYuanFeiYongXiangMuFenLeiV2(page,
qw,
"a.ward_code,wardCodeName = (select rtrim(name) from zd_unit_code where code = a.ward_code),"));
qp.setTotal(page.getTotal());
break;
case 5:
qw.groupBy("a.inpatient_no,a.admiss_times");
qp.setData(dao.getZhuYuanFeiYongXiangMuFenLeiV2(page,
qw,
"a.inpatient_no as patient," +
"(select rtrim(name) from a_patient_mi where a.inpatient_no = a_patient_mi.inpatient_no) as patient_name," +
"a.admiss_times as times,"));
qp.setTotal(page.getTotal());
break;
default:
break;
}
} else {
if (StringUtil.notBlank(param.getStartTime())) {
qw.ge("confirm_time", param.getStartTime());
qw.le("confirm_time", param.getEndTime());
}
if (ListUtil.notBlank(param.getExecUnitList())) {
qw.in("exec_dept", param.getExecUnitList());
}
if (StringUtil.notBlank(param.getChargeCodeMx())) {
qw.eq("charge_item_code", param.getChargeCodeMx());
}
if (StringUtil.notBlank(param.getCode())) {
qw.eq("confirm_id", param.getCode());
}
if (StringUtil.notBlank(param.getReqDeptCode())) {
qw.eq("warn_dept", param.getReqDeptCode());
}
switch (param.getFenLei()) {
case 0:
qw.groupBy("CONVERT(varchar(100),confirm_time, 23)");
qp.setData(dao.getMenZhenFeiYongXiangMuFenLeiV2(
page,
qw,
"CONVERT(varchar(100),confirm_time, 23) as charge_date_string,"
));
qp.setTotal(page.getTotal());
break;
case 1:
qw.groupBy("confirm_id");
qp.setData(
dao.getMenZhenFeiYongXiangMuFenLeiV2(page,
qw,
"confirm_id,opName = (select rtrim(name) from a_employee_mi where code = confirm_id),")
);
qp.setTotal(page.getTotal());
break;
case 2:
qw.groupBy("charge_item_code,group_no");
qp.setData(
dao.getMenZhenFeiYongXiangMuFenLeiV2(page,
qw,
"charge_item_code as charge_code_mx,charge_code_name =(select dbo.get_charge_name(charge_item_code, group_no)),")
);
qp.setTotal(page.getTotal());
break;
case 3:
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;
case 4:
qw.groupBy("warn_dept");
qp.setData(dao.getMenZhenFeiYongXiangMuFenLeiV2(
page,
qw,
"warn_dept as wardCode,wardCodeName = (select rtrim(name) from zd_unit_code where code = warn_dept),"));
qp.setTotal(page.getTotal());
break;
case 5:
qw.groupBy("patient_id,times,name");
qp.setData(dao.getMenZhenFeiYongXiangMuFenLeiV2(
page,
qw,
"rtrim(patient_id) as patient,times,rtrim(name) as patient_name,"));
qp.setTotal(page.getTotal());
break;
default:
break;
}
}
return ResultVoUtil.success(qp);
}
public void exportExcel(HttpServletResponse response, QueryDrugsAndProjects param) {
double pageSize = 1000;
double currentPage = param.getTotal() / pageSize;
int fenDuan = (int) Math.ceil(currentPage);
List keShiFeiiYongTongJisList = new ArrayList<>();
param.setPageSize(1000);
for (long i = 0; i < fenDuan; i++) {
param.setCurrentPage(i + 1);
keShiFeiiYongTongJisList.addAll(getKeShouFei(param).getData().getData());
}
ToolExcel excel = new ToolExcel();
switch (param.getFenLei()) {
case 0:
excel.addTitle("chargeDateString", "收费日期", 21);
break;
case 1:
excel.addTitle("opName", "录入人");
break;
case 2:
excel.addTitle("chargeCodeMx", "项目编码")
.addTitle("chargeCodeName", "项目名称", 30);
break;
case 3:
excel.addTitle("patientName", "姓名")
.addTitle("patient", "住院号")
.addTitle("times", "次数")
.addTitle("chargeCodeMx", "项目编码")
.addTitle("chargeCodeName", "项目名称", 30)
.addTitle("chargeDate", "执行日期", 21)
.addTitle("chargeDateString", "收费日期", 21)
.addTitle("opName", "录入人")
.addTitle("execUnitName", "执行科室")
.addTitle("wardCodeName", "申请科室");
break;
case 4:
excel.addTitle("wardCodeName", "申请科室");
break;
case 5:
excel.addTitle("patientName", "姓名")
.addTitle("patient", "住院号")
.addTitle("times", "次数");
break;
}
excel.addTitle("chargeFee", "金额")
.addTitle("chargeAmount", "数量")
.addTitle("source", "来源")
.exportExcel(keShiFeiiYongTongJisList, response);
}
}