瀏覽代碼

Merge remote-tracking branch 'origin/sit' into uat

ssk 1 月之前
父節點
當前提交
6075407b60
共有 54 個文件被更改,包括 823 次插入105 次删除
  1. 92 0
      alien-entity/src/main/java/shop/alien/entity/store/ExpertImg.java
  2. 8 0
      alien-entity/src/main/java/shop/alien/entity/store/LifeUserExpert.java
  3. 16 0
      alien-entity/src/main/java/shop/alien/entity/store/LifeUserExpertOrder.java
  4. 2 0
      alien-entity/src/main/java/shop/alien/entity/store/LifeUserOrder.java
  5. 4 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreCashOutRecord.java
  6. 3 0
      alien-entity/src/main/java/shop/alien/entity/store/dto/LifeUserOrderDto.java
  7. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeGroupBuyThaliVo.java
  8. 3 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserDynamicsVo.java
  9. 16 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserExpertOrderVo.java
  10. 5 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserExpertVo.java
  11. 3 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserOrderVo.java
  12. 3 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/ManagementInfoVo.java
  13. 20 0
      alien-entity/src/main/java/shop/alien/mapper/ExpertImgMapper.java
  14. 2 2
      alien-entity/src/main/java/shop/alien/mapper/LifeUserDynamicsMapper.java
  15. 12 3
      alien-entity/src/main/java/shop/alien/mapper/LifeUserExpertMapper.java
  16. 20 2
      alien-entity/src/main/java/shop/alien/mapper/LifeUserExpertOrderMapper.java
  17. 1 1
      alien-entity/src/main/java/shop/alien/mapper/LifeUserOrderMapper.java
  18. 2 0
      alien-entity/src/main/java/shop/alien/mapper/ManagementInfoMapper.java
  19. 5 0
      alien-entity/src/main/java/shop/alien/mapper/StoreInfoMapper.java
  20. 28 0
      alien-entity/src/main/resources/mapper/ExpertImgMapper.xml
  21. 4 2
      alien-entity/src/main/resources/mapper/LifeUserDynamicsMapper.xml
  22. 3 1
      alien-entity/src/main/resources/mapper/LifeUserExpertMapper.xml
  23. 6 3
      alien-entity/src/main/resources/mapper/LifeUserExpertOrderMapper.xml
  24. 3 2
      alien-entity/src/main/resources/mapper/LifeUserOrderMapper.xml
  25. 30 0
      alien-entity/src/main/resources/mapper/ManagementInfoMapper.xml
  26. 22 0
      alien-gateway/src/main/resources/bootstrap-uat.yml
  27. 1 1
      alien-job/src/main/java/shop/alien/job/feign/SecondGoodsFeign.java
  28. 22 0
      alien-job/src/main/resources/bootstrap-uat.yml
  29. 2 7
      alien-second/src/main/java/shop/alien/second/controller/SecondGoodsController.java
  30. 7 0
      alien-second/src/main/java/shop/alien/second/service/SecondGoodsService.java
  31. 102 19
      alien-second/src/main/java/shop/alien/second/service/impl/SecondGoodsServiceImpl.java
  32. 22 0
      alien-second/src/main/resources/bootstrap-uat.yml
  33. 8 4
      alien-store/src/main/java/shop/alien/store/controller/LifePromotionPackageController.java
  34. 4 4
      alien-store/src/main/java/shop/alien/store/controller/LifeUserDynamicsController.java
  35. 23 6
      alien-store/src/main/java/shop/alien/store/controller/LifeUserExpertController.java
  36. 15 3
      alien-store/src/main/java/shop/alien/store/controller/LifeUserExpertOrderController.java
  37. 10 0
      alien-store/src/main/java/shop/alien/store/controller/ManagementInfoController.java
  38. 15 0
      alien-store/src/main/java/shop/alien/store/controller/StoreUserExpertController.java
  39. 20 13
      alien-store/src/main/java/shop/alien/store/service/LifeUserDynamicsService.java
  40. 3 1
      alien-store/src/main/java/shop/alien/store/service/LifeUserExpertOrderService.java
  41. 3 1
      alien-store/src/main/java/shop/alien/store/service/LifeUserExpertService.java
  42. 2 0
      alien-store/src/main/java/shop/alien/store/service/LifeUserOrderService.java
  43. 2 0
      alien-store/src/main/java/shop/alien/store/service/ManagementInfoService.java
  44. 2 1
      alien-store/src/main/java/shop/alien/store/service/PromotionPackageService.java
  45. 5 0
      alien-store/src/main/java/shop/alien/store/service/StoreUserExpertService.java
  46. 4 3
      alien-store/src/main/java/shop/alien/store/service/impl/LifeGroupBuyServiceImpl.java
  47. 48 2
      alien-store/src/main/java/shop/alien/store/service/impl/LifeUserExpertOrderServiceImpl.java
  48. 61 11
      alien-store/src/main/java/shop/alien/store/service/impl/LifeUserExpertServiceImpl.java
  49. 5 0
      alien-store/src/main/java/shop/alien/store/service/impl/ManagementInfoServiceImpl.java
  50. 6 2
      alien-store/src/main/java/shop/alien/store/service/impl/PromotionPackageServiceImpl.java
  51. 24 7
      alien-store/src/main/java/shop/alien/store/service/impl/StoreIncomeDetailsRecordServiceImpl.java
  52. 6 2
      alien-store/src/main/java/shop/alien/store/service/impl/StoreInfoServiceImpl.java
  53. 65 0
      alien-store/src/main/java/shop/alien/store/service/impl/StoreUserExpertServiceImpl.java
  54. 22 0
      alien-store/src/main/resources/bootstrap-uat.yml

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

@@ -0,0 +1,92 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 达人图片表
+ * </p>
+ *
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ExpertImg对象", description="达人图片表")
+public class ExpertImg extends Model<ExpertImg> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "达人id")
+    @TableField(value = "expert_id")
+    private Integer expertId;
+
+    @ApiModelProperty(value = "达人码")
+    @TableField("expert_code")
+    private Integer expertCode;
+
+    @ApiModelProperty(value = "用户id(life_user表id)")
+    @TableField("user_id")
+    private Integer userId;
+
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+
+    @ApiModelProperty(value = "图片类型 0 申请成为达人上传的图片")
+    @TableField("img_type")
+    private Integer imgType;
+
+    @ApiModelProperty(value = "图片描述")
+    @TableField("img_description")
+    private String imgDescription;
+
+    @ApiModelProperty(value = "图片排序")
+    @TableField("img_sort")
+    private Integer imgSort;
+
+    @ApiModelProperty(value = "图片路径")
+    @TableField("img_url")
+    private String imgUrl;
+
+    @ApiModelProperty(value = "补充说明")
+    @TableField(value = "add_explanation")
+    private String addExplanation;
+
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    private Date createdTime;
+
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    private Date updatedTime;
+
+
+    @ApiModelProperty(value = "推广类型")
+    @TableField(value = "promote_type")
+    private String promoteType;
+
+
+
+
+
+
+
+
+}

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

@@ -66,4 +66,12 @@ public class LifeUserExpert extends Model<LifeUserExpert> {
     @TableField(value = "updated_user_id", fill = FieldFill.INSERT_UPDATE)
     private Integer updatedUserId;
 
+    @ApiModelProperty(value = "审核状态  0审核通过 1审核中 2审核未通过")
+    @TableField(value = "expert_status")
+    private Integer expertStatus;
+
+    @ApiModelProperty(value = "补充说明 ")
+    @TableField(value = "add_explanation")
+    private String addExplanation;
+
 }

+ 16 - 0
alien-entity/src/main/java/shop/alien/entity/store/LifeUserExpertOrder.java

@@ -46,6 +46,10 @@ public class LifeUserExpertOrder extends Model<LifeUserExpertOrder> {
     @TableField("store_id")
     private Integer storeId;
 
+    @ApiModelProperty(value = "推广套餐id")
+    @TableField("package_id")
+    private Integer packageId;
+
     @ApiModelProperty(value = "订单金额")
     @TableField("order_money")
     private BigDecimal orderMoney;
@@ -78,6 +82,10 @@ public class LifeUserExpertOrder extends Model<LifeUserExpertOrder> {
     @TableField("order_gmv")
     private BigDecimal orderGmv;
 
+    @ApiModelProperty(value = "临时测试")
+    @TableField("actual_gmv")
+    private BigDecimal actualGmv;
+
     @ApiModelProperty(value = "状态(1-待完成  2-已完成)")
     @TableField("status")
     private Integer status;
@@ -103,4 +111,12 @@ 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 = "end_funds_button")
+    private String endFundsButton;
+
 }

+ 2 - 0
alien-entity/src/main/java/shop/alien/entity/store/LifeUserOrder.java

@@ -29,6 +29,8 @@ public class LifeUserOrder {
 
     private String orderNo;
 
+    private String orderStr;
+
     private Integer status;
 
     private String price;

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

@@ -113,4 +113,8 @@ public class StoreCashOutRecord extends Model<StoreCashOutRecord> {
     @ApiModelProperty(value = "结算账户")
     @TableField(value = "settlement_account")
     private String settlementAccount;
+
+    @ApiModelProperty(value = "拒绝原因")
+    @TableField(value = "approve_fail_reason")
+    private String approveFailReason;
 }

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

@@ -30,6 +30,9 @@ public class LifeUserOrderDto {
     @ApiModelProperty(value = "订单编号")
     private String orderNo;
 
+    @ApiModelProperty(value = "订单字符串")
+    private String orderStr;
+
     @ApiModelProperty(value = "优惠券券id(life_discount_coupon_user)")
     private String yhquanId;
 

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeGroupBuyThaliVo.java

@@ -61,7 +61,7 @@ public class LifeGroupBuyThaliVo {
     @ApiModelProperty(value = "图片id")
     @TableField("image_id")
     private String imageId;
-    private String imageValueStr;
+    private List<String> imageValueStr;
 
     /**
      * 团购名称

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

@@ -65,4 +65,7 @@ public class LifeUserDynamicsVo extends LifeUserDynamics {
 
     @ApiModelProperty(value = "动态图片列表")
     private List<String> imagePathList;
+
+    @ApiModelProperty(value = "商家名称")
+    private String storeName;
 }

+ 16 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserExpertOrderVo.java

@@ -59,5 +59,21 @@ public class LifeUserExpertOrderVo extends LifeUserExpertOrder {
     @ApiModelProperty(value = "进店浏览数")
     private Integer storeVisitViewCount;
 
+    @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;
+
+    @ApiModelProperty(value = "申请尾款按钮")
+    @TableField(value = "end_funds_button")
+    private String endFundsButton;
 
 }

+ 5 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserExpertVo.java

@@ -1,5 +1,6 @@
 package shop.alien.entity.store.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -97,4 +98,8 @@ public class LifeUserExpertVo extends LifeUserExpert {
 
     @ApiModelProperty(value = "性别占比")
     private List<Map<String, String>> sexPercentageList;
+
+    @ApiModelProperty(value = "审核状态  0审核通过 1审核中 2审核未通过")
+    private Integer expertStuats;
+
 }

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

@@ -134,6 +134,9 @@ public class LifeUserOrderVo {
     @ApiModelProperty(value = "预约规则")
     private String reservationRules;
 
+    @ApiModelProperty(value = "订单字符串")
+    private String orderStr;
+
     @ApiModelProperty(value = "营业时间类型")
     private String businessType;
     @ApiModelProperty(value = "营业日")

+ 3 - 1
alien-entity/src/main/java/shop/alien/entity/store/vo/ManagementInfoVo.java

@@ -83,7 +83,7 @@ public class ManagementInfoVo {
     private Integer orderTransactionNumber;
     @ApiModelProperty(value = "详情-核验金额")
     private Double verificationAmount;
-    @ApiModelProperty(value = "提现申请-申请类型")
+    @ApiModelProperty(value = "提现申请-申请类型0:手动, 1:自动")
     private Integer cashOutType;
     @ApiModelProperty(value = "提现申请-申请类型名称")
     private String cashOutTypeName;
@@ -147,4 +147,6 @@ public class ManagementInfoVo {
     private Date payTime;
     @ApiModelProperty(value = "订单id")
     private Integer orderId;
+    @ApiModelProperty(value = "拒绝原因")
+    private String approveFailReason;
 }

+ 20 - 0
alien-entity/src/main/java/shop/alien/mapper/ExpertImgMapper.java

@@ -0,0 +1,20 @@
+package shop.alien.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import shop.alien.entity.store.ExpertImg;
+
+
+
+/**
+ * <p>
+ * 用户达人表 Mapper 接口
+ * </p>
+ *
+ * @author ssk
+ * @since 2025-02-19
+ */
+public interface ExpertImgMapper extends BaseMapper<ExpertImg> {
+
+
+}

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

@@ -17,9 +17,9 @@ public interface LifeUserDynamicsMapper extends BaseMapper<LifeUserDynamics> {
     @Select("select dyna1.* from (with dynamice as( " +
             "    select id, top_status, top_time,  title, phone_id phoneId, context, image_path, address,address_name,address_context, liulan_count, dianzan_count, type, created_time, substring_index(phone_id, '_', 1) flag, substring_index(phone_id, '_', -1) phone, draft , address_province" +
             "    from life_user_dynamics " +
-            "    where delete_flag = 0 and draft = 0 order by created_time desc" +
+            "    where delete_flag = 0  and enable_status = 0 and draft = 0 order by created_time desc" +
             ") " +
-            "select dynamice.*, user.nick_name userName, user.head_img userImage, info.id storeUserId, user.id storeOrUserId, 0 isExpert " +
+            "select dynamice.*, info.store_name userName, user.head_img userImage, info.id storeUserId, user.id storeOrUserId, 0 isExpert " +
             "from dynamice " +
             "join store_user user on dynamice.phone = user.phone and user.delete_flag = 0 " +
             "join store_info info on info.id = user.store_id and info.delete_flag = 0 " +

+ 12 - 3
alien-entity/src/main/java/shop/alien/mapper/LifeUserExpertMapper.java

@@ -42,7 +42,7 @@ public interface LifeUserExpertMapper extends BaseMapper<LifeUserExpert> {
             "    where delete_flag = 0 " +
             "    group by expert_id " +
             ") " +
-            "select expert.id, expert.expert_code, user.user_name, ifnull(fans.num, 0) fansNum, ifnull(works.worksNum, 0) worksNum, ifnull(works.likeNum, 0) likeNum, ifnull(works.playNum, 0) playNum, " +
+            "select expert.id, expert.expert_code,expert.expert_status, user.user_phone,user.user_name, ifnull(fans.num, 0) fansNum, ifnull(works.worksNum, 0) worksNum, ifnull(works.likeNum, 0) likeNum, ifnull(works.playNum, 0) playNum, " +
             "       ifnull(orders.orderMoney, 0) orderMoney, ifnull(orders.accountMoney, 0) accountMoney, (ifnull(orders.orderMoney, 0) - ifnull(orders.accountMoney, 0)) pendMoney " +
             "from life_user_expert expert " +
             "join life_user user on user.id = expert.user_id " +
@@ -155,7 +155,7 @@ public interface LifeUserExpertMapper extends BaseMapper<LifeUserExpert> {
     List<LifeUserExpertVo> getFanPortrait(Integer expertId);
 
     @Select("select expert.id, expert.expert_code, " +
-            "expert.delete_flag, expert.created_time, expert.created_user_id, expert.updated_time, expert.updated_user_id," +
+            "expert.delete_flag, expert.created_time, expert.expert_status,expert.created_user_id, expert.updated_time, expert.updated_user_id," +
             "user.user_name, user.province, user.city, user.district, user.user_brithday, user.user_sex " +
             " from life_user_expert expert " +
             " left join life_user user on user.id = expert.user_id " +
@@ -190,7 +190,16 @@ public interface LifeUserExpertMapper extends BaseMapper<LifeUserExpert> {
     @Select("select * from life_user_expert where user_id = #{userId} and delete_flag = 1")
     LifeUserExpert selectIsExpert(Integer userId);
 
-    @Update("update life_user_expert set expert_type = #{expertType},delete_flag = '0'" +
+    @Update("update life_user_expert set expert_code = #{expertCode},expert_status = #{expertStatus},delete_flag = '0'" +
             "where id = #{id}")
     Boolean updateExpert(LifeUserExpert lifeUserExpert);
+
+    @Select(
+            "select expert.* ,user.*" +
+                    "from life_user_expert expert " +
+                    "join life_user user on user.id = expert.user_id " +
+                    "where expert.expert_status = 1 and orders.expert_id = #{expertId} ")
+
+    IPage<LifeUserExpertVo> getApplicationExpertList(IPage<LifeUserExpertVo> iPage, @Param(Constants.WRAPPER) QueryWrapper<LifeUserExpertVo> wrapper);
+
 }

+ 20 - 2
alien-entity/src/main/java/shop/alien/mapper/LifeUserExpertOrderMapper.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
 import shop.alien.entity.store.LifeUserExpertOrder;
 import shop.alien.entity.store.vo.LifeUserExpertOrderVo;
 
@@ -45,10 +46,11 @@ public interface LifeUserExpertOrderMapper extends BaseMapper<LifeUserExpertOrde
     List<LifeUserExpertOrderVo> getExpertOrderDetails(@Param("expertId") Long expertId);
 
 
-    @Select("select orders.id, orders.order_no, store.store_name, orders.order_money, orders.account_money, if (orders.status = '1', '待完成', '已完成') statusName, " +
+    @Select("select orders.id, orders.order_no, store.store_name, orders.order_money, package.name,orders.account_money,orders.first_funds_button,orders.end_funds_button, if (orders.status = '1', '待完成', '已完成') statusName, " +
             "       orders.order_time, orders.complete_time  " +
             "from life_user_expert_order orders " +
             "left join store_info store on store.id = orders.store_id " +
+            "left join life_promotion_package package on package.id = orders.package_id " +
             "WHERE orders.expert_id = #{expertId}")
     List<LifeUserExpertOrderVo> getPromotionOrderInfoList(@Param("expertId") Long expertId);
 
@@ -57,11 +59,12 @@ public interface LifeUserExpertOrderMapper extends BaseMapper<LifeUserExpertOrde
             "earliest_works AS (SELECT order_id, MIN(created_time) AS earliest_created_time FROM life_user_expert_works GROUP BY order_id), " +
             "purchase AS (SELECT order_id, SUM(CASE WHEN STATUS = 1 THEN 1 ELSE 0 END) completedOrdersNumber, SUM(purchase_amount) amount FROM life_user_expert_purchase WHERE delete_flag = 0 GROUP BY order_id), " +
             "record AS (SELECT order_id, COUNT(order_id) storeVisitViewCount FROM life_browse_record WHERE delete_flag = 0 GROUP BY order_id) " +
-            "SELECT orders.id, orders.order_no, store.store_name, orders.order_money, ew.earliest_created_time, orders.account_money, IF(orders.STATUS = '1', '待完成', '已完成') AS statusName, " +
+            "SELECT orders.id, orders.order_no, store.store_name, orders.order_money, orders.first_funds_button,orders.end_funds_button,package.name,ew.earliest_created_time, orders.account_money, IF(orders.STATUS = '1', '待完成', '已完成') AS statusName, " +
             "orders.order_time, orders.first_payment_time, orders.final_payment_time, orders.complete_time, orders.order_play_count, orders.order_gmv, " +
             "IFNULL(works.playCount, 0) AS actualPlayCount, IFNULL(purchase.amount, 0) AS actualGmv, IFNULL(purchase.completedOrdersNumber, 0) AS completedOrdersNumber, " +
             "IFNULL(purchase.amount, 0) AS transactionAmount, IFNULL(record.storeVisitViewCount, 0) AS storeVisitViewCount, ew.earliest_created_time AS firstWorkTime " +
             "FROM life_user_expert_order orders " +
+            "left join life_promotion_package package on package.id = orders.package_id " +
             "LEFT JOIN store_info store ON store.id = orders.store_id " +
             "LEFT JOIN works ON works.order_id = orders.id " +
             "LEFT JOIN purchase ON purchase.order_id = orders.id " +
@@ -82,4 +85,19 @@ public interface LifeUserExpertOrderMapper extends BaseMapper<LifeUserExpertOrde
             "FROM life_user_expert_order " +
             "WHERE order_id = #{orderId}")
     LifeUserExpertOrderVo selectByOrderId(Integer orderId);
+
+    //增加一个updateButton的方法,通过订单id来更新按钮状态
+//    @Update("UPDATE " +
+//            "life_user_expert_order " +
+//            "SET update_button = #{updateButton} " +
+//            "WHERE order_id = #{orderId}")
+//    Integer updateButton(@Param("orderId") String orderId, @Param("updateButton") String updateButton);
+
+
+    @Update("UPDATE " +
+            "life_user_expert_order " +
+            "SET first_funds_button = #{firstButton}, " +
+            "end_funds_button = #{endButton} " +
+            "WHERE order_no = #{orderNo}")
+    void updateButton(@Param("firstButton") String firstButton,@Param("endButton") String endButton,@Param("orderNo") String orderNo);
 }

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

@@ -42,7 +42,7 @@ public interface LifeUserOrderMapper extends BaseMapper<LifeUserOrder> {
             "\tselect id coupon_id,1 coupon_type,lc.name coupon_name, SUBSTRING_INDEX(image_path, ',', 1) AS image_id,0 effective_date_type,expiration_date effective_date_value \n" +
             "from life_coupon lc where lc.delete_flag = 0\n" +
             ")\n" +
-            "select luo.id,luo.buy_time,luo.status,luo.price,luo.final_price,luo.user_id,luo.store_id,luo.order_no,luo.pay_time,luo.cancel_time,luo.finish_time,\n" +
+            "select luo.id,luo.buy_time,luo.status,luo.price,luo.final_price,luo.user_id,luo.store_id,luo.order_no,luo.pay_time,luo.cancel_time,luo.finish_time,luo.order_str,\n" +
             "si.store_name,si.commission_rate,si.business_section store_type,si.store_status,si.business_status,\n" +
             "count(ocm.coupon_code) coupon_count,\n" +
             "simg.img_url,\n" +

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

@@ -34,6 +34,8 @@ public interface ManagementInfoMapper {
 
     IPage<ManagementInfoVo> getApplicationForWithdrawal(IPage<ManagementInfoVo> iPage, @Param("storeId") Integer storeId, @Param("storeName") String storeName);
 
+    ManagementInfoVo getCashOutDetail( @Param("id") Integer id);
+
     IPage<ManagementInfoVo> getStoreOrderDetail(IPage<ManagementInfoVo> iPage, @Param("storeId") String storeId, @Param("orderNo") String orderNo, @Param("userId") String userId, @Param("userName") String userName);
 
     //获取平台净利润

+ 5 - 0
alien-entity/src/main/java/shop/alien/mapper/StoreInfoMapper.java

@@ -105,4 +105,9 @@ public interface StoreInfoMapper extends BaseMapper<StoreInfo> {
             "left join store_dictionary dict2 on dict2.type_name = 'businessStatus' and a.business_status = dict2.dict_id and dict2.delete_flag = 0 " +
             "left join store_img d on d.store_id = a.id and d.img_type = 10 and d.delete_flag = 0 ${ew.customSqlSegment}")
     IPage<StoreInfoVo> getPageForDistance(IPage<StoreInfoVo> page,  @Param("position") String position,@Param(Constants.WRAPPER) QueryWrapper<StoreInfoVo> queryWrapper);
+
+
+    @Select("SELECT a.* FROM store_info a " +
+            "left join store_user b on a.id =b.store_id  where b.phone = #{phoneIdNew} limit 1")
+    StoreMainInfoVo getStoreNameByPhone(String phoneIdNew);
 }

+ 28 - 0
alien-entity/src/main/resources/mapper/ExpertImgMapper.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="shop.alien.mapper.ExpertImgMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="shop.alien.entity.store.ExpertImg">
+        <id column="id" property="id" />
+        <result column="expert_id" property="expertId" />
+        <result column="expert_code" property="expertCode" />
+        <result column="user_id" property="userId" />
+        <result column="delete_flag" property="deleteFlag" />
+        <result column="img_type" property="imgType" />
+        <result column="img_description" property="imgDescription" />
+        <result column="img_sort" property="imgSort" />
+        <result column="img_url" property="imgUrl" />
+        <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
+    </sql>
+
+</mapper>

+ 4 - 2
alien-entity/src/main/resources/mapper/LifeUserDynamicsMapper.xml

@@ -4,7 +4,7 @@
 
     <select id="getDynamicsList" resultType="shop.alien.entity.store.vo.LifeUserDynamicsVo">
         select dyna1.*, COUNT(dyna1.id) AS fansCount from (
-        select dyna.*,COUNT(lc.id) AS commentCount,  COUNT(lm.id) AS transferNum from (
+        select dyna.*,COUNT(sc.id) AS commentCount,  COUNT(lm.id) AS transferNum from (
         with dynamice as(
         select
         CASE
@@ -28,6 +28,7 @@
         left join life_user_expert  lue on lue.user_id = user.id and lue.delete_flag = 0
         where dynamice.userType = 'user') dyna
         left join life_comment lc on lc.dongtai_shequ_id = dyna.id
+        left join store_comment sc on sc.business_id = dyna.id and sc.business_type = 2 and sc.delete_flag = 0
         left join life_message lm on lm.business_id = dyna.id
         GROUP BY dyna.id order by  dyna.created_time desc) dyna1
         left join life_fans lf1 on lf1.followed_id =  dyna1.phoneId
@@ -56,7 +57,7 @@
 
     <select id="getDynamicsDetail" resultType="shop.alien.entity.store.vo.LifeUserDynamicsVo">
         select dyna1.*, COUNT(dyna1.id) AS fansCount from (
-        select dyna.*,COUNT(lc.id) AS commentCount,  COUNT(lm.id) AS transferNum from (
+        select dyna.*,COUNT(sc.id) AS commentCount,  COUNT(lm.id) AS transferNum from (
         with dynamice as(
         select
         CASE
@@ -80,6 +81,7 @@
         left join life_user_expert  lue on lue.user_id = user.id and lue.delete_flag = 0
         where dynamice.userType = 'user') dyna
         left join life_comment lc on lc.dongtai_shequ_id = dyna.id
+        left join store_comment sc on sc.business_id = dyna.id and sc.business_type = 2 and sc.delete_flag = 0
         left join life_message lm on lm.business_id = dyna.id
         GROUP BY dyna.id order by  dyna.created_time desc) dyna1
         left join life_fans lf1 on lf1.followed_id =  dyna1.phoneId

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

@@ -12,11 +12,13 @@
         <result column="created_user_id" property="createdUserId" />
         <result column="updated_time" property="updatedTime" />
         <result column="updated_user_id" property="updatedUserId" />
+        <result column="expert_status" property="expertStatus" />
+        <result column="add_explanation" property="addExplanation" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, user_id, expert_code, delete_flag, created_time, created_user_id, updated_time, updated_user_id
+        id, user_id, expert_code, delete_flag, created_time, created_user_id, updated_time, updated_user_id,expert_status, add_explanation
     </sql>
 
 </mapper>

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

@@ -5,9 +5,10 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="shop.alien.entity.store.LifeUserExpertOrder">
         <id column="id" property="id" />
-        <result column="order_id" property="orderId" />
+        <result column="order_no" property="orderNo" />
         <result column="expert_id" property="expertId" />
         <result column="store_id" property="storeId" />
+        <result column="package_id" property="packageId" />
         <result column="order_money" property="orderMoney" />
         <result column="account_money" property="accountMoney" />
         <result column="order_time" property="orderTime" />
@@ -15,7 +16,7 @@
         <result column="first_payment_time" property="firstPaymentTime" />
         <result column="final_payment_time" property="finalPaymentTime" />
         <result column="order_play_count" property="orderPlayCount" />
-        <result column="actual_play_count" property="actualPlayCount" />
+<!--        <result column="actual_play_count" property="actualPlayCount" />-->
         <result column="order_gmv" property="orderGmv" />
         <result column="actual_gmv" property="actualGmv" />
         <result column="status" property="status" />
@@ -24,11 +25,13 @@
         <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="end_funds_button" property="endFundsButton" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, order_id, expert_id, store_id, order_money, account_money, order_time, complete_time, first_payment_time, final_payment_time, order_play_count, actual_play_count, order_gmv, actual_gmv, status, delete_flag, created_time, created_user_id, updated_time, updated_user_id
+        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
     </sql>
 
 </mapper>

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

@@ -52,6 +52,7 @@
         <result column="end_date" property="endDate"/>
         <result column="reservation_rules" property="reservationRules"/>
         <result column="original_price" property="originalPrice"/>
+        <result column="order_str" property="orderStr"/>
 
         <collection property="orderCouponMiddleList" ofType="shop.alien.entity.store.vo.OrderCouponMiddleVo">
             <id column="ocmId" property="id" />
@@ -75,8 +76,8 @@
                0 effective_date_type,expiration_date effective_date_value,use_rule use_rules,reservation_rules,applicable_num,1 quota_type,buy_limit quota_value,single_qty
         from life_coupon lc where lc.delete_flag = 0
         )
-        select luo.id,luo.order_no,luo.created_time , luo.price ,luo.final_price
-        ,luo.pay_method,luo.buy_time,luo.cancel_time,luo.pay_time,luo.finish_time,luo.status order_status,luo.quan_id,luo.refund_time total_refund_time,
+        select luo.id,luo.order_no,luo.created_time , luo.price ,luo.final_price,luo.order_str,
+        luo.pay_method,luo.buy_time,luo.cancel_time,luo.pay_time,luo.finish_time,luo.status order_status,luo.quan_id,luo.refund_time total_refund_time,
         tc.*,
         ldc.nominal_value,ldc.type,
         lu.user_phone,lu.user_name,lu.id user_id,

+ 30 - 0
alien-entity/src/main/resources/mapper/ManagementInfoMapper.xml

@@ -253,6 +253,36 @@
             AND store.store_name LIKE CONCAT('%', #{storeName}, '%')
         </if>
     </select>
+
+    <select id="getCashOutDetail" resultType="shop.alien.entity.store.vo.ManagementInfoVo">
+        SELECT
+        cash.id AS cash_id,
+        store.store_name AS store_name ,
+        storeUser.phone AS store_phone ,
+        store.id AS store_id,
+        cash.cash_out_type,
+        CASE
+        cash.cash_out_type
+        WHEN 0 THEN
+        "手动提现"
+        WHEN 1 THEN
+        "到期自动提现"
+        END AS cash_out_type_name,
+        ROUND(IFNULL(cash.money, 0) / 100,2) AS money,
+        cash.created_time,
+        cash.payment_date,
+        cash.approve_time,
+        cash.pay_date,
+        cash.fail_reason,
+        cash.payment_status,
+        cash.approve_fail_reason
+        FROM
+        store_cash_out_record cash
+        LEFT JOIN store_info store ON cash.store_id = store.id
+        LEFT JOIN store_user storeUser ON storeUser.store_id = store.id
+        WHERE cash.id = #{id}
+    </select>
+
     <select id="getPlatformNetProfit" resultType="shop.alien.entity.store.vo.ManagementInfoVo">
         select IFNULL(ROUND(sum(all_data.platform_profit),2), 0) AS profit from
         (SELECT

+ 22 - 0
alien-gateway/src/main/resources/bootstrap-uat.yml

@@ -0,0 +1,22 @@
+spring:
+  application:
+    name: alien-gateway
+
+  cloud:
+    nacos:
+      #注册中心
+      discovery:
+        server-addr: localhost:8848
+        username: nacos
+        password: ngfriend198092
+        namespace: 79060c39-10ad-4098-9022-5e8a47796f8f
+
+      #配置中心
+      config:
+        enabled: true
+        server-addr: localhost:8848
+        username: nacos
+        password: ngfriend198092
+        group: DEFAULT_GROUP
+        file-extension: yml
+        namespace: 79060c39-10ad-4098-9022-5e8a47796f8f

+ 1 - 1
alien-job/src/main/java/shop/alien/job/feign/SecondGoodsFeign.java

@@ -4,7 +4,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
-@FeignClient(name = "alien-second", url = "http://localhost:9999")
+@FeignClient(name = "alien-second", url = "${feign.alienSecond.url}")
 public interface SecondGoodsFeign {
     
     /**

+ 22 - 0
alien-job/src/main/resources/bootstrap-uat.yml

@@ -0,0 +1,22 @@
+spring:
+  application:
+    name: alien-job
+
+  cloud:
+    nacos:
+      #注册中心
+      discovery:
+        server-addr: localhost:8848
+        username: nacos
+        password: ngfriend198092
+        namespace: 79060c39-10ad-4098-9022-5e8a47796f8f
+
+      #配置中心
+      config:
+        enabled: true
+        server-addr: localhost:8848
+        username: nacos
+        password: ngfriend198092
+        group: DEFAULT_GROUP
+        file-extension: yml
+        namespace: 79060c39-10ad-4098-9022-5e8a47796f8f

+ 2 - 7
alien-second/src/main/java/shop/alien/second/controller/SecondGoodsController.java

@@ -117,13 +117,8 @@ public class SecondGoodsController {
     @NoRepeatSubmit(expireTime = 3, message = "请勿重复提交下架商品请求")
     public R<Void> shelveSecondGoods(@ApiParam("下架二手商品") @RequestBody SecondGoodsVo secondGoods) {
         log.info("SecondGoodsController.shelveSecondGoods?secondGoods={}", secondGoods.toString());
-        // 修改商品状态为4 - 已下架
-        secondGoods.setGoodsStatus(4);
-        boolean updateResult = secondGoodsService.updateById(secondGoods);
-        if (updateResult) {
-            // 获取最新的商品信息并记录操作历史
-            SecondGoods updatedGoods = secondGoodsService.getById(secondGoods.getId());
-            secondGoodsService.recordGoodsOperation(updatedGoods,"下架商品");
+        boolean shelveResult = secondGoodsService.shelveSecondGoods(secondGoods);
+        if (shelveResult) {
             return R.success("下架成功");
         } else {
             return R.fail("下架失败");

+ 7 - 0
alien-second/src/main/java/shop/alien/second/service/SecondGoodsService.java

@@ -189,6 +189,13 @@ public interface SecondGoodsService extends IService<SecondGoods> {
     SecondGoodsRecordDetailVo getAdminGoodsRecordDetail(Integer recordId);
 
     /**
+     * 下架商品
+     * @param secondGoods 商品信息
+     * @return 是否下架成功
+     */
+    boolean shelveSecondGoods(SecondGoodsVo secondGoods);
+
+    /**
      * 处理商品信息(管理后台使用)
      * @param goodsId 商品ID
      * @return 处理后的商品详情信息

+ 102 - 19
alien-second/src/main/java/shop/alien/second/service/impl/SecondGoodsServiceImpl.java

@@ -18,6 +18,7 @@ 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.entity.SecondVideoTask;
 import shop.alien.entity.second.*;
@@ -634,27 +635,40 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
      * 创建商品审核记录
      * @param goods 商品信息
      */
+//    @Transactional(rollbackFor = Exception.class)
     private void approveAndListGoods(SecondGoods goods) {
-        // 如果所有审核都通过,设置为上架状态
-        goods.setGoodsStatus(SecondGoodsStatusEnum.LISTED.getCode()); // 上架
-        goods.setFailedReason("");
-        goods.setReleaseTime(new Date()); // 上架时间
-        updateById(goods);
-        // 插入审核记录
-        createGoodsAudit(goods, "", Constants.AuditStatus.PASSED);
-        // 发送审核成功消息
-        sendMessage(goods);
-        // 上架 记录商品操作历史
-        String operationName = "";
-        QueryWrapper<SecondGoodsRecord> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("goods_id", goods.getId());
-        List<SecondGoodsRecord> recordList = secondGoodsRecordMapper.selectList(queryWrapper);
-        if (CollectionUtil.isNotEmpty(recordList)){
-            operationName = "重新发布";
-        }else {
-            operationName = "首次发布";
+        boolean isNotified = false;
+        try {
+            // 如果所有审核都通过,设置为上架状态
+            goods.setGoodsStatus(SecondGoodsStatusEnum.LISTED.getCode()); // 上架
+            goods.setFailedReason("");
+            goods.setReleaseTime(new Date()); // 上架时间
+            updateById(goods);
+            // 插入审核记录
+            createGoodsAudit(goods, "", Constants.AuditStatus.PASSED);
+            // 发送审核成功消息
+            sendMessage(goods);
+            isNotified = true; // 标记通知已发送
+            // 上架 记录商品操作历史
+            String operationName = "";
+            QueryWrapper<SecondGoodsRecord> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("goods_id", goods.getId());
+            List<SecondGoodsRecord> recordList = secondGoodsRecordMapper.selectList(queryWrapper);
+            if (CollectionUtil.isNotEmpty(recordList)){
+                operationName = "重新发布";
+            }else {
+                operationName = "首次发布";
+            }
+            recordGoodsOperation(goods, operationName);
+        } catch (Exception e) {
+            log.error("商品上架过程中发生异常,执行回滚", e);
+            // 如果通知已发送但后续操作失败,需要补偿
+            if (isNotified) {
+                // 发送补偿消息,比如撤销通知或标记为异常状态
+//                sendCompensationMessage(goods);
+            }
+            throw e;
         }
-        recordGoodsOperation(goods, operationName);
     }
 
     /**
@@ -1765,4 +1779,73 @@ public class SecondGoodsServiceImpl extends ServiceImpl<SecondGoodsMapper, Secon
         
         return result;
     }
+
+    /**
+     * 下架商品
+     * @param secondGoods 商品信息
+     * @return 是否下架成功
+     */
+    @Override
+    public boolean shelveSecondGoods(SecondGoodsVo secondGoods) {
+        log.info("SecondGoodsServiceImpl.shelveSecondGoods?secondGoods={}", secondGoods.toString());
+        // 修改商品状态为4 - 已下架
+        secondGoods.setGoodsStatus(4);
+        boolean updateResult = updateById(secondGoods);
+        if (updateResult) {
+            // 获取最新的商品信息并记录操作历史
+            SecondGoods updatedGoods = getById(secondGoods.getId());
+            recordGoodsOperation(updatedGoods, "下架商品");
+            // 发送系统通知
+            sendShelveMessage(updatedGoods);
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+
+    /**
+     * 发送商品下架消息
+     * @param goods 商品信息
+     */
+    private void sendShelveMessage(SecondGoods goods) {
+        try {
+            // 根据 goods.getUserId() 获取用户信息
+            LifeUser lifeUser = lifeUserMapper.selectById(goods.getUserId());
+            String phone = lifeUser.getUserPhone();
+            // 调取feign接口 发送消息 life_notice表
+            LifeNotice lifeNotice = new LifeNotice();
+            lifeNotice.setSenderId("system");
+            lifeNotice.setReceiverId("user_"+ phone);
+            lifeNotice.setBusinessId(goods.getId());
+            lifeNotice.setTitle("商品下架通知");
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("goodsId", goods.getId());
+//            jsonObject.put("status", "true");
+            jsonObject.put("message", "您的商品:"+ goods.getTitle() + "已下架");
+            lifeNotice.setContext(jsonObject.toJSONString());
+            lifeNotice.setNoticeType(Constants.Notice.SYSTEM_NOTICE); // 系统通知
+            lifeNotice.setIsRead(0);
+            lifeNoticeMapper.insert(lifeNotice);
+            sendShelveNotice("user_"+ phone, lifeNotice);
+        } catch (Exception e) {
+            log.error("发送消息通知失败,goods: {}", goods, e);
+        }
+    }
+
+    private void sendShelveNotice(String receiverId, LifeNotice lifeNotice) {
+        try {
+            WebSocketVo webSocketVo = new WebSocketVo();
+            webSocketVo.setSenderId("system");
+            webSocketVo.setReceiverId(receiverId);
+            webSocketVo.setCategory("notice");
+            webSocketVo.setNoticeType("1");
+            webSocketVo.setIsRead(0);
+            webSocketVo.setText(JSONObject.from(lifeNotice).toJSONString());
+            alienStoreFeign.sendMsgToClientByPhoneId(receiverId, JSONObject.from(webSocketVo).toJSONString());
+        } catch (Exception e) {
+            log.error("发送消息通知失败,receiverId: {}", receiverId, e);
+        }
+    }
+
 }

+ 22 - 0
alien-second/src/main/resources/bootstrap-uat.yml

@@ -0,0 +1,22 @@
+spring:
+  application:
+    name: alien-second
+
+  cloud:
+    nacos:
+      #注册中心
+      discovery:
+        server-addr: localhost:8848
+        username: nacos
+        password: ngfriend198092
+        namespace: 79060c39-10ad-4098-9022-5e8a47796f8f
+
+      #配置中心
+      config:
+        enabled: true
+        server-addr: localhost:8848
+        username: nacos
+        password: ngfriend198092
+        group: DEFAULT_GROUP
+        file-extension: yml
+        namespace: 79060c39-10ad-4098-9022-5e8a47796f8f

+ 8 - 4
alien-store/src/main/java/shop/alien/store/controller/LifePromotionPackageController.java

@@ -1,5 +1,6 @@
 package shop.alien.store.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -29,11 +30,14 @@ public class LifePromotionPackageController {
 
     @ApiOperation("获取推广套餐")
     @ApiOperationSupport(order = 1)
-    @ApiImplicitParams({@ApiImplicitParam(name = "expert_id", value = "达人id", dataType = "Long", paramType = "query", required = true)})
+    @ApiImplicitParams({@ApiImplicitParam(name = "expert_id", value = "达人id", dataType = "Long", paramType = "query", required = true),
+            @ApiImplicitParam(name = "page", value = "页数", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "size", value = "大小", dataType = "Integer", paramType = "query", required = true)}
+    )
     @GetMapping("/getByExpertId")
-    public R<List<LifePromotionPackageVo>> getByExpertId(Long expertId) {
-        log.info("LifePromotionPackageController.getByExpertId?id={}", expertId);
-        return R.data(promotionPackageService.getByExpertId(expertId));
+    public R<IPage<LifePromotionPackageVo>> getByExpertId(@RequestParam("expertId") Long expertId,@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) {
+        log.info("LifePromotionPackageController.getByExpertId?id={},page={},size={}", expertId,page,size);
+        return R.data(promotionPackageService.getByExpertId(expertId, page, size));
     }
 
     @ApiOperation("新增或修改推广套餐")

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

@@ -186,7 +186,7 @@ public class LifeUserDynamicsController {
     @ApiOperationSupport(order = 1)
     @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "分页页数", dataType = "String", paramType = "query", required = true),
             @ApiImplicitParam(name = "size", value = "分页条数", dataType = "String", paramType = "query", required = true),
-            @ApiImplicitParam(name = "nickName", value = "昵称", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "userName", value = "昵称", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "userType", value = "user-用户 store-商户", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "dynamicsType", value = "1-图片 2-视频", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "releaseStartTime", value = "发布开始时间", dataType = "String", paramType = "query"),
@@ -194,13 +194,13 @@ public class LifeUserDynamicsController {
     @GetMapping("/getDynamicsList")
     public R<IPage<LifeUserDynamicsVo>> getDynamicsList(@RequestParam(defaultValue = "1") Integer page,
                                                         @RequestParam(defaultValue = "10") Integer size,
-                                                        @RequestParam(required = false) String nickName,
+                                                        @RequestParam(required = false) String userName,
                                                         @RequestParam(required = false) String userType,
                                                         @RequestParam(defaultValue = "0",required = false) Integer dynamicsType,
                                                         @RequestParam(required = false) String releaseStartTime,
                                                         @RequestParam(required = false) String releaseEndTime) {
-        log.info("LifeUserDynamicsController.getDynamicsList?page={}&size={}&nickName={}&userType={}&dynamicsType={}", page, size, nickName, userType, dynamicsType);
-        List<LifeUserDynamicsVo> stores = lifeUserDynamicsService.getDynamicsList(page, size, nickName, userType, dynamicsType, releaseStartTime, releaseEndTime);
+        log.info("LifeUserDynamicsController.getDynamicsList?page={}&size={}&nickName={}&userType={}&dynamicsType={}", page, size, userName, userType, dynamicsType);
+        List<LifeUserDynamicsVo> stores = lifeUserDynamicsService.getDynamicsList(page, size, userName, userType, dynamicsType, releaseStartTime, releaseEndTime);
         return R.data(ListToPage.setPage(stores, page, size));
     }
 

+ 23 - 6
alien-store/src/main/java/shop/alien/store/controller/LifeUserExpertController.java

@@ -53,14 +53,17 @@ public class LifeUserExpertController {
         return R.data(lifeUserExpertService.getExpertOrderList(page, size, expertId, orderNo, storeName, storeId));
     }
 
-    @ApiOperation("成为达人")
+    @ApiOperation("成为达人,以及状态审核或驳回")
     @ApiOperationSupport(order = 3)
-    @ApiImplicitParams({@ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", paramType = "query", required = true),
-            @ApiImplicitParam(name = "expertType", value = "达人类型", dataType = "String", paramType = "query", required = true)})
+    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户id", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "userPhone", value = "用户电话", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "comment", value = "拒绝原因", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "expertStatus", value = "审核状态 通过0 审核中1 拒绝2", dataType = "Integer", paramType = "query", required = true)})
+//    @ApiImplicitParam(name = "expertType", value = "达人类型", dataType = "String", paramType = "query", required = true)})
     @GetMapping("/becomeExpert")
-    public R<Boolean> becomeExpert(Integer userId, String expertType) {
-        log.info("LifeUserExpertController.becomeExpert?id={},expertType={}", userId, expertType);
-        return R.data(lifeUserExpertService.becomeExpert(userId, expertType));
+    public R<Boolean> becomeExpert(Integer id,  String userPhone, String comment, Integer expertStatus) {
+        log.info("LifeUserExpertController.becomeExpert?id={},expertType={}", id, expertStatus);
+        return R.data(lifeUserExpertService.becomeExpert(id, userPhone,comment,expertStatus));
     }
 
     @ApiOperation("取消达人")
@@ -103,4 +106,18 @@ public class LifeUserExpertController {
         log.info("LifeUserExpertController.greatGoodsType?expertId={}", expertId);
         return R.data(lifeUserExpertService.greatGoodsType(expertId));
     }
+
+    @ApiOperation("申请中达人列表")
+    @ApiOperationSupport(order = 9)
+    @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "分页页数", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "size", value = "分页条数", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "userName", value = "姓名", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "userId", value = "用户id", dataType = "String", paramType = "query")})
+    @GetMapping("/getApplicationExpertList")
+    public R<IPage<LifeUserExpertVo>> getApplicationExpertList(Integer page, Integer size, String userName, String expertCode, Integer userId) {
+        log.info("LifeUserExpertController.getUserExpertList?page={},size={},userName={},phone={},userId={}", page, size, userName, expertCode, userId);
+        return R.data(lifeUserExpertService.getApplicationExpertList(page, size, userName, expertCode, userId));
+    }
+
+
 }

+ 15 - 3
alien-store/src/main/java/shop/alien/store/controller/LifeUserExpertOrderController.java

@@ -1,5 +1,6 @@
 package shop.alien.store.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperationSupport;
@@ -42,9 +43,9 @@ public class LifeUserExpertOrderController {
     @ApiOperation("推广订单信息列表")
     @ApiOperationSupport(order = 2)
     @GetMapping("/getPromotionOrderInfoList")
-    public R<List<LifeUserExpertOrderVo>> getPromotionOrderInfoList(@RequestParam("expertId") Long expertId) {
-        log.info("StoreUserExpertOrderController.getPromotionOrderInfoList?id={}", expertId);
-        return R.data(lifeUserExpertOrderService.getPromotionOrderInfoList(expertId));
+    public R<IPage<LifeUserExpertOrderVo>> getPromotionOrderInfoList(@RequestParam("expertId") Long expertId,@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size){
+        log.info("StoreUserExpertOrderController.getPromotionOrderInfoList?id={},page={},size={}", expertId, page, size);
+        return R.data(lifeUserExpertOrderService.getPromotionOrderInfoList(expertId,page, size));
     }
 
     @ApiOperation("达人订单详情")
@@ -54,4 +55,15 @@ public class LifeUserExpertOrderController {
         log.info("LifeUserExpertController.fetchExpertOrderInfo?expertId={},orderId={}", expertId, orderId);
         return R.data(lifeUserExpertOrderService.fetchExpertOrderInfo(expertId, orderId));
     }
+
+    @ApiOperation("申请款项按钮")
+    @ApiOperationSupport(order = 4)
+    @GetMapping("/getApplicationFunds")
+    public R<Map<String, Object>> getApplicationFunds( @RequestParam("buttonType") String buttonType,@RequestParam("buttonStatus") String buttonStatus,@RequestParam("orderNo") String orderNo,@RequestParam("userPhone") String userPhone) {
+        log.info("LifeUserExpertController.getApplicationFunds?buttonType={},buttonStatus={},orderNo={},userPhone={}", buttonType, buttonStatus,orderNo, userPhone);
+        return R.data(lifeUserExpertOrderService.getApplicationFunds(buttonType, buttonStatus, orderNo,userPhone));
+    }
+
+
+
 }

+ 10 - 0
alien-store/src/main/java/shop/alien/store/controller/ManagementInfoController.java

@@ -91,6 +91,16 @@ public class ManagementInfoController {
         return R.data(managementInfoService.getApplicationForWithdrawal(page, size, storeId, storeName));
     }
 
+    @ApiOperation("提现申请详情")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "提现申请id", dataType = "Integer", paramType = "query")
+    })
+    @GetMapping("/getCashOutDetail")
+    public R<ManagementInfoVo> getCashOutDetail(
+            @RequestParam(value = "id") Integer id) {
+        return R.data(managementInfoService.getCashOutDetail(id));
+    }
+
     @ApiOperation("生成结算回执单")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "cashId", value = "提现记录id", dataType = "String", paramType = "query"),

+ 15 - 0
alien-store/src/main/java/shop/alien/store/controller/StoreUserExpertController.java

@@ -7,6 +7,7 @@ import lombok.RequiredArgsConstructor;
 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.LifeUserExpertVo;
 import shop.alien.store.service.StoreUserExpertService;
 
@@ -50,4 +51,18 @@ public class StoreUserExpertController {
         log.info("StoreUserExpertController.getExpertDetails?expertId={}", expertId);
         return R.data(storeUserExpertService.getExpertDetails(expertId));
     }
+
+@ApiOperation("申请达人,上传图片以及补充说明")
+@ApiOperationSupport(order = 4)
+@PostMapping("/applyExpert")
+public R<Map<String, String>> applyExpert(@RequestBody ExpertImg expertImgs) {
+    log.info("StoreUserExpertController.applyExpert?expertImgs={}", expertImgs);
+    if (null == expertImgs) {
+        return R.fail("参数错误");
+    }
+    return R.data(storeUserExpertService.getapplyExpert(expertImgs));
+}
+
+
+
 }

+ 20 - 13
alien-store/src/main/java/shop/alien/store/service/LifeUserDynamicsService.java

@@ -51,10 +51,7 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
 
     private final StoreCommentMapper storeCommentMapper;
 
-    @Value("${store.income-freeze.freeze-switch}")
-    private String freezeSwitch;
-    @Value("${store.income-freeze.freeze-day}")
-    private String freezeDay;
+    private final StoreInfoMapper storeInfoMapper;
 
     public int addLiulanCount(String id) {
         LambdaUpdateWrapper<LifeUserDynamics> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
@@ -158,6 +155,14 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
     public List<LifeUserDynamicsVo> getUserDynamics(String myself, String type, String isFollowed, String phoneId) {
         // 查询动态数据并按类型过滤
         List<LifeUserDynamicsVo> lifeUserDynamicsVoList = lifeUserDynamicsMapper.getLifeUserDynamicsList();
+
+        //对lifeUserDynamicsVoList数据进行处理,当type为2的时候,把userName的数值赋值到storeName
+        lifeUserDynamicsVoList.forEach(item -> {
+            if (item.getType().equals("2")) {
+                item.setStoreName(item.getUserName());
+            }
+        });
+
         if (!StringUtils.isEmpty(type)) {
             lifeUserDynamicsVoList = lifeUserDynamicsVoList.stream().filter(item -> type.equals(item.getType())).collect(Collectors.toList());
         }
@@ -483,9 +488,16 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
         List<LifeUserDynamicsVo> lifeUserDynamicsVos = lifeUserDynamicsMapper.selectDianZanList(phoneId);
         if (!CollectionUtils.isEmpty(lifeUserDynamicsVos)){
             for (LifeUserDynamicsVo lifeUserDynamicsVo : lifeUserDynamicsVos) {
-                String phoneIdNew = lifeUserDynamicsVo.getPhoneId().substring(6);
-                StoreUser storeUser = storeUserService.getUserByPhone(phoneIdNew);
-                lifeUserDynamicsVo.setUserName(storeUser.getNickName());
+                if (lifeUserDynamicsVo.getType().equals("2")){
+                    String phoneIdNew = lifeUserDynamicsVo.getPhoneId().substring(6);
+                     StoreInfo storeInfo=storeInfoMapper.getStoreNameByPhone(phoneIdNew);
+                    lifeUserDynamicsVo.setStoreName(storeInfo.getStoreName());
+                } else if (lifeUserDynamicsVo.getType().equals("1")) {
+                    String phoneIdNew = lifeUserDynamicsVo.getPhoneId().substring(5);
+                    //根据手机号查询用户表
+                    LifeUser lifeUser = lifeUserMapper.selectOne(new QueryWrapper<LifeUser>().eq("user_phone", phoneIdNew));
+                    lifeUserDynamicsVo.setUserName(lifeUser.getUserName());
+                }
             }
         }
         return  lifeUserDynamicsVos;
@@ -493,15 +505,10 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
 
     public List<LifeUserDynamicsVo> getDynamicsList(Integer page, Integer size, String nickName, String userType, Integer dynamicsType, String releaseStartTime, String releaseEndTime) {
         // 查询动态数据并按类型过滤
-        List<LifeUserDynamicsVo> lifeUserDynamicsVoList = lifeUserDynamicsMapper.getDynamicsList(nickName, userType, dynamicsType, releaseStartTime, releaseEndTime);
-
-        return lifeUserDynamicsVoList;
+        return lifeUserDynamicsMapper.getDynamicsList(nickName, userType, dynamicsType, releaseStartTime, releaseEndTime);
     }
 
     public LifeUserDynamicsVo getDynamicsDetail(Integer id) {
-        System.out.println("-----------------------------:"+freezeSwitch);
-        System.out.println("-----------------------------:"+freezeDay);
-
         // 查询动态数据并按类型过滤
         LifeUserDynamicsVo lifeUserDynamicsVo = new LifeUserDynamicsVo();
         List<LifeUserDynamicsVo> lifeUserDynamicsVoList = lifeUserDynamicsMapper.getDynamicsDetail(id);

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

@@ -22,9 +22,11 @@ public interface LifeUserExpertOrderService extends IService<LifeUserExpertOrder
 
     List<LifeUserExpertOrderVo> getExpertOrderDetails(Long expertId);
 
-    List<LifeUserExpertOrderVo> getPromotionOrderInfoList(Long expertId);
+    IPage<LifeUserExpertOrderVo> getPromotionOrderInfoList(Long expertId, int page, int size);
 
     List<Map<String, Object>> fetchExpertOrderInfo(Long expertId, String orderId);
 
     List<LifeUserExpertOrderVo> getTalentPromotionOrder(String orderId, String expertId);
+
+    Map<String, Object> getApplicationFunds(String buttonType, String buttonStatus ,String orderNo,String userPhone);
 }

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

@@ -23,7 +23,7 @@ public interface LifeUserExpertService extends IService<LifeUserExpert> {
 
     IPage<LifeUserExpertOrderVo> getExpertOrderList(int page, int size, Integer expertId, String orderNo, String storeName, Integer storeId);
 
-    boolean becomeExpert(Integer userId, String expertType);
+    boolean becomeExpert(Integer id, String userPhone,String comment,Integer expertStatus);
 
     boolean cancelExpert(Integer id);
 
@@ -40,4 +40,6 @@ public interface LifeUserExpertService extends IService<LifeUserExpert> {
      * @return List<Map < String, Object>>
      */
     List<ExpertGoodsTypeVo> greatGoodsType(Integer expertId);
+
+    IPage<LifeUserExpertVo> getApplicationExpertList(int page, int size, String userName, String expertCode, Integer userId);
 }

+ 2 - 0
alien-store/src/main/java/shop/alien/store/service/LifeUserOrderService.java

@@ -709,6 +709,8 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
         lifeUserOrder.setStoreId(lifeUserOrderDto.getStoreId());
         // 订单号
         lifeUserOrder.setOrderNo(lifeUserOrderDto.getOrderNo());
+        // 订单订单字符串
+        lifeUserOrder.setOrderStr(lifeUserOrderDto.getOrderStr());
         // 优惠券id
         lifeUserOrder.setQuanId(lifeUserOrderDto.getYhquanId());
         // 原价金额

+ 2 - 0
alien-store/src/main/java/shop/alien/store/service/ManagementInfoService.java

@@ -29,6 +29,8 @@ public interface ManagementInfoService {
      */
     IPage<ManagementInfoVo> getApplicationForWithdrawal(int pageNo, int pageSize, Integer storeId, String storeName);
 
+    ManagementInfoVo getCashOutDetail(Integer id);
+
     /**
      * 店铺明细账单统计
      */

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

@@ -1,5 +1,6 @@
 package shop.alien.store.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import shop.alien.entity.store.LifePromotionPackage;
 import shop.alien.entity.store.vo.LifePromotionPackageVo;
@@ -9,7 +10,7 @@ import java.util.Map;
 
 public interface PromotionPackageService extends IService<LifePromotionPackage> {
 
-    List<LifePromotionPackageVo> getByExpertId(Long expertId);
+    IPage<LifePromotionPackageVo> getByExpertId(Long expertId, Integer page, Integer size);
 
     Map<String, Object> buyPromotion(LifePromotionPackageVo lifePromotionPackageVo);
 }

+ 5 - 0
alien-store/src/main/java/shop/alien/store/service/StoreUserExpertService.java

@@ -1,6 +1,8 @@
 package shop.alien.store.service;
 
 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.LifeUserExpertVo;
 
@@ -14,4 +16,7 @@ public interface StoreUserExpertService extends IService<LifeUserExpert> {
     List<Map<String, LifeUserExpertVo>> getExpertDetails(Integer expertId);
 
     List<LifeUserExpertVo> ifExpert(String id);
+
+
+    Map<String, String> getapplyExpert(ExpertImg expertImgs);
 }

+ 4 - 3
alien-store/src/main/java/shop/alien/store/service/impl/LifeGroupBuyServiceImpl.java

@@ -220,10 +220,11 @@ public class LifeGroupBuyServiceImpl extends ServiceImpl<LifeGroupBuyMainMapper,
             List<String> imgIds = Arrays.asList(record.getImageId().split(","));
             List<StoreImg> storeImgs = storeImgMapper.selectList(new LambdaQueryWrapper<StoreImg>().in(StoreImg::getId, imgIds));
             if (ObjectUtils.isNotEmpty(storeImgs)) {
-                String imgs = storeImgs.stream()
+                /*String imgs = storeImgs.stream()
                         .map(StoreImg::getImgUrl)
-                        .collect(Collectors.joining(","));
-                record.setImageValueStr(imgs);
+                        .collect(Collectors.joining("*"));
+                record.setImageValueStr(imgs);*/
+                record.setImageValueStr(storeImgs.stream().map(StoreImg::getImgUrl).collect(Collectors.toList()));
             }
         }
         //不可用日期

+ 48 - 2
alien-store/src/main/java/shop/alien/store/service/impl/LifeUserExpertOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package shop.alien.store.service.impl;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -7,11 +8,16 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import shop.alien.entity.store.LifeNotice;
 import shop.alien.entity.store.LifeUserExpertOrder;
 import shop.alien.entity.store.vo.LifeUserExpertOrderVo;
+import shop.alien.mapper.LifeNoticeMapper;
 import shop.alien.mapper.LifeUserExpertOrderMapper;
 import shop.alien.store.service.LifeUserExpertOrderService;
+import shop.alien.util.common.ListToPage;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -30,6 +36,7 @@ import java.util.Map;
 public class LifeUserExpertOrderServiceImpl extends ServiceImpl<LifeUserExpertOrderMapper, LifeUserExpertOrder> implements LifeUserExpertOrderService {
 
     private final LifeUserExpertOrderMapper lifeUserExpertOrderMapper;
+    private final LifeNoticeMapper lifeNoticeMapper;
 
     @Override
     public IPage<LifeUserExpertOrderVo> getExpertOrderList(int page, int size, String orderNo, String storeName) {
@@ -48,8 +55,10 @@ public class LifeUserExpertOrderServiceImpl extends ServiceImpl<LifeUserExpertOr
     }
 
     @Override
-    public List<LifeUserExpertOrderVo> getPromotionOrderInfoList(Long expertId) {
-        return lifeUserExpertOrderMapper.getPromotionOrderInfoList(expertId);
+    public IPage<LifeUserExpertOrderVo> getPromotionOrderInfoList(Long expertId, int page, int size) {
+        List<LifeUserExpertOrderVo> data=lifeUserExpertOrderMapper.getPromotionOrderInfoList(expertId);
+            return ListToPage.setPage(data, page, size);
+//        return lifeUserExpertOrderMapper.getPromotionOrderInfoList(expertId);
     }
 
     @Override
@@ -78,6 +87,9 @@ public class LifeUserExpertOrderServiceImpl extends ServiceImpl<LifeUserExpertOr
         resultMap.put("actualGmv", lifeUserExpertOrderVos.getActualGmv());
         resultMap.put("completedOrdersNumber", lifeUserExpertOrderVos.getCompletedOrdersNumber());
         resultMap.put("storeVisitViewCount", lifeUserExpertOrderVos.getStoreVisitViewCount());
+        resultMap.put("firstFundsButton", lifeUserExpertOrderVos.getFirstFundsButton());
+        resultMap.put("endFundsButton", lifeUserExpertOrderVos.getEndFundsButton());
+        resultMap.put("name", lifeUserExpertOrderVos.getName());
 
         // 处理购买套餐状态
         Map<String, Object> buyMap = new HashMap<>();
@@ -155,4 +167,38 @@ public class LifeUserExpertOrderServiceImpl extends ServiceImpl<LifeUserExpertOr
     public List<LifeUserExpertOrderVo> getTalentPromotionOrder(String orderId, String expertId) {
         return lifeUserExpertOrderMapper.getTalentPromotionOrder(expertId, orderId);
     }
+
+    @Override
+    public Map<String, Object> getApplicationFunds(String buttonType, String buttonStatus ,String orderNo,String userPhone ) {
+        Map<String, Object> resultMap = new HashMap<>();
+        //buttonType 0: 首次打款 1: 尾次打款  buttonStatus  0未点击  1已点击审核中  2已点击审核通过
+        if ("0".equals(buttonType)){
+            String firstButton = "1";
+            String endButton = "";
+            lifeUserExpertOrderMapper.updateButton(firstButton,endButton,orderNo);
+            resultMap.put("firstButton", buttonStatus);
+            return resultMap;
+        } else if ("1".equals(buttonType)) {
+            String endButton = "1";
+            String firstButton = "";
+            lifeUserExpertOrderMapper.updateButton(firstButton,endButton,orderNo);
+            resultMap.put("endButton", buttonStatus);
+            LifeNotice lifeMessage = new LifeNotice();
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            String formattedDate = LocalDateTime.now().format(formatter);
+            String text = "您在" + formattedDate + "提交的申请尾款信息,已提交至平台审核,1-3个工作日会将审核结果发送到您应用内的消息-通知中,请注意查收。";
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("message", text);
+            lifeMessage.setReceiverId("user_" + userPhone);
+            lifeMessage.setTitle("申请尾款通知");
+            lifeMessage.setContext(jsonObject.toJSONString());
+            lifeMessage.setNoticeType(1);
+            lifeMessage.setIsRead(0);
+            lifeMessage.setDeleteFlag(0);
+            lifeMessage.setSenderId("system");
+            lifeNoticeMapper.insert(lifeMessage);
+            return resultMap;
+        }
+        return resultMap;
+    }
 }

+ 61 - 11
alien-store/src/main/java/shop/alien/store/service/impl/LifeUserExpertServiceImpl.java

@@ -1,5 +1,6 @@
 package shop.alien.store.service.impl;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -9,12 +10,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
-import shop.alien.entity.store.LifeUserExpert;
-import shop.alien.entity.store.LifeUserExpertOrder;
-import shop.alien.entity.store.LifeUserExpertWorks;
+import shop.alien.entity.store.*;
 import shop.alien.entity.store.vo.ExpertGoodsTypeVo;
 import shop.alien.entity.store.vo.LifeUserExpertOrderVo;
 import shop.alien.entity.store.vo.LifeUserExpertVo;
+import shop.alien.mapper.LifeNoticeMapper;
 import shop.alien.mapper.LifeUserExpertMapper;
 import shop.alien.mapper.LifeUserExpertOrderMapper;
 import shop.alien.mapper.LifeUserExpertWorksMapper;
@@ -24,8 +24,10 @@ import shop.alien.store.service.LifeUserExpertService;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.Period;
 import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -46,6 +48,7 @@ public class LifeUserExpertServiceImpl extends ServiceImpl<LifeUserExpertMapper,
     private final LifeUserExpertWorksMapper lifeUserExpertWorksMapper;
     private final LifeUserExpertOrderService lifeUserExpertOrderService;
     private final LifeUserExpertOrderMapper lifeUserExpertOrderMapper;
+    private final LifeNoticeMapper lifeNoticeMapper;
 
     @Override
     public IPage<LifeUserExpertVo> getUserExpertList(int page, int size, String userName, String expertCode, Integer userId) {
@@ -73,21 +76,54 @@ public class LifeUserExpertServiceImpl extends ServiceImpl<LifeUserExpertMapper,
     }
 
     @Override
-    public boolean becomeExpert(Integer userId, String expertType) {
+    public boolean becomeExpert(Integer id, String userPhone ,String comment ,Integer expertStatus) {
         LambdaQueryWrapper<LifeUserExpert> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(LifeUserExpert::getUserId, userId);
+        wrapper.eq(LifeUserExpert::getId, id);
         wrapper.eq(LifeUserExpert::getDeleteFlag, 1);
-        LifeUserExpert lifeUserExpert = lifeUserExpertMapper.selectIsExpert(userId);
+        LifeUserExpert lifeUserExpert = lifeUserExpertMapper.selectIsExpert(id);
         if (lifeUserExpert != null) {
             lifeUserExpert.setDeleteFlag(0);
-            lifeUserExpert.setExpertType(expertType);
+            lifeUserExpert.setExpertStatus(expertStatus);
             return lifeUserExpertMapper.updateExpert(lifeUserExpert);
         }
         LifeUserExpert expert = new LifeUserExpert();
-        expert.setUserId(userId);
-        expert.setExpertType(expertType);
-        expert.setExpertCode(setExpertCode());
-        return this.save(expert);
+        expert.setId(id);
+        expert.setExpertStatus(expertStatus);
+        if (expertStatus == 0){
+            expert.setExpertCode(setExpertCode());
+        } else if(expertStatus == 2){
+            expert.setExpertCode(null);
+            expert.setDeleteFlag(1);
+        }
+        LifeNotice lifeMessage = new LifeNotice();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String formattedDate = LocalDateTime.now().format(formatter);
+        if (expertStatus == 0){
+            String text = "您在"+formattedDate+"提交的信息已经通过审核。恭喜您成为达人。";
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("message", text);
+            lifeMessage.setReceiverId("user_"+userPhone);
+            lifeMessage.setTitle("审核通过通知");
+            lifeMessage.setContext(jsonObject.toJSONString());
+            lifeMessage.setNoticeType(1);
+            lifeMessage.setIsRead(0);
+            lifeMessage.setDeleteFlag(0);
+            lifeMessage.setSenderId("system");
+            lifeNoticeMapper.insert(lifeMessage);
+        } else if (expertStatus == 2) {
+            String text = "您在"+formattedDate+"提交的信息未通过审核,拒绝原因:"+comment+"。请您重新填写信息后再次提交至平台审核。";
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("message", text);
+            lifeMessage.setReceiverId("user_"+userPhone);
+            lifeMessage.setTitle("审核失败通知");
+            lifeMessage.setContext(jsonObject.toJSONString());
+            lifeMessage.setNoticeType(1);
+            lifeMessage.setIsRead(0);
+            lifeMessage.setDeleteFlag(0);
+            lifeMessage.setSenderId("system");
+            lifeNoticeMapper.insert(lifeMessage);
+        }
+        return lifeUserExpertMapper.updateExpert(expert);
     }
 
     public Integer setExpertCode() {
@@ -308,4 +344,18 @@ public class LifeUserExpertServiceImpl extends ServiceImpl<LifeUserExpertMapper,
                 .sorted(Comparator.comparing(ExpertGoodsTypeVo::getTypeCount).reversed())
                 .collect(Collectors.toList());
     }
+
+    @Override
+    public IPage<LifeUserExpertVo> getApplicationExpertList(int page, int size, String userName, String expertCode, Integer userId) {
+        QueryWrapper<LifeUserExpertVo> wrapper = new QueryWrapper<>();
+        wrapper.eq("expert.delete_flag", 0);
+        wrapper.eq("user.delete_flag", 0);
+        wrapper.eq(userId != null, "user.id", userId);
+        wrapper.eq( "expert.expert_status", 1);
+        wrapper.like(StringUtils.isNotEmpty(userName), "user.user_name", userName);
+        wrapper.like(StringUtils.isNotEmpty(expertCode), "expert.expert_code", expertCode);
+        wrapper.orderByDesc("accountMoney");
+        return lifeUserExpertMapper.getApplicationExpertList(new Page<>(page, size), wrapper);
+    }
+
 }

+ 5 - 0
alien-store/src/main/java/shop/alien/store/service/impl/ManagementInfoServiceImpl.java

@@ -179,6 +179,11 @@ public class ManagementInfoServiceImpl implements ManagementInfoService {
     }
 
     @Override
+    public ManagementInfoVo getCashOutDetail(Integer id) {
+        return managementInfoMapper.getCashOutDetail(id);
+    }
+
+    @Override
     public HashMap<String, Object> storeDetailBillingStatistics(String storeId) {
         // 获取当前日期
         LocalDate currentDate = LocalDate.now();

+ 6 - 2
alien-store/src/main/java/shop/alien/store/service/impl/PromotionPackageServiceImpl.java

@@ -1,9 +1,11 @@
 package shop.alien.store.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.netease.yidun.sdk.core.utils.StringUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import shop.alien.entity.result.R;
 import shop.alien.entity.store.LifePromotionPackage;
 import shop.alien.entity.store.StoreAliPayLog;
 import shop.alien.entity.store.vo.LifePromotionPackageVo;
@@ -14,6 +16,7 @@ import shop.alien.mapper.LifeUserExpertOrderMapper;
 import shop.alien.mapper.PromotionPackageMapper;
 import shop.alien.store.service.PromotionPackageService;
 import shop.alien.store.util.ali.AliApi;
+import shop.alien.util.common.ListToPage;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -48,8 +51,9 @@ public class PromotionPackageServiceImpl extends ServiceImpl<PromotionPackageMap
      * @return list
      */
     @Override
-    public List<LifePromotionPackageVo> getByExpertId(Long expertId) {
-        return promotionPackageMapper.getByExpertId(expertId);
+    public IPage<LifePromotionPackageVo> getByExpertId(Long expertId, Integer page, Integer size) {
+        List<LifePromotionPackageVo> promotionPackageVos=promotionPackageMapper.getByExpertId(expertId);
+        return ListToPage.setPage(promotionPackageVos,page, size);
     }
 
     @Override

+ 24 - 7
alien-store/src/main/java/shop/alien/store/service/impl/StoreIncomeDetailsRecordServiceImpl.java

@@ -15,9 +15,11 @@ import org.springframework.transaction.annotation.Transactional;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.*;
 import shop.alien.entity.store.vo.StoreIncomeDetailsRecordVo;
+import shop.alien.entity.store.vo.SystemConfigVo;
 import shop.alien.entity.store.vo.WebSocketVo;
 import shop.alien.mapper.*;
 import shop.alien.store.config.WebSocketProcess;
+import shop.alien.store.service.StoreDictService;
 import shop.alien.store.service.StoreIncomeDetailsRecordService;
 import shop.alien.store.service.StoreUserService;
 import shop.alien.store.util.ali.AliApi;
@@ -48,6 +50,8 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
 
     private final StoreCashOutRecordMapper storeCashOutRecordMapper;
 
+    private final StoreDictService storeDictService;
+
     private final StoreUserService storeUserService;
 
     private final AliApi aliApi;
@@ -167,7 +171,6 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
                     storeCashOutRecord.setCashOutType(0);
                     storeCashOutRecord.setDeleteFlag(0);
                     storeCashOutRecord.setMoney(withdrawalMoney);
-//                    storeCashOutRecord.setApproveTime(new Date());// 审批时间
                     storeCashOutRecord.setFailReason("支付失败");
                     storeCashOutRecord.setPayDate(new Date());//支付时间
                     storeCashOutRecord.setStoreUserId(storeUser.getId());
@@ -191,12 +194,26 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
     public String applyCashOut(Integer storeId, String payPassword) {
         StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getStoreId, storeId).eq(StoreUser::getPayPassword, payPassword));
         if (storeUser != null) {
-            //查询可用账单(大于创建时间3天)
+            int freeze = 0;
+            //查询冻结配置
+            SystemConfigVo systemConfigVo = storeDictService.getConfig("freeze");
+            if(systemConfigVo != null){
+                String freezeFlag = systemConfigVo.getConfigValue1();
+                String freezeDay =  systemConfigVo.getConfigValue2();
+                if(StringUtils.isNotBlank(freezeFlag) && freezeFlag.equals("1") && StringUtils.isNotBlank(freezeDay)){
+                    freeze = Integer.parseInt(freezeDay);
+                }
+            }
+
+            //查询可用账单
             LambdaQueryWrapper<StoreIncomeDetailsRecord> wrapper = new LambdaQueryWrapper<>();
             //当前时间-3天大于创建时间
-            wrapper.lt(StoreIncomeDetailsRecord::getCreatedTime, DateUtils.calcDays(new Date(), -3))
-                    //未绑定提现记录的
-                    .isNull(StoreIncomeDetailsRecord::getCashOutId).eq(StoreIncomeDetailsRecord::getStoreId, storeId);
+            if(freeze > 0){
+                wrapper.lt(StoreIncomeDetailsRecord::getCreatedTime, DateUtils.calcDays(new Date(), -freeze));
+            }
+            //未绑定提现记录的
+            wrapper.isNull(StoreIncomeDetailsRecord::getCashOutId);
+            wrapper.eq(StoreIncomeDetailsRecord::getStoreId, storeId);
             List<StoreIncomeDetailsRecord> list = this.list(wrapper);
             if (!list.isEmpty()) {
                 //总金额
@@ -285,7 +302,7 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
                     // 提现失败
                     storeCashOutRecord.setPaymentStatus(2);
                     storeCashOutRecord.setApproveTime(new Date());// 审批时间
-                    storeCashOutRecord.setFailReason("支付失败");
+                    storeCashOutRecord.setFailReason("支付宝回传异常情况");
                     storeCashOutRecord.setPayDate(new Date());//支付时间
                     storeCashOutRecordMapper.updateById(storeCashOutRecord);
                     // 提现失败通知
@@ -294,7 +311,7 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
                 }
             } else {
                 storeCashOutRecord.setPaymentStatus(4);
-                storeCashOutRecord.setFailReason(failReason);
+                storeCashOutRecord.setApproveFailReason(failReason);
                 storeCashOutRecord.setApproveTime(new Date());// 审批时间
                 storeCashOutRecordMapper.updateById(storeCashOutRecord);
                 // 拒绝将账单中的提现记录置空

+ 6 - 2
alien-store/src/main/java/shop/alien/store/service/impl/StoreInfoServiceImpl.java

@@ -1827,8 +1827,12 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
             // 发送通知
             LifeNotice lifeMessage = new LifeNotice();
             lifeMessage.setReceiverId("store_" + storeInfo.getStorePhone());
-            String text = "当前店铺状态已恢复正常。您可继续使用该店铺登录并享受各项服务,所有店铺数据均已妥善保留。";
-            lifeMessage.setContext(text);
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            String storeDate = simpleDateFormat.format(new Date());
+            String text = "您在"+storeDate+"撤销了注销账号,所有数据均已保留,您可继续在平台使用。";
+            com.alibaba.fastjson2.JSONObject jsonObject = new com.alibaba.fastjson2.JSONObject();
+            jsonObject.put("message", text);
+            lifeMessage.setContext(jsonObject.toJSONString());
             lifeMessage.setTitle("撤销注销店铺通知");
             lifeMessage.setSenderId("system");
             lifeMessage.setIsRead(0);

+ 65 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreUserExpertServiceImpl.java

@@ -1,18 +1,28 @@
 package shop.alien.store.service.impl;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
+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.LifeUserExpertVo;
+import shop.alien.mapper.ExpertImgMapper;
+import shop.alien.mapper.LifeNoticeMapper;
 import shop.alien.mapper.LifeUserExpertMapper;
+import shop.alien.mapper.LifeUserMapper;
 import shop.alien.store.service.StoreUserExpertService;
 
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.Period;
 import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -30,6 +40,12 @@ public class StoreUserExpertServiceImpl extends ServiceImpl<LifeUserExpertMapper
 
     private final LifeUserExpertMapper lifeUserExpertMapper;
 
+    private final ExpertImgMapper expertImgMapper;
+
+    private final LifeNoticeMapper lifeNoticeMapper;
+
+    private final LifeUserMapper lifeUserMapper;
+
     @Override
     public List<LifeUserExpertVo> getRankList() {
         return lifeUserExpertMapper.getRankList();
@@ -186,4 +202,53 @@ public class StoreUserExpertServiceImpl extends ServiceImpl<LifeUserExpertMapper
         return expertVo;
     }
 
+    @Override
+    public Map<String, String> getapplyExpert(ExpertImg expertImgs) {
+        Map<String, String> result = new HashMap<>();
+        //先对expertImgs进行判断若为空直接返回若不为空则进行保存操作
+        if (expertImgs == null) {
+            result.put("参数异常", "false");
+            return result;
+        }
+        LifeUserExpert expert = new LifeUserExpert();
+        expert.setUserId(expertImgs.getUserId());
+        expert.setDeleteFlag(0);
+        expert.setCreatedTime(new Date());
+        expert.setUpdatedTime(new Date());
+        expert.setExpertStatus(1);
+        expert.setAddExplanation(expertImgs.getAddExplanation());
+        lifeUserExpertMapper.insert(expert);
+        Integer insertedId = expert.getId();
+        for (String imgUrl : expertImgs.getImgUrl().split(",")) {
+            ExpertImg expertImg = new ExpertImg();
+            expertImg.setImgUrl(imgUrl);
+            expertImg.setDeleteFlag(0);
+            expertImg.setCreatedTime(new Date());
+            expertImg.setUpdatedTime(new Date());
+            expertImg.setExpertId(insertedId);
+            expertImg.setImgType(0);
+            expertImg.setUserId(expertImgs.getUserId());
+            expertImg.setPromoteType(expertImgs.getPromoteType());
+            expertImgMapper.insert(expertImg);
+        }
+        //发送消息
+        LifeUser lifeUser = lifeUserMapper.selectById(expertImgs.getUserId());
+        LifeNotice lifeMessage = new LifeNotice();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String formattedDate = LocalDateTime.now().format(formatter);
+        String text = "您在"+formattedDate+"申请成为达人,信息已提交至平台审核,1-3个工作日会将审核结果发送到您应用内的消息-通知中,请注意查收";
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("message", text);
+        lifeMessage.setReceiverId("user_"+lifeUser.getUserPhone());
+        lifeMessage.setTitle("申请达人通知");
+        lifeMessage.setContext(jsonObject.toJSONString());
+        lifeMessage.setNoticeType(1);
+        lifeMessage.setIsRead(0);
+        lifeMessage.setDeleteFlag(0);
+        lifeMessage.setSenderId("system");
+        lifeNoticeMapper.insert(lifeMessage);
+        return result;
+    }
+
+
 }

+ 22 - 0
alien-store/src/main/resources/bootstrap-uat.yml

@@ -0,0 +1,22 @@
+spring:
+  application:
+    name: alien-store
+
+  cloud:
+    nacos:
+      #注册中心
+      discovery:
+        server-addr: localhost:8848
+        username: nacos
+        password: ngfriend198092
+        namespace: 79060c39-10ad-4098-9022-5e8a47796f8f
+
+      #配置中心
+      config:
+        enabled: true
+        server-addr: localhost:8848
+        username: nacos
+        password: ngfriend198092
+        group: DEFAULT_GROUP
+        file-extension: yml
+        namespace: 79060c39-10ad-4098-9022-5e8a47796f8f