From e61a65c45a2a6a943be7ec56413162deefdda165 Mon Sep 17 00:00:00 2001
From: dengqingliu <2733574813@qq.com>
Date: 星期五, 02 十二月 2022 18:05:19 +0800
Subject: [PATCH] 资源存储升级成华为云OBS
---
src/main/java/com/qxueyou/scc/portal/homepage/dao/ArticleDao.java | 193 ++++++++
src/main/java/com/qxueyou/scc/config/HweiOBSConfig.java | 135 +++++
src/main/java/com/qxueyou/scc/portal/expert/service/imp/ExpertService.java | 75 +++
src/main/java/com/qxueyou/scc/controller/HweiYunOBSController.java | 107 ++++
src/main/java/com/qxueyou/scc/portal/expert/controller/ExpertController.java | 71 ++
pom.xml | 36 +
src/main/java/com/qxueyou/scc/portal/expert/model/Expert.java | 148 ++++++
src/main/java/com/qxueyou/scc/teach/res/service/HweiYunOBSService.java | 52 ++
src/main/java/com/qxueyou/scc/portal/homepage/serivce/imp/HomepageService.java | 140 +++++
src/main/java/com/qxueyou/scc/portal/expert/vo/ExpertVO.java | 124 +++++
src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java | 185 +++++++
src/main/java/com/qxueyou/scc/portal/homepage/controller/HomepageController.java | 63 ++
src/main/java/com/qxueyou/scc/portal/homepage/serivce/IHomepageService.java | 34 +
src/main/java/com/qxueyou/scc/portal/expert/service/IExpertService.java | 52 ++
14 files changed, 1,412 insertions(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index 8df21a0..5462112 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,10 +17,10 @@
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
-
<properties>
- <project.build.sourceEncoding>GBK</project.build.sourceEncoding>
- <project.reporting.outputEncoding>GBK</project.reporting.outputEncoding>
+ <!-- 涓�1.8閰嶇疆鍦ㄤ竴璧凤紝璁剧疆缂栫爜闆�-->
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<repositories>
@@ -66,6 +66,36 @@
<version>1.2</version>
</dependency>
+ <!-- 鍗庝负浜慜BS渚濊禆/-->
+ <dependency>
+ <groupId>com.huaweicloud</groupId>
+ <artifactId>esdk-obs-java</artifactId>
+ <version>3.20.6.1</version>
+ </dependency>
+
+ <!-- <dependency>-->
+ <!-- <groupId>com.huaweicloud</groupId>-->
+ <!-- <artifactId>esdk-obs-java-bundle</artifactId>-->
+ <!-- <version>[3.21.11,)</version>-->
+ <!-- </dependency>-->
+ <!-- 寮曞叆lombok/-->
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <version>1.18.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <!-- 寮曞叆hutool宸ュ叿/-->
+ <!-- <dependency>-->
+ <!-- <groupId>cn.hutool</groupId>-->
+ <!-- <artifactId>hutool-all</artifactId>-->
+ <!-- <version>5.8.0.M4</version>-->
+ <!-- </dependency>-->
+ <dependency>
+ <groupId>cn.hutool</groupId>
+ <artifactId>hutool-core</artifactId>
+ <version>5.6.5</version>
+ </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
diff --git a/src/main/java/com/qxueyou/scc/config/HweiOBSConfig.java b/src/main/java/com/qxueyou/scc/config/HweiOBSConfig.java
new file mode 100644
index 0000000..0886d06
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/config/HweiOBSConfig.java
@@ -0,0 +1,135 @@
+package com.qxueyou.scc.config;
+
+import com.obs.services.ObsClient;
+import com.obs.services.exception.ObsException;
+import com.qxueyou.scc.teach.res.service.impl.HweiYunOBSServiceImpl;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @ClassName: HweiOBSConfig
+ * @Description: 鍗庝负浜慜BS閰嶇疆绫�
+ * @Author: wuhuiju
+ * @Date: 2021-12-21 15:56
+ * @Version: 1.0
+ */
+//@Data
+//@Slf4j
+@Configuration
+public class HweiOBSConfig {
+
+ private final Logger log = LogManager.getLogger(HweiOBSConfig.class);
+ public HweiOBSConfig() {
+ }
+
+ public HweiOBSConfig(String accessKey, String securityKey, String endPoint, String bucketName) {
+ this.accessKey = accessKey;
+ this.securityKey = securityKey;
+ this.endPoint = endPoint;
+ this.bucketName = bucketName;
+ }
+
+ public String getAccessKey() {
+ return accessKey;
+ }
+
+ public void setAccessKey(String accessKey) {
+ this.accessKey = accessKey;
+ }
+
+ public String getSecurityKey() {
+ return securityKey;
+ }
+
+ public void setSecurityKey(String securityKey) {
+ this.securityKey = securityKey;
+ }
+
+ public String getEndPoint() {
+ return endPoint;
+ }
+
+ public void setEndPoint(String endPoint) {
+ this.endPoint = endPoint;
+ }
+
+ public String getBucketName() {
+ return bucketName;
+ }
+
+ public void setBucketName(String bucketName) {
+ this.bucketName = bucketName;
+ }
+
+ /**
+ * 璁块棶瀵嗛挜AK
+ */
+ @Value("${hwyun.obs.accessKey}")
+ private String accessKey;
+
+ /**
+ * 璁块棶瀵嗛挜SK
+ */
+ @Value("${hwyun.obs.securityKey}")
+ private String securityKey;
+
+ /**
+ * 缁堢鑺傜偣
+ */
+ @Value("${hwyun.obs.endPoint}")
+ private String endPoint;
+
+ /**
+ * 妗�
+ */
+ @Value("${hwyun.obs.bucketName}")
+ private String bucketName;
+
+ /**
+ * @Description 鑾峰彇OBS瀹㈡埛绔疄渚�
+ * @author wuhuiju
+ * @date 2022/12/2 15:57
+ * @return
+ * @return: com.obs.services.ObsClient
+ */
+ public ObsClient getInstance() {
+ return new ObsClient(accessKey, securityKey, endPoint);
+ }
+
+
+ /**
+ * @Description 閿�姣丱BS瀹㈡埛绔疄渚�
+ * @author wuhuiju
+ * @date 2022/12/2 17:32
+ * @param: obsClient
+ * @return
+ */
+ public void destroy(ObsClient obsClient){
+ try {
+ obsClient.close();
+ } catch (ObsException e) {
+ log.error("obs鎵ц澶辫触", e);
+ } catch (Exception e) {
+ log.error("鎵ц澶辫触", e);
+ }
+ }
+
+ /**
+ * @Description 寰湇鍔℃枃浠跺瓨鏀捐矾寰�
+ * @author wuhuiju
+ * @date 2022/12/2 15:57
+ * @return
+ * @return: java.lang.String
+ */
+ public static String getObjectKey() {
+ // 椤圭洰鎴栬�呮湇鍔″悕绉� + 鏃ユ湡瀛樺偍鏂瑰紡
+ return "Hwei" + "/" + new SimpleDateFormat("yyyy-MM-dd").format(new Date() )+ "/";
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/controller/HweiYunOBSController.java b/src/main/java/com/qxueyou/scc/controller/HweiYunOBSController.java
new file mode 100644
index 0000000..6bf662a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/HweiYunOBSController.java
@@ -0,0 +1,107 @@
+package com.qxueyou.scc.controller;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.StrUtil;
+
+//import cn.hutool.core.io.FileUtil;
+import com.obs.services.exception.ObsException;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.teach.res.service.HweiYunOBSService;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLEncoder;
+import java.util.List;
+
+/**
+ * @ClassName: ObsController
+ * @Description: OBS鏈嶅姟鍣–ontroller
+ * @Author: wuhuiju
+ * @Date: 2021-12-21 15:20
+ * @Version: 1.0
+ */
+@RestController
+@RequestMapping({ "file" })// @RequestMapping("/file")
+public class HweiYunOBSController {
+
+ @Resource
+ private HweiYunOBSService hweiYunOBSService;
+
+ @RequestMapping(value = "upload", method = RequestMethod.POST)
+ public Result save(@RequestParam(value = "file", required = false) MultipartFile file) {
+
+ if (ObjectUtils.isEmpty(file) || file.getSize() <= 0) {
+ return new Result(false,"鏂囦欢涓虹┖");
+ }
+// if (FileUtil.isEmpty(file)) {
+// return new Result(false,"鏂囦欢涓虹┖");
+// }
+ final String test = hweiYunOBSService.fileUpload(file, file.getOriginalFilename());
+// return ResponseVO.ok("鎵ц鎴愬姛",test);
+ return new Result(true,"success",test);
+ }
+
+ @RequestMapping(value = "delete", method = RequestMethod.POST)
+ public Result delete(@RequestParam(value = "fileName", required = false) String fileName) {
+ if (StrUtil.isEmpty(fileName)) {
+ return new Result(false,"鍒犻櫎鏂囦欢涓虹┖");
+ }
+ final boolean delete = hweiYunOBSService.delete(fileName);
+ return delete?new Result(true,"success"):new Result(false,"鍒犻櫎澶辫触");
+ }
+
+ @RequestMapping(value = "deletes", method = RequestMethod.POST)
+ //@RequestParam 鑾峰彇List锛屾暟缁勫垯涓嶉渶瑕�
+ public Result delete(@RequestParam("fileNames") List<String> fileNames) {
+ if (ArrayUtil.isEmpty(fileNames)) {
+ return new Result(false,"鍒犻櫎鏂囦欢涓虹┖");
+ }
+ final boolean delete = hweiYunOBSService.delete(fileNames);
+ return delete?new Result(true,"success"):new Result(false,"鍒犻櫎澶辫触");
+ }
+
+
+ @RequestMapping(value = "download", method = RequestMethod.POST)
+ public Result download(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "fileName", required = false) String fileName) {
+ if (StrUtil.isEmpty(fileName)) {
+ return new Result(false,"涓嬭浇鏂囦欢涓虹┖");
+ }
+ try (
+ InputStream inputStream = hweiYunOBSService.fileDownload(fileName);
+ BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream())){
+ if(inputStream == null) {
+ return new Result(false);
+ }
+ // 涓洪槻姝� 鏂囦欢鍚嶅嚭鐜颁贡鐮�
+ final String userAgent = request.getHeader("USER-AGENT");
+ // IE娴忚鍣�
+ if (StrUtil.contains(userAgent, "MSIE")) {
+ fileName = URLEncoder.encode(fileName, "UTF-8");
+ } else {
+ // google,鐏嫄娴忚鍣�
+ if (StrUtil.contains(userAgent, "Mozilla")) {
+ fileName = new String(fileName.getBytes(), "ISO8859-1");
+ } else {
+ // 鍏朵粬娴忚鍣�
+ fileName = URLEncoder.encode(fileName, "UTF-8");
+ }
+ }
+ response.setContentType("application/x-download");
+ // 璁剧疆璁╂祻瑙堝櫒寮瑰嚭涓嬭浇鎻愮ず妗嗭紝鑰屼笉鏄洿鎺ュ湪娴忚鍣ㄤ腑鎵撳紑
+ response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
+ IoUtil.copy(inputStream, outputStream);
+ return null;
+ } catch (IOException | ObsException e) {
+ return new Result(false);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/portal/expert/controller/ExpertController.java b/src/main/java/com/qxueyou/scc/portal/expert/controller/ExpertController.java
new file mode 100644
index 0000000..3ed6b75
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/portal/expert/controller/ExpertController.java
@@ -0,0 +1,71 @@
+package com.qxueyou.scc.portal.expert.controller;
+
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.portal.expert.service.IExpertService;
+import com.qxueyou.scc.portal.expert.vo.ExpertVO;
+import com.qxueyou.scc.portal.information.service.IInformationService;
+import com.qxueyou.scc.portal.information.vo.ListArticleVO;
+import com.qxueyou.scc.portal.information.vo.SaveArticleVO;
+import com.qxueyou.scc.portal.information.vo.UpdateArticleVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 涓撳鎺у埗鍣�
+ *
+ * @author angy
+ * @created by 2021/3/1
+ */
+@RestController
+@RequestMapping("/expert")
+@Api(tags = "涓撳鎺у埗鍣�")
+public class ExpertController {
+
+ @Autowired
+ private IExpertService iExpertService;
+
+
+ @GetMapping("/list")
+ @ApiOperation("鑾峰彇涓撳鍒楄〃")
+ public Result listExpert(@RequestBody ExpertVO vo) {
+ return iExpertService.listExpert(vo);
+ }
+ //
+ @PostMapping("/add")
+ @ApiOperation("鏂板")
+ public Result save(@RequestBody ExpertVO vo) {
+ return iExpertService.save(vo);
+ }
+
+ @DeleteMapping("/delete")
+ @ApiOperation("鍒犻櫎")
+ @ApiImplicitParam(name = "ids", value = "涓撳id", dataType = "string", required = true)
+ public Result delete( String ids) {
+
+ if (StringUtils.isBlank(ids)) {
+ return new Result(false, "id is not blank!");
+ }
+ return iExpertService.delete(ids);
+ }
+ //
+ @PutMapping("/update")
+ @ApiOperation("鏇存柊")
+ public Result update(@RequestBody ExpertVO vo) {
+ return iExpertService.update(vo);
+ }
+ //
+ @GetMapping("/getArticleById")
+ @ApiOperation("鑾峰彇涓撳璇︽儏")
+ @ApiImplicitParam(name = "id", value = "鏂囩珷id", dataType = "string", required = true)
+ public Result getExpertById( String id) {
+ if (StringUtils.isBlank(id)) {
+ return new Result(false, "id is not blank!");
+ }
+ return iExpertService.getExpertById(id);
+ }
+}
diff --git a/src/main/java/com/qxueyou/scc/portal/expert/model/Expert.java b/src/main/java/com/qxueyou/scc/portal/expert/model/Expert.java
new file mode 100644
index 0000000..50b75c3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/portal/expert/model/Expert.java
@@ -0,0 +1,148 @@
+package com.qxueyou.scc.portal.expert.model;
+
+
+//sa_information
+
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+//@Proxy(lazy = false)
+@Entity
+@Table( name = "sa_expert")
+public class Expert implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ public Expert() {
+
+ }
+
+
+ private String id;
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ @Id
+ @GeneratedValue(generator = "hibernate-uuid")
+ @GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+ @Column(name = "ID", unique = true, nullable = false, length = 32)
+ public String getId() {
+ return id;
+ }
+
+ private String nameExpert;
+ private String job;
+ private String domesticUnit;
+ private String dispatchedUnit;
+ private String expertImg;
+ private String personalInformation;
+ private Date createTime;
+ private Date updateTime;
+ private Integer deleteFlag;
+
+
+ public Expert(String id, String nameExpert, String job, String domesticUnit, String dispatchedUnit, String expertImg, Date createTime, Date updateTime, Integer deleteFlag) {
+ this.id = id;
+ this.nameExpert = nameExpert;
+ this.job = job;
+ this.domesticUnit = domesticUnit;
+ this.dispatchedUnit = dispatchedUnit;
+ this.expertImg = expertImg;
+ this.createTime = createTime;
+ this.updateTime = updateTime;
+ this.deleteFlag = deleteFlag;
+ }
+
+ @Column(name = "PERSONAL_INFORMATION", nullable = false)
+ public String getPersonalInformation() {
+ return personalInformation;
+ }
+
+ public void setPersonalInformation(String personalInformation) {
+ this.personalInformation = personalInformation;
+ }
+ @Column(name = "NAME_EXPERT", nullable = false, length = 20)
+ public String getNameExpert() {
+ return nameExpert;
+ }
+
+ public void setNameExpert(String nameExpert) {
+ this.nameExpert = nameExpert;
+ }
+ @Column(name = "JOB", nullable = false, length = 20)
+ public String getJob() {
+ return job;
+ }
+
+ public void setJob(String job) {
+ this.job = job;
+ }
+ @Column(name = "DOMESTIC_UNIT", nullable = false, length = 20)
+ public String getDomesticUnit() {
+ return domesticUnit;
+ }
+
+ public void setDomesticUnit(String domesticUnit) {
+ this.domesticUnit = domesticUnit;
+ }
+
+ @Column(name = "DISPATCHED_UNIT", nullable = false, length = 20)
+ public String getDispatchedUnit() {
+ return dispatchedUnit;
+ }
+
+ public void setDispatchedUnit(String dispatchedUnit) {
+ this.dispatchedUnit = dispatchedUnit;
+ }
+
+ @Column(name = "EXPERT_IMG", nullable = false, length = 50)
+ public String getExpertImg() {
+ return expertImg;
+ }
+
+ public void setExpertImg(String expertImg) {
+ this.expertImg = expertImg;
+ }
+
+ @Column(name = "CREATE_TIME")
+ @Temporal(TemporalType.TIMESTAMP)
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonIgnore
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+
+ @Column(name = "UPDATE_TIME")
+ @Temporal(TemporalType.TIMESTAMP)
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonIgnore
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(Date updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ @Column(name = "DELTE_FLAG" )
+ public Integer getDeleteFlag() {
+ return deleteFlag;
+ }
+ public void setDeleteFlag(Integer deleteFlag) {
+ this.deleteFlag = deleteFlag;
+ }
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/portal/expert/service/IExpertService.java b/src/main/java/com/qxueyou/scc/portal/expert/service/IExpertService.java
new file mode 100644
index 0000000..124ad76
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/portal/expert/service/IExpertService.java
@@ -0,0 +1,52 @@
+package com.qxueyou.scc.portal.expert.service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.portal.expert.vo.ExpertVO;
+import com.qxueyou.scc.portal.information.vo.ListArticleVO;
+import com.qxueyou.scc.portal.information.vo.SaveArticleVO;
+import com.qxueyou.scc.portal.information.vo.UpdateArticleVO;
+
+public interface IExpertService {
+
+
+ /**
+ * 鏌ヨ涓撳鍒楄〃
+ */
+
+ Result listExpert(ExpertVO vo);
+
+ /**
+ *鑾峰彇涓撳鎬绘潯鏁�
+ * @param
+ * @return
+ */
+ int findExpertCount(ExpertVO vo) ;
+ /**
+ * 娣诲姞涓撳
+ *
+ * @param vo
+ * @return
+ */
+ Result save(ExpertVO vo);
+ /**
+ * 鍒犻櫎涓撳
+ *
+ * @param ids
+ * @return
+ */
+ Result delete(String ids);
+ /**
+ * 鏇存柊涓撳淇℃伅
+ *
+ * @param vo
+ * @return
+ */
+ Result update(ExpertVO vo);
+ /**
+ * 鑾峰彇涓撳淇℃伅
+ *
+ * @param id
+ * @return
+ */
+ Result getExpertById(String id);
+}
diff --git a/src/main/java/com/qxueyou/scc/portal/expert/service/imp/ExpertService.java b/src/main/java/com/qxueyou/scc/portal/expert/service/imp/ExpertService.java
new file mode 100644
index 0000000..7e15be4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/portal/expert/service/imp/ExpertService.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.portal.expert.service.imp;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.portal.expert.model.Expert;
+import com.qxueyou.scc.portal.expert.service.IExpertService;
+import com.qxueyou.scc.portal.expert.vo.ExpertVO;
+import com.qxueyou.scc.portal.information.dto.ArticleInfoDTO;
+import com.qxueyou.scc.portal.information.model.Information;
+import com.qxueyou.scc.portal.information.service.IInformationService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class ExpertService extends CommonAppService implements IExpertService {
+
+
+
+ @Override
+ public Result listExpert(ExpertVO vo) {
+
+ String hql = "from Expert where deleteFlag=0 and nameExpert like ? order by createTime desc";
+ int count =findExpertCount( vo);//涓撳鎬绘潯鏁�
+ List<Expert> list = findList(hql, new Pager(vo.getSize(), vo.getPage()), CollectionUtils.newList(vo.getKeyword().concat("%")), Expert.class);
+ return new Result(true,"success", CollectionUtils.newObjectMap("list", list, "count", count));
+ }
+
+ @Override
+ public int findExpertCount(ExpertVO vo) {
+ String hql = "from Expert where deleteFlag=0 and nameExpert like :nameExpert";
+ return findCountByComplexHql(hql, CollectionUtils.newObjectMap("nameExpert",vo.getKeyword().concat("%")));
+ }
+
+ @Override
+ public Result save(ExpertVO vo) {
+ Expert expert = new Expert();
+ BeanUtils.copyProperties(vo, expert);
+ expert.setDeleteFlag(0);
+ expert.setCreateTime(new Date());
+ expert.setUpdateTime(new Date());
+ save(expert);
+ return Result.SUCCESS;
+ }
+
+ @Override
+ public Result delete(String ids) {
+
+ Result result = new Result(true);
+ String[] arrStr = ids.split(",");
+ if (arrStr != null && arrStr.length > 0) {
+ String hql = "update Expert set deleteFlag = 1 where Id=?";
+ result = bulkUpdateInLoop(hql, arrStr);
+ }
+ return result;
+ }
+
+ @Override
+ public Result update(ExpertVO vo) {
+ Expert expert = read(Expert.class, vo.getId());
+ BeanUtils.copyProperties(vo, expert);
+ save(expert);
+ return Result.SUCCESS;
+ }
+
+ @Override
+ public Result getExpertById(String id) {
+ Expert expert = read(Expert.class, id);
+ return new Result(true, "expertDTO",expert);
+ }
+}
diff --git a/src/main/java/com/qxueyou/scc/portal/expert/vo/ExpertVO.java b/src/main/java/com/qxueyou/scc/portal/expert/vo/ExpertVO.java
new file mode 100644
index 0000000..3fcfc13
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/portal/expert/vo/ExpertVO.java
@@ -0,0 +1,124 @@
+package com.qxueyou.scc.portal.expert.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.NotBlank;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author angy
+ * @created by 2021/3/1
+ */
+@ApiModel("ExpertVO")
+public class ExpertVO {
+ @NotBlank(message = "涓撳ID涓嶈兘涓虹┖锛�")
+ @ApiModelProperty(name = "id", value = "涓撳Id", dataType = "string", required = true)
+ private String id;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ //椤电爜
+ @NotNull(message = "椤电爜涓嶈兘涓虹┖锛�")
+ @ApiModelProperty(value = "椤电爜", name = "page", dataType = "integer", required = true)
+ private Integer page;
+
+ //椤垫暟
+ @NotNull(message = "椤垫暟涓嶈兘涓虹┖锛�")
+ @ApiModelProperty(value = "椤垫暟", name = "size", dataType = "integer", required = true)
+ private Integer size;
+
+ //鍏抽敭瀛�
+ @ApiModelProperty(value = "鎼滅储鍏抽敭瀛�", name = "keyword", dataType = "string")
+ private String keyword;
+ @ApiModelProperty(value = "涓撳鍚嶇О", name = "nameExpert", dataType = "string")
+ private String nameExpert;
+ @ApiModelProperty(value = "鑱屽姟", name = "job", dataType = "string")
+ private String job;
+ @ApiModelProperty(value = "鍥藉唴鍗曚綅", name = "domesticUnit", dataType = "string")
+ private String domesticUnit;
+ @ApiModelProperty(value = "澶栨淳鍗曚綅", name = "dispatchedUnit", dataType = "string")
+ private String dispatchedUnit;
+ @ApiModelProperty(value = "涓撳鐓х墖", name = "expertImg", dataType = "string")
+ private String expertImg;
+ @ApiModelProperty(value = "涓汉绠�浠�", name = "personalInformation", dataType = "string")
+ private String personalInformation;
+
+ public Integer getPage() {
+ return page;
+ }
+
+ public void setPage(Integer page) {
+ this.page = page;
+ }
+
+ public Integer getSize() {
+ return size;
+ }
+
+ public void setSize(Integer size) {
+ this.size = size;
+ }
+
+ public String getKeyword() {
+ return keyword;
+ }
+
+ public void setKeyword(String keyword) {
+ this.keyword = keyword;
+ }
+
+ public String getNameExpert() {
+ return nameExpert;
+ }
+
+ public void setNameExpert(String nameExpert) {
+ this.nameExpert = nameExpert;
+ }
+
+ public String getJob() {
+ return job;
+ }
+
+ public void setJob(String job) {
+ this.job = job;
+ }
+
+ public String getDomesticUnit() {
+ return domesticUnit;
+ }
+
+ public void setDomesticUnit(String domesticUnit) {
+ this.domesticUnit = domesticUnit;
+ }
+
+ public String getDispatchedUnit() {
+ return dispatchedUnit;
+ }
+
+ public void setDispatchedUnit(String dispatchedUnit) {
+ this.dispatchedUnit = dispatchedUnit;
+ }
+
+ public String getExpertImg() {
+ return expertImg;
+ }
+
+ public void setExpertImg(String expertImg) {
+ this.expertImg = expertImg;
+ }
+
+ public String getPersonalInformation() {
+ return personalInformation;
+ }
+
+ public void setPersonalInformation(String personalInformation) {
+ this.personalInformation = personalInformation;
+ }
+}
diff --git a/src/main/java/com/qxueyou/scc/portal/homepage/controller/HomepageController.java b/src/main/java/com/qxueyou/scc/portal/homepage/controller/HomepageController.java
new file mode 100644
index 0000000..cb69dc3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/portal/homepage/controller/HomepageController.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.portal.homepage.controller;
+
+//import com.qxueyou.appraisal.web.homepage.serivce.IHomepageService;
+//import com.qxueyou.model.Result;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.portal.homepage.serivce.IHomepageService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author ZERO 2021-03-03 09:06
+ */
+@RestController
+@RequestMapping("/homepage")
+@Api(tags = "棣栭〉鐩稿叧鎺ュ彛")
+public class HomepageController {
+
+ @Autowired
+ private IHomepageService homepageService;
+
+ @GetMapping(value = "/tab",produces = "application/json;charset=utf-8")
+ @ApiOperation("鑾峰彇鏍囩")
+ public Result getTabs() {
+
+ return new Result(true, "tab",homepageService.getTabs());
+ }
+
+// @GetMapping
+// @ApiOperation("鑾峰彇鍒楄〃")
+// public Result getIndexDetail() {
+//// System.err.println("=====>鑾峰彇鍒楄〃");
+// return new Result(true,"", homepageService.getIndexDetail());
+// }
+
+ @GetMapping("/article")
+ @ApiOperation("鑾峰彇鏂囩珷鍒楄〃")
+ public Result getArticle(String type, String subColumn, String numbers, int page, int size, String keyword) {
+ System.err.println("=====>鑾峰彇鏂囩珷鍒楄〃");
+ return new Result(true, "article",homepageService.getArticle(type, subColumn, numbers, page, size, keyword));
+ }
+
+ @GetMapping("/article/detail")
+ @ApiOperation("鑾峰彇鏂囩珷璇︽儏")
+ public Result getArticleDetail(String id) {
+
+ return new Result(true,"detail", homepageService.getArticleDetail(id));
+ }
+
+ @GetMapping("/getArticle")
+ @ApiOperation("鑾峰彇鏂囩珷")
+ public Result getGetArticle(String type, String subColumn) {
+ return new Result(true,"getArticle", homepageService.getArticlesType(type, subColumn));
+ }
+
+ @GetMapping("/video")
+ public Result getVideo(String type, String subColumn, int page, int size) {
+ return new Result(true, "video",homepageService.getVideo(type, subColumn, page, size));
+ }
+}
diff --git a/src/main/java/com/qxueyou/scc/portal/homepage/dao/ArticleDao.java b/src/main/java/com/qxueyou/scc/portal/homepage/dao/ArticleDao.java
new file mode 100644
index 0000000..9c549a5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/portal/homepage/dao/ArticleDao.java
@@ -0,0 +1,193 @@
+package com.qxueyou.scc.portal.homepage.dao;
+
+//import com.qxueyou.entity.article.ArticleDO;
+//import com.qxueyou.service.MongoService;
+//import com.qxueyou.util.CollectionUtils;
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.portal.information.model.Information;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+//import org.springframework.data.mongodb.core.query.Criteria;
+//import org.springframework.data.mongodb.core.query.Query;
+//import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Repository;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author ZERO 2021-03-03 16:36
+ */
+@Repository
+public class ArticleDao extends BaseDAO {
+
+
+
+
+
+ public Map<String, Object> moreOccupation(String type, String subColumn, String numbers,int page, int size, String keyword) {
+
+ StringBuffer hql = new StringBuffer(500);
+ hql.append( "from Information where deleteFlag=0 and type = ? and status= ?");
+ List<Object> params = CollectionUtils.newList(type, Information.UP_STATUS);
+
+ // Map<String, Object> condition = CollectionUtils.newObjectMap("type", type, "status", Information.UP_STATUS);
+ if(StringUtils.isNotEmpty(keyword)){
+ hql.append( " and title = ? ");
+ params.add(keyword);
+ }
+ if (type.equals("examBriefing")) {
+ hql.append( "and subColumn = ? ");
+ params.add( subColumn);
+ }
+// if(subColumn!=null) {
+// if (subColumn.equals("previousContest")) {
+// condition.put("numbers", numbers);
+// }
+// }
+
+
+ long totalCount = findCount(hql.toString(),params);
+ hql.append( "order by dateTime desc");
+
+ List<Information> articleList = findList(hql.toString(),new Pager(page,size),params,Information.class);
+
+
+ List<Map<String, Object>> data = articleList
+ .stream()
+ .map(article -> CollectionUtils.newObjectMap(
+ "id", article.getId(),
+ "content", article.getContent(),
+ "title", article.getTitle(),
+ "attachment", article.getAttachment(),
+ "browseCount", article.getBrowseCount(),
+ "status", article.getStatus(),
+ "thumbnailUrl", article.getThumbnailUrl(),
+ "type", article.getType(),
+ "dateTime", article.getDateTime(),
+ "competition",article.getCompetition()))
+ .collect(Collectors.toList());
+
+ return CollectionUtils.newObjectMap("totalCount", totalCount, "data", data);
+ }
+
+ public Map<String, Object> getVideoList(String type, String subColumn,int page, int size){
+ StringBuffer hql = new StringBuffer(500);
+ hql.append( "from Information where deleteFlag=0 and type = ? and status= ? ");
+ List<Object> params = CollectionUtils.newList(type, Information.UP_STATUS);
+// Map<String, Object> condition = CollectionUtils.newObjectMap("type", type, "status", Information.UP_STATUS);
+
+ if (type.equals("examBriefing")) {
+ hql.append( "and subColumn = ? ");
+ params.add( subColumn);
+ }
+ long totalCount = findCount(hql.toString(),params);
+ hql.append( "order by dateTime desc");
+
+
+ List<Information> articleList =findList(hql.toString(),new Pager(page,size),params,Information.class);
+ List<Map<String, Object>> data = articleList
+ .stream()
+ .map(article -> CollectionUtils.newObjectMap(
+ "title", article.getTitle(),
+ "type", article.getType(),
+ "dateTime", article.getDateTime(),
+ "videoUrl",article.getVideoUrl(),
+ "name",article.getNumbers()))
+ .collect(Collectors.toList());
+
+ return CollectionUtils.newObjectMap("totalCount", totalCount, "data", data);
+ }
+//
+ public boolean exist(String type) {
+ String hql= "from Information where deleteFlag=0 and type = ? and status= ? ";
+ long totalCount = findCount(hql,CollectionUtils.newList(type, Information.UP_STATUS));
+ return totalCount>0?true:false;
+ }
+//
+ public boolean existsubColumn(String type, String subColumn) {
+
+
+ String hql= "from Information where deleteFlag=0 and type = ? and status= ? and subColumn=?";
+ long totalCount = findCount(hql,CollectionUtils.newList(type, Information.UP_STATUS,subColumn));
+ return totalCount>0?true:false;
+ }
+
+ public Map<String, Object> getPreAndBehindArticle(String currentArticleId, String type) {
+ StringBuffer hql = new StringBuffer(500);
+ hql.append("from Information where deleteFlag=0 and type = ? and status= ? order by updateTime desc");
+ List<Object> params = CollectionUtils.newList(type, Information.UP_STATUS);
+// Query query = Query.query(Criteria.where("type").is(type)
+// .and("status").is(ArticleDO.UP_STATUS)
+// .and("deleteFlag").is(false))
+// .with(Sort.by(Sort.Direction.DESC, "updateTime"));
+// query.fields().include("id");
+// List<Information> articleList =find(hql.toString(),params,Information.class);
+ List<String> articleIdList = find(hql.toString(),params,Information.class)
+ .stream()
+ .map(Information::getId)
+ .collect(Collectors.toList());
+
+ int currentIndex = articleIdList.indexOf(currentArticleId);
+
+ Map<String, Object> data = CollectionUtils.newObjectMap("previous", null, "behind", null);
+
+ if (currentIndex != 0) {
+ Information preArticle = read(Information.class,articleIdList.get(currentIndex - 1));
+ data.put("previous", CollectionUtils.newObjectMap(
+ "id", preArticle.getId(),
+ "title", preArticle.getTitle(),
+ "type", preArticle.getType()));
+ }
+
+ if (currentIndex != articleIdList.size() - 1) {
+ Information behindArticle = read(Information.class,articleIdList.get(currentIndex + 1));
+ data.put("previous", CollectionUtils.newObjectMap(
+ "id", behindArticle.getId(),
+ "title", behindArticle.getTitle(),
+ "type", behindArticle.getType()));
+ }
+
+ return data;
+ }
+//
+ public void incBrowseCount(String id) {
+// Query query = Query.query(Criteria.where("id").is(id));
+// Update update = new Update();
+// update.inc("browseCount", 1);
+// template.updateFirst(query, update, clz);
+ Information behindArticle = read(Information.class,id);
+ behindArticle.setBrowseCount(behindArticle.getBrowseCount()+1);
+ saveOrUpdate(behindArticle);
+ }
+
+ public Information getArticle(String type,String subColumn)
+ {
+ StringBuffer hql = new StringBuffer(500);
+ hql.append( "from Information where deleteFlag=0 and type = ? and status= ? order by updateTime desc");
+ List<Object> params = CollectionUtils.newList(type, Information.UP_STATUS);
+
+ if (type.equals("examBriefing")) {
+ hql.append( "and subColumn = ? ");
+ params.add( subColumn);
+ }
+// Query query = Query.query(Criteria.where("type").is(type)
+// .and("status").is(ArticleDO.UP_STATUS)
+// .and("deleteFlag").is(false))
+// .with(Sort.by(Sort.Direction.DESC, "updateTime"));
+// System.out.println(type);
+// if (type.equals("examBriefing")) {
+// query.addCriteria(Criteria.where("subColumn").is(subColumn));
+// }
+ Information articleDO = findUnique(hql.toString(), params, Information.class);
+// ArticleDO articleDO =findOne(query,ArticleDO.class);
+ return articleDO;
+ }
+}
diff --git a/src/main/java/com/qxueyou/scc/portal/homepage/serivce/IHomepageService.java b/src/main/java/com/qxueyou/scc/portal/homepage/serivce/IHomepageService.java
new file mode 100644
index 0000000..f2598b8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/portal/homepage/serivce/IHomepageService.java
@@ -0,0 +1,34 @@
+package com.qxueyou.scc.portal.homepage.serivce;
+
+import com.qxueyou.scc.portal.information.model.Information;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author ZERO 2021-03-03 09:16
+ */
+public interface IHomepageService {
+
+ /**
+ * 鑾峰彇棣栭〉鏁版嵁
+// */
+// Map<String, Object> getIndexDetail();
+
+ /**
+ * 鑾峰彇棣栭〉鏍囩
+ */
+ List<Map<String, Object>> getTabs();
+
+ /**
+ * 鑾峰彇鏂囩珷鍒楄〃
+ */
+ Map<String, Object> getArticle(String type,String subColumn,String numbers, int page, int size, String keyword);
+
+ Map<String, Object> getArticleDetail(String id);
+
+ Information getArticlesType(String type, String subColumn);
+
+ Map<String,Object> getVideo(String type,String subColumn,int page, int size);
+
+}
diff --git a/src/main/java/com/qxueyou/scc/portal/homepage/serivce/imp/HomepageService.java b/src/main/java/com/qxueyou/scc/portal/homepage/serivce/imp/HomepageService.java
new file mode 100644
index 0000000..7b06e0a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/portal/homepage/serivce/imp/HomepageService.java
@@ -0,0 +1,140 @@
+package com.qxueyou.scc.portal.homepage.serivce.imp;
+
+//import com.qxueyou.appraisal.web.homepage.dao.AppraisalBatchDao;
+
+//import com.qxueyou.appraisal.web.homepage.dao.ArticleDao;
+//import com.qxueyou.appraisal.web.homepage.dao.ContestsBatchDao;
+//import com.qxueyou.appraisal.web.homepage.dao.OccupationDao;
+//import com.qxueyou.appraisal.web.homepage.serivce.IHomepageService;
+//import com.qxueyou.entity.article.ArticleDO;
+//import com.qxueyou.util.CollectionUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.portal.homepage.dao.ArticleDao;
+import com.qxueyou.scc.portal.homepage.serivce.IHomepageService;
+import com.qxueyou.scc.portal.information.model.Information;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author ZERO 2021-03-03 09:16
+ */
+@Service
+public class HomepageService implements IHomepageService {
+
+ @Autowired
+ private ArticleDao articleDao;
+
+// @Autowired
+// private AppraisalBatchDao batchDao;
+
+// @Autowired
+// private ContestsBatchDao batchDao;
+
+// @Autowired
+// private OccupationDao occupationDao;
+
+ /**
+ * 鑾峰彇棣栭〉鏁版嵁
+ */
+// @Override
+// public Map<String, Object> getIndexDetail() {
+//// System.err.println("================>鑾峰彇棣栭〉鏁版嵁");
+// return CollectionUtils.newObjectMap(
+// "appraisalBatchInfo", batchDao.findBatches(1, 24, null).get("data"), // createTime browseCount dateTime
+// "occupationInfo", articleDao.findPage(CollectionUtils.newObjectMap("type", "qualifiedSet", "status", ArticleDO.UP_STATUS), 1, 8, "dateTime", Sort.Direction.DESC).get("data"),
+// "news", articleDao.findPage(CollectionUtils.newObjectMap("type", "policiesRegulations", "status", ArticleDO.UP_STATUS), 1, 8, "dateTime", Sort.Direction.DESC).get("data"));
+// }
+
+
+ /**
+ * 鑾峰彇棣栭〉鏍囩
+ */
+ @Override
+ public List<Map<String, Object>> getTabs() {
+
+ boolean exist;
+ List<Map<String, Object>> tabs = new ArrayList<>();
+
+ List<Map<String,String>> sub=new ArrayList<>();
+
+
+ exist = articleDao.exist("examBriefing");
+ if (exist) tabs.add(CollectionUtils.newObjectMap("name", "濯掍綋鑱氱劍", "type", "examBriefing","list",sub));
+
+ exist = articleDao.exist("qualifiedSet");
+ if (exist) tabs.add(CollectionUtils.newObjectMap("name", "鍗庢暀鏂伴矞浜�", "type", "qualifiedSet"));
+
+ exist = articleDao.exist("policiesRegulations");
+ if (exist) tabs.add(CollectionUtils.newObjectMap("name", "鏂伴椈涓績", "type", "policiesRegulations"));
+
+ exist = articleDao.exist("examinationGuide");
+ if (exist) tabs.add(CollectionUtils.newObjectMap("name", "涓撳椋庨噰", "type", "examinationGuide"));
+
+ exist = articleDao.exist("popularInformation");
+ if (exist) tabs.add(CollectionUtils.newObjectMap("name", "鑱旂郴鎴戜滑", "type", "popularInformation"));
+
+ exist =articleDao.existsubColumn("examBriefing","introduce");
+ if(exist) sub.add(CollectionUtils.newStringMap("name", "娴峰璧勮", "subColumn", "introduce") );
+
+ exist =articleDao.existsubColumn("examBriefing","contestFile");
+ if(exist) sub.add(CollectionUtils.newStringMap("name", "娴峰璧勮", "subColumn", "contestFile"));
+
+ exist =articleDao.existsubColumn("examBriefing","previousContest");
+ if(exist) sub.add(CollectionUtils.newStringMap("name", "寰�灞婂ぇ璧�", "subColumn", "previousContest"));
+
+ return tabs;
+ }
+
+ /**
+ * 鑾峰彇鏂囩珷鍒楄〃
+ */
+ @Override
+ public Map<String, Object> getArticle(String type,String subColumn,String numbers,int page, int size, String keyword) {
+ return articleDao.moreOccupation(type,subColumn,numbers,page, size, keyword);
+ }
+
+
+ /**
+ * @param id
+ * @return
+ */
+
+ @Override
+ public Map<String, Object> getArticleDetail(String id) {
+
+ //inc娴忚鏁�
+ articleDao.incBrowseCount(id);
+
+ Information article = articleDao.read(Information.class,id);
+
+ Map<String, Object> data = CollectionUtils.newObjectMap(
+ "title", article.getTitle(),
+ "dateTime", article.getDateTime(),
+ "browseCount", article.getBrowseCount(),
+ "content", article.getContent(),
+ "attachment", article.getAttachment());
+
+ Map<String, Object> preAndBehindArticle = articleDao.getPreAndBehindArticle(id, article.getType());
+
+
+ data.putAll(preAndBehindArticle);
+
+ return data;
+ }
+
+ public Information getArticlesType(String type,String subColumn) {
+ Information articleDO=articleDao.getArticle(type,subColumn);
+ return articleDO;
+ }
+
+ @Override
+ public Map<String, Object> getVideo(String type, String subColumn, int page, int size) {
+ return articleDao.getVideoList(type,subColumn,page, size);
+ }
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/HweiYunOBSService.java b/src/main/java/com/qxueyou/scc/teach/res/service/HweiYunOBSService.java
new file mode 100644
index 0000000..0b83fa3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/HweiYunOBSService.java
@@ -0,0 +1,52 @@
+package com.qxueyou.scc.teach.res.service;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+import java.util.List;
+
+/**
+ * @Description 鍗庝负浜慜BS鏈嶅姟鎺ュ彛
+ * @author wuhuiju
+ * @date 2022/12/2 17:01
+ */
+public interface HweiYunOBSService {
+
+ /**
+ * @Description 鍒犻櫎鏂囦欢
+ * @author wuhuiju
+ * @date 2022/12/2 17:02
+ * @param: objectKey 鏂囦欢鍚�
+ * @return: boolean 鎵ц缁撴灉
+ */
+ boolean delete(String objectKey);
+
+ /**
+ * @Description 鎵归噺鍒犻櫎鏂囦欢
+ * @author wuhuiju
+ * @date 2022/12/2 17:02
+ * @param: objectKeys 鏂囦欢鍚嶉泦鍚�
+ * @return: boolean 鎵ц缁撴灉
+ */
+ boolean delete(List<String> objectKeys);
+
+ /**
+ * @Description 涓婁紶鏂囦欢
+ * @author wuhuiju
+ * @date 2022/12/2 17:03
+ * @param: uploadFile 涓婁紶鏂囦欢
+ * @param: objectKey 鏂囦欢鍚嶇О
+ * @return: java.lang.String url璁块棶璺緞
+ */
+ String fileUpload(MultipartFile uploadFile, String objectKey);
+
+ /**
+ * @Description 鏂囦欢涓嬭浇
+ * @author wuhuiju
+ * @date 2022/12/2 17:04
+ * @param: objectKey
+ * @return: java.io.InputStream
+ */
+ InputStream fileDownload(String objectKey);
+}
+
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java b/src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java
new file mode 100644
index 0000000..9f3ab60
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java
@@ -0,0 +1,185 @@
+package com.qxueyou.scc.teach.res.service.impl;
+
+//import com.example.study.springboot.background.service.HweiYunOBSService;
+//import com.example.study.springboot.config.HweiOBSConfig;
+import com.obs.services.ObsClient;
+import com.obs.services.exception.ObsException;
+import com.obs.services.model.*;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QFileUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.config.HweiOBSConfig;
+import com.qxueyou.scc.teach.res.service.HweiYunOBSService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName: HweiYunOBSServiceImpl
+ * @Description: 鍗庝负浜慜BS鏈嶅姟涓氬姟灞�
+ * @Author: wuhuiju
+ * @Date: 2021-12-21 17:05
+ * @Version: 1.0
+ */
+@Slf4j
+@Service
+public class HweiYunOBSServiceImpl implements HweiYunOBSService {
+
+ private final Logger log = LogManager.getLogger(HweiYunOBSServiceImpl.class);
+ @Autowired
+ private HweiOBSConfig hweiOBSConfig;
+
+ public final static String FILE_TYPE_VIDEO = "video";
+
+ public final static String FILE_TYPE_DOC = "doc";
+
+ public final static String FILE_TYPE_AUDIO = "audio";
+
+ public final static String FILE_TYPE_DATA = "data";
+
+ public final static String FILE_TYPE_IMG = "img";
+
+ private static final Map<String, String> fileFormatMap = CollectionUtils.newStringMap("MPEG", FILE_TYPE_VIDEO,
+ "AVI", FILE_TYPE_VIDEO, "MOV", FILE_TYPE_VIDEO, "ASF", FILE_TYPE_VIDEO, "WMV", FILE_TYPE_VIDEO, "NAVI",
+ FILE_TYPE_VIDEO, "3GP", FILE_TYPE_VIDEO, "RAM", FILE_TYPE_VIDEO, "RA", FILE_TYPE_VIDEO, "MKV",
+ FILE_TYPE_VIDEO, "F4V", FILE_TYPE_VIDEO, "RMVB", FILE_TYPE_VIDEO, "MP4", FILE_TYPE_VIDEO,
+
+ "DOC", FILE_TYPE_DOC, "DOCX", FILE_TYPE_DOC, "PDF", FILE_TYPE_DOC, "PPT", FILE_TYPE_DOC, "PPTX",
+ FILE_TYPE_DOC, "XLS", FILE_TYPE_DOC, "XLSX", FILE_TYPE_DOC,
+
+ "MP3", FILE_TYPE_AUDIO, "WMA", FILE_TYPE_AUDIO, "WAV", FILE_TYPE_AUDIO,
+
+ "DATA", FILE_TYPE_DATA,
+
+ "JPG", FILE_TYPE_IMG,"JPEG", FILE_TYPE_IMG, "GIF", FILE_TYPE_IMG, "BMP", FILE_TYPE_IMG, "PNG", FILE_TYPE_IMG
+
+ );
+
+ @Override
+ public boolean delete(String objectKey) {
+ ObsClient obsClient = null;
+ try {
+ // 鍒涘缓ObsClient瀹炰緥
+ obsClient = hweiOBSConfig.getInstance();
+ // obs鍒犻櫎
+ obsClient.deleteObject(hweiOBSConfig.getBucketName(),objectKey);
+ } catch (ObsException e) {
+ log.error("obs鍒犻櫎淇濆瓨澶辫触", e);
+ } finally {
+ hweiOBSConfig.destroy(obsClient);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean delete(List<String> objectKeys) {
+ ObsClient obsClient = null;
+ try {
+ obsClient = hweiOBSConfig.getInstance();
+ DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(hweiOBSConfig.getBucketName());
+ objectKeys.forEach(x -> deleteObjectsRequest.addKeyAndVersion(x));
+ // 鎵归噺鍒犻櫎璇锋眰
+ obsClient.deleteObjects(deleteObjectsRequest);
+ return true;
+ } catch (ObsException e) {
+ log.error("obs鍒犻櫎淇濆瓨澶辫触", e);
+ } finally {
+ hweiOBSConfig.destroy(obsClient);
+ }
+ return false;
+ }
+
+ @Override
+ public String fileUpload(MultipartFile uploadFile, String objectKey) {
+ ObsClient obsClient = null;
+ try {
+ String destPath = getDestPath(objectKey);
+ String bucketName = hweiOBSConfig.getBucketName();
+ obsClient = hweiOBSConfig.getInstance();
+
+ // 鍒ゆ柇妗舵槸鍚﹀瓨鍦�
+ boolean exists = obsClient.headBucket(bucketName);
+
+ if(!exists){
+ // 鑻ヤ笉瀛樺湪锛屽垯鍒涘缓妗�
+ HeaderResponse response = obsClient.createBucket(bucketName);
+ log.info("鍒涘缓妗舵垚鍔�" + response.getRequestId());
+ }
+ InputStream inputStream = uploadFile.getInputStream();
+ long available = inputStream.available();
+// PutObjectRequest request = new PutObjectRequest(bucketName,objectKey,inputStream);
+ PutObjectRequest request = new PutObjectRequest(bucketName,destPath,inputStream);
+ ObjectMetadata objectMetadata = new ObjectMetadata();
+ objectMetadata.setContentLength(available);
+ request.setMetadata(objectMetadata);
+// request.
+ // 璁剧疆瀵硅薄璁块棶鏉冮檺涓哄叕鍏辫
+ request.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ);
+ PutObjectResult result = obsClient.putObject(request);
+
+ // 璇诲彇璇ュ凡涓婁紶瀵硅薄鐨刄RL
+ log.info("宸蹭笂浼犲璞$殑URL" + result.getObjectUrl());
+ return result.getObjectUrl();
+ } catch (ObsException e) {
+ log.error("obs涓婁紶澶辫触", e);
+ } catch (IOException e) {
+ log.error("涓婁紶澶辫触", e);
+ } finally {
+ hweiOBSConfig.destroy(obsClient);
+ }
+ return null;
+ }
+
+ private String getDestPath(String name) {
+ String fileType = getFileType(name);
+
+ StringBuffer path = new StringBuffer(128);
+ path.append(fileType);
+
+ Calendar now = new GregorianCalendar();
+
+ path.append('/');
+ path.append(now.get(Calendar.YEAR));
+ path.append(StringUtils.leftPad(String.valueOf(now.get(Calendar.MONTH)), 2, '0'));
+ path.append('/');
+ path.append(now.get(Calendar.DAY_OF_MONTH));
+ path.append('/');
+ path.append(UUIDUtils.UUID());
+ path.append('.');
+ path.append(QFileUtils.getFileFormat(name));
+
+ return path.toString();
+
+ }
+ private String getFileType(String name) {
+ String fileType = fileFormatMap.get(QFileUtils.getFileFormat(name));
+ return StringUtils.isEmpty(fileType) ? FILE_TYPE_DATA : fileType;
+ }
+
+ @Override
+ public InputStream fileDownload(String objectKey) {
+ ObsClient obsClient = null;
+ try {
+ String bucketName = hweiOBSConfig.getBucketName();
+ obsClient = hweiOBSConfig.getInstance();
+ ObsObject obsObject = obsClient.getObject(bucketName, objectKey);
+ return obsObject.getObjectContent();
+ } catch (ObsException e) {
+ log.error("obs鏂囦欢涓嬭浇澶辫触", e);
+ } finally {
+ hweiOBSConfig.destroy(obsClient);
+ }
+ return null;
+ }
+}
\ No newline at end of file
--
Gitblit v1.8.0