Browse Source

Merge remote-tracking branches 'remotes/origin/hag' and 'remotes/origin/hag-bak'

# Conflicts:
#	src/main/resources/application-dev.properties
#	src/main/resources/application-prd.properties
xushengqiang 3 years ago
parent
commit
89fb0b4bc0
56 changed files with 1889 additions and 62 deletions
  1. 5 0
      pom.xml
  2. 2 3
      src/main/java/cn/efunbox/audio/config/Config.java
  3. 0 1
      src/main/java/cn/efunbox/audio/controller/AudioController.java
  4. 8 7
      src/main/java/cn/efunbox/audio/controller/ChannelController.java
  5. 57 5
      src/main/java/cn/efunbox/audio/controller/DeviceController.java
  6. 4 7
      src/main/java/cn/efunbox/audio/controller/RightsController.java
  7. 27 0
      src/main/java/cn/efunbox/audio/controller/hag/HagContentController.java
  8. 54 0
      src/main/java/cn/efunbox/audio/controller/hag/HagOrderController.java
  9. 27 0
      src/main/java/cn/efunbox/audio/controller/hag/HagProductController.java
  10. 27 0
      src/main/java/cn/efunbox/audio/controller/hag/HagResourceController.java
  11. 3 4
      src/main/java/cn/efunbox/audio/entity/Admin.java
  12. 0 1
      src/main/java/cn/efunbox/audio/entity/Album.java
  13. 0 1
      src/main/java/cn/efunbox/audio/entity/Audio.java
  14. 0 1
      src/main/java/cn/efunbox/audio/entity/Device.java
  15. 3 4
      src/main/java/cn/efunbox/audio/entity/Grouping.java
  16. 4 5
      src/main/java/cn/efunbox/audio/entity/Record.java
  17. 3 4
      src/main/java/cn/efunbox/audio/entity/Rights.java
  18. 0 2
      src/main/java/cn/efunbox/audio/entity/Trail.java
  19. 81 0
      src/main/java/cn/efunbox/audio/entity/hag/HagAlbum.java
  20. 67 0
      src/main/java/cn/efunbox/audio/entity/hag/HagContent.java
  21. 60 0
      src/main/java/cn/efunbox/audio/entity/hag/HagOrder.java
  22. 81 0
      src/main/java/cn/efunbox/audio/entity/hag/HagProduct.java
  23. 3 3
      src/main/java/cn/efunbox/audio/impl/ChannelServiceImpl.java
  24. 206 0
      src/main/java/cn/efunbox/audio/impl/hag/HagContentServiceImpl.java
  25. 132 0
      src/main/java/cn/efunbox/audio/impl/hag/HagOrderServiceImpl.java
  26. 83 0
      src/main/java/cn/efunbox/audio/impl/hag/HagProductServiceImpl.java
  27. 5 4
      src/main/java/cn/efunbox/audio/repository/base/ProjectSimpleJpaRepository.java
  28. 15 0
      src/main/java/cn/efunbox/audio/repository/hag/HagAlbumRepository.java
  29. 17 0
      src/main/java/cn/efunbox/audio/repository/hag/HagContentRepository.java
  30. 12 0
      src/main/java/cn/efunbox/audio/repository/hag/HagOrderRepository.java
  31. 22 0
      src/main/java/cn/efunbox/audio/repository/hag/HagProductRepository.java
  32. 1 1
      src/main/java/cn/efunbox/audio/service/ChannelService.java
  33. 16 0
      src/main/java/cn/efunbox/audio/service/hag/HagContentService.java
  34. 12 0
      src/main/java/cn/efunbox/audio/service/hag/HagOrderService.java
  35. 13 0
      src/main/java/cn/efunbox/audio/service/hag/HagProductService.java
  36. 22 0
      src/main/java/cn/efunbox/audio/utils/BaseConstant.java
  37. 16 3
      src/main/java/cn/efunbox/audio/utils/DateUtil.java
  38. 78 3
      src/main/java/cn/efunbox/audio/utils/Encrypt.java
  39. 92 0
      src/main/java/cn/efunbox/audio/utils/MD5.java
  40. 64 0
      src/main/java/cn/efunbox/audio/vo/hag/AlbumConverter.java
  41. 29 0
      src/main/java/cn/efunbox/audio/vo/hag/AudioUrl.java
  42. 42 0
      src/main/java/cn/efunbox/audio/vo/hag/ContentConverter.java
  43. 57 0
      src/main/java/cn/efunbox/audio/vo/hag/ContentVO.java
  44. 14 0
      src/main/java/cn/efunbox/audio/vo/hag/HagBaseResp.java
  45. 17 0
      src/main/java/cn/efunbox/audio/vo/hag/HagContentReq.java
  46. 20 0
      src/main/java/cn/efunbox/audio/vo/hag/HagContentResp.java
  47. 20 0
      src/main/java/cn/efunbox/audio/vo/hag/HagProductReq.java
  48. 16 0
      src/main/java/cn/efunbox/audio/vo/hag/HagProductResp.java
  49. 114 0
      src/main/java/cn/efunbox/audio/vo/hag/HagSkillReq.java
  50. 51 0
      src/main/java/cn/efunbox/audio/vo/hag/HagSkillResp.java
  51. 16 0
      src/main/java/cn/efunbox/audio/vo/hag/OrderSyncResult.java
  52. 18 0
      src/main/java/cn/efunbox/audio/vo/hag/Pagination.java
  53. 74 0
      src/main/java/cn/efunbox/audio/vo/hag/ProductConverter.java
  54. 67 0
      src/main/java/cn/efunbox/audio/vo/hag/ProductVO.java
  55. 6 2
      src/main/resources/application-dev.properties
  56. 6 1
      src/main/resources/application-prd.properties

+ 5 - 0
pom.xml

@@ -166,6 +166,11 @@
 			<artifactId>jave-native-win64</artifactId>
 			<version>2.4.4</version>
 		</dependency>
+		<dependency>
+			<groupId>commons-codec</groupId>
+			<artifactId>commons-codec</artifactId>
+			<version>1.12</version>
+		</dependency>
 	</dependencies>
 
 	<dependencyManagement>

+ 2 - 3
src/main/java/cn/efunbox/audio/config/Config.java

@@ -50,12 +50,11 @@ public class Config extends WebMvcConfigurerAdapter {
         registry.addInterceptor(authInterceptor())
                 .addPathPatterns("/audio/search", "/audio/searchList", "/audio/info/{audioId}", "/album", "/album/{albumId}")
                 .excludePathPatterns("/device/**", "/error", "/audio/*");
-
         registry.addInterceptor(adminInterceptor())
                 .addPathPatterns("/**", "/device/update", "/device/delete")
                 .excludePathPatterns("/device/**", "/audio/info/{audioId}", "/error", "/admin/login", "/audio/search", "/file/**", "/audio/searchList", "/statistics", "/album", "/album/{albumId}")
-
-                .excludePathPatterns("/getTypeList", "/getTypeContentList", "/getContentDetail", "/getContentChapterList", "/getChapterDetail", "/getTypeUpdateList", "/getContentUpdateList", "/getChapterUpdateList", "/getTypeUpdateList/**", "/getContentUpdateList/**", "/getChapterUpdateList/**");
+                .excludePathPatterns("/getTypeList", "/getTypeContentList", "/getContentDetail", "/getContentChapterList", "/getChapterDetail", "/getTypeUpdateList", "/getContentUpdateList", "/getChapterUpdateList", "/getTypeUpdateList/**", "/getContentUpdateList/**", "/getChapterUpdateList/**")
+                .excludePathPatterns("/api/hag/v1/**");
 
         //杭研开放接口
         //.excludePathPatterns("/getTypeList","/getTypeContentList","/getContentDetail","/getContentChapterList","/getChapterDetail","/getTypeUpdateList","/getContentUpdateList","/getChapterUpdateList");

+ 0 - 1
src/main/java/cn/efunbox/audio/controller/AudioController.java

@@ -286,7 +286,6 @@ public class AudioController {
         record.setIdDevice(device.getId());
         record.setIdChannel(device.getIdChannel());
         record.setIdAudio(id);
-        record.setCreated(new Timestamp(new Date().getTime()));
         recordService.Insert(record);
     }
 

+ 8 - 7
src/main/java/cn/efunbox/audio/controller/ChannelController.java

@@ -19,10 +19,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.sql.Timestamp;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * Created by yao on 17-9-26.
@@ -52,9 +49,13 @@ public class ChannelController {
             size = "0";
         Map<String,Object> map = new HashMap<>();
         List<Channel> list = null;
-        if(idChannel!=null && idChannel.length()>0)
-            list = channelService.SearchById(Long.valueOf(idChannel));
-        else if(name!=null && name.length()>0)
+        if(idChannel!=null && idChannel.length()>0){
+            Channel channel = channelService.SearchById(Long.valueOf(idChannel));
+            if (Objects.nonNull(channel)) {
+                list = new ArrayList<>();
+                list.add(channel);
+            }
+        } else if(name!=null && name.length()>0)
             list = channelService.SearchByName(name);
         else if(idFather!=null && idFather.length()>0)
             list = channelService.SearchByIdFather(Long.valueOf(idFather));

+ 57 - 5
src/main/java/cn/efunbox/audio/controller/DeviceController.java

@@ -10,6 +10,7 @@ import cn.efunbox.audio.service.DeviceService;
 import cn.efunbox.audio.utils.ApiCode;
 import cn.efunbox.audio.utils.Encrypt;
 import cn.efunbox.audio.utils.HttpUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
@@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.nio.charset.StandardCharsets;
 import java.sql.Timestamp;
 import java.util.*;
 
@@ -143,8 +145,8 @@ public class DeviceController {
             HttpUtil.responseApiCode(request, response, ApiCode.RECORD_EXIST);
             return;
         }
-        List<Channel> channelList = channelService.SearchById(Long.valueOf(idChannel));
-        if(channelList==null || channelList.size()<1){
+        Channel channel = channelService.SearchById(Long.valueOf(idChannel));
+        if(Objects.isNull(channel)){
             HttpUtil.responseApiCode(request, response, ApiCode.PARAMETER_ERROR);
             return;
         }
@@ -190,6 +192,7 @@ public class DeviceController {
     public void token(HttpServletRequest request, HttpServletResponse response){
         String idChannel = request.getParameter("idChannel");
         String idDevice = request.getParameter("idDevice");
+        String ts = request.getParameter("x-ts");
         String sign = request.getParameter("sign");
 
         if(StringUtils.isBlank(idChannel) || StringUtils.isBlank(idDevice) || StringUtils.isBlank(sign)){
@@ -199,18 +202,67 @@ public class DeviceController {
         Map<String,String> param = new HashMap<>();
         param.put("idChannel",idChannel);
         param.put("idDevice",idDevice);
-        String test = Encrypt.createSHA256Sign(param,signKey);
+        param.put("x-ts",ts);
+        log.info("find token param : {} , sign : {}", JSON.toJSONString(param),sign);
+        String test = Encrypt.createHMACSHA256(param,signKey);
+        if (StringUtils.isBlank(ts)) {
+            test = Encrypt.createSHA256Sign(param,signKey);
+        }
 
         if (!sign.equalsIgnoreCase(test)) {
             HttpUtil.responseApiCode(request, response, ApiCode.SIGN_FAIL);
             return;
         }
 
+        Channel channel = channelService.SearchById(Long.valueOf(idChannel));
+        if(Objects.isNull(channel)){
+            HttpUtil.responseApiCode(request, response, ApiCode.CHANNEL_NOT_FOUND_ERROR);
+            return;
+        }
+
+        Device device = deviceService.findToken(Long.valueOf(idChannel), idDevice);
 
+        if(Objects.isNull(device)){
+            HttpUtil.responseApiCode(request, response, ApiCode.NO_REGISTER_FAIL);
+            return;
+        }
 
+        device.setIaas_eid("");
+        device.setIaas_name("");
+        device.setIaas_uid("");
+        device.setIaas_token("");
+        device.setIaas_pwd("");
+        device.setTokenOld("");
+        HttpUtil.responseOkData(request, response, device);
+
+        return;
+    }
+
+
+    @RequestMapping(value = "/v2/token",method = RequestMethod.GET)
+    public void tokenV2(HttpServletRequest request, HttpServletResponse response){
+        String idChannel = request.getParameter("idChannel");
+        String idDevice = request.getParameter("idDevice");
+        String ts = request.getParameter("x-ts");
+        String sign = request.getParameter("sign");
+
+        if(StringUtils.isBlank(idChannel) || StringUtils.isBlank(idDevice) || StringUtils.isBlank(sign)){
+            HttpUtil.responseApiCode(request, response, ApiCode.PARAMETER_ERROR);
+            return;
+        }
+        Map<String,String> param = new HashMap<>();
+        param.put("idChannel",idChannel);
+        param.put("idDevice",idDevice);
+        param.put("x-ts",ts);
+        String signStr = Encrypt.createHMACSHA256(param,signKey);
+
+        if (!signStr.equalsIgnoreCase(sign)) {
+            HttpUtil.responseApiCode(request, response, ApiCode.SIGN_FAIL);
+            return;
+        }
 
-        List<Channel> channelList = channelService.SearchById(Long.valueOf(idChannel));
-        if(channelList==null || channelList.size()<1){
+        Channel channel = channelService.SearchById(Long.valueOf(idChannel));
+        if(Objects.isNull(channel)){
             HttpUtil.responseApiCode(request, response, ApiCode.CHANNEL_NOT_FOUND_ERROR);
             return;
         }

+ 4 - 7
src/main/java/cn/efunbox/audio/controller/RightsController.java

@@ -20,10 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.sql.Timestamp;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * Created by yao on 17-9-26.
@@ -135,13 +132,13 @@ public class RightsController {
             HttpUtil.responseApiCode(request, response, ApiCode.RECORD_EXIST);
             return;
         }
-        List<Channel> cList = channelService.SearchById(rights.getIdChannel());
+        Channel channel = channelService.SearchById(rights.getIdChannel());
         List<Grouping> gList = groupingService.SearchById(rights.getIdGroup());
-        if(cList==null || cList.size()<1 || gList==null || gList.size()<1){
+        if(Objects.isNull(channel) || gList==null || gList.size()<1){
             HttpUtil.responseApiCode(request, response, ApiCode.PARAMETER_ERROR);
             return;
         }
-        rights.setNameChannel(cList.get(0).getName());
+        rights.setNameChannel(channel.getName());
         rights.setNameGroup(gList.get(0).getName());
         rights.setStatus(Status.ONLINE.getCode());
         rights.setCreated(new Timestamp(new Date().getTime()));

+ 27 - 0
src/main/java/cn/efunbox/audio/controller/hag/HagContentController.java

@@ -0,0 +1,27 @@
+package cn.efunbox.audio.controller.hag;
+
+import cn.efunbox.audio.service.hag.HagContentService;
+import cn.efunbox.audio.vo.hag.HagContentReq;
+import cn.efunbox.audio.vo.hag.HagBaseResp;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * HagContentController
+ * Created by xusq on 2019/12/25.
+ */
+@RequestMapping("/api/hag/v1/content")
+@RestController
+public class HagContentController {
+
+    @Autowired
+    private HagContentService hagContentService;
+
+    @PostMapping
+    public HagBaseResp content(@RequestBody HagContentReq hagContentReq){
+        return hagContentService.list(hagContentReq);
+    }
+}

+ 54 - 0
src/main/java/cn/efunbox/audio/controller/hag/HagOrderController.java

@@ -0,0 +1,54 @@
+package cn.efunbox.audio.controller.hag;
+
+import cn.efunbox.audio.service.hag.HagContentService;
+import cn.efunbox.audio.service.hag.HagOrderService;
+import cn.efunbox.audio.utils.BaseConstant;
+import cn.efunbox.audio.vo.hag.HagSkillReq;
+import cn.efunbox.audio.vo.hag.HagSkillResp;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Objects;
+
+/**
+ * HaOrderController
+ * Created by xusq on 2019/12/25.
+ */
+@Slf4j
+@RequestMapping("/api/hag/v1/auth")
+@RestController
+public class HagOrderController {
+
+
+
+    @Autowired
+    private HagOrderService hagOrderService;
+    @Autowired
+    private HagContentService hagContentService;
+
+    @PostMapping
+    public HagSkillResp sync(@RequestBody HagSkillReq skillReq) {
+
+        log.info("HAG sync param : {}", JSON.toJSONString(skillReq));
+        HagSkillResp hagSkillResp = new HagSkillResp();
+        HagSkillReq.HagHeader header = skillReq.getHeader();
+        if (Objects.isNull(header)) {
+            return hagSkillResp;
+        }
+
+        if (Objects.equals(BaseConstant.HAG_SYNC_ORDER_TYPE,header.getType())) {
+            hagSkillResp = hagOrderService.save(skillReq);
+        } else {
+            hagSkillResp = hagContentService.getResUrl(skillReq);
+        }
+
+
+        return hagSkillResp;
+    }
+
+}

+ 27 - 0
src/main/java/cn/efunbox/audio/controller/hag/HagProductController.java

@@ -0,0 +1,27 @@
+package cn.efunbox.audio.controller.hag;
+
+import cn.efunbox.audio.service.hag.HagProductService;
+import cn.efunbox.audio.vo.hag.HagProductReq;
+import cn.efunbox.audio.vo.hag.HagProductResp;
+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.RestController;
+
+/**
+ * HagProductController
+ * Created by xusq on 2019/12/25.
+ */
+@RestController
+@RequestMapping("/api/hag/v1/product")
+public class HagProductController {
+
+    @Autowired
+    private HagProductService hagProductService;
+
+    @RequestMapping
+    public HagProductResp list(@RequestBody HagProductReq productReq) {
+        return hagProductService.list(productReq);
+    }
+
+}

+ 27 - 0
src/main/java/cn/efunbox/audio/controller/hag/HagResourceController.java

@@ -0,0 +1,27 @@
+package cn.efunbox.audio.controller.hag;
+
+import cn.efunbox.audio.service.hag.HagContentService;
+import cn.efunbox.audio.vo.hag.HagSkillReq;
+import cn.efunbox.audio.vo.hag.HagSkillResp;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * HagResourceController
+ * Created by xusq on 2019/12/26.
+ */
+@RestController
+@RequestMapping("/api/hag/v1/resource")
+public class HagResourceController {
+
+    @Autowired
+    private HagContentService hagContentService;
+
+    @PostMapping
+    public HagSkillResp url(@RequestBody HagSkillReq skillReq) {
+        return hagContentService.getResUrl(skillReq);
+    }
+}

+ 3 - 4
src/main/java/cn/efunbox/audio/entity/Admin.java

@@ -1,16 +1,16 @@
 package cn.efunbox.audio.entity;
 
 
-import cn.efunbox.audio.consts.Status;
 import lombok.Data;
 import lombok.ToString;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
 import java.io.Serializable;
 import java.sql.Timestamp;
-import java.util.Date;
 
 /**
  * 系统管理员
@@ -26,7 +26,6 @@ import java.util.Date;
 public class Admin implements Serializable, Cloneable {
 
     @Id
-    @GeneratedValue
     private Long id;
 
     //用户名

+ 0 - 1
src/main/java/cn/efunbox/audio/entity/Album.java

@@ -23,7 +23,6 @@ import java.sql.Timestamp;
 public class Album implements Serializable {
 
     @Id
-    @GeneratedValue
     private BigInteger id;
 
     private String name;

+ 0 - 1
src/main/java/cn/efunbox/audio/entity/Audio.java

@@ -25,7 +25,6 @@ import java.sql.Timestamp;
 public class Audio implements Serializable, Cloneable {
 
     @Id
-    @GeneratedValue
     @Column(name = "id")
     private Long id;
 

+ 0 - 1
src/main/java/cn/efunbox/audio/entity/Device.java

@@ -25,7 +25,6 @@ import java.util.Date;
 public class Device implements Serializable, Cloneable{
 
     @Id
-    @GeneratedValue
     private Long id;
 
     //新token

+ 3 - 4
src/main/java/cn/efunbox/audio/entity/Grouping.java

@@ -1,16 +1,16 @@
 package cn.efunbox.audio.entity;
 
 
-import cn.efunbox.audio.consts.Status;
 import lombok.Data;
 import lombok.ToString;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
 import java.io.Serializable;
 import java.sql.Timestamp;
-import java.util.Date;
 
 /**
  * 资源分组
@@ -26,7 +26,6 @@ import java.util.Date;
 public class Grouping implements Serializable, Cloneable {
 
     @Id
-    @GeneratedValue
     private Long id;
 
     //上级组/父节点编号

+ 4 - 5
src/main/java/cn/efunbox/audio/entity/Record.java

@@ -1,15 +1,15 @@
 package cn.efunbox.audio.entity;
 
 
-import cn.efunbox.audio.consts.Status;
 import lombok.Data;
 import lombok.ToString;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
 import java.io.Serializable;
-import java.sql.Timestamp;
 import java.util.Date;
 
 /**
@@ -26,7 +26,6 @@ import java.util.Date;
 public class Record implements Serializable, Cloneable {
 
     @Id
-    @GeneratedValue
     private Long id;
 
     //渠道编号
@@ -47,7 +46,7 @@ public class Record implements Serializable, Cloneable {
     @Column
 //    @Temporal(TemporalType.TIMESTAMP)
 //    private Date created;
-    private Timestamp created;
+    private Date created;
 
     public Object clone() throws CloneNotSupportedException {
         return super.clone();

+ 3 - 4
src/main/java/cn/efunbox/audio/entity/Rights.java

@@ -1,16 +1,16 @@
 package cn.efunbox.audio.entity;
 
 
-import cn.efunbox.audio.consts.Status;
 import lombok.Data;
 import lombok.ToString;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
 import java.io.Serializable;
 import java.sql.Timestamp;
-import java.util.Date;
 
 /**
  * 渠道对资源组的权限
@@ -26,7 +26,6 @@ import java.util.Date;
 public class Rights implements Serializable, Cloneable {
 
     @Id
-    @GeneratedValue
     private Long id;
 
     //渠道编号

+ 0 - 2
src/main/java/cn/efunbox/audio/entity/Trail.java

@@ -8,7 +8,6 @@ import org.hibernate.annotations.DynamicUpdate;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import java.io.Serializable;
 import java.sql.Timestamp;
@@ -25,7 +24,6 @@ import java.sql.Timestamp;
 public class Trail implements Serializable, Cloneable {
 
     @Id
-    @GeneratedValue
     private Long id;
 
     //管理员编号

+ 81 - 0
src/main/java/cn/efunbox/audio/entity/hag/HagAlbum.java

@@ -0,0 +1,81 @@
+package cn.efunbox.audio.entity.hag;
+
+import lombok.Data;
+import lombok.ToString;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * HagAlbum
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+@ToString
+@Entity
+@Table(name = "hag_album")
+@DynamicInsert
+@DynamicUpdate
+public class HagAlbum implements Serializable {
+
+    @Id
+    private String id;
+
+    @Column(name = "album_name")
+    private String albumName;
+
+    @Column(name = "artist_name")
+    private String artistName;
+
+    private Integer chapter;
+
+    @Column(name = "charge_type")
+    private Integer chargeType;
+
+    @Column(name = "relate_cp_sku_id")
+    private String relateCpSkuId;
+
+    private String crowd;
+
+    @Column(name = "first_class")
+    private String firstClass;
+
+    @Column(name = "second_class")
+    private String secondClass;
+
+    @Column(name = "third_class")
+    private String thirdClass;
+
+    private Integer status;
+
+    @Column(name = "song_num")
+    private Integer songNum;
+
+    @Column(name = "large_icon")
+    private String largeIcon;
+
+    @Column(name = "medium_icon")
+    private String mediumIcon;
+
+    @Column(name = "small_icon")
+    private String smallIcon;
+
+    @Column(name = "height_pixels")
+    private String heightPixels;
+
+    @Column(name = "width_pixels")
+    private String widthPixels;
+
+    @Column(name = "gmt_created")
+    private Date gmtCreated;
+
+    @Column(name = "gmt_modified")
+    private Date gmtModified;
+
+}

+ 67 - 0
src/main/java/cn/efunbox/audio/entity/hag/HagContent.java

@@ -0,0 +1,67 @@
+package cn.efunbox.audio.entity.hag;
+
+import lombok.Data;
+import lombok.ToString;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * HagContent
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+@ToString
+@Entity
+@Table(name = "hag_content")
+@DynamicInsert
+@DynamicUpdate
+public class HagContent implements Serializable {
+
+    @Id
+    private String id;
+
+    @Column(name = "album_id")
+    private String albumId;
+
+    private Integer chapter;
+
+    @Column(name = "content_name")
+    private String contentName;
+
+    private String crowd;
+
+    @Column(name = "first_class")
+    private String firstClass;
+
+    @Column(name = "second_class")
+    private String secondClass;
+
+    @Column(name = "third_class")
+    private String thirdClass;
+
+    @Column(name = "free_flag")
+    private Integer freeFlag;
+
+    private String language;
+
+    private String url;
+
+    @Column(name = "time_length")
+    private String timeLength;
+
+    private Integer status;
+
+    @Column(name = "gmt_created")
+    private Date gmtCreated;
+
+    @Column(name = "gmt_modified")
+    private Date gmtModified;
+
+}

+ 60 - 0
src/main/java/cn/efunbox/audio/entity/hag/HagOrder.java

@@ -0,0 +1,60 @@
+package cn.efunbox.audio.entity.hag;
+
+import lombok.Data;
+import lombok.ToString;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * HagOrder
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+@ToString
+@Entity
+@Table(name = "hag_order")
+@DynamicInsert
+@DynamicUpdate
+public class HagOrder implements Serializable {
+
+    @Id
+    private String id;
+
+    @Column(name = "device_id")
+    private String deviceId;
+
+    @Column(name = "sku_id")
+    private String skuId;
+
+    private String amount;
+
+    private String currency;
+
+    @Column(name = "order_id")
+    private String orderId;
+
+    @Column(name = "bought_time")
+    private String boughtTime;
+
+    @Column(name = "resource_type")
+    private String resourceType;
+
+    @Column(name = "content_id")
+    private String contentId;
+
+    private Integer status;
+
+    @Column(name = "gmt_created")
+    private Date gmtCreated;
+
+    @Column(name = "gmt_modified")
+    private Date gmtModified;
+
+}

+ 81 - 0
src/main/java/cn/efunbox/audio/entity/hag/HagProduct.java

@@ -0,0 +1,81 @@
+package cn.efunbox.audio.entity.hag;
+
+import lombok.Data;
+import lombok.ToString;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * HagProduct
+ * Created by xusq on 2019/12/25.
+ */
+
+@Data
+@ToString
+@Entity
+@Table(name = "hag_product")
+@DynamicInsert
+@DynamicUpdate
+public class HagProduct implements Serializable {
+
+    @Id
+    private String id;
+
+    @Column(name = "ability_id")
+    private String abilityId;
+
+    @Column(name = "sku_name")
+    private String skuName;
+
+    private String description;
+
+    @Column(name = "sku_type")
+    private String skuType;
+
+    @Column(name = "right_controller")
+    private String rightController;
+
+    @Column(name = "price_controller")
+    private String priceController;
+
+    @Column(name = "sku_release_state")
+    private String skuReleaseState;
+
+    @Column(name = "price_group_description")
+    private String priceGroupDescription;
+
+    private String promotion;
+
+    private String currency;
+
+    @Column(name = "original_amount")
+    private String originalAmount;
+
+    private String amount;
+
+    @Column(name = "begin_time")
+    private String beginTime;
+
+    @Column(name = "end_time")
+    private String endTime;
+
+    @Column(name = "resource_type")
+    private String resourceType;
+
+    @Column(name = "album_id")
+    private String albumId;
+
+    @Column(name = "gmt_created")
+    private Date gmtCreated;
+
+    @Column(name = "gmt_modified")
+    private Date gmtModified;
+
+}

+ 3 - 3
src/main/java/cn/efunbox/audio/impl/ChannelServiceImpl.java

@@ -40,9 +40,9 @@ public class ChannelServiceImpl implements ChannelService {
     }
 
     @Override
-    public List<Channel> SearchById(Long id){
-        List<Channel> list = channelRepo.findById(id);
-        return list;
+    public Channel SearchById(Long id){
+        Channel channel = channelRepo.findOne(id);
+        return channel;
     }
 
     @Override

+ 206 - 0
src/main/java/cn/efunbox/audio/impl/hag/HagContentServiceImpl.java

@@ -0,0 +1,206 @@
+package cn.efunbox.audio.impl.hag;
+
+import cn.efunbox.audio.entity.hag.HagAlbum;
+import cn.efunbox.audio.entity.hag.HagContent;
+import cn.efunbox.audio.repository.hag.HagAlbumRepository;
+import cn.efunbox.audio.repository.hag.HagContentRepository;
+import cn.efunbox.audio.service.hag.HagContentService;
+import cn.efunbox.audio.utils.DateUtil;
+import cn.efunbox.audio.utils.MD5;
+import cn.efunbox.audio.vo.hag.*;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * HagServiceImpl
+ * Created by xusq on 2019/12/25.
+ */
+@Slf4j
+@Service
+public class HagContentServiceImpl implements HagContentService {
+
+    @Value("${hag.oss.audio.prefix}")
+    private String hagAudioPrefix;
+
+    @Value("${hag.cdn.secret.sign.key}")
+    private String cdnSecret;
+
+    @Autowired
+    private HagContentRepository hagContentRepository;
+    @Autowired
+    private HagAlbumRepository hagAlbumRepository;
+
+
+    @Override
+    public HagBaseResp list(HagContentReq hagContentReq) {
+
+        log.info("hag request content data param : {}",JSON.toJSONString(hagContentReq));
+        Pagination paginationReq = hagContentReq.getPagination();
+        Integer limit = paginationReq.getLimit();
+        if (Objects.isNull(limit)) {
+            limit = 10;
+        }
+        Integer start = paginationReq.getStart();
+        if (Objects.isNull(start)) {
+            start = 0;
+        }
+
+        HagContentResp hagContentResp = new HagContentResp();
+
+        String updateTime = hagContentReq.getTimestamp();
+        if (StringUtils.isBlank(updateTime)) {
+            updateTime = "20190101000000";
+        }
+        Date date = DateUtil.strToDate(updateTime);
+        if (Objects.isNull(date)) {
+            hagContentResp.setErrorCode("400");
+            hagContentResp.setErrorMessage("timestamp数据异常");
+            return hagContentResp;
+        }
+
+        List<HagAlbum> hagAlbums = hagAlbumRepository.findByGmtModifiedAfter(date);
+
+        List<ContentVO> contentVOList = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(hagAlbums)) {
+            hagAlbums.forEach(album -> contentVOList.add(AlbumConverter.albumToContentVO(album)));
+        }
+
+        List<HagContent> hagContents = hagContentRepository.findByGmtModifiedAfter(date);
+        if (!CollectionUtils.isEmpty(hagContents)) {
+            hagContents.forEach(content -> contentVOList.add(ContentConverter.contentToContentVO(content)));
+        }
+
+
+        int size = contentVOList.size();
+        if (size < start) {
+            return hagContentResp;
+        }
+        int toIndex = start + limit;
+        if (size < toIndex) {
+            toIndex = size;
+        }
+        List<ContentVO> contentVOResp = contentVOList.subList(start, toIndex);
+        Pagination pagination = new Pagination();
+        pagination.setNext(toIndex + "");
+        pagination.setTotal(Long.valueOf(contentVOList.size()));
+
+
+        hagContentResp.setSource(DateUtil.getDateStr() +"-同步数据");
+        hagContentResp.setPagination(pagination);
+
+        hagContentResp.setContentItems(contentVOResp);
+        return hagContentResp;
+    }
+
+    @Override
+    public HagSkillResp getResUrl(HagSkillReq skillReq) {
+
+
+//        log.info("HAG find resource url param : {}", JSON.toJSONString(skillReq));
+        HagSkillReq.Endpoint endpoint = skillReq.getEndpoint();
+        if (Objects.isNull(endpoint)) {
+            return fillFailResp("400","参数错误");
+        }
+
+        HagSkillReq.Endpoint.Device device = endpoint.getDevice();
+        if (Objects.isNull(device)) {
+            return fillFailResp("400","device信息为空");
+        }
+        String deviceId = device.getDeviceId();
+        if (StringUtils.isBlank(deviceId)) {
+            return fillFailResp("400","deviceId为空");
+        }
+        HagSkillReq.HagInquire inquire = skillReq.getInquire();
+        if (Objects.isNull(inquire.getIntent())) {
+            return fillFailResp("400","intent为空");
+        }
+        HagSkillReq.HagInquire.Intent.Slots slots = inquire.getIntent().getSlots();
+        if (Objects.isNull(slots)) {
+            return fillFailResp("400","slots为空");
+        }
+       /* HagSkillReq.HagInquire.Intent.Slots.ContentCode albumCode = slots.getAlbumCode();
+        if (Objects.isNull(albumCode)) {
+            return fillFailResp("400","albumCode为空");
+        }*/
+        HagSkillReq.HagInquire.Intent.Slots.ContentCode contentCode = slots.getContentCode();
+        if (Objects.isNull(contentCode)) {
+            return fillFailResp("400","contentCode为空");
+        }
+        List<HagSkillReq.HagInquire.Intent.Slots.ContentCode.Value> values = contentCode.getValues();
+        if (CollectionUtils.isEmpty(values)) {
+            return fillFailResp("400","contentCode为空");
+        }
+
+        String real = values.get(0).getReal();
+        HagContent hagContent = hagContentRepository.find(real);
+        if (Objects.isNull(hagContent)) {
+            return fillFailResp("404","媒资数据未找到");
+        }
+
+        return fillSuccessResp(hagContent.getUrl());
+    }
+
+    private HagSkillResp fillFailResp(String errorCode,String errorMessage) {
+        HagSkillResp hagSkillResp = new HagSkillResp();
+        hagSkillResp.setErrorCode(errorCode);
+        hagSkillResp.setErrorMessage(errorMessage);
+        hagSkillResp.setVersion("1.0.0");
+        HagSkillResp.Reply<HagSkillReq.HagInquire.Intent> reply = new HagSkillResp.Reply();
+        reply.setIsEndSession(Boolean.TRUE);
+        HagSkillResp.Reply.Command command = new HagSkillResp.Reply.Command();
+        command.setNamespace("AudioPlayer");
+        command.setName("Play");
+        AudioUrl audioUrl = new AudioUrl();
+        audioUrl.setUrl("");
+        command.setBody(audioUrl);
+        reply.setCommands(Arrays.asList(command));
+        hagSkillResp.setReply(reply);
+        return hagSkillResp;
+    }
+
+    private HagSkillResp fillSuccessResp(String url) {
+        HagSkillResp hagSkillResp = new HagSkillResp();
+        hagSkillResp.setErrorCode("0");
+        hagSkillResp.setErrorMessage("OK");
+        hagSkillResp.setVersion("1.0.0");
+        HagSkillResp.Reply<Map<String,List>> reply = new HagSkillResp.Reply();
+        reply.setIsEndSession(Boolean.TRUE);
+        HagSkillResp.Reply.Command command = new HagSkillResp.Reply.Command();
+        command.setNamespace("AudioPlayer");
+        command.setName("Play");
+        AudioUrl audioUrl = new AudioUrl();
+        audioUrl.setUrl(hagAudioPrefix + md5PlayUrl(cdnSecret, url));
+        Map<String,List<AudioUrl>> map = new HashMap<>();
+        map.put("audioItemList",Arrays.asList(audioUrl));
+        Map<String,Map<String,List<AudioUrl>>> bodyMap = new HashMap<>();
+        bodyMap.put("templateContent",map);
+        command.setBody(bodyMap);
+        reply.setCommands(Arrays.asList(command));
+        hagSkillResp.setReply(reply);
+        return hagSkillResp;
+    }
+
+
+    /*private String md5PlayUrl(String key, String url){
+        SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMddHHmm");
+        long endTime = System.currentTimeMillis() + (3 * 60 * 1000L);
+        Date date = new Date(endTime);
+        String time = sdf.format(date);
+        String md5Url = MD5.MD5Encode(key + time + url);
+        return "/" + time + "/" + md5Url + url;
+    }*/
+
+    private String md5PlayUrl(String key, String url){
+            long time =  System.currentTimeMillis() / 1000;
+            String md5Url = MD5.MD5Encode(key  + url + time);
+            return "/"+  md5Url + "/" + time + url;
+    }
+}

+ 132 - 0
src/main/java/cn/efunbox/audio/impl/hag/HagOrderServiceImpl.java

@@ -0,0 +1,132 @@
+package cn.efunbox.audio.impl.hag;
+
+import cn.efunbox.audio.entity.hag.HagOrder;
+import cn.efunbox.audio.repository.hag.HagOrderRepository;
+import cn.efunbox.audio.service.hag.HagOrderService;
+import cn.efunbox.audio.vo.hag.HagSkillReq;
+import cn.efunbox.audio.vo.hag.HagSkillResp;
+import cn.efunbox.audio.vo.hag.OrderSyncResult;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+
+/**
+ * HagOrderServiceImpl
+ * Created by xusq on 2019/12/25.
+ */
+@Slf4j
+@Service
+public class HagOrderServiceImpl implements HagOrderService {
+
+    @Autowired
+    private HagOrderRepository hagOrderRepository;
+
+    @Override
+    public HagSkillResp save(HagSkillReq skillReq) {
+        log.info("HAG sync order param : {}", JSON.toJSONString(skillReq));
+        HagSkillReq.Endpoint endpoint = skillReq.getEndpoint();
+        if (Objects.isNull(endpoint)) {
+            return fillFailResp("400","参数错误");
+        }
+
+        HagSkillReq.Endpoint.Device device = endpoint.getDevice();
+        if (Objects.isNull(device)) {
+            return fillFailResp("400","device信息为空");
+        }
+        String deviceId = device.getDeviceId();
+        if (StringUtils.isBlank(deviceId)) {
+            return fillFailResp("400","deviceId为空");
+        }
+
+        HagSkillReq.HagInquire inquire = skillReq.getInquire();
+        if (Objects.isNull(inquire) || Objects.isNull(inquire.getOrderRight())) {
+            return fillFailResp("400","订单参数信息为空");
+        }
+
+        HagSkillReq.HagInquire.OrderRight orderRight = inquire.getOrderRight();
+        List<HagSkillReq.HagInquire.OrderRight.ResourceRight> resourceRights = orderRight.getResourceRights();
+        if (CollectionUtils.isEmpty(resourceRights)) {
+            return fillFailResp("400","resourceRights为空");
+        }
+
+        String hagOrderId = orderRight.getOrderId();
+        if (StringUtils.isBlank(hagOrderId)) {
+            return fillFailResp("400","orderId为空");
+        }
+
+        HagOrder hagOrder = hagOrderRepository.findByOrderId(hagOrderId);
+        if (Objects.nonNull(hagOrder)) {
+            return fillSuccessResp(hagOrder.getId());
+        }
+
+        hagOrder = convertOrderObj(orderRight,resourceRights,deviceId);
+        if (Objects.isNull(hagOrder)) {
+            return  fillFailResp("500","订单同步失败");
+        }
+
+
+        return fillSuccessResp(hagOrder.getId());
+    }
+
+    private HagOrder convertOrderObj(HagSkillReq.HagInquire.OrderRight orderRight, List<HagSkillReq.HagInquire.OrderRight.ResourceRight> resourceRights, String deviceId) {
+
+        HagOrder hagOrder = new HagOrder();
+        hagOrder.setSkuId(orderRight.getSkuId());
+        hagOrder.setDeviceId(deviceId);
+        hagOrder.setOrderId(orderRight.getOrderId());
+        hagOrder.setAmount(orderRight.getAmount());
+        hagOrder.setBoughtTime(orderRight.getBoughtTime());
+        hagOrder.setCurrency(orderRight.getCurrency());
+        String resourceId = resourceRights.get(0).getResourceId();
+        hagOrder.setContentId(resourceId);
+
+        hagOrder  = hagOrderRepository.save(hagOrder);
+
+        return hagOrder;
+    }
+
+    private HagSkillResp fillSuccessResp(String orderId) {
+        HagSkillResp hagSkillResp = new HagSkillResp();
+        hagSkillResp.setVersion("1.0.0");
+        HagSkillResp.Reply<Map> reply = new HagSkillResp.Reply();
+        reply.setIsEndSession(Boolean.TRUE);
+        HagSkillResp.Reply.Command command = new HagSkillResp.Reply.Command();
+        command.setNamespace("Charge");
+        command.setName("SyncOrderRightCommandBody");
+        OrderSyncResult orderSyncResult = new OrderSyncResult();
+        orderSyncResult.setResultCode("SUCCESS");
+        orderSyncResult.setCpOrderId(orderId);
+        Map<String,OrderSyncResult> syncResultMap = new HashMap<>();
+        syncResultMap.put("syncResult",orderSyncResult);
+        command.setBody(syncResultMap);
+        reply.setCommands(Arrays.asList(command));
+        hagSkillResp.setReply(reply);
+        return hagSkillResp;
+    }
+
+    private HagSkillResp fillFailResp(String errorCode,String errorMessage) {
+        HagSkillResp hagSkillResp = new HagSkillResp();
+        hagSkillResp.setErrorCode(errorCode);
+        hagSkillResp.setErrorMessage(errorMessage);
+        hagSkillResp.setVersion("1.0.0");
+        HagSkillResp.Reply<OrderSyncResult> reply = new HagSkillResp.Reply();
+        reply.setIsEndSession(Boolean.TRUE);
+        HagSkillResp.Reply.Command command = new HagSkillResp.Reply.Command();
+        command.setNamespace("Charge");
+        command.setName("SyncOrderRightCommandBody");
+        OrderSyncResult orderSyncResult = new OrderSyncResult();
+        orderSyncResult.setResultCode("FAIL");
+        orderSyncResult.setCpOrderId("");
+        Map<String,OrderSyncResult> syncResultMap = new HashMap<>();
+        syncResultMap.put("syncResult",orderSyncResult);
+        command.setBody(syncResultMap);
+        reply.setCommands(Arrays.asList(command));
+        hagSkillResp.setReply(reply);
+        return hagSkillResp;
+    }
+}

+ 83 - 0
src/main/java/cn/efunbox/audio/impl/hag/HagProductServiceImpl.java

@@ -0,0 +1,83 @@
+package cn.efunbox.audio.impl.hag;
+
+import cn.efunbox.audio.entity.hag.HagProduct;
+import cn.efunbox.audio.repository.hag.HagProductRepository;
+import cn.efunbox.audio.service.hag.HagProductService;
+import cn.efunbox.audio.utils.DateUtil;
+import cn.efunbox.audio.vo.hag.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * HagProductServiceImpl
+ * Created by xusq on 2019/12/25.
+ */
+@Service
+public class HagProductServiceImpl implements HagProductService {
+
+    @Autowired
+    private HagProductRepository hagProductRepository;
+
+    @Override
+    public HagProductResp list(HagProductReq productReq) {
+
+        Pagination paginationReq = productReq.getPagination();
+        Integer limit = paginationReq.getLimit();
+        if (Objects.isNull(limit)) {
+            limit = 10;
+        }
+        Integer start = paginationReq.getStart();
+        if (Objects.isNull(start)) {
+            start = 0;
+        }
+        HagProductResp hagProductResp = new HagProductResp();
+        String updateTime = productReq.getUpdateTime();
+        Date date = DateUtil.strToDate(updateTime);
+        if (Objects.isNull(date)) {
+            hagProductResp.setErrorCode("400");
+            hagProductResp.setErrorMessage("timestamp数据异常");
+            return hagProductResp;
+        }
+
+
+        long count = hagProductRepository.countByGmtModifiedAfter(date);
+
+        Pagination pagination = new Pagination();
+        pagination.setTotal(count);
+
+        if (count == 0) {
+            pagination.setNext("0");
+            hagProductResp.setPagination(pagination);
+            hagProductResp.setContentItems(new ArrayList<>());
+            return hagProductResp;
+        }
+
+        pagination.setNext(start + limit + "");
+
+        List<HagProduct> hagProducts = hagProductRepository.findByGmtModifiedAfterPage(date,start,limit);
+
+
+
+        List<String> albumIds = new ArrayList<>();
+
+        hagProducts.forEach(product -> albumIds.add(product.getAlbumId()));
+
+        List<ProductVO> productVOList = new ArrayList<>();
+
+        if (!CollectionUtils.isEmpty(hagProducts)) {
+            hagProducts.forEach(product ->
+                productVOList.add(ProductConverter.productToProductVO(product))
+            );
+        }
+        hagProductResp.setPagination(pagination);
+        hagProductResp.setContentItems(productVOList);
+
+        return hagProductResp;
+    }
+}

+ 5 - 4
src/main/java/cn/efunbox/audio/repository/base/ProjectSimpleJpaRepository.java

@@ -6,6 +6,7 @@
  */
 package cn.efunbox.audio.repository.base;
 
+import cn.efunbox.audio.utils.SnowflakeIdUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.data.domain.Sort;
@@ -327,7 +328,7 @@ public class ProjectSimpleJpaRepository<E, ID extends Serializable> extends Simp
 	public <S extends E> S save(S entity) {
 
 		if (entityInformation.isNew(entity)) {
-//			setSnowflakeIdId(entity);
+			setSnowflakeIdId(entity);
 			entityManager.persist(entity);
 			return entity;
 		} else {
@@ -556,7 +557,7 @@ public class ProjectSimpleJpaRepository<E, ID extends Serializable> extends Simp
 	}
 
 
-	/*protected void setSnowflakeIdId(E entity){
+	protected void setSnowflakeIdId(E entity){
 		try {
 			Field field = ReflectionUtils.findField(entity.getClass(),entityInformation.getIdAttribute().getName());
 			if(entityInformation.getIdAttribute().getType().getJavaType().getName().equals("java.lang.Long")){
@@ -565,10 +566,10 @@ public class ProjectSimpleJpaRepository<E, ID extends Serializable> extends Simp
 			}else if(entityInformation.getIdAttribute().getType().getJavaType().getName().equals("java.lang.String")) {
 				logger.debug(" uuid  entityInformation.getIdAttribute().getName() ={}",entityInformation.getIdAttribute().getName());
 				ReflectionUtils.makeAccessible(field);
-				ReflectionUtils.setField(field, entity, UUID.randomUUID().toString());
+				ReflectionUtils.setField(field, entity, SnowflakeIdUtil.getSnowflakeIdUtil().nextCode());
 			}
 		}catch (Exception e){
 			logger.error("Reflect set id 出错 mag ={}",e.getMessage(),e);
 		}
-	}*/
+	}
 }

+ 15 - 0
src/main/java/cn/efunbox/audio/repository/hag/HagAlbumRepository.java

@@ -0,0 +1,15 @@
+package cn.efunbox.audio.repository.hag;
+
+import cn.efunbox.audio.entity.hag.HagAlbum;
+import cn.efunbox.audio.repository.base.BasicRepository;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * HagAlbumRepository
+ * Created by xusq on 2019/12/25.
+ */
+public interface HagAlbumRepository extends BasicRepository<HagAlbum> {
+    List<HagAlbum> findByGmtModifiedAfter(Date date);
+}

+ 17 - 0
src/main/java/cn/efunbox/audio/repository/hag/HagContentRepository.java

@@ -0,0 +1,17 @@
+package cn.efunbox.audio.repository.hag;
+
+import cn.efunbox.audio.entity.hag.HagContent;
+import cn.efunbox.audio.repository.base.BasicRepository;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * HagContentRepository
+ * Created by xusq on 2019/12/25.
+ */
+public interface HagContentRepository extends BasicRepository<HagContent> {
+    List<HagContent> findByAlbumIdIn(List<String> albumIds);
+
+    List<HagContent> findByGmtModifiedAfter(Date date);
+}

+ 12 - 0
src/main/java/cn/efunbox/audio/repository/hag/HagOrderRepository.java

@@ -0,0 +1,12 @@
+package cn.efunbox.audio.repository.hag;
+
+import cn.efunbox.audio.entity.hag.HagOrder;
+import cn.efunbox.audio.repository.base.BasicRepository;
+
+/**
+ * HagOrderRepository
+ * Created by xusq on 2019/12/25.
+ */
+public interface HagOrderRepository extends BasicRepository<HagOrder> {
+    HagOrder findByOrderId(String hagOrderId);
+}

+ 22 - 0
src/main/java/cn/efunbox/audio/repository/hag/HagProductRepository.java

@@ -0,0 +1,22 @@
+package cn.efunbox.audio.repository.hag;
+
+import cn.efunbox.audio.entity.hag.HagProduct;
+import cn.efunbox.audio.repository.base.BasicRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * HagProductRepository
+ * Created by xusq on 2019/12/25.
+ */
+public interface HagProductRepository extends BasicRepository<HagProduct> {
+
+    List<HagProduct> findByGmtModifiedAfter(Date date);
+
+    long countByGmtModifiedAfter(Date date);
+
+    @Query(value = "select * from hag_product where gmt_modified > ?1 order by gmt_modified LIMIT ?2,?3",nativeQuery = true)
+    List<HagProduct> findByGmtModifiedAfterPage(Date date, Integer start, Integer limit);
+}

+ 1 - 1
src/main/java/cn/efunbox/audio/service/ChannelService.java

@@ -15,7 +15,7 @@ public interface ChannelService {
 
     public Page<Channel> SearchAll(int page, int size);
 
-    public List<Channel> SearchById(Long id);
+    public Channel SearchById(Long id);
 
     public List<Channel> SearchByIdFather(Long idFather);
 

+ 16 - 0
src/main/java/cn/efunbox/audio/service/hag/HagContentService.java

@@ -0,0 +1,16 @@
+package cn.efunbox.audio.service.hag;
+
+import cn.efunbox.audio.vo.hag.HagContentReq;
+import cn.efunbox.audio.vo.hag.HagBaseResp;
+import cn.efunbox.audio.vo.hag.HagSkillReq;
+import cn.efunbox.audio.vo.hag.HagSkillResp;
+
+/**
+ * HagContentService
+ * Created by xusq on 2019/12/25.
+ */
+public interface HagContentService {
+    HagBaseResp list(HagContentReq hagContentReq);
+
+    HagSkillResp getResUrl(HagSkillReq skillReq);
+}

+ 12 - 0
src/main/java/cn/efunbox/audio/service/hag/HagOrderService.java

@@ -0,0 +1,12 @@
+package cn.efunbox.audio.service.hag;
+
+import cn.efunbox.audio.vo.hag.HagSkillReq;
+import cn.efunbox.audio.vo.hag.HagSkillResp;
+
+/**
+ * HagOrderService
+ * Created by xusq on 2019/12/25.
+ */
+public interface HagOrderService {
+    HagSkillResp save(HagSkillReq skillReq);
+}

+ 13 - 0
src/main/java/cn/efunbox/audio/service/hag/HagProductService.java

@@ -0,0 +1,13 @@
+package cn.efunbox.audio.service.hag;
+
+import cn.efunbox.audio.vo.hag.HagProductReq;
+import cn.efunbox.audio.vo.hag.HagProductResp;
+
+/**
+ * HagProductService
+ * Created by xusq on 2019/12/25.
+ */
+public interface HagProductService {
+
+    HagProductResp list(HagProductReq productReq);
+}

+ 22 - 0
src/main/java/cn/efunbox/audio/utils/BaseConstant.java

@@ -1,7 +1,29 @@
 package cn.efunbox.audio.utils;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
 /**
  * 常量类
  */
 public class BaseConstant {
+
+    public static final String HAG_SYNC_ORDER_TYPE = "Charge.SyncOrderRightRequest";
+
+
+    public static void main(String[] args) {
+
+        String md5PlayUrl = md5PlayUrl("efunbox1...", "/audio/022/02202002/02202002006.mp3");
+        System.out.println(md5PlayUrl);
+    }
+
+    private static String md5PlayUrl(String key, String url){
+//        SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMddHHmm");
+//        long endTime = System.currentTimeMillis() + (3 * 60 * 1000L);
+//        Date date = new Date(endTime);
+//        String time = sdf.format(new Date());
+        long time =  System.currentTimeMillis() / 1000;
+        String md5Url = MD5.MD5Encode(key  + url + time);
+        return "/"+  md5Url + "/" + time + url;
+    }
 }

+ 16 - 3
src/main/java/cn/efunbox/audio/utils/DateUtil.java

@@ -32,6 +32,15 @@ public class DateUtil {
         return dateFormat(new Date(), "yyyy-MM-dd HH:mm:ss");
     }
 
+    /**
+     * 将日期转换为字符串
+     *
+     * @return
+     */
+    public static String dateFormatStr(Date date) {
+        return dateFormat(date, "yyyyMMddHHmmssSSS");
+    }
+
     public static String dateFormat(String pattern) {
         return dateFormat(new Date(), pattern);
     }
@@ -48,9 +57,13 @@ public class DateUtil {
      * @return
      * @throws ParseException
      */
-    public static Date StrToDate(String source) throws ParseException {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        return sdf.parse(source);
+    public static Date strToDate(String source) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        try {
+            return sdf.parse(source);
+        } catch (ParseException e) {
+            return null;
+        }
     }
 
     public static Date StrToDate(String source, String pattern) throws ParseException {

+ 78 - 3
src/main/java/cn/efunbox/audio/utils/Encrypt.java

@@ -1,10 +1,15 @@
 package cn.efunbox.audio.utils;
 
+import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.codec.binary.Hex;
 import org.apache.commons.lang.StringUtils;
 
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
 import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.*;
@@ -17,6 +22,13 @@ public class Encrypt {
 
     public static final String SIGN = "sign";
 
+    private static Base64 base64;
+
+    static {
+        base64 = new Base64();
+    }
+
+
     public static String createSHA256Sign(Map<String, String> paramMap, String signKey) {
 
         List<String> sortedKeys = new ArrayList<String>();
@@ -71,6 +83,7 @@ public class Encrypt {
         } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
         }
+        log.info("SHA256 data : {} , sign : {}",str,encdeStr);
         return encdeStr;
     }
     //---------
@@ -113,12 +126,74 @@ public class Encrypt {
         return stringBuffer.toString();
     }
 
+    public static String createHMACSHA256(Map<String, String> paramMap, String signKey) {
+
+        List<String> sortedKeys = new ArrayList<>();
+        for (Map.Entry<String, String> entry : paramMap.entrySet()) {
+            if (SIGN.equals(entry.getKey())) {
+                continue;
+            }
+
+            sortedKeys.add(entry.getKey());
+        }
+
+        if (sortedKeys.size() == 0) {
+            // 没有参数
+            return "";
+        }
+
+        Collections.sort(sortedKeys);
+
+        StringBuffer buff = new StringBuffer("");
+        for (String key : sortedKeys) {
+            String val = paramMap.get(key);
+            if (StringUtils.isBlank(val)) {
+                continue;
+            }
+
+            buff.append(key).append("=").append(val).append("&");
+        }
+
+        buff.deleteCharAt(buff.length() - 1);
+
+        try {
+            return HMACSHA256(buff.toString(),signKey);
+        } catch (Exception e) {
+            throw new RuntimeException("签名错误");
+        }
+    }
+
+    public static String HMACSHA256(String data, String key) throws Exception {
+
+        Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
+
+        SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
+
+        sha256_HMAC.init(secret_key);
+
+        byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
+
+        String encodeSign = base64.encodeBase64String(array);
+        log.info("HMAC SHA256 data : {} , sign : {}",data,encodeSign);
+        return encodeSign;
+
+    }
+
 
     public static void main(String[] args) {
+
+        //idChannel=100103&idDevice=10.31.49.16&ts=159559185715
         Map<String,String> param = new HashMap<>();
-        param.put("idChannel","1000");
-        param.put("idDevice","acf76362e77441fd8329384345d54156");
-        String sign = Encrypt.createSHA256Sign(param,"IhOTiTyMLDNNLFuP");
+        param.put("idChannel","100103");
+        param.put("idDevice","10.31.49.16");
+
+//        String sign1 = Encrypt.createSHA256Sign(param, "IhOTiTyMLDNNLFuP");
+//        log.info(sign1);
+
+        param.put("x-ts","159591203325");
+        log.info(JSONObject.toJSONString(param));
+        String sign = Encrypt.createHMACSHA256(param,"IhOTiTyMLDNNLFuP");
         log.info(sign);
+
     }
 }

+ 92 - 0
src/main/java/cn/efunbox/audio/utils/MD5.java

@@ -0,0 +1,92 @@
+package cn.efunbox.audio.utils;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class MD5 {
+	public MD5() {
+	}
+
+	public static final String byte2hexString(byte[] bytes) {
+		StringBuffer buf = new StringBuffer(bytes.length * 2);
+		for (int i = 0; i < bytes.length; i++) {
+			if (((int) bytes[i] & 0xff) < 0x10) {
+				buf.append("0");
+			}
+			buf.append(Long.toString((int) bytes[i] & 0xff, 16));
+		}
+		return buf.toString();
+	}
+
+	/**
+	 * md5加密
+	 * @param sourceString
+	 * @return
+	 */
+	public static String MD5Encode(String sourceString) {
+		String resultString = null;
+		try {
+			resultString = new String(sourceString);
+			MessageDigest md = MessageDigest.getInstance("MD5");
+			resultString = byte2hexString(md.digest(resultString.getBytes()));
+		} catch (Exception ex) {
+		}
+		return resultString;
+	}
+	
+	 public static String getMD5Str(String str) {  
+	        MessageDigest messageDigest = null;  
+	  
+	        try {  
+	            messageDigest = MessageDigest.getInstance("MD5");  
+	  
+	            messageDigest.reset();  
+	  
+	            messageDigest.update(str.getBytes("UTF-8"));  
+	        } catch (NoSuchAlgorithmException e) {  
+	            System.out.println("NoSuchAlgorithmException caught!");  
+	            System.exit(-1);  
+	        } catch (UnsupportedEncodingException e) {  
+	            e.printStackTrace();  
+	        }  
+	  
+	        byte[] byteArray = messageDigest.digest();  
+	  
+	        StringBuffer md5StrBuff = new StringBuffer();  
+	  
+	        for (int i = 0; i < byteArray.length; i++) {              
+	            if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)  
+	                md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));  
+	            else  
+	                md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));  
+	        }  
+	  
+	        return md5StrBuff.toString();  
+	    }
+
+	public static void main(String[] args) throws UnsupportedEncodingException {
+
+
+
+	  /*  String data = "eyJ0aW1lIjoxNTMwODQ1MTI1LCJtc2dfaWQiOiI2MWJiYzExMTI2NWY0NmM4OTg3OWM2NWQxYmZkZGY1OSIsImVycl9jb2RlIjoiMjAwIiwiZXJyX21zZyI6Ik9LIn0=";
+	    String sign = "VB5Ybhu8MBmTMtyzP2J/rMmbmXy87lCkOA7RCDcQE+47IwG+xL5Tx8PYU+1sRBdpK6I65AaYev434fb1+w3kzcMUI0NOjHMnxNGZtDgEMKMQWpoi9njqDpCcXmrO2dDkON0ysF0MN1mD7kg9yz0oFQ4mp3ues/Uk+NzAXU29cbk=";
+
+	    String publicKey  = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7BTRi35TsWf8lbsR0z5wpKrHx8CsveKvUk51G2bPlPV9XA9JXcMCGmN6YqihoAwMhXnda4FO78KqBpMja6QqucqQjmbJ+quGc11D7yL1+4+l4CZ8ChPXNvl/R2kZPDQhDg5YiTddL8TBSWSvGbQSTFOfIZZllKKct3InCzBG5HQIDAQAB";
+
+        boolean b = RSASignature.verifySignByPublicKey(data, sign, publicKey, false);
+        System.out.println(b);
+
+        String jsonData = new String(Base64.decodeBase64(data), "utf-8");
+        NotifyResponse msgData = JsonBinder.buildNonNullBinder().fromJson(jsonData, NotifyResponse.class);
+        System.out.println(JSON.toJSONString(msgData));
+
+        String s = JsonBinder.buildNonNullBinder().toJson(msgData);
+        System.out.println(s);*/
+
+		String md5Encode = MD5Encode("123456");
+		System.out.println(md5Encode);
+
+	}
+
+}

+ 64 - 0
src/main/java/cn/efunbox/audio/vo/hag/AlbumConverter.java

@@ -0,0 +1,64 @@
+package cn.efunbox.audio.vo.hag;
+
+import cn.efunbox.audio.entity.hag.HagAlbum;
+
+import java.util.Objects;
+
+/**
+ * AlbumConverter
+ * Created by xusq on 2019/12/26.
+ */
+public class AlbumConverter {
+
+    private AlbumConverter(){}
+
+    public static ContentVO albumToContentVO(HagAlbum album){
+
+        if (Objects.isNull(album)) {
+            return null;
+        }
+
+        ContentVO contentVO = new ContentVO();
+
+        contentVO.setType("ALBUM");
+        ContentVO.Payload payload = new ContentVO.Payload();
+        payload.setAlbumCode(album.getId());
+        payload.setAlbumName(album.getAlbumName());
+        payload.setArtistNames(album.getArtistName());
+        payload.setChapter(album.getChapter());
+        payload.setChargeType(album.getChargeType());
+        payload.setRelateCpSkuId(album.getRelateCpSkuId());
+        payload.setCrowd(album.getCrowd());
+        payload.setFirstClass(album.getFirstClass());
+        payload.setSecondClass(album.getSecondClass());
+        payload.setThirdClass(album.getThirdClass());
+        payload.setSongNum(album.getSongNum());
+        payload.setStatus(album.getStatus());
+
+        ContentVO.Payload.AlbumIconVO albumIconVO = new ContentVO.Payload.AlbumIconVO();
+
+        ContentVO.Payload.AlbumIconVO.AlbumIconImageVO largeImageVO = new ContentVO.Payload.AlbumIconVO.AlbumIconImageVO();
+        largeImageVO.setHeightPixels(album.getHeightPixels());
+        largeImageVO.setWidthPixels(album.getWidthPixels());
+        largeImageVO.setUrl(album.getLargeIcon());
+        albumIconVO.setLarge(largeImageVO);
+
+        ContentVO.Payload.AlbumIconVO.AlbumIconImageVO mediumImageVO = new ContentVO.Payload.AlbumIconVO.AlbumIconImageVO();
+        mediumImageVO.setHeightPixels(album.getHeightPixels());
+        mediumImageVO.setWidthPixels(album.getWidthPixels());
+        mediumImageVO.setUrl(album.getMediumIcon());
+        albumIconVO.setMedium(mediumImageVO);
+
+        ContentVO.Payload.AlbumIconVO.AlbumIconImageVO smallImageVO = new ContentVO.Payload.AlbumIconVO.AlbumIconImageVO();
+        smallImageVO.setHeightPixels(album.getHeightPixels());
+        smallImageVO.setWidthPixels(album.getWidthPixels());
+        smallImageVO.setUrl(album.getSmallIcon());
+        albumIconVO.setSmall(smallImageVO);
+
+        payload.setIcon(albumIconVO);
+
+        contentVO.setPayload(payload);
+
+        return contentVO;
+    }
+}

+ 29 - 0
src/main/java/cn/efunbox/audio/vo/hag/AudioUrl.java

@@ -0,0 +1,29 @@
+package cn.efunbox.audio.vo.hag;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * AudioUrl
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+public class AudioUrl implements Serializable {
+
+    private Stream stream;
+
+    public AudioUrl() {
+        this.stream = new Stream();
+    }
+
+    @Data
+    class Stream implements  Serializable {
+        private String url;
+    }
+
+    public void setUrl(String url) {
+        this.stream.setUrl(url);
+    }
+
+}

+ 42 - 0
src/main/java/cn/efunbox/audio/vo/hag/ContentConverter.java

@@ -0,0 +1,42 @@
+package cn.efunbox.audio.vo.hag;
+
+import cn.efunbox.audio.entity.hag.HagContent;
+
+import java.util.Objects;
+
+/**
+ * AlbumConverter
+ * Created by xusq on 2019/12/26.
+ */
+public class ContentConverter {
+
+    private ContentConverter(){}
+
+    public static ContentVO contentToContentVO(HagContent content){
+
+        if (Objects.isNull(content)) {
+            return null;
+        }
+
+        ContentVO contentVO = new ContentVO();
+
+        contentVO.setType("CONTENT");
+        ContentVO.Payload payload = new ContentVO.Payload();
+        payload.setAlbumCode(content.getAlbumId());
+        payload.setChapter(content.getChapter());
+        payload.setContentCode(content.getId());
+        payload.setContentName(content.getContentName());
+        payload.setCrowd(content.getCrowd());
+        payload.setFirstClass(content.getFirstClass());
+        payload.setSecondClass(content.getSecondClass());
+        payload.setThirdClass(content.getThirdClass());
+        payload.setFreeFlag(content.getFreeFlag());
+        payload.setTimeLength(content.getTimeLength());
+        payload.setStatus(content.getStatus());
+        payload.setLanguage(content.getLanguage());
+
+        contentVO.setPayload(payload);
+
+        return contentVO;
+    }
+}

+ 57 - 0
src/main/java/cn/efunbox/audio/vo/hag/ContentVO.java

@@ -0,0 +1,57 @@
+package cn.efunbox.audio.vo.hag;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * ContentVO
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+public class ContentVO implements Serializable {
+
+    private Payload payload;
+    private String type;
+
+    @Data
+    public static final class Payload {
+
+        private String albumCode;
+        private String albumName;
+        private String artistNames;
+        private Integer chapter;
+        private Integer chargeType;
+        private String relateCpSkuId;
+        private String crowd;
+        private String firstClass;
+        private String secondClass;
+        private String thirdClass;
+        private Integer songNum;
+        private Integer status;
+        private AlbumIconVO icon;
+        private String contentCode;
+        private String contentName;
+        private String language;
+        private Integer freeFlag;
+        private String timeLength;
+
+        @Data
+        public static final class AlbumIconVO {
+
+            private AlbumIconImageVO large;
+            private AlbumIconImageVO medium;
+            private AlbumIconImageVO small;
+
+            @Data
+            public static final class AlbumIconImageVO {
+
+                private String heightPixels;
+                private String url;
+                private String widthPixels;
+            }
+        }
+
+
+    }
+}

+ 14 - 0
src/main/java/cn/efunbox/audio/vo/hag/HagBaseResp.java

@@ -0,0 +1,14 @@
+package cn.efunbox.audio.vo.hag;
+
+import lombok.Data;
+
+/**
+ * HagBaseResp
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+public abstract class HagBaseResp{
+
+    private String errorCode = "0";
+    private String errorMessage = "OK";
+}

+ 17 - 0
src/main/java/cn/efunbox/audio/vo/hag/HagContentReq.java

@@ -0,0 +1,17 @@
+package cn.efunbox.audio.vo.hag;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * HagContentReq
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+public class HagContentReq implements Serializable {
+
+    private Pagination pagination;
+    private String timestamp;
+    private String dataType;
+}

+ 20 - 0
src/main/java/cn/efunbox/audio/vo/hag/HagContentResp.java

@@ -0,0 +1,20 @@
+package cn.efunbox.audio.vo.hag;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * HagContentResp
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+public class HagContentResp extends HagBaseResp implements Serializable {
+
+    private String source;
+
+    private Pagination pagination;
+
+    private List<ContentVO> contentItems;
+}

+ 20 - 0
src/main/java/cn/efunbox/audio/vo/hag/HagProductReq.java

@@ -0,0 +1,20 @@
+package cn.efunbox.audio.vo.hag;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * HagProductReq
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+public class HagProductReq implements Serializable {
+
+    private String appKey;
+    private String appSecret;
+    private String ts;
+    private Pagination pagination;
+    private String updateTime;
+    private String abilityId;
+}

+ 16 - 0
src/main/java/cn/efunbox/audio/vo/hag/HagProductResp.java

@@ -0,0 +1,16 @@
+package cn.efunbox.audio.vo.hag;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * HagProductResp
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+public class HagProductResp extends HagBaseResp implements Serializable {
+    private Pagination pagination;
+    private List<ProductVO> contentItems;
+}

+ 114 - 0
src/main/java/cn/efunbox/audio/vo/hag/HagSkillReq.java

@@ -0,0 +1,114 @@
+package cn.efunbox.audio.vo.hag;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * HagSkillReq
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+public class HagSkillReq implements Serializable {
+
+    private String version;
+    private HagSession session;
+    private Endpoint endpoint;
+    private HagHeader header;
+    private HagInquire inquire;
+
+    @Data
+    public static final class HagSession {
+        private Boolean isNew;
+        private String sessionId;
+    }
+
+    @Data
+    public static final class HagHeader {
+        private String type;
+        private String timestamp;
+    }
+
+    @Data
+    public static final class Endpoint {
+        private Auth auth;
+        private Device device;
+        private String locale;
+
+        @Data
+        public static final class Auth {
+
+            private Application application;
+            @Data
+            public static final class Application {
+                private String appId;
+            }
+        }
+        @Data
+        public static final class Device {
+            private String deviceId;
+        }
+
+    }
+
+    @Data
+    public static final class HagInquire {
+
+        private OrderRight orderRight;
+        private String inquireId;
+        private Intent intent;
+
+        @Data
+        public static final class OrderRight {
+
+            private String skuId;
+
+            private String amount;
+
+            private String currency;
+
+            private String orderId;
+
+            private String boughtTime;
+
+            private List<ResourceRight> resourceRights;
+
+
+            @Data
+            public static final class ResourceRight {
+
+                private String resourceType;
+                private String resourceId;
+            }
+        }
+
+        @Data
+        public static final class Intent {
+
+            private String apiKey;
+
+            private Slots slots;
+
+            @Data
+            public static final class Slots {
+                private ContentCode albumCode;
+                private ContentCode contentCode;
+                @Data
+                public static final class ContentCode {
+                    private String name;
+                    private List<Value> values;
+
+                    @Data
+                    public static final class Value {
+                        private String real;
+                    }
+                }
+
+            }
+        }
+
+    }
+
+
+}

+ 51 - 0
src/main/java/cn/efunbox/audio/vo/hag/HagSkillResp.java

@@ -0,0 +1,51 @@
+package cn.efunbox.audio.vo.hag;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * HagSkillResp
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+public class HagSkillResp extends HagBaseResp implements Serializable {
+
+    private String version;
+
+    private Reply reply;
+
+    @Data
+    public static final class Reply<T> implements Serializable {
+
+        private Boolean isEndSession;
+        private List<Command<T>> commands;
+
+        @Data
+        public static final class Command<T> implements Serializable {
+
+            private Head head;
+            private T body;
+
+            public Command(){
+                this.head = new Head();
+            }
+
+            @Data
+            public class Head implements Serializable {
+                private String namespace;
+                private String name;
+            }
+
+            public void setNamespace(String namespace) {
+                head.setNamespace(namespace);
+            }
+
+            public void setName(String name) {
+                head.setName(name);
+            }
+        }
+
+    }
+}

+ 16 - 0
src/main/java/cn/efunbox/audio/vo/hag/OrderSyncResult.java

@@ -0,0 +1,16 @@
+package cn.efunbox.audio.vo.hag;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * OrderSyncResult
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+public class OrderSyncResult implements Serializable {
+
+    private String resultCode;
+    private String cpOrderId;
+}

+ 18 - 0
src/main/java/cn/efunbox/audio/vo/hag/Pagination.java

@@ -0,0 +1,18 @@
+package cn.efunbox.audio.vo.hag;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Pagination
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+public class Pagination implements Serializable{
+
+    private String next;
+    private Long total;
+    private Integer limit;
+    private Integer start;
+}

+ 74 - 0
src/main/java/cn/efunbox/audio/vo/hag/ProductConverter.java

@@ -0,0 +1,74 @@
+package cn.efunbox.audio.vo.hag;
+
+import cn.efunbox.audio.entity.hag.HagProduct;
+import cn.efunbox.audio.utils.DateUtil;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * AlbumConverter
+ * Created by xusq on 2019/12/26.
+ */
+public class ProductConverter {
+
+    private ProductConverter(){}
+
+    public static ProductVO productToProductVO(HagProduct product){
+
+        if (Objects.isNull(product)) {
+            return null;
+        }
+
+        ProductVO productVO = new ProductVO();
+        ProductVO.SkuInfo skuInfo = new ProductVO.SkuInfo();
+        skuInfo.setAbilityId(product.getAbilityId());
+        skuInfo.setCpSkuId(product.getId());
+        skuInfo.setSkuName(product.getSkuName());
+        skuInfo.setDescription(product.getDescription());
+        skuInfo.setSkuType(product.getSkuType());
+        skuInfo.setPriceController(product.getPriceController());
+        skuInfo.setRightController(product.getRightController());
+        skuInfo.setSkuReleaseState(product.getSkuReleaseState());
+
+        productVO.setSkuInfo(skuInfo);
+
+        ProductVO.Price productPrice = new ProductVO.Price();
+
+       if (Objects.nonNull(product.getBeginTime())) {
+          ProductVO.Price.TimeFilter timeFilter = new ProductVO.Price.TimeFilter();
+        timeFilter.setBeginTime(product.getBeginTime());
+        timeFilter.setEndTime(product.getEndTime());
+         productPrice.setTimeFilter(timeFilter);
+      }
+       
+
+        productPrice.setCurrency(product.getCurrency());
+        productPrice.setPromotion(product.getPromotion());
+        productPrice.setPriceGroupDescription(product.getPriceGroupDescription());
+        
+
+        ProductVO.Price.PriceItem priceItem = new ProductVO.Price.PriceItem();
+        priceItem.setAmount(product.getAmount());
+        priceItem.setOriginalAmount(product.getOriginalAmount());
+
+        productPrice.setPricesItems(Arrays.asList(priceItem));
+
+        productVO.setPrices(Arrays.asList(productPrice));
+
+
+        productVO.setUpdateTime(DateUtil.dateFormatStr(product.getGmtModified()));
+
+        List<ProductVO.ResourceRight> resourceRights = new ArrayList<>();
+        ProductVO.ResourceRight resourceRight = new ProductVO.ResourceRight();
+        resourceRight.setResourceType(product.getResourceType());
+        resourceRight.setResourceId(product.getAlbumId());
+        resourceRights.add(resourceRight);
+       
+        productVO.setResourceRights(resourceRights);
+
+        return productVO;
+    }
+}

+ 67 - 0
src/main/java/cn/efunbox/audio/vo/hag/ProductVO.java

@@ -0,0 +1,67 @@
+package cn.efunbox.audio.vo.hag;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * ProductVO
+ * Created by xusq on 2019/12/25.
+ */
+@Data
+public class ProductVO implements Serializable {
+
+    private SkuInfo skuInfo;
+
+    private List<Price> prices;
+
+    private List<ResourceRight> resourceRights;
+
+    private String updateTime;
+
+    @Data
+    public static final class SkuInfo {
+
+        private String abilityId;
+        private String cpSkuId;
+        private String skuName;
+        private String description;
+        private String skuType;
+        private String rightController;
+        private String priceController;
+        private String skuReleaseState;
+
+    }
+
+    @Data
+    public static final class Price {
+
+        private String priceGroupDescription;
+        private String promotion;
+        private String currency;
+        private List<PriceItem> pricesItems;
+        private TimeFilter timeFilter;
+
+        @Data
+        public static final class PriceItem  {
+
+            private String originalAmount;
+            private String amount;
+        }
+
+        @Data
+        public static final class TimeFilter {
+
+            private String beginTime;
+            private String endTime;
+        }
+    }
+
+    @Data
+    public static final class ResourceRight  {
+
+        private String resourceType;
+        private String resourceId;
+    }
+}

+ 6 - 2
src/main/resources/application-dev.properties

@@ -66,5 +66,9 @@ ali.oss.accessKeySecret=YEm1VebbntRIGmV8s8N33LQfOoC2sA
 aliyun.oss.file.prefix=audio/album/
 efunbox.oss.img.url=https://ai-admin-image.ai160.com
 
-#interface.sign.key=IhOTiTyMLDNNLFuP
-interface.sign.key=AzaSB2RR0boUz1WQ
+interface.sign.key=IhOTiTyMLDNNLFuP
+#interface.sign.key=AzaSB2RR0boUz1WQ
+
+hag.cdn.secret.sign.key=7q28cAwmcGQgOsCj
+hag.oss.audio.prefix=https://ai-hag-audio.ai160.com
+

+ 6 - 1
src/main/resources/application-prd.properties

@@ -66,4 +66,9 @@ ali.oss.accessKeySecret=YEm1VebbntRIGmV8s8N33LQfOoC2sA
 aliyun.oss.file.prefix=audio/album/
 efunbox.oss.img.url=https://ai-admin-image.ai160.com
 
-interface.sign.key=IhOTiTyMLDNNLFuP
+interface.sign.key=IhOTiTyMLDNNLFuP
+
+
+hag.cdn.secret.sign.key=7q28cAwmcGQgOsCj
+hag.oss.audio.prefix=https://ai-hag-audio.ai160.com
+