springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/CommunityQuestnaireApi.java
@@ -71,4 +71,20 @@ } @ApiOperation(value = "添加浏览量") @GetMapping("/add/view") public R addView(@RequestParam("questId") Long questId) { return communityService.addView(questId); } @ApiOperation(value = "用户弹窗添加不在提醒接口") @GetMapping("/add/noNotice") public R addNoNotice(@RequestParam("questId") Long questId) { LoginUserInfoVO loginUserInfo = this.getLoginUserInfo(); if(loginUserInfo == null){ return R.fail("请先登录"); } return communityService.addNoNotice(questId,loginUserInfo.getUserId()); } } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActQuestnaireAppVO.java
@@ -28,4 +28,10 @@ private Integer adverPositionApplication; @ApiModelProperty("是否显示提醒(1.是 2.否)") private Integer isDisplay = 2; @ApiModelProperty("提供居民(1.是 2.否 )") private Integer forMasses; @ApiModelProperty("提供党员(1.是 2.否 )") private Integer forParty; @ApiModelProperty("提供志愿者(1.是 2.否 )") private Integer forVolunteer; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/questnaire/QuestnaireListVo.java
@@ -38,4 +38,13 @@ @ApiModelProperty("是否封面(1.是 2.否)") private Integer isCover; @ApiModelProperty("提供居民(1.是 2.否)") private Integer forMasses; @ApiModelProperty("提供党员(1.是 2.否)") private Integer forParty; @ApiModelProperty("提供志愿者(1.是 2.否)") private Integer forVolunteer; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
@@ -1971,6 +1971,23 @@ R viewDetail(@RequestParam("userId") Long userId, @RequestParam("questId") Long questId); /** * 小程序-新增问卷调查浏览数量 * @param questId 问卷调查id * @return 增加结果 */ @GetMapping("/questnaire/add/view") R addView(@RequestParam("questId") Long questId); /** * 小程序-用户弹窗添加不在提醒接口 * @param questId 问卷id * @param userId 用户id * @return 添加结果 */ @GetMapping("/questnaire/add/noNotice") R addNoNotice(@RequestParam("questId") Long questId,@RequestParam("userId") Long userId); /** * 社区后台-查询问卷调查详情 * @param questId 问卷id * @return 问卷调查详情 springcloud_k8s_panzhihuazhihuishequ/community_backstage/pom.xml
@@ -62,6 +62,11 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--minio文件存储--> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> </dependency> </dependencies> <build> springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/CommunityConvenientApi.java
@@ -1,23 +1,21 @@ package com.panzhihua.community_backstage.api; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.fastjson.JSONArray; import com.jcraft.jsch.SftpException; import com.panzhihua.common.constants.FtpConstants; import com.panzhihua.common.controller.BaseController; import com.panzhihua.common.model.dtos.community.*; import com.panzhihua.common.model.dtos.user.EexcelUserDTO; import com.panzhihua.common.listen.ComCvtServeExcelListen; import com.panzhihua.common.model.dtos.community.ComCvtBusinessDTO; import com.panzhihua.common.model.dtos.community.ComCvtServeDTO; import com.panzhihua.common.model.dtos.community.PageComCvtBusinessDTO; import com.panzhihua.common.model.dtos.community.PageComCvtServeDTO; import com.panzhihua.common.model.vos.LoginUserInfoVO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.*; import com.panzhihua.common.service.community.CommunityService; import com.panzhihua.common.listen.ComCvtServeExcelListen; import com.panzhihua.common.utlis.SFTPUtil; import com.panzhihua.common.validated.AddGroup; import com.panzhihua.community_backstage.excel.CustomSheetWriteHandler; import com.panzhihua.community_backstage.config.MinioUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -30,11 +28,8 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; /** @@ -52,7 +47,7 @@ private CommunityService communityService; @Value("${excel.convenientUrl}") private String excelConvenientUrl="http://panzhihua.nhys.cdnhxx.com/web/bianminfuwudaoru.xlsx"; private String excelConvenientUrl = "http://panzhihua.nhys.cdnhxx.com/web/bianminfuwudaoru.xlsx"; @Value("${excel.userurl}") private String excelUrl; @@ -72,7 +67,10 @@ @Value("${ftp.url}") private String url; @ApiOperation(value = "分页查询便民服务商家",response = ComCvtBusinessVO.class) @Resource private MinioUtil minioUtil; @ApiOperation(value = "分页查询便民服务商家", response = ComCvtBusinessVO.class) @PostMapping("/business/page") public R pageComCvtBusiness(@RequestBody PageComCvtBusinessDTO pageComCvtBusinessDTO) { Long communityId = this.getCommunityId(); @@ -91,9 +89,9 @@ return communityService.addComCvtBusiness(comCvtBusinessDTO); } @ApiOperation(value = "社区下拉列表" ,response = ComActVO.class) @ApiOperation(value = "社区下拉列表", response = ComActVO.class) @GetMapping("/community") public R listCommunity(){ public R listCommunity() { return communityService.listCommunityAll(); } @@ -116,13 +114,13 @@ return communityService.deleteComCvtBusiness(id); } @ApiOperation(value = "分页查询便民服务",response = ComCvtServeVO.class) @ApiOperation(value = "分页查询便民服务", response = ComCvtServeVO.class) @PostMapping("/serve/page") public R pageComCvtServe(@RequestBody PageComCvtServeDTO pageComCvtServeDTO) { return communityService.pageComCvtServe(pageComCvtServeDTO); } @ApiOperation(value = "查询便民服务所有分类,下拉框",response = ComCvtCategoryVO.class) @ApiOperation(value = "查询便民服务所有分类,下拉框", response = ComCvtCategoryVO.class) @PostMapping("/category/all") public R allComCvtCategory() { return communityService.allComCvtCategory(); @@ -143,7 +141,7 @@ return communityService.putComCvtServe(comCvtServeDTO); } @ApiOperation(value = "查询便民服务详情",response = ComCvtServeVO.class) @ApiOperation(value = "查询便民服务详情", response = ComCvtServeVO.class) @GetMapping("/serve/get") public R getComCvtServe(@RequestParam("id") Long id) { return communityService.getComCvtServe(id); @@ -165,9 +163,9 @@ @PostMapping(value = "/upload/file", consumes = "multipart/*", headers = "content-type=multipart/form-date") public R uploadImage(@RequestParam MultipartFile file, HttpServletRequest request) { String extension = FilenameUtils.getExtension(file.getOriginalFilename()); String name= UUID.randomUUID().toString().replaceAll("-","")+"."+extension; String name = UUID.randomUUID().toString().replaceAll("-", "") + "." + extension; try { SFTPUtil sftp = new SFTPUtil(userName,password,host,port); SFTPUtil sftp = new SFTPUtil(userName, password, host, port); sftp.login(); InputStream is = file.getInputStream(); sftp.uploadMore(FtpConstants.FTPFILEPATH_IDCARD, name, is); @@ -179,15 +177,29 @@ } } @ApiOperation(value = "minio上传文件测试") @PostMapping(value = "/minio/upload/file", consumes = "multipart/*", headers = "content-type=multipart/form-date") public R minipuploadImage(@RequestParam MultipartFile file, HttpServletRequest request) { try { String extension = FilenameUtils.getExtension(file.getOriginalFilename()); String name = UUID.randomUUID().toString().replaceAll("-", "") + "." + extension; String imageUrl = minioUtil.upload(file, name); return R.ok(imageUrl); } catch (Exception e) { log.error("上传照片失败【{}】", e.getMessage()); return R.fail(); } } @ApiOperation(value = "excel导入便民服务") @PostMapping(value = "/serve/import", consumes = "multipart/*", headers = "content-type=multipart/form-date") public R downloadTemplate(@RequestParam MultipartFile file, HttpServletRequest request) { String fileName = file.getOriginalFilename(); //获取文件名 log.info("传入文件名字【{}】",fileName); log.info("传入文件名字【{}】", fileName); InputStream inputStream = null; try { inputStream = file.getInputStream(); EasyExcel.read(inputStream, ComCvtServeExcelVO.class, new ComCvtServeExcelListen(communityService,this.getCommunityId())).sheet().doRead(); EasyExcel.read(inputStream, ComCvtServeExcelVO.class, new ComCvtServeExcelListen(communityService, this.getCommunityId())).sheet().doRead(); } catch (IOException e) { e.printStackTrace(); log.error("导入模板失败【{}】", e.getMessage()); springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/config/MinioConfig.java
New file @@ -0,0 +1,30 @@ package com.panzhihua.community_backstage.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; /** * program 攀枝花智慧社区项目 * description minio存储信息配置 * * @author manailin * Date 2021-08-19 15:30 **/ @Data @ConfigurationProperties(prefix = "minio") public class MinioConfig { private String host; private String accessKey; private String secretKey; private String url; private String bucket; private String aliasName; private String aliasPCName; } springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/config/MinioUtil.java
New file @@ -0,0 +1,131 @@ package com.panzhihua.community_backstage.config; import io.minio.MinioClient; import io.minio.ObjectStat; import org.apache.commons.io.IOUtils; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.util.UUID; /** * program 攀枝花智慧社区项目 * description minio工具类 * * @author manailin * Date 2021-08-19 15:30 **/ @Component @EnableConfigurationProperties(MinioConfig.class) public class MinioUtil { @Resource private MinioConfig minioProperties; /** * 文件上传 * * @param file 要上传的文件 * @return */ public String upload(MultipartFile file, String name) { if (null != file) { try { UUID uuid = UUID.randomUUID(); StringBuilder s = new StringBuilder(); s.append(uuid.toString().replace("-", "")).append("/"); MinioClient minioClient = new MinioClient(minioProperties.getHost(), minioProperties.getAccessKey(), minioProperties.getSecretKey()); // bucket 不存在,创建 if (!minioClient.bucketExists(minioProperties.getBucket())) { minioClient.makeBucket(minioProperties.getBucket()); } //得到文件流 InputStream input = file.getInputStream(); //文件名 //String fileName = uuid + "/images." + FilenameUtils.getExtension(file.getOriginalFilename()); String fileName = s.append(name).toString(); String contentType = file.getContentType(); minioClient.putObject(minioProperties.getBucket(), fileName, input, contentType); StringBuilder fileUrl = new StringBuilder(minioProperties.getUrl()); String url = fileUrl.append(fileName).toString(); return url; } catch (Exception e) { e.printStackTrace(); } } return null; } /** * 文件下载 * * @param response * @param url */ public void download(HttpServletResponse response, String url) { // 从链接中得到文件名 String replace = url.replace(minioProperties.getBucket() + "/", "#"); String fileName = replace.split("#")[1]; InputStream inputStream; try { MinioClient minioClient = new MinioClient(minioProperties.getHost(), minioProperties.getAccessKey(), minioProperties.getSecretKey()); ObjectStat stat = minioClient.statObject(minioProperties.getBucket(), fileName); inputStream = minioClient.getObject(minioProperties.getBucket(), fileName); response.setContentType(stat.contentType()); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); IOUtils.copy(inputStream, response.getOutputStream()); inputStream.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 文件下载 * * @param response * @param url */ public byte[] getBytes(HttpServletResponse response, String url) { // 从链接中得到文件名 String replace = url.replace(minioProperties.getBucket() + "/", "#"); String fileName = replace.split("#")[1]; InputStream inputStream; byte[] bytes = new byte[0]; try { MinioClient minioClient = new MinioClient(minioProperties.getHost(), minioProperties.getAccessKey(), minioProperties.getSecretKey()); inputStream = minioClient.getObject(minioProperties.getBucket(), fileName); bytes = toByteArray(inputStream); } catch (Exception e) { e.printStackTrace(); } return bytes; } public static byte[] toByteArray(InputStream input) throws IOException { ByteArrayOutputStream output = new ByteArrayOutputStream(); byte[] buffer = new byte[4096]; int n = 0; while (-1 != (n = input.read(buffer))) { output.write(buffer, 0, n); } return output.toByteArray(); } } springcloud_k8s_panzhihuazhihuishequ/pom.xml
@@ -42,6 +42,7 @@ <spring-cloud-starter-netflix-hystrix.version>2.2.6.RELEASE</spring-cloud-starter-netflix-hystrix.version> <spring-boot-starter-data-redis.version>2.4.0</spring-boot-starter-data-redis.version> <springfox-boot-starter.version>3.0.0</springfox-boot-starter.version> <minio.version>6.0.8</minio.version> </properties> <!-- 依赖声明 --> @@ -196,7 +197,12 @@ <artifactId>spring-boot-starter-actuator</artifactId> <version>2.3.4.RELEASE</version> </dependency> <!--minio文件存储--> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.0.3</version> </dependency> </dependencies> </dependencyManagement> springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/CommunityApi.java
@@ -1551,6 +1551,11 @@ return comActQuestnaireService.usersAnsweQuestnaire(usersAnswerQuestnaireVO); } @GetMapping("questnaire/add/noNotice") public R addNoNotice(@RequestParam("questId") Long questId,@RequestParam("userId") Long userId){ return comActQuestnaireService.addNoNotice(questId,userId); } /** * 删除微心愿 * @param id @@ -1854,4 +1859,9 @@ public R timedTaskQuestionnaire(){ return comActQuestnaireService.timedTaskQuestionnaire(); } @GetMapping("questnaire/add/view") public R addQuestnaireView(@RequestParam("questId") Long questId) { return comActQuestnaireService.addQuestnaireView(questId); } } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActQuestnaireDAO.java
@@ -26,6 +26,9 @@ " caq.project_key, " + " caq.title, " + " caq.state, " + " caq.for_masses, " + " caq.for_party, " + " caq.for_volunteer, " + " caq.join_count, " + " caq.remark, " + " caq.is_cover, " + @@ -96,6 +99,9 @@ " title, " + " remark, " + " is_cover, " + " for_masses, " + " for_party, " + " for_volunteer, " + " is_force, " + " adver_position_popup, " + " adver_position_top, " + @@ -115,6 +121,9 @@ " id, " + " title, " + " remark, " + " for_masses, " + " for_party, " + " for_volunteer, " + " is_cover, " + " is_force, " + " adver_position_popup, " + @@ -150,4 +159,6 @@ List<QuestnaireStatisticsSummaryExcelAdminVO> getStatisticsSummaryExcelAdmin(@Param("questId") Long questId); QuestnaireStatisticsSummaryHeaderAdminVO statisticsSummaryHeader(@Param("questId") Long questId); void addNoNotice(@Param("questId") Long questId,@Param("userId") Long userId); } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComActQuestnaireService.java
@@ -124,4 +124,8 @@ R statisticsSummaryHeader(Long questId); R timedTaskQuestionnaire(); R addQuestnaireView(Long questId); R addNoNotice(Long questId,Long userId); } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActQuestnaireServiceImpl.java
@@ -523,10 +523,32 @@ return R.fail("调查问卷不存在!"); } if(!questnaireDO.getState().equals(ComActQuestnaireDO.state.dyz)){ return R.fail("该调查问卷已结束,不可提交!"); } ComActQuestnaireUserAnswerDO oldUserAnswerDO = comActQuestnaireUserAnswerMapper.selectOne(new QueryWrapper<ComActQuestnaireUserAnswerDO>().lambda() .eq(ComActQuestnaireUserAnswerDO::getQuestnaireId,questId).eq(ComActQuestnaireUserAnswerDO::getUserId,userId)); if(oldUserAnswerDO != null){ return R.fail("您已填写该问卷,不可重复提交"); } //查询填报人员信息 R<LoginUserInfoVO> userResult = userService.getUserInfoByUserId(userId + ""); if(!R.isOk(userResult)){ log.error("填写问卷调查失败,未查询到用户信息"); return R.fail("填写失败"); } LoginUserInfoVO userInfo = userResult.getData(); if(questnaireDO.getForParty().equals(ComActQuestnaireDO.isOk.yes)){ if(!userInfo.getIsPartymember().equals(1)){ return R.fail("您还未进行党员认证,无法填报"); } } if(questnaireDO.getForVolunteer().equals(ComActQuestnaireDO.isOk.yes)){ if(!userInfo.getIsVolunteer().equals(1)){ return R.fail("您还未进行志愿者认证,无法填报"); } } List<ComActQuestnaireAnswerContentDO> answerContentList = new ArrayList<>(); @@ -692,6 +714,7 @@ } @Override @Transactional(rollbackFor = Exception.class) public R timedTaskQuestionnaire(){ Date nowDate = new Date(); //查询所有开始时间已经超过当前时间的待发布状态调查问卷 @@ -715,4 +738,20 @@ return R.ok(); } @Override public R addQuestnaireView(Long questId){ ComActQuestnaireDO questnaireDO = questnaireDAO.selectById(questId); if(questnaireDO != null){ questnaireDO.setViewNum(questnaireDO.getViewNum() + 1); questnaireDAO.updateById(questnaireDO); } return R.ok(); } @Override public R addNoNotice(Long questId,Long userId){ questnaireDAO.addNoNotice(questId,userId); return R.ok(); } } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActQuestnaireDOMapper.xml
@@ -209,4 +209,8 @@ AND caqua.questnaire_id = #{questId} </select> <insert id="addNoNotice"> insert into com_act_questnaire_user(questnaire_id,user_id,create_at) values(#{questId},#{userId},now()) </insert> </mapper>