Pārlūkot izejas kodu

add tag and group info

huodongdong 7 gadi atpakaļ
vecāks
revīzija
3c50ba20cd
23 mainītis faili ar 224 papildinājumiem un 49 dzēšanām
  1. 14 7
      rankin-cms-web/src/main/java/cn/rankin/cmsweb/controller/product/GroupController.java
  2. 24 4
      rankin-cms-web/src/main/java/cn/rankin/cmsweb/controller/product/TagController.java
  3. 4 15
      rankin-cms-web/src/main/java/cn/rankin/cmsweb/service/user/utils/MerchantServiceUtil.java
  4. 2 0
      rankin-common-utils/src/main/java/cn/rankin/common/utils/constant/Constant.java
  5. 20 0
      rankin-common-utils/src/main/java/cn/rankin/common/utils/enums/OrderDetailTypeEnum.java
  6. 2 0
      rankin-data-api/src/main/java/cn/rankin/data/api/product/dto/SupportDTO.java
  7. 3 0
      rankin-data-api/src/main/java/cn/rankin/data/api/product/entity/Goods.java
  8. 7 0
      rankin-data-api/src/main/java/cn/rankin/data/api/product/entity/MerchantProduct.java
  9. 3 3
      rankin-data-api/src/main/java/cn/rankin/data/api/product/entity/PackageProductRelation.java
  10. 3 0
      rankin-data-api/src/main/java/cn/rankin/data/api/product/entity/Support.java
  11. 4 0
      rankin-data-api/src/main/java/cn/rankin/data/api/product/vo/TagVo.java
  12. 4 0
      rankin-data-api/src/main/java/cn/rankin/data/api/trade/entity/OrderDetail.java
  13. 5 2
      rankin-product-service/src/main/java/cn/rankin/productservice/repository/GoodsRepository.java
  14. 0 3
      rankin-product-service/src/main/java/cn/rankin/productservice/repository/TagGroupRepository.java
  15. 2 0
      rankin-product-service/src/main/java/cn/rankin/productservice/service/GoodsService.java
  16. 17 0
      rankin-product-service/src/main/java/cn/rankin/productservice/service/MerchantProductService.java
  17. 9 1
      rankin-product-service/src/main/java/cn/rankin/productservice/service/TagService.java
  18. 8 3
      rankin-product-service/src/main/java/cn/rankin/productservice/utils/TestUtil.java
  19. 6 0
      rankin-task/src/main/java/cn/rankin/task/repository/OrderDetailRepository.java
  20. 4 3
      rankin-task/src/main/java/cn/rankin/task/repository/OrderGoodsRepository.java
  21. 33 2
      rankin-task/src/main/java/cn/rankin/task/service/OrderService.java
  22. 29 2
      rankin-task/src/main/java/cn/rankin/task/task/order/OrderCompleteTask.java
  23. 21 4
      rankin-task/src/main/java/cn/rankin/task/task/order/OrderSplitTask.java

+ 14 - 7
rankin-cms-web/src/main/java/cn/rankin/cmsweb/controller/product/GroupController.java

@@ -1,7 +1,7 @@
 package cn.rankin.cmsweb.controller.product;
 
 import cn.rankin.cmsweb.service.product.GroupService;
-import cn.rankin.cmsweb.service.user.utils.MerchantServiceUtil;
+import cn.rankin.cmsweb.service.user.MerchantInfoSetService;
 import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.common.utils.api.page.Page;
 import cn.rankin.data.api.product.dto.GroupDTO;
@@ -13,7 +13,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.List;
 
 @Slf4j
 @RestController
@@ -24,26 +23,32 @@ public class GroupController {
     private GroupService groupService;
 
     @Autowired
-    private MerchantServiceUtil<GroupVo> merchantServiceUtil;
+    private MerchantInfoSetService<GroupVo> merchantInfoSetService;
 
     @RequestMapping(value = "/list", method = RequestMethod.GET)
     public APIResult<Page<GroupVo>> search(GroupSearchDTO searchDTO) {
         APIResult<Page<GroupVo>> pageAPIResult = groupService.search(BeanUtil.convertToMap(searchDTO));
-        merchantServiceUtil.setPageMerchantInfo(pageAPIResult);
+        if (pageAPIResult.getSuccess()) {
+            merchantInfoSetService.setMerchantInfo(pageAPIResult.getData().getList());
+        }
         return pageAPIResult;
     }
 
     @RequestMapping(method = RequestMethod.POST)
     public APIResult<GroupVo> create(@Valid @RequestBody GroupDTO groupDTO) {
         APIResult<GroupVo> groupVoAPIResult = groupService.create(groupDTO);
-        merchantServiceUtil.setMerchantInfo(groupVoAPIResult);
+        if (groupVoAPIResult.getSuccess()) {
+            merchantInfoSetService.setMerchantInfo(groupVoAPIResult.getData());
+        }
         return groupVoAPIResult;
     }
 
     @RequestMapping(method = RequestMethod.PUT)
     public APIResult<GroupVo> update(@RequestBody GroupDTO groupDTO) {
         APIResult<GroupVo> groupVoAPIResult = groupService.update(groupDTO);
-        merchantServiceUtil.setMerchantInfo(groupVoAPIResult);
+        if (groupVoAPIResult.getSuccess()) {
+            merchantInfoSetService.setMerchantInfo(groupVoAPIResult.getData());
+        }
         return groupVoAPIResult;
     }
 
@@ -55,7 +60,9 @@ public class GroupController {
     @RequestMapping(value = "/{id}", method = RequestMethod.GET)
     public APIResult<GroupVo> getGroup(@PathVariable("id") String id) {
         APIResult<GroupVo> groupVoAPIResult = groupService.getGroup(id);
-        merchantServiceUtil.setMerchantInfo(groupVoAPIResult);
+        if (groupVoAPIResult.getSuccess()) {
+            merchantInfoSetService.setMerchantInfo(groupVoAPIResult.getData());
+        }
         return groupVoAPIResult;
     }
 }

+ 24 - 4
rankin-cms-web/src/main/java/cn/rankin/cmsweb/controller/product/TagController.java

@@ -1,6 +1,7 @@
 package cn.rankin.cmsweb.controller.product;
 
 import cn.rankin.cmsweb.service.product.TagService;
+import cn.rankin.cmsweb.service.user.MerchantInfoSetService;
 import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.common.utils.api.page.Page;
 import cn.rankin.data.api.product.dto.TagDTO;
@@ -17,24 +18,43 @@ public class TagController {
     @Autowired
     private TagService tagService;
 
+    @Autowired
+    private MerchantInfoSetService<TagVo> merchantInfoSetService;
+
     @RequestMapping(value = "/list", method = RequestMethod.GET)
     public APIResult<Page<TagVo>> search(TagSearchDTO searchDTO) {
-        return tagService.search(BeanUtil.convertToMap(searchDTO));
+        APIResult<Page<TagVo>> apiResult = tagService.search(BeanUtil.convertToMap(searchDTO));
+        if (apiResult.getSuccess()) {
+            merchantInfoSetService.setMerchantInfo(apiResult.getData().getList());
+        }
+        return apiResult;
     }
 
     @RequestMapping(value = "/{id}", method = RequestMethod.GET)
     public APIResult<TagVo> getTag(@PathVariable("id") String id) {
-        return tagService.getTag(id);
+        APIResult<TagVo> apiResult = tagService.getTag(id);
+        if (apiResult.getSuccess()) {
+            merchantInfoSetService.setMerchantInfo(apiResult.getData());
+        }
+        return apiResult;
     }
 
     @RequestMapping(method = RequestMethod.POST)
     public APIResult<TagVo> create(@RequestBody TagDTO tagDTO) {
-        return tagService.create(tagDTO);
+        APIResult<TagVo> apiResult = tagService.create(tagDTO);
+        if (apiResult.getSuccess()) {
+            merchantInfoSetService.setMerchantInfo(apiResult.getData());
+        }
+        return apiResult;
     }
 
     @RequestMapping(method = RequestMethod.PUT)
     public APIResult<TagVo> update(@RequestBody TagDTO tagDTO) {
-        return tagService.update(tagDTO);
+        APIResult<TagVo> apiResult = tagService.update(tagDTO);
+        if (apiResult.getSuccess()) {
+            merchantInfoSetService.setMerchantInfo(apiResult.getData());
+        }
+        return apiResult;
     }
 
     @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)

+ 4 - 15
rankin-cms-web/src/main/java/cn/rankin/cmsweb/service/user/utils/MerchantServiceUtil.java

@@ -1,8 +1,7 @@
-package cn.rankin.cmsweb.service.user.utils;
+package cn.rankin.cmsweb.service.user;
 
 import cn.rankin.cmsweb.service.user.MerchantService;
 import cn.rankin.common.utils.api.model.APIResult;
-import cn.rankin.common.utils.api.page.Page;
 import cn.rankin.data.api.user.vo.MerchantVo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,7 +16,7 @@ import java.util.Map;
 
 @Slf4j
 @Service
-public class MerchantServiceUtil<V> {
+public class MerchantInfoSetService<V> {
 
     @Autowired
     private MerchantService merchantService;
@@ -46,12 +45,7 @@ public class MerchantServiceUtil<V> {
         return merchantVoAPIResult.getData();
     }
 
-    public void setMerchantInfo(APIResult<V> apiResult) {
-        if (!apiResult.getSuccess()) {
-            log.error("api error: {}", apiResult.getMessage());
-            return;
-        }
-        V v = apiResult.getData();
+    public void setMerchantInfo(V v) {
         try {
             Class clazz = v.getClass();
             Field idField = clazz.getDeclaredField("merchantId");
@@ -71,12 +65,7 @@ public class MerchantServiceUtil<V> {
         }
     }
 
-    public void setPageMerchantInfo(APIResult<Page<V>> pageAPIResult) {
-        if (!pageAPIResult.getSuccess()) {
-            log.error("api page error, {}", pageAPIResult.getMessage());
-            return;
-        }
-        List<V> list = pageAPIResult.getData().getList();
+    public void setMerchantInfo(List<V> list) {
         if (CollectionUtils.isEmpty(list)) return;
 
         List<String> merchantIdList = new ArrayList<>();

+ 2 - 0
rankin-common-utils/src/main/java/cn/rankin/common/utils/constant/Constant.java

@@ -6,6 +6,8 @@ public class Constant {
 
     public final static String MRegEx = "^\\d{4}$";
 
+    public final static String PLAT_MERCHANT_ID = "1";
+
     public final static class EntryType {
         // {0,1,2} eid, mobile, wechatid
         public final static int EID = 0;

+ 20 - 0
rankin-common-utils/src/main/java/cn/rankin/common/utils/enums/OrderDetailTypeEnum.java

@@ -0,0 +1,20 @@
+package cn.rankin.common.utils.enums;
+
+public enum OrderDetailTypeEnum {
+    VIRTUAL("虚拟商品"), ENTITY("实物");
+
+    String name;
+
+    OrderDetailTypeEnum(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public String toString() {
+        return this.name;
+    }
+}

+ 2 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/product/dto/SupportDTO.java

@@ -23,6 +23,8 @@ public class SupportDTO implements Serializable {
 
     private String cpId;
 
+    private String coverUrl;
+
     private List<String> imgList;
 
     private BaseStatusEnum status;

+ 3 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/product/entity/Goods.java

@@ -68,6 +68,9 @@ public class Goods implements Serializable {
     @Column(name = "sort", nullable = false)
     private Integer sort;
 
+    @Column(name = "pkg_id")
+    private String pkgId;
+
     @Enumerated(EnumType.ORDINAL)
     private BaseStatusEnum status;
 

+ 7 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/product/entity/MerchantProduct.java

@@ -2,6 +2,7 @@ package cn.rankin.data.api.product.entity;
 
 import cn.rankin.common.utils.enums.BaseStatusEnum;
 import cn.rankin.common.utils.enums.ProductTypeEnum;
+import cn.rankin.data.api.product.vo.PackageProductVo;
 import lombok.Data;
 import lombok.ToString;
 import org.hibernate.annotations.DynamicInsert;
@@ -53,5 +54,11 @@ public class MerchantProduct implements Serializable {
     private List<Goods> goods;
 
     @Transient
+    private List<PackageProductVo> products;
+
+    @Transient
+    private List<Goods> specials;
+
+    @Transient
     private List<Tag> tags;
 }

+ 3 - 3
rankin-data-api/src/main/java/cn/rankin/data/api/product/entity/PackageProductRelation.java

@@ -15,8 +15,8 @@ import java.util.Date;
 | field | type | null | default | desc | extra |
 |----|:-----|:-------|:------|:-----|:-----|
 | id | varchar(512) | no | | 主键 | pri |
-| package_id | varchar(512) | no | | 课程包id | |
-| product_id | varchar(512) | no | | | |
+| pkg_id | varchar(512) | no | | 课程包id | |
+| pid | varchar(512) | no | | | |
 | cpPrice | float | no | | 产品在课程包内的cp价格 | |
 | sort | int | no | | 顺序 | |
 | status | smallint | no | | 状态 | |
@@ -33,7 +33,7 @@ public class PackageProductRelation implements Serializable {
     @Id
     private String id;
 
-    @Column(name = "package_id")
+    @Column(name = "pkg_id")
     private String packageId;
 
     private String pid;

+ 3 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/product/entity/Support.java

@@ -39,6 +39,9 @@ public class Support implements Serializable {
     @Column
     private String detail;
 
+    @Column(name = "cover_url")
+    private String coverUrl;
+
     @Column(name = "img_list")
     @Convert(converter = ListAttributeConverter.class)
     private List<String> imgList;

+ 4 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/product/vo/TagVo.java

@@ -13,6 +13,8 @@ public class TagVo implements Serializable {
 
     private String groupId;
 
+    private String groupName;
+
     private String code;
 
     private String name;
@@ -21,6 +23,8 @@ public class TagVo implements Serializable {
 
     private String merchantId;
 
+    private String merchantName;
+
     private Integer sort;
 
     private BaseStatusEnum status;

+ 4 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/trade/entity/OrderDetail.java

@@ -2,6 +2,7 @@ package cn.rankin.data.api.trade.entity;
 
 import cn.rankin.common.utils.enums.BaseStatusEnum;
 import cn.rankin.common.utils.enums.OrderDetailStatusEnum;
+import cn.rankin.common.utils.enums.OrderDetailTypeEnum;
 import lombok.Data;
 import lombok.ToString;
 import org.hibernate.annotations.DynamicInsert;
@@ -46,6 +47,9 @@ public class OrderDetail implements Serializable {
     @Enumerated(EnumType.ORDINAL)
     private BaseStatusEnum status;
 
+    @Enumerated(EnumType.ORDINAL)
+    private OrderDetailTypeEnum type;
+
     private String note;
 
     private String address;

+ 5 - 2
rankin-product-service/src/main/java/cn/rankin/productservice/repository/GoodsRepository.java

@@ -10,10 +10,10 @@ import java.util.List;
 
 public interface GoodsRepository extends BasicJpaRepository<Goods, String> {
 
-    @Query(value = "select g from Goods g where g.pid in (?1) and g.merchantId in (?2) and g.status = 0")
+    @Query(value = "select g from Goods g where g.pid in (?1) and g.merchantId in (?2) and g.status = 0 and g.pkgId is null")
     List<Goods> findByPidsAndMerchantIds(List<String> pids, List<String> merchantIds);
 
-    @Query(value = "select g from Goods g where g.pid = ?1 and g.merchantId = ?2 and g.status = 0 order by g.sort")
+    @Query(value = "select g from Goods g where g.pid = ?1 and g.merchantId = ?2 and g.status = 0 and g.pkgId is null order by g.sort")
     List<Goods> findByPidAndMerchantId(String pid, String merchantId);
 
     @Query(value = "select g from Goods g where g.id in (?1) and g.status = ?2")
@@ -22,4 +22,7 @@ public interface GoodsRepository extends BasicJpaRepository<Goods, String> {
     @Modifying
     @Query(value = "update Goods g set g.status = 1 where g.id = ?1")
     Integer deleteById(String id);
+
+    @Query(value = "select g from Goods g where g.pkgId = ?1 and g.status = 0 and g.merchantId = ?2")
+    List<Goods> findGoodsByPkgIdAndMerchantId(String pkgId, String merchantId);
 }

+ 0 - 3
rankin-product-service/src/main/java/cn/rankin/productservice/repository/TagGroupRepository.java

@@ -5,15 +5,12 @@ import cn.rankin.data.api.product.entity.TagGroup;
 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 TagGroupRepository extends BasicJpaRepository<TagGroup, String> {
 
     Long countByCode(String code);
 
-    @Transactional
     @Modifying
     @Query(value = "update TagGroup g set g.status = 1 where g.id = :id")
     Integer deleteById(@Param("id") String id);

+ 2 - 0
rankin-product-service/src/main/java/cn/rankin/productservice/service/GoodsService.java

@@ -45,6 +45,7 @@ public class GoodsService {
 
         Goods goods = convert(goodsDTO);
         goods.setCpId(product.getCpId());
+        goods.setSort(0);
         Goods result = goodsRepository.save(goods);
         return APIResult.ok(result);
     }
@@ -70,4 +71,5 @@ public class GoodsService {
         List<Goods> goodsList = goodsRepository.findByIds(goodsIdList, BaseStatusEnum.NORMAL);
         return APIResult.ok(goodsList);
     }
+
 }

+ 17 - 0
rankin-product-service/src/main/java/cn/rankin/productservice/service/MerchantProductService.java

@@ -4,8 +4,10 @@ import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.common.utils.api.page.Page;
 import cn.rankin.common.utils.enums.BaseOrderEnum;
 import cn.rankin.common.utils.enums.BaseStatusEnum;
+import cn.rankin.common.utils.enums.ProductTypeEnum;
 import cn.rankin.common.utils.util.JpaSortUtil;
 import cn.rankin.data.api.product.entity.*;
+import cn.rankin.data.api.product.vo.PackageProductVo;
 import cn.rankin.productservice.code.ProductServiceAPICode;
 import cn.rankin.productservice.repository.GoodsRepository;
 import cn.rankin.productservice.repository.MerchantProductRepository;
@@ -13,6 +15,7 @@ import cn.rankin.productservice.repository.ProductRepository;
 import cn.rankin.productservice.repository.TagRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
@@ -36,6 +39,9 @@ public class MerchantProductService {
     @Autowired
     private MerchantProductTagRelationService merchantProductTagRelationService;
 
+    @Autowired
+    private PackageService packageService;
+
     public APIResult<Page<MerchantProduct>> search(MerchantProduct merchantProduct, Integer pageNo, Integer pageSize, LinkedHashMap<String, BaseOrderEnum> sort) {
         Long count = merchantProductRepository.count(merchantProduct);
         Page<MerchantProduct> page = new Page<>(count, pageNo, pageSize);
@@ -161,9 +167,19 @@ public class MerchantProductService {
             merchantProduct.setTags(tagList);
         }
 
+        ProductTypeEnum type = merchantProduct.getType();
+        if (type.equals(ProductTypeEnum.PACKAGE)) {
+            List<PackageProductVo> productVos = packageService.getPackageProducts(productId);
+            merchantProduct.setProducts(productVos);
+
+            List<Goods> specials = goodsRepository.findGoodsByPkgIdAndMerchantId(productId, merchantId);
+            merchantProduct.setSpecials(specials);
+        }
+
         return APIResult.ok(merchantProduct);
     }
 
+    @Transactional
     public APIResult change(String productId, String merchantId, BaseStatusEnum status) {
         MerchantProduct merchantProduct = merchantProductRepository.findByPidAndMerchantId(productId, merchantId);
         if (merchantProduct == null) {
@@ -185,6 +201,7 @@ public class MerchantProductService {
         return APIResult.ok();
     }
 
+    @Transactional
     public APIResult<MerchantProduct> mountTags(String productId, String merchantId, List<String> tagIdList) {
         MerchantProduct merchantProduct = merchantProductRepository.findByPidAndMerchantId(productId, merchantId);
         if (merchantProduct == null) {

+ 9 - 1
rankin-product-service/src/main/java/cn/rankin/productservice/service/TagService.java

@@ -109,11 +109,19 @@ public class TagService {
 
     @Transactional
     public APIResult<Tag> create(TagDTO tagDTO) {
+        String groupId = tagDTO.getGroupId();
+        TagGroup tagGroup = tagGroupRepository.find(groupId);
+        if (tagGroup == null) {
+            return APIResult.error(ProductServiceAPICode.NOT_EXISTS);
+        }
+
+        String merchantId = tagGroup.getMerchantId();
+
         Tag tag = convert(tagDTO);
+        tag.setMerchantId(merchantId);
         Tag result = tagRepository.save(tag);
 
         String tagId = result.getId();
-        String merchantId = result.getMerchantId();
         List<String> productIdList = tagDTO.getProductList();
         merchantProductTagRelationService.updateByTagId(tagId, merchantId, productIdList);
 

+ 8 - 3
rankin-product-service/src/main/java/cn/rankin/productservice/utils/TestUtil.java

@@ -3,6 +3,7 @@ package cn.rankin.productservice.utils;
 import com.alibaba.fastjson.JSON;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
@@ -46,8 +47,12 @@ public class TestUtil {
 //        list2.add("3");
 
 //        list1.removeAll(list2);
-        System.out.println(JSON.toJSONString(list1));
-        List<String> id = null;
-        System.out.println(CollectionUtils.isEmpty(id));
+//        System.out.println(JSON.toJSONString(list1));
+//        List<String> id = null;
+//        System.out.println(CollectionUtils.isEmpty(id));
+        BigDecimal a = new BigDecimal("1");
+        BigDecimal b = new BigDecimal("0.2");
+        BigDecimal c = a.add(b);
+        System.out.println(c);
     }
 }

+ 6 - 0
rankin-task/src/main/java/cn/rankin/task/repository/OrderDetailRepository.java

@@ -2,6 +2,12 @@ package cn.rankin.task.repository;
 
 import cn.rankin.common.utils.jpa.BasicJpaRepository;
 import cn.rankin.data.api.trade.entity.OrderDetail;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
 
 public interface OrderDetailRepository extends BasicJpaRepository<OrderDetail, String> {
+
+    @Query(value = "select * from t_order_detail o where (o.order_status = 5 and o.status = 0 and o.type = 0) or (o.order_status = 7 and o.status = 0 and o.type = 1) limit ?1", nativeQuery = true)
+    List<OrderDetail> findForCompleteList(Integer limit);
 }

+ 4 - 3
rankin-task/src/main/java/cn/rankin/task/repository/OrderGoodsRepository.java

@@ -10,12 +10,13 @@ import java.util.List;
 
 public interface OrderGoodsRepository extends BasicJpaRepository<OrderGoods, String> {
 
-    List<OrderGoods> findByOrderId(String orderId);
-
     @Query(value = "select g from OrderGoods g where g.orderId in (?1)")
     List<OrderGoods> findByOrderIds(List<String> orderIds);
 
+    @Query(value = "select g from OrderGoods g where g.detailId in (?1)")
+    List<OrderGoods> findByDetailIds(List<String> detailIds);
+
     @Modifying
     @Query(value = "update OrderGoods r set r.detailId = :detailId where r.orderId = :orderId and r.goodsId in (:ids)")
-    Integer setDetailId(@Param("detailId") String detailId, @Param("orderId") String orderId, @Param("ids") List<String> ids);
+    Integer updateDetailIdByIds(@Param("detailId") String detailId, @Param("orderId") String orderId, @Param("ids") List<String> ids);
 }

+ 33 - 2
rankin-task/src/main/java/cn/rankin/task/service/OrderService.java

@@ -31,7 +31,38 @@ public class OrderService {
     @Autowired
     private OrderGoodsRepository orderGoodsRepository;
 
-    public List<Order> findSplitList(Integer limit) {
+    public List<OrderDetail> findOrderDetailForCompleteList(Integer limit) {
+        List<OrderDetail> orderDetailList = orderDetailRepository.findForCompleteList(limit);
+        if (CollectionUtils.isEmpty(orderDetailList)) {
+            return orderDetailList;
+        }
+
+        List<String> detailIdList = new ArrayList<>();
+        orderDetailList.forEach(orderDetail -> detailIdList.add(orderDetail.getId()));
+
+        List<OrderGoods> orderGoodsList = orderGoodsRepository.findByDetailIds(detailIdList);
+        Map<String, List<OrderGoods>> goodsMap = new HashMap<>();
+        for (OrderGoods orderGoods : orderGoodsList) {
+            String detailId = orderGoods.getDetailId();
+            List<OrderGoods> tmp = goodsMap.get(detailId);
+            if (CollectionUtils.isEmpty(tmp)) {
+                tmp = new ArrayList<>();
+                tmp.add(orderGoods);
+                goodsMap.put(detailId, tmp);
+            }else {
+                tmp.add(orderGoods);
+            }
+        }
+
+        for (OrderDetail orderDetail : orderDetailList) {
+            String detailId = orderDetail.getId();
+            orderDetail.setGoods(goodsMap.get(detailId));
+        }
+
+        return orderDetailList;
+    }
+
+    public List<Order> findOrderSplitList(Integer limit) {
         List<Order> orderList = orderRepository.findSplitOrders(limit);
         if (CollectionUtils.isEmpty(orderList)) {
             return orderList;
@@ -88,7 +119,7 @@ public class OrderService {
             for (OrderGoods orderGoods : orderGoodsList) {
                 goodsIdList.add(orderGoods.getGoodsId());
             }
-            Integer rowCount = orderGoodsRepository.setDetailId(detailId, orderId, goodsIdList);
+            Integer rowCount = orderGoodsRepository.updateDetailIdByIds(detailId, orderId, goodsIdList);
             if (rowCount > 0) {
                 log.info("orderId={}, 已成功分拆一单, detailId={}", orderId, detailId);
             }

+ 29 - 2
rankin-task/src/main/java/cn/rankin/task/task/order/OrderCompleteTask.java

@@ -1,15 +1,20 @@
 package cn.rankin.task.task.order;
 
 import cn.rankin.common.utils.api.model.APIResult;
+import cn.rankin.common.utils.enums.OrderDetailTypeEnum;
 import cn.rankin.common.utils.enums.ProductTypeEnum;
+import cn.rankin.data.api.trade.entity.OrderDetail;
 import cn.rankin.data.api.trade.entity.OrderGoods;
 import cn.rankin.data.api.trade.entity.OrderProductSnapshot;
-import cn.rankin.data.api.trade.entity.Order;
 import cn.rankin.data.api.user.vo.CampusVo;
 import cn.rankin.data.api.user.vo.TerminalUserVo;
+import cn.rankin.task.service.OrderService;
+import cn.rankin.task.service.ProductService;
 import cn.rankin.task.service.UserService;
+import com.alibaba.fastjson.JSON;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
@@ -27,8 +32,30 @@ public class OrderCompleteTask {
     @Autowired
     private UserService userService;
 
+    @Autowired
+    private ProductService productService;
+
+    @Autowired
+    private OrderService orderService;
+
+    @Scheduled(fixedDelay = ONE_MINUTE)
+    public void run() {
+        List<OrderDetail> orderDetailList = orderService.findOrderDetailForCompleteList(SIZE);
+        log.info(JSON.toJSONString(orderDetailList));
+        for (OrderDetail orderDetail : orderDetailList) {
+            OrderDetailTypeEnum type = orderDetail.getType();
+            if (type.equals(OrderDetailTypeEnum.VIRTUAL)) {
+                // 要进行鉴权记录插入
+
+            }else {
+                // 直接标记完成即可
+
+            }
+        }
+
+    }
 
-    public List<OrderProductSnapshot> toSnaptshots(Order order, TerminalUserVo terminalUserVo, CampusVo campusVo) {
+    public List<OrderProductSnapshot> toSnaptshots(OrderDetail order, TerminalUserVo terminalUserVo, CampusVo campusVo) {
         List<OrderProductSnapshot> snapshotList = new ArrayList<>();
         String orderId = order.getId();
         String userId = order.getUid();

+ 21 - 4
rankin-task/src/main/java/cn/rankin/task/task/order/OrderSplitTask.java

@@ -1,7 +1,9 @@
 package cn.rankin.task.task.order;
 
 import cn.rankin.common.utils.api.model.APIResult;
+import cn.rankin.common.utils.constant.Constant;
 import cn.rankin.common.utils.enums.BaseStatusEnum;
+import cn.rankin.common.utils.enums.OrderDetailTypeEnum;
 import cn.rankin.common.utils.enums.ProductTypeEnum;
 import cn.rankin.data.api.product.entity.Goods;
 import cn.rankin.data.api.product.entity.Package;
@@ -40,7 +42,7 @@ public class OrderSplitTask {
     @Scheduled(fixedDelay = ONE_MINUTE)
     public void run() {
         // 查询订单
-        List<Order> orderList = orderService.findSplitList(SIZE);
+        List<Order> orderList = orderService.findOrderSplitList(SIZE);
         if (CollectionUtils.isEmpty(orderList)) {
             log.info("不存在需要处理的订单");
             return;
@@ -55,6 +57,7 @@ public class OrderSplitTask {
                 continue;
             }
             log.info("start split order, orderId={}", orderId);
+            // 开始保存数据库了啊,更改状态,保存分拆的订单
             Boolean result = orderService.split(orderId, orderDetailList);
             if (result) {
                 log.info("split order success, orderId={}", orderId);
@@ -65,8 +68,6 @@ public class OrderSplitTask {
         }
     }
 
-    // 开始早错数据库了啊,更改状态,保存分拆的订单
-
     // 将一个订单分拆处理成多个
     public List<OrderDetail> splitOrder(Order order) {
         // 将一个订单的虚拟商品拆成一个单,其他类型商品(周边)按厂商分拆到多个单
@@ -141,19 +142,35 @@ public class OrderSplitTask {
         for (String cpId : orderDetailCpIdMap.keySet()) {
             OrderDetail orderDetail = orderDetailCpIdMap.get(cpId);
             if (orderDetail != null) {
+                orderDetail.setType(OrderDetailTypeEnum.ENTITY);
                 orderDetail.setCpId(cpId);
                 List<OrderGoods> orderGoodsList = orderDetail.getGoods();
+                BigDecimal price = BigDecimal.ZERO;
                 if (!CollectionUtils.isEmpty(orderGoodsList)) {
                     for (OrderGoods orderGoods : orderGoodsList) {
                         Goods goods = goodsMap.get(orderGoods.getGoodsId());
-                        orderDetail.setOriginPrice(orderDetail.getOriginPrice().add(goods.getMerchantPrice()));
+                        log.info("price={}, good_price={}", price, goods.getMerchantPrice());
+                        price = price.add(goods.getMerchantPrice());
                     }
                 }
+                orderDetail.setOriginPrice(price);
                 orderDetailList.add(orderDetail);
             }
         }
 
         if (virtualOrder != null) {
+            virtualOrder.setCpId(Constant.PLAT_MERCHANT_ID);
+            virtualOrder.setType(OrderDetailTypeEnum.VIRTUAL);
+            BigDecimal price = BigDecimal.ZERO;
+            List<OrderGoods> orderGoodsList = virtualOrder.getGoods();
+            if (!CollectionUtils.isEmpty(orderGoodsList)) {
+                for (OrderGoods orderGoods : orderGoodsList) {
+                    Goods goods = goodsMap.get(orderGoods.getGoodsId());
+                    log.info("price={}, good_price={}", price, goods.getMerchantPrice());
+                    price = price.add(goods.getMerchantPrice());
+                }
+            }
+            virtualOrder.setOriginPrice(price);
             orderDetailList.add(virtualOrder);
         }