From d53b63f6ac3a339cc17ed7436ad2f199e0fc7a61 Mon Sep 17 00:00:00 2001 From: zhouhefeng Date: Sat, 24 Jan 2026 17:44:19 +0800 Subject: [PATCH] commit --- .../controller/MedicalApplyController.java | 42 ++- .../MedicalCalculateMoneyController.java | 190 ++++++++++ .../MedicalFoundationAuditController.java | 137 +++---- .../controller/MedicalMineController.java | 23 +- .../MedicalRetirementAuditController.java | 59 +++ .../MedicalSchoolHospitalAuditController.java | 68 +--- .../MedicalUnionAuditController.java | 64 +--- .../medical/model/MedicalMoneyDetail.java | 65 ++++ .../medical/param/MedicalPageForm.java | 1 + .../medical/service/MedicalApplyService.java | 2 +- .../medical/service/MedicalAuditService.java | 14 + .../service/MedicalCalculateMoneyService.java | 17 + .../service/impl/MedicalApplyServiceImpl.java | 36 +- .../service/impl/MedicalAuditServiceImpl.java | 96 +++++ .../MedicalCalculateMoneyServiceImpl.java | 165 +++++++++ .../medicalMutualAid/medical/apply/index.html | 17 +- .../medical/calculateMoney/index.html | 341 ++++++++++++++++++ .../medical/foundationAudit/index.html | 10 + .../medical/retirementAudit/index.html | 182 ++++++++++ 19 files changed, 1316 insertions(+), 213 deletions(-) create mode 100644 src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalCalculateMoneyController.java create mode 100644 src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalRetirementAuditController.java create mode 100644 src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/model/MedicalMoneyDetail.java create mode 100644 src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/MedicalAuditService.java create mode 100644 src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/MedicalCalculateMoneyService.java create mode 100644 src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/impl/MedicalAuditServiceImpl.java create mode 100644 src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/impl/MedicalCalculateMoneyServiceImpl.java create mode 100644 src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/calculateMoney/index.html create mode 100644 src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/retirementAudit/index.html diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalApplyController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalApplyController.java index 7585e6ac..15c2ec03 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalApplyController.java @@ -19,6 +19,8 @@ import com.budwk.app.flow.service.FlowCommonService; import com.budwk.app.sys.models.Sys_user; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.web.commons.base.Globals; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.aidFund.model.AidFundMemberPay; import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalApply; import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalApplyCost; import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalDiseaseType; @@ -40,7 +42,9 @@ import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; +import java.util.Date; import java.util.List; +import java.util.Map; /** * @author zhf @@ -126,13 +130,20 @@ public class MedicalApplyController { cnd.and("pay.`year`", "=", applyYear); if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) { SqlExpressionGroup group1 = new SqlExpressionGroup(); - if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { - group1.and("us.unionId", "=", SecurityUtil.getUnionId()); + if (AuthUtil.hasRole(RoleConstant.RETIREMENT_WORKPLACE.name())) { + group1.or("us.aidFundMemberUserType", "=", "离退休人员"); } - if (AuthUtil.hasRoleOr(RoleConstant.RETIREMENT_WORKPLACE.name())) { - group1.and("us.aidFundMemberUserType", "=", "离退休人员"); + if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { + SqlExpressionGroup group2 = new SqlExpressionGroup(); + group2.and("us.unionid", "=", SecurityUtil.getUnionId()); + group2.and("us.aidFundMemberUserType", "!=", "离退休人员"); + group1.or(group2); + } else { + cnd.and("us.id", "=", SecurityUtil.getUserId()); + } + if (!group1.isEmpty()){ + cnd.and(group1); } - cnd.and(group1); } sql.setCondition(cnd); @@ -242,10 +253,29 @@ public class MedicalApplyController { @ApiOperation("查询是否有进行中的申请") @SaCheckPermission("medicalMutualAid.medical.apply") public Result getIsAfootMedicalApply(String userId, String id) { + Sys_user user = medicalApplyService.dao().fetch(Sys_user.class, userId); + if (StrUtil.isBlank(id)){ + String medicalApplyEndTime = Globals.MyConfig.getString("MedicalApplyEndTime"); + if (StrUtil.isBlank(medicalApplyEndTime)) { + return Result.error("请先配置医疗补助系统申报截止时间!"); + } + + Date deadlineEnd = DateUtil.endOfDay(DateUtil.parse(medicalApplyEndTime, "yyyy-M-d")); + if (System.currentTimeMillis() > deadlineEnd.getTime()) { + return Result.error("医疗补助系统申报已截止!"); + } + } + + int count = medicalApplyService.dao().count(AidFundMemberPay.class, Cnd.where(AidFundMemberPay::getUserId, "=", userId) + .and(AidFundMemberPay::getIsPayed, "=", 1) + .and(AidFundMemberPay::getYear, "=", DateUtil.thisYear())); + if (count == 0) { + return Result.error("【%s】当前年度暂未缴费,无法申请!".formatted(user.getUsername())); + } Boolean isAfootMedicalApply = medicalApplyService.getIsAfootMedicalApply(userId, id); if (isAfootMedicalApply) { - Sys_user user = medicalApplyService.dao().fetch(Sys_user.class, userId); + return Result.error("【%s】有一条进行中的申请,请到“我的补助”菜单中查看。".formatted(user.getUsername())); } return Result.success(); diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalCalculateMoneyController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalCalculateMoneyController.java new file mode 100644 index 00000000..250b00de --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalCalculateMoneyController.java @@ -0,0 +1,190 @@ +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 com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalApply; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalMoneyDetail; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalCalculateMoneyService; +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.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; +import org.nutz.lang.Lang; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @author zhf + * @date 2026/1/24 11:10 + * @description 计算补助 + */ +@IocBean +@At("/platform/medicalMutualAid/medical/calculateMoney") +@Api("医疗互助补助测算") +@Ok("json:full") +@Slf4j +public class MedicalCalculateMoneyController { + + @Inject + private MedicalCalculateMoneyService medicalCalculateMoneyService; + + @At("") + @Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/medical/calculateMoney/index.html") + @SaCheckPermission("medicalMutualAid.medical.calculateMoney") + public void index() { + } + + @At + @ApiOperation("查询第一步输入金额") + @SaCheckPermission("medicalMutualAid.medical.calculateMoney") + public Result getData() { + NutMap data = medicalCalculateMoneyService.getData(); + return Result.success(data); + } + + @At + @ApiOperation("查询所有的申请数据") + @SaCheckPermission("medicalMutualAid.medical.calculateMoney") + public Result getApplyData(double ratio) { + List applyData = medicalCalculateMoneyService.getApplyData(ratio); + return Result.success(applyData); + } + + + @At + @ApiOperation("按比例修改补助金额") + @Aop(TransAop.READ_COMMITTED) + @SLog(tag = "医疗补助系统-医疗补助预测", msg = "按比例修改补助金额") + @SaCheckPermission("medicalMutualAid.medical.calculateMoney") + public Result doHandle(String data, float ratio, double aidFund, double inComeSum, long loveSubsidyMoney){ +//获取申请最新年份 + Sql yearSql = Sqls.create("SELECT MAX(YEAR(applyTime)) AS currentYear FROM medical_apply"); + yearSql.setCallback(Sqls.callback.longs()); + medicalCalculateMoneyService.execute(yearSql); + Integer year = yearSql.getInt(); + + List list = Json.fromJsonAsList(MedicalApply.class, data); + list.forEach(v -> { + v.setSubsidyMoney(v.getForecastSubsidyMoney()); + }); + medicalCalculateMoneyService.updateIgnoreNull(list); + //补助总额 + BigDecimal subsidyMoney = list.stream() + .map(MedicalApply::getForecastSubsidyMoney) + .filter(Objects::nonNull) // 防御性:避免 null + .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal incomeRounded = BigDecimal.valueOf(Math.round(inComeSum)); + BigDecimal thisYearBalance = incomeRounded + .subtract(subsidyMoney) + .subtract(BigDecimal.valueOf(loveSubsidyMoney)); + + + MedicalMoneyDetail moneyDetail = medicalCalculateMoneyService.dao().fetch(MedicalMoneyDetail.class, Cnd.where("year", "=", year)); + if (Lang.isEmpty(moneyDetail)) { + moneyDetail = new MedicalMoneyDetail(); + moneyDetail.setYear(year); + moneyDetail.setAidFund(new BigDecimal(aidFund)); + moneyDetail.setRatio(ratio); + moneyDetail.setLastYearBalance(thisYearBalance); + medicalCalculateMoneyService.insert(moneyDetail); + } else { + moneyDetail.setAidFund(new BigDecimal(aidFund)); + moneyDetail.setRatio(ratio); + moneyDetail.setLastYearBalance(thisYearBalance); + medicalCalculateMoneyService.updateIgnoreNull(moneyDetail); + } + return Result.success(); + } + + + @At + @Ok("void") + @SaCheckPermission("medicalMutualAid.medical.calculateMoney") + public void doExport(double ratio, HttpServletResponse response){ + List list = medicalCalculateMoneyService.getApplyData(ratio); + + list.forEach(l -> { + l.put("majorDisease", l.getBoolean("isMajorDisease") ? "是" : "否"); + }); + List exportEntities = new ArrayList<>(); + exportEntities.add(new ExcelExportEntity("姓名", "username", 20)); + exportEntities.add(new ExcelExportEntity("工号", "loginname", 20)); + exportEntities.add(new ExcelExportEntity("所属单位", "unitName", 20)); + exportEntities.add(new ExcelExportEntity("所属分工会", "unionName", 20)); + exportEntities.add(new ExcelExportEntity("疾病种类", "diseaseName", 20)); + exportEntities.add(new ExcelExportEntity("重大疾病", "majorDisease", 20)); + exportEntities.add(new ExcelExportEntity("申请时间", "applyTime", 20)); + exportEntities.add(new ExcelExportEntity("申请次数", "applyNum", 20)); + + exportEntities.add(new ExcelExportEntity("起扣时间", "aidFundDeductTime", 20)); + exportEntities.add(new ExcelExportEntity("缴费年数", "yearsSinceDeduct", 20)); + ExcelExportEntity hospitalSumMoneyExcelExportEntity = new ExcelExportEntity("住院医疗总额(不含门诊)", "hospitalSumMoney$", 20); + hospitalSumMoneyExcelExportEntity.setType(10); + exportEntities.add(hospitalSumMoneyExcelExportEntity); + ExcelExportEntity reimbursementMoneyExcelExportEntity = new ExcelExportEntity("实际报销总额", "reimbursementMoney$", 20); + reimbursementMoneyExcelExportEntity.setType(10); + exportEntities.add(reimbursementMoneyExcelExportEntity); + ExcelExportEntity singleBearMoneyExcelExportEntity = new ExcelExportEntity("(住院医疗)允许报销范围内个人承担部分总额", "singleBearMoney$", 20); + singleBearMoneyExcelExportEntity.setType(10); + exportEntities.add(singleBearMoneyExcelExportEntity); + ExcelExportEntity personExpenseMoneyExcelExportEntity = new ExcelExportEntity("(住院医疗)自费部分总额", "personExpenseMoney$", 20); + personExpenseMoneyExcelExportEntity.setType(10); + exportEntities.add(personExpenseMoneyExcelExportEntity); + ExcelExportEntity outpatientServiceMoneyExcelExportEntity = new ExcelExportEntity("重病门诊自费金额", "outpatientServiceMoney$", 20); + outpatientServiceMoneyExcelExportEntity.setType(10); + exportEntities.add(outpatientServiceMoneyExcelExportEntity); + ExcelExportEntity bxyMoneyExcelExportEntity = new ExcelExportEntity("非住院肾衰竭治疗、靶向药", "bxyMoney$", 20); + bxyMoneyExcelExportEntity.setType(10); + exportEntities.add(bxyMoneyExcelExportEntity); + ExcelExportEntity totalMoneyExcelExportEntity = new ExcelExportEntity("合计金额", "totalMoney", 20); + totalMoneyExcelExportEntity.setType(10); + exportEntities.add(totalMoneyExcelExportEntity); + ExcelExportEntity loveSubsidyMoneyExcelExportEntity = new ExcelExportEntity("爱心补助", "loveSubsidyMoney", 20); + loveSubsidyMoneyExcelExportEntity.setType(10); + exportEntities.add(loveSubsidyMoneyExcelExportEntity); + ExcelExportEntity subsidyMoneyExcelExportEntity = new ExcelExportEntity("当前补助金额", "subsidyMoney", 20); + subsidyMoneyExcelExportEntity.setType(10); + exportEntities.add(subsidyMoneyExcelExportEntity); + ExcelExportEntity ExcelExportEntityForecastSubsidyMoney = new ExcelExportEntity("按" + ratio + "%补助金额", "forecastSubsidyMoney", 20); + ExcelExportEntityForecastSubsidyMoney.setType(10); + exportEntities.add(ExcelExportEntityForecastSubsidyMoney); + ExcelExportEntity medicalSubsidyMoneyExcelExportEntity = new ExcelExportEntity("以往累计补助金额", "medicalSubsidyMoney", 20); + medicalSubsidyMoneyExcelExportEntity.setType(10); + exportEntities.add(medicalSubsidyMoneyExcelExportEntity); + try { + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list); + CommonDownloadUtil.download("测算补助金额汇总表.xlsx", workbook, response); + }catch (Exception e){ + e.printStackTrace(); + } + + + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalFoundationAuditController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalFoundationAuditController.java index 913e9772..4e93b213 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalFoundationAuditController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalFoundationAuditController.java @@ -1,11 +1,17 @@ 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.lang.Dict; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; 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.enums.ProcessTaskStateEnum; import com.budwk.app.flow.service.FlowCommonService; @@ -13,9 +19,11 @@ import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalApplyCost; import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.param.MedicalPageForm; import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalApplyService; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalAuditService; 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.aop.interceptor.ioc.TransAop; import org.nutz.dao.Chain; import org.nutz.dao.Cnd; @@ -31,6 +39,8 @@ import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; import java.util.List; /** @@ -40,13 +50,15 @@ import java.util.List; */ @IocBean @At("/platform/medicalMutualAid/medical/foundationAudit") -@Api("医疗互助校互管会审核") +@Api("医疗互助互管会审核") @Ok("json:full") @Slf4j public class MedicalFoundationAuditController { @Inject private MedicalApplyService medicalApplyService; + @Inject + private MedicalAuditService medicalAuditService; @Inject private FlowCommonService flowCommonService; @@ -61,70 +73,9 @@ public class MedicalFoundationAuditController { @ApiOperation("分页查询") @SaCheckPermission("medicalMutualAid.medical.foundationAudit") 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, - IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, - IF(rt.id IS NOT NULL, 1, 0) AS canRevoke - FROM - wf_process_task t - LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId - LEFT JOIN medical_apply info ON info.id = ins.businessNo - LEFT JOIN medical_disease_type type ON info.diseaseId = type.id - LEFT JOIN vw_user us ON us.id = info.userId - LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id - LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 - LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 - $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.and("t.taskName", "=", "cd560356-cc70-48b5-8d99-ff9bd3505869"); - cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); - - if (pageForm.getApproval()) { - cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); - } else { - cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); - } - - if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { - cnd.desc("info.applyTime"); - } else { - cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); - } - cnd.groupBy("t.id"); - sql.setCondition(cnd); + Sql sql = medicalAuditService.getAuditSql(pageForm, cnd); Pagination pageVO = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); List costList = medicalApplyService.getCostList(pageVO.getList()); pageVO.setList(costList); @@ -166,9 +117,67 @@ public class MedicalFoundationAuditController { @ApiOperation("预测补助金额") @SaCheckPermission("medicalMutualAid.medical.foundationAudit") public Result calcMedicalMoney(String id, String diseaseId) { - NutMap nutMap = medicalApplyService.calcMedicalMoney(id, diseaseId); + NutMap nutMap = medicalApplyService.calcMedicalMoney(id, diseaseId, 0); return Result.success(nutMap); } + @At + @Ok("void") + @SaCheckPermission("medicalMutualAid.medical.calculateMoney") + public void doExport(MedicalPageForm pageForm, HttpServletResponse response){ + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "cd560356-cc70-48b5-8d99-ff9bd3505869"); + Sql sql = medicalAuditService.getAuditSql(pageForm, cnd); + List list = medicalApplyService.listMap(sql); + List costList = medicalApplyService.getCostList(list); + + costList.forEach(l -> { + l.put("majorDisease", l.getBoolean("isMajorDisease") ? "是" : "否"); + }); + List exportEntities = new ArrayList<>(); + exportEntities.add(new ExcelExportEntity("姓名", "username", 20)); + exportEntities.add(new ExcelExportEntity("工号", "loginname", 20)); + exportEntities.add(new ExcelExportEntity("所属单位", "unitName", 20)); + exportEntities.add(new ExcelExportEntity("所属分工会", "unionName", 20)); + exportEntities.add(new ExcelExportEntity("疾病种类", "diseaseName", 20)); + exportEntities.add(new ExcelExportEntity("重大疾病", "majorDisease", 20)); + exportEntities.add(new ExcelExportEntity("申请时间", "applyTime", 20)); + exportEntities.add(new ExcelExportEntity("申请次数", "applyNum", 20)); + + ExcelExportEntity hospitalSumMoneyExcelExportEntity = new ExcelExportEntity("住院医疗总额(不含门诊)", "hospitalSumMoney$", 20); + hospitalSumMoneyExcelExportEntity.setType(10); + exportEntities.add(hospitalSumMoneyExcelExportEntity); + ExcelExportEntity reimbursementMoneyExcelExportEntity = new ExcelExportEntity("实际报销总额", "reimbursementMoney$", 20); + reimbursementMoneyExcelExportEntity.setType(10); + exportEntities.add(reimbursementMoneyExcelExportEntity); + ExcelExportEntity singleBearMoneyExcelExportEntity = new ExcelExportEntity("(住院医疗)允许报销范围内个人承担部分总额", "singleBearMoney$", 20); + singleBearMoneyExcelExportEntity.setType(10); + exportEntities.add(singleBearMoneyExcelExportEntity); + ExcelExportEntity personExpenseMoneyExcelExportEntity = new ExcelExportEntity("(住院医疗)自费部分总额", "personExpenseMoney$", 20); + personExpenseMoneyExcelExportEntity.setType(10); + exportEntities.add(personExpenseMoneyExcelExportEntity); + ExcelExportEntity outpatientServiceMoneyExcelExportEntity = new ExcelExportEntity("重病门诊自费金额", "outpatientServiceMoney$", 20); + outpatientServiceMoneyExcelExportEntity.setType(10); + exportEntities.add(outpatientServiceMoneyExcelExportEntity); + ExcelExportEntity bxyMoneyExcelExportEntity = new ExcelExportEntity("非住院肾衰竭治疗、靶向药", "bxyMoney$", 20); + bxyMoneyExcelExportEntity.setType(10); + exportEntities.add(bxyMoneyExcelExportEntity); + ExcelExportEntity totalMoneyExcelExportEntity = new ExcelExportEntity("合计金额", "totalMoney", 20); + totalMoneyExcelExportEntity.setType(10); + exportEntities.add(totalMoneyExcelExportEntity); + exportEntities.add(new ExcelExportEntity("当前节点", "curTaskName", 20)); + try { + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, costList); + CommonDownloadUtil.download("测算补助金额汇总表.xlsx", workbook, response); + }catch (Exception e){ + e.printStackTrace(); + } + + + } + + } diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalMineController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalMineController.java index db10d80b..6697fc28 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalMineController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalMineController.java @@ -6,11 +6,13 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.base.utils.PageUtil; import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.sys.views.View_user; +import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalApply; import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalApplyCost; @@ -110,7 +112,24 @@ public class MedicalMineController { } cnd.andEX("year(info.applyTime)", "=", pageForm.getYear()); cnd.andEX("info.diseaseId", "=", pageForm.getDiseaseId()); - cnd.and("info.userId", "=", SecurityUtil.getUserId()); + if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) { + SqlExpressionGroup group = new SqlExpressionGroup(); + if (AuthUtil.hasRole(RoleConstant.RETIREMENT_WORKPLACE.name())) { + group.or("us.aidFundMemberUserType", "=", "离退休人员"); + } + if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { + SqlExpressionGroup group1 = new SqlExpressionGroup(); + group1.and("us.unionid", "=", SecurityUtil.getUnionId()); + group1.and("us.aidFundMemberUserType", "!=", "离退休人员"); + group.or(group1); + } else { + cnd.and("info.userId", "=", SecurityUtil.getUserId()); + } + if (!group.isEmpty()){ + cnd.and(group); + } + } + if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) { cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); @@ -143,7 +162,7 @@ public class MedicalMineController { public Result info(String id) { MedicalApply medicalApply = medicalApplyService.fetch(id); MedicalDiseaseType diseaseType = medicalApplyService.dao().fetch(MedicalDiseaseType.class, medicalApply.getDiseaseId()); - MedicalApply fetchLinks = medicalApplyService.fetchLinks(medicalApply, "costList",Cnd.NEW().asc("visitStartTime")); + MedicalApply fetchLinks = medicalApplyService.fetchLinks(medicalApply, "costList", Cnd.NEW().asc("visitStartTime")); View_user user = medicalApplyService.dao().fetch(View_user.class, Cnd.where(View_user::getId, "=", medicalApply.getUserId())); NutMap nutMap = Lang.obj2nutmap(fetchLinks); nutMap.put("sex", user.getSex()); diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalRetirementAuditController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalRetirementAuditController.java new file mode 100644 index 00000000..0e2f9c21 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalRetirementAuditController.java @@ -0,0 +1,59 @@ +package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.param.MedicalPageForm; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalApplyService; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalAuditService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.sql.Sql; +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 java.util.List; + +/** + * @author zhf + * @date 2026/1/24 17:09 + * @description 离退休审核 + */ +@IocBean +@At("/platform/medicalMutualAid/medical/retirementAudit") +@Api("医疗互助离退休审核") +@Ok("json:full") +@Slf4j +public class MedicalRetirementAuditController { + + @Inject + private MedicalApplyService medicalApplyService; + + @Inject + private MedicalAuditService medicalAuditService; + + @At("") + @Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/medical/retirementAudit/index.html") + @SaCheckPermission("medicalMutualAid.medical.retirementAudit") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("medicalMutualAid.medical.retirementAudit") + public Result pageData(MedicalPageForm pageForm) { + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "eedd925d-0ef5-417e-9c52-6133a785646f"); + Sql sql = medicalAuditService.getAuditSql(pageForm, cnd); + sql.setCondition(cnd); + Pagination pageVO = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + List costList = medicalApplyService.getCostList(pageVO.getList()); + pageVO.setList(costList); + return Result.success(pageVO); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalSchoolHospitalAuditController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalSchoolHospitalAuditController.java index 4d28f726..19470437 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalSchoolHospitalAuditController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalSchoolHospitalAuditController.java @@ -12,6 +12,7 @@ import com.budwk.app.flow.service.FlowCommonService; 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 com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalAuditService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -48,6 +49,9 @@ public class MedicalSchoolHospitalAuditController { @Inject private MedicalApplyService medicalApplyService; + @Inject + private MedicalAuditService medicalAuditService; + @Inject private FlowCommonService flowCommonService; @@ -61,70 +65,10 @@ public class MedicalSchoolHospitalAuditController { @ApiOperation("分页查询") @SaCheckPermission("medicalMutualAid.medical.schoolHospitalAudit") 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, - IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, - IF(rt.id IS NOT NULL, 1, 0) AS canRevoke - FROM - wf_process_task t - LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId - LEFT JOIN medical_apply info ON info.id = ins.businessNo - LEFT JOIN medical_disease_type type ON info.diseaseId = type.id - LEFT JOIN vw_user us ON us.id = info.userId - LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id - LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 - LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 - $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.and("t.taskName", "=", "39916c1e-857d-407d-86c1-678ccf3011bc"); - cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); - - if (pageForm.getApproval()) { - cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); - } else { - cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); - } - - if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { - cnd.desc("info.applyTime"); - } else { - cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); - } - cnd.groupBy("t.id"); - sql.setCondition(cnd); + Sql sql = medicalAuditService.getAuditSql(pageForm, cnd); Pagination pageVO = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); List costList = medicalApplyService.getCostList(pageVO.getList()); pageVO.setList(costList); diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalUnionAuditController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalUnionAuditController.java index 60b5c6a0..f8453d41 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalUnionAuditController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalUnionAuditController.java @@ -9,6 +9,7 @@ import com.budwk.app.flow.enums.ProcessTaskStateEnum; 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 com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalAuditService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -40,6 +41,9 @@ public class MedicalUnionAuditController { @Inject private MedicalApplyService medicalApplyService; + @Inject + private MedicalAuditService medicalAuditService; + @At("") @Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/medical/unionAudit/index.html") @SaCheckPermission("medicalMutualAid.medical.unionAudit") @@ -50,67 +54,9 @@ public class MedicalUnionAuditController { @ApiOperation("分页查询") @SaCheckPermission("medicalMutualAid.medical.unionAudit") 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, - IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, - IF(rt.id IS NOT NULL, 1, 0) AS canRevoke - FROM - wf_process_task t - LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId - LEFT JOIN medical_apply info ON info.id = ins.businessNo - LEFT JOIN medical_disease_type type ON info.diseaseId = type.id - LEFT JOIN vw_user us ON us.id = info.userId - LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id - LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 - LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 - $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.and("t.taskName", "=", "a9bbf69c-5edf-4161-a364-47996d212472"); - cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); - - if (pageForm.getApproval()) { - cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); - } else { - cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); - } - - if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { - cnd.desc("info.applyTime"); - } else { - cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); - } - cnd.groupBy("t.id"); + Sql sql = medicalAuditService.getAuditSql(pageForm, cnd); sql.setCondition(cnd); Pagination pageVO = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); List costList = medicalApplyService.getCostList(pageVO.getList()); diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/model/MedicalMoneyDetail.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/model/MedicalMoneyDetail.java new file mode 100644 index 00000000..dc805465 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/model/MedicalMoneyDetail.java @@ -0,0 +1,65 @@ +package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.math.BigDecimal; + +@Table("medical_money_detail") +@Data +@Comment("医疗互助补助金额明细") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) +public class MedicalMoneyDetail extends BaseModel { + + @Name + @PrevInsert(uu32 = true) + @ColDefine(type = ColType.VARCHAR, width = 32) + private String id; + + @Column + @ColDefine(type = ColType.INT) + @Comment("年度") + private Integer year; + + @Column + @ColDefine(customType = "decimal", width = 10) + @Comment("会员上缴费用") + private BigDecimal aidFund; + + @Column + @ColDefine(customType = "decimal", width = 10) + @Comment("学校拨款") + private BigDecimal schoolGrants; + + @Column + @ColDefine(customType = "decimal", width = 10) + @Comment("上年结余") + private BigDecimal lastYearBalance; + + @Column + @ColDefine(customType = "decimal", width = 10) + @Comment("工会转入") + private BigDecimal unionInto; + + @Column + @ColDefine(customType = "decimal", width = 10) + @Comment("总收入") + private BigDecimal grossIncome; + + @Column + @ColDefine(customType = "decimal", width = 10) + @Comment("最终占比") + private Float ratio; + + @Column + @ColDefine(customType = "decimal", width = 10) + @Comment("最终分配金额") + private Float finalSubsidy; + + +} 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..89574881 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 Boolean isMajorDiseases; } diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/MedicalApplyService.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/MedicalApplyService.java index 6bbb4fc3..8cd08f83 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/MedicalApplyService.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/MedicalApplyService.java @@ -44,5 +44,5 @@ public interface MedicalApplyService extends BaseService { * @param diseaseId * @return */ - NutMap calcMedicalMoney(String applyId, String diseaseId); + NutMap calcMedicalMoney(String applyId, String diseaseId,double ratio); } diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/MedicalAuditService.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/MedicalAuditService.java new file mode 100644 index 00000000..94a1b8e1 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/MedicalAuditService.java @@ -0,0 +1,14 @@ +package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalApply; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.param.MedicalPageForm; +import org.checkerframework.checker.units.qual.C; +import org.nutz.dao.Cnd; +import org.nutz.dao.sql.Sql; + +public interface MedicalAuditService extends BaseService { + + + Sql getAuditSql(MedicalPageForm pageForm, Cnd cnd); +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/MedicalCalculateMoneyService.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/MedicalCalculateMoneyService.java new file mode 100644 index 00000000..343c6e25 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/MedicalCalculateMoneyService.java @@ -0,0 +1,17 @@ +package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service; + +import com.budwk.app.base.service.BaseService; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +public interface MedicalCalculateMoneyService extends BaseService { + + /** + * 查询第一步输入金额 + * @return + */ + NutMap getData(); + + List getApplyData(double ratio); +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/impl/MedicalApplyServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/impl/MedicalApplyServiceImpl.java index 490c1509..56fd8e7c 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/impl/MedicalApplyServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/impl/MedicalApplyServiceImpl.java @@ -53,7 +53,9 @@ public class MedicalApplyServiceImpl extends BaseServiceImpl imple @Override public Integer getMedicalApplyNum(String userId) { - return 0 + 1; + List applyRecord = this.getApplyRecord(List.of(userId)); + + return applyRecord.size() + 1; } @Override @@ -122,7 +124,10 @@ public class MedicalApplyServiceImpl extends BaseServiceImpl imple """); Cnd cnd = Cnd.NEW(); SqlExpressionGroup group = new SqlExpressionGroup(); - group.or("t.taskName", "is", null); + SqlExpressionGroup group1 = new SqlExpressionGroup(); + group1.and("t.taskName", "is", null); + group1.and("ins.state", "not in", List.of(ProcessInstanceStateEnum.FINISHED.getCode(), ProcessInstanceStateEnum.REJECT.getCode())); + group.or(group1); group.or("ins.state", "=", ProcessInstanceStateEnum.DOING.getCode()); cnd.and(group); cnd.and("info.userId", "=", userId); @@ -134,9 +139,15 @@ public class MedicalApplyServiceImpl extends BaseServiceImpl imple } @Override - public NutMap calcMedicalMoney(String applyId, String diseaseId) { + public NutMap calcMedicalMoney(String applyId, String diseaseId, double ratio) { MedicalSetting medicalSetting = dao().fetch(MedicalSetting.class); + if (ratio == 0) { + //补助比例 + ratio = medicalSetting.getSubsidyRatio(); + } + + //获取申请信息 NutMap applyInfo = this.getApplyInfo(applyId); //获取申请疾病类型 @@ -204,8 +215,15 @@ public class MedicalApplyServiceImpl extends BaseServiceImpl imple //历年来所获全部补助 BigDecimal allMoney = applyRecords.stream() - .map(a -> a.getString("loveSubsidyMoney") + a.getString("subsidyMoney")) - .map(BigDecimal::new) + .map(a -> { + String loveStr = a.getString("loveSubsidyMoney"); + String subsidStr = a.getString("subsidyMoney"); + + // 处理 null 或空字符串 + BigDecimal love = StrUtil.isBlank(loveStr) ? BigDecimal.ZERO : new BigDecimal(loveStr); + BigDecimal subsid = StrUtil.isBlank(subsidStr) ? BigDecimal.ZERO : new BigDecimal(subsidStr); + return love.add(subsid); + }) .reduce(BigDecimal.ZERO, BigDecimal::add); //是否超过历年所获补助限额 @@ -217,9 +235,6 @@ public class MedicalApplyServiceImpl extends BaseServiceImpl imple boolean fullTenYears = DateUtil.thisYear() - Integer.parseInt(user.getAidFundDeductTime()) >= 10; boolean fullFifYears = DateUtil.thisYear() - Integer.parseInt(user.getAidFundDeductTime()) >= 15; - //补助比例 - double ratio = medicalSetting.getSubsidyRatio(); - // 连续缴满15年 或者是 连续缴满10年 if (fullFifYears) { @@ -313,10 +328,7 @@ public class MedicalApplyServiceImpl extends BaseServiceImpl imple } // 规则1:首次申请的重大疾病患者,若个人自付不足5000元,不给予常规补助(由爱心基金覆盖) - if (applyInfo.getInt("applyNum") == 1 - && applyDiseaseType.getIsMajorDiseases() - && singleBearMoney != null - && singleBearMoney.compareTo(new BigDecimal("5000")) < 0) { + if (applyInfo.getInt("applyNum") == 1 && applyDiseaseType.getIsMajorDiseases() && singleBearMoney.compareTo(new BigDecimal("5000")) < 0) { allMedicalMoney = BigDecimal.ZERO; } diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/impl/MedicalAuditServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/impl/MedicalAuditServiceImpl.java new file mode 100644 index 00000000..bf577404 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/impl/MedicalAuditServiceImpl.java @@ -0,0 +1,96 @@ +package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalApply; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.param.MedicalPageForm; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalAuditService; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.SqlExpressionGroup; +import org.nutz.ioc.loader.annotation.IocBean; + +import java.util.List; + +/** + * @author zhf + * @date 2026/1/24 16:36 + * @description + */ +@IocBean(args = {"refer:dao"}) +public class MedicalAuditServiceImpl extends BaseServiceImpl implements MedicalAuditService { + public MedicalAuditServiceImpl(Dao dao) { + super(dao); + } + + @Override + public Sql getAuditSql(MedicalPageForm pageForm, Cnd cnd) { + 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, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN medical_apply info ON info.id = ins.businessNo + LEFT JOIN medical_disease_type type ON info.diseaseId = type.id + LEFT JOIN vw_user us ON us.id = info.userId + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + 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.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + 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("type.isMajorDiseases", "=", pageForm.getIsMajorDiseases()); + if (pageForm.getApproval()) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + return sql; + } +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/impl/MedicalCalculateMoneyServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/impl/MedicalCalculateMoneyServiceImpl.java new file mode 100644 index 00000000..4e67cb0d --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/service/impl/MedicalCalculateMoneyServiceImpl.java @@ -0,0 +1,165 @@ +package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.flow.enums.ProcessInstanceStateEnum; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.aidFund.model.AidFundMemberPay; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalApply; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalMoneyDetail; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalApplyService; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalCalculateMoneyService; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; +import org.nutz.lang.util.NutMap; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.util.List; +import java.util.Objects; + +/** + * @author zhf + * @date 2026/1/24 14:34 + * @description + */ +@IocBean(args = {"refer:dao"}) +public class MedicalCalculateMoneyServiceImpl extends BaseServiceImpl implements MedicalCalculateMoneyService { + public MedicalCalculateMoneyServiceImpl(Dao dao) { + super(dao); + } + + @Inject + private MedicalApplyService medicalApplyService; + + @Override + public NutMap getData() { + NutMap nutMap = new NutMap(); + + //获取申请最新年份 + Sql yearSql = Sqls.create("SELECT MAX(YEAR(applyTime)) AS currentYear FROM medical_apply"); + yearSql.setCallback(Sqls.callback.longs()); + dao().execute(yearSql); + Integer year = yearSql.getInt(); + + //基金会员会费 + List payList = dao().query(AidFundMemberPay.class, Cnd.where(AidFundMemberPay::getYear, "=", year).and(AidFundMemberPay::getIsPayed, "=", 1)); + double aidFundMoney = payList.stream().mapToDouble(AidFundMemberPay::getMoney).sum(); + nutMap.setv("aidFundMoney", aidFundMoney); + + //工会往年结余金额 + List detailList = dao().query(MedicalMoneyDetail.class, Cnd.where(MedicalMoneyDetail::getYear, "<", year)); + BigDecimal balanceMoney = detailList.stream() + .map(MedicalMoneyDetail::getLastYearBalance) + .filter(Objects::nonNull) // 防御性:排除 null 值 + .reduce(BigDecimal.ZERO, BigDecimal::add); + nutMap.setv("balanceMoney", balanceMoney); + + MedicalMoneyDetail moneyDetail = dao().fetch(MedicalMoneyDetail.class, Cnd.where("year", "=", year)); + nutMap.setv("schoolGrants", Lang.isEmpty(moneyDetail) ? 0 : moneyDetail.getSchoolGrants()); + nutMap.setv("unionInto", Lang.isEmpty(moneyDetail) ? 0 : moneyDetail.getUnionInto()); + nutMap.setv("ratio", Lang.isEmpty(moneyDetail) ? null : moneyDetail.getRatio()); + + + //查询申请成功的补助金额 + List applyList = this.getApplyList(year); + double subsidyMoney = applyList.stream().mapToDouble(apply -> apply.getDouble("subsidyMoney")).sum(); + nutMap.setv("subsidyMoney", subsidyMoney); + + //获取申请成功的爱心补助金额 + //找到有多少数据 + int firstApplyCount = applyList.stream().filter(apply -> apply.getInt("applyNum") == 1).toList().size(); + nutMap.setv("loveSubsidyMoney", firstApplyCount * 5000); + + //查询申请成功后的住院缴费金额 + List applyIds = applyList.stream().map(v -> v.getString("id")).toList(); + double applyCostMoneySum = this.getApplyCostMoneySum(applyIds); + BigDecimal applyCostMoneySumBig = BigDecimal.valueOf(applyCostMoneySum) + .setScale(2, RoundingMode.HALF_UP); + nutMap.setv("applySum", applyCostMoneySumBig); + + return nutMap; + } + + @Override + public List getApplyData(double ratio) { + //获取申请最新年份 + Sql yearSql = Sqls.create("SELECT MAX(YEAR(applyTime)) AS currentYear FROM medical_apply"); + yearSql.setCallback(Sqls.callback.longs()); + dao().execute(yearSql); + Integer year = yearSql.getInt(); + + List applyList = this.getApplyList(year); + applyList = medicalApplyService.getCostList(applyList); + + applyList.forEach(apply -> { + apply.putAll(medicalApplyService.calcMedicalMoney(apply.getString("id"),null, ratio)); + }); + + + return applyList; + } + + + /** + * 根据申请id查询出住院缴费金额 + * + * @param applyIds + * @return + */ + public double getApplyCostMoneySum(List applyIds) { + Sql sql = Sqls.create(""" + SELECT + ( sum( personExpenseMoney ) + sum( outpatientServiceMoney ) ) AS applySum + FROM + medical_apply_cost + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("applyId", "in", applyIds); + sql.setCondition(cnd); + sql.setCallback(Sqls.callback.doubleValue()); + dao().execute(sql); + double applySum = sql.getDouble(); + return applySum; + + } + + + /** + * 查询申请成功的记录 + * + * @param year + * @return + */ + public List getApplyList(Integer year) { + Sql sql = Sqls.create(""" + SELECT + info.*, + type.diseaseName, + type.isMajorDiseases, + us.username, + us.loginname, + us.unitName, + us.unionName, + us.aidFundDeductTime, + YEAR(CURDATE()) - us.aidFundDeductTime AS yearsSinceDeduct + FROM + medical_apply info + LEFT JOIN medical_disease_type type ON info.diseaseId = type.id + LEFT JOIN vw_user us ON us.id = info.userId + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("YEAR(info.applyTime)", "=", year); + cnd.and("ins.state", "=", ProcessInstanceStateEnum.FINISHED.getCode()); + sql.setCondition(cnd); + List listMap = listMap(sql); + return listMap; + } +} diff --git a/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/apply/index.html b/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/apply/index.html index 85260f6d..43a8d3ff 100644 --- a/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/apply/index.html +++ b/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/apply/index.html @@ -405,7 +405,7 @@ layout("/layouts/platform.html"){ this.$message.error("请添加住院记录!") return } - if (!this.validateIsMajorDiseases()){ + if (!this.validateIsMajorDiseases()) { this.$alert('您的个人承担部分金额达不到补助标准,无法申请!', '提示', { confirmButtonText: '确定', callback: action => { @@ -431,8 +431,6 @@ layout("/layouts/platform.html"){ }) - - } }) }, @@ -443,7 +441,7 @@ layout("/layouts/platform.html"){ this.$message.error("请添加住院记录!") return } - if (!this.validateIsMajorDiseases()){ + if (!this.validateIsMajorDiseases()) { this.$alert('您的个人承担部分金额达不到补助标准,无法申请!', '提示', { confirmButtonText: '确定', callback: action => { @@ -500,9 +498,13 @@ layout("/layouts/platform.html"){ }, async createRemoteMethod(keyword) { - const resp = await this.$axios.post(loc() + "/getSubsidyUser", {keyword}) - if (resp.code === 0) { - this.userOptions = resp.data; + try { + const resp = await this.$axios.post(loc() + "/getSubsidyUser", {keyword}) + if (resp.code === 0) { + this.userOptions = resp.data; + } + } catch (e) { + this.$message.error(e.msg) } }, getDiseaseList() { @@ -557,6 +559,7 @@ layout("/layouts/platform.html"){ } }).catch(e => { + this.formData = {} this.$alert(e.msg, '温馨提示', { confirmButtonText: '确定', callback: action => { diff --git a/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/calculateMoney/index.html b/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/calculateMoney/index.html new file mode 100644 index 00000000..1a2b6598 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/calculateMoney/index.html @@ -0,0 +1,341 @@ + + +
+ +
+
1.输入金额(元)
+ + + + + + + + = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + = + + + + + + + + + + + + + + + + + + +
2.预测收支占比
+ + + +
+ 预测总额(ps:预测补助金额+爱心补助金额)/本年度收入累计总额 +
+
+ +
+
+ 本年度实际补助总金额: + {{parseFloat(tableSummaries[tableSummaries.length-1]) + calcData.loveSubsidyMoney}}元 + +
+
+ 医疗补助合计: + {{tableSummaries[tableSummaries.length-1]}}元 + +
+
+ 爱心补助合计: + {{calcData.loveSubsidyMoney}}元 + +
+
+ 本年度结余: + {{inComeSum - (parseFloat(tableSummaries[tableSummaries.length-1]) + + calcData.loveSubsidyMoney)}}元 + +
+
+ 累计结余: + {{inComeSum + calcData.balanceMoney - + (parseFloat(tableSummaries[tableSummaries.length-2]) + calcData.loveSubsidyMoney)}}元 + +
+
+ +
+
+ + + +
3.测算补助金额
+ + + + + + + + + + + + + + + + + +
+ +
+
+ + + + + diff --git a/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/foundationAudit/index.html b/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/foundationAudit/index.html index e13d6f9e..67c6ad38 100644 --- a/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/foundationAudit/index.html +++ b/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/foundationAudit/index.html @@ -51,6 +51,12 @@ layout("/layouts/platform.html"){ + 导出 + + 全部 + 重疾 + 普通 + 已审核 未审核 @@ -213,6 +219,7 @@ layout("/layouts/platform.html"){ showApprovalForm: false, pageForm: { approval: false, + isMajorDiseases: null, year: new Date().getFullYear() + "", }, medicalSetting: {} @@ -223,6 +230,9 @@ layout("/layouts/platform.html"){ "medical-info": MEDICAL_INFO }, methods: { + doExport() { + this.$downLoad("/platform/medicalMutualAid/medical/foundationAudit/doExport", this.pageForm) + }, // 修改表格里面的金额并修改数据库里的数据 tableChangeMoney() { this.costList.forEach(cost => { diff --git a/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/retirementAudit/index.html b/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/retirementAudit/index.html new file mode 100644 index 00000000..caa33085 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/staffbenefit/medicalMutualAid/medical/retirementAudit/index.html @@ -0,0 +1,182 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + +
+ + + +