导入导出 模版下载 bug修复

This commit is contained in:
liumengyu
2026-08-21 12:08:52 +08:00
parent 2a5bf443fe
commit 179b12e3bf
65 changed files with 389 additions and 964 deletions
@@ -10,7 +10,7 @@ import lombok.Data;
* 保障类别
*/
@Data
@TableName(value = "保障类别", schema = "JW")
@TableName(value = "保障类别")
public class BZLB {
/**
@@ -77,7 +77,7 @@ public class BZTGMX extends BaseEntity {
private String zylb;
/**
* json字典
* JSONZD
*/
private String jsonzd;
@@ -218,7 +218,7 @@ public class DBVersion extends BaseEntity {
private String jSXSBJ;
/**
* json字典
* JSONZD
*/
private String jsonZD;
@@ -104,7 +104,7 @@ public class FWBDRWB extends BaseEntity {
private LocalDateTime jssj;
/**
* json字典
* JSONZD
*/
private String jsonzd;
@@ -74,7 +74,7 @@ public class FWBDWPRYB extends BaseEntity {
private String wcqk;
/**
* json字典
* JSONZD
*/
private String jsonzd;
@@ -124,7 +124,7 @@ public class FWBDXQB extends BaseEntity {
private LocalDateTime jssj;
/**
* json字典
* JSONZD
*/
private String jsonzd;
@@ -216,9 +216,9 @@ public class JCXX extends BaseEntity {
private String xqk;
/**
* json字典
* JSONZD
*/
@TableField("json字典")
@TableField("JSONZD")
private String jsonzd;
/**
@@ -113,7 +113,7 @@ public class JSB extends BaseEntity {
private String jc;
/**
* json字典
* JSONZD
*/
@TableField("JSONZD")
private String jsonzd;
@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "教学任务", schema = "JW")
@TableName(value = "教学任务")
public class JXRW extends BaseEntity {
/**
@@ -108,7 +108,7 @@ public class JYB {
@TableField(value = "序号标识", updateStrategy = FieldStrategy.NEVER)
private Integer xhbs;
/** json字典 */
/** JSONZD */
@TableField("JSONZD")
private String jsonzd;
@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "教研室任务书", schema = "JW")
@TableName(value = "教研室任务书")
public class JYSRWS extends BaseEntity {
/**
@@ -151,8 +151,8 @@ public class KB {
@TableField("课程建设方式")
private String kcjsfs;
/** json字典 */
@TableField("json字典")
/** JSONZD */
@TableField("JSONZD")
private String jsonzd;
/** 政治类课程 */
@@ -13,7 +13,7 @@ import java.time.LocalDateTime;
* 课程表
*/
@Data
@TableName(value = "课程表", schema = "JW")
@TableName(value = "课程表")
public class KCB {
/**
@@ -249,7 +249,7 @@ public class KCBMBB extends BaseEntity {
private Integer kCBYZZKTS;
/**
* json字典
* JSONZD
*/
private String jsonZD;
@@ -117,7 +117,7 @@ public class LBSBXXB extends BaseEntity {
private String zbdzj;
/**
* json字典
* JSONZD
*/
private String jsonzd;
@@ -102,7 +102,7 @@ public class LBZYGLPT extends BaseEntity {
private Boolean zYPTDLWCLB;
/**
* json字典
* JSONZD
*/
private String jsonZD;
@@ -279,7 +279,7 @@ public class LLB extends BaseEntity {
private LocalDateTime xgrq;
/**
* json字典
* JSONZD
*/
private String jsonzd;
@@ -124,7 +124,7 @@ public class MHKSQB extends BaseEntity {
private LocalDateTime jwshsj;
/**
* json字典
* JSONZD
*/
private String jsonzd;
@@ -89,7 +89,7 @@ public class PXRW extends BaseEntity {
private Integer jhbcs;
/**
* json字典
* JSONZD
*/
private String jsonzd;
@@ -13,7 +13,7 @@ import java.time.LocalDateTime;
* 实施_课程
*/
@Data
@TableName(value = "实施_课程", schema = "JW")
@TableName(value = "实施_课程")
public class SSKC {
/**
@@ -189,9 +189,9 @@ public class SSKC {
private String fzqzbzbh;
/**
* json字典
* JSONZD
*/
@TableField("json字典")
@TableField("JSONZD")
private String jsonzd;
/**
@@ -154,7 +154,7 @@ public class SSKCB {
private String ycxx;
/**
* json字典
* JSONZD
*/
@TableField("JSONZD")
private String jsonzd;
@@ -64,7 +64,7 @@ public class WSSXB extends BaseEntity {
private String bZ;
/**
* json字典
* JSONZD
*/
private String jsonZD;
@@ -78,7 +78,7 @@ public class XKZYXX {
@TableField("自定义分类")
private String zdyfl;
/** json字典 */
/** JSONZD */
@TableField("JSONZD")
private String jsonzd;
@@ -113,7 +113,7 @@ public class XQ extends BaseEntity {
private String sdjldw;
/**
* json字典
* JSONZD
*/
@TableField("JSONZD")
private String jsonzd;
@@ -84,7 +84,7 @@ public class XQJYXXB extends BaseEntity {
private String ddjylb;
/**
* json字典
* JSONZD
*/
private String jsonzd;
@@ -79,7 +79,7 @@ public class XYCPCPXMB extends BaseEntity {
private String pSKJYTGNR;
/**
* json字典
* JSONZD
*/
private String jsonZD;
@@ -17,7 +17,7 @@ import java.time.LocalDateTime;
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "学员队年度学期基本信息表", schema = "JW")
@TableName(value = "学员队年度学期基本信息表")
public class XYDNDXQJBXXB extends BaseEntity {
/**
@@ -114,7 +114,7 @@ public class XYDNDXQJBXXB extends BaseEntity {
private Integer kfjypk;
/**
* json字典
* JSONZD
*/
@TableField("JSONZD")
private String jsonzd;
@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "学员队任务表", schema = "JW")
@TableName(value = "学员队任务表")
public class XYDRWB extends BaseEntity {
/**
@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "学员队输出课程表", schema = "JW")
@TableName(value = "学员队输出课程表")
public class XYDSCKCB extends BaseEntity {
/**
@@ -13,7 +13,7 @@ import java.time.LocalDateTime;
* 学员教学请假表
*/
@Data
@TableName(value = "学员教学请假表", schema = "JW")
@TableName(value = "学员教学请假表")
public class XYJXQJB {
/**
@@ -89,7 +89,7 @@ public class XYKCBKCP extends BaseEntity {
private String ktcptjjson;
/**
* json字典
* JSONZD
*/
private String jsonzd;
@@ -13,7 +13,7 @@ import java.time.LocalDateTime;
* 学员请假审批表
*/
@Data
@TableName(value = "学员请假审批表", schema = "JW")
@TableName(value = "学员请假审批表")
public class XYQJSPB {
/**
@@ -122,7 +122,7 @@ public class XYXX {
private Integer txzt;
/** 留级状态 */
@TableField("留级状态 0 1留级")
@TableField("留级状态")
private Integer ljzt;
/** 分班状态 */
@@ -153,8 +153,8 @@ public class XYXX {
@TableField("允许查看成绩")
private String yxckcj;
/** json字典 */
@TableField("json字典")
/** JSONZD */
@TableField("JSONZD")
private String jsonzd;
/** 当前班次编号 */
@@ -194,7 +194,7 @@ public class XYXXB extends BaseEntity {
private Integer yxckcj;
/**
* json字典
* JSONZD
*/
private String jsonzd;
@@ -117,8 +117,8 @@ public class ZYB {
@TableField("系统模式")
private String xtms;
/** json字典 NVARCHAR(4000) */
@TableField("json字典")
/** JSONZD NVARCHAR(4000) */
@TableField("JSONZD")
private String jsonzd;
/** 主干专业 */
@@ -13,7 +13,7 @@ import java.time.LocalDateTime;
* 专业教学计划表
*/
@Data
@TableName(value = "专业教学计划表", schema = "JW")
@TableName(value = "专业教学计划表")
public class ZYJXJHB {
/**
@@ -43,12 +43,12 @@
<result column="三实课标记" property="sSKBJ" />
<result column="增加学时标记" property="zJXSBJ" />
<result column="减少学时标记" property="jSXSBJ" />
<result column="json字典" property="jsonZD" />
<result column="JSONZD" property="jsonZD" />
<result column="学员正课请假模板文件编号" property="xYZKQJMBWJBH" />
</resultMap>
<sql id="Base_Column_List">
ID, VersionDate, VersionValue, UniversityName, 学员队全名称含年级, 学期名称样式, 节次类别, 外部文件存储根路径, 本站文件访问路径, 登录失败弹窗, 允许密码尝试次数, 用户锁定分钟数, 允许教研室管理教材, 使用虚拟教学场地设置班次专用教室, 使用虚拟教员设置课程责任教员, 允许多主讲分组教学, 跟查课录入锁定天数, UniversityCode, UniversityValidCode, 显示78节, 显示晚上, 显示夜间, 教学要点名称, 教材导出包含图片, 建立班次学期信息时自动生成教学计划, 成绩报表显示结论成绩, 缺省系统名称, Excel课表按开课日期排序, Excel课表显示实施教员数, 系统模式, 课程表标题样式, 课程表副标题样式, 大屏显示教学内容, 大屏显示前景标题颜色, 大屏显示前景内容颜色, 大屏显示背景颜色, 实践课标记, 三实课标记, 增加学时标记, 减少学时标记, json字典, 学员正课请假模板文件编号
ID, VersionDate, VersionValue, UniversityName, 学员队全名称含年级, 学期名称样式, 节次类别, 外部文件存储根路径, 本站文件访问路径, 登录失败弹窗, 允许密码尝试次数, 用户锁定分钟数, 允许教研室管理教材, 使用虚拟教学场地设置班次专用教室, 使用虚拟教员设置课程责任教员, 允许多主讲分组教学, 跟查课录入锁定天数, UniversityCode, UniversityValidCode, 显示78节, 显示晚上, 显示夜间, 教学要点名称, 教材导出包含图片, 建立班次学期信息时自动生成教学计划, 成绩报表显示结论成绩, 缺省系统名称, Excel课表按开课日期排序, Excel课表显示实施教员数, 系统模式, 课程表标题样式, 课程表副标题样式, 大屏显示教学内容, 大屏显示前景标题颜色, 大屏显示前景内容颜色, 大屏显示背景颜色, 实践课标记, 三实课标记, 增加学时标记, 减少学时标记, JSONZD, 学员正课请假模板文件编号
</sql>
</mapper>
@@ -36,7 +36,7 @@
<result column="节次优选级" property="jcyxj" />
<result column="课程支持方式" property="kczcfs" />
<result column="课程建设方式" property="kcjsfs" />
<result column="json字典" property="jsonzd" />
<result column="JSONZD" property="jsonzd" />
<result column="政治类课程" property="zzlkc" />
<result column="考核方式" property="khfs" />
<result column="形成性成绩分值" property="xcxcjfz" />
@@ -49,11 +49,11 @@
<result column="课程周次范围列位置" property="kCZCFWLWZ" />
<result column="课程表起始列位置" property="kCBQSLWZ" />
<result column="课程表一周正课天数" property="kCBYZZKTS" />
<result column="json字典" property="jsonZD" />
<result column="JSONZD" property="jsonZD" />
</resultMap>
<sql id="Base_Column_List">
编号, 模版名称, 标题位置, 专业信息位置, 课表时间行号, 显示夜间, 末尾列位置, 课程行位置, 课程序号列位置, 课程名称列位置, 课程简称列位置, 课程学时列位置, 课程类型列位置, 课程责任教研室列位置, 课程责任教员列位置, 课程授课教员列位置, 课程人数列位置, 课程场地列位置, 全局备注位置, 更新时间, 上传者, 备注, 模版, 模版存在, 模版可用, 备注纵向样式, 无课站位字符, 队别位置, 课程合班信息位置, 标题格式, 副标题格式, 专用教室位置, 附加备注1位置, 附加备注2位置, 课表样式, 课表包含选修, 纵向显示78节, 纵向显示晚上, 纵向显示天数, 课程全部场地列位置, 课程表样式, 课程主讲教员列位置, 课程辅导教员列位置, 课程周次范围列位置, 课程表起始列位置, 课程表一周正课天数, json字典
编号, 模版名称, 标题位置, 专业信息位置, 课表时间行号, 显示夜间, 末尾列位置, 课程行位置, 课程序号列位置, 课程名称列位置, 课程简称列位置, 课程学时列位置, 课程类型列位置, 课程责任教研室列位置, 课程责任教员列位置, 课程授课教员列位置, 课程人数列位置, 课程场地列位置, 全局备注位置, 更新时间, 上传者, 备注, 模版, 模版存在, 模版可用, 备注纵向样式, 无课站位字符, 队别位置, 课程合班信息位置, 标题格式, 副标题格式, 专用教室位置, 附加备注1位置, 附加备注2位置, 课表样式, 课表包含选修, 纵向显示78节, 纵向显示晚上, 纵向显示天数, 课程全部场地列位置, 课程表样式, 课程主讲教员列位置, 课程辅导教员列位置, 课程周次范围列位置, 课程表起始列位置, 课程表一周正课天数, JSONZD
</sql>
</mapper>
@@ -20,11 +20,11 @@
<result column="平台参数5" property="pTCS5" />
<result column="平台参数6" property="pTCS6" />
<result column="资源平台独立完成录播" property="zYPTDLWCLB" />
<result column="json字典" property="jsonZD" />
<result column="JSONZD" property="jsonZD" />
</resultMap>
<sql id="Base_Column_List">
编号, 平台标识, 平台品牌, 平台类型, 平台版本, 平台状态, 平台UserName, 平台Password, 平台IP, 平台端口, 平台参数1, 平台参数2, 平台参数3, 平台参数4, 平台参数5, 平台参数6, 资源平台独立完成录播, json字典
编号, 平台标识, 平台品牌, 平台类型, 平台版本, 平台状态, 平台UserName, 平台Password, 平台IP, 平台端口, 平台参数1, 平台参数2, 平台参数3, 平台参数4, 平台参数5, 平台参数6, 资源平台独立完成录播, JSONZD
</sql>
</mapper>
@@ -179,7 +179,7 @@
"大屏显示教学内容", "大屏显示前景标题颜色",
"大屏显示前景内容颜色", "大屏显示背景颜色",
"实践课标记", "三实课标记", "增加学时标记",
"减少学时标记", "json字典", "学员正课请假模板文件编号"
"减少学时标记", "JSONZD", "学员正课请假模板文件编号"
)
SELECT
currentVersion."ID" + 1,
@@ -222,7 +222,7 @@
currentVersion."三实课标记",
currentVersion."增加学时标记",
currentVersion."减少学时标记",
currentVersion."json字典",
currentVersion."JSONZD",
currentVersion."学员正课请假模板文件编号"
FROM "DBVersion" currentVersion
WHERE currentVersion."ID" = #{dto.expectedVersionId}
@@ -35,7 +35,7 @@
<result column="版权图片文件编号" property="bqtpwjbh" />
<result column="自编教材编审状态" property="zbjcbxzt" />
<result column="评选情况" property="xqk" />
<result column="json字典" property="jsonzd" />
<result column="JSONZD" property="jsonzd" />
<result column="自编立项日期" property="zblxrq" />
<result column="教材使用情况" property="jcsyqk" />
<result column="教材密级" property="jcmj" />
@@ -59,7 +59,7 @@
教材编写类型, 教材重点类型, 备注, 停用, 停用日期, 计量单位, 出版日期,
创建时间, 修改时间, 教材来源, 教材层次, 责任教员及联系方式, 文件编号,
封面图片文件编号, 出版方式, 教材代码, 编写单位, 教学管理机构编号,
教研室代号, 版权图片文件编号, 自编教材编审状态, 评选情况, json字典,
教研室代号, 版权图片文件编号, 自编教材编审状态, 评选情况, JSONZD,
自编立项日期, 教材使用情况, 教材密级, 颁发审定单位, 需彩印,
封面PSD文件编号, 封面PDF文件编号, 内容PDF文件编号, 内容WORD文件编号,
锁定数量, 借出数量, 库存数量, 库存位置, 默认领用类型, ID, DEL_FLAG
@@ -12,12 +12,12 @@
<result column="关键字" property="gJZ" />
<result column="摘要" property="zY" />
<result column="备注" property="bZ" />
<result column="json字典" property="jsonZD" />
<result column="JSONZD" property="jsonZD" />
<result column="日志" property="rZ" />
</resultMap>
<sql id="Base_Column_List">
编号, 统一编号, 名称, 事项类别, 创建时间, 修改时间, 关键字, 摘要, 备注, json字典, 日志
编号, 统一编号, 名称, 事项类别, 创建时间, 修改时间, 关键字, 摘要, 备注, JSONZD, 日志
</sql>
</mapper>
@@ -19,12 +19,12 @@
<result column="调课不审批_场地" property="tkbspCd" />
<result column="序号" property="xh" />
<result column="锁定计量单位" property="sdjldw" />
<result column="json字典" property="jsonzd" />
<result column="JSONZD" property="jsonzd" />
<result column="课时统计时间" property="kstjsj" />
</resultMap>
<sql id="Base_Column_List">
年度, 当前学期, 开学日期, 结束日期, 调课不审批, 课时系数方案编号, 禁止调课, 终结成绩定及格, 教务领导审核调课, 调课不审批_教员, 调课不审批_时间, 调课不审批_保障, 锁定周数, 调课不审批_场地, 序号, 锁定计量单位, json字典, 课时统计时间
年度, 当前学期, 开学日期, 结束日期, 调课不审批, 课时系数方案编号, 禁止调课, 终结成绩定及格, 教务领导审核调课, 调课不审批_教员, 调课不审批_时间, 调课不审批_保障, 锁定周数, 调课不审批_场地, 序号, 锁定计量单位, JSONZD, 课时统计时间
</sql>
</mapper>
@@ -15,11 +15,11 @@
<result column="停用时间" property="tYSJ" />
<result column="评课程通告内容" property="pKCTGNR" />
<result column="评授课教员通告内容" property="pSKJYTGNR" />
<result column="json字典" property="jsonZD" />
<result column="JSONZD" property="jsonZD" />
</resultMap>
<sql id="Base_Column_List">
编号, 名称, 课程板块测评_分值权重标准编号, 课程板块测评_测评结果样式编号, 学员评教员_分值权重标准编号, 学员评教员_测评结果样式编号, 创建时间, 停用状态, 备注, 停用时间, 评课程通告内容, 评授课教员通告内容, json字典
编号, 名称, 课程板块测评_分值权重标准编号, 课程板块测评_测评结果样式编号, 学员评教员_分值权重标准编号, 学员评教员_测评结果样式编号, 创建时间, 停用状态, 备注, 停用时间, 评课程通告内容, 评授课教员通告内容, JSONZD
</sql>
</mapper>
@@ -39,7 +39,7 @@
<result column="拼音" property="py"/>
<result column="成绩报告单编号" property="cjbgdbh"/>
<result column="允许查看成绩" property="yxckcj"/>
<result column="json字典" property="jsonzd"/>
<result column="JSONZD" property="jsonzd"/>
<result column="当前班次编号" property="dqbzbh"/>
<result column="论文答辩文档编号" property="lwdbwdbh"/>
<result column="标签" property="bq"/>
@@ -61,7 +61,7 @@
入伍年月日, 性别, 出生日期, 名族, 籍贯, 原部职别, 邮政编码, 文化程度, 学位,
学员类别, 军衔文职, 所属军区, 骨干任职, 本科毕业院校, 国防生, 考生号, 备注,
身份证号, 退学状态, 留级状态, 分班状态, 论文编号, 论文题目, 论文摘要, 拼音,
成绩报告单编号, 允许查看成绩, json字典, 当前班次编号, 论文答辩文档编号, 标签,
成绩报告单编号, 允许查看成绩, JSONZD, 当前班次编号, 论文答辩文档编号, 标签,
联系电话, 通信地址, 单位联络人信息, 奖励处分情况, 已注册, 军人证件类型, 曾用名,
入伍地, 出生地, 生源地
</sql>
@@ -28,7 +28,7 @@
<result column="简称" property="jc" />
<result column="节次类别" property="jclb" />
<result column="系统模式" property="xtms" />
<result column="json字典" property="jsonzd" />
<result column="JSONZD" property="jsonzd" />
<result column="主干专业" property="zgzy" />
<result column="规范名称" property="gfmc" />
<result column="教学大纲编号" property="jxdgbh" />
@@ -41,7 +41,7 @@
专业代号, 专业名称, 专业方向, 学年制, 学期数, 专业备注, 专业规范, 专业代码, 专业版本,
停用, 启用时间, 停用时间, 教学管理机构编号, 培训层次, 培训类型, 学科专业信息标识号,
培训类型2, 学员类别, 自定义分类, 专业标识号, 序号标识, 简称, 节次类别, 系统模式,
json字典, 主干专业, 规范名称, 教学大纲编号, 人培编号, 培养目标
JSONZD, 主干专业, 规范名称, 教学大纲编号, 人培编号, 培养目标
</sql>
<!-- 分页查询专业表列表(支持条件筛选) -->
@@ -104,8 +104,11 @@ public interface LogService {
void addSubsidyProject(KSBZXM entity);
void updateSubsidyProject(KSBZXM entity);
void deleteSubsidyProject(String bh);
KSBZXM getSubsidyProjectById(String bh);
PageResult<KSBZXM> pageSubsidyProject(PageQuery query, KSBZXM cond);
int importSubsidyProject(org.springframework.web.multipart.MultipartFile file) throws Exception;
void exportSubsidyProject(jakarta.servlet.http.HttpServletResponse response) throws Exception;
// ==================== 教学日志课时补助审批表(汇总) ====================
@@ -234,7 +234,7 @@ public class DisciplineServiceImpl implements DisciplineService {
assertMaxLength(entity.getJc(), 50, "简称");
assertMaxLength(entity.getJclb(), 50, "节次类别");
assertMaxLength(entity.getXtms(), 50, "系统模式");
assertMaxLength(entity.getJsonzd(), 4000, "json字典");
assertMaxLength(entity.getJsonzd(), 4000, "JSONZD");
assertMaxLength(entity.getGfmc(), 250, "规范名称");
assertMaxLength(entity.getPymb(), 500, "培养目标");
}
@@ -159,7 +159,7 @@ public class KBServiceImpl implements KBService {
assertMaxLength(entity.getBb(), 50, "版本");
assertMaxLength(entity.getKczcfs(), 50, "课程支持方式");
assertMaxLength(entity.getKcjsfs(), 50, "课程建设方式");
assertMaxLength(entity.getJsonzd(), 4000, "json字典");
assertMaxLength(entity.getJsonzd(), 4000, "JSONZD");
assertMaxLength(entity.getKhfs(), 50, "考核方式");
assertMaxLength(entity.getMj(), 50, "密级");
assertMaxLength(entity.getPxqk(), 50, "评选情况");
@@ -545,12 +545,15 @@ public class LogServiceImpl implements LogService {
@Override
@Transactional
public void addSubsidyProject(KSBZXM entity) {
entity.setCjsj(LocalDateTime.now());
entity.setXgsj(LocalDateTime.now());
ksbzxmMapper.insert(entity);
}
@Override
@Transactional
public void updateSubsidyProject(KSBZXM entity) {
entity.setXgsj(LocalDateTime.now());
ksbzxmMapper.updateById(entity);
}
@@ -568,6 +571,79 @@ public class LogServiceImpl implements LogService {
return new PageResult<>(result.getRecords(), result.getTotal(), query.getPageNum(), query.getPageSize());
}
@Override
@Transactional
public void deleteSubsidyProject(String bh) {
ksbzxmMapper.deleteById(bh);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int importSubsidyProject(org.springframework.web.multipart.MultipartFile file) throws Exception {
if (file == null || file.isEmpty()) {
throw new RuntimeException("导入文件不能为空");
}
List<KSBZXM> list = com.roomroot.jwgl.utils.ExcelParseUtil.parseKSBZXMExcel(
file.getInputStream(), file.getOriginalFilename());
if (list.isEmpty()) {
throw new RuntimeException("Excel中无有效数据");
}
LocalDateTime now = LocalDateTime.now();
for (KSBZXM entity : list) {
if (entity.getBh() == null || entity.getBh().isEmpty()) {
entity.setBh(com.roomroot.jwgl.utils.UuidUtil.getUUID());
}
if (entity.getXmlx() == null || entity.getXmlx().isEmpty()) {
entity.setXmlx("联教联训");
}
entity.setCjsj(now);
entity.setXgsj(now);
ksbzxmMapper.insert(entity);
}
return list.size();
}
@Override
public void exportSubsidyProject(jakarta.servlet.http.HttpServletResponse response) throws Exception {
List<KSBZXM> list = ksbzxmMapper.selectList(
new LambdaQueryWrapper<KSBZXM>().orderByDesc(KSBZXM::getCjsj));
String[] headers = {"编号", "名称", "性质", "依据", "开始日期", "结束日期", "天数",
"基本课时量", "课时类型", "说明", "备注", "项目类型"};
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition",
"attachment; filename=" + java.net.URLEncoder.encode(
"联教联训管理.xlsx", java.nio.charset.StandardCharsets.UTF_8));
try (org.apache.poi.xssf.usermodel.XSSFWorkbook workbook = new org.apache.poi.xssf.usermodel.XSSFWorkbook()) {
org.apache.poi.ss.usermodel.Sheet sheet = workbook.createSheet("联教联训");
org.apache.poi.ss.usermodel.Row headerRow = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
headerRow.createCell(i).setCellValue(headers[i]);
}
int rowIdx = 1;
for (KSBZXM e : list) {
org.apache.poi.ss.usermodel.Row row = sheet.createRow(rowIdx++);
row.createCell(0).setCellValue(e.getBh() == null ? "" : e.getBh());
row.createCell(1).setCellValue(e.getMc() == null ? "" : e.getMc());
row.createCell(2).setCellValue(e.getXz() == null ? "" : e.getXz());
row.createCell(3).setCellValue(e.getYj() == null ? "" : e.getYj());
row.createCell(4).setCellValue(e.getKsrq() == null ? "" : e.getKsrq().toString());
row.createCell(5).setCellValue(e.getJsrq() == null ? "" : e.getJsrq().toString());
row.createCell(6).setCellValue(e.getTs() == null ? "" : String.valueOf(e.getTs()));
row.createCell(7).setCellValue(e.getJbksl() == null ? "" : String.valueOf(e.getJbksl()));
row.createCell(8).setCellValue(e.getKslx() == null ? "" : e.getKslx());
row.createCell(9).setCellValue(e.getSm() == null ? "" : e.getSm());
row.createCell(10).setCellValue(e.getBz() == null ? "" : e.getBz());
row.createCell(11).setCellValue(e.getXmlx() == null ? "" : e.getXmlx());
}
for (int i = 0; i < headers.length; i++) {
sheet.autoSizeColumn(i);
}
workbook.write(response.getOutputStream());
response.getOutputStream().flush();
}
}
// ==================== 教学日志课时补助审批表(汇总) ====================
@Override
@@ -6,6 +6,7 @@ import com.roomroot.jwgl.dto.courserunning.SingleCourseImportDTO;
import com.roomroot.jwgl.dto.departmentpersonnel.DepartmentPersonnelCreateDTO;
import com.roomroot.jwgl.entity.JXSSJH;
import com.roomroot.jwgl.entity.JYSB;
import com.roomroot.jwgl.entity.KSBZXM;
import com.roomroot.jwgl.entity.XYDB;
import com.roomroot.jwgl.entity.XYXX;
import org.apache.poi.ss.usermodel.Cell;
@@ -19,6 +20,7 @@ import java.io.InputStream;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
@@ -322,6 +324,68 @@ public class ExcelParseUtil {
return result;
}
/**
* 解析联教联训(课时补助项目)导入 Excel 文件(支持 .xls / .xlsx)。
* <p>模板表头顺序:</p>
* 序号, 补助项目名称, 性质, 依据, 开始日期, 结束日期, 项目说明, 项目备注,
* 教研室名称, 补助教员姓名, 补助课时量, 课时量备注
* <p>只映射课时补助项目表存在的字段;序号/教研室名称/补助教员姓名/课时量备注无对应列,忽略。</p>
*
* @return 课时补助项目实体列表(创建/修改时间由业务层填充)
* @throws Exception 解析异常
*/
public static List<KSBZXM> parseKSBZXMExcel(InputStream inputStream, String fileName) throws Exception {
List<KSBZXM> result = new ArrayList<>();
Workbook workbook = createWorkbook(inputStream, fileName);
try {
Sheet sheet = workbook.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();
for (int rowNum = 1; rowNum <= lastRowNum; rowNum++) {
Row row = sheet.getRow(rowNum);
if (row == null) {
continue;
}
KSBZXM entity = new KSBZXM();
// 补助项目名称
entity.setMc(getCellStringValue(row.getCell(1)));
// 性质
entity.setXz(getCellStringValue(row.getCell(2)));
// 依据
entity.setYj(getCellStringValue(row.getCell(3)));
// 开始日期
entity.setKsrq(parseDateTimeCell(row.getCell(4)));
// 结束日期
entity.setJsrq(parseDateTimeCell(row.getCell(5)));
// 项目说明
entity.setSm(getCellStringValue(row.getCell(6)));
// 项目备注
entity.setBz(getCellStringValue(row.getCell(7)));
// 补助课时量 -> 基本课时量
String ksl = getCellStringValue(row.getCell(10));
if (ksl != null && !ksl.isEmpty()) {
try {
entity.setJbksl(Float.parseFloat(ksl));
} catch (NumberFormatException ignored) {
entity.setJbksl(0f);
}
}
// 天数:由开始与结束日期计算(含首尾,不足整天按自然日计)
if (entity.getKsrq() != null && entity.getJsrq() != null) {
long days = ChronoUnit.DAYS.between(
entity.getKsrq().toLocalDate(), entity.getJsrq().toLocalDate()) + 1;
entity.setTs((float) Math.max(days, 1));
}
// 至少要有名称才视为有效行
if (entity.getMc() != null && !entity.getMc().isEmpty()) {
result.add(entity);
}
}
} finally {
workbook.close();
}
return result;
}
private static Workbook createWorkbook(InputStream inputStream, String fileName) throws Exception {
String name = fileName == null ? "" : fileName.toLowerCase();
if (!name.endsWith(".xlsx") && !name.endsWith(".xls")) {