This commit is contained in:
JyuHsin
2025-02-25 11:46:19 +08:00
parent 2420601a69
commit d72090b7e9
12 changed files with 172 additions and 26 deletions
@@ -138,6 +138,7 @@ public enum SickHelpCalc {
if (howManyDidNotApplyYears >= 5) {
otherSubsidyRatio = Math.min(howManyDidNotApplyYears, 10) * 0.01;
sr.setSubsidyDesc("满" + howManyDidNotApplyYears + "年且未补助");
sr.setNoSubsidyYear(howManyDidNotApplyYears);
}
// if (howManyDidNotApplyYears >= 15) {
@@ -41,8 +41,10 @@ public class SickHelpImportController {
excelTemplateEntityList.add(new ExcelExportEntity("工号", "loginName", 20));
excelTemplateEntityList.add(new ExcelExportEntity("姓名", "userName", 20));
// excelTemplateEntityList.add(new ExcelExportEntity("单位", "unitName", 20));
excelTemplateEntityList.add(new ExcelExportEntity("两项自付之和金额(元)", "selfPayTotalMoney", 25));
excelTemplateEntityList.add(new ExcelExportEntity("个人支付金额(元)", "selfPayMoney", 20));
excelTemplateEntityList.add(new ExcelExportEntity("医保四项之和金额(元)", "medicalFourTotalMoney", 30));
excelTemplateEntityList.add(new ExcelExportEntity("两项自付之和金额(元)", "selfPayTotalMoney", 30));
excelTemplateEntityList.add(new ExcelExportEntity("学校二次报销金额(元)", "schoolSecondSubsidyMoney", 30));
excelTemplateEntityList.add(new ExcelExportEntity("个人支付金额(元)", "selfPayMoney", 30));
// excelTemplateEntityList.add(new ExcelExportEntity("账号", "hospitalAccount", 20));
// excelTemplateEntityList.add(new ExcelExportEntity("补助金额(元)", "", 20));
// excelTemplateEntityList.add(new ExcelExportEntity("最近年度", "", 20));
@@ -4,6 +4,7 @@ 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.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
import io.v.nutz.annontation.ViReturn;
import io.v.nutz.modules.models.PageForm;
@@ -181,13 +182,19 @@ public class SickHelpListController {
sick.loginName,
sick.userName,
sick.unitName,
sick.medicalFourTotalMoney,
sick.selfPayMoney,
sick.selfPayTotalMoney,
sick.schoolSecondSubsidyMoney,
sick.noSubsidyYear,
sick.subsidyMoney,
sick.remarks,
sfm.userState\s
sfm.userState,
u.userState userState2
FROM
sick_help sick
LEFT JOIN sick_fund_member sfm ON sfm.loginName = sick.loginName
LEFT JOIN user u on u.loginName = sick.loginName
$condition
""");
Cnd cnd = Cnd.NEW();
@@ -196,6 +203,14 @@ public class SickHelpListController {
sql.setCondition(cnd);
List<NutMap> list = sickHelpListService.listMap(sql);
for (NutMap row : list) {
String userState = row.getString("userState","");
String userState2 = row.getString("userState2","");
if(!userState.equals(userState2)){
row.put("userState",userState2);
}
}
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
exportParams.setTitle(year + "教职工大病医疗互助金补助汇总表");
@@ -205,8 +220,12 @@ public class SickHelpListController {
excelExportEntities.add(new ExcelExportEntity("姓名", "userName", 20));
excelExportEntities.add(new ExcelExportEntity("单位", "unitName", 20));
excelExportEntities.add(new ExcelExportEntity("状态", "userState", 20));
excelExportEntities.add(new ExcelExportEntity("自费金额", "selfPayMoney", 20));
excelExportEntities.add(new ExcelExportEntity("补助金额", "subsidyMoney", 20));
excelExportEntities.add(new ExcelExportEntity("医保四项之和金额(元)", "medicalFourTotalMoney", 30));
excelExportEntities.add(new ExcelExportEntity("两项自付之和金额(元)", "selfPayTotalMoney", 30));
excelExportEntities.add(new ExcelExportEntity("学校二次报销金额(元)", "schoolSecondSubsidyMoney", 30));
excelExportEntities.add(new ExcelExportEntity("个人支付金额(元)", "selfPayMoney", 20));
excelExportEntities.add(new ExcelExportEntity("补助金额(元)", "subsidyMoney", 20));
excelExportEntities.add(new ExcelExportEntity("未补助年份", "noSubsidyYear", 20));
excelExportEntities.add(new ExcelExportEntity("备注", "remarks", 20));
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, excelExportEntities, list);
@@ -66,6 +66,13 @@ public class SickHelp {
@Excel(name = "申报年度", width = 20)
private Integer year;
@Column
@Comment("医保四项之和金额(元)")
@ColDefine(type = ColType.FLOAT, width = 10, precision = 2)
@Excel(name = "医保四项之和金额(元)", numFormat = "#.##", width = 20)
@JsonField(forceString = true)
private BigDecimal medicalFourTotalMoney;
@Column
@Comment("个人支付金额(元)")
@ColDefine(type = ColType.FLOAT, width = 10, precision = 2)
@@ -73,6 +80,13 @@ public class SickHelp {
@JsonField(forceString = true)
private BigDecimal selfPayMoney;
@Column
@Comment("学校二次报销金额(元)")
@ColDefine(type = ColType.FLOAT, width = 10, precision = 2)
@Excel(name = "学校二次报销金额(元)", numFormat = "#.##", width = 20)
@JsonField(forceString = true)
private BigDecimal schoolSecondSubsidyMoney;
@Column
@Comment("两项自付之和金额(元)")
@ColDefine(type = ColType.FLOAT, width = 10, precision = 2)
@@ -124,6 +138,11 @@ public class SickHelp {
@Excel(name = "入会年限∕是否享受过补助", width = 40)
private String subsidyDesc;
@Column
@Comment("未补助年份")
@ColDefine(type = ColType.VARCHAR, width = 20)
private Integer noSubsidyYear;
@Column
@Comment("备注")
@ColDefine(type = ColType.VARCHAR, width = 50)
@@ -61,6 +61,18 @@ public class SickHelpImportServiceImpl extends ViServiceImpl<SickHelp> implement
sick.getValidMsg().add("姓名为空");
sick.setValidMsg(sick.getValidMsg());
}
if(Lang.isEmpty(sick.getMedicalFourTotalMoney())){
sick.getValidMsg().add("医保四项之和金额为空");
sick.setValidMsg(sick.getValidMsg());
}
if(Lang.isEmpty(sick.getSelfPayTotalMoney())){
sick.getValidMsg().add("两项自付之和金额为空");
sick.setValidMsg(sick.getValidMsg());
}
if(Lang.isEmpty(sick.getSchoolSecondSubsidyMoney())){
sick.getValidMsg().add("学校二次报销金额为空");
sick.setValidMsg(sick.getValidMsg());
}
if (Lang.isEmpty(sick.getSelfPayMoney())) {
sick.getValidMsg().add("个人支付金额为空");
sick.setValidMsg(sick.getValidMsg());
@@ -20,13 +20,15 @@ import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.POST;
import org.nutz.mvc.annotation.Param;
import java.util.List;
/**
* @author zxy
* @Description 新建活动
* @createTime 2022年03月07日 10:16:00
*/
@IocBean
@At("/platform/trainSingUp/manage/activity")
@At("/platform/trainSingUp/manage/activity/add")
@Slf4j
public class TrainSignUpActivityAddController {
@@ -36,7 +38,7 @@ public class TrainSignUpActivityAddController {
@Inject
private Dao dao;
@At("/add")
@At("")
@RequiresPermissions("trainSingUp.manage.activity.add")
@Ok("beetl:/platform/trainSingUp/manage/activity_add.html")
public void add() {
@@ -86,4 +88,14 @@ public class TrainSignUpActivityAddController {
//已报人数
return dao.count(TrainSignUpUser.class, Cnd.where("courseId", "=", courseId));
}
@At
@ViReturn
@Ok("json:full")
@RequiresPermissions("trainSingUp.manage.activity.add")
public Object getHistoricalActList() {
List<TrainSignUpActivity> query = dao.query(TrainSignUpActivity.class, Cnd.NEW().desc("activityStartTime"));
return query;
}
}
@@ -122,4 +122,9 @@ public class TrainSignUpActivity extends BaseModel implements Serializable {
@Comment("活动类型")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String trainType;
@Column
@Comment("地点显示名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String addressName;
}
@@ -193,7 +193,8 @@ layout("/mobile/platform.html"){
<span>{{o.campus}}</span>
</div>
<div>
<span class="train-title">地&emsp;&emsp;点:</span>
<span class="train-title" v-if="activity.addressName">{{activity.addressName}}:</span>
<span class="train-title" v-else>地&emsp;&emsp;点:</span>
<span>{{o.courseLocation}}</span>
</div>
<div>
@@ -97,16 +97,12 @@ layout("/layouts/platform.html"){
<!-- <el-input v-model="row.unitName" maxlength="10" size="small"></el-input>-->
<!-- </template>-->
</el-table-column>
<el-table-column label="个人支付金额(元)" prop="selfPayMoney" width="200">
<!-- <template scope="{row}">-->
<!-- <el-input-number v-model="row.selfPayMoney" :min="0" :max="999999"-->
<!-- :precision="2" size="small" style="width: 100%"></el-input-number>-->
<!-- </template>-->
</el-table-column>
<el-table-column label="医保四项之和金额(元)" prop="medicalFourTotalMoney" width="200"></el-table-column>
<el-table-column label="两项自付之和金额(元)" prop="selfPayTotalMoney" width="200"></el-table-column>
<el-table-column label="学校二次报销金额(元)" prop="schoolSecondSubsidyMoney" width="200"></el-table-column>
<el-table-column label="个人支付金额(元)" prop="selfPayMoney" width="200"></el-table-column>
<el-table-column label="未补助年份" prop="noSubsidyYear" width="200"></el-table-column>
<el-table-column label="计算金额(元)" prop="noLimitSubsidyMoney" width="200"></el-table-column>
<el-table-column label="补助金额(元)" prop="subsidyMoney" width="200">
<!-- <template scope="{row}">-->
<!-- <el-input-number v-model="row.subsidyMoney" :min="0" :max="999999"-->
@@ -107,7 +107,7 @@ layout("/layouts/platform.html"){
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
align="center" header-align="center">
<el-table-column align="center" header-align="center" label="序号" type="index" width="80">
<el-table-column align="center" header-align="center" label="序号" type="index" width="80" fixed="left">
<template scope="scope">
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }} </span>
</template>
@@ -119,6 +119,7 @@ layout("/layouts/platform.html"){
:width="column.width"
align="center"
header-align="center"
:fixed="column.fixed"
show-overflow-tooltip
v-for="column in tableColumns"
>
@@ -230,15 +231,19 @@ layout("/layouts/platform.html"){
data() {
return {
tableColumns: [
{prop: 'year', label: '年度', sortable: true},
{prop: 'userName', label: '姓名'},
{prop: 'loginName', label: '工号'},
{prop: 'year', label: '年度', sortable: true, fixed: 'left'},
{prop: 'userName', label: '姓名', fixed: 'left'},
{prop: 'loginName', label: '工号', fixed: 'left',width: 120},
{prop: 'unionName', label: '分工会', sortable: true, width: 150},
{prop: 'unitName', label: '单位', sortable: true, width: 150},
{prop: 'selfPayMoney', label: '个人支付金额(元)', sortable: true, width: 150},
{prop: 'medicalFourTotalMoney', label: '医保四项之和金额(元)', sortable: true, width: 200},
{prop: 'selfPayTotalMoney', label: '两项自付之和金额(元)', sortable: true, width: 200},
{prop: 'schoolSecondSubsidyMoney', label: '学校二次报销金额(元)', sortable: true, width: 200},
{prop: 'selfPayMoney', label: '个人支付金额(元)', sortable: true, width: 170},
{prop: 'noLimitSubsidyMoney', label: '计算金额(元)', sortable: true, width: 150},
{prop: 'subsidyMoney', label: '补助金额(元)', sortable: true, width: 150},
{prop: 'noSubsidyYear', label: '未补助年份', sortable: true, width: 120},
{prop: 'isMember', label: '是否会员', sortable: true, width: 100},
// {prop: 'selfPaySubsidyRatio', label: '个人支付金额补助比例', sortable: true, width: 160},
@@ -250,7 +255,8 @@ layout("/layouts/platform.html"){
],
pageForm: {
year: (new Date().getFullYear() - 1).toString(),
isMember: null
isMember: null,
unitName:''
},
unions: [],
units: [],
@@ -46,6 +46,9 @@ layout("/layouts/platform.html"){
data() {
const that = this
return {
use: false,
historicalActList: [],
historicalAct: "",
trainType: '培训班',
trainTypeList: [],
fromEdit: '',
@@ -62,6 +65,7 @@ layout("/layouts/platform.html"){
restrictLimit: 1,
limitNum: 1,
typeLimits: [],
addressDisplayName: '培训班地点',
},
pickerOptions: {
disabledDate(time) {
@@ -117,6 +121,13 @@ layout("/layouts/platform.html"){
},
},
methods: {
getAddressName() {
if(!this.formData.addressName) {
this.formData.addressDisplayName = this.trainType + '地点'
} else {
this.formData.addressDisplayName = this.formData.addressName
}
},
openUserScope() {
this.userScopeDialog = true
},
@@ -648,6 +659,34 @@ layout("/layouts/platform.html"){
typeChange(val) {
const type = this.trainTypeList.find(o => o.code === val)
this.trainType = type ? type.name : ''
this.getAddressName()
},
async getHistoricalActList() {
const resp = await $.post("/platform/trainSingUp/manage/activity/add/getHistoricalActList", {})
return resp.data
},
async historicalActChange(val) {
const resp = await $.get("/platform/trainSingUp/manage/activity/findOne", { id: val })
if (resp.code === 0) {
/*resp.data.cover = [resp.data.cover]
if (resp.data.wechat) {
resp.data.wechat = [resp.data.wechat]
}*/
this.formData = resp.data
const type = this.trainTypeList.find(o => o.code === this.formData.trainType)
this.trainType = type ? type.name : "培训班"
this.$nextTick(() => {
$("#introduce").html("")
var editor = new E("#introduce")
editor.config.onchange = (html) => {
this.formData.introduce = html.replace(/<p\><\/p>/g, "")
}
editor.create()
editor.txt.html(resp.data.introduce)
})
this.getAddressName()
this.formData.id = ""
}
}
},
async created() {
@@ -656,7 +695,9 @@ layout("/layouts/platform.html"){
await this.initData()
this.activityGroupList = await getActivityGroup()
this.campusList = await getCampus()
this.historicalActList = await this.getHistoricalActList()
this.courseTypeList = await this.getAllType()
this.getAddressName()
},
watch: {
'formData.restrictLimit'(val) {
@@ -1,10 +1,42 @@
<el-form :model="formData" label-width="120px" ref="form">
<el-form :model="formData" label-width="130px" ref="form">
<vi-title title="活动信息"></vi-title>
<el-row :gutter="20" type="flex">
<el-row :gutter="20" type="flex" v-if="fromEdit !== 'edit'">
<el-col :span="12">
<el-form-item label="是否沿用之前活动" prop="use">
<el-radio-group size="medium" v-model="use">
<el-radio-button :label="true" border>沿用之前活动</el-radio-button>
<el-radio-button :label="false" border>不沿用之前活动</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="往期活动" prop="historicalAct">
<el-select :disabled="!use" @change="historicalActChange"
placeholder="请选择往期活动"
style="width: 100%" v-model="historicalAct">
<el-option
:key="item.id"
:label="item.activityName"
:value="item.id"
v-for="item in historicalActList">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" type="flex">
<el-col :span="24">
<el-form-item :rules="{required:true,message: '请输入活动名称', trigger: 'blur'}" label="活动名称"
prop="activityName">
<el-input maxlength="50" v-model="formData.activityName"></el-input>
<el-input maxlength="50" v-model="formData.activityName" placeholder="请输入活动名称"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" type="flex">
<el-col :span="12">
<el-form-item label="地点显示文字"
prop="addressName">
<el-input @input="getAddressName" maxlength="50" v-model="formData.addressName" placeholder="请输入地点显示文字"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
@@ -181,7 +213,7 @@
</template>
</el-table-column>
<el-table-column :label="trainType + '地点'" prop="courseLocation">
<el-table-column :label="formData.addressDisplayName" prop="courseLocation">
<template scope="{row}">
<el-input v-model="row.courseLocation"></el-input>
</template>