From bfb0c580575aa9b6f07c90d900ddbfb149df8fae Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 24 Jan 2026 17:32:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BB=E7=96=97=E8=A1=A5=E5=8A=A9=E6=B1=87?= =?UTF-8?q?=E6=80=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MedicalStatisticsController.java | 241 ++++++++++ .../medical/param/MedicalPageForm.java | 1 + .../medical/statistics/index.html | 411 ++++++++++++++++++ 3 files changed, 653 insertions(+) create mode 100644 src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalStatisticsController.java create mode 100644 src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/statistics/index.html diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalStatisticsController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalStatisticsController.java new file mode 100644 index 00000000..89321b9b --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalStatisticsController.java @@ -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 pagination = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + List 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 pagination = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + List list = medicalApplyService.getCostList(pagination.getList()); + for (NutMap map : list) { + boolean isMajor = map.getBoolean("isMajorDiseases"); + map.put("isMajorDiseasesDisplay", isMajor ? "是" : "否"); + } + List 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); + } + } +} + + + + diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/param/MedicalPageForm.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/param/MedicalPageForm.java index e4823fac..5ff8cbb4 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/param/MedicalPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/param/MedicalPageForm.java @@ -22,5 +22,6 @@ public class MedicalPageForm extends PageForm { private Boolean approval; private String unionId; private String unitId; + private String aidFundMemberUserType; } diff --git a/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/statistics/index.html b/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/statistics/index.html new file mode 100644 index 00000000..4ecd0ce3 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/statistics/index.html @@ -0,0 +1,411 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 导出 + + 重疾 + 普通 + + + + + + + + + + + + + + + + + + +
+ + + +