Jelajahi Sumber

优化app 接口

liusz 6 bulan lalu
induk
melakukan
01b876483e

+ 4 - 1
poyee-admin/src/main/java/com/poyee/controller/PromotionTaskController.java

@@ -39,7 +39,10 @@ public class PromotionTaskController extends BaseController<IPromotionTaskServic
     @UserLoginToken(faceVerify = false, roles = {Roles.ADMIN,Roles.SHIPPING})
     @ResponseBody
     public Page<PromotionTaskPageDto> page(@RequestBody PromotionTaskPageReq req) {
-       return baseService.page(req);
+        console("任务列表->>", req);
+        Page<PromotionTaskPageDto> page = baseService.page(req);
+
+        return page;
     }
 
     /**

+ 12 - 0
poyee-app/src/main/java/com/poyee/controller/PromotionShareInfoController.java

@@ -60,6 +60,18 @@ public class PromotionShareInfoController extends BaseController<IPromotionShare
         return Result.success(baseService.makeShareInfo(taskId));
     }
 
+    /**
+     * 根据分享口令获取分享产品信息
+     */
+    @ApiOperation(value = "根据分享口令获取分享产品信息@(app-1.0)")
+    @RequestMapping(path = "/getShareInfoByShareCode/{shareCode}",method = {RequestMethod.POST})
+    @ResponseBody
+    public Result<ShareProductInfoDto> getShareInfoByShareCode(@PathVariable("shareCode") String shareCode) {
+        log.info("根据分享口令获取分享产品信息 > {}",shareCode);
+        return Result.success(baseService.searchByShareCode(shareCode));
+    }
+
+
 
 
 }

+ 24 - 0
poyee-app/src/main/java/com/poyee/controller/TaskApiController.java

@@ -4,16 +4,23 @@ import com.poyee.annotation.UserLoginToken;
 import com.poyee.base.controller.BaseController;
 import com.poyee.base.dto.Page;
 import com.poyee.base.dto.Result;
+import com.poyee.dto.ProductPromGroupInfoDto;
 import com.poyee.dto.task.*;
+import com.poyee.enums.ProductTypeEnums;
 import com.poyee.enums.Roles;
 import com.poyee.service.IPromotionTaskService;
+import com.poyee.service.ProductInfoService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 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.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  *  推广任务
@@ -23,6 +30,9 @@ import javax.validation.Valid;
 @RestController
 @RequestMapping("/api/promotionTask")
 public class TaskApiController extends BaseController<IPromotionTaskService, PromotionTaskReq, PromotionTaskDto> {
+
+    @Autowired
+    private ProductInfoService productInfoService;
     /**
      * 列表
      * 商家, 管理员, 运营[客服]等均可见
@@ -44,6 +54,7 @@ public class TaskApiController extends BaseController<IPromotionTaskService, Pro
             req.setProductName(req.getKeyWord());
         }
         Page<PromotionTaskPageDto> page = baseService.page(req);
+        productInfoService.getProductInfoByIds(page.getRows());
         return Result.success(page);
     }
     /**
@@ -71,6 +82,19 @@ public class TaskApiController extends BaseController<IPromotionTaskService, Pro
     }
 
 
+    /**
+     * 根据id查询任务信息
+     */
+    @ApiOperation(value = "根据id查询任务信息@(app-1.0)")
+    @RequestMapping(value = "/getById/{id}", method = {RequestMethod.POST})
+    @UserLoginToken(faceVerify = false, roles = {Roles.ADMIN,Roles.SHIPPING,Roles.GENERAL_USER,Roles.CUSTOMER})
+    @ResponseBody
+    public Result<PromotionTaskDto> getById(@PathVariable("id") Long id) {
+        console("根据id查询任务信息->> ",id);
+        PromotionTaskPageDto taskDto = baseService.detailById(id);
+        return Result.success(taskDto);
+    }
+
 
 
 }

+ 4 - 3
poyee-base/src/main/java/com/poyee/base/mapper/provider/IBaseProvider.java

@@ -6,6 +6,7 @@ import com.poyee.base.dto.Page;
 import com.poyee.base.mapper.provider.domain.MPage;
 import com.poyee.util.ObjectUtil;
 import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -17,7 +18,7 @@ import java.util.Map;
  */
 public interface IBaseProvider<T extends BaseReq, R extends BaseDto> {
     @SelectProvider(type = FinalProviderSql.class, method = "leftJoinWrapper")
-    List<Map<String, Object>> selectListMap(T req, Class<R> clazz);
+    List<Map<String, Object>> selectListMap(@Param("req") T req, @Param("clazz") Class<R> clazz);
 
     @SelectProvider(type = FinalProviderSql.class, method = "pageCountSql")
     long pageCount(String sql);
@@ -26,10 +27,10 @@ public interface IBaseProvider<T extends BaseReq, R extends BaseDto> {
     List<Map<String, Object>> page(String sql);
 
     @SelectProvider(type = FinalProviderSql.class, method = "selectOne")
-    Map<String, Object> selectOneMap(T req, Class<R> clazz);
+    Map<String, Object> selectOneMap(@Param("req") T req, @Param("clazz") Class<R> clazz);
 
     @SelectProvider(type = FinalProviderSql.class, method = "selectSum")
-    Map<String, Object> selectSumMap(T req, Class<R> clazz);
+    Map<String, Object> selectSumMap(@Param("req") T req, @Param("clazz") Class<R> clazz);
 
     @InsertProvider(type = FinalProviderSql.class, method = "save")
     @Options(useGeneratedKeys = true, keyProperty = "id")

+ 51 - 0
task/src/main/java/com/poyee/dto/ProductPromGroupInfoDto.java

@@ -0,0 +1,51 @@
+package com.poyee.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 商品信息
+ */
+@Data
+@ApiModel(value = "商品详细信息", description = "商品详细信息")
+public class ProductPromGroupInfoDto {
+    //  商品ID
+    @ApiModelProperty(value = "ID")
+    private Long id;
+    // 商品类型
+    @ApiModelProperty(value = "类型")
+    private String type;
+    // 商品价格
+    @ApiModelProperty(value = "单价")
+    private BigDecimal unitPrice;
+    // 营销信息
+    @ApiModelProperty(value = "营销信息")
+    private String marketingInfo;
+    //  积分类型
+    @ApiModelProperty(value = "积分类型")
+    private String pointType;
+    //  积分最小值
+    @ApiModelProperty(value = "积分最小值")
+    private Long pointMin;
+    //
+    @ApiModelProperty(value = "别名")
+    private String displayName;
+    // 商品图片
+    @ApiModelProperty(value = "图片")
+    private String coverPicture;
+    // 积分类型描述
+    @ApiModelProperty(value = "积分类型描述")
+    private String pointTypeMsg;
+    @ApiModelProperty(value = "价格范围")
+    private String minMaxPrice;
+    @ApiModelProperty(value = "优惠价")
+    private BigDecimal favorablePrice;
+    @ApiModelProperty(value = "规格")
+    private String specification;
+    @ApiModelProperty(value = "修改类型")
+    private String changeType;
+
+}

+ 33 - 0
task/src/main/java/com/poyee/dto/share/ShareProductInfoDto.java

@@ -0,0 +1,33 @@
+package com.poyee.dto.share;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.poyee.annotation.db.Select;
+import com.poyee.base.dto.BaseDto;
+import com.poyee.dto.task.PromotionTaskDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "分享产品信息")
+@TableName("promotion_share_info")
+public class ShareProductInfoDto extends BaseDto {
+
+    @ApiModelProperty(value = "分享类型")
+    @TableField(value = "type")
+    @Select(table = PromotionTaskDto.class ,fieldName = "type")
+    private String type;
+
+    @ApiModelProperty(value = "产品id")
+    @TableField(value = "product_id",exist = false)
+    @Select(table = PromotionTaskDto.class ,fieldName = "product_id")
+    private Long productId;
+
+    @ApiModelProperty(value = "产品名称")
+    @TableField(value = "product_name",exist = false)
+    @Select(table = PromotionTaskDto.class ,fieldName = "name")
+    private String productName;
+
+
+}

+ 27 - 0
task/src/main/java/com/poyee/dto/share/ShareProductInfoReq.java

@@ -0,0 +1,27 @@
+package com.poyee.dto.share;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.poyee.annotation.db.LeftJoin;
+import com.poyee.base.dto.BaseDto;
+import com.poyee.base.dto.BaseReq;
+import com.poyee.dto.task.PromotionTaskDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "分享产品信息请求参数")
+@TableName("promotion_share_info")
+public class ShareProductInfoReq extends BaseReq {
+
+    @ApiModelProperty(value = "分享码")
+    @TableField(value = "share_code")
+    private String shareCode;
+
+    @ApiModelProperty(value = "任务id",hidden = true)
+    @TableField(value = "task_id",exist = false)
+    @LeftJoin(table = PromotionTaskDto.class,fieldName = "id",leftFieldName = "task_id")
+    private Long taskId;
+
+}

+ 1 - 1
task/src/main/java/com/poyee/dto/task/PromotionTaskCreateReq.java

@@ -87,7 +87,7 @@ public class PromotionTaskCreateReq extends BaseReq {
 
     @ApiModelProperty(value = "商品单价-min",example = "0.00",required = true)
     @TableField("min_price")
-    @NotNull(message = "商品单价-min不能为空")
+//    @NotNull(message = "商品单价-min不能为空")
     private BigDecimal minPrice;
 
     @ApiModelProperty(value = "商品单价-max",example = "0.01",required = true)

+ 5 - 0
task/src/main/java/com/poyee/dto/task/PromotionTaskPageDto.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.poyee.annotation.db.OrderBy;
 import com.poyee.base.dto.BaseDto;
+import com.poyee.dto.ProductPromGroupInfoDto;
 import com.poyee.enums.OrderBySortEnums;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -150,4 +151,8 @@ public class PromotionTaskPageDto extends BaseDto {
     @TableField("prop1")
     private String prop1;
 
+    @ApiModelProperty("商品详细信息")
+    @TableField(exist = false)
+    private ProductPromGroupInfoDto productInfo;
+
 }

+ 4 - 0
task/src/main/java/com/poyee/dto/task/PromotionTaskPageReq.java

@@ -14,6 +14,10 @@ import lombok.Data;
 @ApiModel(value = "推广任务分页查询参数" , description = "如果用户是商家,默认查询商家自己的数据")
 public class PromotionTaskPageReq extends BaseReq {
 
+    @ApiModelProperty(value = "id",hidden = true)
+    @TableField(value = "id")
+    private Long id;
+
     @ApiModelProperty(value = "商品类型:group(拼团),shop(商城)")
     @TableField(value = "type")
     private String type;

+ 6 - 1
task/src/main/java/com/poyee/dto/task/PromotionTaskReq.java

@@ -17,14 +17,20 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 public class PromotionTaskReq extends BaseReq {
 
+    @ApiModelProperty(value = "推广任务id" ,hidden = true)
+    @TableField(value = "id")
+    private Long id;
+
     @ApiModelProperty(value = "平台appid")
     @TableField(value = "appid")
     @Where( table = PromotionTaskReq.class, field = "appid")
     private String appid;
+
     @ApiModelProperty(value = "商品id")
     @TableField(value = "product_id")
     @Where( table = PromotionTaskReq.class, field = "product_id")
     private String productId;
+
     @ApiModelProperty(value = "商品状态(sold_out: 售罄,lock: 下架 )")
     @TableField(value = "product_status")
     private String productStatus;
@@ -37,7 +43,6 @@ public class PromotionTaskReq extends BaseReq {
     @Where( table = PromotionTaskReq.class, field = "status", operator = FieldOperator.IN)
     private String inStatus;
 
-
     public PromotionTaskReq(String appid,String productId) {
         this.appid = appid;
         this.productId = productId;

+ 18 - 1
task/src/main/java/com/poyee/enums/ProductTypeEnums.java

@@ -2,11 +2,15 @@ package com.poyee.enums;
 
 import lombok.Getter;
 
+import java.util.Arrays;
+import java.util.List;
+
 @Getter
 public enum ProductTypeEnums {
     //group 拼团, shop 商品
     GROUP("group", "拼团"),
-    SHOP("shop", "商品");
+    SHOP("shop", "商品"),
+    UNKNOWN("unknown", "未知");
 
     private String type;
     private String desc;
@@ -15,4 +19,17 @@ public enum ProductTypeEnums {
         this.type = type;
         this.desc = desc;
     }
+    /**
+     * 表示正常的商品类型枚举列表,用于筛选有效类型如拼团、店铺商品等。
+     */
+    public static final List<ProductTypeEnums> NORMAL = Arrays.asList(GROUP, SHOP);
+
+    public static ProductTypeEnums getByType(String type) {
+        for (ProductTypeEnums value : values()) {
+            if (value.getType().equals(type)) {
+                return value;
+            }
+        }
+        return null;
+    }
 }

+ 2 - 0
task/src/main/java/com/poyee/service/IPromotionShareInfoService.java

@@ -24,4 +24,6 @@ public interface IPromotionShareInfoService extends BaseService<PromotionShareIn
     public List<PromotionShareInfoDto> allList(PromotionShareInfoReq req);
 
     MakeShareInfoDto makeShareInfo(Long taskId);
+
+    ShareProductInfoDto searchByShareCode(String shareCode);
 }

+ 1 - 0
task/src/main/java/com/poyee/service/IPromotionTaskService.java

@@ -31,4 +31,5 @@ public interface IPromotionTaskService extends BaseService<PromotionTaskReq, Pro
 
     Result updateSyncInfo(PromotionTaskReq req);
 
+    PromotionTaskPageDto detailById(Long id);
 }

+ 91 - 0
task/src/main/java/com/poyee/service/ProductInfoService.java

@@ -0,0 +1,91 @@
+package com.poyee.service;
+
+import com.alibaba.excel.util.StringUtils;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.poyee.common.exception.ServiceException;
+import com.poyee.dto.ProductPromGroupInfoDto;
+import com.poyee.dto.task.PromotionTaskPageDto;
+import com.poyee.enums.HttpMethod;
+import com.poyee.enums.ProductTypeEnums;
+import com.poyee.util.http.HttpClientUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ *  获取商品信息
+ */
+@Slf4j
+@Service
+public class ProductInfoService {
+
+    @Value("${uri.product:https://m2-dev.hobbystocks.cn/py-app/api/local/groupInfoByIds?ids=}")
+    private String groupUri;
+
+    private String shopUri;
+
+    /**
+     * 根据商品类型和商品/拼团id获取商品信息
+     * @return
+     */
+    public void getProductInfoByIds(List<PromotionTaskPageDto> rows) {
+        //获取数据
+        for(ProductTypeEnums type : ProductTypeEnums.NORMAL){
+            List<Integer> ids = getIdsByType(rows, type);
+            if(CollectionUtils.isEmpty(ids)){
+                continue;
+            }
+            String url = "";
+            String idsStr = ids.stream()
+                                .map(String::valueOf)
+                                .collect(Collectors.joining(","));
+            switch (type){
+//                case SHOP:
+//                    url = shopUri + idsStr;
+//                    break;
+                case GROUP:
+                    url = groupUri + idsStr;
+                    break;
+                default:
+                    log.error("商品类型【{}】不查询:", type);
+            }
+            if(StringUtils.isNotBlank(url)) {
+                String execute = HttpClientUtil.create()
+                                               .uri(url, HttpMethod.GET)
+                                               .build()
+                                               .execute();
+                if(StringUtils.isNotBlank(execute)){
+                    try {
+                        JSONArray data = JSONObject.parseObject(execute).getJSONArray("data");
+                        if(CollectionUtils.isNotEmpty(data)){
+                            List<ProductPromGroupInfoDto> infos = JSONArray.parseArray(JSONObject.toJSONString(data), ProductPromGroupInfoDto.class);
+                            for(ProductPromGroupInfoDto info : infos){
+                                rows.stream()
+                                    .filter(dto -> Objects.equals(dto.getType(),type.getType()) && Objects.equals(dto.getProductId(),String.valueOf(info.getId())))
+                                    .forEach(dto -> dto.setProductInfo(info));
+                            }
+                        }
+                    }catch (Exception e) {
+                        log.error("获取商品信息失败:", e);
+                    }
+                }
+            }
+        }
+    }
+
+    private static List<Integer> getIdsByType(List<PromotionTaskPageDto> rows, ProductTypeEnums typeEnums) {
+        return rows.stream()
+                                     .filter(dto -> Objects.equals(dto.getType(), typeEnums.getType()))
+                                     .map(PromotionTaskPageDto::getProductId)
+                                     .filter(Objects::nonNull)
+                                     .map(Integer::valueOf)
+                                     .collect(Collectors.toList());
+    }
+
+
+}

+ 9 - 0
task/src/main/java/com/poyee/service/impl/PromotionShareInfoServiceImpl.java

@@ -85,6 +85,15 @@ public class PromotionShareInfoServiceImpl extends BaseServiceImpl<PromotionShar
         return makeShareInfo(userInfo,taskDto);
     }
 
+    @Override
+    public ShareProductInfoDto searchByShareCode(String shareCode) {
+        ShareProductInfoReq req  = new ShareProductInfoReq();
+        req.setShareCode(shareCode);
+        ShareProductInfoDto shareProductInfoDto = (ShareProductInfoDto) baseMapper.selectOne(req, ShareProductInfoDto.class);
+        DataSourceContextHolder.clearDataSource();
+        return shareProductInfoDto;
+    }
+
     /**
      *  生成分享信息
      * @param userInfo

+ 11 - 0
task/src/main/java/com/poyee/service/impl/PromotionTaskServiceImpl.java

@@ -1,5 +1,6 @@
 package com.poyee.service.impl;
 
+import com.poyee.base.dto.BaseDto;
 import com.poyee.base.dto.Page;
 import com.poyee.base.dto.Result;
 import com.poyee.base.dto.UserInfo;
@@ -59,6 +60,7 @@ public class PromotionTaskServiceImpl extends BaseServiceImpl<PromotionTaskMappe
         //根据角色设置商家id
         checkAndSetMerchantId(req);
         //计算 预计总佣金:单价区间*数量*佣金比例
+        req.setAppid("39640b8654724017b58d3a30c18b8b6d");
         try {
             BigDecimal totalCommissionMin = req.getMinPrice()
                                                .multiply(BigDecimal.valueOf(req.getTotalQuantity()))
@@ -129,4 +131,13 @@ public class PromotionTaskServiceImpl extends BaseServiceImpl<PromotionTaskMappe
         return Result.ret(update>0);
     }
 
+    @Override
+    public PromotionTaskPageDto detailById(Long id) {
+        PromotionTaskReq req = new PromotionTaskReq();
+        req.setId(id);
+        PromotionTaskPageDto baseDto = (PromotionTaskPageDto) baseMapper.selectOne(req, PromotionTaskPageDto.class);
+        DataSourceContextHolder.clearDataSource();
+        return baseDto;
+    }
+
 }