添加导出功能

This commit is contained in:
yangjun 2025-01-22 14:02:19 +08:00
parent f6b24005a1
commit 6600a9253f
15 changed files with 192 additions and 40 deletions

View File

@ -13,6 +13,8 @@ import org.jeecg.common.api.CommonAPI;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.demo.xxhbjwxtjxrw.entity.ExpBlkhcl;
import org.jeecg.modules.demo.xxhbjwxtjxrw.entity.Xxhbjwxtjxrw;
import org.jeecg.modules.demo.xxhbjwxtjxrw.service.IXxhbjwxtjxrwService;
@ -26,6 +28,9 @@ import org.jeecg.modules.demo.zjSqxx.service.IZjSqxxService;
import org.jeecg.modules.demo.zjXkxx.entity.ZjXkxx;
import org.jeecg.modules.demo.zjXkxx.service.IZjXkxxService;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
@ -352,4 +357,53 @@ public class XxhbjwxtjxrwController extends JeecgController<Xxhbjwxtjxrw, IXxhbj
return Result.OK(pageList);
}
@RequestMapping(value = "/exportBlkhclXls")
public ModelAndView exportBlkhclXls(HttpServletRequest request, ExpBlkhcl expBlkhcl) {
// return super.exportXls(request, xxhbjwxtjxrw, Xxhbjwxtjxrw.class, "教务系统教学任务");
// Step.1 组装查询条件
QueryWrapper<ExpBlkhcl> queryWrapper = QueryGenerator.initQueryWrapper(expBlkhcl, request.getParameterMap());
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String xnxq = "0";
if(StringUtils.isNotBlank(expBlkhcl.getZjxnxq())){
queryWrapper.eq(StringUtils.isNotBlank(expBlkhcl.getZjxnxq()),"concat(a.xn,a.xqmc)",expBlkhcl.getZjxnxq());
}else if(StringUtils.equals(xnxq,"0")){
String dqxq = commonApi.translateDict("dqxq","1");
queryWrapper.eq("concat(a.xn,a.xqmc)",dqxq);
}
if(StringUtils.isNotBlank(expBlkhcl.getSfxybl())){
if(StringUtils.equals("0",expBlkhcl.getSfxybl())){
queryWrapper.apply(" b.bl_type is not null");
}else{
queryWrapper.apply(" b.bl_type is null");
}
}
queryWrapper.eq( "a.file_shztmc","审核通过");
queryWrapper.like(StringUtils.isNotBlank(expBlkhcl.getZhuanye()),"a.zymc",expBlkhcl.getZhuanye());
queryWrapper.apply(StringUtils.isNotBlank(expBlkhcl.getZhicheng()),"SUBSTRING(a.TEAXM,LOCATE('[',a.TEAXM)+1,locate(']',a.TEAXM)-locate('[',a.TEAXM)-1) = '"+expBlkhcl.getZhicheng()+"'");
// Step.2 获取导出数据
List<ExpBlkhcl> exportList = service.exportBlkhclXls(queryWrapper);
// Step.3 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
//此处设置的filename无效 ,前端会重更新设置一下
String title = "补录考核材料";
mv.addObject(NormalExcelConstants.FILE_NAME, title);
mv.addObject(NormalExcelConstants.CLASS, ExpBlkhcl.class);
//update-begin--Author:liusq Date:20210126 for图片导出报错ImageBasePath未设置--------------------
ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title);
//update-end--Author:liusq Date:20210126 for图片导出报错ImageBasePath未设置----------------------
mv.addObject(NormalExcelConstants.PARAMS,exportParams);
mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
return mv;
}
}

View File

@ -0,0 +1,102 @@
package org.jeecg.modules.demo.xxhbjwxtjxrw.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serializable;
/**
* @Description: 教务系统教学任务
* @Author: jeecg-boot
* @Date: 2024-09-02
* @Version: V1.0
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
public class ExpBlkhcl implements Serializable {
private static final long serialVersionUID = 1L;
/**学年学期*/
@ApiModelProperty(value = "学年学期")
private String xnxqdm;
@Excel(name = "学年学期", width = 15)
@TableField(exist = false)
private String zjxnxq;//专家展示学年学期
/**xn*/
@ApiModelProperty(value = "学年")
private String xn;
/**xqmc*/
@ApiModelProperty(value = "学期")
private String xqmc;
/**kcmc*/
@Excel(name = "课程名称", width = 15)
@ApiModelProperty(value = "课程名称")
private String kcmc;
/**kcrwdm*/
@ApiModelProperty(value = "课程号")
private String kcrwdm;
/**kclb*/
@Excel(name = "课程类别", width = 15)
@ApiModelProperty(value = "课程类别")
private String kclb;
/**xf*/
@ApiModelProperty(value = "学分")
private String xf;
/**zxs*/
@ApiModelProperty(value = "学时")
private String zxs;
/**kkyxmc*/
@Excel(name = "开课单位", width = 15)
@ApiModelProperty(value = "开课单位名称")
private String kkyxmc;
/**所属校内专业(大类)名称*/
@Excel(name = "专业名称", width = 15)
@ApiModelProperty(value = "所属校内专业(大类)")
private String zymc;
/**teaxm*/
@Excel(name = "任课教师[职称]", width = 15)
@ApiModelProperty(value = "任课教师[职称]")
private String teaxm;
/**bjxx*/
@ApiModelProperty(value = "班级")
private String bjxx;
/**sjfs*/
@ApiModelProperty(value = "试卷份数")
private String sjfs;
/**khfsmc*/
@ApiModelProperty(value = "考试方式")
private String khfsmc;
/**isUploadSj*/
@ApiModelProperty(value = "是否能上传考核分析及试卷样本")
private String isUploadSj;
/**jxbrs*/
@ApiModelProperty(value = "jxbrs")
private String jxbrs;
private String fileShztmc;
@TableField(exist = false)
private String zhuanye;
@TableField(exist = false)
private String zhicheng;
@TableField(exist = false)
private String sfxk;//是否选课 0未选 1已选
@TableField(exist = false)
private String blFilePath;//补录材料地址
@TableField(exist = false)
private String blType;//补录类型
@TableField(exist = false)
@Excel(name = "是否需要补录", width = 15)
private String sfxybl;//是否需要补录
}

View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.demo.xxhbjwxtjxrw.entity.ExpBlkhcl;
import org.jeecg.modules.demo.xxhbjwxtjxrw.entity.Xxhbjwxtjxrw;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@ -19,4 +20,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface XxhbjwxtjxrwMapper extends BaseMapper<Xxhbjwxtjxrw> {
IPage<Xxhbjwxtjxrw> listbl(Page<Xxhbjwxtjxrw> page, @Param(Constants.WRAPPER) QueryWrapper<Xxhbjwxtjxrw> queryWrapper);
List<ExpBlkhcl> exportBlkhclXls(@Param(Constants.WRAPPER) QueryWrapper<ExpBlkhcl> queryWrapper);
}

View File

@ -14,4 +14,10 @@
left join bl_kckhclbl b on a.KCRWDM = b.KCRWDM
${ew.customSqlSegment}
</select>
<select id="exportBlkhclXls" resultType="org.jeecg.modules.demo.xxhbjwxtjxrw.entity.ExpBlkhcl">
select a.*,concat(xn,xqmc) as zjxnxq,b.bl_file_path,b.bl_type,if(b.bl_file_path is null,'是','否') sfxybl from xxhbjwxtjxrw a
left join bl_kckhclbl b on a.KCRWDM = b.KCRWDM
${ew.customSqlSegment}
</select>
</mapper>

View File

@ -3,6 +3,7 @@ package org.jeecg.modules.demo.xxhbjwxtjxrw.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.demo.xxhbjwxtjxrw.entity.ExpBlkhcl;
import org.jeecg.modules.demo.xxhbjwxtjxrw.entity.Xxhbjwxtjxrw;
import com.baomidou.mybatisplus.extension.service.IService;
@ -19,4 +20,6 @@ public interface IXxhbjwxtjxrwService extends IService<Xxhbjwxtjxrw> {
void syncList(List<Xxhbjwxtjxrw> outDataList);
IPage<Xxhbjwxtjxrw> listbl(Page<Xxhbjwxtjxrw> page, QueryWrapper<Xxhbjwxtjxrw> queryWrapper);
List<ExpBlkhcl> exportBlkhclXls(QueryWrapper<ExpBlkhcl> queryWrapper);
}

View File

@ -4,6 +4,7 @@ import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.demo.xxhbjwxtjxrw.entity.ExpBlkhcl;
import org.jeecg.modules.demo.xxhbjwxtjxrw.entity.Xxhbjwxtjxrw;
import org.jeecg.modules.demo.xxhbjwxtjxrw.mapper.XxhbjwxtjxrwMapper;
import org.jeecg.modules.demo.xxhbjwxtjxrw.service.IXxhbjwxtjxrwService;
@ -13,6 +14,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
@ -36,6 +38,11 @@ public class XxhbjwxtjxrwServiceImpl extends ServiceImpl<XxhbjwxtjxrwMapper, Xxh
return baseMapper.listbl(page,queryWrapper);
}
@Override
public List<ExpBlkhcl> exportBlkhclXls(QueryWrapper<ExpBlkhcl> queryWrapper) {
return baseMapper.exportBlkhclXls(queryWrapper);
}
@Transactional(rollbackFor = {Exception.class})
public boolean syncList(Collection<Xxhbjwxtjxrw> entityList, boolean isDelete) {
QueryWrapper dqw = new QueryWrapper();

View File

@ -111,7 +111,7 @@ public class XxhbjwxtscwjxxController extends JeecgController<Xxhbjwxtscwjxx, IX
List<Xxhbjwxtscwjxx> list = pageList.getRecords();
if(list.size()>0){
List<Xxhbjwxtscwjxx> list2 = new ArrayList<>();
String sorts[] = ("历次过程性考核-评分标准,历次过程性考核-内容及要求(或试题),课程考核合理性审核记录单,期末考试-评分标准,期未考试-试题(或内容及要求),课程考核质量评价单,课程目标达成情况评价报告,课程教学大纲").split(",");
String sorts[] = ("历次过程性考核-评分标准,历次过程性考核-内容及要求(或试题),课程考核合理性审核记录单,期末考试-评分标准,期未考试-试题(或内容及要求),课程考核质量评价单,课程目标达成情况评价报告,课程教学大纲,bl1-评分依据/标准,bl2-评分依据/标准,bl3-评分依据/标准,bl4-评分依据/标准,bl5-评分依据/标准,bl1-空白试卷或试卷描述,bl2-空白试卷或试卷描述,bl3-空白试卷或试卷描述,bl4-空白试卷或试卷描述,bl5-空白试卷或试卷描述").split(",");
for (String par : sorts){
list2.add(list.stream().filter(item->item.getFjtype().equals(par)).findFirst().orElse(null));

View File

@ -7,7 +7,7 @@
<a-col :lg="6">
<a-form-item name="zjxnxq">
<template #label><span title="学年学期" class="xn-title">学年学期</span></template>
<j-dict-select-tag placeholder="请选择学年学期" v-model:value="queryParam.zjxnxq" :dictCode="`v_xqxn,xqxn,xqxn`" allow-clear />
<j-dict-select-tag placeholder="请选择学年学期" v-model:value="queryParam.zjxnxq" :dictCode="`v_xqxn,xqxn,xqxn,true order by sort asc`" allow-clear />
</a-form-item>
</a-col>
<a-col :lg="6">
@ -68,6 +68,7 @@
</a-col>
<a-col :span="6" style="text-align: right">
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
<a-button type="primary" preIcon="ant-design:download" @click="onExportXls" style="margin-left: 8px">导出</a-button>
</a-col>
</a-row>
</a-form>
@ -96,7 +97,7 @@
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { columnsBl, superQuerySchema } from './Xxhbjwxtjxrw.data';
import { listbl, deleteOne, batchDelete, getImportUrl, getExportUrl } from './Xxhbjwxtjxrw.api';
import { listbl, deleteOne, batchDelete, getImportUrl, getExportBlkhclUrl } from './Xxhbjwxtjxrw.api';
import { downloadFile } from '/@/utils/common/renderUtils';
import XxhbjwxtjxrwModal from './components/XxhbjwxtjxrwModal.vue'
import { useUserStore } from '/@/store/modules/user';
@ -127,8 +128,8 @@ import BlKckhclblModal from '/@/views/bl/blKckhclbl/components/BlKckhclblModal.v
},
},
exportConfig: {
name: "教务系统教学任务",
url: getExportUrl,
name: "补录考核材料",
url: getExportBlkhclUrl,
params: queryParam,
},
importConfig: {

View File

@ -14,6 +14,7 @@ enum Api {
deleteBatch = '/xxhbjwxtjxrw/xxhbjwxtjxrw/deleteBatch',
importExcel = '/xxhbjwxtjxrw/xxhbjwxtjxrw/importExcel',
exportXls = '/xxhbjwxtjxrw/xxhbjwxtjxrw/exportXls',
exportBlkhclXls = '/xxhbjwxtjxrw/xxhbjwxtjxrw/exportBlkhclXls',
}
/**
@ -21,6 +22,7 @@ enum Api {
* @param params
*/
export const getExportUrl = Api.exportXls;
export const getExportBlkhclUrl = Api.exportBlkhclXls;
/**
* api

View File

@ -44,7 +44,7 @@
<a-col :lg="6">
<a-form-item name="zjxnxq">
<template #label><span title="学年学期" class="xn-title">学年学期</span></template>
<j-dict-select-tag placeholder="请选择学年学期" v-model:value="queryParam2.zjxnxq" :dictCode="`v_xqxn,xqxn,xqxn`" allow-clear />
<j-dict-select-tag placeholder="请选择学年学期" v-model:value="queryParam2.zjxnxq" :dictCode="`v_xqxn,xqxn,xqxn,true order by sort asc`" allow-clear />
</a-form-item>
</a-col>
<a-col :lg="6">
@ -230,7 +230,7 @@
<a-col :lg="6">
<a-form-item name="zjxnxq">
<template #label><span title="学年学期" class="xn-title">学年学期</span></template>
<j-dict-select-tag placeholder="请选择学年学期" v-model:value="queryParam.zjxnxq" :dictCode="`v_xqxn,xqxn,xqxn`" allow-clear />
<j-dict-select-tag placeholder="请选择学年学期" v-model:value="queryParam.zjxnxq" :dictCode="`v_xqxn,xqxn,xqxn,true order by sort asc`" allow-clear />
</a-form-item>
</a-col>
<a-col :lg="6">

View File

@ -45,7 +45,7 @@
<a-col :lg="6">
<a-form-item name="zjxnxq">
<template #label><span title="学年学期" class="xn-title">学年学期</span></template>
<j-dict-select-tag placeholder="请选择学年学期" v-model:value="queryParam2.zjxnxq" :dictCode="`v_xqxn,xqxn,xqxn`" allow-clear />
<j-dict-select-tag placeholder="请选择学年学期" v-model:value="queryParam2.zjxnxq" :dictCode="`v_xqxn,xqxn,xqxn,true order by sort asc`" allow-clear />
</a-form-item>
</a-col>
<a-col :lg="6">
@ -231,7 +231,7 @@
<a-col :lg="6">
<a-form-item name="zjxnxq">
<template #label><span title="学年学期" class="xn-title">学年学期</span></template>
<j-dict-select-tag placeholder="请选择学年学期" v-model:value="queryParam.zjxnxq" :dictCode="`v_xqxn,xqxn,xqxn`" allow-clear />
<j-dict-select-tag placeholder="请选择学年学期" v-model:value="queryParam.zjxnxq" :dictCode="`v_xqxn,xqxn,xqxn,true order by sort asc`" allow-clear />
</a-form-item>
</a-col>
<a-col :lg="6">
@ -632,6 +632,7 @@ function searchReset() {
function init() {
//
defHttp.get({ url: '/zjXkxx/zjXkxx/list', params: { pageNo: paginationYxkcProp.value.current,pageSize:paginationYxkcProp.value.pageSize } }).then((res) => {
sfxk.value = 999;
checkData.value = res.records;
paginationYxkcProp.value.total = res.total;
paginationYxkcProp.value.current = res.current;

View File

@ -225,7 +225,7 @@ function searchReset() {
function init(record) {
queryParam.kcrwdm = record.kcrwdm;
queryParam.fjtype = '历次过程性考核-评分标准,历次过程性考核-内容及要求(或试题),课程考核合理性审核记录单,期末考试-评分标准,期未考试-试题(或内容及要求),课程考核质量评价单,课程目标达成情况评价报告,课程教学大纲';
queryParam.fjtype = '历次过程性考核-评分标准,历次过程性考核-内容及要求(或试题),课程考核合理性审核记录单,期末考试-评分标准,期未考试-试题(或内容及要求),课程考核质量评价单,课程目标达成情况评价报告,课程教学大纲,bl1-评分依据/标准,bl2-评分依据/标准,bl3-评分依据/标准,bl4-评分依据/标准,bl5-评分依据/标准,bl1-空白试卷或试卷描述,bl2-空白试卷或试卷描述,bl3-空白试卷或试卷描述,bl4-空白试卷或试卷描述,bl5-空白试卷或试卷描述';
//
//
//

View File

@ -272,7 +272,7 @@ function searchReset() {
function init(record) {
queryParam.kcrwdm = record.kcrwdm;
queryParam.fjtype = '历次过程性考核-评分标准,历次过程性考核-内容及要求(或试题),课程考核合理性审核记录单,期末考试-评分标准,期未考试-试题(或内容及要求),课程考核质量评价单,课程目标达成情况评价报告,课程教学大纲';
queryParam.fjtype = '历次过程性考核-评分标准,历次过程性考核-内容及要求(或试题),课程考核合理性审核记录单,期末考试-评分标准,期未考试-试题(或内容及要求),课程考核质量评价单,课程目标达成情况评价报告,课程教学大纲,bl1-评分依据/标准,bl2-评分依据/标准,bl3-评分依据/标准,bl4-评分依据/标准,bl5-评分依据/标准,bl1-空白试卷或试卷描述,bl2-空白试卷或试卷描述,bl3-空白试卷或试卷描述,bl4-空白试卷或试卷描述,bl5-空白试卷或试卷描述';
//
//
//

View File

@ -43,7 +43,7 @@
</a-col>
<a-col :span="24">
<a-form-item label="学年学期" id="ZjSqxxForm-xnxq" name="xnxq">
<JSelectMultiple v-model:value="formData.xnxq" placeholder="请选择学年学期,如果不选,默认全部" :dictCode="`v_xqxn,xqxn,xqxn`"></JSelectMultiple>
<JSelectMultiple v-model:value="formData.xnxq" placeholder="请选择学年学期,如果不选,默认全部" :dictCode="`v_xqxn,xqxn,xqxn,true order by sort asc`"></JSelectMultiple>
</a-form-item>
</a-col>
<a-col :span="24">

View File

@ -47,7 +47,7 @@
</a-col>
<a-col :span="24">
<a-form-item label="学年学期" id="ZjSqxxForm-xnxq" name="xnxq">
<JSelectMultiple v-model:value="item.xnxq" placeholder="请选择学年学期,如果不选,默认全部" :dictCode="`v_xqxn,xqxn,xqxn`"></JSelectMultiple>
<JSelectMultiple v-model:value="item.xnxq" placeholder="请选择学年学期,如果不选,默认全部" :dictCode="`v_xqxn,xqxn,xqxn,true order by sort asc`"></JSelectMultiple>
</a-form-item>
</a-col>
<a-col :span="24">
@ -226,33 +226,6 @@
<!-- 基本制度建设 -->
<a-col :span="24" v-if="item.sqfw == '4'">
<a-row>
<!-- <a-col :span="24">
<a-form-item label="授权开始时间" id="ZjSqxxForm-sqStartTime" name="sqStartTime">
<a-date-picker
placeholder="请选择授权开始时间"
v-model:value="item.sqStartTime"
value-format="YYYY-MM-DD"
style="width: 100%"
allow-clear
/>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="授权结束时间" id="ZjSqxxForm-sqEndTime" name="sqEndTime">
<a-date-picker
placeholder="请选择授权结束时间"
v-model:value="item.sqEndTime"
value-format="YYYY-MM-DD"
style="width: 100%"
allow-clear
/>
</a-form-item>
</a-col> -->
<!-- <a-col :span="24">
<a-form-item label="学年学期" id="ZjSqxxForm-xnxq" name="xnxq">
<JSelectMultiple v-model:value="item.xnxq" placeholder="请选择学年学期,如果不选,默认全部" :dictCode="`v_xqxn,xqxn,xqxn`"></JSelectMultiple>
</a-form-item>
</a-col> -->
<a-col :span="24">
<a-form-item label="开课单位" id="ZjSqxxForm-kkdw" name="kkdw">
<JSelectMultiple v-model:value="item.kkdw" placeholder="请选择开课单位,如果不选,默认全部" :dictCode="`bl_kkdw,kkdw,kkdw`"></JSelectMultiple>