医疗补助汇总

This commit is contained in:
=
2026-01-24 17:32:52 +08:00
parent 1634c29758
commit bfb0c58057
3 changed files with 653 additions and 0 deletions
@@ -0,0 +1,241 @@
package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.param.MedicalPageForm;
import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalApplyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
* @author : hongqiwei
* @description :医疗互助汇总
* @createDate : 2026/1/24 10:20
*/
@IocBean
@At("/platform/medicalMutualAid/medical/statistics")
@Api("医疗互助汇总")
@Ok("json:full")
@Slf4j
public class MedicalStatisticsController {
@Inject
private MedicalApplyService medicalApplyService;
@Inject
private FlowEngine flowEngine;
@At("")
@Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/medical/statistics/index.html")
@SaCheckPermission("medicalMutualAid.medical.statistics")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("medicalMutualAid.medical.statistics")
public Result pageData(MedicalPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.*,
type.diseaseName,
type.isMajorDiseases,
us.username,
us.loginname,
us.unitName,
us.unionName,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable,
IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke,
(SELECT MAX(id) FROM wf_process_task WHERE processInstanceId = ins.id AND taskName = 'startTask') AS startTaskId
FROM
medical_apply info
LEFT JOIN medical_disease_type type ON info.diseaseId = type.id
LEFT JOIN aid_fund_member_pay member ON member.userId = info.userId
LEFT JOIN vw_user us ON us.id = info.userId
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id
AND t.taskState = 10
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
$condition
""");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("us.loginname", pageForm.getSearchKeyword());
seg.orLike("us.username", pageForm.getSearchKeyword());
cnd.and(seg);
}
cnd.andEX("year(info.applyTime)", "=", pageForm.getYear());
cnd.andEX("info.diseaseId", "=", pageForm.getDiseaseId());
cnd.andEX("us.unionId", "=", pageForm.getUnionId());
cnd.andEX("us.unitId", "=", pageForm.getUnitId());
cnd.andEX("member.aidFundMemberUserType", "=", pageForm.getAidFundMemberUserType());
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
} else {
cnd.desc("info.applyTime");
}
cnd.and("ins.state", "=", 20);
cnd.groupBy("info.id");
sql.setCondition(cnd);
Pagination<NutMap> pagination = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> costList = medicalApplyService.getCostList(pagination.getList());
pagination.setList(costList);
return Result.success(pagination);
}
@At
@Ok("void")
@ApiOperation("分页查询")
@SaCheckPermission("medicalMutualAid.medical.statistics")
public void doExport(MedicalPageForm pageForm, Boolean isMajorDiseases, HttpServletResponse response) {
Sql sql = Sqls.create("""
SELECT
info.*,
type.diseaseName,
type.diseaseCode,
type.isMajorDiseases,
us.username,
us.loginname,
us.unitName,
us.unitCode,
us.unionName,
us.unionCode,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable,
IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke,
(SELECT MAX(id) FROM wf_process_task WHERE processInstanceId = ins.id AND taskName = 'startTask') AS startTaskId
FROM
medical_apply info
LEFT JOIN medical_disease_type type ON info.diseaseId = type.id
LEFT JOIN aid_fund_member_pay member ON member.userId = info.userId
LEFT JOIN vw_user us ON us.id = info.userId
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id
AND t.taskState = 10
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
$condition
""");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("us.loginname", pageForm.getSearchKeyword());
seg.orLike("us.username", pageForm.getSearchKeyword());
cnd.and(seg);
}
cnd.andEX("year(info.applyTime)", "=", pageForm.getYear());
cnd.andEX("info.diseaseId", "=", pageForm.getDiseaseId());
cnd.andEX("us.unionId", "=", pageForm.getUnionId());
cnd.andEX("us.unitId", "=", pageForm.getUnitId());
cnd.andEX("member.aidFundMemberUserType", "=", pageForm.getAidFundMemberUserType());
cnd.andEX("type.isMajorDiseases", "=", isMajorDiseases);
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
} else {
cnd.desc("info.applyTime");
}
cnd.and("ins.state", "=", 20);
cnd.groupBy("info.id");
sql.setCondition(cnd);
Pagination<NutMap> pagination = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
List<NutMap> list = medicalApplyService.getCostList(pagination.getList());
for (NutMap map : list) {
boolean isMajor = map.getBoolean("isMajorDiseases");
map.put("isMajorDiseasesDisplay", isMajor ? "" : "");
}
List<ExcelExportEntity> excelExportEntities = new ArrayList<>();
excelExportEntities.add(new ExcelExportEntity("姓名","username",20));
excelExportEntities.add(new ExcelExportEntity("工号","loginname",20));
excelExportEntities.add(new ExcelExportEntity("单位","unitName",20));
excelExportEntities.add(new ExcelExportEntity("单位编码","unitCode",20));
excelExportEntities.add(new ExcelExportEntity("工会","unionName",20));
excelExportEntities.add(new ExcelExportEntity("工会编码","unionCode",20));
excelExportEntities.add(new ExcelExportEntity("疾病名称","diseaseName",20));
excelExportEntities.add(new ExcelExportEntity("疾病编码","diseaseCode",20));
excelExportEntities.add(new ExcelExportEntity("是否重疾","isMajorDiseasesDisplay",20));
excelExportEntities.add(new ExcelExportEntity("申请时间","applyTime",20));
excelExportEntities.add(new ExcelExportEntity("申请次数","applyNum",20));
excelExportEntities.add(new ExcelExportEntity("住院医疗费总额(不含门诊)","hospitalSumMoney$",20));
excelExportEntities.add(new ExcelExportEntity("实际报销总额","reimbursementMoney$",20));
excelExportEntities.add(new ExcelExportEntity("(住院医疗)允许报销范围内个人承担部分金额","singleBearMoney$",20));
excelExportEntities.add(new ExcelExportEntity("(住院医疗)自费部分金额","personExpenseMoney$",20));
excelExportEntities.add(new ExcelExportEntity("重病门诊自费金额","outpatientServiceMoney$",20));
excelExportEntities.add(new ExcelExportEntity("非住院肾衰竭治疗、靶向药金额","bxyMoney$",20));
excelExportEntities.add(new ExcelExportEntity("合计","totalMoney",20));
excelExportEntities.add(new ExcelExportEntity("预测补助金额","forecastSubsidyMoney",20));
excelExportEntities.add(new ExcelExportEntity("补助金额","subsidyMoney",20));
excelExportEntities.add(new ExcelExportEntity("爱心基金","loveSubsidyMoney",20));
String exportYear = String.valueOf(pageForm.getYear());
if (StrUtil.isBlank(exportYear)) {
exportYear = String.valueOf(java.time.Year.now().getValue());
}
String fileName = exportYear + "年补助人员列表.xlsx";
try {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, excelExportEntities, list);
CommonDownloadUtil.download(fileName, workbook, response);
} catch (Exception e) {
log.error("导出补助人员列表失败", e);
}
}
}
@@ -22,5 +22,6 @@ public class MedicalPageForm extends PageForm {
private Boolean approval;
private String unionId;
private String unitId;
private String aidFundMemberUserType;
}