diff --git a/db/24年2月变更.sql b/db/24年2月变更.sql index bd54500b..21ea4e71 100644 --- a/db/24年2月变更.sql +++ b/db/24年2月变更.sql @@ -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); + diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/member/controller/TbMemberProjectFileController.java b/jero-boot-incoming-payment/src/main/java/com/jero/member/controller/TbMemberProjectFileController.java new file mode 100644 index 00000000..39592824 --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/member/controller/TbMemberProjectFileController.java @@ -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 { + /** + * 服务对象 + */ + @Resource + private TbMemberProjectFileService tbMemberProjectFileService; + /** + * 分页列表查询 + */ + @ApiOperation(value = "标协会员项目其他资料-分页列表查询", notes = "标协会员项目其他资料-分页列表查询") + @GetMapping(value = "/page") + public Result> queryPageList(TbMemberProjectFile tbMemberProjectFile, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + Page page = new Page<>(pageNo, pageSize); + IPage pageList = tbMemberProjectFileService.queryPageList(page, tbMemberProjectFile); + return Result.OK(pageList); + } + + /** + * 列表查询 + */ + @ApiOperation(value = "标协会员项目其他资料-列表查询", notes = "标协会员项目其他资料-列表查询") + @GetMapping(value = "/list") + public Result> queryList(TbMemberProjectFile tbMemberProjectFile, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(tbMemberProjectFile, req.getParameterMap()); + List list = tbMemberProjectFileService.list(queryWrapper); + return Result.OK(list); + } + + /** + * 添加 + */ + @AutoLog(value = "标协会员项目其他资料-添加") + @ApiOperation(value = "标协会员项目其他资料-添加", notes = "标协会员项目其他资料-添加") + @PostMapping(value = "/add") + public Result add(@Validated @RequestBody TbMemberProjectFile tbMemberProjectFile) { + tbMemberProjectFileService.add(tbMemberProjectFile); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + */ + @AutoLog(value = "标协会员项目其他资料-编辑") + @ApiOperation(value = "标协会员项目其他资料-编辑", notes = "标协会员项目其他资料-编辑") + @PostMapping(value = "/edit") + public Result 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); + } + +} diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/member/entity/TbMemberProjectFile.java b/jero-boot-incoming-payment/src/main/java/com/jero/member/entity/TbMemberProjectFile.java new file mode 100644 index 00000000..5be72acd --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/member/entity/TbMemberProjectFile.java @@ -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; +} \ No newline at end of file diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/member/mapper/TbMemberProjectFileMapper.java b/jero-boot-incoming-payment/src/main/java/com/jero/member/mapper/TbMemberProjectFileMapper.java new file mode 100644 index 00000000..9c59497b --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/member/mapper/TbMemberProjectFileMapper.java @@ -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 { + IPage queryPageList(IPage page, @Param("tbMemberProjectFile") TbMemberProjectFile tbMemberProjectFile); +} \ No newline at end of file diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/member/mapper/xml/TbMemberProjectFileMapper.xml b/jero-boot-incoming-payment/src/main/java/com/jero/member/mapper/xml/TbMemberProjectFileMapper.xml new file mode 100644 index 00000000..c3d06ccc --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/member/mapper/xml/TbMemberProjectFileMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + id, + create_by, + create_time, + update_by, + update_time, + project_id, + file_id + + + + \ No newline at end of file diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/member/service/TbMemberProjectFileService.java b/jero-boot-incoming-payment/src/main/java/com/jero/member/service/TbMemberProjectFileService.java new file mode 100644 index 00000000..47741d23 --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/member/service/TbMemberProjectFileService.java @@ -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 { + + @Resource + private IOSSFileService iossFileService; + @Value("${jero.path.upload}") + private String upLoadPath; + @Resource + private TbMemberProjectFileMapper tbMemberProjectFileMapper; + + + public IPage queryPageList(Page 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 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 page = new Page<>(-1, -1); + IPage pageList = this.queryPageList(page, tbMemberProjectFile); + List list = pageList.getRecords(); + List exportList = null; + + // 过滤选中数据 + String selections = request.getParameter("selections"); + if (oConvertUtils.isNotEmpty(selections)) { + List 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 files = exportList.stream().map(TbMemberProjectFile::getFileId).collect(Collectors.toList()); + LambdaQueryWrapper queryOSSFile = new LambdaQueryWrapper<>(); + queryOSSFile.in(OSSFile::getId,files); + List 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(); + } + } + } + +}