Browse Source

加入/training/<id>接口

xuchaolang 7 years ago
parent
commit
0839854e30

+ 31 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/controller/TrainingController.java

@@ -0,0 +1,31 @@
+package cn.rankin.apiweb.controller;
+
+import cn.rankin.apiweb.assist.resolver.NeedUser;
+import cn.rankin.apiweb.service.product.ProductService;
+import cn.rankin.common.utils.api.model.APIResult;
+import cn.rankin.data.api.app.vo.DeviceUserVo;
+import cn.rankin.data.api.product.entity.Training;
+import cn.rankin.data.api.product.vo.TrainingItemVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping(name = "/training")
+public class TrainingController {
+    @Autowired
+    private ProductService productService;
+
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    public APIResult<TrainingItemVo> get(@NeedUser DeviceUserVo user, @PathVariable("id") String id) {
+        String userId = user.getUid();
+        String merchantId = user.getMerchantId();
+        APIResult<TrainingItemVo> result = productService.getTraining(id, merchantId);
+        if (!result.getSuccess()) {
+            return result;
+        }
+        return result;
+    }
+}

+ 9 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/service/product/ProductClient.java

@@ -9,6 +9,7 @@ import cn.rankin.data.api.app.vo.ItemVo;
 import cn.rankin.data.api.product.entity.*;
 import cn.rankin.data.api.product.vo.CourseItemVo;
 import cn.rankin.data.api.product.vo.SupportItemVo;
+import cn.rankin.data.api.product.vo.TrainingItemVo;
 import org.springframework.cloud.netflix.feign.FeignClient;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.*;
@@ -42,6 +43,9 @@ public interface ProductClient {
     @RequestMapping(value = "/app/support/{supportId}", method = RequestMethod.GET)
     APIResult<SupportItemVo> getSupport(@PathVariable("supportId") String supportId, @RequestParam("merchantId") String merchantId);
 
+    @RequestMapping(value = "/app/training/{id}", method = RequestMethod.GET)
+    APIResult<TrainingItemVo> getTraining(@PathVariable("id") String id, @RequestParam("merchantId") String merchantId);
+
     @RequestMapping(value = "/app/lesson/{lessonId}", method = RequestMethod.GET)
     APIResult<Lesson> getLesson(@PathVariable("lessonId") String lessonId, @RequestParam("courseId") String courseId);
 
@@ -100,6 +104,11 @@ public interface ProductClient {
         }
 
         @Override
+        public APIResult getTraining(String id, String merchantId) {
+            return APIResult.error(ApiWebCode.SERVER_ERROR);
+        }
+
+        @Override
         public APIResult<List<GoodsVo>> findGoodsByIds(List<String> goodsIdList, String merchantId) {
             return APIResult.error(ApiWebCode.SERVER_ERROR);
         }

+ 5 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/service/product/ProductService.java

@@ -10,6 +10,7 @@ import cn.rankin.data.api.app.vo.*;
 import cn.rankin.data.api.product.entity.*;
 import cn.rankin.data.api.product.vo.CourseItemVo;
 import cn.rankin.data.api.product.vo.SupportItemVo;
+import cn.rankin.data.api.product.vo.TrainingItemVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -82,6 +83,10 @@ public class ProductService {
         return productClient.getSupport(supportId, merchantId);
     }
 
+    public APIResult<TrainingItemVo> getTraining(String id, String merchantId) {
+        return productClient.getTraining(id, merchantId);
+    }
+
     public APIResult<LessonVo> getLesson(String lessonId, String courseId, Boolean auth) {
         APIResult<Lesson> apiResult = productClient.getLesson(lessonId, courseId);
         if (!apiResult.getSuccess()) {

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

@@ -1,7 +1,7 @@
 package cn.rankin.common.utils.enums;
 
 public enum ProductTypeEnum {
-    COURSE("课程"), SUPPORT("周边"), PACKAGE("课程包");
+    COURSE("课程"), SUPPORT("周边"), PACKAGE("课程包"), TRAINING("师训");
 
     private String name;
 

+ 12 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/app/vo/ItemVo.java

@@ -31,4 +31,16 @@ public class ItemVo implements Serializable {
     private BaseStatusEnum status;
 
     private List<ItemGoodsVo> goods;
+
+    //小红点
+    private int redDot;
+
+    //师训相关域
+    private String dateDesc;
+
+    //师训开始时间
+    private Long openTime;
+
+    //师训结束时间
+    private Long closeTime;
 }

+ 69 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/product/entity/Training.java

@@ -0,0 +1,69 @@
+package cn.rankin.data.api.product.entity;
+
+import cn.rankin.common.utils.enums.BaseStatusEnum;
+import cn.rankin.common.utils.enums.ProductTypeEnum;
+import cn.rankin.common.utils.jpa.ListAttributeConverter;
+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;
+import java.util.List;
+
+@Data
+@ToString
+@Entity
+@Table(name = "p_training", indexes = {@Index(columnList = "code"), @Index(columnList = "title")})
+@DynamicInsert
+@DynamicUpdate
+public class Training implements Serializable {
+
+    @Id
+    private String id;
+
+    @Column(unique = true, nullable = false)
+    private String code;
+
+    @Column
+    private String title;
+
+    @Column(name = "cover_url")
+    private String coverUrl;
+
+    @Column(name = "img_list")
+    @Convert(converter = ListAttributeConverter.class)
+    private List<String> imgList;
+
+    @Column(name = "cp_id")
+    private String cpId;
+
+    @Enumerated(EnumType.ORDINAL)
+    private ProductTypeEnum type;
+
+    @Column
+    @Enumerated(EnumType.ORDINAL)
+    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;
+
+    @Column(name = "date_desc")
+    private String dateDesc;
+
+    @Column(name = "open_time")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date openTime;
+
+    @Column(name = "close_time")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date closeTime;
+
+}

+ 32 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/product/vo/TrainingItemVo.java

@@ -0,0 +1,32 @@
+package cn.rankin.data.api.product.vo;
+
+import cn.rankin.data.api.app.vo.ItemGoodsVo;
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@ToString
+public class TrainingItemVo implements Serializable {
+
+    private String id;
+
+    private String code;
+
+    private String title;
+
+    private String coverUrl;
+
+    private List<String> imgList;
+
+    private List<ItemGoodsVo> goods;
+
+    private String dateDesc;
+
+    private Date openTime;
+
+    private Date closeTime;
+}

+ 27 - 0
rankin-product-service/src/main/java/cn/rankin/productservice/controller/app/TrainingController.java

@@ -0,0 +1,27 @@
+package cn.rankin.productservice.controller.app;
+
+import cn.rankin.common.utils.api.model.APIResult;
+import cn.rankin.data.api.product.entity.Training;
+import cn.rankin.data.api.product.vo.TrainingItemVo;
+import cn.rankin.productservice.code.ProductServiceAPICode;
+import cn.rankin.productservice.service.app.ItemService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping(value = "/app/training")
+public class TrainingController {
+
+    @Autowired
+    private ItemService itemService;
+
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    public APIResult<TrainingItemVo> findById(@PathVariable("id") String id, @RequestParam("merchantId") String merchantId) {
+        TrainingItemVo targetItemVo = itemService.findTrainingItem(id, merchantId);
+        if (targetItemVo == null) {
+            return APIResult.error(ProductServiceAPICode.NOT_EXISTS);
+        }
+        return APIResult.ok(targetItemVo);
+    }
+}
+

+ 26 - 0
rankin-product-service/src/main/java/cn/rankin/productservice/repository/TrainingRepository.java

@@ -0,0 +1,26 @@
+package cn.rankin.productservice.repository;
+
+
+import cn.rankin.common.utils.enums.BaseStatusEnum;
+import cn.rankin.common.utils.jpa.BasicJpaRepository;
+import cn.rankin.data.api.product.entity.Training;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+public interface TrainingRepository extends BasicJpaRepository<Training, String> {
+
+    Long countByCode(String code);
+
+    @Query(value = "select s from Training s where s.id in (:ids) and s.status = :status")
+    List<Training> findByIds(@Param("ids") List<String> ids, @Param("status") BaseStatusEnum status);
+
+    @Transactional
+    @Modifying
+    @Query(value = "update Training s set s.status = 1 where s.id = :id")
+    Integer deleteById(@Param("id") String id);
+
+}

+ 49 - 0
rankin-product-service/src/main/java/cn/rankin/productservice/service/app/ItemService.java

@@ -12,6 +12,7 @@ import cn.rankin.data.api.app.vo.ItemVo;
 import cn.rankin.data.api.product.entity.*;
 import cn.rankin.data.api.product.vo.CourseItemVo;
 import cn.rankin.data.api.product.vo.SupportItemVo;
+import cn.rankin.data.api.product.vo.TrainingItemVo;
 import cn.rankin.productservice.repository.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
@@ -35,6 +36,9 @@ public class ItemService {
     private SupportRepository supportRepository;
 
     @Autowired
+    private TrainingRepository trainingRepository;
+
+    @Autowired
     private GoodsRepository goodsRepository;
 
     @Autowired
@@ -135,6 +139,25 @@ public class ItemService {
         return supportItemVo;
     }
 
+
+    public TrainingItemVo findTrainingItem(String id, String merchantId) {
+        MerchantProduct merchantProduct = merchantProductRepository.findByPidAndMerchantId(id, merchantId);
+        if (merchantProduct == null || !BaseStatusEnum.NORMAL.equals(merchantProduct.getStatus())) {
+            return null;
+        }
+        Training training = trainingRepository.find(id);
+        TrainingItemVo targetItemVo = new TrainingItemVo();
+        BeanUtils.copyProperties(training, targetItemVo);
+        List<Goods> goodsList = goodsRepository.findByPidAndMerchantId(id, merchantId);
+        List<ItemGoodsVo> itemGoodsVoList = new ArrayList<>();
+        for (Goods goods : goodsList) {
+            ItemGoodsVo itemGoodsVo = convert(goods);
+            itemGoodsVoList.add(itemGoodsVo);
+        }
+        targetItemVo.setGoods(itemGoodsVoList);
+        return targetItemVo;
+    }
+
     public List<ItemVo> findSupportByCourseId(String courseId, String merchantId) {
         List<CourseSupportRelation> relationList = courseSupportRelationRepository.findByCourseId(courseId, BaseStatusEnum.NORMAL);
         if (CollectionUtils.isEmpty(relationList)) {
@@ -153,6 +176,7 @@ public class ItemService {
         List<MerchantProduct> merchantProductList = merchantProductRepository.findByPidsAndMerchantId(productIdList, merchantId);
         List<String> courseIdList = new ArrayList<>();
         List<String> supportIdList = new ArrayList<>();
+        List<String> trainingIdList = new ArrayList<>();
         for (MerchantProduct merchantProduct : merchantProductList) {
             String productId = merchantProduct.getPid();
             ProductTypeEnum type = merchantProduct.getType();
@@ -160,7 +184,10 @@ public class ItemService {
                 courseIdList.add(productId);
             } else if (type.equals(ProductTypeEnum.SUPPORT)) {
                 supportIdList.add(productId);
+            } else if (type.equals(ProductTypeEnum.TRAINING)){
+                trainingIdList.add(productId);
             }
+
         }
 
         List<Course> courseList = new ArrayList<>();
@@ -173,6 +200,11 @@ public class ItemService {
             supportList = supportRepository.findByIds(supportIdList);
         }
 
+        List<Training> trainingList = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(trainingIdList)){
+            trainingList = trainingRepository.findByIds(trainingIdList);
+        }
+
         // 拿产品信息
         Map<String, ItemVo> itemVoMap = new HashMap<>();
         for (Course course : courseList) {
@@ -186,6 +218,12 @@ public class ItemService {
             itemVoMap.put(productId, itemVo);
         }
 
+        for(Training training : trainingList){
+            String productId = training.getId();
+            ItemVo itemVo = convert(training);
+            itemVoMap.put(productId, itemVo);
+        }
+
         // 取商品信息
         List<Goods> goodsList = goodsRepository.findByPidsAndMerchantId(productIdList, merchantId);
         Map<String, List<Goods>> goodsMap = new HashMap<>();
@@ -296,6 +334,17 @@ public class ItemService {
         return itemVo;
     }
 
+    public static ItemVo convert(Training training) {
+        ItemVo itemVo = new ItemVo();
+        itemVo.setId(training.getId());
+        itemVo.setCode(training.getCode());
+        itemVo.setTitle(training.getTitle());
+        itemVo.setType(ProductTypeEnum.TRAINING);
+        itemVo.setCoverUrl(training.getCoverUrl());
+        itemVo.setImgList(training.getImgList());
+        return itemVo;
+    }
+
     public static ItemGoodsVo convert(Goods goods) {
         ItemGoodsVo itemGoodsVo = new ItemGoodsVo();
         itemGoodsVo.setId(goods.getId());