Merge remote-tracking branch 'origin/main'
This commit is contained in:
+109
-39
@@ -16,6 +16,7 @@ import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
|
||||
import com.budwk.app.flow.service.FlowCommonService;
|
||||
import com.budwk.app.sys.models.Sys_unit;
|
||||
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;
|
||||
@@ -84,7 +85,17 @@ public class UnionReimburseApplyController {
|
||||
@SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
|
||||
@SLog(type = "unionReimburse", tag = "工会报销-报销申请", msg = "保存报销申请")
|
||||
public Result save(@Param("data") UnionReimburse unionReimburse) {
|
||||
if (StrUtil.isBlank(unionReimburse.getId())) unionReimburse.setCreateTime(new Date());
|
||||
if (StrUtil.isBlank(unionReimburse.getId())) {
|
||||
unionReimburse.setCreateTime(new Date());
|
||||
String documentNo = generateDocumentNo();
|
||||
unionReimburse.setDocumentNo(documentNo);
|
||||
}
|
||||
unionReimburse.setStateId(1);//待提交
|
||||
if (("UNION_REIMBURSE_PROJECT_1").equals(unionReimburse.getReimburseProject())){
|
||||
unionReimburse.setRealMoney(unionReimburse.getCondolenceMoney());
|
||||
}else {
|
||||
unionReimburse.setRealMoney(unionReimburse.getMoney());
|
||||
}
|
||||
dao.insertOrUpdate(unionReimburse);
|
||||
return Result.success();
|
||||
}
|
||||
@@ -94,52 +105,56 @@ public class UnionReimburseApplyController {
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
|
||||
public Result submit(@Param("data") UnionReimburse unionReimburse) {
|
||||
if (StrUtil.isBlank(unionReimburse.getId())) unionReimburse.setCreateTime(new Date());
|
||||
|
||||
dao.insertOrUpdate(unionReimburse);
|
||||
// 开启流程实例
|
||||
Dict args = Dict.create();
|
||||
args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode());
|
||||
args.set(FlowConst.FORM_DATA, unionReimburse);
|
||||
args.set("userId", unionReimburse.getCertifierUserId());
|
||||
ProcessInstance instance = flowEngine.startProcessInstanceByKey("GHBX", unionReimburse.getId(), SecurityUtil.getUserId(), args);
|
||||
|
||||
// 自动完成第一个申请任务
|
||||
List<ProcessTask> doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null);
|
||||
for (ProcessTask task : doingTaskList) {
|
||||
flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args);
|
||||
if (StrUtil.isBlank(unionReimburse.getId())) {
|
||||
unionReimburse.setCreateTime(new Date());
|
||||
String documentNo = generateDocumentNo();
|
||||
unionReimburse.setDocumentNo(documentNo);
|
||||
}
|
||||
unionReimburse.setStateId(2);//待审核
|
||||
if (("UNION_REIMBURSE_PROJECT_1").equals(unionReimburse.getReimburseProject())){
|
||||
unionReimburse.setRealMoney(unionReimburse.getCondolenceMoney());
|
||||
}else {
|
||||
unionReimburse.setRealMoney(unionReimburse.getMoney());
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("重新提交申请")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
|
||||
public Result submitAgain(@Param("data") UnionReimburse unionReimburse, @Param("taskId") Long taskId) {
|
||||
if (StrUtil.isBlank(unionReimburse.getId())) unionReimburse.setCreateTime(new Date());
|
||||
|
||||
dao.insertOrUpdate(unionReimburse);
|
||||
|
||||
Dict dict = Dict.create();
|
||||
dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId);
|
||||
dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode());
|
||||
dict.set("userId", unionReimburse.getCertifierUserId());
|
||||
flowCommonService.executeTask(dict);
|
||||
// // 开启流程实例
|
||||
// Dict args = Dict.create();
|
||||
// args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode());
|
||||
// args.set(FlowConst.FORM_DATA, unionReimburse);
|
||||
// args.set("userId", unionReimburse.getCondolenceUserId());
|
||||
// ProcessInstance instance = flowEngine.startProcessInstanceByKey("GHBX", unionReimburse.getId(), SecurityUtil.getUserId(), args);
|
||||
//
|
||||
// // 自动完成第一个申请任务
|
||||
// List<ProcessTask> doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null);
|
||||
// for (ProcessTask task : doingTaskList) {
|
||||
// flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args);
|
||||
// }
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
// @At
|
||||
// @ApiOperation("重新提交申请")
|
||||
// @Aop(TransAop.READ_COMMITTED)
|
||||
// @SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
|
||||
// public Result submitAgain(@Param("data") UnionReimburse unionReimburse, @Param("taskId") Long taskId) {
|
||||
// if (StrUtil.isBlank(unionReimburse.getId())) unionReimburse.setCreateTime(new Date());
|
||||
//
|
||||
// dao.insertOrUpdate(unionReimburse);
|
||||
//
|
||||
// Dict dict = Dict.create();
|
||||
// dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId);
|
||||
// dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode());
|
||||
// dict.set("userId", unionReimburse.getCondolenceUserId());
|
||||
// flowCommonService.executeTask(dict);
|
||||
// return Result.success();
|
||||
// }
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("获取当前登录人的申请信息")
|
||||
public Result info(@Param("id") String id) {
|
||||
UnionReimburse unionReimburse = dao.fetch(UnionReimburse.class, id);
|
||||
CondolenceType type = unionReimburseService.dao().fetch(CondolenceType.class,
|
||||
Cnd.where(CondolenceType::getId, "=", unionReimburse.getCondolenceType()));
|
||||
NutMap nutMap = Lang.obj2nutmap(unionReimburse);
|
||||
// 使用三元运算符处理 null 情况
|
||||
nutMap.put("typeName", type != null ? type.getName() : "");
|
||||
return Result.success(nutMap);
|
||||
return Result.success(unionReimburse);
|
||||
}
|
||||
|
||||
|
||||
@@ -159,7 +174,10 @@ public class UnionReimburseApplyController {
|
||||
IFNULL(unitname, '暂无') as unitName,
|
||||
unitid as unitId,
|
||||
unionid as unionId,
|
||||
unionname as unionName
|
||||
unionname as unionName,
|
||||
DATE(birthday) AS birthday,
|
||||
idCard,
|
||||
unionCode
|
||||
from
|
||||
vw_user
|
||||
$condition
|
||||
@@ -189,10 +207,29 @@ public class UnionReimburseApplyController {
|
||||
@ApiOperation("查询职工慰问类型")
|
||||
@SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
|
||||
public Result queryCondolenceType() {
|
||||
List<CondolenceType> list = typeService.query(Cnd.NEW().desc(CondolenceType::getCode));
|
||||
List<CondolenceType> list = typeService.query(Cnd.NEW().asc(CondolenceType::getCode));
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("查询厉害账号信息")
|
||||
@SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
|
||||
public Result findUserBankHistory(String payer) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT DISTINCT
|
||||
bankCardNumber,
|
||||
bankOfDeposit
|
||||
FROM union_reimburse
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("payer", "=", payer);
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> result = unionReimburseService.listMap(sql);
|
||||
return Result.success(result);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("查询校工会经费余额")
|
||||
@SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
|
||||
@@ -244,6 +281,39 @@ public class UnionReimburseApplyController {
|
||||
// 如果没有找到该社团的经费记录,返回0
|
||||
return Result.success(0.0);
|
||||
}
|
||||
@At
|
||||
@ApiOperation("生成文件编号")
|
||||
private String generateDocumentNo() {
|
||||
int currentYear = DateUtil.thisYear();
|
||||
String yearPrefix = String.valueOf(currentYear);
|
||||
|
||||
org.nutz.dao.Cnd cnd = org.nutz.dao.Cnd.where("documentNo", "LIKE", yearPrefix + "%");
|
||||
cnd.desc("documentNo");
|
||||
cnd.limit(1);
|
||||
|
||||
List<UnionReimburse> list = dao.query(UnionReimburse.class, cnd);
|
||||
|
||||
int nextSeq = 1; // 默认从01开始
|
||||
if (!list.isEmpty()) {
|
||||
String maxNo = list.get(0).getDocumentNo();
|
||||
if (maxNo != null && maxNo.startsWith(yearPrefix)) {
|
||||
// 提取序号部分(去掉年份前缀)
|
||||
String seqPart = maxNo.substring(yearPrefix.length());
|
||||
try {
|
||||
int currentMaxSeq = Integer.parseInt(seqPart);
|
||||
nextSeq = currentMaxSeq + 1;
|
||||
} catch (NumberFormatException e) {
|
||||
// 如果解析失败,使用默认值1
|
||||
nextSeq = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 格式化序号为两位数
|
||||
String seqStr = String.format("%02d", nextSeq);
|
||||
return yearPrefix + seqStr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
+71
-22
@@ -3,10 +3,12 @@ package com.budwk.app.zhgh.dayofficework.unionReimburse.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.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
@@ -14,12 +16,16 @@ import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.flow.engine.FlowEngine;
|
||||
import com.budwk.app.sys.models.Sys_dict;
|
||||
import com.budwk.app.sys.services.SysDictService;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburse;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.service.UnionReimburseService;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.vo.UnionReimburseCollectExcelVO;
|
||||
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.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
@@ -33,6 +39,7 @@ 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;
|
||||
|
||||
@IocBean
|
||||
@@ -74,28 +81,9 @@ public class UnionReimburseCollectController {
|
||||
@Param(value = "reimburseProject") String reimburseProject) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
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' AND taskState in (10,20)) AS startTaskId
|
||||
info.*
|
||||
FROM
|
||||
union_reimburse info
|
||||
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();
|
||||
@@ -116,8 +104,7 @@ public class UnionReimburseCollectController {
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
// 只查询流程实例状态为20的数据(已完成状态)
|
||||
cnd.and("ins.state", "=", 20);
|
||||
cnd.and("info.stateId", "in", List.of(3, 2));
|
||||
|
||||
cnd.desc("info.createTime");
|
||||
sql.setCondition(cnd);
|
||||
@@ -125,6 +112,68 @@ public class UnionReimburseCollectController {
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission(value = {"unionReimburse.collect", "h5.unionReimburse.collect"}, mode = SaMode.OR)
|
||||
public Result updateActuallyAmount(String id,Double realMoney) {
|
||||
UnionReimburse unionReimburse = unionReimburseService.fetch(id);
|
||||
unionReimburse.setRealMoney(realMoney);
|
||||
unionReimburseService.updateIgnoreNull(unionReimburse);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission(value = {"unionReimburse.collect", "h5.unionReimburse.collect"}, mode = SaMode.OR)
|
||||
public void exportSkr(Integer year, String unionId, String unitId, String reimburseProject,HttpServletResponse response) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
CONCAT(u.username,'(',u.loginname,')') as skrxx,
|
||||
rei.bankCardNumber,
|
||||
rei.bankOfDeposit,
|
||||
CASE
|
||||
WHEN rei.reimburseProject = 'UNION_REIMBURSE_PROJECT_1' THEN '慰问'
|
||||
WHEN rei.reimburseProject = 'UNION_REIMBURSE_PROJECT_2' THEN '文体活动'
|
||||
WHEN rei.reimburseProject = 'UNION_REIMBURSE_PROJECT_3' THEN '日常活动'
|
||||
WHEN rei.reimburseProject = 'UNION_REIMBURSE_PROJECT_4' THEN '专项活动'
|
||||
ELSE rei.reimburseProject
|
||||
END as reimbursementItemName,
|
||||
u.mobile
|
||||
FROM
|
||||
`union_reimburse` rei
|
||||
LEFT JOIN `vw_user` u ON u.id = rei.payer
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("rei.paymentWay","=","UNION_REIMBURSE_PAYMENT_WAY_2");
|
||||
cnd.andEX("rei.reimburseProject", "=", reimburseProject);
|
||||
cnd.andEX("YEAR(rei.createTime)", "=", year);
|
||||
cnd.andEX("u.unitid", "=", unitId);
|
||||
cnd.andEX("u.unionid", "=", unionId);
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||
cnd.andEX("u.unionid", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
cnd.desc("rei.createTime");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = unionReimburseService.listMap(sql);
|
||||
|
||||
List<ExcelExportEntity> excelExportEntities = new ArrayList<>();
|
||||
excelExportEntities.add(new ExcelExportEntity("收款人信息","skrxx",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("收款人账号","bankCardNumber",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("地区","area",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("开户行信息","bankOfDeposit",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("手机号码","mobile",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("报销项目","reimbursementItemName",20));
|
||||
|
||||
try{
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + new String(("收款人名册.xls").getBytes("utf-8"), "ISO8859-1"));
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), excelExportEntities, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission(value = {"unionReimburse.collect", "h5.unionReimburse.collect"}, mode = SaMode.OR)
|
||||
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
package com.budwk.app.zhgh.dayofficework.unionReimburse.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
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.zhgh.dayofficework.unionReimburse.model.UnionReimburse;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburseDesc;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.service.UnionReimburseDescService;
|
||||
import com.budwk.app.zhgh.staffbenefit.condolence.model.CondolenceType;
|
||||
import com.budwk.app.zhgh.staffbenefit.condolence.service.CondolenceTypeService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author : hongqiwei
|
||||
* @description :
|
||||
* @createDate : 2026/1/20 11:32
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@Api(tags = "职工慰问类型")
|
||||
@At("/platform/unionReimburse/desc")
|
||||
public class UnionReimburseDescController {
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private UnionReimburseDescService unionReimburseDesc;
|
||||
|
||||
@At("")
|
||||
@SaCheckPermission("unionReimburse.desc")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/unionReimburse/desc/index.html")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission("unionReimburse.desc")
|
||||
public Result pageData(PageForm pageForm) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or(UnionReimburseDesc::getName, "like", "%" + pageForm.getSearchKeyword() + "%");
|
||||
seg.or(UnionReimburseDesc::getCode, "like", "%" + pageForm.getSearchKeyword() + "%");
|
||||
cnd.and(seg);
|
||||
}
|
||||
cnd.asc("code");
|
||||
Pagination pagination = unionReimburseDesc.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("新增/修改职工慰问类型")
|
||||
@SaCheckPermission("unionReimburse.desc")
|
||||
@SLog(tag = "职工慰问系统-慰问类型", msg = "新增/修改职工慰问类型")
|
||||
public Object onSubmit(UnionReimburseDesc desc) {
|
||||
unionReimburseDesc.insertOrUpdate(desc);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("删除职工慰问类型")
|
||||
@SaCheckPermission("unionReimburse.desc")
|
||||
@SLog(tag = "职工慰问系统-慰问类型", msg = "删除职工慰问类型")
|
||||
public Object onDelete(String id) {
|
||||
unionReimburseDesc.delete(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("查询附件说明")
|
||||
@SaCheckPermission(value = {"unionReimburse.desc", "h5.unionReimburse.desc"}, mode = SaMode.OR)
|
||||
public Result queryFileDesc() {
|
||||
List<UnionReimburseDesc> list = unionReimburseDesc.query(Cnd.NEW().desc(UnionReimburseDesc::getCode));
|
||||
return Result.success(list);
|
||||
}
|
||||
}
|
||||
|
||||
+301
-1
@@ -3,30 +3,58 @@ package com.budwk.app.zhgh.dayofficework.unionReimburse.controller;
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.model.Audit;
|
||||
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.MoneyUtil;
|
||||
import com.budwk.app.base.utils.OfficePlusUtil;
|
||||
import com.budwk.app.base.utils.SysOfficeTemplateUtil;
|
||||
import com.budwk.app.flow.engine.FlowEngine;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburse;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.service.UnionReimburseService;
|
||||
import com.deepoove.poi.XWPFTemplate;
|
||||
import com.deepoove.poi.config.Configure;
|
||||
import com.deepoove.poi.data.PictureRenderData;
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
import com.google.zxing.client.j2se.MatrixToImageWriter;
|
||||
import com.google.zxing.common.BitMatrix;
|
||||
import com.google.zxing.qrcode.QRCodeWriter;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
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.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
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.awt.image.BufferedImage;
|
||||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* @ClassName UnionReimburseMineController
|
||||
* @Author hongqiwei
|
||||
@@ -41,10 +69,15 @@ import org.nutz.mvc.annotation.Param;
|
||||
@Slf4j
|
||||
public class UnionReimburseMineController {
|
||||
|
||||
|
||||
@Inject
|
||||
private SysOfficeTemplateUtil sysOfficeTemplateUtil;
|
||||
@Inject
|
||||
private UnionReimburseService unionReimburseService;
|
||||
@Inject
|
||||
private FlowEngine flowEngine;
|
||||
@Inject
|
||||
private Dao dao;
|
||||
|
||||
|
||||
@At("/index")
|
||||
@@ -124,7 +157,274 @@ public class UnionReimburseMineController {
|
||||
@SLog( tag = "删除工会报销", msg = "删除工会报销")
|
||||
public Result delete(@Param("id") String id) {
|
||||
unionReimburseService.delete(id);
|
||||
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("撤回")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"unionReimburse.mine", "h5.unionReimburse.mine"}, mode = SaMode.OR)
|
||||
@SLog( tag = "撤回工会报销", msg = "撤回工会报销")
|
||||
public Result revokeTask(@Param("id") String id) {
|
||||
UnionReimburse unionReimburse = unionReimburseService.fetch(id);
|
||||
unionReimburse.setStateId(1);//待审核
|
||||
dao.insertOrUpdate(unionReimburse);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
public void ActExport(String id, HttpServletResponse response, boolean Print) throws Exception {
|
||||
UnionReimburse unionReimburse = unionReimburseService.fetch(id);
|
||||
if (unionReimburse == null) {
|
||||
throw new RuntimeException("报销记录不存在");
|
||||
}
|
||||
HashMap<String, Object> docData = new HashMap<>();
|
||||
|
||||
QRCodeWriter qrCodeWriter = new QRCodeWriter();
|
||||
BitMatrix bitMatrix = qrCodeWriter.encode(unionReimburse.getDocumentNo(), BarcodeFormat.QR_CODE, 80, 80);
|
||||
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
|
||||
File tempFile = File.createTempFile("qrcode_", ".png");
|
||||
javax.imageio.ImageIO.write(bufferedImage, "PNG", tempFile);
|
||||
PictureRenderData pictureRenderData = com.deepoove.poi.data.Pictures.of(tempFile.getAbsolutePath())
|
||||
.size(80, 80)
|
||||
.create();
|
||||
docData.put("qrcode", pictureRenderData);
|
||||
|
||||
tempFile.deleteOnExit();
|
||||
|
||||
docData.put("createTime", DateUtil.format(unionReimburse.getCreateTime(), "yyyy-MM-dd"));
|
||||
docData.put("unitName", unionReimburse.getUnitName());
|
||||
docData.put("userName", unionReimburse.getUserName());
|
||||
docData.put("loginName", unionReimburse.getLoginName());
|
||||
docData.put("mobile", unionReimburse.getMobile());
|
||||
docData.put("paymentNotes", unionReimburse.getPaymentNotes());
|
||||
docData.put("invoiceNumber", unionReimburse.getInvoiceNumber());
|
||||
docData.put("notes", unionReimburse.getNotes());
|
||||
docData.put("realMoney", unionReimburse.getRealMoney());
|
||||
docData.put("reimburseProject", unionReimburse.getReimburseProject());
|
||||
docData.put("paymentWay", unionReimburse.getPaymentWay());
|
||||
//对私支付,付款人信息
|
||||
docData.put("payerLoginname", unionReimburse.getPayerLoginname());
|
||||
docData.put("payerName", unionReimburse.getPayerName());
|
||||
docData.put("bankOfDeposit", unionReimburse.getBankOfDeposit());
|
||||
docData.put("bankCardNumber", unionReimburse.getBankCardNumber());
|
||||
|
||||
// 金额转大写
|
||||
if (unionReimburse.getRealMoney() != null) {
|
||||
docData.put("money_big", MoneyUtil.toRMBUpper(String.valueOf(unionReimburse.getRealMoney())));
|
||||
} else {
|
||||
docData.put("money_big", "");
|
||||
}
|
||||
|
||||
// 设置报销项目类型标记
|
||||
String wtAct = "□文体活动 □慰问 □日常活动 □专项活动";
|
||||
if ("UNION_REIMBURSE_PROJECT_2".equals(unionReimburse.getReimburseProject())) {
|
||||
wtAct = wtAct.replace("□文体活动", "√文体活动");
|
||||
} else if ("UNION_REIMBURSE_PROJECT_3".equals(unionReimburse.getReimburseProject())) {
|
||||
wtAct = wtAct.replace("□日常活动", "√日常活动");
|
||||
} else if ("UNION_REIMBURSE_PROJECT_4".equals(unionReimburse.getReimburseProject())) {
|
||||
wtAct = wtAct.replace("□专项活动", "√专项活动");
|
||||
} else if ("UNION_REIMBURSE_PROJECT_1".equals(unionReimburse.getReimburseProject())) {
|
||||
wtAct = wtAct.replace("□慰问", "√慰问");
|
||||
}
|
||||
docData.put("bxxm", wtAct);
|
||||
String templateName;
|
||||
Double realMoney = unionReimburse.getRealMoney() != null ? unionReimburse.getRealMoney() : 0.0;
|
||||
String paymentWay = unionReimburse.getPaymentWay();
|
||||
|
||||
if (("UNION_REIMBURSE_PAYMENT_WAY_2").equals(paymentWay)) { // 对私支付
|
||||
docData.put("paymentWay", "对私支付");
|
||||
if (realMoney < 5000) {
|
||||
templateName = "unionReimburse_act_private_small";
|
||||
} else {
|
||||
templateName = "unionReimburse_act_private_big";
|
||||
}
|
||||
} else { // 对公支付
|
||||
docData.put("paymentWay", "对公支付");
|
||||
if (realMoney < 5000) {
|
||||
templateName = "unionReimburse_act_public_small";
|
||||
} else {
|
||||
templateName = "unionReimburse_act_public_big";
|
||||
}
|
||||
}
|
||||
|
||||
if (Print) {
|
||||
exportAsPDF(templateName, docData, unionReimburse, response);
|
||||
} else {
|
||||
exportAsWord(templateName, docData, unionReimburse, response);
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
public void ConExport(String id, HttpServletResponse response, boolean Print) throws Exception {
|
||||
UnionReimburse unionReimburse = unionReimburseService.fetch(id);
|
||||
if (unionReimburse == null) {
|
||||
throw new RuntimeException("报销记录不存在");
|
||||
}
|
||||
HashMap<String, Object> docData = new HashMap<>();
|
||||
|
||||
QRCodeWriter qrCodeWriter = new QRCodeWriter();
|
||||
BitMatrix bitMatrix = qrCodeWriter.encode(unionReimburse.getDocumentNo(), BarcodeFormat.QR_CODE, 80, 80);
|
||||
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
|
||||
File tempFile = File.createTempFile("qrcode_", ".png");
|
||||
javax.imageio.ImageIO.write(bufferedImage, "PNG", tempFile);
|
||||
PictureRenderData pictureRenderData = com.deepoove.poi.data.Pictures.of(tempFile.getAbsolutePath())
|
||||
.size(80, 80)
|
||||
.create();
|
||||
docData.put("qrcode", pictureRenderData);
|
||||
|
||||
docData.put("createTime", DateUtil.format(unionReimburse.getCreateTime(), "yyyy-MM-dd"));
|
||||
docData.put("unitName", unionReimburse.getUnitName());
|
||||
docData.put("userName", unionReimburse.getUserName());
|
||||
docData.put("loginName", unionReimburse.getLoginName());
|
||||
docData.put("mobile", unionReimburse.getMobile());
|
||||
docData.put("paymentNotes", unionReimburse.getPaymentNotes());
|
||||
docData.put("invoiceNumber", unionReimburse.getInvoiceNumber());
|
||||
docData.put("notes", unionReimburse.getNotes());
|
||||
docData.put("realMoney", unionReimburse.getRealMoney());
|
||||
docData.put("reimburseProject", unionReimburse.getReimburseProject());
|
||||
docData.put("paymentWay", unionReimburse.getPaymentWay());
|
||||
//对私支付,付款人信息
|
||||
docData.put("payerLoginname", unionReimburse.getPayerLoginname());
|
||||
docData.put("payerName", unionReimburse.getPayerName());
|
||||
docData.put("bankOfDeposit", unionReimburse.getBankOfDeposit());
|
||||
docData.put("bankCardNumber", unionReimburse.getBankCardNumber());
|
||||
|
||||
//慰问
|
||||
docData.put("condolenceUserName", unionReimburse.getCondolenceUserName());
|
||||
docData.put("condolenceLoginName", unionReimburse.getCondolenceLoginName());
|
||||
docData.put("typeName", unionReimburse.getTypeName());
|
||||
docData.put("way", unionReimburse.getWay());
|
||||
docData.put("condolenceTime", DateUtil.format(unionReimburse.getCondolenceTime(), "yyyy-MM-dd"));
|
||||
docData.put("participants", unionReimburse.getParticipants());
|
||||
//结婚
|
||||
docData.put("marryTime", DateUtil.format(unionReimburse.getMarryTime(), "yyyy-MM-dd"));
|
||||
//生育
|
||||
docData.put("fertilityTime", DateUtil.format(unionReimburse.getFertilityTime(), "yyyy-MM-dd"));
|
||||
//生病住院
|
||||
docData.put("hospitalCausation", unionReimburse.getHospitalCausation());
|
||||
docData.put("hospital", unionReimburse.getHospital());
|
||||
docData.put("hospitalCount", unionReimburse.getHospitalCount());
|
||||
String hospitalTime = DateUtil.format(unionReimburse.getHospitalizationStartTime(), "yyyy-MM-dd") +
|
||||
" 至 " +
|
||||
DateUtil.format(unionReimburse.getHospitalizationEndTime(), "yyyy-MM-dd");
|
||||
docData.put("hospitalTime", hospitalTime);
|
||||
//去世
|
||||
docData.put("deathTime", DateUtil.format(unionReimburse.getDeathTime(), "yyyy-MM-dd"));
|
||||
docData.put("condolenceRelationship", unionReimburse.getCondolenceRelationship());
|
||||
|
||||
|
||||
// 金额转大写
|
||||
if (unionReimburse.getRealMoney() != null) {
|
||||
docData.put("money_big", MoneyUtil.toRMBUpper(String.valueOf(unionReimburse.getRealMoney())));
|
||||
} else {
|
||||
docData.put("money_big", "");
|
||||
}
|
||||
|
||||
// 设置报销项目类型标记
|
||||
String wtAct = "□文体活动 □慰问 □日常活动 □专项活动";
|
||||
if ("UNION_REIMBURSE_PROJECT_2".equals(unionReimburse.getReimburseProject())) {
|
||||
wtAct = wtAct.replace("□文体活动", "√文体活动");
|
||||
} else if ("UNION_REIMBURSE_PROJECT_3".equals(unionReimburse.getReimburseProject())) {
|
||||
wtAct = wtAct.replace("□日常活动", "√日常活动");
|
||||
} else if ("UNION_REIMBURSE_PROJECT_4".equals(unionReimburse.getReimburseProject())) {
|
||||
wtAct = wtAct.replace("□专项活动", "√专项活动");
|
||||
} else if ("UNION_REIMBURSE_PROJECT_1".equals(unionReimburse.getReimburseProject())) {
|
||||
wtAct = wtAct.replace("□慰问", "√慰问");
|
||||
}
|
||||
docData.put("bxxm", wtAct);
|
||||
String templateName;
|
||||
Double realMoney = unionReimburse.getRealMoney() != null ? unionReimburse.getRealMoney() : 0.0;
|
||||
String paymentWay = unionReimburse.getPaymentWay();
|
||||
|
||||
if (("UNION_REIMBURSE_PAYMENT_WAY_2").equals(paymentWay)) { // 对私支付
|
||||
docData.put("paymentWay", "对私支付");
|
||||
if (("生病住院").equals(unionReimburse.getTypeName())) {
|
||||
templateName = "unionReimburse_con_private_hospital";
|
||||
} else if (("结婚").equals(unionReimburse.getTypeName())) {
|
||||
templateName = "unionReimburse_con_private_mary";
|
||||
} else if (("生育").equals(unionReimburse.getTypeName())) {
|
||||
templateName = "unionReimburse_con_private_birth";
|
||||
} else if (("会员去世").equals(unionReimburse.getTypeName()) || ("直系亲属去世").equals(unionReimburse.getTypeName())) {
|
||||
if (realMoney < 5000) {
|
||||
templateName = "unionReimburse_con_private_dead_small";
|
||||
} else {
|
||||
templateName = "unionReimburse_con_private_dead_big";
|
||||
}
|
||||
} else {//其他
|
||||
templateName = "unionReimburse_con_private_other";
|
||||
}
|
||||
} else { // 对公支付
|
||||
docData.put("paymentWay", "对公支付");
|
||||
if (("生病住院").equals(unionReimburse.getTypeName())) {
|
||||
templateName = "unionReimburse_con_public_hospital";
|
||||
} else if (("结婚").equals(unionReimburse.getTypeName())) {
|
||||
templateName = "unionReimburse_con_public_mary";
|
||||
} else if (("生育").equals(unionReimburse.getTypeName())) {
|
||||
templateName = "unionReimburse_con_public_birth";
|
||||
} else if (("会员去世").equals(unionReimburse.getTypeName()) || ("直系亲属去世").equals(unionReimburse.getTypeName())) {
|
||||
if (realMoney < 5000) {
|
||||
templateName = "unionReimburse_con_public_dead_small";
|
||||
} else {
|
||||
templateName = "unionReimburse_con_public_dead_big";
|
||||
}
|
||||
} else {//其他
|
||||
templateName = "unionReimburse_con_public_other";
|
||||
}
|
||||
}
|
||||
|
||||
if (Print) {
|
||||
exportAsPDF(templateName, docData, unionReimburse, response);
|
||||
} else {
|
||||
exportAsWord(templateName, docData, unionReimburse, response);
|
||||
}
|
||||
}
|
||||
|
||||
// 导出PDF
|
||||
@At
|
||||
private void exportAsPDF(String templateName, HashMap<String, Object> docData,
|
||||
UnionReimburse unionReimburse, HttpServletResponse response) throws Exception {
|
||||
String fileName = "中国地质大学(武汉)工会经费日常报销_" + unionReimburse.getUserName() + "_" +
|
||||
DateUtil.format(unionReimburse.getCreateTime(), "yyyyMMdd") + ".pdf";
|
||||
|
||||
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
|
||||
XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate(templateName))
|
||||
.render(docData)
|
||||
.writeAndClose(byteArrayOutputStream);
|
||||
byte[] bytes = byteArrayOutputStream.toByteArray();
|
||||
File sourceFile = File.createTempFile("file_convert_origin", ".docx");
|
||||
Files.write(sourceFile.toPath(), bytes, StandardOpenOption.WRITE);
|
||||
|
||||
File pdfFile = File.createTempFile("file_convert", ".pdf");
|
||||
OfficePlusUtil.convert(sourceFile.getPath(), pdfFile.getPath());
|
||||
CommonDownloadUtil.download(fileName, IoUtil.readBytes(FileUtil.getInputStream(pdfFile)), response);
|
||||
// 删除临时文件
|
||||
FileUtil.del(sourceFile);
|
||||
FileUtil.del(pdfFile.toPath());
|
||||
} catch (IOException e) {
|
||||
log.error("工会报销单据导出PDF失败,id:{},错误信息:{}", unionReimburse.getId(), e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 导出Word
|
||||
@At
|
||||
private void exportAsWord(String templateName, HashMap<String, Object> docData,
|
||||
UnionReimburse unionReimburse, HttpServletResponse response) throws Exception {
|
||||
String fileName = "中国地质大学(武汉)工会经费日常报销_" + unionReimburse.getUserName() + "_" +
|
||||
DateUtil.format(unionReimburse.getCreateTime(), "yyyyMMdd") + ".docx";
|
||||
|
||||
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
|
||||
XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate(templateName))
|
||||
.render(docData)
|
||||
.writeAndClose(byteArrayOutputStream);
|
||||
CommonDownloadUtil.download(fileName, byteArrayOutputStream.toByteArray(), response);
|
||||
} catch (IOException e) {
|
||||
log.error("工会报销单据导出Word失败,id:{},错误信息:{}", unionReimburse.getId(), e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+68
-32
@@ -5,28 +5,38 @@ import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
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.PageUtil;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburse;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.service.UnionReimburseService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
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.aop.Aop;
|
||||
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 org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import static org.openjdk.nashorn.internal.runtime.regexp.joni.Config.log;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/unionReimburse/review")
|
||||
@Ok("json:full")
|
||||
@@ -34,6 +44,8 @@ import java.util.List;
|
||||
@Slf4j
|
||||
public class UnionReimburseReviewController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private UnionReimburseService unionReimburseService;
|
||||
|
||||
@@ -59,41 +71,20 @@ public class UnionReimburseReviewController {
|
||||
String unitId,
|
||||
String reimburseProject) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
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 union_reimburse info ON info.id = ins.businessNo
|
||||
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
|
||||
SELECT
|
||||
info.*
|
||||
FROM
|
||||
union_reimburse info
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t.taskName", "=", "019925d2-6f33-449a-9fb0-34c470222e99");
|
||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
|
||||
if (approval) {
|
||||
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
|
||||
// 已审核:查询 stateId 为 3(报销成功)、4(拒绝)、5(退回)的记录
|
||||
cnd.and("info.stateId", "in", List.of(3, 4, 5));
|
||||
} else {
|
||||
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
|
||||
// 未审核:只查询 stateId 为 2(待审核确认)的记录
|
||||
cnd.and("info.stateId", "=", 2);
|
||||
}
|
||||
// 年度查询条件
|
||||
cnd.andEX("year(info.createTime)", "=", year);
|
||||
@@ -118,10 +109,55 @@ public class UnionReimburseReviewController {
|
||||
} else {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
||||
}
|
||||
cnd.groupBy("t.id");
|
||||
cnd.desc("t.createdAt");
|
||||
cnd.desc("info.createdAt");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<NutMap> pagination = unionReimburseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("审核")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"unionReimburse.review", "h5.unionReimburse.review"}, mode = SaMode.OR)
|
||||
@SLog( tag = "审核工会报销", msg = "审核工会报销")
|
||||
public Result reviewTask(@Param("data") UnionReimburse unionReimburse,String submitType) {
|
||||
if (submitType == null || !List.of("3", "4", "5").contains(submitType)) {
|
||||
return Result.error("无效的审核操作类型");
|
||||
}
|
||||
|
||||
UnionReimburse dbRecord = dao.fetch(UnionReimburse.class, unionReimburse.getId());
|
||||
if (dbRecord == null) {
|
||||
return Result.error("记录不存在");
|
||||
}
|
||||
|
||||
dbRecord.setReviewTime(new Date());
|
||||
dbRecord.setStateId(Integer.parseInt(submitType));
|
||||
dbRecord.setReviewOpinion(unionReimburse.getReviewOpinion());
|
||||
|
||||
dao.update(dbRecord);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("一键审核")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission(value = {"unionReimburse.review", "h5.unionReimburse.review"}, mode = SaMode.OR)
|
||||
@SLog( tag = "一键审核", msg = "一键审核")
|
||||
public Result allReview() {
|
||||
try {
|
||||
List<UnionReimburse> reimbursements = unionReimburseService.query(Cnd.where("stateId", "=", 2));
|
||||
for (UnionReimburse reimbursement : reimbursements) {
|
||||
reimbursement.setStateId(3);
|
||||
reimbursement.setReviewTime(new Date());
|
||||
reimbursement.setReviewOpinion("通过");
|
||||
dao.update(reimbursement);
|
||||
}
|
||||
return Result.success("一键审核完成,共处理 " + reimbursements.size() + " 条记录");
|
||||
} catch (Exception e) {
|
||||
log.error("一键审核失败");
|
||||
return Result.error("一键审核失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+153
@@ -0,0 +1,153 @@
|
||||
package com.budwk.app.zhgh.dayofficework.unionReimburse.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.dev33.satoken.annotation.SaMode;
|
||||
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.flow.engine.FlowEngine;
|
||||
import com.budwk.app.sys.services.SysDictService;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.param.UnionReimbursePageForm;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.service.UnionReimburseService;
|
||||
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.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.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
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;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/unionReimburse/statistics")
|
||||
@Ok("json:full")
|
||||
@Api("慰问统计")
|
||||
@Slf4j
|
||||
public class UnionReimburseStatisticsController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private FlowEngine flowEngine;
|
||||
|
||||
@Inject
|
||||
private SysDictService sysDictService;
|
||||
|
||||
@Inject
|
||||
private UnionReimburseService unionReimburseService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/unionReimburse/statistics/index.html")
|
||||
@SaCheckPermission("unionReimburse.statistics")
|
||||
public void index() {
|
||||
}
|
||||
@At("/h5")
|
||||
@Ok("beetl:/platform/zhghh5/dayofficework/unionReimburse/statistics/index.html")
|
||||
@SaCheckPermission("h5.unionReimburse.statistics")
|
||||
public void h5Index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("慰问类型统计图表数据")
|
||||
@SaCheckPermission(value = {"unionReimburse.statistics", "h5.unionReimburse.statistics"}, mode = SaMode.OR)
|
||||
public Result condolencesType(String year, String unionId, String condolenceTypeId, String way) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
type.`name`,
|
||||
type.`code`,
|
||||
(
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
union_reimburse con
|
||||
LEFT JOIN `vw_user` us ON us.id = con.condolenceUserId
|
||||
WHERE
|
||||
type.name = con.typeName
|
||||
$yearCnd
|
||||
$unionIdCnd
|
||||
$typeCnd
|
||||
$wayCnd
|
||||
$stateId
|
||||
AND con.stateId IN (2, 3)
|
||||
) `value`
|
||||
FROM
|
||||
condolence_type type $condition
|
||||
""");
|
||||
if (Strings.isNotBlank(year)) {
|
||||
sql.setVar("yearCnd", String.format("AND YEAR ( con.createTime )= %s ", year));
|
||||
}
|
||||
if (Strings.isNotBlank(unionId)) {
|
||||
sql.setVar("unionIdCnd", String.format("AND us.unionId = '%s' ", unionId));
|
||||
}
|
||||
if (Strings.isNotBlank(condolenceTypeId)) {
|
||||
sql.setVar("typeCnd", String.format("AND con.condolenceTypeId = '%s' ", condolenceTypeId));
|
||||
}
|
||||
if (Strings.isNotBlank(way)) {
|
||||
sql.setVar("wayCnd", String.format("AND con.way = '%s' ", way));
|
||||
}
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.asc("type.location");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> result = unionReimburseService.listMap(sql);
|
||||
return Result.success(result);
|
||||
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission(value = {"unionReimburse.statistics", "h5.unionReimburse.statistics"}, mode = SaMode.OR)
|
||||
public Result pageData(UnionReimbursePageForm pageForm) {
|
||||
Sql sql = unionReimburseService.getSql(pageForm);
|
||||
Pagination pagination = unionReimburseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出慰问信息列表")
|
||||
@SaCheckPermission(value = {"unionReimburse.statistics", "h5.unionReimburse.statistics"}, mode = SaMode.OR)
|
||||
public void doExport(UnionReimbursePageForm pageForm,
|
||||
HttpServletResponse response){
|
||||
Sql sql = unionReimburseService.getSql(pageForm);
|
||||
List<NutMap> list = unionReimburseService.listMap(sql);
|
||||
|
||||
List<ExcelExportEntity> excelExportEntities = new ArrayList<>();
|
||||
excelExportEntities.add(new ExcelExportEntity("工号","condolenceLoginName",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("姓名","condolenceUserName",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("分工会代码","condolenceUnionCode",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("分工会名称","condolenceUnionName",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("慰问类型","typeName",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("慰问方式","way",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("慰问金额","realMoney",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("慰问时间","newCreateTime",20));
|
||||
excelExportEntities.add(new ExcelExportEntity("录入时间","newCondolenceTime",20));
|
||||
|
||||
try {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, excelExportEntities, list);
|
||||
CommonDownloadUtil.download("慰问信息列表.xlsx", workbook, response);
|
||||
} catch (Exception e) {
|
||||
log.error("导出慰问信息列表失败", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
package com.budwk.app.zhgh.dayofficework.unionReimburse.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.zhgh.staffbenefit.condolence.model.CondolenceType;
|
||||
import com.budwk.app.zhgh.staffbenefit.condolence.service.CondolenceTypeService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName UnionReimburseTypeController
|
||||
* @Author =
|
||||
* @Date 2025/7/29 10:00
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@Api(tags = "职工慰问类型")
|
||||
@At("/platform/unionReimburse/type")
|
||||
public class UnionReimburseTypeController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private CondolenceTypeService typeService;
|
||||
|
||||
@At("")
|
||||
@SaCheckPermission("unionReimburse.type")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/type/index.html")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission("unionReimburse.type")
|
||||
public Result pageData(PageForm pageForm) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or(CondolenceType::getName, "like", "%" + pageForm.getSearchKeyword() + "%");
|
||||
seg.or(CondolenceType::getCode, "like", "%" + pageForm.getSearchKeyword() + "%");
|
||||
cnd.and(seg);
|
||||
}
|
||||
cnd.asc("code");
|
||||
Pagination pagination = typeService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("新增/修改职工慰问类型")
|
||||
@SaCheckPermission("unionReimburse.type")
|
||||
@SLog(tag = "职工慰问系统-慰问类型", msg = "新增/修改职工慰问类型")
|
||||
public Object onSubmit(CondolenceType type) {
|
||||
typeService.insertOrUpdate(type);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("删除职工慰问类型")
|
||||
@SaCheckPermission("unionReimburse.type")
|
||||
@SLog(tag = "职工慰问系统-慰问类型", msg = "删除职工慰问类型")
|
||||
public Object onDelete(String id) {
|
||||
typeService.delete(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("查询职工慰问类型")
|
||||
@SaCheckLogin
|
||||
public Result queryCondolenceType() {
|
||||
List<CondolenceType> list = typeService.query(Cnd.where(CondolenceType::getEnable, "=", true).asc(CondolenceType::getCode));
|
||||
return Result.success(list);
|
||||
}
|
||||
}
|
||||
+214
-64
@@ -1,5 +1,6 @@
|
||||
package com.budwk.app.zhgh.dayofficework.unionReimburse.model;
|
||||
|
||||
import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||
import cn.hutool.db.DaoTemplate;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
@@ -70,41 +71,6 @@ public class UnionReimburse extends BaseModel {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String unionName;
|
||||
|
||||
@Column
|
||||
@Comment("证明人ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String certifierUserId;
|
||||
|
||||
@Column
|
||||
@Comment("证明人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String certifierUserName;
|
||||
|
||||
@Column
|
||||
@Comment("证明人工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 120)
|
||||
private String certifierLoginName;
|
||||
|
||||
@Column
|
||||
@Comment("证明人分工会ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String certifierUnionId;
|
||||
|
||||
@Column
|
||||
@Comment("证明人分工会")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String certifierUnionName;
|
||||
|
||||
@Column
|
||||
@Comment("证明人单位ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String certifierUnitId;
|
||||
|
||||
@Column
|
||||
@Comment("证明人单位")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String certifierUnitName;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("报销类别")
|
||||
@@ -117,6 +83,11 @@ public class UnionReimburse extends BaseModel {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String reimburseProject;
|
||||
|
||||
@Column
|
||||
@Comment("文件编号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String documentNo;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("支付方式")
|
||||
@@ -139,6 +110,56 @@ public class UnionReimburse extends BaseModel {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private Double fundBalance;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("发票张数")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String invoiceNumber;
|
||||
|
||||
@Column
|
||||
@Comment("发票号码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String invoice;
|
||||
|
||||
@Column
|
||||
@Comment("报销事由")
|
||||
@ColDefine(type = ColType.VARCHAR)
|
||||
private String paymentNotes;
|
||||
|
||||
@Column
|
||||
@Comment("备注")
|
||||
@ColDefine(type = ColType.VARCHAR)
|
||||
private String notes;
|
||||
|
||||
@Column
|
||||
@Comment("附件")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> files;
|
||||
|
||||
@Comment("签字")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
@Column(hump = true)
|
||||
private String userSign;
|
||||
|
||||
/**
|
||||
* 对私支付
|
||||
*/
|
||||
|
||||
@Column
|
||||
@Comment("付款人")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String payer;
|
||||
|
||||
@Column
|
||||
@Comment("付款人工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String payerLoginname;
|
||||
|
||||
@Column
|
||||
@Comment("付款人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String payerName;
|
||||
|
||||
@Column
|
||||
@Comment("户名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
@@ -154,32 +175,6 @@ public class UnionReimburse extends BaseModel {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String bankOfDeposit;
|
||||
|
||||
@Column
|
||||
@Comment("发票张数")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String invoiceNumber;
|
||||
|
||||
@Column
|
||||
@Comment("发票号码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String invoice;
|
||||
|
||||
@Column
|
||||
@Comment("支付内容")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
private String paymentNotes;
|
||||
|
||||
@Column
|
||||
@Comment("附件")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> files;
|
||||
|
||||
@Comment("签字")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
@Column(hump = true)
|
||||
private String userSign;
|
||||
|
||||
|
||||
/**
|
||||
* 慰问
|
||||
*/
|
||||
@@ -189,6 +184,66 @@ public class UnionReimburse extends BaseModel {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String condolenceId;
|
||||
|
||||
@Column
|
||||
@Comment("慰问人ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String condolenceUserId;
|
||||
|
||||
@Column
|
||||
@Comment("慰问人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String condolenceUserName;
|
||||
|
||||
@Column
|
||||
@Comment("慰问人工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 120)
|
||||
private String condolenceLoginName;
|
||||
|
||||
@Column
|
||||
@Comment("慰问人性别")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String condolenceSex;
|
||||
|
||||
@Column
|
||||
@Comment("慰问人生日")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String condolenceBirthday;
|
||||
|
||||
@Column
|
||||
@Comment("慰问人身份证")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String condolenceIdCard;
|
||||
|
||||
@Column
|
||||
@Comment("证明人分工会ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String certifierUnionId;
|
||||
|
||||
@Column
|
||||
@Comment("慰问人分工会ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String condolenceUnionId;
|
||||
|
||||
@Column
|
||||
@Comment("慰问人分工会code")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String condolenceUnionCode;
|
||||
|
||||
@Column
|
||||
@Comment("慰问人分工会")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String condolenceUnionName;
|
||||
|
||||
@Column
|
||||
@Comment("慰问人单位ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String condolenceUnitId;
|
||||
|
||||
@Column
|
||||
@Comment("慰问人单位")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String condolenceUnitName;
|
||||
|
||||
@Column
|
||||
@Comment("慰问对象名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@@ -205,9 +260,34 @@ public class UnionReimburse extends BaseModel {
|
||||
private String condolenceType;
|
||||
|
||||
@Column
|
||||
@Comment("慰问金额/报销金额")
|
||||
@Comment("慰问类型名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String typeName;
|
||||
|
||||
@Column
|
||||
@Comment("慰问上传附件说明")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 200)
|
||||
private String condolenceFilesNotes;
|
||||
|
||||
@Column
|
||||
@Comment("慰问类型id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String condolenceTypeId;
|
||||
|
||||
@Column
|
||||
@Comment("慰问类型方式")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String way;
|
||||
|
||||
@Column
|
||||
@Comment("慰问金额")
|
||||
@ColDefine(type = ColType.FLOAT, width = 10, precision = 2)
|
||||
private Double money;
|
||||
private Double condolenceMoney;
|
||||
|
||||
@Column
|
||||
@Comment("实际金额")
|
||||
@ColDefine(type = ColType.FLOAT, width = 10, precision = 2)
|
||||
private Double realMoney;
|
||||
|
||||
|
||||
@Column
|
||||
@@ -215,9 +295,59 @@ public class UnionReimburse extends BaseModel {
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date condolenceTime;
|
||||
|
||||
@Column
|
||||
@Comment("结婚时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date marryTime;
|
||||
|
||||
@Column
|
||||
@Comment("生育时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date fertilityTime;
|
||||
|
||||
@Column
|
||||
@Comment("住院开始时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private Date hospitalizationStartTime;
|
||||
|
||||
@Column
|
||||
@Comment("住院结束时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private Date hospitalizationEndTime;
|
||||
|
||||
@Column
|
||||
@Comment("入住医院")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String hospital;
|
||||
|
||||
@Column
|
||||
@Comment("住院病由")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String hospitalCausation;
|
||||
|
||||
@Column
|
||||
@Comment("当年次数")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String hospitalCount;
|
||||
|
||||
@Column
|
||||
@Comment("去逝时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date deathTime;
|
||||
|
||||
@Column
|
||||
@Comment("与被慰问人关系")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String condolenceRelationship;
|
||||
|
||||
@Column
|
||||
@Comment("参与随行人员")
|
||||
@ColDefine(type = ColType.VARCHAR)
|
||||
private String participants;
|
||||
|
||||
|
||||
/**
|
||||
* 活动/建家/日常
|
||||
* 活动
|
||||
*/
|
||||
|
||||
@Column
|
||||
@@ -246,6 +376,11 @@ public class UnionReimburse extends BaseModel {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String activityPlace;
|
||||
|
||||
@Column
|
||||
@Comment("报销金额")
|
||||
@ColDefine(type = ColType.FLOAT, width = 10, precision = 2)
|
||||
private Double money;
|
||||
|
||||
/*
|
||||
* 所属社团
|
||||
*/
|
||||
@@ -265,4 +400,19 @@ public class UnionReimburse extends BaseModel {
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date createTime;
|
||||
|
||||
@Column
|
||||
@Comment("状态(1.待提交,2.待审核确认,3.报销成功,4.拒绝,5.退回)")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private int stateId;
|
||||
|
||||
@Column
|
||||
@Comment("审核意见")
|
||||
@ColDefine(type = ColType.VARCHAR)
|
||||
private String reviewOpinion;
|
||||
|
||||
@Column
|
||||
@Comment("审核时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date reviewTime;
|
||||
|
||||
}
|
||||
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
package com.budwk.app.zhgh.dayofficework.unionReimburse.model;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.DB;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
/**
|
||||
* @author : hongqiwei
|
||||
* @description :
|
||||
* @createDate : 2026/1/20 11:22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("union_reimburse_desc")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("工会报销-附件说明")
|
||||
public class UnionReimburseDesc extends BaseModel {
|
||||
@Column
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("编码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String code;
|
||||
|
||||
@Column
|
||||
@Comment("报销项目Id(1.慰问,2.文体活动,3.日常活动,4.专项活动)")
|
||||
@ColDefine(type = ColType.INT, width = 2)
|
||||
private String reimburseProject;
|
||||
|
||||
@Column
|
||||
@Comment("报销项目名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String name;
|
||||
|
||||
@Column
|
||||
@Comment("附件说明")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 200)
|
||||
private String fileDesc;
|
||||
|
||||
@Column
|
||||
@Comment("排序字段")
|
||||
@Prev({
|
||||
@SQL(db = DB.MYSQL, value = "SELECT IFNULL(MAX(location),0)+1 FROM Condolence_Type"),
|
||||
@SQL(db = DB.ORACLE, value = "SELECT COALESCE(MAX(location),0)+1 FROM Condolence_Type")
|
||||
})
|
||||
private Integer location;
|
||||
|
||||
@Column
|
||||
@Comment("排序")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private int sortNum;
|
||||
}
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.budwk.app.zhgh.dayofficework.unionReimburse.param;
|
||||
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author : hongqiwei
|
||||
* @description :
|
||||
* @createDate : 2026/1/22 15:15
|
||||
*/
|
||||
@Data
|
||||
public class UnionReimbursePageForm extends PageForm {
|
||||
private Integer year;
|
||||
private String unionId;
|
||||
private String condolenceTypeId;
|
||||
private String way;
|
||||
private String reimburseProject;
|
||||
|
||||
private String unitId;
|
||||
}
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package com.budwk.app.zhgh.dayofficework.unionReimburse.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburseDesc;
|
||||
|
||||
public interface UnionReimburseDescService extends BaseService<UnionReimburseDesc> {
|
||||
}
|
||||
+4
@@ -2,6 +2,10 @@ package com.budwk.app.zhgh.dayofficework.unionReimburse.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburse;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.param.UnionReimbursePageForm;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
|
||||
public interface UnionReimburseService extends BaseService<UnionReimburse> {
|
||||
|
||||
Sql getSql(UnionReimbursePageForm pageForm);
|
||||
}
|
||||
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.budwk.app.zhgh.dayofficework.unionReimburse.service.impl;
|
||||
|
||||
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburseDesc;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.service.UnionReimburseDescService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
|
||||
@Slf4j
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class UnionReimburseDescServiceImpl extends BaseServiceImpl<UnionReimburseDesc> implements UnionReimburseDescService {
|
||||
public UnionReimburseDescServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
}
|
||||
+47
@@ -1,17 +1,64 @@
|
||||
package com.budwk.app.zhgh.dayofficework.unionReimburse.service.impl;
|
||||
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburse;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.param.UnionReimbursePageForm;
|
||||
import com.budwk.app.zhgh.dayofficework.unionReimburse.service.UnionReimburseService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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;
|
||||
|
||||
@Slf4j
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> implements UnionReimburseService {
|
||||
public UnionReimburseServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sql getSql(UnionReimbursePageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
LEFT(info.createTime,10) newCreateTime,
|
||||
LEFT(info.condolenceTime,10) newCondolenceTime
|
||||
FROM
|
||||
union_reimburse info
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
// 年度查询条件
|
||||
cnd.andEX("year(info.createTime)", "=", pageForm.getYear());
|
||||
|
||||
// 工会、单位名称查询条件
|
||||
cnd.andEX("info.condolenceUnionId", "=", pageForm.getUnionId());
|
||||
cnd.andEX("info.unitId", "=", pageForm.getUnitId());
|
||||
|
||||
cnd.andEX("info.condolenceTypeId", "=", pageForm.getCondolenceTypeId());
|
||||
cnd.andEX("info.way", "=", pageForm.getWay());
|
||||
|
||||
// 报销项目查询条件
|
||||
cnd.andEX("info.reimburseProject", "=", pageForm.getReimburseProject());
|
||||
// 姓名和工号查询条件
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("info.condolenceUserName",pageForm.getSearchKeyword());
|
||||
seg.orLike("info.condolenceLoginName",pageForm.getSearchKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
cnd.and("info.stateId", "in", List.of(3, 2));
|
||||
|
||||
cnd.desc("info.createTime");
|
||||
sql.setCondition(cnd);
|
||||
return sql;
|
||||
}
|
||||
}
|
||||
|
||||
-1
@@ -137,7 +137,6 @@ public class CondolenceMineController {
|
||||
CondolenceType type = condolenceService.dao().fetch(CondolenceType.class, Cnd.where(CondolenceType::getId, "=", condolence.getType()));
|
||||
NutMap nutMap = Lang.obj2nutmap(condolence);
|
||||
nutMap.put("typeName", type.getName());
|
||||
//smsService.send("20182040", "这是一条由智慧工会系统发出的测试消息。");
|
||||
return Result.success(nutMap);
|
||||
}
|
||||
@Inject
|
||||
|
||||
+255
@@ -0,0 +1,255 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
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.service.BaseService;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.FlowEngine;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
|
||||
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.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;
|
||||
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.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
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 org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/22 11:24
|
||||
* @description
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/medicalMutualAid/medical/apply")
|
||||
@Api("医疗互助申请")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
public class MedicalApplyController {
|
||||
|
||||
@Inject
|
||||
private MedicalApplyService medicalApplyService;
|
||||
|
||||
@Inject
|
||||
private FlowEngine flowEngine;
|
||||
|
||||
@Inject
|
||||
private FlowCommonService flowCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/medical/apply/index.html")
|
||||
@SaCheckPermission("medicalMutualAid.medical.apply")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取疾病列表")
|
||||
@SaCheckLogin
|
||||
public Result getDiseaseList() {
|
||||
List<MedicalDiseaseType> typeList = medicalApplyService.dao().query(MedicalDiseaseType.class, Cnd.NEW().asc(MedicalDiseaseType::getDiseaseCode));
|
||||
return Result.success(typeList);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("获取可以申请补助的人")
|
||||
@SaCheckPermission("medicalMutualAid.medical.apply")
|
||||
public Result getSubsidyUser(String id, Integer year, String keyword) {
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
us.id,
|
||||
us.sex,
|
||||
us.birthday,
|
||||
us.loginname,
|
||||
us.username,
|
||||
us.unitName,
|
||||
us.homeAddress,
|
||||
us.idCard,
|
||||
TIMESTAMPDIFF(YEAR, us.birthday, CURDATE()) AS age
|
||||
FROM
|
||||
vw_user us
|
||||
LEFT JOIN aid_fund_member_pay pay ON pay.userId = us.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
|
||||
SqlExpressionGroup group = new SqlExpressionGroup();
|
||||
group.orLike("us.username", keyword);
|
||||
group.orLike("us.loginname", keyword);
|
||||
group.orLike("us.oldLoginName", keyword);
|
||||
group.or("us.id", "=", keyword);
|
||||
cnd.and(group);
|
||||
|
||||
cnd.and("pay.isPayed", "=", 1);
|
||||
|
||||
Integer applyYear = DateUtil.thisYear();
|
||||
if (StrUtil.isNotBlank(id)) {
|
||||
//如果不等于空的话,则是编辑查询申请年的人员
|
||||
MedicalApply medicalApply = medicalApplyService.dao().fetch(MedicalApply.class, id);
|
||||
applyYear = DateUtil.year(DateUtil.parse(medicalApply.getApplyTime()));
|
||||
} else {
|
||||
//如果等于空,就代表不是编辑
|
||||
if (year != null) {
|
||||
applyYear = year;
|
||||
}
|
||||
}
|
||||
|
||||
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.hasRoleOr(RoleConstant.RETIREMENT_WORKPLACE.name())) {
|
||||
group1.and("us.aidFundMemberUserType", "=", "离退休人员");
|
||||
}
|
||||
cnd.and(group1);
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
|
||||
Pagination pagination = medicalApplyService.listPageMap(1, 10, sql);
|
||||
List<NutMap> list = pagination.getList();
|
||||
list.forEach(map -> {
|
||||
String loginname = map.getString("loginname");
|
||||
Sys_user user = medicalApplyService.dao().fetch(Sys_user.class, Cnd.where("oldLoginName", "=", loginname));
|
||||
if (Lang.isNotEmpty(user)) {
|
||||
//说明变更过工号 那页面上需要显示变更过的工号
|
||||
map.setv("loginname", user.getLoginname());
|
||||
map.setv("id", user.getId());
|
||||
}
|
||||
});
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取累计补助金额")
|
||||
@SaCheckPermission("medicalMutualAid.medical.apply")
|
||||
public Result getMedicalSubsidyMoney(String userId) {
|
||||
if (StrUtil.isBlank(userId)) {
|
||||
return Result.error("参数错误");
|
||||
}
|
||||
NutMap medicalSubsidyMoney = medicalApplyService.getMedicalSubsidyMoney(userId);
|
||||
return Result.success(medicalSubsidyMoney);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("获取补助申请次数")
|
||||
@SaCheckPermission("medicalMutualAid.medical.apply")
|
||||
public Result getMedicalApplyNum(String userId) {
|
||||
if (StrUtil.isBlank(userId)) {
|
||||
return Result.error("参数错误");
|
||||
}
|
||||
Integer medicalApplyNum = medicalApplyService.getMedicalApplyNum(userId);
|
||||
return Result.success(medicalApplyNum);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("保存")
|
||||
@SLog(tag = "医疗互助申请", msg = "保存申请")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("medicalMutualAid.medical.apply")
|
||||
public Result save(@Param("data") MedicalApply medicalApply) {
|
||||
|
||||
if (StrUtil.isNotBlank(medicalApply.getId())) {
|
||||
medicalApplyService.dao().clear(MedicalApplyCost.class, Cnd.where(MedicalApplyCost::getApplyId, "=", medicalApply.getId()));
|
||||
medicalApplyService.delete(medicalApply.getId());
|
||||
}
|
||||
medicalApply.setApplyTime(DateUtil.now());
|
||||
medicalApplyService.insertWith(medicalApply, "costList");
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("提交")
|
||||
@SLog(tag = "医疗互助申请", msg = "提交申请")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("medicalMutualAid.medical.apply")
|
||||
public Result submit(@Param("data") MedicalApply medicalApply) {
|
||||
if (StrUtil.isNotBlank(medicalApply.getId())) {
|
||||
medicalApplyService.dao().clear(MedicalApplyCost.class, Cnd.where(MedicalApplyCost::getApplyId, "=", medicalApply.getId()));
|
||||
medicalApplyService.delete(medicalApply.getId());
|
||||
}
|
||||
medicalApply.setApplyTime(DateUtil.now());
|
||||
medicalApplyService.insertWith(medicalApply, "costList");
|
||||
Sys_user user = medicalApplyService.dao().fetch(Sys_user.class, medicalApply.getUserId());
|
||||
// 开启流程实例
|
||||
Dict args = Dict.create();
|
||||
args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode());
|
||||
args.set(FlowConst.FORM_DATA, medicalApply);
|
||||
args.set("aidFundMemberUserType", user.getAidFundMemberUserType());
|
||||
ProcessInstance instance = flowEngine.startProcessInstanceByKey("YLBB", medicalApply.getId(), SecurityUtil.getUserId(), args);
|
||||
|
||||
// 自动完成第一个申请任务
|
||||
List<ProcessTask> doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null);
|
||||
for (ProcessTask task : doingTaskList) {
|
||||
flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args);
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("重新提交")
|
||||
@SLog(tag = "医疗互助申请", msg = "重新提交")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("medicalMutualAid.medical.apply")
|
||||
public Result submitAgain(@Param("data") MedicalApply medicalApply, @Param("taskId") Long taskId) {
|
||||
medicalApplyService.update(medicalApply);
|
||||
medicalApplyService.dao().clear(MedicalApplyCost.class, Cnd.where(MedicalApplyCost::getApplyId, "=", medicalApply.getId()));
|
||||
medicalApplyService.insert(medicalApply.getCostList());
|
||||
|
||||
Dict dict = Dict.create();
|
||||
dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId);
|
||||
dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode());
|
||||
flowCommonService.executeTask(dict);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("查询是否有进行中的申请")
|
||||
@SaCheckPermission("medicalMutualAid.medical.apply")
|
||||
public Result getIsAfootMedicalApply(String userId, String id) {
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalSetting;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/22 08:58
|
||||
* @description 补助参数配置
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/medicalMutualAid/medical/basicSetting")
|
||||
@Api("医疗互助补助参数配置")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
public class MedicalBasicSettingController {
|
||||
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/medical/basicSetting/index.html")
|
||||
@SaCheckPermission("medicalMutualAid.medical.basicSetting")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
public Result getSetting() {
|
||||
return Result.success(baseService.dao().fetch(MedicalSetting.class, Cnd.NEW()));
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("保存/修改参数配置")
|
||||
@SaCheckPermission("medicalMutualAid.medical.basicSetting")
|
||||
public Result doSubmit(MedicalSetting medicalSetting) {
|
||||
baseService.insertOrUpdate(medicalSetting);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
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.service.BaseService;
|
||||
import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalDiseaseType;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
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.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/21 10:52
|
||||
* @description 医疗互助疾病类型表
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/medicalMutualAid/medical/diseaseType")
|
||||
@Api("医疗互助疾病类型")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
public class MedicalDiseaseTypeController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/medical/diseaseType/index.html")
|
||||
@SaCheckPermission("medicalMutualAid.medical.diseaseType")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("medicalMutualAid.medical.diseaseType")
|
||||
public Result pageData(PageForm pageForm) {
|
||||
Sql sql = Sqls.create("SELECT * FROM medical_disease_type $condition");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (ObjectUtil.isNotEmpty(pageForm.getSearchKeyword())) {
|
||||
cnd.and(Cnd.likeEX("diseaseName", pageForm.getSearchKeyword()));
|
||||
}
|
||||
cnd.asc("diseaseCode");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("保存/修改疾病类型")
|
||||
@SaCheckPermission("medicalMutualAid.medical.diseaseType")
|
||||
public Result doSubmit(MedicalDiseaseType medicalDiseaseType) {
|
||||
baseService.insertOrUpdate(medicalDiseaseType);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("删除疾病类型")
|
||||
@SaCheckPermission("medicalMutualAid.medical.diseaseType")
|
||||
public Object doDelete(String id) {
|
||||
baseService.dao().clear(MedicalDiseaseType.class, Cnd.where(MedicalDiseaseType::getId, "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+174
@@ -0,0 +1,174 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.controller;
|
||||
|
||||
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.result.Result;
|
||||
import com.budwk.app.base.utils.PageUtil;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
import com.budwk.app.flow.service.FlowCommonService;
|
||||
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 io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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.dao.util.cri.SqlExpressionGroup;
|
||||
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.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/23 17:09
|
||||
* @description 互管会审核
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/medicalMutualAid/medical/foundationAudit")
|
||||
@Api("医疗互助校互管会审核")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
public class MedicalFoundationAuditController {
|
||||
|
||||
@Inject
|
||||
private MedicalApplyService medicalApplyService;
|
||||
|
||||
@Inject
|
||||
private FlowCommonService flowCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/medical/foundationAudit/index.html")
|
||||
@SaCheckPermission("medicalMutualAid.medical.foundationAudit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@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);
|
||||
Pagination<NutMap> pageVO = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> costList = medicalApplyService.getCostList(pageVO.getList());
|
||||
pageVO.setList(costList);
|
||||
return Result.success(pageVO);
|
||||
}
|
||||
|
||||
@At
|
||||
@SLog(tag = "医院补助-互管会审核", msg = "修改了一条住院记录")
|
||||
@SaCheckPermission("medicalMutualAid.medical.foundationAudit")
|
||||
public Result updateCost(String data) {
|
||||
List<MedicalApplyCost> applyCosts = Json.fromJsonAsList(MedicalApplyCost.class, data);
|
||||
medicalApplyService.updateIgnoreNull(applyCosts);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SLog(tag = "医院补助-互管会审核", msg = "互管会审核了一条记录")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("medicalMutualAid.medical.foundationAudit")
|
||||
public Result executeTask(@Param("data") String param) {
|
||||
if (StrUtil.isBlank(param)) {
|
||||
return Result.error("参数错误");
|
||||
}
|
||||
Dict args = Json.fromJson(Dict.class, param);
|
||||
String loveSubsidyMoney = args.getStr("tf_loveSubsidyMoney");
|
||||
String forecastSubsidyMoney = args.getStr("tf_forecastSubsidyMoney");
|
||||
if (args.getInt("submitType") == 1) {
|
||||
medicalApplyService.update(Chain.make("loveSubsidyMoney", loveSubsidyMoney)
|
||||
.add("forecastSubsidyMoney", forecastSubsidyMoney),
|
||||
Cnd.where("id", "=", args.getStr("id")));
|
||||
}
|
||||
flowCommonService.executeTask(args);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("预测补助金额")
|
||||
@SaCheckPermission("medicalMutualAid.medical.foundationAudit")
|
||||
public Result calcMedicalMoney(String id, String diseaseId) {
|
||||
NutMap nutMap = medicalApplyService.calcMedicalMoney(id, diseaseId);
|
||||
return Result.success(nutMap);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+161
@@ -0,0 +1,161 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
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.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.SecurityUtil;
|
||||
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;
|
||||
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.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
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 org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/23 09:17
|
||||
* @description 我的申请
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/medicalMutualAid/medical/mine")
|
||||
@Api("医疗互助我的申请")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
public class MedicalMineController {
|
||||
|
||||
|
||||
@Inject
|
||||
private MedicalApplyService medicalApplyService;
|
||||
|
||||
@Inject
|
||||
private FlowEngine flowEngine;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/medical/mine/index.html")
|
||||
@SaCheckPermission("medicalMutualAid.medical.mine")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("分页查询")
|
||||
@SaCheckPermission("medicalMutualAid.medical.mine")
|
||||
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 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.and("info.userId", "=", SecurityUtil.getUserId());
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
||||
} else {
|
||||
cnd.desc("info.applyTime");
|
||||
}
|
||||
|
||||
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
|
||||
@ApiOperation("删除")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("medicalMutualAid.medical.mine")
|
||||
@SLog(tag = "医疗补助系统-我的补助", msg = "删除我的补助申请")
|
||||
public Result delete(@Param("id") String id) {
|
||||
medicalApplyService.delete(id);
|
||||
medicalApplyService.dao().clear(MedicalApplyCost.class, Cnd.where(MedicalApplyCost::getApplyId, "=", id));
|
||||
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("medicalMutualAid.medical")
|
||||
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"));
|
||||
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());
|
||||
nutMap.put("loginName", user.getLoginname());
|
||||
nutMap.put("userName", user.getUsername());
|
||||
nutMap.put("unitName", user.getUnitName());
|
||||
nutMap.put("unionName", user.getUnionName());
|
||||
nutMap.put("aidFundDeductTime", user.getAidFundDeductTime());
|
||||
nutMap.put("diseaseName", diseaseType.getDiseaseName());
|
||||
nutMap.put("isMajorDiseases", diseaseType.getIsMajorDiseases());
|
||||
return Result.success(nutMap);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+150
@@ -0,0 +1,150 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.controller;
|
||||
|
||||
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.result.Result;
|
||||
import com.budwk.app.base.utils.PageUtil;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
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 io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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.dao.util.cri.SqlExpressionGroup;
|
||||
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.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/23 16:14
|
||||
* @description 校医院审核
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/medicalMutualAid/medical/schoolHospitalAudit")
|
||||
@Api("医疗互助校医院审核")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
public class MedicalSchoolHospitalAuditController {
|
||||
|
||||
|
||||
@Inject
|
||||
private MedicalApplyService medicalApplyService;
|
||||
|
||||
@Inject
|
||||
private FlowCommonService flowCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/medical/schoolHospitalAudit/index.html")
|
||||
@SaCheckPermission("medicalMutualAid.medical.schoolHospitalAudit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@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);
|
||||
Pagination<NutMap> pageVO = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> costList = medicalApplyService.getCostList(pageVO.getList());
|
||||
pageVO.setList(costList);
|
||||
return Result.success(pageVO);
|
||||
}
|
||||
|
||||
@At
|
||||
@SLog(tag = "医院补助-校医院审核", msg = "校医院审核了一条记录")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("medicalMutualAid.medical.schoolHospitalAudit")
|
||||
public Result executeTask(@Param("data") String param, String id){
|
||||
Dict args = Json.fromJson(Dict.class, param);
|
||||
if (args.getInt("submitType") == 1) {
|
||||
String tfDiseaseId = args.getStr("tf_diseaseId");
|
||||
medicalApplyService.update(Chain.make("diseaseId", tfDiseaseId), Cnd.where("id", "=", id));
|
||||
}
|
||||
flowCommonService.executeTask(args);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
+241
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+120
@@ -0,0 +1,120 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.controller;
|
||||
|
||||
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.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.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.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
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 org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/23 15:19
|
||||
* @description 分工会审核
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/medicalMutualAid/medical/unionAudit")
|
||||
@Api("医疗互助分工会审核")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
public class MedicalUnionAuditController {
|
||||
|
||||
@Inject
|
||||
private MedicalApplyService medicalApplyService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/medical/unionAudit/index.html")
|
||||
@SaCheckPermission("medicalMutualAid.medical.unionAudit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@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.setCondition(cnd);
|
||||
Pagination<NutMap> pageVO = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> costList = medicalApplyService.getCostList(pageVO.getList());
|
||||
pageVO.setList(costList);
|
||||
return Result.success(pageVO);
|
||||
}
|
||||
}
|
||||
+135
@@ -0,0 +1,135 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
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;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/22 09:58
|
||||
* @description 医疗互助申请表
|
||||
*/
|
||||
@Data
|
||||
@Comment("医疗互助申请表")
|
||||
@Accessors(chain = true)
|
||||
@Table("medical_apply")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MedicalApply extends BaseModel {
|
||||
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String userId;
|
||||
|
||||
@Column
|
||||
@Comment("申请时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String applyTime;
|
||||
|
||||
@Column
|
||||
@Comment("家庭住址")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 500)
|
||||
private String homeAddress;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("联系电话")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String mobile;
|
||||
|
||||
@Column
|
||||
@Comment("身份证号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String idCard;
|
||||
|
||||
@Column
|
||||
@Comment("年龄")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String age;
|
||||
|
||||
@Column
|
||||
@Comment("申请次数")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer applyNum;
|
||||
|
||||
@Column
|
||||
@Comment("累计补助金额")
|
||||
@Default("0")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
private BigDecimal medicalSubsidyMoney;
|
||||
|
||||
@Column
|
||||
@Comment("报销类型")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String subsidyType;
|
||||
|
||||
@Column
|
||||
@Comment("补助金额")
|
||||
@Default("0")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
private BigDecimal subsidyMoney;
|
||||
|
||||
@Column
|
||||
@Comment("预测补助金额")
|
||||
@Default("0")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
private BigDecimal forecastSubsidyMoney;
|
||||
|
||||
@Column
|
||||
@Comment("爱心补助金额")
|
||||
@Default("0")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
private BigDecimal loveSubsidyMoney;
|
||||
|
||||
@Column
|
||||
@Comment("家庭年度总收入")
|
||||
@Default("0")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
private BigDecimal familyIncome;
|
||||
|
||||
@Column
|
||||
@Comment("疾病种类id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String diseaseId;
|
||||
|
||||
@Column
|
||||
@Comment("备注")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 300)
|
||||
private String note;
|
||||
|
||||
@Column
|
||||
@Comment("填写人工号")
|
||||
@PrevInsert(els = @EL("$me.operatorLoginName()"))
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String applyLoginName;
|
||||
|
||||
@Column
|
||||
@Comment("附件")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> files;
|
||||
|
||||
@Many(field = "applyId")
|
||||
private List<MedicalApplyCost> costList;
|
||||
|
||||
public String operatorLoginName() {
|
||||
return SecurityUtil.getUserLoginname();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/22 11:10
|
||||
* @description 申请住院记录
|
||||
*/
|
||||
@Data
|
||||
@Comment("医疗互助申请表")
|
||||
@Accessors(chain = true)
|
||||
@Table("medical_apply_cost")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MedicalApplyCost extends BaseModel {
|
||||
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("主键Id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String applyId;
|
||||
|
||||
@Column
|
||||
@Comment("就诊开始时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String visitStartTime;
|
||||
|
||||
@Column
|
||||
@Comment("就诊结束时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String visitEndTime;
|
||||
|
||||
@Column
|
||||
@Comment("就诊医院")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String visitHospital;
|
||||
|
||||
@Column
|
||||
@Comment("住院医疗总额")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
private BigDecimal hospitalSumMoney;
|
||||
|
||||
@Column
|
||||
@Comment("实际报销金额")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
private BigDecimal reimbursementMoney;
|
||||
|
||||
@Column
|
||||
@Comment("个人承担部分金额")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
private BigDecimal singleBearMoney;
|
||||
|
||||
@Column
|
||||
@Comment("自费部分金额")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
private BigDecimal personExpenseMoney;
|
||||
|
||||
@Column
|
||||
@Comment("门诊费")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
private BigDecimal outpatientServiceMoney;
|
||||
|
||||
@Column
|
||||
@Comment("靶向药")
|
||||
@Default("0")
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
private BigDecimal bxyMoney;
|
||||
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/21 10:45
|
||||
* @description 疾病类型
|
||||
*/
|
||||
@Data
|
||||
@Comment("医疗互助疾病类型表")
|
||||
@Accessors(chain = true)
|
||||
@Table("medical_disease_type")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MedicalDiseaseType extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@Comment("疾病名称")
|
||||
private String diseaseName;
|
||||
|
||||
@Column
|
||||
@Comment("疾病编码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
private String diseaseCode;
|
||||
|
||||
@Column
|
||||
@Comment("是否重大疾病")
|
||||
@Default("1")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private Boolean isMajorDiseases;
|
||||
|
||||
}
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/21 10:45
|
||||
* @description 疾病类型
|
||||
*/
|
||||
@Data
|
||||
@Comment("医疗互助补助参数配置")
|
||||
@Accessors(chain = true)
|
||||
@Table("medical_setting")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MedicalSetting extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
|
||||
@Column
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@Comment("公费医疗患大病年度累计补助标准")
|
||||
private BigDecimal publicYearInDiseaseMoney;
|
||||
|
||||
@Column
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@Comment("社保患大病年度累计补助标准")
|
||||
private BigDecimal socialYearInDiseaseMoney;
|
||||
|
||||
@Column
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@Comment("患普通疾病单次补助标准")
|
||||
private BigDecimal ordinaryOnceNotInDiseaseMoney;
|
||||
|
||||
@Column
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@Comment("爱心互助基金标准")
|
||||
private BigDecimal loveMoney;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.INT)
|
||||
@Comment("补助比例")
|
||||
private Integer subsidyRatio;
|
||||
|
||||
@Column
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@Comment("患大病补助最高限额")
|
||||
private BigDecimal maxYearInDiseaseMoney;
|
||||
|
||||
@Column
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@Comment("患普通疾病补助最高限额")
|
||||
private BigDecimal maxYearNotInDiseaseMoney;
|
||||
|
||||
@Column
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@Comment("历年总额度最高限额")
|
||||
private BigDecimal previousYearMaxMoney;
|
||||
|
||||
@Column
|
||||
@ColDefine(customType = "decimal(10,2)")
|
||||
@Comment("超过最大限额后每年补助最大金额")
|
||||
private BigDecimal beyondMaxQuotaMoney;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.INT)
|
||||
@Comment("十年未补助首次申请增加比例")
|
||||
private Integer tenYearNeverAddSubsidyRatio;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.INT)
|
||||
@Comment("十五年未补助首次申请增加比例")
|
||||
private Integer fifteenYearNeverAddSubsidyRatio;
|
||||
|
||||
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.param;
|
||||
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/23 09:46
|
||||
* @description
|
||||
*/
|
||||
@Data
|
||||
public class MedicalPageForm extends PageForm {
|
||||
|
||||
|
||||
/**
|
||||
* 疾病id
|
||||
*/
|
||||
private String diseaseId;
|
||||
|
||||
private Integer year;
|
||||
|
||||
private Boolean approval;
|
||||
private String unionId;
|
||||
private String unitId;
|
||||
private String aidFundMemberUserType;
|
||||
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
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 org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface MedicalApplyService extends BaseService<MedicalApply> {
|
||||
|
||||
/**
|
||||
* 获取累计补助金额
|
||||
*
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
NutMap getMedicalSubsidyMoney(String userId);
|
||||
|
||||
|
||||
Integer getMedicalApplyNum(String userId);
|
||||
|
||||
/**
|
||||
* 根据每一条的申请记录获取填写的住院金额
|
||||
*
|
||||
* @param list 申请记录
|
||||
* @return
|
||||
*/
|
||||
List<NutMap> getCostList(List<NutMap> list);
|
||||
|
||||
|
||||
/**
|
||||
* 查询是否有进行中的申请
|
||||
*
|
||||
* @param userId
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
Boolean getIsAfootMedicalApply(String userId, String id);
|
||||
|
||||
|
||||
/**
|
||||
* 计算补助金额
|
||||
* @param applyId
|
||||
* @param diseaseId
|
||||
* @return
|
||||
*/
|
||||
NutMap calcMedicalMoney(String applyId, String diseaseId);
|
||||
}
|
||||
+398
@@ -0,0 +1,398 @@
|
||||
package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
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;
|
||||
import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalDiseaseType;
|
||||
import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.model.MedicalSetting;
|
||||
import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalApplyService;
|
||||
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 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.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author zhf
|
||||
* @date 2026/1/22 18:10
|
||||
* @description
|
||||
*/
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class MedicalApplyServiceImpl extends BaseServiceImpl<MedicalApply> implements MedicalApplyService {
|
||||
public MedicalApplyServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NutMap getMedicalSubsidyMoney(String userId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT SUM(subsidyMoney) medicalSubsidyMoney FROM medical_apply WHERE userId=@userId
|
||||
""").setParam("userId", userId);
|
||||
sql.setCallback(Sqls.callback.map());
|
||||
dao().execute(sql);
|
||||
NutMap info = (NutMap) sql.getResult();
|
||||
return info;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getMedicalApplyNum(String userId) {
|
||||
return 0 + 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> getCostList(List<NutMap> list) {
|
||||
for (NutMap map : list) {
|
||||
List<MedicalApplyCost> costList = dao().query(MedicalApplyCost.class,
|
||||
Cnd.where(MedicalApplyCost::getApplyId, "=", map.getString("id")));
|
||||
BigDecimal hospitalSumMoney$ = costList.stream()
|
||||
.map(MedicalApplyCost::getHospitalSumMoney)
|
||||
.filter(Objects::nonNull)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
map.put("hospitalSumMoney$", hospitalSumMoney$);
|
||||
|
||||
BigDecimal reimbursementMoney$ = costList.stream()
|
||||
.map(MedicalApplyCost::getReimbursementMoney)
|
||||
.filter(Objects::nonNull)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
map.put("reimbursementMoney$", reimbursementMoney$);
|
||||
|
||||
BigDecimal singleBearMoney$ = costList.stream()
|
||||
.map(MedicalApplyCost::getSingleBearMoney)
|
||||
.filter(Objects::nonNull)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
map.put("singleBearMoney$", singleBearMoney$);
|
||||
|
||||
BigDecimal personExpenseMoney$ = costList.stream()
|
||||
.map(MedicalApplyCost::getPersonExpenseMoney)
|
||||
.filter(Objects::nonNull)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
map.put("personExpenseMoney$", personExpenseMoney$);
|
||||
|
||||
BigDecimal outpatientServiceMoney$ = costList.stream()
|
||||
.map(MedicalApplyCost::getOutpatientServiceMoney)
|
||||
.filter(Objects::nonNull)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
map.put("outpatientServiceMoney$", outpatientServiceMoney$);
|
||||
|
||||
BigDecimal bxyMoney$ = costList.stream()
|
||||
.map(MedicalApplyCost::getBxyMoney)
|
||||
.filter(Objects::nonNull)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
map.put("bxyMoney$", bxyMoney$);
|
||||
|
||||
map.put("totalMoney", hospitalSumMoney$
|
||||
.add(reimbursementMoney$)
|
||||
.add(singleBearMoney$)
|
||||
.add(personExpenseMoney$)
|
||||
.add(outpatientServiceMoney$)
|
||||
.add(bxyMoney$));
|
||||
map.put("costList", costList);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean getIsAfootMedicalApply(String userId, String id) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
medical_apply info
|
||||
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
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
SqlExpressionGroup group = new SqlExpressionGroup();
|
||||
group.or("t.taskName", "is", null);
|
||||
group.or("ins.state", "=", ProcessInstanceStateEnum.DOING.getCode());
|
||||
cnd.and(group);
|
||||
cnd.and("info.userId", "=", userId);
|
||||
cnd.andEX("info.id", "!=", id);
|
||||
sql.setCondition(cnd);
|
||||
sql.setCallback(Sqls.callback.integer());
|
||||
dao().execute(sql);
|
||||
return sql.getInt() > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NutMap calcMedicalMoney(String applyId, String diseaseId) {
|
||||
MedicalSetting medicalSetting = dao().fetch(MedicalSetting.class);
|
||||
|
||||
//获取申请信息
|
||||
NutMap applyInfo = this.getApplyInfo(applyId);
|
||||
//获取申请疾病类型
|
||||
MedicalDiseaseType applyDiseaseType = dao().fetch(MedicalDiseaseType.class, Cnd.where(MedicalDiseaseType::getId, "=", applyInfo.getString("diseaseId")));
|
||||
//获取申请住院信息
|
||||
List<MedicalApplyCost> costs = dao().query(MedicalApplyCost.class, Cnd.where("applyId", "=", applyId));
|
||||
//个人承担费用
|
||||
BigDecimal singleBearMoney = costs.stream()
|
||||
.map(MedicalApplyCost::getSingleBearMoney)
|
||||
.filter(Objects::nonNull) // 防御性编程,避免 NPE
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
//自费
|
||||
BigDecimal personExpenseMoney = costs.stream()
|
||||
.map(MedicalApplyCost::getPersonExpenseMoney)
|
||||
.filter(Objects::nonNull) // 防御性编程,避免 NPE
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
//门诊费用
|
||||
BigDecimal outpatientServiceMoney = costs.stream()
|
||||
.map(MedicalApplyCost::getOutpatientServiceMoney)
|
||||
.filter(Objects::nonNull) // 防御性编程,避免 NPE
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
// 靶向药
|
||||
BigDecimal bxyMoney = costs.stream()
|
||||
.map(MedicalApplyCost::getBxyMoney)
|
||||
.filter(Objects::nonNull) // 防御性编程,避免 NPE
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
//可能此次申请人退休变号了,所以也要把旧号的申请记录一起查出来
|
||||
Sys_user currentUser = dao().fetch(Sys_user.class, applyInfo.getString("userId"));
|
||||
List<String> allUserIds = Lang.list(currentUser.getId());
|
||||
|
||||
if (StrUtil.isNotBlank(currentUser.getOldLoginName())) {
|
||||
Sys_user oldUser = dao().fetch(Sys_user.class, Cnd.where("loginname", "=", currentUser.getOldLoginName()));
|
||||
allUserIds.add(oldUser.getId());
|
||||
}
|
||||
|
||||
// 查询申请成功的记录
|
||||
List<NutMap> applyRecords = getApplyRecord(allUserIds);
|
||||
|
||||
//是否首次申请 爱心互助基金 重大疾病
|
||||
boolean isFirstApply = applyRecords.stream().filter(v -> v.getBoolean("isMajorDiseases")).toList().isEmpty();
|
||||
|
||||
|
||||
List<NutMap> applyRecordList = applyRecords.stream().filter(applyRecord -> {
|
||||
int applyYear = DateUtil.year(DateUtil.parse(applyRecord.getString("applyTime")));
|
||||
if (!applyRecord.getString("id").equals(applyId) && applyYear == DateUtil.thisYear()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}).toList();
|
||||
|
||||
//今年获得的补助(重疾)
|
||||
BigDecimal subsidMoneyCurrentYear999 = applyRecordList.stream()
|
||||
.filter(s -> s.getBoolean("isMajorDiseases"))
|
||||
.map(a -> a.getString("loveSubsidyMoney") + a.getString("subsidyMoney"))
|
||||
.map(BigDecimal::new)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
//今年获得的补助(普疾)
|
||||
BigDecimal subsidMoneyCurrentYear000 = applyRecordList.stream()
|
||||
.filter(s -> !s.getBoolean("isMajorDiseases"))
|
||||
.map(a -> a.getString("loveSubsidyMoney") + a.getString("subsidyMoney"))
|
||||
.map(BigDecimal::new)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
//历年来所获全部补助
|
||||
BigDecimal allMoney = applyRecords.stream()
|
||||
.map(a -> a.getString("loveSubsidyMoney") + a.getString("subsidyMoney"))
|
||||
.map(BigDecimal::new)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
//是否超过历年所获补助限额
|
||||
Boolean isBeyondAllMoney = allMoney.compareTo(medicalSetting.getPreviousYearMaxMoney()) > 0;
|
||||
|
||||
|
||||
Sys_user user = dao().fetch(Sys_user.class, SecurityUtil.getUserId());
|
||||
|
||||
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) {
|
||||
ratio += medicalSetting.getFifteenYearNeverAddSubsidyRatio();
|
||||
} else if (fullTenYears) {
|
||||
ratio += medicalSetting.getTenYearNeverAddSubsidyRatio();
|
||||
}
|
||||
|
||||
|
||||
//是否重疾
|
||||
Boolean isMajorDiseases = applyDiseaseType.getIsMajorDiseases();
|
||||
if (StrUtil.isNotBlank(diseaseId)) {
|
||||
MedicalDiseaseType diseaseType = dao().fetch(MedicalDiseaseType.class, Cnd.where(MedicalDiseaseType::getId, "=", diseaseId));
|
||||
isMajorDiseases = diseaseType.getIsMajorDiseases();
|
||||
}
|
||||
|
||||
//普通疾病不包含门诊费用 重大疾病包含门诊费
|
||||
//门诊费用 + 自费 + 个人承担
|
||||
BigDecimal allMedicalMoney;
|
||||
|
||||
|
||||
if (isMajorDiseases) {
|
||||
//如果是重大疾病
|
||||
allMedicalMoney = personExpenseMoney.add(singleBearMoney).add(outpatientServiceMoney).add(bxyMoney);
|
||||
} else {
|
||||
//个人承担费用
|
||||
singleBearMoney = costs.stream()
|
||||
.map(MedicalApplyCost::getSingleBearMoney)
|
||||
.filter(amount -> amount.compareTo(BigDecimal.valueOf(10000)) >= 0) // >= 10000
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
//自费
|
||||
personExpenseMoney = costs.stream()
|
||||
.map(MedicalApplyCost::getPersonExpenseMoney)
|
||||
.filter(amount -> amount.compareTo(BigDecimal.valueOf(10000)) >= 0) // >= 10000
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
allMedicalMoney = personExpenseMoney.add(singleBearMoney).add(outpatientServiceMoney).add(bxyMoney);
|
||||
}
|
||||
allMedicalMoney = allMedicalMoney
|
||||
.multiply(BigDecimal.valueOf(ratio))
|
||||
.divide(BigDecimal.valueOf(100), 10, RoundingMode.HALF_UP);
|
||||
|
||||
//每年最多补多少钱
|
||||
if (isMajorDiseases) {
|
||||
BigDecimal maxYearInDiseaseMoney = medicalSetting.getMaxYearInDiseaseMoney();
|
||||
//最大补助金额减去今年已获得
|
||||
BigDecimal availableLimit = maxYearInDiseaseMoney.subtract(subsidMoneyCurrentYear999);
|
||||
if (allMedicalMoney.compareTo(availableLimit) > 0) {
|
||||
allMedicalMoney = availableLimit;
|
||||
}
|
||||
} else {
|
||||
BigDecimal maxYearNotInDiseaseMoney = medicalSetting.getMaxYearNotInDiseaseMoney();
|
||||
//最大补助金额减去今年已获得
|
||||
BigDecimal availableLimit = maxYearNotInDiseaseMoney.subtract(subsidMoneyCurrentYear000);
|
||||
if (allMedicalMoney.compareTo(availableLimit) > 0) {
|
||||
allMedicalMoney = availableLimit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 根据是否为重大疾病,确定对应的年度补助上限
|
||||
BigDecimal maxYearMedicalMoney = isMajorDiseases
|
||||
? medicalSetting.getMaxYearInDiseaseMoney() // 重大疾病年度最高补助金额
|
||||
: medicalSetting.getMaxYearNotInDiseaseMoney(); // 非重大疾病年度最高补助金额
|
||||
|
||||
// 判断是否满足“从未申请 + 补助金额恰好等于年度上限”的上浮条件
|
||||
boolean isEligibleForBonus = applyRecords.isEmpty()
|
||||
&& allMedicalMoney.compareTo(maxYearMedicalMoney) == 0;
|
||||
|
||||
// 若满足条件,根据连续缴费年限应用对应上浮比例
|
||||
if (isEligibleForBonus) {
|
||||
if (fullFifYears) {
|
||||
// 连续缴满15年且从未申请:应用15年专属上浮比例(如10%)
|
||||
double ratioPercent = medicalSetting.getFifteenYearNeverAddSubsidyRatio(); // 例如返回 10.0 表示 10%
|
||||
BigDecimal ratioFactor = BigDecimal.valueOf(ratioPercent).divide(BigDecimal.valueOf(100), 10, RoundingMode.HALF_UP);
|
||||
allMedicalMoney = allMedicalMoney.multiply(BigDecimal.ONE.add(ratioFactor)).setScale(2, RoundingMode.HALF_UP);
|
||||
} else if (fullTenYears) {
|
||||
// 连续缴满10年且从未申请:应用10年专属上浮比例(如5%)
|
||||
double ratioPercent = medicalSetting.getTenYearNeverAddSubsidyRatio(); // 例如返回 5.0 表示 5%
|
||||
BigDecimal ratioFactor = BigDecimal.valueOf(ratioPercent).divide(BigDecimal.valueOf(100), 10, RoundingMode.HALF_UP);
|
||||
allMedicalMoney = allMedicalMoney.multiply(BigDecimal.ONE.add(ratioFactor)).setScale(2, RoundingMode.HALF_UP);
|
||||
}
|
||||
// 注意:15年条件优先于10年,若同时满足,仅执行15年分支
|
||||
}
|
||||
|
||||
|
||||
if (isBeyondAllMoney) {
|
||||
allMedicalMoney = new BigDecimal("10000");
|
||||
}
|
||||
if (allMedicalMoney.compareTo(BigDecimal.ZERO) < 0) {
|
||||
allMedicalMoney = BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
// 规则1:首次申请的重大疾病患者,若个人自付不足5000元,不给予常规补助(由爱心基金覆盖)
|
||||
if (applyInfo.getInt("applyNum") == 1
|
||||
&& applyDiseaseType.getIsMajorDiseases()
|
||||
&& singleBearMoney != null
|
||||
&& singleBearMoney.compareTo(new BigDecimal("5000")) < 0) {
|
||||
allMedicalMoney = BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
// 规则2:普通疾病患者,只有当至少有一次住院自付 ≥ 10000元时才给予补助;否则补助为0
|
||||
if (!applyDiseaseType.getIsMajorDiseases()
|
||||
&& costs.stream().noneMatch(c -> {
|
||||
BigDecimal bear = c.getSingleBearMoney();
|
||||
return bear != null && bear.compareTo(new BigDecimal("10000")) >= 0;
|
||||
})) {
|
||||
allMedicalMoney = BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
NutMap nutMap = new NutMap();
|
||||
|
||||
if (Objects.equals(applyInfo.getString("state"), ProcessInstanceStateEnum.FINISHED.getCode())) {
|
||||
nutMap.put("loveSubsidyMoney", applyInfo.getString("loveSubsidyMoney"));
|
||||
} else {
|
||||
nutMap.put("loveSubsidyMoney", (isFirstApply && isMajorDiseases ? medicalSetting.getLoveMoney() : 0));
|
||||
}
|
||||
nutMap.put("forecastSubsidyMoney", allMedicalMoney.setScale(2, RoundingMode.HALF_UP));
|
||||
|
||||
return nutMap;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取申请成功的记录
|
||||
*
|
||||
* @param userIds
|
||||
* @return
|
||||
*/
|
||||
public List<NutMap> getApplyRecord(List<String> userIds) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
type.isMajorDiseases
|
||||
FROM
|
||||
medical_apply info
|
||||
LEFT JOIN medical_disease_type type ON info.diseaseId = type.id
|
||||
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("info.userId", "in", userIds);
|
||||
cnd.and("ins.state", "=", ProcessInstanceStateEnum.FINISHED.getCode());
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> listMap = listMap(sql);
|
||||
return listMap;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取申请信息
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
public NutMap getApplyInfo(String id) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
ins.state,
|
||||
type.isMajorDiseases
|
||||
FROM
|
||||
medical_apply info
|
||||
LEFT JOIN medical_disease_type type ON info.diseaseId = type.id
|
||||
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("info.id", "=", id);
|
||||
sql.setCondition(cnd);
|
||||
sql.setCallback(Sqls.callback.map());
|
||||
dao().execute(sql);
|
||||
return (NutMap) sql.getResult();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user