diff --git a/esua-epdc/epdc-commons/epdc-commons-tools/pom.xml b/esua-epdc/epdc-commons/epdc-commons-tools/pom.xml index b8b41d079..960bd5072 100644 --- a/esua-epdc/epdc-commons/epdc-commons-tools/pom.xml +++ b/esua-epdc/epdc-commons/epdc-commons-tools/pom.xml @@ -107,6 +107,11 @@ lombok ${lombok.version} + + net.coobird + thumbnailator + 0.4.8 + diff --git a/esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/utils/CompressImgUtils.java b/esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/utils/CompressImgUtils.java new file mode 100644 index 000000000..4ed5035c2 --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/utils/CompressImgUtils.java @@ -0,0 +1,154 @@ +package com.elink.esua.epdc.commons.tools.utils; + +import net.coobird.thumbnailator.Thumbnails; +import org.apache.commons.lang3.StringUtils; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.*; +import java.math.BigDecimal; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; + +/** + * @Description 压缩图片工具类 + * @Author yinzuomei + * @Date 2020/2/27 15:48 + */ +public class CompressImgUtils { + + /** + * @param imgUrl + * @return long 字节大小 + * @Author yinzuomei + * @Description 获取网络文件大小 + * @Date 2020/2/27 15:52 + **/ + public static long getFileLength(String imgUrl) { + if (StringUtils.isBlank(imgUrl)) { + return 0L; + } + HttpURLConnection conn = null; + try { + URL url = new URL(imgUrl); + conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("HEAD"); + conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows 7; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 YNoteCef/5.8.0.1 (Windows)"); + return (long) conn.getContentLength(); + } catch (IOException e) { + e.printStackTrace(); + return 0L; + } finally { + conn.disconnect(); + } + } + + /** + * @param imgUrl + * @return byte[] + * @Author yinzuomei + * @Description 根据图片地址压缩图片 + * @Date 2020/2/27 16:44 + **/ + public static byte[] compressImg(String imgUrl) { + byte[] afterJyBytes = new byte[0]; + URL url = null; + try { + url = new URL(imgUrl); + System.out.println(url.getFile()); + DataInputStream dataInputStream = new DataInputStream(url.openStream()); + byte[] bytes = toByteArray(dataInputStream); + afterJyBytes = commpressPicCycle(bytes, 1024, 0.5); + // 输出到文件 + /*File desFile = new File("D:\\testcompressImg\\" + System.currentTimeMillis() + ".jpg"); + FileOutputStream fos = new FileOutputStream(desFile); + fos.write(afterJyBytes); + fos.close();*/ + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return afterJyBytes; + } + + /** + * inputstream输入流转换成byte[]字节数组 + * + * @param input + * @return byte[] + * @author yinzuomei + * @date 2020/2/27 16:09 + */ + public static byte[] toByteArray(InputStream input) throws IOException { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024 * 4]; + int n = 0; + while (-1 != (n = input.read(buffer))) { + output.write(buffer, 0, n); + } + return output.toByteArray(); + } + + /** + * 压缩图片返回字节数组 + * + * @param bytes 原图片字节数组 + * @param desFileSize 指定图片大小,单位 kb + * @param accuracy 精度,递归压缩的比率,建议小于0.9 + * @return byte[] + */ + public static byte[] commpressPicCycle(byte[] bytes, long desFileSize, double accuracy) throws IOException { + long fileSize = bytes.length; + System.out.println("=====fileSize======== " + fileSize); + // 判断图片大小是否小于指定图片大小 + if (fileSize <= desFileSize * 1024) { + return bytes; + } + //计算宽高 + BufferedImage bim = ImageIO.read(new ByteArrayInputStream(bytes)); + int imgWidth = bim.getWidth(); + int imgHeight = bim.getHeight(); + System.out.println("宽度imgWidth=" + imgWidth + ";高度imgHeight=" + imgHeight); + int desWidth = new BigDecimal(imgWidth).multiply(new BigDecimal(accuracy)).intValue(); + int desHeight = new BigDecimal(imgHeight).multiply(new BigDecimal(accuracy)).intValue(); + System.out.println("转换后宽度desWidth=" + desWidth + ";高度desHeight=" + desHeight); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); //字节输出流(写入到内存) + Thumbnails.of(new ByteArrayInputStream(bytes)).size(desWidth, desHeight).outputQuality(accuracy).toOutputStream(baos); + //如果不满足要求,递归直至满足要求 + return commpressPicCycle(baos.toByteArray(), desFileSize, accuracy); + } + + /** + * @param imgUrl eg:https://elink-esua-epdc.oss-cn-qingdao.aliyuncs.com/esua-epdc/test/20200226/95dd03ace7d04627a297abae7339de97.jpg + * @param path 保存路径eg:d:/pic.jpg + * @return void + * @Author yinzuomei + * @Description 根据图片url下载图片到本地地址 + * @Date 2020/2/27 15:50 + **/ + public static void downloadPicture(String imgUrl, String path) { + try { + URL url = new URL(imgUrl); + DataInputStream dataInputStream = new DataInputStream(url.openStream()); + FileOutputStream fileOutputStream = new FileOutputStream(new File(path)); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + + byte[] buffer = new byte[1024]; + int length; + + while ((length = dataInputStream.read(buffer)) > 0) { + output.write(buffer, 0, length); + } + fileOutputStream.write(output.toByteArray()); + dataInputStream.close(); + fileOutputStream.close(); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/controller/EpdcEventsController.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/controller/EpdcEventsController.java index 602383c9a..7b93b2127 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/controller/EpdcEventsController.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/controller/EpdcEventsController.java @@ -26,10 +26,10 @@ import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils; import com.elink.esua.epdc.commons.tools.validator.group.AddGroup; import com.elink.esua.epdc.commons.tools.validator.group.DefaultGroup; import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup; -import com.elink.esua.epdc.dto.events.EpdcRejectEventDetailDTO; -import com.elink.esua.epdc.dto.events.EpdcRejectEventsDTO; import com.elink.esua.epdc.dto.events.EpdcEventsDTO; import com.elink.esua.epdc.dto.events.EpdcEventsDetailDTO; +import com.elink.esua.epdc.dto.events.EpdcRejectEventDetailDTO; +import com.elink.esua.epdc.dto.events.EpdcRejectEventsDTO; import com.elink.esua.epdc.dto.events.form.EpdcEventsReviewFormDTO; import com.elink.esua.epdc.modules.events.excel.EpdcEventsExcel; import com.elink.esua.epdc.modules.events.service.EpdcEventsService; @@ -160,4 +160,15 @@ public class EpdcEventsController { return new Result(); } + /** + * @param topicId 话题id + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @Author yinzuomei + * @Description 校验话题是否已经转为议题 + * @Date 2020/2/28 12:06 + **/ + @GetMapping("checkTopicToIssueFlag/{topicId}") + public Result checkTopicToIssueFlag(@PathVariable("topicId") String topicId) { + return epdcEventsService.checkTopicToIssueFlag(topicId); + } } diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/service/EpdcEventsService.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/service/EpdcEventsService.java index c39f6874d..8b2294a99 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/service/EpdcEventsService.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/service/EpdcEventsService.java @@ -208,4 +208,12 @@ public interface EpdcEventsService extends BaseService { */ Result topicToIssue(EpdcEventSubmitFormDTO dto); + /** + * @param topicId 话题id + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @Author yinzuomei + * @Description 校验话题是否已经转为议题 + * @Date 2020/2/28 12:06 + **/ + Result checkTopicToIssueFlag(String topicId); } diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/service/impl/EpdcEventsServiceImpl.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/service/impl/EpdcEventsServiceImpl.java index b955a02ce..454a8eaf8 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/service/impl/EpdcEventsServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/events/service/impl/EpdcEventsServiceImpl.java @@ -56,6 +56,7 @@ import com.elink.esua.epdc.modules.events.service.EpdcEventsService; import com.elink.esua.epdc.modules.events.service.ImgService; import com.elink.esua.epdc.modules.feign.AdminFeignClient; import com.elink.esua.epdc.modules.feign.GroupFeignClient; +import com.elink.esua.epdc.modules.issue.dao.IssueDao; import com.elink.esua.epdc.modules.issue.entity.IssueEntity; import com.elink.esua.epdc.modules.issue.entity.IssueHandleEntity; import com.elink.esua.epdc.modules.issue.service.IssueHandleService; @@ -66,9 +67,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Arrays; -import java.util.List; -import java.util.Map; import java.util.*; /** @@ -107,6 +105,9 @@ public class EpdcEventsServiceImpl extends BaseServiceImpl listOfPendingReviewEvents(Map params) { IPage page = getPage(params); @@ -182,16 +183,19 @@ public class EpdcEventsServiceImpl extends BaseServiceImpl wrapper = new QueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(eventId), "EVENT_ID", eventId); + List list = issueDao.selectList(wrapper); + if (null == list || list.size() == 0) { + return false; + } + return true; + } + + /** * 话题转议题审核回调 * - * @params [topicId, dto] * @return void + * @params [topicId, dto] * @author liuchuang * @since 2019/11/11 10:28 */ @@ -482,12 +502,22 @@ public class EpdcEventsServiceImpl extends BaseServiceImpl().ok(issueDTO); } + @Override + public Result checkTopicToIssueFlag(String topicId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(topicId), "TOPIC_ID", topicId); + List list = baseDao.selectList(wrapper); + if (null == list || list.size() == 0) { + return new Result().ok(false); + } + return new Result().ok(true); + } + /** - * * 初始化分类信息 * - * @params [categoryId] * @return com.elink.esua.epdc.dto.events.EventsCategoryDTO + * @params [categoryId] * @author liuchuang * @since 2019/11/29 13:51 */ @@ -523,14 +553,14 @@ public class EpdcEventsServiceImpl extends BaseServiceImpl userMobiles){ // 审核操作发送短信 SmsNoticeFormDTO sms = new SmsNoticeFormDTO(); diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/feign/OssFeignClient.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/feign/OssFeignClient.java new file mode 100644 index 000000000..687cb01b4 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/feign/OssFeignClient.java @@ -0,0 +1,30 @@ +package com.elink.esua.epdc.modules.feign; + +import com.elink.esua.epdc.commons.tools.constant.ServiceConstant; +import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.modules.feign.fallback.OssFeignClientFallback; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +import java.util.List; + +/** + * 文件对象模块 + * + * @Author yinzuomei + * @Date 2020/02/27 18:24 + */ +@FeignClient(name = ServiceConstant.EPDC_OSS_SERVER, fallback = OssFeignClientFallback.class) +public interface OssFeignClient { + + /** + * 压缩图片并上传返回新的url + * + * @Params: [base64] + * @Return: com.elink.esua.epdc.commons.tools.utils.Result + * @Author: yinzuomei + * @Date: 2019/9/11 17:17 + */ + @PostMapping(value = "oss/file/compressImg") + Result> compressImg(List imgUrlList); +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/feign/fallback/OssFeignClientFallback.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/feign/fallback/OssFeignClientFallback.java new file mode 100644 index 000000000..d6c395f37 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/feign/fallback/OssFeignClientFallback.java @@ -0,0 +1,22 @@ +package com.elink.esua.epdc.modules.feign.fallback; + +import com.elink.esua.epdc.commons.tools.constant.ServiceConstant; +import com.elink.esua.epdc.commons.tools.utils.ModuleUtils; +import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.modules.feign.OssFeignClient; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author yinzuomei + * @date 2020/02/27 18:24 + */ +@Component +public class OssFeignClientFallback implements OssFeignClient { + + @Override + public Result> compressImg(List imgUrlList) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_OSS_SERVER, "compressImg", imgUrlList); + } +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/issue/service/impl/IssueServiceImpl.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/issue/service/impl/IssueServiceImpl.java index 95f91ffdf..ff373015d 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/issue/service/impl/IssueServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/issue/service/impl/IssueServiceImpl.java @@ -39,7 +39,10 @@ import com.elink.esua.epdc.dto.epdc.form.EpdcInformationFormDTO; import com.elink.esua.epdc.dto.events.EpdcEventsCommentsDTO; import com.elink.esua.epdc.dto.events.result.EventAppDetailResultDTO; import com.elink.esua.epdc.dto.form.SmsNoticeFormDTO; -import com.elink.esua.epdc.dto.issue.*; +import com.elink.esua.epdc.dto.issue.IssueContentDetailDTO; +import com.elink.esua.epdc.dto.issue.IssueDTO; +import com.elink.esua.epdc.dto.issue.IssueWaitHandleDetailDTO; +import com.elink.esua.epdc.dto.issue.IssueWaitHandleOrClosedDTO; import com.elink.esua.epdc.dto.issue.form.*; import com.elink.esua.epdc.dto.issue.result.*; import com.elink.esua.epdc.dto.item.result.ItemHandleProgressResultDTO; @@ -54,6 +57,7 @@ import com.elink.esua.epdc.modules.issue.entity.IssueEntity; import com.elink.esua.epdc.modules.issue.entity.IssueHandleEntity; import com.elink.esua.epdc.modules.issue.service.IssueHandleService; import com.elink.esua.epdc.modules.issue.service.IssueService; +import com.elink.esua.epdc.modules.item.dao.ItemDao; import com.elink.esua.epdc.modules.item.entity.ItemDeptEntity; import com.elink.esua.epdc.modules.item.entity.ItemEntity; import com.elink.esua.epdc.modules.item.entity.ItemHandleProcessEntity; @@ -106,6 +110,9 @@ public class IssueServiceImpl extends BaseServiceImpl imp @Autowired private IssueOverseeResultsTask issueOverseeResultsTask; + @Autowired + private ItemDao itemDao; + @Override public PageData listOfIssues(Map params) { IPage page = getPage(params); @@ -211,6 +218,9 @@ public class IssueServiceImpl extends BaseServiceImpl imp updateById(issueEntity); // 转项目 if (EventIssueItemState.ISSUE_CHANGE_TO_ITEM == dto.getState()) { + if (checkAlreadyChangeToItem(dto.getId())) { + return new Result().error("项目已存在"); + } informationFormDTO.setTitle(EventsNoticeConstant.NOTICE_ISSUE_CHANGE_TO_ITEM); informationFormDTO.setBusinessType(EventsNoticeConstant.NOTICE_BUSINESS_TYPE_ITEM); // 插入项目表 @@ -267,6 +277,23 @@ public class IssueServiceImpl extends BaseServiceImpl imp return new Result(); } + /** + * @param issueId 议题id + * @return boolean + * @Author yinzuomei + * @Description 根据议题id项目表,如果存在有效记录返回true,否则返回false,确保议题-转项目一对一唯一性 + * @Date 2020/2/28 11:51 + **/ + private boolean checkAlreadyChangeToItem(String issueId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(issueId), "ISSUE_ID", issueId); + List list = itemDao.selectList(wrapper); + if (null == list || list.size() == 0) { + return false; + } + return true; + } + @Override public IssueContentDetailDTO getIssueContentDetail(String issueId) { // 议题详情 @@ -479,13 +506,13 @@ public class IssueServiceImpl extends BaseServiceImpl imp return baseDao.selectListIssueProgress(issueId); } - /** + /** * @Description: 议题:待处理事件 议题转项目结果短信通知 议题发起人 * @Param: [userId] - * @return: void - * @Author: zy - * @Date: 2020-01-08 - */ + * @return: void + * @Author: zy + * @Date: 2020-01-08 + */ private void issueSmsNotification(String userMobiles){ List list = new ArrayList<>(); list.add(userMobiles); diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/impl/ItemServiceImpl.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/impl/ItemServiceImpl.java index f5ec9ff71..6d9f2b03d 100755 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/impl/ItemServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/service/impl/ItemServiceImpl.java @@ -30,10 +30,7 @@ import com.elink.esua.epdc.commons.tools.exception.RenException; import com.elink.esua.epdc.commons.tools.page.PageData; import com.elink.esua.epdc.commons.tools.security.user.SecurityUser; import com.elink.esua.epdc.commons.tools.security.user.UserDetail; -import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; -import com.elink.esua.epdc.commons.tools.utils.DateUtils; -import com.elink.esua.epdc.commons.tools.utils.GPSUtils; -import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.commons.tools.utils.*; import com.elink.esua.epdc.constant.*; import com.elink.esua.epdc.constants.MenuCodeConstant; import com.elink.esua.epdc.dto.CompleteDeptDTO; @@ -66,13 +63,12 @@ import com.elink.esua.epdc.modules.events.entity.ImgEntity; import com.elink.esua.epdc.modules.events.service.EpdcEventsService; import com.elink.esua.epdc.modules.events.service.ImgService; import com.elink.esua.epdc.modules.feign.AdminFeignClient; +import com.elink.esua.epdc.modules.feign.OssFeignClient; import com.elink.esua.epdc.modules.interfacelog.entity.InterfaceLogEntity; import com.elink.esua.epdc.modules.interfacelog.service.InterfaceLogService; import com.elink.esua.epdc.modules.issue.service.IssueService; -import com.elink.esua.epdc.modules.item.dao.GridPlatformHandleLogDao; import com.elink.esua.epdc.modules.item.dao.ItemDao; import com.elink.esua.epdc.modules.item.dao.ItemGridPlatformDao; -import com.elink.esua.epdc.modules.item.dao.ItemHandleProcessDao; import com.elink.esua.epdc.modules.item.entity.*; import com.elink.esua.epdc.modules.item.service.*; import org.apache.commons.lang3.StringUtils; @@ -143,12 +139,10 @@ public class ItemServiceImpl extends BaseServiceImpl implem private ItemGridPlatformDao itemGridPlatformDao; @Autowired - private ItemHandleProcessDao itemHandleProcessDao; - @Autowired - private GridPlatformHandleLogDao gridPlatformHandleLogDao; + private IssueOverseeResultsTask issueOverseeResultsTask; @Autowired - private IssueOverseeResultsTask issueOverseeResultsTask; + private OssFeignClient ossFeignClient; @Override public PageData page(Map params) { @@ -958,93 +952,126 @@ public class ItemServiceImpl extends BaseServiceImpl implem * @Date 2019/12/25 13:14 **/ private SendInputInfoFormDto packageReportEntity(ItemEntity itemEntity) throws Exception { - UserDetail user = SecurityUser.getUser(); - SendInputInfoFormDto formDto = new SendInputInfoFormDto(); - // 案件来源 - formDto.setInfoSourceID(CommonConstants.INFO_SOURCE_ID); - // 渠道来源 - formDto.setReportDept(CommonConstants.REPORT_DEPT); - // 案件属性 - formDto.setInfoTypeID(CommonConstants.INFO_TYPE_ID); - // 案件大类 - formDto.setInfoBC(CommonConstants.INFO_BC); - // 案件小类 - formDto.setInfoSC(CommonConstants.INFO_SC); - // 案件子类 - formDto.setInfoZC(CommonConstants.INFO_ZC); - // 发生地址 - formDto.setStandardAddress(itemEntity.getIssueAddress()); - // 问题描述 + UserDetail user = SecurityUser.getUser(); + SendInputInfoFormDto formDto = new SendInputInfoFormDto(); + // 案件来源 + formDto.setInfoSourceID(CommonConstants.INFO_SOURCE_ID); + // 渠道来源 + formDto.setReportDept(CommonConstants.REPORT_DEPT); + // 案件属性 + formDto.setInfoTypeID(CommonConstants.INFO_TYPE_ID); + // 案件大类 + formDto.setInfoBC(CommonConstants.INFO_BC); + // 案件小类 + formDto.setInfoSC(CommonConstants.INFO_SC); + // 案件子类 + formDto.setInfoZC(CommonConstants.INFO_ZC); + // 发生地址 + formDto.setStandardAddress(itemEntity.getIssueAddress()); + // 问题描述 formDto.setDescription(itemEntity.getItemContent());// 测试999勿删谢谢 - // 反映人 - formDto.setReportPerson(itemEntity.getNickName());// itemEntity.getNickName()测试人员 - // 联系方式 - formDto.setContactMode(itemEntity.getMobile()); - double[] gps= GPSUtils.gcj02_To_Gps84(itemEntity.getIssueLatitude(),itemEntity.getIssueLongitude()); - // 坐标X + // 反映人 + formDto.setReportPerson(itemEntity.getNickName());// itemEntity.getNickName()测试人员 + // 联系方式 + formDto.setContactMode(itemEntity.getMobile()); + double[] gps = GPSUtils.gcj02_To_Gps84(itemEntity.getIssueLatitude(), itemEntity.getIssueLongitude()); + // 坐标X formDto.setCoordX(new BigDecimal(gps[1]).setScale(15, BigDecimal.ROUND_HALF_UP)); - // 坐标Y + // 坐标Y formDto.setCoordY(new BigDecimal(gps[0]).setScale(15, BigDecimal.ROUND_HALF_UP)); - // 监督员编号 - formDto.setKeepersn(""); - // 操作时间 - formDto.setInsertTime(new Date()); - // 操作人 - formDto.setInsertUser(user.getRealName());// - // 外系统编号 - formDto.setHotLinesn(itemEntity.getId()); - // 先查询网格对应街道id - Result completeDeptDTOResult = adminFeignClient.getCompleteDept(itemEntity.getGridId()); - if (!completeDeptDTOResult.success()) { - throw new Exception("根据网格ID获取所有上级机构信息失败" + completeDeptDTOResult.getMsg()); - } - // 根据街道id查询对应平台的deptCode、streetCode - Result deptGridPlatformDTOResult = adminFeignClient.getDeptGridPlatformDTO(completeDeptDTOResult.getData().getStreetId().toString()); - if (!deptGridPlatformDTOResult.success() || null == deptGridPlatformDTOResult.getData()) { - throw new Exception("根据街道查询平台部门信息失败" + deptGridPlatformDTOResult.getMsg()); - } - //外系统编码 必填!!!!!!! - formDto.setDeptCode(deptGridPlatformDTOResult.getData().getDeptCode());// 130099 - // 街道编码!!!!!!!!!!!! - formDto.setStreetCode(deptGridPlatformDTOResult.getData().getStreetCode()); - // 网格编码 - formDto.setGridCode(null); - - //查询图片列表 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq(StringUtils.isNotBlank(itemEntity.getEventId()), "REFERENCE_ID", itemEntity.getEventId()); - List imageList = imgDao.selectList(wrapper); - if (null != imageList && !imageList.isEmpty()) { - String url = null; - String filename = null; - ReportFile reportFile = null; - List reportFiles = new ArrayList<>(); - for (ImgEntity image : imageList) { - url = image.getImgUrl(); - if (org.apache.commons.lang.StringUtils.isNotBlank(url)) { - filename = url.substring(url.lastIndexOf(CommonConstants.CHAR_ASCII_47) + CommonConstants.NUMBER_ONE); - reportFile = new ReportFile(); - reportFile.setName(filename); - reportFile.setUrl(url); - reportFile.setBase64string(""); - reportFiles.add(reportFile); - } - } - ImageFile imageFile = new ImageFile(); - imageFile.setReportFileList(reportFiles); - formDto.setImageFile(imageFile); - } - return formDto; - } + // 监督员编号 + formDto.setKeepersn(""); + // 操作时间 + formDto.setInsertTime(new Date()); + // 操作人 + formDto.setInsertUser(user.getRealName());// + // 外系统编号 + formDto.setHotLinesn(itemEntity.getId()); + // 先查询网格对应街道id + Result completeDeptDTOResult = adminFeignClient.getCompleteDept(itemEntity.getGridId()); + if (!completeDeptDTOResult.success()) { + throw new Exception("根据网格ID获取所有上级机构信息失败" + completeDeptDTOResult.getMsg()); + } + // 根据街道id查询对应平台的deptCode、streetCode + Result deptGridPlatformDTOResult = adminFeignClient.getDeptGridPlatformDTO(completeDeptDTOResult.getData().getStreetId().toString()); + if (!deptGridPlatformDTOResult.success() || null == deptGridPlatformDTOResult.getData()) { + throw new Exception("根据街道查询平台部门信息失败" + deptGridPlatformDTOResult.getMsg()); + } + //外系统编码 必填!!!!!!! + formDto.setDeptCode(deptGridPlatformDTOResult.getData().getDeptCode());// 130099 + // 街道编码!!!!!!!!!!!! + formDto.setStreetCode(deptGridPlatformDTOResult.getData().getStreetCode()); + // 网格编码 + formDto.setGridCode(null); + formDto.setImageFile(getImageFile(itemEntity.getEventId())); + return formDto; + } - /** - * @param gridDto - * @param handleProcessEntity - * @return void - * @Author yinzuomei - * @Description - * @Date 2019/12/25 15:29 - **/ + // 组装事件图片 + private ImageFile getImageFile(String eventId) { + ImageFile imageFile = new ImageFile(); + //查询图片列表 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(eventId), "REFERENCE_ID", eventId); + List imageList = imgDao.selectList(wrapper); + if (null != imageList && !imageList.isEmpty()) { + String url = null; + String filename = null; + ReportFile reportFile = null; + List reportFiles = new ArrayList<>(); + List imgUrlList = this.getUploadDTOList(imageList); + for (String imgUrl : imgUrlList) { + url = imgUrl; + if (org.apache.commons.lang.StringUtils.isNotBlank(url)) { + filename = url.substring(url.lastIndexOf(CommonConstants.CHAR_ASCII_47) + CommonConstants.NUMBER_ONE); + reportFile = new ReportFile(); + reportFile.setName(filename); + reportFile.setUrl(url); + reportFile.setBase64string(""); + reportFiles.add(reportFile); + } + } + imageFile.setReportFileList(reportFiles); + } + return imageFile; + } + + //压缩图片并上传到服务器,得到新的地址 + private List getUploadDTOList(List imageList) { + List imgUrlList = new ArrayList<>(); + List notNeedCompressImgUrlList = new ArrayList<>(); + List needCompressImgUrlList = new ArrayList<>(); + for (ImgEntity image : imageList) { + long imgLength = CompressImgUtils.getFileLength(image.getImgUrl()); + if (imgLength > 1024 * 1024) { + needCompressImgUrlList.add(image.getImgUrl()); + } else { + notNeedCompressImgUrlList.add(image.getImgUrl()); + } + } + if (null != needCompressImgUrlList && needCompressImgUrlList.size() > 0) { + //如果图片大于1M则需要压缩 + Result> result = ossFeignClient.compressImg(needCompressImgUrlList); + if (!result.success()) { + throw new RenException("图片压缩异常" + result.getMsg()); + } + if (null == result.getData() || result.getData().size() == 0) { + throw new RenException("图片压缩失败" + result.getMsg()); + } + imgUrlList.addAll(result.getData()); + } + imgUrlList.addAll(notNeedCompressImgUrlList); + return imgUrlList; + } + + /** + * @param gridDto + * @param handleProcessEntity + * @return void + * @Author yinzuomei + * @Description + * @Date 2019/12/25 15:29 + **/ private void saveItemGridPlatformInfo(GridDto gridDto, ItemHandleProcessEntity handleProcessEntity) { UserDetail user = SecurityUser.getUser(); ItemGridPlatformEntity itemGridPlatformEntity = new ItemGridPlatformEntity(); @@ -1220,14 +1247,14 @@ public class ItemServiceImpl extends BaseServiceImpl implem } } - /** + /** * @Description: 某三种情况下, 查询当前项目下的上级部门id,做去重处理,向部门下的所有人员发送短信 * @Description: 1.街道做吹哨, 做回应处理; 2.反馈回应; 3.上报网格化平台 - * @Param: [dto] - * @return: void - * @Author: zy - * @Date: 2020-01-14 - */ + * @Param: [dto] + * @return: void + * @Author: zy + * @Date: 2020-01-14 + */ private void superiorDeptSmsHandle(ItemHandleSubmitFormDTO dto){ UserDetail user = SecurityUser.getUser(); //获取当前登录人信息 List deptId = new ArrayList<>(); diff --git a/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/feign/EventFeignClient.java b/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/feign/EventFeignClient.java index 776c640c4..78db731fb 100644 --- a/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/feign/EventFeignClient.java +++ b/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/feign/EventFeignClient.java @@ -8,6 +8,8 @@ import com.elink.esua.epdc.dto.issue.IssueDTO; import com.elink.esua.epdc.modules.feign.fallback.EventFeignClientFallback; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; /** @@ -43,4 +45,14 @@ public interface EventFeignClient { */ @PostMapping(value = "events/eventcomment/receive", consumes = MediaType.APPLICATION_JSON_VALUE) Result receiveTopicCommentAndAttitude(EpdcCommentsAndAttitudeFromTopicFormDTO formDto); + + /** + * @param topicId 话题id + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @Author yinzuomei + * @Description 校验话题是否已经转为议题 + * @Date 2020/2/28 12:02 + **/ + @GetMapping("events/epdcevents/checkTopicToIssueFlag/{topicId}") + Result checkTopicToIssueFlag(@PathVariable("topicId") String topicId); } diff --git a/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/feign/fallback/EventFeignClientFallback.java b/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/feign/fallback/EventFeignClientFallback.java index 470b023f3..1b431be85 100644 --- a/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/feign/fallback/EventFeignClientFallback.java +++ b/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/feign/fallback/EventFeignClientFallback.java @@ -25,4 +25,9 @@ public class EventFeignClientFallback implements EventFeignClient { public Result receiveTopicCommentAndAttitude(EpdcCommentsAndAttitudeFromTopicFormDTO formDto) { return ModuleUtils.feignConError(ServiceConstant.EPDC_EVENTS_SERVER, "receiveTopicCommentAndAttitude", formDto); } + + @Override + public Result checkTopicToIssueFlag(String topicId) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_EVENTS_SERVER, "checkTopicToIssueFlag", topicId); + } } diff --git a/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/topic/service/impl/TopicServiceImpl.java b/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/topic/service/impl/TopicServiceImpl.java index 9bd0320cd..50d05a905 100644 --- a/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/topic/service/impl/TopicServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/topic/service/impl/TopicServiceImpl.java @@ -423,7 +423,11 @@ public class TopicServiceImpl extends BaseServiceImpl imp if (!TopicStateEnum.TOPIC_STATE_IN_CONVERSATION.getValue().equals(topicDto.getState())) { return new Result().error("当前话题不是讨论中状态,不可以转为议题"); } - + // 校验话题是否已经转为议题 + Result result = eventFeignClient.checkTopicToIssueFlag(topicDto.getId()); + if (result.getData()) { + return new Result().error("当前话题已经转为议题"); + } return new Result(); } diff --git a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/pom.xml b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/pom.xml index 16d390b93..7230e64d3 100644 --- a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/pom.xml +++ b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/pom.xml @@ -173,6 +173,7 @@ false 47.104.224.45:8848 + diff --git a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/controller/OssController.java b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/controller/OssController.java index 02912121c..b824c401e 100644 --- a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/controller/OssController.java +++ b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/controller/OssController.java @@ -10,6 +10,8 @@ package com.elink.esua.epdc.controller; import com.elink.esua.epdc.cloud.AbstractCloudStorageService; import com.elink.esua.epdc.cloud.AliyunCloudStorageService; +import com.elink.esua.epdc.cloud.CloudStorageConfig; +import com.elink.esua.epdc.cloud.OssFactory; import com.elink.esua.epdc.commons.tools.annotation.LogOperation; import com.elink.esua.epdc.commons.tools.constant.NumConstant; import com.elink.esua.epdc.commons.tools.page.PageData; @@ -18,18 +20,16 @@ import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils; import com.elink.esua.epdc.commons.tools.validator.group.AliyunGroup; import com.elink.esua.epdc.commons.tools.validator.group.QcloudGroup; import com.elink.esua.epdc.commons.tools.validator.group.QiniuGroup; +import com.elink.esua.epdc.dto.UploadDTO; import com.elink.esua.epdc.dto.UploadFormDTO; import com.elink.esua.epdc.dto.UploadToOssDTO; import com.elink.esua.epdc.entity.OssEntity; +import com.elink.esua.epdc.enums.OssTypeEnum; import com.elink.esua.epdc.exception.ModuleErrorCode; import com.elink.esua.epdc.remote.ParamsRemoteService; import com.elink.esua.epdc.service.OssService; import com.elink.esua.epdc.utils.ModuleConstant; import com.google.gson.Gson; -import com.elink.esua.epdc.cloud.CloudStorageConfig; -import com.elink.esua.epdc.cloud.OssFactory; -import com.elink.esua.epdc.dto.UploadDTO; -import com.elink.esua.epdc.enums.OssTypeEnum; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.io.FilenameUtils; @@ -42,6 +42,7 @@ import sun.misc.BASE64Decoder; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; +import java.util.List; import java.util.Map; /** @@ -171,4 +172,28 @@ public class OssController { return new Result().ok(url); } + /** + * @param avatarUrl + * @return java.lang.String + * @Author yinzuomei + * @Description 上传微信头像 + * @Date 2019/12/19 18:48 + **/ + @GetMapping("saveWeChatFaceImg") + public Result saveWeChatFaceImg(@RequestParam(value = "avatarUrl") String avatarUrl) { + return ossService.saveWeChatFaceImg(avatarUrl); + } + + /** + * 压缩图片并上传 + * + * @param imgUrlList 完整的访问链接 + * @return void + * @author yinzuomei + * @date 2020/02/27 + */ + @PostMapping("compressImg") + public Result> compressImg(@RequestBody List imgUrlList) { + return ossService.compressImg(imgUrlList); + } } diff --git a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/service/OssService.java b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/service/OssService.java index e7fe79341..a6806913f 100644 --- a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/service/OssService.java +++ b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/service/OssService.java @@ -8,8 +8,6 @@ package com.elink.esua.epdc.service; -import com.elink.esua.epdc.commons.mybatis.service.BaseService; -import com.elink.esua.epdc.commons.tools.page.PageData; import com.elink.esua.epdc.commons.mybatis.service.BaseService; import com.elink.esua.epdc.commons.tools.page.PageData; import com.elink.esua.epdc.commons.tools.utils.Result; @@ -17,6 +15,7 @@ import com.elink.esua.epdc.dto.UploadDTO; import com.elink.esua.epdc.entity.OssEntity; import javax.servlet.http.HttpServletResponse; +import java.util.List; import java.util.Map; /** @@ -49,4 +48,23 @@ public interface OssService extends BaseService { * @date 2019/12/10 17:23 */ void download(String fileUrl, HttpServletResponse response); + + /** + * @param fileUrl + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @Author yinzuomei + * @Description 上传微信头像 + * @Date 2019/12/19 18:55 + **/ + Result saveWeChatFaceImg(String fileUrl); + + /** + * 压缩图片并上传 + * + * @param imgUrlList 完整的访问链接 + * @return void + * @author yinzuomei + * @date 2020/02/27 + */ + Result> compressImg(List imgUrlList); } diff --git a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/service/impl/OssServiceImpl.java b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/service/impl/OssServiceImpl.java index b1054b2ee..40ebfa699 100644 --- a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/service/impl/OssServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/service/impl/OssServiceImpl.java @@ -10,15 +10,18 @@ package com.elink.esua.epdc.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.elink.esua.epdc.cloud.OssFactory; import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl; import com.elink.esua.epdc.commons.tools.constant.Constant; import com.elink.esua.epdc.commons.tools.constant.NumConstant; import com.elink.esua.epdc.commons.tools.page.PageData; +import com.elink.esua.epdc.commons.tools.utils.CompressImgUtils; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dao.OssDao; import com.elink.esua.epdc.dto.UploadDTO; import com.elink.esua.epdc.entity.OssEntity; import com.elink.esua.epdc.service.OssService; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; @@ -26,7 +29,9 @@ import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.Map; @Service @@ -97,4 +102,51 @@ public class OssServiceImpl extends BaseServiceImpl implement } + /** + * @param avatarUrl + * @return java.lang.String + * @Author yinzuomei + * @Description 上传微信头像 + * @Date 2019/12/19 18:49 + **/ + @Override + public Result saveWeChatFaceImg(String avatarUrl) { + if (StringUtils.isBlank(avatarUrl)) { + return new Result().error("avatarUrl不能为空"); + } + try { + //实例化url + URL url = new URL(avatarUrl); + //载入图片到输入流 + DataInputStream dataInputStream = new DataInputStream(url.openStream()); + int size = dataInputStream.available(); + //上传文件 + String fileUrl = OssFactory.build().uploadSuffix(dataInputStream, "jpg"); + return this.afterUpload(fileUrl, size); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return new Result().error("上传微信头像异常"); + } + + + @Override + public Result> compressImg(List imgUrlList) { + List resultList = new ArrayList<>(); + if (null == imgUrlList || 0 == imgUrlList.size()) { + return new Result>().error("imgUrlList不能为空"); + } + for (int i = 0; i < imgUrlList.size(); i++) { + String imgUrl = imgUrlList.get(i); + byte[] data = CompressImgUtils.compressImg(imgUrl); + //上传文件 + String fileUrl = OssFactory.build().uploadSuffix(data, "jpg"); + this.afterUpload(fileUrl, data.length); + resultList.add(fileUrl); + } + return new Result>().ok(resultList); + } + }