add 标协会员项目其他资料

This commit is contained in:
lijiarao
2024-02-29 16:41:40 +08:00
parent 31a72576e0
commit ea559a0e08
6 changed files with 474 additions and 0 deletions
+17
View File
@@ -8,3 +8,20 @@ ALTER TABLE `tb_member_project`
ADD COLUMN `council_charge_notice_file_id` varchar(500) COMMENT '理事会收费通知文件id',
ADD COLUMN `remark` varchar(600) COMMENT '备注';
-- auto-generated definition
create table tb_member_project_file
(
id varchar(36) not null
primary key,
create_by varchar(50) null comment '创建人',
create_time datetime null comment '创建日期',
update_by varchar(50) null comment '更新人',
update_time datetime null comment '更新日期',
project_id varchar(50) null comment '项目id',
file_id varchar(32) null comment '文件id'
)
comment '标协会员项目其他资料';
create index Index_1
on tb_member_project_file (project_id);
@@ -0,0 +1,150 @@
package com.jero.member.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.exception.JeroBootException;
import com.jero.common.util.oConvertUtils;
import com.jero.member.entity.TbMemberProjectFile;
import com.jero.member.service.TbMemberProjectFileService;
import java.io.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.project.entity.PayWorkingGroupDataFile;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.apache.commons.lang3.StringUtils;
import com.jero.common.api.vo.Result;
import com.jero.common.system.query.QueryGenerator;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import com.jero.common.system.base.controller.JeroController;
import org.springframework.validation.annotation.Validated;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.jero.common.aspect.annotation.AutoLog;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
/**
* 标协会员项目其他资料(tb_member_project_file)表控制层
*
* @author xxxxx
*/
@Slf4j
@Api(tags = "标协会员项目其他资料")
@RestController
@RequestMapping("/member/tbMemberProjectFile")
public class TbMemberProjectFileController extends JeroController<TbMemberProjectFile, TbMemberProjectFileService> {
/**
* 服务对象
*/
@Resource
private TbMemberProjectFileService tbMemberProjectFileService;
/**
* 分页列表查询
*/
@ApiOperation(value = "标协会员项目其他资料-分页列表查询", notes = "标协会员项目其他资料-分页列表查询")
@GetMapping(value = "/page")
public Result<IPage<TbMemberProjectFile>> queryPageList(TbMemberProjectFile tbMemberProjectFile,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
Page<TbMemberProjectFile> page = new Page<>(pageNo, pageSize);
IPage<TbMemberProjectFile> pageList = tbMemberProjectFileService.queryPageList(page, tbMemberProjectFile);
return Result.OK(pageList);
}
/**
* 列表查询
*/
@ApiOperation(value = "标协会员项目其他资料-列表查询", notes = "标协会员项目其他资料-列表查询")
@GetMapping(value = "/list")
public Result<List<TbMemberProjectFile>> queryList(TbMemberProjectFile tbMemberProjectFile,
HttpServletRequest req) {
QueryWrapper<TbMemberProjectFile> queryWrapper = QueryGenerator.initQueryWrapper(tbMemberProjectFile, req.getParameterMap());
List<TbMemberProjectFile> list = tbMemberProjectFileService.list(queryWrapper);
return Result.OK(list);
}
/**
* 添加
*/
@AutoLog(value = "标协会员项目其他资料-添加")
@ApiOperation(value = "标协会员项目其他资料-添加", notes = "标协会员项目其他资料-添加")
@PostMapping(value = "/add")
public Result<String> add(@Validated @RequestBody TbMemberProjectFile tbMemberProjectFile) {
tbMemberProjectFileService.add(tbMemberProjectFile);
return Result.OK("添加成功!");
}
/**
* 编辑
*/
@AutoLog(value = "标协会员项目其他资料-编辑")
@ApiOperation(value = "标协会员项目其他资料-编辑", notes = "标协会员项目其他资料-编辑")
@PostMapping(value = "/edit")
public Result<String> edit(@Validated @RequestBody TbMemberProjectFile tbMemberProjectFile) {
tbMemberProjectFileService.editById(tbMemberProjectFile);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*/
@AutoLog(value = "标协会员项目其他资料-通过id删除")
@ApiOperation(value = "标协会员项目其他资料-通过id删除", notes = "标协会员项目其他资料-通过id删除")
@PostMapping(value = "/delete")
public Result<?> delete(@RequestParam(name = "id") String id) {
tbMemberProjectFileService.deleteById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*/
@AutoLog(value = "标协会员项目其他资料-批量删除")
@ApiOperation(value = "标协会员项目其他资料-批量删除", notes = "标协会员项目其他资料-批量删除")
@PostMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name="ids") String ids) {
this.tbMemberProjectFileService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*/
@AutoLog(value = "标协会员项目其他资料-通过id查询")
@ApiOperation(value = "标协会员项目其他资料-通过id查询", notes = "标协会员项目其他资料-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name = "id") String id) {
TbMemberProjectFile tbMemberProjectFile = tbMemberProjectFileService.queryById(id);
if (tbMemberProjectFile == null) {
return Result.error("未找到对应数据");
}
return Result.OK(tbMemberProjectFile);
}
/**
* 导出excel
*/
@ApiOperation(value = "标协会员项目其他资料-导出excel")
@GetMapping(value = "/exportXls")
public void exportXls(HttpServletRequest request,HttpServletResponse response, TbMemberProjectFile tbMemberProjectFile) {
tbMemberProjectFileService.exportXls(request,response,tbMemberProjectFile);
}
}
@@ -0,0 +1,86 @@
package com.jero.member.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
*
*@author liJiaRao
*@date 2024-02-29 14:33
*/
/**
* 标协会员项目其他资料
*/
@ApiModel(description = "标协会员项目其他资料")
@Data
@TableName(value = "tb_member_project_file")
public class TbMemberProjectFile {
@TableId(value = "id", type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "")
private String id;
/**
* 创建人
*/
@TableField(value = "create_by")
@ApiModelProperty(value = "创建人")
private String createBy;
/**
* 创建日期
*/
@TableField(value = "create_time")
@ApiModelProperty(value = "创建日期")
private Date createTime;
/**
* 更新人
*/
@TableField(value = "update_by")
@ApiModelProperty(value = "更新人")
private String updateBy;
/**
* 更新日期
*/
@TableField(value = "update_time")
@ApiModelProperty(value = "更新日期")
private Date updateTime;
/**
* 项目id
*/
@TableField(value = "project_id")
@ApiModelProperty(value = "项目id")
private String projectId;
/**
* 文件id
*/
@TableField(value = "file_id")
@ApiModelProperty(value = "文件id")
private String fileId;
/**
* 文件名称
*/
@Excel(name = "文件名称", width = 15)
@TableField(exist = false)
@ApiModelProperty(value = "文件名称")
private String fileName;
/**
* 下载次数
*/
@Excel(name = "下载次数", width = 15)
@TableField(exist = false)
@ApiModelProperty(value = "下载次数")
private Integer downloadCount;
}
@@ -0,0 +1,14 @@
package com.jero.member.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.member.entity.TbMemberProjectFile;
import org.apache.ibatis.annotations.Param;
/**
* @author liJiaRao
* @date 2024-02-29 14:23
*/
public interface TbMemberProjectFileMapper extends BaseMapper<TbMemberProjectFile> {
IPage<TbMemberProjectFile> queryPageList(IPage<TbMemberProjectFile> page, @Param("tbMemberProjectFile") TbMemberProjectFile tbMemberProjectFile);
}
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.member.mapper.TbMemberProjectFileMapper">
<resultMap id="BaseResultMap" type="com.jero.member.entity.TbMemberProjectFile">
<!--@mbg.generated-->
<!--@Table tb_member_project_file-->
<id column="id" jdbcType="VARCHAR" property="id"/>
<result column="create_by" jdbcType="VARCHAR" property="createBy"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_by" jdbcType="VARCHAR" property="updateBy"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="project_id" jdbcType="VARCHAR" property="projectId"/>
<result column="file_id" jdbcType="VARCHAR" property="fileId"/>
<result column="downloadCount" property="downloadCount"/>
<result column="fileName" property="fileName"/>
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id,
create_by,
create_time,
update_by,
update_time,
project_id,
file_id
</sql>
<select id="queryPageList" resultMap="BaseResultMap">
SELECT
pwgdf.id,
pwgdf.project_id,
pwgdf.file_id,
su.realname as create_by,
pwgdf.create_time,
pwgdf.update_by,
pwgdf.update_time,
osf.file_name AS fileName,
(SELECT count(*) FROM pay_file_download_record where file_id = pwgdf.file_id) AS downloadCount
FROM pay_working_group_data_file pwgdf
LEFT JOIN oss_file osf ON pwgdf.file_id = osf.id
left join sys_user su on(pwgdf.create_by=su.username)
where project_id = #{tbMemberProjectFile.projectId}
<if test="tbMemberProjectFile.fileName != null and tbMemberProjectFile.fileName != ''">
AND osf.file_name LIKE CONCAT('%',CONCAT(#{tbMemberProjectFile.fileName},'%'))
</if>
ORDER BY pwgdf.create_time desc
</select>
</mapper>
@@ -0,0 +1,159 @@
package com.jero.member.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.exception.JeroBootException;
import com.jero.common.util.oConvertUtils;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.*;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.member.mapper.TbMemberProjectFileMapper;
import com.jero.member.entity.TbMemberProjectFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
*@author liJiaRao
*@date 2024-02-29 14:20
*/
@Service
public class TbMemberProjectFileService extends ServiceImpl<TbMemberProjectFileMapper, TbMemberProjectFile> {
@Resource
private IOSSFileService iossFileService;
@Value("${jero.path.upload}")
private String upLoadPath;
@Resource
private TbMemberProjectFileMapper tbMemberProjectFileMapper;
public IPage<TbMemberProjectFile> queryPageList(Page<TbMemberProjectFile> page, TbMemberProjectFile tbMemberProjectFile) {
return tbMemberProjectFileMapper.queryPageList(page,tbMemberProjectFile);
}
public void add(TbMemberProjectFile tbMemberProjectFile) {
this.save(tbMemberProjectFile);
}
public void editById(TbMemberProjectFile tbMemberProjectFile) {
this.updateById(tbMemberProjectFile);
}
public void deleteById(String id) {
this.removeById(id);
}
public void deleteByIds(List<String> idList) {
for (String id : idList) {
deleteById(id);
}
}
public TbMemberProjectFile queryById(String id) {
TbMemberProjectFile tbMemberProjectFile = this.getById(id);
return tbMemberProjectFile;
}
public void exportXls(HttpServletRequest request, HttpServletResponse response, TbMemberProjectFile tbMemberProjectFile) {
// Step.2 获取导出数据
Page<TbMemberProjectFile> page = new Page<>(-1, -1);
IPage<TbMemberProjectFile> pageList = this.queryPageList(page, tbMemberProjectFile);
List<TbMemberProjectFile> list = pageList.getRecords();
List<TbMemberProjectFile> exportList = null;
// 过滤选中数据
String selections = request.getParameter("selections");
if (oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
exportList = list.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
} else {
exportList = list;
}
if(CollectionUtils.isEmpty(exportList)){
throw new JeroBootException("请选中文件!");
}
List<String> files = exportList.stream().map(TbMemberProjectFile::getFileId).collect(Collectors.toList());
LambdaQueryWrapper<OSSFile> queryOSSFile = new LambdaQueryWrapper<>();
queryOSSFile.in(OSSFile::getId,files);
List<OSSFile> listOSSFile = iossFileService.list(queryOSSFile);
if(CollectionUtils.isEmpty(listOSSFile)){
throw new JeroBootException("文件不存在!");
}
//循环将文件写入压缩流
DataOutputStream os = null;
//设置压缩流:直接写入response,实现边压缩边下载
ZipOutputStream zipos = null;
try {
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
//设置压缩包的名字
//解决不同浏览器压缩包名字含有中文时乱码的问题
String downloadName = UUID.randomUUID().toString() +".zip";
String agent = request.getHeader("USER-AGENT");
try {
//针对IE或者以IE为内核的浏览器:
if (agent.contains("MSIE") || agent.contains("Trident")) {
downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
} else {
//非IE浏览器的处理:
downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1");
}
} catch (Exception e) {
e.printStackTrace();
}
response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");
zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
zipos.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法
for (OSSFile ossFile : listOSSFile) {
File file = new File(upLoadPath + File.separator + ossFile.getUrl());
if(file.exists()){
try {
//添加ZipEntry,并ZipEntry中写入文件流w
//这里,防止要下载的文件有重名的导致下载失败
zipos.putNextEntry(new ZipEntry(ossFile.getFileName()));
os = new DataOutputStream(zipos);
InputStream is = new FileInputStream(file);
byte[] b = new byte[1024];
int length = 0;
while((length = is.read(b))!= -1){
os.write(b, 0, length);
}
is.close();
zipos.closeEntry();
}catch (Exception e){
e.printStackTrace();
}
}
}
assert os != null;
os.flush();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if (os!= null){os.close();}
if (zipos != null){zipos.close();}
}catch (Exception e){
e.printStackTrace();
}
}
}
}