浏览代码

Merge remote-tracking branch 'origin/dev' into dev

lyx 1 月之前
父节点
当前提交
d3a9c60e33
共有 36 个文件被更改,包括 599 次插入86 次删除
  1. 9 0
      alien-config/src/main/java/shop/alien/config/properties/RiskControlProperties.java
  2. 88 0
      alien-entity/src/main/java/shop/alien/entity/second/SecondRiskControlRecord.java
  3. 0 3
      alien-entity/src/main/java/shop/alien/entity/store/ExpertImg.java
  4. 1 0
      alien-entity/src/main/java/shop/alien/entity/store/LifeUser.java
  5. 9 0
      alien-entity/src/main/java/shop/alien/entity/store/LifeUserDynamics.java
  6. 4 0
      alien-entity/src/main/java/shop/alien/entity/store/LifeUserExpert.java
  7. 7 3
      alien-entity/src/main/java/shop/alien/entity/store/LifeUserExpertOrder.java
  8. 64 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/ExpertImgVo.java
  9. 3 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserDynamicsVo.java
  10. 33 6
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserExpertOrderVo.java
  11. 4 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserOrderVo.java
  12. 3 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentVo.java
  13. 2 0
      alien-entity/src/main/java/shop/alien/mapper/LifeUserDynamicsMapper.java
  14. 1 2
      alien-entity/src/main/java/shop/alien/mapper/LifeUserExpertMapper.java
  15. 9 8
      alien-entity/src/main/java/shop/alien/mapper/LifeUserExpertOrderMapper.java
  16. 10 0
      alien-entity/src/main/java/shop/alien/mapper/second/SecondRiskControlRecordMapper.java
  17. 1 2
      alien-entity/src/main/resources/mapper/ExpertImgMapper.xml
  18. 23 0
      alien-entity/src/main/resources/mapper/LifeUserDynamicsMapper.xml
  19. 2 1
      alien-entity/src/main/resources/mapper/LifeUserExpertMapper.xml
  20. 3 2
      alien-entity/src/main/resources/mapper/LifeUserExpertOrderMapper.xml
  21. 2 0
      alien-gateway/src/main/java/shop/alien/gateway/AlienGatewayApplication.java
  22. 25 0
      alien-gateway/src/main/java/shop/alien/gateway/feign/SecondServiceFeign.java
  23. 3 2
      alien-job/src/main/java/shop/alien/job/store/StoreMembershipCardJob.java
  24. 34 0
      alien-second/src/main/java/shop/alien/second/controller/RiskControlController.java
  25. 25 0
      alien-second/src/main/java/shop/alien/second/service/RiskControlService.java
  26. 56 0
      alien-second/src/main/java/shop/alien/second/service/impl/RiskControlServiceImpl.java
  27. 43 35
      alien-second/src/main/java/shop/alien/second/service/impl/SecondGoodsServiceImpl.java
  28. 22 0
      alien-store/src/main/java/shop/alien/store/controller/LifeUserDynamicsController.java
  29. 7 5
      alien-store/src/main/java/shop/alien/store/controller/LifeUserExpertController.java
  30. 2 1
      alien-store/src/main/java/shop/alien/store/controller/StoreUserExpertController.java
  31. 53 0
      alien-store/src/main/java/shop/alien/store/service/LifeUserDynamicsService.java
  32. 1 1
      alien-store/src/main/java/shop/alien/store/service/LifeUserExpertService.java
  33. 2 1
      alien-store/src/main/java/shop/alien/store/service/StoreUserExpertService.java
  34. 14 12
      alien-store/src/main/java/shop/alien/store/service/impl/LifeUserExpertServiceImpl.java
  35. 31 0
      alien-store/src/main/java/shop/alien/store/service/impl/StoreCommentServiceImpl.java
  36. 3 2
      alien-store/src/main/java/shop/alien/store/service/impl/StoreUserExpertServiceImpl.java

+ 9 - 0
alien-config/src/main/java/shop/alien/config/properties/RiskControlProperties.java

@@ -58,6 +58,10 @@ public class RiskControlProperties {
          * 24小时内发布成功记录次数阈值
          */
         private int publishCount24h = 3;
+        /**
+         * 时间窗口(小时)
+         */
+        private int timeWindowHours = 24;
     }
 
     @Data
@@ -66,5 +70,10 @@ public class RiskControlProperties {
          * 24小时内发布同类商品数量阈值
          */
         private int sameCategoryCount24h = 10;
+        
+        /**
+         * 时间窗口(小时)
+         */
+        private int timeWindowHours = 24;
     }
 }

+ 88 - 0
alien-entity/src/main/java/shop/alien/entity/second/SecondRiskControlRecord.java

@@ -0,0 +1,88 @@
+package shop.alien.entity.second;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@JsonInclude
+@TableName("second_risk_control_record")
+public class SecondRiskControlRecord implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键ID")
+    private Integer id;
+
+    @TableField("user_id")
+    @ApiModelProperty(value = "用户ID")
+    private Integer userId;
+
+    @TableField("rule_type")
+    @ApiModelProperty(value = "规则类型 1:洗钱嫌疑 2:账号异常 3:交易欺诈 4:异常发布")
+    private Integer ruleType;
+
+    @TableField("rule_name")
+    @ApiModelProperty(value = "规则名称")
+    private String ruleName;
+
+    @TableField("rule_type")
+    @ApiModelProperty(value = "风控执行状态 0 未执行,1-已执行 2-已忽略")
+    private Integer riskStatus;
+
+//
+//    @TableField("trigger_count")
+//    @ApiModelProperty(value = "触发次数")
+//    private Integer triggerCount;
+//
+//    @TableField("time_window_hours")
+//    @ApiModelProperty(value = "时间窗口(小时)")
+//    private Integer timeWindowHours;
+//
+//    @TableField("threshold_value")
+//    @ApiModelProperty(value = "阈值")
+//    private Integer thresholdValue;
+//
+//    @TableField("actual_value")
+//    @ApiModelProperty(value = "实际值")
+//    private Integer actualValue;
+
+    @TableField("business_id")
+    @ApiModelProperty(value = "业务ID(如商品ID、交易ID等)")
+    private Integer businessId;
+
+//    @TableField("business_type")
+//    @ApiModelProperty(value = "业务类型 1:二手商品 2:交易记录")
+//    private Integer businessType;
+
+    @TableField("detail_info")
+    @ApiModelProperty(value = "详细信息(JSON格式)")
+    private String detailInfo;
+
+    @TableField("delete_flag")
+    @ApiModelProperty(value = "删除标记 0:未删除 1:已删除")
+    private Integer deleteFlag;
+
+    @TableField("created_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "创建时间")
+    private Date createdTime;
+
+    @TableField("created_user_id")
+    @ApiModelProperty(value = "创建人ID")
+    private Integer createdUserId;
+
+    @TableField("updated_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "修改时间")
+    private Date updatedTime;
+
+    @TableField("updated_user_id")
+    @ApiModelProperty(value = "修改人ID")
+    private Integer updatedUserId;
+}

+ 0 - 3
alien-entity/src/main/java/shop/alien/entity/store/ExpertImg.java

@@ -78,9 +78,6 @@ public class ExpertImg extends Model<ExpertImg> {
     private Date updatedTime;
 
 
-    @ApiModelProperty(value = "推广类型")
-    @TableField(value = "promote_type")
-    private String promoteType;
 
 
 

+ 1 - 0
alien-entity/src/main/java/shop/alien/entity/store/LifeUser.java

@@ -121,4 +121,5 @@ public class LifeUser implements Serializable {
     @ApiModelProperty(value = "绑定他人邀请码")
     @TableField("bind_invite_code")
     private String bindInviteCode;
+
 }

+ 9 - 0
alien-entity/src/main/java/shop/alien/entity/store/LifeUserDynamics.java

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -112,4 +113,12 @@ public class LifeUserDynamics {
     @ApiModelProperty(value = "启用状态0-启用,1-禁用")
     @TableField("enable_status")
     private Integer enableStatus;
+
+    @ApiModelProperty(value = "订单GMV (达人发布动态使用的)")
+    @TableField("order_gmv")
+    private BigDecimal orderGmv;
+
+    @ApiModelProperty(value = "业务id")
+    @TableField("business_id")
+    private Integer businessId;
 }

+ 4 - 0
alien-entity/src/main/java/shop/alien/entity/store/LifeUserExpert.java

@@ -90,6 +90,10 @@ public class LifeUserExpert extends Model<LifeUserExpert> {
     @TableField(value = "advance_rate")
     private Integer advanceRate;
 
+    @ApiModelProperty(value = "推广类型 ")
+    @TableField(value = "promote_type")
+    private String promoteType;
+
 
 
 }

+ 7 - 3
alien-entity/src/main/java/shop/alien/entity/store/LifeUserExpertOrder.java

@@ -111,12 +111,16 @@ public class LifeUserExpertOrder extends Model<LifeUserExpertOrder> {
     @TableField(value = "updated_user_id", fill = FieldFill.INSERT_UPDATE)
     private Integer updatedUserId;
 
-    @ApiModelProperty(value = "申请首款按钮")
-    @TableField(value = "first_funds_button")
-    private String firstFundsButton;
+    @ApiModelProperty(value = "预付款审核")
+    @TableField(value = "advance_payment_status")
+    private String advancePaymentStatus;
 
     @ApiModelProperty(value = "申请尾款按钮")
     @TableField(value = "end_funds_button")
     private String endFundsButton;
 
+    @ApiModelProperty(value = "预付款审核拒绝原因")
+    @TableField(value = "reason_refusal")
+    private String reasonRefusal;
+
 }

+ 64 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/ExpertImgVo.java

@@ -0,0 +1,64 @@
+package shop.alien.entity.store.vo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import shop.alien.entity.store.LifeUserExpertOrder;
+
+import java.util.Date;
+
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ExpertImgVo", description="达人申请图片vo")
+public class ExpertImgVo extends LifeUserExpertOrder {
+
+    @ApiModelProperty(value = "主键id")
+    private Integer id;
+
+    @ApiModelProperty(value = "达人id")
+    private Integer expertId;
+
+    @ApiModelProperty(value = "达人码")
+    private Integer expertCode;
+
+    @ApiModelProperty(value = "用户id(life_user表id)")
+    private Integer userId;
+
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    private Integer deleteFlag;
+
+
+    @ApiModelProperty(value = "图片类型 0 申请成为达人上传的图片")
+    private Integer imgType;
+
+    @ApiModelProperty(value = "图片描述")
+    private String imgDescription;
+
+    @ApiModelProperty(value = "图片排序")
+    private Integer imgSort;
+
+    @ApiModelProperty(value = "图片路径")
+    private String imgUrl;
+
+    @ApiModelProperty(value = "补充说明")
+    private String addExplanation;
+
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createdTime;
+
+
+    @ApiModelProperty(value = "修改时间")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "推广类型")
+    private String promoteType;
+
+
+}

+ 3 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserDynamicsVo.java

@@ -68,4 +68,7 @@ public class LifeUserDynamicsVo extends LifeUserDynamics {
 
     @ApiModelProperty(value = "商家名称")
     private String storeName;
+
+    @ApiModelProperty(value = "商家评分")
+    private String scoreAvg;
 }

+ 33 - 6
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserExpertOrderVo.java

@@ -44,6 +44,9 @@ public class LifeUserExpertOrderVo extends LifeUserExpertOrder {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date earliestCreatedTime;
 
+    @ApiModelProperty(value = "订单金额")
+    private BigDecimal orderMoney;
+
     @ApiModelProperty(value = "到账总金额")
     private BigDecimal accountMoney;
 
@@ -62,12 +65,6 @@ public class LifeUserExpertOrderVo extends LifeUserExpertOrder {
     @ApiModelProperty(value = "套餐名称")
     private String name;
 
-//    @ApiModelProperty(value = "申请首款按钮状态")
-//    private String firstFundsButton;
-//
-//    @ApiModelProperty(value = "申请尾款按钮状态")
-//    private String endFundsButton;
-
     @ApiModelProperty(value = "申请首款按钮")
     @TableField(value = "first_funds_button")
     private String firstFundsButton;
@@ -76,4 +73,34 @@ public class LifeUserExpertOrderVo extends LifeUserExpertOrder {
     @TableField(value = "end_funds_button")
     private String endFundsButton;
 
+    @ApiModelProperty(value = "推广类型")
+    @TableField(value = "promote_type")
+    private String promoteType;
+
+    @ApiModelProperty(value = "用户真实姓名")
+    @TableField(value = "real_name")
+    private String realName;
+
+    @ApiModelProperty(value = "用户手机号")
+    @TableField(value = "user_phone")
+    private String userPhone;
+
+    @ApiModelProperty(value = "佣金")
+    private String commission;
+
+    @ApiModelProperty(value = "预付款")
+    private String advance;
+
+    @ApiModelProperty(value = "预付款比例")
+    @TableField(value = "advance_rate")
+    private String advanceRate;
+
+    @ApiModelProperty(value = "佣金比例")
+    @TableField(value = "commission_rate")
+    private String commissionRate;
+
+    @ApiModelProperty(value = "预付款审核状态  0审核通过  1未审核  2审核拒绝")
+    @TableField(value = "advance_payment_status")
+    private String advancePaymentStatus;
+
 }

+ 4 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserOrderVo.java

@@ -182,4 +182,8 @@ public class LifeUserOrderVo {
     @ApiModelProperty(value = "修改人ID")
     @TableField("updated_user_id")
     private Integer updatedUserId;
+
+    @ApiModelProperty(value = "用户GMV")
+    @TableField("orderGmv")
+    private Integer orderGmv;
 }

+ 3 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentVo.java

@@ -59,4 +59,7 @@ public class StoreCommentVo extends StoreComment {
 
     @ApiModelProperty(value = "商家or用户(0商家/1用户)")
     private Integer storeUserFlag;
+
+    private String storeUserName;
+    private String storeUserImg;
 }

+ 2 - 0
alien-entity/src/main/java/shop/alien/mapper/LifeUserDynamicsMapper.java

@@ -84,4 +84,6 @@ public interface LifeUserDynamicsMapper extends BaseMapper<LifeUserDynamics> {
 
     List<LifeUserDynamicsVo> getDynamicsDetail(@Param("id") Integer id);
 
+    List<LifeUserDynamicsVo> getExpertDynamicsDetail(@Param("id") Integer id);
+
 }

+ 1 - 2
alien-entity/src/main/java/shop/alien/mapper/LifeUserExpertMapper.java

@@ -198,10 +198,9 @@ public interface LifeUserExpertMapper extends BaseMapper<LifeUserExpert> {
     Boolean updateExpert(LifeUserExpert lifeUserExpert);
 
     @Select(
-            "select   expert.* ,img.promote_type,user.* "+
+            "select   expert.*,user.* "+
                     "from life_user_expert expert " +
                     "join life_user user on user.id = expert.user_id " +
-                    "left join expert_img img on img.user_id = expert.user_id " +
                     "${ew.customSqlSegment}")
     List<LifeUserExpertVo> getApplicationExpertList(@Param(Constants.WRAPPER) QueryWrapper<LifeUserExpertVo> wrapper);
 

+ 9 - 8
alien-entity/src/main/java/shop/alien/mapper/LifeUserExpertOrderMapper.java

@@ -103,13 +103,14 @@ public interface LifeUserExpertOrderMapper extends BaseMapper<LifeUserExpertOrde
     void updateButton(@Param("firstButton") String firstButton,@Param("endButton") String endButton,@Param("orderNo") String orderNo);
 
 
-    @Select(
-            "select   order.* ,info.info_name,user.real_name,user.user_phone,img.promote_type, "+
-                    "from life_user_expert_order order " +
-                    "left join store_info info on info.id = order.store_id " +
-                    "left join life_user_expert expert on expert.id = order.expert_id " +
-                    "left join life_user user on user.id = expert.user_id " +
-                    "left join expert_img img on img.user_id = expert.user_id " +
-                    "${ew.customSqlSegment}")
+
+    @Select("SELECT ccc.* ,info.store_name,user.real_name,user.user_phone,package.name " +
+            "FROM life_user_expert_order ccc " +
+            "LEFT JOIN store_info info on info.id = ccc.store_id " +
+            "left join life_user_expert expert on expert.id = ccc.expert_id " +
+            "left join life_user user on user.id = expert.user_id " +
+            "left join life_promotion_package package on package.id = ccc.package_id " +
+            " ${ew.customSqlSegment}")
+
     List<LifeUserExpertOrderVo> getAdvancePaymentList(@Param(Constants.WRAPPER) QueryWrapper<LifeUserExpertVo> wrapper);
 }

+ 10 - 0
alien-entity/src/main/java/shop/alien/mapper/second/SecondRiskControlRecordMapper.java

@@ -0,0 +1,10 @@
+package shop.alien.mapper.second;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import shop.alien.entity.second.SecondRiskControlRecord;
+
+/**
+ * 二手商品风控记录映射器
+ */
+public interface SecondRiskControlRecordMapper extends BaseMapper<SecondRiskControlRecord> {
+}

+ 1 - 2
alien-entity/src/main/resources/mapper/ExpertImgMapper.xml

@@ -16,13 +16,12 @@
         <result column="add_explanation" property="addExplanation" />
         <result column="created_time" property="createdTime" />
         <result column="updated_time" property="updatedTime" />
-        <result column="promote_type" property="promoteType" />
 
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, expert_id ,expert_code,user_id, delete_flag,img_type, img_description, img_sort, img_url,add_explanation,created_time, updated_time,promote_type
+        id, expert_id ,expert_code,user_id, delete_flag,img_type, img_description, img_sort, img_url,add_explanation,created_time, updated_time
     </sql>
 
 </mapper>

+ 23 - 0
alien-entity/src/main/resources/mapper/LifeUserDynamicsMapper.xml

@@ -88,4 +88,27 @@
         GROUP by dyna1.id order by dyna1.top_status desc, dyna1.top_time desc
     </select>
 
+    <select id="getExpertDynamicsDetail" resultType="shop.alien.entity.store.vo.LifeUserDynamicsVo">
+        SELECT
+        dy.*,
+        info.score_avg as scoreAvg,
+        info.store_name as storeName,
+        COUNT(comment.id) AS commentCount
+        FROM
+        life_user_dynamics AS dy
+        INNER JOIN life_user_expert_order AS expertOrder
+        ON dy.business_id = expertOrder.id
+        AND expertOrder.delete_flag = 0
+        INNER JOIN store_info AS info
+        ON expertOrder.store_id = info.id
+        AND info.delete_flag = 0
+        LEFT JOIN store_comment AS comment
+        ON comment.store_id = info.id
+        AND comment.delete_flag = 0
+        AND comment.business_type in ( 5 )
+        WHERE
+        dy.id = #{id}
+        AND dy.delete_flag = 0
+    </select>
+
 </mapper>

+ 2 - 1
alien-entity/src/main/resources/mapper/LifeUserExpertMapper.xml

@@ -18,11 +18,12 @@
         <result column="review_time" property="reviewTime" />
         <result column="commission_rate" property="commissionRate" />
         <result column="advance_rate" property="advanceRate" />
+        <result column="promote_type" property="promoteType" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, user_id, expert_code, delete_flag, created_time, created_user_id, updated_time, updated_user_id,expert_status, add_explanation,refuse_because,review_time,commission_rate,advance_rate
+        id, user_id, expert_code, delete_flag, created_time, created_user_id, updated_time, updated_user_id,expert_status, add_explanation,refuse_because,review_time,commission_rate,advance_rate,promote_type
     </sql>
 
 </mapper>

+ 3 - 2
alien-entity/src/main/resources/mapper/LifeUserExpertOrderMapper.xml

@@ -25,13 +25,14 @@
         <result column="created_user_id" property="createdUserId" />
         <result column="updated_time" property="updatedTime" />
         <result column="updated_user_id" property="updatedUserId" />
-        <result column="first_funds_button" property="firstFundsButton" />
+        <result column="advance_payment_status" property="advancePaymentStatus" />
         <result column="end_funds_button" property="endFundsButton" />
+        <result column="reason_refusal" property="reasonRefusal" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, order_id, expert_id, package_id , store_id, order_money, account_money, order_time, complete_time, first_payment_time, final_payment_time, order_play_count, order_gmv, actual_gmv, status, delete_flag, created_time, created_user_id, updated_time, updated_user_id, first_funds_button, end_funds_button
+        id, order_id, expert_id, package_id , store_id, order_money, account_money, order_time, complete_time, first_payment_time, final_payment_time, order_play_count, order_gmv, actual_gmv, status, delete_flag, created_time, created_user_id, updated_time, updated_user_id, advance_payment_status, end_funds_button ,reason_refusal
     </sql>
 
 </mapper>

+ 2 - 0
alien-gateway/src/main/java/shop/alien/gateway/AlienGatewayApplication.java

@@ -3,6 +3,7 @@ package shop.alien.gateway;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.ComponentScan;
 
 /**
@@ -14,6 +15,7 @@ import org.springframework.context.annotation.ComponentScan;
  */
 @ComponentScan({"shop.alien.gateway.*"})
 @MapperScan({"shop.alien.gateway.mapper"})
+@EnableFeignClients(basePackages = "shop.alien.gateway.feign")
 @SpringBootApplication
 public class AlienGatewayApplication {
 

+ 25 - 0
alien-gateway/src/main/java/shop/alien/gateway/feign/SecondServiceFeign.java

@@ -0,0 +1,25 @@
+package shop.alien.gateway.feign;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient(name = "alien-second", url = "${feign.second.url:}")
+public interface SecondServiceFeign {
+    
+    /**
+     * 记录风控数据
+     *
+     * @param userId     用户ID
+     * @param ruleType   规则类型 1:洗钱嫌疑 2:账号异常 3:交易欺诈 4:异常发布
+     * @param ruleName   规则名称
+     * @param businessId 业务ID
+     * @param detailInfo 详细信息(JSON格式)
+     */
+    @PostMapping("/riskControl/record")
+    void recordRiskControlData(@RequestParam("userId") Integer userId,
+                               @RequestParam("ruleType") Integer ruleType,
+                               @RequestParam("ruleName") String ruleName,
+                               @RequestParam("businessId") Integer businessId,
+                               @RequestParam("detailInfo") String detailInfo);
+}

+ 3 - 2
alien-job/src/main/java/shop/alien/job/store/StoreMembershipCardJob.java

@@ -1,6 +1,7 @@
 package shop.alien.job.store;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xxl.job.core.context.XxlJobHelper;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -129,7 +130,7 @@ public class StoreMembershipCardJob {
             if (null != storeUser.getLogoutTime()) {
                 // 获取申请注销时间
                 Date logoutTime = storeUser.getLogoutTime();
-                // 获取申请注销 8 天后的时间
+                // 获取申请注销 8(7+1) 天后的时间 防止实际时间不到7天被删除 所以实际删除时间为申请注销时间往后推8天
                 Calendar calendar = Calendar.getInstance();
                 calendar.setTime(logoutTime);
                 calendar.add(Calendar.DAY_OF_YEAR, 8);
@@ -150,7 +151,7 @@ public class StoreMembershipCardJob {
             if (null != storeInfo.getLogoutTime()) {
                 // 获取申请注销时间
                 Date logoutTime = storeInfo.getLogoutTime();
-                // 获取申请注销 8 天后的时间
+                // 获取申请注销 8(7+1) 天后的时间 防止实际时间不到7天被删除 所以实际删除时间为申请注销时间往后推8天
                 Calendar calendar = Calendar.getInstance();
                 calendar.setTime(logoutTime);
                 calendar.add(Calendar.DAY_OF_YEAR, 8);

+ 34 - 0
alien-second/src/main/java/shop/alien/second/controller/RiskControlController.java

@@ -0,0 +1,34 @@
+package shop.alien.second.controller;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import shop.alien.second.service.RiskControlService;
+
+@RestController
+@RequestMapping("/riskControl")
+@RequiredArgsConstructor
+public class RiskControlController {
+    
+    private final RiskControlService riskControlService;
+    
+    /**
+     * 记录风控数据
+     *
+     * @param userId     用户ID
+     * @param ruleType   规则类型 1:洗钱嫌疑 2:账号异常 3:交易欺诈 4:异常发布
+     * @param ruleName   规则名称
+     * @param businessId 业务ID
+     * @param detailInfo 详细信息(JSON格式)
+     */
+    @PostMapping("/record")
+    public void recordRiskControlData(@RequestParam("userId") Integer userId,
+                                      @RequestParam("ruleType") Integer ruleType,
+                                      @RequestParam("ruleName") String ruleName,
+                                      @RequestParam("businessId") Integer businessId,
+                                      @RequestParam("detailInfo") String detailInfo) {
+        riskControlService.recordRiskControlData(userId, ruleType, ruleName, businessId, detailInfo);
+    }
+}

+ 25 - 0
alien-second/src/main/java/shop/alien/second/service/RiskControlService.java

@@ -0,0 +1,25 @@
+package shop.alien.second.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import shop.alien.entity.second.SecondRiskControlRecord;
+
+/**
+ * 风控服务接口
+ */
+public interface RiskControlService extends IService<SecondRiskControlRecord> {
+    
+    /**
+     * 记录风控数据
+     *
+     * @param userId     用户ID
+     * @param ruleType   规则类型 1:洗钱嫌疑 2:账号异常 3:交易欺诈 4:异常发布
+     * @param ruleName   规则名称
+     * @param businessId 业务ID
+     * @param detailInfo 详细信息(JSON格式)
+     */
+    void recordRiskControlData(Integer userId,
+                               Integer ruleType,
+                               String ruleName,
+                               Integer businessId,
+                               String detailInfo);
+}

+ 56 - 0
alien-second/src/main/java/shop/alien/second/service/impl/RiskControlServiceImpl.java

@@ -0,0 +1,56 @@
+package shop.alien.second.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import shop.alien.entity.second.SecondRiskControlRecord;
+import shop.alien.mapper.second.SecondRiskControlRecordMapper;
+import shop.alien.second.service.RiskControlService;
+
+import java.util.Date;
+
+/**
+ * 风控服务实现类
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class RiskControlServiceImpl extends ServiceImpl<SecondRiskControlRecordMapper, SecondRiskControlRecord> implements RiskControlService {
+
+    private final SecondRiskControlRecordMapper secondRiskControlRecordMapper;
+
+    /**
+     * 记录风控数据
+     *
+     * @param userId     用户ID
+     * @param ruleType   规则类型 1:洗钱嫌疑 2:账号异常 3:交易欺诈 4:异常发布
+     * @param ruleName   规则名称
+     * @param businessId 业务ID
+     * @param detailInfo 详细信息(JSON格式)
+     */
+    @Override
+    public void recordRiskControlData(Integer userId,
+                                       Integer ruleType,
+                                       String ruleName,
+                                       Integer businessId,
+                                       String detailInfo) {
+        try {
+            SecondRiskControlRecord record = new SecondRiskControlRecord();
+            record.setUserId(userId);
+            record.setRuleType(ruleType);
+            record.setRuleName(ruleName);
+            record.setBusinessId(businessId);
+            record.setDetailInfo(detailInfo);
+            record.setCreatedTime(new Date());
+            record.setUpdatedTime(new Date());
+            record.setDeleteFlag(0);
+            record.setCreatedUserId(userId);
+            record.setUpdatedUserId(userId);
+
+            secondRiskControlRecordMapper.insert(record);
+        } catch (Exception e) {
+            log.error("记录风控数据时发生异常: 用户ID={}, 规则类型={},业务id={}", userId, ruleType, businessId, e);
+        }
+    }
+}

+ 43 - 35
alien-second/src/main/java/shop/alien/second/service/impl/SecondGoodsServiceImpl.java

@@ -16,41 +16,29 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import shop.alien.config.properties.RiskControlProperties;
 import shop.alien.entity.SecondVideoTask;
 import shop.alien.entity.second.*;
-import shop.alien.entity.second.SecondTradeRecord;
+import shop.alien.entity.second.enums.SecondGoodsStatusEnum;
 import shop.alien.entity.second.vo.*;
-import shop.alien.entity.second.vo.SecondGoodsDetailVo;
 import shop.alien.entity.store.*;
 import shop.alien.entity.store.vo.LifeUserVo;
 import shop.alien.entity.store.vo.WebSocketVo;
 import shop.alien.mapper.*;
-import shop.alien.mapper.second.SecondGoodsAuditMapper;
-import shop.alien.mapper.second.SecondGoodsMapper;
-import shop.alien.mapper.second.SecondGoodsRecordMapper;
-import shop.alien.mapper.second.SecondTradeRecordMapper;
+import shop.alien.mapper.second.*;
 import shop.alien.second.feign.AlienStoreFeign;
 import shop.alien.second.service.PlatformSecondTradeService;
+import shop.alien.second.service.RiskControlService;
 import shop.alien.second.service.SecondGoodsService;
 import shop.alien.second.service.VideoModerationService;
 import shop.alien.util.common.Constants;
-import shop.alien.entity.second.enums.SecondGoodsStatusEnum;
 import shop.alien.util.common.VideoUtils;
 import shop.alien.util.common.safe.*;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -154,6 +142,11 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
 
     @Autowired
     private RiskControlProperties riskControlProperties;
+    
+    /**
+     * 风控服务
+     */
+    private final RiskControlService riskControlService;
 
     @Override
     public SecondGoodsRecordDetailVo getAdminGoodsRecordDetail(Integer recordId) {
@@ -560,7 +553,7 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
                 // TODO 插入风控记录
 
             }
-            
+
             // 检查用户是否在24小时内发布同类商品超过阈值
             if (!checkUserPublishSameCategoryLimit(goods)) {
                 log.warn("用户 {} 在24小时内发布同类商品次数超过限制", goodsDTO.getUserId());
@@ -613,15 +606,17 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
     private boolean checkUserPublishLimit(SecondGoods goods) {
         // 获取配置的阈值
         int publishLimit = riskControlProperties.getTradeFraud().getPublishCount24h();
+        // 时间窗口(小时)
+        int timeWindowHours = riskControlProperties.getTradeFraud().getTimeWindowHours();
 
-        // 计算24小时前的时间
-        Date twentyFourHoursAgo = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000L);
+        // 计算时间窗口前的时间
+        Date timeWindowStart = new Date(System.currentTimeMillis() - timeWindowHours * 60 * 60 * 1000L);
 
         // 查询用户在24小时内发布的商品数量
         LambdaQueryWrapper<SecondGoodsRecord> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(SecondGoodsRecord::getUserId, goods.getUserId())
                 .eq(SecondGoodsRecord::getId, goods.getId())
-                .ge(SecondGoodsRecord::getReleaseTime, twentyFourHoursAgo)
+                .ge(SecondGoodsRecord::getReleaseTime, timeWindowStart)
                 .in(SecondGoodsRecord::getGoodsStatus,
                         SecondGoodsStatusEnum.LISTED.getCode(),
                         SecondGoodsStatusEnum.SOLD.getCode());
@@ -633,33 +628,46 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
     }
 
     /**
-     * 检查用户在24小时内发布同类商品的数量是否超过限制
+     * 检查用户在指定时间窗口内发布同类商品的数量是否超过限制
      * @param goods 商品信息
      * @return 是否未超过限制
      */
     private boolean checkUserPublishSameCategoryLimit(SecondGoods goods) {
         // 获取配置的阈值
         int sameCategoryLimit = riskControlProperties.getAbnormalPublish().getSameCategoryCount24h();
+        int timeWindowHours = riskControlProperties.getAbnormalPublish().getTimeWindowHours();
         
-        // 计算24小时前的时间
-        Date twentyFourHoursAgo = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000L);
+        // 计算时间窗口前的时间
+        Date timeWindowStart = new Date(System.currentTimeMillis() - timeWindowHours * 60 * 60 * 1000L);
         
-        // 查询用户在24小时内发布同类商品的数量
-        LambdaQueryWrapper<SecondGoodsRecord> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(SecondGoodsRecord::getUserId, goods.getUserId())
-                .eq(SecondGoodsRecord::getCategoryOneId, goods.getCategoryOneId())
-                .eq(SecondGoodsRecord::getCategoryTwoId, goods.getCategoryTwoId())
-                .ge(SecondGoodsRecord::getReleaseTime, twentyFourHoursAgo)
-                .in(SecondGoodsRecord::getGoodsStatus,
+        // 查询用户在时间窗口内发布同类商品的数量
+        LambdaQueryWrapper<SecondGoods> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SecondGoods::getUserId, goods.getUserId())
+                .eq(SecondGoods::getCategoryOneId, goods.getCategoryOneId())
+                .eq(SecondGoods::getCategoryTwoId, goods.getCategoryTwoId())
+                .ge(SecondGoods::getReleaseTime, timeWindowStart)
+                .in(SecondGoods::getGoodsStatus,
                         SecondGoodsStatusEnum.LISTED.getCode(),
                         SecondGoodsStatusEnum.SOLD.getCode());
-        
-        int sameCategoryCount = secondGoodsRecordMapper.selectCount(queryWrapper);
-        
-        // 如果发布数量超过限制,返回false
-        return sameCategoryCount < sameCategoryLimit;
+
+        // 获取发布
+        List<SecondGoods> secondGoodsList = list(queryWrapper);
+        // 提取商品id集合
+        List<Integer> secondGoodsIds = secondGoodsList.stream().map(SecondGoods::getId).collect(Collectors.toList());
+        // 转成json
+        String json = JSON.toJSONString(secondGoodsIds);
+        // 获取实际发布数量
+        int sameCategoryCount = secondGoodsList.size();
+        // 如果发布数量超过限制,记录风控数据
+        if (sameCategoryCount >= sameCategoryLimit) {
+            riskControlService.recordRiskControlData(goods.getUserId(), 4, "异常发布-同类商品发布频率", goods.getId(),json);
+            return false;
+        }
+        return true;
     }
 
+
+
     /**
      * 执行内容审核
      * @param goodsDTO 商品信息

+ 22 - 0
alien-store/src/main/java/shop/alien/store/controller/LifeUserDynamicsController.java

@@ -236,4 +236,26 @@ public class LifeUserDynamicsController {
         LifeUserDynamicsVo lifeUserDynamicsVo = lifeUserDynamicsService.getDynamicsDetail(id);
         return R.data(lifeUserDynamicsVo);
     }
+
+    @ApiOperation("达人发布动态详情")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "动态ID", dataType = "Integer", paramType = "query", required = true),})
+    @GetMapping("/getExpertDynamicsDetail")
+    public R<LifeUserDynamicsVo> getExpertDynamicsDetail(@RequestParam() Integer id) {
+        log.info("LifeUserDynamicsController.getDynamicsDetail?id={}", id);
+        LifeUserDynamicsVo lifeUserDynamicsVo = lifeUserDynamicsService.getExpertDynamicsDetail(id);
+        return R.data(lifeUserDynamicsVo);
+    }
+
+
+    @ApiOperation("GVM推荐用户完成支付")
+    @ApiOperationSupport(order = 7)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "expertId", value = "达人动态Id", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "finalPrice", value = "最终付款金额", dataType = "String", paramType = "query", required = true)})
+    @GetMapping("/getOrderGmvUser")
+    public R getOrderGmvUser(@RequestParam() Integer expertId, @RequestParam() String finalPrice) {
+        log.info("LifeUserDynamicsController.getOrderGmvUser?expertId={}&finalPrice={}", expertId, finalPrice);
+        return R.data(lifeUserDynamicsService.countGvm(expertId, finalPrice));
+    }
 }

+ 7 - 5
alien-store/src/main/java/shop/alien/store/controller/LifeUserExpertController.java

@@ -142,17 +142,19 @@ public class LifeUserExpertController {
             @ApiImplicitParam(name = "size", value = "分页条数", dataType = "Integer", paramType = "query", required = true),
             @ApiImplicitParam(name = "realName", value = "真实姓名", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "userPhone", value = "联系电话", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "status", value = "订单状态", dataType = "Integer", paramType = "query"),
-            @ApiImplicitParam(name = "createdTime", value = "下单开始时间", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "endTime", value = "下单结束时间", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "advancePaymentStatus", value = "预付款审核状态", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "orderCreatedTime", value = "下单开始时间", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "orderEndTime", value = "下单结束时间", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "name", value = "套餐名称", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "orderNo", value = "订单编号", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "storeName", value = "商家昵称", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "userId", value = "用户id", dataType = "String", paramType = "query")
 
     })
     @GetMapping("/getAdvancePaymentList")
-    public R<List<LifeUserExpertOrderVo>> getAdvancePaymentList( Integer page, Integer size,String realName, String userPhone, Integer status, String createdTime, String endTime ,String name, Integer userId) {
+    public R<List<LifeUserExpertOrderVo>> getAdvancePaymentList( Integer page, Integer size,String realName, String userPhone, String advancePaymentStatus, String orderCreatedTime, String orderEndTime ,String name, Integer userId) {
         log.info("LifeUserExpertController.getViewDetails?userId={}",userId);
-        return R.data(lifeUserExpertService.getAdvancePaymentList(page, size, realName, userPhone, status, createdTime, endTime, name, userId));
+        return R.data(lifeUserExpertService.getAdvancePaymentList(page, size, realName, userPhone, advancePaymentStatus, orderCreatedTime, orderEndTime, name, userId));
     }
 
 

+ 2 - 1
alien-store/src/main/java/shop/alien/store/controller/StoreUserExpertController.java

@@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.ExpertImg;
+import shop.alien.entity.store.vo.ExpertImgVo;
 import shop.alien.entity.store.vo.LifeUserExpertVo;
 import shop.alien.store.service.StoreUserExpertService;
 
@@ -55,7 +56,7 @@ public class StoreUserExpertController {
 @ApiOperation("申请达人,上传图片以及补充说明")
 @ApiOperationSupport(order = 4)
 @PostMapping("/applyExpert")
-public R<Map<String, String>> applyExpert(@RequestBody ExpertImg expertImgs) {
+public R<Map<String, String>> applyExpert(@RequestBody ExpertImgVo expertImgs) {
     log.info("StoreUserExpertController.applyExpert?expertImgs={}", expertImgs);
     if (null == expertImgs) {
         return R.fail("参数错误");

+ 53 - 0
alien-store/src/main/java/shop/alien/store/service/LifeUserDynamicsService.java

@@ -13,12 +13,15 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 import org.springframework.util.StringUtils;
+import shop.alien.entity.result.R;
 import shop.alien.entity.store.*;
 import shop.alien.entity.store.vo.LifePinglunVo;
 import shop.alien.entity.store.vo.LifeUserDynamicsVo;
+import shop.alien.entity.store.vo.LifeUserOrderVo;
 import shop.alien.entity.store.vo.StoreCommentVo;
 import shop.alien.mapper.*;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -53,6 +56,11 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
 
     private final StoreInfoMapper storeInfoMapper;
 
+    private final LifeUserExpertOrderMapper lifeUserExpertOrderMapper;
+
+    private final PromotionPackageService promotionPackageService;
+
+
     public int addLiulanCount(String id) {
         LambdaUpdateWrapper<LifeUserDynamics> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.eq(LifeUserDynamics::getId, id);
@@ -60,6 +68,7 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
         return lifeUserDynamicsMapper.update(null, lambdaUpdateWrapper);
     }
 
+
     public int setTopStatus(LifeUserDynamicsVo lifeUserDynamicsVo) {
         if(!StringUtils.isEmpty(lifeUserDynamicsVo.getId()) && !StringUtils.isEmpty(lifeUserDynamicsVo.getTopStatus())){
             LambdaUpdateWrapper<LifeUserDynamics> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
@@ -522,4 +531,48 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
         }
         return lifeUserDynamicsVo;
     }
+
+    public LifeUserDynamicsVo getExpertDynamicsDetail(Integer id) {
+        // 查询动态数据并按类型过滤
+        LifeUserDynamicsVo lifeUserDynamicsVo = new LifeUserDynamicsVo();
+        List<LifeUserDynamicsVo> lifeUserDynamicsVoList = lifeUserDynamicsMapper.getExpertDynamicsDetail(id);
+        if(!CollectionUtils.isEmpty(lifeUserDynamicsVoList)){
+            lifeUserDynamicsVo = lifeUserDynamicsVoList.get(0);
+            String imagePath = lifeUserDynamicsVo.getImagePath();
+            if(!StringUtils.isEmpty(imagePath)){
+                List<String> imagePathList = Arrays.asList(imagePath.split(","));
+                lifeUserDynamicsVo.setImagePathList(imagePathList);
+            }
+            //查询动态表中的 gvm和评论数是否满足当前达人订单规定值 都满足修改订单状态为已完成
+            LifeUserExpertOrder lifeUserExpertOrder = lifeUserExpertOrderMapper.selectOne(new LambdaQueryWrapper<LifeUserExpertOrder>().eq(LifeUserExpertOrder :: getId, lifeUserDynamicsVo.getBusinessId()));
+            if(lifeUserExpertOrder != null && lifeUserExpertOrder.getStatus()!= 2){
+                LifePromotionPackage lifePromotionPackage = promotionPackageService.getById(lifeUserExpertOrder.getPackageId());
+                if(lifeUserDynamicsVo.getOrderGmv().compareTo(lifeUserExpertOrder.getOrderGmv()) >= 0 && lifeUserDynamicsVo.getLiulanCount()>=Integer.parseInt(lifePromotionPackage.getPlayCount())){
+                    lifeUserExpertOrder.setStatus(2);
+                    lifeUserExpertOrderMapper.updateById(lifeUserExpertOrder);
+                }
+            }
+
+        }
+        return lifeUserDynamicsVo;
+    }
+
+    public R countGvm(Integer expertId, String finalPrice){
+        LifeUserDynamics lifeUserDynamics = lifeUserDynamicsMapper.selectOne(new LambdaQueryWrapper<LifeUserDynamics>().eq(LifeUserDynamics :: getId, expertId));
+        if(lifeUserDynamics != null){
+           BigDecimal price = new BigDecimal(finalPrice);
+           lifeUserDynamics.setOrderGmv(lifeUserDynamics.getOrderGmv().add(price));
+           lifeUserDynamicsMapper.updateById(lifeUserDynamics);
+        }
+        LifeUserExpertOrder lifeUserExpertOrder = lifeUserExpertOrderMapper.selectOne(new LambdaQueryWrapper<LifeUserExpertOrder>().eq(LifeUserExpertOrder :: getId, lifeUserDynamics.getBusinessId()));
+        if(lifeUserExpertOrder != null && lifeUserExpertOrder.getStatus() != 2){
+            LifePromotionPackage lifePromotionPackage = promotionPackageService.getById(lifeUserExpertOrder.getPackageId());
+            LifeUserDynamics lifeUserDynamics1 = lifeUserDynamicsMapper.selectOne(new LambdaQueryWrapper<LifeUserDynamics>().eq(LifeUserDynamics :: getId, expertId));
+            if(lifeUserDynamics1.getOrderGmv().compareTo(lifeUserExpertOrder.getOrderGmv()) >= 0 && lifeUserDynamics1.getLiulanCount()>=Integer.parseInt(lifePromotionPackage.getPlayCount())){
+                lifeUserExpertOrder.setStatus(2);
+                lifeUserExpertOrderMapper.updateById(lifeUserExpertOrder);
+            }
+        }
+        return R.success("请求成功");
+    }
 }

+ 1 - 1
alien-store/src/main/java/shop/alien/store/service/LifeUserExpertService.java

@@ -46,5 +46,5 @@ public interface LifeUserExpertService extends IService<LifeUserExpert> {
 
     LifeUserExpertVo getViewDetails(Integer expertId);
 
-    List<LifeUserExpertOrderVo> getAdvancePaymentList(Integer page, Integer size,String realName, String userPhone, Integer status, String createdTime, String endTime ,String name, Integer userId);
+    List<LifeUserExpertOrderVo> getAdvancePaymentList(Integer page, Integer size,String realName, String userPhone, String advancePaymentStatus, String orderCreatedTime, String orderEndTime ,String name, Integer userId);
 }

+ 2 - 1
alien-store/src/main/java/shop/alien/store/service/StoreUserExpertService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.ExpertImg;
 import shop.alien.entity.store.LifeUserExpert;
+import shop.alien.entity.store.vo.ExpertImgVo;
 import shop.alien.entity.store.vo.LifeUserExpertVo;
 
 import java.util.List;
@@ -18,5 +19,5 @@ public interface StoreUserExpertService extends IService<LifeUserExpert> {
     List<LifeUserExpertVo> ifExpert(String id);
 
 
-    Map<String, String> getapplyExpert(ExpertImg expertImgs);
+    Map<String, String> getapplyExpert(ExpertImgVo expertImgs);
 }

+ 14 - 12
alien-store/src/main/java/shop/alien/store/service/impl/LifeUserExpertServiceImpl.java

@@ -390,27 +390,29 @@ public class LifeUserExpertServiceImpl extends ServiceImpl<LifeUserExpertMapper,
         if (CollectionUtils.isEmpty(list)){
             return expertVo;
         }
-        String  promoteType=list.get(0).getPromoteType();
-        expertVo.setPromoteType(promoteType);
         return expertVo;
     }
 
     @Override
-    public List<LifeUserExpertOrderVo> getAdvancePaymentList(Integer page, Integer size,String realName, String userPhone, Integer status, String createdTime, String endTime ,String name, Integer userId) {
+    public List<LifeUserExpertOrderVo> getAdvancePaymentList(Integer page, Integer size,String realName, String userPhone, String advancePaymentStatus, String orderCreatedTime, String orderEndTime ,String name, Integer userId) {
         QueryWrapper<LifeUserExpertVo> wrapper = new QueryWrapper<>();
-        wrapper.eq("order.delete_flag", 0);
+        wrapper.eq("ccc.delete_flag", 0);
+        wrapper.eq("user.delete_flag", 0);
+        wrapper.eq("info.delete_flag",0);
+        wrapper.eq("expert.delete_flag",0);
+        wrapper.eq("package.delete_flag",0);
         wrapper.like(StringUtils.isNotEmpty(realName), "user.real_name", realName);
         wrapper.like(StringUtils.isNotEmpty(userPhone), "user.user_phone", userPhone);
-        wrapper.eq(status != null, "order.status", status);
-        if (createdTime != null && !createdTime.isEmpty()){
-            wrapper.gt("order.created_time", createdTime);
+        if (advancePaymentStatus != null && !advancePaymentStatus.isEmpty()){
+            wrapper.eq("ccc.advance_payment_status", advancePaymentStatus);
         }
-        if (endTime != null && !endTime.isEmpty()) {
-            wrapper.lt("order.created_time", endTime);
+        if (orderCreatedTime != null && !orderCreatedTime.isEmpty()){
+            wrapper.gt("ccc.order_time", orderCreatedTime);
         }
-        List<LifeUserExpertOrderVo> a=lifeUserExpertOrderMapper.getAdvancePaymentList(wrapper);
-
-        return null;
+        if (orderEndTime != null && !orderEndTime.isEmpty()) {
+            wrapper.lt("ccc.order_time", orderEndTime);
+        }
+        return lifeUserExpertOrderMapper.getAdvancePaymentList(wrapper);
     }
 
 }

+ 31 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreCommentServiceImpl.java

@@ -195,6 +195,9 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
             if (StringUtils.isNotEmpty(records.get(i).getPhoneId())) {
                 if (records.get(i).getPhoneId().contains("store_")) {
                     storeCommentVo.setStoreUserFlag(0);
+                    StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getStoreId, records.get(i).getStoreId()));
+                    storeCommentVo.setStoreUserName(storeUser.getName());
+                    storeCommentVo.setStoreUserImg(storeUser.getHeadImg());
                 } else {
                     storeCommentVo.setStoreUserFlag(1);
                 }
@@ -248,8 +251,36 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
 //                        .eq(null != businessId && 6 == businessId, "a.business_id", businessId)
                         .eq("a.delete_flag", 0).eq("a.reply_id", child.getId()).orderByDesc("a.created_time");
                 List<StoreCommentVo> childComment2List = storeCommentMapper.getCommentList(childQueryCommentWrapper);
+
+                //商家用户
+                for (StoreCommentVo commentVo : childComment2List) {
+                    if (StringUtils.isNotEmpty(commentVo.getPhoneId())) {
+                        if (commentVo.getPhoneId().contains("store_")) {
+                            commentVo.setStoreUserFlag(0);
+                            StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getStoreId, child.getStoreId()));
+                            commentVo.setStoreUserName(storeUser.getName());
+                            commentVo.setStoreUserImg(storeUser.getHeadImg());
+                        } else {
+                            commentVo.setStoreUserFlag(1);
+                        }
+                    }
+                }
+
                 child.setStoreComment(childComment2List);
                 storeCommentVo.setCommitCount(storeCommentVo.getCommitCount() + childComment2List.size());
+
+                //商家用户
+                if (StringUtils.isNotEmpty(child.getPhoneId())) {
+                    if (child.getPhoneId().contains("store_")) {
+                        child.setStoreUserFlag(0);
+                        StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getStoreId, child.getStoreId()));
+                        child.setStoreUserName(storeUser.getName());
+                        child.setStoreUserImg(storeUser.getHeadImg());
+                    } else {
+                        child.setStoreUserFlag(1);
+                    }
+                }
+
             });
             //筛选商家评论
             List<StoreCommentVo> storeCommentList = new ArrayList<>();

+ 3 - 2
alien-store/src/main/java/shop/alien/store/service/impl/StoreUserExpertServiceImpl.java

@@ -10,6 +10,7 @@ import shop.alien.entity.store.ExpertImg;
 import shop.alien.entity.store.LifeNotice;
 import shop.alien.entity.store.LifeUser;
 import shop.alien.entity.store.LifeUserExpert;
+import shop.alien.entity.store.vo.ExpertImgVo;
 import shop.alien.entity.store.vo.LifeUserExpertVo;
 import shop.alien.mapper.ExpertImgMapper;
 import shop.alien.mapper.LifeNoticeMapper;
@@ -203,7 +204,7 @@ public class StoreUserExpertServiceImpl extends ServiceImpl<LifeUserExpertMapper
     }
 
     @Override
-    public Map<String, String> getapplyExpert(ExpertImg expertImgs) {
+    public Map<String, String> getapplyExpert(ExpertImgVo expertImgs) {
         Map<String, String> result = new HashMap<>();
         //先对expertImgs进行判断若为空直接返回若不为空则进行保存操作
         if (expertImgs == null) {
@@ -217,6 +218,7 @@ public class StoreUserExpertServiceImpl extends ServiceImpl<LifeUserExpertMapper
         expert.setUpdatedTime(new Date());
         expert.setExpertStatus(1);
         expert.setAddExplanation(expertImgs.getAddExplanation());
+        expert.setPromoteType(expertImgs.getPromoteType());
         lifeUserExpertMapper.insert(expert);
         Integer insertedId = expert.getId();
         for (String imgUrl : expertImgs.getImgUrl().split(",")) {
@@ -228,7 +230,6 @@ public class StoreUserExpertServiceImpl extends ServiceImpl<LifeUserExpertMapper
             expertImg.setExpertId(insertedId);
             expertImg.setImgType(0);
             expertImg.setUserId(expertImgs.getUserId());
-            expertImg.setPromoteType(expertImgs.getPromoteType());
             expertImgMapper.insert(expertImg);
         }
         //发送消息