Ver código fonte

新增下载信息相关接口

guozhaoshun 6 anos atrás
pai
commit
307cdeebad

+ 89 - 4
rankin-api-web/src/main/java/cn/rankin/apiweb/controller/CallbackController.java

@@ -2,21 +2,28 @@ package cn.rankin.apiweb.controller;
 
 import cn.rankin.apiweb.assist.resolver.NeedUser;
 import cn.rankin.apiweb.code.ApiWebCode;
+import cn.rankin.apiweb.service.download.DownloadInfoService;
 import cn.rankin.apiweb.service.event.EventService;
+import cn.rankin.common.utils.api.model.APICode;
 import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.data.api.app.vo.DeviceUserVo;
+import cn.rankin.data.api.user.dto.DownloadInfoDTO;
 import cn.rankin.data.api.user.dto.EventLogDTO;
+import cn.rankin.data.api.user.entity.DownloadInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 
 /**
  * CallbackController
  * Created by huodongdong on 2017/10/27.
  */
+@Slf4j
 @RestController
 @RequestMapping(value = "/callback")
 public class CallbackController {
@@ -24,6 +31,9 @@ public class CallbackController {
     @Autowired
     private EventService eventService;
 
+    @Autowired
+    private DownloadInfoService downloadInfoService;
+
     @RequestMapping(value = "/event", method = RequestMethod.POST)
     public APIResult<Boolean> addEvent(@NeedUser DeviceUserVo user, @RequestBody EventLogDTO eventLog) {
         if (eventLog.getEventType() == null ) {
@@ -36,5 +46,80 @@ public class CallbackController {
         APIResult<Boolean> result = eventService.addLog(eventLog);
         return result;
     }
+
+    @RequestMapping(value = "/download/add", method = RequestMethod.POST)
+    public APIResult<Boolean> addDownloadInfo(HttpServletRequest request, @NeedUser DeviceUserVo user, @RequestBody DownloadInfoDTO dto) {
+
+
+
+        /**
+         * 1.获得客户机信息
+         */
+        String requestUrl = request.getRequestURL().toString();//得到请求的URL地址
+        String requestUri = request.getRequestURI();//得到请求的资源
+        String queryString = request.getQueryString();//得到请求的URL地址中附带的参数
+        String remoteAddr = request.getRemoteAddr();//得到来访者的IP地址
+        String remoteHost = request.getRemoteHost();
+        int remotePort = request.getRemotePort();
+        String remoteUser = request.getRemoteUser();
+        String method = request.getMethod();//得到请求URL地址时使用的方法
+        String pathInfo = request.getPathInfo();
+        String localAddr = request.getLocalAddr();//获取WEB服务器的IP地址
+        String localName = request.getLocalName();//获取WEB服务器的主机名
+        String info = request.getHeader("user-agent");
+
+        if(StringUtils.isBlank(dto.getLessonId())){
+            return APIResult.error(ApiWebCode.PARAMETER_ERROR);
+        }
+        if(StringUtils.isBlank(dto.getData())){
+            //return APIResult.error(ApiWebCode.PARAMETER_ERROR);
+        }
+        dto.setMerchantId(user.getMerchantId());
+        dto.setUserId(user.getUid());
+
+
+        DownloadInfo downloadInfo = downloadInfoService.add(dto);
+        if(downloadInfo != null){
+            return APIResult.ok();
+        }else{
+            return APIResult.error(APICode.OPERATE_ERROR);
+        }
+
+    }
+
+    @RequestMapping(value = "/download/list", method = RequestMethod.GET)
+    public APIResult<List<DownloadInfo>> findByUserId(@NeedUser DeviceUserVo user) {
+        List<DownloadInfo> downloadInfos = downloadInfoService.findByUserId(user.getUid());
+        return APIResult.ok(downloadInfos);
+    }
+
+    @RequestMapping(value = "/download/find", method = RequestMethod.GET)
+    public APIResult<DownloadInfo> findByLessonUserId(@NeedUser DeviceUserVo user,@RequestParam("lessonId") String lessonId) {
+        DownloadInfo downloadInfo = downloadInfoService.findByLessonUserId(user.getUid(),lessonId);
+        if(downloadInfo != null){
+            return APIResult.ok(downloadInfo);
+        }else{
+            return APIResult.error(APICode.OPERATE_ERROR);
+        }
+    }
+
+    @RequestMapping(value = "/download/delete", method = RequestMethod.DELETE)
+    public APIResult<Boolean> deleteByLessonUserId(@NeedUser DeviceUserVo user,@RequestParam("lessonId") String lessonId) {
+        DownloadInfo downloadInfo = downloadInfoService.deleteByLessonUserId(user.getUid(),lessonId);
+        if(downloadInfo == null){
+            APIResult.error(APICode.OPERATE_ERROR);
+        }
+        return APIResult.ok();
+    }
+
+    @RequestMapping(value = "/download/update", method = RequestMethod.PUT)
+    public APIResult<Boolean> updateByLessonUserId(@NeedUser DeviceUserVo user,@RequestParam("lessonId") String lessonId) {
+        DownloadInfo downloadInfo = downloadInfoService.updateByLessonUserId(user.getUid(),lessonId);
+        if(downloadInfo == null){
+            APIResult.error(APICode.OPERATE_ERROR);
+        }
+        return APIResult.ok();
+    }
+
 }
 

+ 28 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/service/download/DownloadInfoClient.java

@@ -0,0 +1,28 @@
+package cn.rankin.apiweb.service.download;
+
+import cn.rankin.data.api.user.dto.DownloadInfoDTO;
+import cn.rankin.data.api.user.entity.DownloadInfo;
+import org.springframework.cloud.netflix.feign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@FeignClient(name = "${service.user.name}")
+public interface DownloadInfoClient {
+
+    @RequestMapping(value = "/download", method = RequestMethod.POST)
+    DownloadInfo add(@RequestBody DownloadInfoDTO dto);
+
+    @RequestMapping(value = "/download/list/{uid}", method = RequestMethod.GET)
+    List<DownloadInfo> findByUserId(@RequestParam("uid") String uid);
+
+    @RequestMapping(value = "/download/{uid}", method = RequestMethod.GET)
+    DownloadInfo findByLessonUserId(@RequestParam("uid") String uid, @RequestParam("lessonId") String lessonId);
+
+    @RequestMapping(value = "/download/delete/{uid}", method = RequestMethod.DELETE)
+    DownloadInfo deleteByLessonUserId(@RequestParam("uid") String uid, @RequestParam("lessonId") String lessonId);
+
+    @RequestMapping(value = "/download/update/{uid}", method = RequestMethod.PUT)
+    DownloadInfo updateByLessonUserId(@RequestParam("uid") String uid, @RequestParam("lessonId") String lessonId);
+
+}

+ 41 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/service/download/DownloadInfoService.java

@@ -0,0 +1,41 @@
+package cn.rankin.apiweb.service.download;
+
+import cn.rankin.data.api.user.dto.DownloadInfoDTO;
+import cn.rankin.data.api.user.entity.DownloadInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+@Slf4j
+public class DownloadInfoService {
+
+    @Autowired
+    private DownloadInfoClient downloadInfoClient;
+
+    public DownloadInfo add(DownloadInfoDTO dto) {
+        return downloadInfoClient.add(dto);
+    }
+
+
+    public List<DownloadInfo> findByUserId(String uid) {
+        return downloadInfoClient.findByUserId(uid);
+    }
+
+    public DownloadInfo findByLessonUserId(String uid,String lessonId) {
+        return downloadInfoClient.findByLessonUserId(uid,lessonId);
+    }
+
+    public DownloadInfo deleteByLessonUserId(String uid, String lessonId) {
+        return downloadInfoClient.deleteByLessonUserId(uid,lessonId);
+    }
+
+    public DownloadInfo updateByLessonUserId(String uid, String lessonId) {
+        return downloadInfoClient.updateByLessonUserId(uid,lessonId);
+    }
+
+
+
+}

+ 29 - 0
rankin-common-utils/src/main/java/cn/rankin/common/utils/enums/EventTypeEnum.java

@@ -0,0 +1,29 @@
+package cn.rankin.common.utils.enums;
+
+public enum EventTypeEnum {
+
+    DOWNLOAD("DOWNLOAD"), DELETE("DELETE"), UPDATE("UPDATE");
+
+    private String desc;
+
+    EventTypeEnum(String desc) {
+        this.desc = desc;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public static EventTypeEnum getByName(String name) {
+        if (name == null) {
+            return null;
+        }
+        for (EventTypeEnum favoritesType : values()) {
+            if (favoritesType.name().equals(name)) {
+                return favoritesType;
+            }
+        }
+        return null;
+    }
+}
+

+ 1 - 1
rankin-common-utils/src/main/java/cn/rankin/common/utils/enums/PlatformTypeEnum.java

@@ -2,7 +2,7 @@ package cn.rankin.common.utils.enums;
 
 public enum PlatformTypeEnum {
 
-    APP("app"), TV("TV"), WEIXIN("微信");
+    APP("app"), TV("TV"), WEIXIN("微信"), WINDOWS("windows");
 
     private String desc;
 

+ 7 - 0
rankin-common-utils/src/main/java/cn/rankin/common/utils/exception/CommonException.java

@@ -0,0 +1,7 @@
+package cn.rankin.common.utils.exception;
+
+public class CommonException extends ServiceException {
+    public CommonException (int code , String message){
+        super(message);
+    }
+}

+ 48 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/user/dto/DownloadInfoDTO.java

@@ -0,0 +1,48 @@
+package cn.rankin.data.api.user.dto;
+
+import cn.rankin.common.utils.enums.BaseStatusEnum;
+import cn.rankin.common.utils.enums.EventTypeEnum;
+import cn.rankin.common.utils.enums.PlatformTypeEnum;
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+@Data
+@ToString
+public class DownloadInfoDTO implements Serializable {
+
+    private String id;
+
+    private String userId;
+
+    private String merchantId;
+
+    private String lessonId;
+
+    private EventTypeEnum eventType;
+
+    private String deviceType;
+
+    private String deviceVersion;
+
+    private String data;
+
+    private Integer needUpdate;
+
+    private PlatformTypeEnum platformType;
+
+    private BaseStatusEnum status;
+
+    private Date gmtCreated;
+
+    private Date gmtModified;
+
+
+
+}
+
+
+

+ 71 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/user/entity/DownloadInfo.java

@@ -0,0 +1,71 @@
+package cn.rankin.data.api.user.entity;
+
+import cn.rankin.common.utils.enums.BaseStatusEnum;
+import cn.rankin.common.utils.enums.EventTypeEnum;
+import cn.rankin.common.utils.enums.PlatformTypeEnum;
+import lombok.Data;
+import lombok.ToString;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+
+@Data
+@ToString
+@Entity
+@Table(name = "u_download_info")
+@DynamicInsert
+@DynamicUpdate
+public class DownloadInfo implements Serializable {
+    @Id
+    @Column(name="id")
+    private String id;
+
+    @Column(name="user_id")
+    private String userId;
+
+    @Column(name="merchant_id")
+    private String merchantId;
+
+    @Column(name="lesson_id")
+    private String lessonId;
+
+    @Enumerated(EnumType.ORDINAL)
+    @Column(name="event_type", nullable = false)
+    private EventTypeEnum eventType;
+
+    @Column(name="device_type")
+    private String deviceType;
+
+    @Column(name="device_version")
+    private String deviceVersion;
+
+    @Column(name="data")
+    private String data;
+
+    @Column(name="need_update")
+    private Integer needUpdate;
+
+    @Enumerated(EnumType.ORDINAL)
+    @Column(name="platform_type")
+    private PlatformTypeEnum platformType;
+
+    @Enumerated(EnumType.ORDINAL)
+    @Column(name="status")
+    private BaseStatusEnum status;
+
+    @Column(name = "gmt_created", updatable = false, insertable = false, columnDefinition = "timestamp NULL DEFAULT CURRENT_TIMESTAMP")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date gmtCreated;
+
+    @Column(name = "gmt_modified", updatable = false, insertable = false, columnDefinition = "timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date gmtModified;
+
+}
+
+
+

+ 58 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/controller/DownloadInfoController.java

@@ -0,0 +1,58 @@
+package cn.rankin.userservice.controller;
+
+import cn.rankin.common.utils.api.model.APIResult;
+import cn.rankin.common.utils.enums.BaseStatusEnum;
+import cn.rankin.common.utils.enums.EventTypeEnum;
+import cn.rankin.data.api.user.dto.DownloadInfoDTO;
+import cn.rankin.data.api.user.entity.DownloadInfo;
+import cn.rankin.userservice.service.DownloadInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping(value = "/download")
+public class DownloadInfoController {
+
+    @Autowired
+    private DownloadInfoService downloadInfoService;
+
+    @RequestMapping(method = RequestMethod.POST)
+    public DownloadInfo add(@RequestBody DownloadInfoDTO dto) {
+        dto.setEventType(EventTypeEnum.DOWNLOAD);
+        dto.setStatus(BaseStatusEnum.NORMAL);
+        dto.setNeedUpdate(0);
+
+        //TODO
+        //addEventLog();
+
+        return downloadInfoService.add(dto);
+    }
+
+    @RequestMapping(value = "/list/{uid}", method = RequestMethod.GET)
+    public List<DownloadInfo> findByUserId(@PathVariable("uid") String uid){
+        return downloadInfoService.findByUserId(uid,EventTypeEnum.DOWNLOAD,BaseStatusEnum.NORMAL);
+    }
+
+    @RequestMapping(value = "/{uid}", method = RequestMethod.GET)
+    public DownloadInfo findByLessonUserId(@PathVariable("uid") String uid, @RequestParam("lessonId") String lessonId){
+        return downloadInfoService.findByLessonUserId(uid,lessonId,EventTypeEnum.DOWNLOAD,BaseStatusEnum.NORMAL);
+    }
+
+    @RequestMapping(value = "/delete/{uid}", method = RequestMethod.DELETE)
+    public DownloadInfo deleteByLessonUserId(@PathVariable("uid") String uid, @RequestParam("lessonId") String lessonId){
+        return downloadInfoService.deleteByLessonUserId(uid,lessonId);
+    }
+
+    @RequestMapping(value = "/update/{uid}", method = RequestMethod.PUT)
+    public DownloadInfo updateByLessonUserId(@PathVariable("uid") String uid, @RequestParam("lessonId") String lessonId){
+        return downloadInfoService.updateByLessonUserId(uid,lessonId);
+    }
+
+    @RequestMapping(value = "/set/update/{lessonId}", method = RequestMethod.PUT)
+    public int setUpdateByLessonId(@PathVariable("lessonId") String lessonId){
+        return downloadInfoService.setUpdateByLessonId(lessonId);
+    }
+
+}

+ 30 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/repository/DownloadInfoRepository.java

@@ -0,0 +1,30 @@
+package cn.rankin.userservice.repository;
+
+import cn.rankin.common.utils.enums.BaseStatusEnum;
+import cn.rankin.common.utils.enums.EventTypeEnum;
+import cn.rankin.common.utils.jpa.BasicJpaRepository;
+import cn.rankin.data.api.user.entity.DownloadInfo;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+public interface DownloadInfoRepository extends BasicJpaRepository<DownloadInfo, String> {
+
+    @Query(value = "select info from DownloadInfo info where info.userId = ?1 AND info.eventType= ?2 AND info.status = ?3 ORDER BY info.gmtCreated DESC ")
+    List<DownloadInfo> findByUserId(String uid, EventTypeEnum eventType, BaseStatusEnum status);
+
+    @Query(value = "select info from DownloadInfo info where info.userId = ?1 AND info.lessonId = ?2 AND info.eventType = ?3  AND info.status = ?4 ORDER BY info.gmtCreated DESC ")
+    DownloadInfo findByLessonUserId(String uid, String lessonId, EventTypeEnum eventType, BaseStatusEnum status);
+
+    @Query(value = "select info from DownloadInfo info where info.userId = ?1 AND info.lessonId = ?2 ORDER BY info.gmtCreated DESC ")
+    DownloadInfo findByLessonUserId(String uid, String lessonId);
+
+    @Modifying
+    @Query(value = "update DownloadInfo info set info.status = ?3 where info.userId = ?1 and info.lessonId = ?2")
+    int updateByLessonUserId(String uid, String lessonId, BaseStatusEnum status);
+
+    @Modifying
+    @Query(value = "update DownloadInfo info set info.needUpdate = 1 where info.lessonId = ?1 AND info.status = ?2")
+    int setUpdateByLessonId(String lessonId, BaseStatusEnum status);
+}

+ 99 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/service/DownloadInfoService.java

@@ -0,0 +1,99 @@
+package cn.rankin.userservice.service;
+
+import cn.rankin.common.utils.enums.BaseStatusEnum;
+import cn.rankin.common.utils.enums.EventTypeEnum;
+import cn.rankin.data.api.user.dto.DownloadInfoDTO;
+import cn.rankin.data.api.user.entity.DownloadInfo;
+import cn.rankin.userservice.repository.DownloadInfoRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+import static cn.rankin.userservice.utils.DTOConverter.convert;
+
+@Service
+public class DownloadInfoService {
+
+    @Autowired
+    private DownloadInfoRepository downloadInfoRepository;
+
+    /**
+     * 增加下载信息,
+     * 若已存在,更改状态
+     * @param dto
+     * @return
+     */
+    public DownloadInfo add(DownloadInfoDTO dto) {
+        DownloadInfo entity = downloadInfoRepository.findByLessonUserId(dto.getUserId(), dto.getLessonId());
+        if(entity != null){
+            DownloadInfo downloadInfo = convert(dto);
+            downloadInfo.setId(entity.getId());
+            return downloadInfoRepository.update(downloadInfo);
+        }else{
+            DownloadInfo downloadInfo = convert(dto);
+            return downloadInfoRepository.save(downloadInfo);
+        }
+
+    }
+
+    /**
+     * 用户所有下载列表    不包含已删除
+     * @param uid
+     * @param eventType
+     * @param status
+     * @return
+     */
+    public List<DownloadInfo> findByUserId(String uid, EventTypeEnum eventType, BaseStatusEnum status) {
+        return downloadInfoRepository.findByUserId(uid, eventType, status);
+    }
+
+    /**
+     * 查询下载信息
+     * 根据用户ID   课程ID
+     * @param uid
+     * @param lessonId
+     * @param eventType
+     * @param status
+     * @return
+     */
+    public DownloadInfo findByLessonUserId(String uid, String lessonId, EventTypeEnum eventType, BaseStatusEnum status) {
+        return downloadInfoRepository.findByLessonUserId(uid, lessonId, eventType, status);
+    }
+
+    /**
+     * 删除下载   (数据库逻辑删除)
+     * @param uid
+     * @param lessonId
+     * @return
+     */
+    public DownloadInfo deleteByLessonUserId(String uid, String lessonId) {
+        DownloadInfo entity = downloadInfoRepository.findByLessonUserId(uid, lessonId);
+        if(entity != null){
+            entity.setStatus(BaseStatusEnum.DEL);
+            return downloadInfoRepository.update(entity);
+        }else{
+            return null;
+        }
+    }
+
+    /**
+     * 更新下载
+     * @param uid
+     * @param lessonId
+     * @return
+     */
+    public DownloadInfo updateByLessonUserId(String uid, String lessonId) {
+        DownloadInfo entity = downloadInfoRepository.findByLessonUserId(uid, lessonId);
+        if(entity != null){
+            entity.setNeedUpdate(0);
+            return downloadInfoRepository.update(entity);
+        }else{
+            return null;
+        }
+    }
+
+    public int setUpdateByLessonId(String lessonId) {
+        return downloadInfoRepository.setUpdateByLessonId(lessonId,BaseStatusEnum.NORMAL);
+    }
+}

+ 6 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/utils/DTOConverter.java

@@ -70,4 +70,10 @@ public class DTOConverter {
         BeanUtils.copyProperties(userTagDTO, userTag);
         return userTag;
     }
+
+    public static DownloadInfo convert(DownloadInfoDTO downloadInfoDTO) {
+        DownloadInfo downloadInfo = new DownloadInfo();
+        BeanUtils.copyProperties(downloadInfoDTO, downloadInfo);
+        return downloadInfo;
+    }
 }