Prechádzať zdrojové kódy

Merge branch 'information-27' into dev

# Conflicts:
#	netflix-dao/src/main/java/com/cyksj/mapper/UserMapper.java
#	netflix-dao/src/main/java/com/cyksj/model/request/OrderPayRequest.java
#	netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonCategoryGoodsView.java
#	netflix-service/src/main/java/com/cyksj/redis/RedisService.java
#	netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java
#	netflix-service/src/main/java/com/cyksj/service/order/OrderDonService.java
#	netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
#	netflix-service/src/main/java/com/cyksj/service/pay/AliPayCommonService.java
#	netflix-service/src/main/java/com/cyksj/service/pay/impl/AliPayCommonServiceImpl.java
#	netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsOrderController.java
#	netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsUserController.java
#	netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonCategoryController.java
#	netflix-web/src/main/java/com/cyksj/web/controller/payment/OrderController.java
#	netflix-web/src/main/java/com/cyksj/web/controller/user/UserController.java
#	netflix-web/src/main/resources/application.yml
zoujiajian 2 rokov pred
rodič
commit
debde524c1
69 zmenil súbory, kde vykonal 2192 pridanie a 43 odobranie
  1. 35 0
      netflix-common/src/main/java/com/cyksj/common/util/TimeUtil.java
  2. 15 0
      netflix-dao/src/main/java/com/cyksj/mapper/InformationCategoryMapper.java
  3. 11 0
      netflix-dao/src/main/java/com/cyksj/mapper/InformationClickUserRecordMapper.java
  4. 20 0
      netflix-dao/src/main/java/com/cyksj/mapper/InformationMapper.java
  5. 11 0
      netflix-dao/src/main/java/com/cyksj/mapper/SearchHistoryMapper.java
  6. 11 0
      netflix-dao/src/main/java/com/cyksj/mapper/UserGalaxycoinRecordMapper.java
  7. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/home/HomeManagementConfigOrderRecordMapper.java
  8. 14 0
      netflix-dao/src/main/java/com/cyksj/mapper/order/OrderMasterDonMapper.java
  9. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/order/ShoppingCartDonMapper.java
  10. 16 0
      netflix-dao/src/main/java/com/cyksj/model/entity/HomeManagementConfig.java
  11. 18 0
      netflix-dao/src/main/java/com/cyksj/model/entity/HomeManagementConfigOrderRecord.java
  12. 57 0
      netflix-dao/src/main/java/com/cyksj/model/entity/Information.java
  13. 22 0
      netflix-dao/src/main/java/com/cyksj/model/entity/InformationCategory.java
  14. 18 0
      netflix-dao/src/main/java/com/cyksj/model/entity/InformationClickUserRecord.java
  15. 6 0
      netflix-dao/src/main/java/com/cyksj/model/entity/OrderDetailView.java
  16. 8 0
      netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java
  17. 187 0
      netflix-dao/src/main/java/com/cyksj/model/entity/OrderMasterDon.java
  18. 20 0
      netflix-dao/src/main/java/com/cyksj/model/entity/SearchHistory.java
  19. 22 0
      netflix-dao/src/main/java/com/cyksj/model/entity/ShoppingCartDon.java
  20. 5 0
      netflix-dao/src/main/java/com/cyksj/model/entity/User.java
  21. 36 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserGalaxycoinRecord.java
  22. 3 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonBackView.java
  23. 3 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonView.java
  24. 54 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderMasterDetailView.java
  25. 141 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderMasterDonBackView.java
  26. 106 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderMasterDonView.java
  27. 51 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderMasterSearchView.java
  28. 6 0
      netflix-dao/src/main/java/com/cyksj/model/request/ClickRecordReq.java
  29. 2 0
      netflix-dao/src/main/java/com/cyksj/model/request/HomeManageConfigReq.java
  30. 5 0
      netflix-dao/src/main/java/com/cyksj/model/request/OrderPayRequest.java
  31. 0 0
      netflix-dao/src/main/java/com/cyksj/model/request/ShoppingCartDonReq.java
  32. 44 0
      netflix-dao/src/main/java/com/cyksj/model/request/UnifiedOrderPayReq.java
  33. 4 2
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonCategoryView.java
  34. 36 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonSkuDetailView.java
  35. 4 2
      netflix-dao/src/main/java/com/cyksj/model/views/HomeManagementConfigView.java
  36. 76 0
      netflix-dao/src/main/java/com/cyksj/model/views/InformationDetailView.java
  37. 43 0
      netflix-dao/src/main/java/com/cyksj/model/views/InformationListView.java
  38. 106 0
      netflix-dao/src/main/java/com/cyksj/model/views/InformationView.java
  39. 17 0
      netflix-dao/src/main/java/com/cyksj/model/views/SearchView.java
  40. 25 0
      netflix-dao/src/main/java/com/cyksj/model/views/ShoppingCartDonPayDetailView.java
  41. 41 0
      netflix-dao/src/main/java/com/cyksj/model/views/ShoppingCartDonView.java
  42. 5 0
      netflix-dao/src/main/java/com/cyksj/model/views/UserPersonalView.java
  43. 11 0
      netflix-dao/src/main/resources/mapper/InformationCategoryMapper.xml
  44. 28 0
      netflix-dao/src/main/resources/mapper/InformationMapper.xml
  45. 10 0
      netflix-dao/src/main/resources/mapper/OrderMasterDonMapper.xml
  46. 2 1
      netflix-service/src/main/java/com/cyksj/redis/RedisService.java
  47. 21 5
      netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java
  48. 16 0
      netflix-service/src/main/java/com/cyksj/service/home/impl/ClickRecordFrontServiceImpl.java
  49. 5 0
      netflix-service/src/main/java/com/cyksj/service/home/impl/HomeManagementConfigServiceImpl.java
  50. 14 0
      netflix-service/src/main/java/com/cyksj/service/information/InformationCategoryService.java
  51. 17 0
      netflix-service/src/main/java/com/cyksj/service/information/InformationService.java
  52. 21 0
      netflix-service/src/main/java/com/cyksj/service/information/impl/InformationCategoryServiceImpl.java
  53. 32 0
      netflix-service/src/main/java/com/cyksj/service/information/impl/InformationServiceImpl.java
  54. 13 0
      netflix-service/src/main/java/com/cyksj/service/order/OrderMasterDonService.java
  55. 18 0
      netflix-service/src/main/java/com/cyksj/service/order/ShoppingCartDonService.java
  56. 3 0
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
  57. 17 0
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderMasterDonServiceImpl.java
  58. 79 0
      netflix-service/src/main/java/com/cyksj/service/order/impl/ShoppingCartOrderServiceImpl.java
  59. 21 9
      netflix-service/src/main/java/com/cyksj/service/paypal/PayPalService.java
  60. 25 14
      netflix-service/src/main/java/com/cyksj/service/stripe/StripeService.java
  61. 6 0
      netflix-service/src/main/java/com/cyksj/service/user/UserBenefitsService.java
  62. 11 0
      netflix-service/src/main/java/com/cyksj/service/user/UserGalaxycoinRecordService.java
  63. 24 4
      netflix-service/src/main/java/com/cyksj/service/user/impl/UserBenefitsServiceImpl.java
  64. 17 0
      netflix-service/src/main/java/com/cyksj/service/user/impl/UserGalaxycoinRecordServiceImpl.java
  65. 92 0
      netflix-web/src/main/java/com/cyksj/web/controller/information/InformationController.java
  66. 0 6
      netflix-web/src/main/java/com/cyksj/web/controller/manage/home/HomeManageConfigController.java
  67. 175 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/information/CmsInformationController.java
  68. 100 0
      netflix-web/src/main/java/com/cyksj/web/controller/payment/OrderShopCartController.java
  69. 84 0
      netflix-web/src/main/java/com/cyksj/web/controller/search/SearchController.java

+ 35 - 0
netflix-common/src/main/java/com/cyksj/common/util/TimeUtil.java

@@ -0,0 +1,35 @@
+package com.cyksj.common.util;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 18:06
+ */
+public class TimeUtil {
+    /**
+     * 差值日期
+     */
+    public static String getDifferenceTime(Date date){
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        long span = (System.currentTimeMillis() - date.getTime()) / 1000;
+        //比当前时间还大
+        if(span < 0){
+            return format.format(date);
+        }else if(span/(60*60*24*30) > 0){
+            //大于30天直接显示年月日
+            return format.format(date);
+        }else if(span/(60*60*24*7) > 0){
+            return  span/(60*60*24*7) +"周前";
+        }else if(span/(60*60*24) > 0){
+            return span/(60*60*24) +"天前";
+        }else if(span/(60*60) > 0 ){
+            return span/(60*60) +"小时前";
+        }else if(span/(60) > 0){
+            return span/(60) +"分钟前";
+        }
+
+        return "刚刚";
+    }
+}

+ 15 - 0
netflix-dao/src/main/java/com/cyksj/mapper/InformationCategoryMapper.java

@@ -0,0 +1,15 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.InformationCategory;
+
+import java.util.List;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 15:47
+ */
+public interface InformationCategoryMapper extends BaseMapper<InformationCategory> {
+    List<InformationCategory> getInformationCategory();
+
+}

+ 11 - 0
netflix-dao/src/main/java/com/cyksj/mapper/InformationClickUserRecordMapper.java

@@ -0,0 +1,11 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.InformationClickUserRecord;
+
+/**
+ * @author zwhui
+ * @date 2023/10/13 14:03
+ */
+public interface InformationClickUserRecordMapper extends BaseMapper<InformationClickUserRecord> {
+}

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/mapper/InformationMapper.java

@@ -0,0 +1,20 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cyksj.model.entity.Information;
+import com.cyksj.model.views.InformationListView;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 14:32
+ */
+public interface InformationMapper extends BaseMapper<Information> {
+    IPage<InformationListView> getInformation(@Param("page") Page<InformationListView> page, @Param("categoryId") Long categoryId);
+
+    List<InformationListView> getInformationByTitle(@Param("title") String title);
+}

+ 11 - 0
netflix-dao/src/main/java/com/cyksj/mapper/SearchHistoryMapper.java

@@ -0,0 +1,11 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.SearchHistory;
+
+/**
+ * @author zwhui
+ * @date 2023/10/13 10:55
+ */
+public interface SearchHistoryMapper extends BaseMapper<SearchHistory> {
+}

+ 11 - 0
netflix-dao/src/main/java/com/cyksj/mapper/UserGalaxycoinRecordMapper.java

@@ -0,0 +1,11 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserGalaxycoinRecord;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 10:23
+ */
+public interface UserGalaxycoinRecordMapper extends BaseMapper<UserGalaxycoinRecord> {
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/home/HomeManagementConfigOrderRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.home;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.HomeManagementConfigOrderRecord;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: HomeManagementConfigOrderRecord
+ * 创建者: JavaZou
+ * 创建时间:2023/10/18 11:32
+ */
+public interface HomeManagementConfigOrderRecordMapper extends BaseMapper<HomeManagementConfigOrderRecord> {
+}

+ 14 - 0
netflix-dao/src/main/java/com/cyksj/mapper/order/OrderMasterDonMapper.java

@@ -0,0 +1,14 @@
+package com.cyksj.mapper.order;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.OrderMasterDon;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderMasterDonMapper
+ * 创建者: JavaZou
+ * 创建时间:2023/10/13 18:08
+ */
+public interface OrderMasterDonMapper extends BaseMapper<OrderMasterDon> {
+	String getOrderPayTitle(Long mOid);
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/order/ShoppingCartDonMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.order;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.ShoppingCartDon;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: ShoppingCartDonMapper
+ * 创建者: JavaZou
+ * 创建时间:2023/10/12 15:47
+ */
+public interface ShoppingCartDonMapper extends BaseMapper<ShoppingCartDon> {
+}

+ 16 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/HomeManagementConfig.java

@@ -30,6 +30,8 @@ public class HomeManagementConfig extends BaseEntity{
 
 	private Boolean deleted;
 
+	private AdType adType;
+
 	@Getter
 	public enum Type {
 		ad("广告"),
@@ -43,4 +45,18 @@ public class HomeManagementConfig extends BaseEntity{
 			this.desc = desc;
 		}
 	}
+
+	@Getter
+	public enum AdType {
+		pc("pc首页"),
+		h5("h5首页"),
+		pcSec("pc首页副"),
+		pcDis("pc发现首页"),
+		;
+		String desc;
+
+		AdType(String desc) {
+			this.desc = desc;
+		}
+	}
 }

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/HomeManagementConfigOrderRecord.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: HomeManagementConfigOrderRecord
+ * 创建者: JavaZou
+ * 创建时间:2023/10/18 11:31
+ */
+@Getter
+@Setter
+public class HomeManagementConfigOrderRecord {
+	private Long configId;
+
+	private Long mOid;
+}

+ 57 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/Information.java

@@ -0,0 +1,57 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author zwhui
+ * @date 2023/10/11 17:11
+ */
+@Getter
+@Setter
+public class Information extends BaseEntity{
+    /**
+     * 文章标题
+     */
+    private String title;
+
+    /**
+     * 缩略图
+     */
+    private String thumbnail;
+
+    /**
+     * 文章类型
+     */
+    private String categoryIds;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+    /**
+     * true 上架 || false 下架
+     */
+    private Boolean status;
+
+    /**
+     * true 推荐 || false
+     */
+    private Boolean recommend;
+
+    /**
+     * true 置顶 || false
+     */
+    private Boolean top;
+
+    /**
+     * true 存在 || false 删除
+     */
+    private Boolean deleted;
+
+    /**
+     * 推荐商品
+     */
+    private String goodsIds;
+}

+ 22 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/InformationCategory.java

@@ -0,0 +1,22 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 15:36
+ */
+@Getter
+@Setter
+public class InformationCategory extends BaseEntity{
+    /**
+     * 类型名称
+     */
+    private String name;
+
+    /**
+     * 排序
+     */
+    private Integer sortBy;
+}

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/InformationClickUserRecord.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author zwhui
+ * @date 2023/10/13 14:02
+ */
+@Getter
+@Setter
+public class InformationClickUserRecord extends BaseEntity{
+    private Long userId;
+
+    private Long goodsId;
+
+    private Long infoId;
+}

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDetailView.java

@@ -25,6 +25,12 @@ public class OrderDetailView {
 	@DbField("o.id")
 	private Long id;
 
+	/**
+	 * 主订单id
+	 */
+	@DbField("o.m_oid")
+	private Long mOid;
+
 	/**
 	 * 商品id
 	 */

+ 8 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java

@@ -22,6 +22,8 @@ import java.util.List;
 @Setter
 public class OrderDon extends BaseEntity implements Serializable {
 
+    private Long mOid;
+
     /**
      * 座位id
      */
@@ -236,6 +238,11 @@ public class OrderDon extends BaseEntity implements Serializable {
      */
     private BigDecimal balance;
 
+    /**
+     * 银河币
+     */
+    private BigDecimal galaxycoin;
+
     /**
      * 付款说明
      */
@@ -318,6 +325,7 @@ public class OrderDon extends BaseEntity implements Serializable {
         EQUIPMENT("equipment", "实物设备分销"),
         PAY_EQUIPMENT("pay_equipment", "自购设备"),
         BALANCE("balance", "余额支付"),
+        GALAXYCOIN("galaxycoin", "银河币支付"),
         PAYPAL("paypal","paypal支付"),
         STRIPE("stripe","stripe支付")
         ;

+ 187 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/OrderMasterDon.java

@@ -0,0 +1,187 @@
+package com.cyksj.model.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderMasterDon
+ * 创建者: JavaZou
+ * 创建时间:2023/10/12 10:48
+ */
+@Getter
+@Setter
+public class OrderMasterDon extends BaseEntity{
+
+	/** 订单号 */
+	private String orderNo ;
+
+	/**
+	 * 微信订单号
+	 */
+	private String transactionId;
+
+
+	/** 用户id */
+	private Long userId ;
+
+	/**
+	 * openId
+	 */
+	private String openId;
+
+	/** 金额 */
+	private BigDecimal money ;
+
+	/**
+	 * 实际金额
+	 */
+	private BigDecimal realMoney;
+
+	/**
+	 * 退款金额
+	 */
+	private BigDecimal refundMoney;
+
+	/**
+	 * 海外支付金额
+	 */
+	private BigDecimal abroadMoney;
+
+	/**
+	 * 手续费
+	 */
+	private BigDecimal abroadTransactionFee;
+
+	/**
+	 * 退款原因
+	 */
+	private String refundDesc;
+
+
+	/** 支付状态 */
+	private Status status ;
+
+	/**
+	 * 支付类型
+	 */
+	private OrderMasterDon.Type type;
+
+	/**
+	 * 订单类型 1普通订单、2续费订单
+	 * 默认值为1
+	 */
+	private Integer orderType;
+
+	/**
+	 * 支付时间
+	 */
+	private Date payTime;
+
+	/**
+	 * 是否是分销订单
+	 */
+	private Boolean isDistribute;
+
+	/**
+	 * 是否是固定推广者分销
+	 */
+	private Boolean isFixedDistribute;
+
+	/**
+	 * 商户id
+	 */
+	private String shopId;
+
+	/**
+	 * 渠道链接id
+	 */
+	private Long popularizeId;
+
+	/**
+	 * 是否是推广未登录用户购买订单
+	 */
+	private Boolean isNoLogin;
+
+	/**
+	 * 是否是网页端支付 默认0移动端支付
+	 */
+	private Boolean isWebPay;
+
+	/**
+	 * 关联推广id
+	 */
+	private Long dsPopularizeId;
+
+	/**
+	 * cps后台推广id
+	 */
+	private Long cpsPopularizeId;
+
+	/**
+	 * 是否优惠加购规格
+	 */
+	private Boolean isDp;
+
+	private String payTitle;
+
+	/**
+	 * 是否是额外硬塞车票车位的订单
+	 */
+	private Boolean isOt;
+
+	/**
+	 * 店铺id
+	 */
+	private Long yhsId;
+
+	public enum Status {
+		/**
+		 * 订单状态
+		 */
+		close("已关闭"),
+		noPayment("待付款"),
+		hasPayment("已付款"),
+		transport("已发货"),
+		received("已签收"),
+		complete("已完成"),
+		refund("已退款"),
+		;
+
+		private String desc;
+
+		Status(String desc) {
+			this.desc = desc;
+		}
+
+		public String getDesc() {
+			return desc;
+		}
+	}
+
+	@Getter
+	@AllArgsConstructor
+	public enum Type{
+		WeChat("wechat","微信"),
+		ALI_PAY("zfb","支付宝"),
+		EX_CODE("exchange_code","兑换码"),
+		LOTTERY("lottery","抽奖"),
+		EQUIPMENT("equipment", "实物设备分销"),
+		PAY_EQUIPMENT("pay_equipment", "自购设备"),
+		BALANCE("balance", "余额支付"),
+		PAYPAL("paypal","paypal支付"),
+		STRIPE("stripe","stripe支付")
+		;
+		String type;
+		String desc;
+
+		public static OrderMasterDon.Type getType(String type) {
+			return Arrays.stream(OrderMasterDon.Type.values()).filter(tp -> tp.getType().equals(type)).findFirst().orElse(ALI_PAY);
+		}
+	}
+}

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/SearchHistory.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author zwhui
+ * @date 2023/10/13 10:43
+ */
+@Getter
+@Setter
+public class SearchHistory extends BaseEntity{
+
+    /**
+     * 搜索名称
+     */
+    private String name;
+
+    private Long userId;
+}

+ 22 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/ShoppingCartDon.java

@@ -0,0 +1,22 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: ShoppingCartDon
+ * 创建者: JavaZou
+ * 创建时间:2023/10/12 15:47
+ */
+@Getter
+@Setter
+public class ShoppingCartDon extends BaseEntity{
+	private Long userId;
+
+	private Long goodsId;
+
+	private Long skuId;
+
+	private Integer num;
+}

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/User.java

@@ -67,6 +67,11 @@ public class User extends BaseEntity implements Serializable{
      */
     private BigDecimal yhsMoney;
 
+    /**
+     * 银河币
+     */
+    private BigDecimal galaxycoin;
+
     /**
      * 推广id
      */

+ 36 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserGalaxycoinRecord.java

@@ -0,0 +1,36 @@
+package com.cyksj.model.entity;
+
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 09:58
+ */
+@Getter
+@Setter
+@SearchBean(tables = "user_galaxycoin_record")
+public class UserGalaxycoinRecord extends BaseEntity{
+    private Long userId;
+
+    private BigDecimal galaxycoin;
+
+    private String remark;
+
+    private Source source;
+
+    @Getter
+    public enum Source {
+        payment("下单"),
+        refund("订单退款");
+        String desc;
+
+        Source(String desc) {
+            this.desc = desc;
+        }
+    }
+
+}

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonBackView.java

@@ -32,6 +32,9 @@ public class OrderDonBackView {
 	@DbField("o.id")
 	private Long id;
 
+	@DbField("o.m_oid")
+	private Long mOid;
+
 	@DbIgnore
 	private String channel;
 

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonView.java

@@ -29,6 +29,9 @@ public class OrderDonView {
     @DbField("o.id")
     private Long id;
 
+    @DbField("o.m_oid")
+    private Long mOid;
+
     @DbField("o.relation_id")
     private Long relationId;
 

+ 54 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderMasterDetailView.java

@@ -0,0 +1,54 @@
+package com.cyksj.model.manage.views;
+
+import com.cyksj.model.entity.OrderDetailView;
+import com.cyksj.model.entity.OrderMasterDon;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderMasterDetailView
+ * 创建者: JavaZou
+ * 创建时间:2023/10/16 10:23
+ */
+@Getter
+@Setter
+@SearchBean(tables = "order_master_don o")
+public class OrderMasterDetailView {
+	@DbField("o.id")
+	private Long mOid;
+
+	@DbField("o.order_no")
+	private String orderNo;
+
+	@DbField("o.money")
+	private BigDecimal money;
+
+	@DbField("o.status")
+	private OrderMasterDon.Status status;
+
+	@DbField("o.type")
+	private OrderMasterDon.Type type;
+
+	@DbField("o.num")
+	private Integer num;
+
+	@DbField("o.created_time")
+	private Date createdTime;
+
+	@DbField("o.pay_time")
+	private Date payTime;
+
+	@DbField("o.pay_title")
+	private String payTitle;
+
+	@DbIgnore
+	private List<OrderDetailView> orderDetailViews;
+}

+ 141 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderMasterDonBackView.java

@@ -0,0 +1,141 @@
+package com.cyksj.model.manage.views;
+
+import com.cyksj.model.entity.OrderMasterDon;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderMasterDonBackView
+ * 创建者: JavaZou
+ * 创建时间:2023/10/16 11:30
+ */
+@Getter
+@Setter
+@SearchBean(tables = "order_master_don o" +
+		" left join user u on o.user_id = u.id" +
+		" left join order_don_transport odt on odt.order_id = o.id",
+		where = ":condition:"
+)
+public class OrderMasterDonBackView {
+	@DbField("o.id")
+	private Long mOid;
+
+	@DbIgnore
+	private String channel;
+
+	/**
+	 * 是否是额外硬塞的虚拟车票订单
+	 */
+	@DbField("o.is_ot")
+	private Boolean isOt;
+
+	@DbField("o.order_no")
+	private String orderNo;
+
+	@DbField("o.transaction_id")
+	private String transactionId;
+
+	@DbField("o.user_id")
+	private Long userId;
+
+	@DbField("u.nickname")
+	private String nickname;
+
+	@DbField("case when u.login_phone != '' then 'phone' when u.email != '' then 'email' when u.open_id != '' then 'wechat' else 'wechat' end")
+	private String register;
+
+	/**
+	 * 登录注册手机号
+	 */
+	@DbField("u.login_phone")
+	private String loginPhone;
+
+	/**
+	 * 登录注册邮箱
+	 */
+	@DbField("u.email")
+	private String email;
+
+	@DbField("u.is_google")
+	private Boolean isGoogle;
+
+	@DbField("o.money")
+	private BigDecimal money;
+
+	@DbField("o.refund_money")
+	private BigDecimal refundMoney;
+
+	@DbField("o.status")
+	private OrderMasterDon.Status status;
+
+	@DbField("o.type")
+	private OrderMasterDon.Type type;
+
+	@DbField("o.order_type")
+	private Integer orderType;
+
+	@DbField("o.num")
+	private Integer num;
+
+	@DbField("o.created_time")
+	private Date createdTime;
+
+	@DbField("o.popularize_id")
+	private Long popularizeId;
+
+	@DbField("o.pay_time")
+	private Date payTime;
+
+	@DbField("o.is_dp")
+	private Boolean isDp;
+
+	@DbField("o.pay_title")
+	private String payTitle;
+
+	/**
+	 * 收货人
+	 */
+	@DbField("odt.receiver")
+	private String receiver;
+
+	/**
+	 * 手机号
+	 */
+	@DbField("odt.phone")
+	private String phone;
+
+	/**
+	 * 省份
+	 */
+	@DbField("odt.province")
+	private String province;
+
+	/**
+	 * 城市
+	 */
+	@DbField("odt.city")
+	private String city;
+
+	/**
+	 * 区/县
+	 */
+	@DbField("odt.district")
+	private String district;
+
+	/**
+	 * 详细地址
+	 */
+	@DbField("odt.address")
+	private String address;
+
+	@DbIgnore
+	private List<OrderDonBackView> orderDonViews;
+}

+ 106 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderMasterDonView.java

@@ -0,0 +1,106 @@
+package com.cyksj.model.manage.views;
+
+import com.cyksj.model.entity.OrderDonWaybill;
+import com.cyksj.model.entity.OrderMasterDon;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderMasterDonView
+ * 创建者: JavaZou
+ * 创建时间:2023/10/13 17:51
+ */
+@Getter
+@Setter
+@SearchBean(tables = "order_master_don o left join order_don_transport odt on odt.order_id = o.id",
+		where = ":condition:")
+public class OrderMasterDonView {
+
+	@DbField("o.id")
+	private Long mOid;
+
+	@DbField("o.order_no")
+	private String orderNo;
+
+	@DbField("o.user_id")
+	@JsonIgnore
+	private Long userId;
+
+	@DbField("o.money")
+	private BigDecimal money;
+
+	@DbField("o.status")
+	private OrderMasterDon.Status status;
+
+	@DbField("o.type")
+	private OrderMasterDon.Type type;
+
+	@DbField("o.num")
+	private Integer num;
+
+	@DbField("o.created_time")
+	private Date createdTime;
+
+	@DbField("o.pay_time")
+	private Date payTime;
+
+	@DbField("o.is_dp")
+	private Boolean isDp;
+
+	@DbField("o.pay_title")
+	private String payTitle;
+
+	/**
+	 * 收货人
+	 */
+	@DbField("odt.receiver")
+	private String receiver;
+
+	/**
+	 * 手机号
+	 */
+	@DbField("odt.phone")
+	private String phone;
+
+	/**
+	 * 省份
+	 */
+	@DbField("odt.province")
+	private String province;
+
+	/**
+	 * 城市
+	 */
+	@DbField("odt.city")
+	private String city;
+
+	/**
+	 * 区/县
+	 */
+	@DbField("odt.district")
+	private String district;
+
+	/**
+	 * 详细地址
+	 */
+	@DbField("odt.address")
+	private String address;
+
+	@DbField("o.yhs_id")
+	private Long yhsId;
+
+	@DbIgnore
+	private OrderDonWaybill waybill;
+
+	@DbIgnore
+	List<OrderDonView> orderDonViews;
+}

+ 51 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderMasterSearchView.java

@@ -0,0 +1,51 @@
+package com.cyksj.model.manage.views;
+
+import com.cyksj.model.entity.OrderMasterDon;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderMasterSearchView
+ * 创建者: JavaZou
+ * 创建时间:2023/10/16 9:38
+ */
+@Getter
+@Setter
+@SearchBean(tables = "order_master_don o")
+public class OrderMasterSearchView {
+	@DbField("o.id")
+	private Long mOid;
+
+	@DbField("o.order_no")
+	private String orderNo;
+
+	@DbField("o.money")
+	private BigDecimal money;
+
+	@DbField("o.status")
+	private OrderMasterDon.Status status;
+
+	@DbField("o.type")
+	private OrderMasterDon.Type type;
+
+	@DbField("o.num")
+	private Integer num;
+
+	@DbField("o.created_time")
+	private Date createdTime;
+
+	@DbField("o.pay_time")
+	private Date payTime;
+
+	@DbField("o.pay_title")
+	private String payTitle;
+
+	@DbField("o.yhs_id")
+	private Long yhsId;
+}

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/request/ClickRecordReq.java

@@ -20,9 +20,15 @@ public class ClickRecordReq {
 
 	private Long goodsId;
 
+	/**
+	 * 文章id
+	 */
+	private Long infoId;
+
 	/**
 	 * 1、首页点击
 	 * 2、平台分类点击
+	 * 3、文章点击
 	 */
 	private Integer type;
 }

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/request/HomeManageConfigReq.java

@@ -30,6 +30,8 @@ public class HomeManageConfigReq {
 
 	private HomeManagementConfig.Type type;
 
+	private HomeManagementConfig.AdType adType;
+
 	private Integer sorted;
 
 	private String tag;

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/request/OrderPayRequest.java

@@ -74,6 +74,11 @@ public class OrderPayRequest {
      */
     private Long popularizeId;
 
+    /**
+     * 文章id
+     */
+    private Long infoId;
+
     private Boolean isNoLogin;
 
     /**

+ 0 - 0
netflix-dao/src/main/java/com/cyksj/model/request/ShoppingCartDonReq.java


+ 44 - 0
netflix-dao/src/main/java/com/cyksj/model/request/UnifiedOrderPayReq.java

@@ -0,0 +1,44 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UnifiedOrderPayReq
+ * 创建者: JavaZou
+ * 创建时间:2023/10/12 18:27
+ */
+@Getter
+@Setter
+public class UnifiedOrderPayReq {
+	private Long userId;
+
+	/**
+	 * 推荐人id
+	 */
+	private Long sharedId;
+
+	/**
+	 * 是否是网页端支付 默认0移动端支付
+	 */
+	private Boolean isWebPay;
+
+	private String callback;
+
+	private String callbackType;
+
+	private Boolean isNoLogin;
+
+	/**
+	 * 店铺id
+	 */
+	private String customId;
+
+	/**
+	 * 购买商品
+	 */
+	private List<OrderPayRequest> payGoods;
+}

+ 4 - 2
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonCategoryView.java

@@ -1,7 +1,6 @@
 package com.cyksj.model.views;
 
 import com.ejlchina.searcher.bean.DbField;
-import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Getter;
 import lombok.Setter;
@@ -32,9 +31,12 @@ public class GoodsDonCategoryView {
 	@DbField("count(g.id)")
 	private Integer count;
 
-	@DbIgnore
+	@DbField("select count(*) from goods_click_user_record gcur where gcur.category = gc.id")
 	private Integer click;
 
+	@DbField("select count(*) from goods_don_category_relate gcr left join order_don o on o.goods_id = gcr.goods_id where gcr.category = gc.id and o.status not in ('close','noPayment','refund')")
+	private Integer orderNum;
+
 	@DbField("gc.status")
 	private Boolean status;
 

+ 36 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonSkuDetailView.java

@@ -0,0 +1,36 @@
+ package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: GoodsDonSkuDetailView
+ * 创建者: JavaZou
+ * 创建时间:2023/10/12 18:05
+ */
+@Getter
+@Setter
+@SearchBean(tables = "goods_don g left join goods_don_sku sku on sku.goods_id = g.id",
+		where = "g.deleted is true")
+public class GoodsDonSkuDetailView {
+	@DbField("g.id")
+	private Long goodsId;
+
+	@DbField("g.title")
+	private String title;
+
+	@DbField("sku.id")
+	private Long skuId;
+
+	@DbField("sku.spec_val")
+	private String specVal;
+
+	@DbField("sku.status")
+	private Boolean goodsStatus;
+
+	@DbField("g.status")
+	private Boolean goodsSkuStatus;
+}

+ 4 - 2
netflix-dao/src/main/java/com/cyksj/model/views/HomeManagementConfigView.java

@@ -2,7 +2,6 @@ package com.cyksj.model.views;
 
 import com.cyksj.model.entity.HomeManagementConfig;
 import com.ejlchina.searcher.bean.DbField;
-import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Getter;
 import lombok.Setter;
@@ -50,9 +49,12 @@ public class HomeManagementConfigView {
 	@DbField("hc.status")
 	private Boolean status;
 
-	@DbIgnore
+	@DbField("select count(*) from home_management_config_user_click_record hcr where hcr.config_id = hc.id")
 	private Integer click;
 
+	@DbField("select count(*) from home_management_config_order_record hor left join order_don o on o.id = hor.order_id where o.status not in ('close','noPayment')")
+	private Integer orderNum;
+
 	@DbField("hc.created_time")
 	private Date createdTime;
 }

+ 76 - 0
netflix-dao/src/main/java/com/cyksj/model/views/InformationDetailView.java

@@ -0,0 +1,76 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @author zwhui
+ * @date 2023/10/13 13:38
+ */
+@Getter
+@Setter
+@SearchBean(tables = "information i")
+public class InformationDetailView {
+    @DbField("i.id")
+    private Long id;
+
+    /**
+     * 文章标题
+     */
+    @DbField("i.title")
+    private String title;
+
+    /**
+     * 缩略图
+     */
+    @DbField("i.thumbnail")
+    private String thumbnail;
+
+    /**
+     * 文章类型
+     */
+    @DbField("i.category_ids")
+    private String categoryIds;
+
+
+    /**
+     * 内容
+     */
+    @DbField("i.content")
+    private String content;
+
+    /**
+     * true 上架 || false 下架
+     */
+    @DbField("i.status")
+    private Boolean status;
+
+    /**
+     * true 推荐 || false
+     */
+    @DbField("i.recommend")
+    private Boolean recommend;
+
+    /**
+     * true 置顶 || false
+     */
+    @DbField("i.top")
+    private Boolean top;
+
+    /**
+     * 推荐商品id
+     */
+    @DbField("i.goods_ids")
+    private String goodsIds;
+
+    /**
+     * 推荐商品名
+     */
+    @DbIgnore
+    private List<GoodsFrontListView> goods;
+}

+ 43 - 0
netflix-dao/src/main/java/com/cyksj/model/views/InformationListView.java

@@ -0,0 +1,43 @@
+package com.cyksj.model.views;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.cyksj.common.util.TimeUtil;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 18:02
+ */
+@Getter
+@Setter
+public class InformationListView {
+
+    private Long id;
+    /**
+     * 文章标题
+     */
+    private String title;
+
+    /**
+     * 缩略图
+     */
+    private String thumbnail;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+    private Date createdTime;
+
+    @TableField(exist = false)
+    private String differenceTime;
+
+    public void setCreatedTime(Date createdTime) {
+        this.createdTime = createdTime;
+        this.differenceTime = TimeUtil.getDifferenceTime(createdTime);
+    }
+}

+ 106 - 0
netflix-dao/src/main/java/com/cyksj/model/views/InformationView.java

@@ -0,0 +1,106 @@
+package com.cyksj.model.views;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.model.entity.InformationClickUserRecord;
+import com.cyksj.model.entity.OrderDon;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 14:58
+ */
+@Getter
+@Setter
+@SearchBean(tables = "information i",where = "i.deleted is true")
+public class InformationView {
+    @DbField("i.id")
+    private Long id;
+
+    /**
+     * 文章标题
+     */
+    @DbField("i.title")
+    private String title;
+
+    /**
+     * 缩略图
+     */
+    @DbField("i.thumbnail")
+    private String thumbnail;
+
+    /**
+     * 文章类型
+     */
+    @DbField("i.category_ids")
+    private String categoryIds;
+
+    /**
+     * 文章类型名
+     */
+    @DbIgnore
+    private List<String> categoryNames;
+
+    /**
+     * 内容
+     */
+    @DbField("i.content")
+    private String content;
+
+    /**
+     * true 上架 || false 下架
+     */
+    @DbField("i.status")
+    private Boolean status;
+
+    /**
+     * true 推荐 || false
+     */
+    @DbField("i.recommend")
+    private Boolean recommend;
+
+    /**
+     * true 置顶 || false
+     */
+    @DbField("i.top")
+    private Boolean top;
+
+    /**
+     * 推荐商品id
+     */
+    @DbField("i.goods_ids")
+    private String goodsIds;
+
+    @DbField("i.created_time")
+    private Date createdTime;
+
+    /**
+     * 推荐商品名
+     */
+    @DbIgnore
+    private List<String> goodsTitles;
+
+    /**
+     * 点击数
+     */
+    @DbField("select count(*) from information_click_user_record ir where ir.info_id = i.id and ir.goods_id is not null")
+    private Integer click;
+
+    /**
+     * 下单数
+     */
+    @DbField("select count(*) from information_click_user_record ir left join order_don o on o.id = ir.order_id where ir.info_id = i.id and o.status not in ('close','noPayment')")
+    private Integer orderNum;
+
+    /**
+     * 浏览量
+     */
+    @DbField("select count(*) from information_click_user_record ir where ir.info_id = i.id and ir.goods_id is null and ir.order_id is null")
+    private Integer visit;
+}

+ 17 - 0
netflix-dao/src/main/java/com/cyksj/model/views/SearchView.java

@@ -0,0 +1,17 @@
+package com.cyksj.model.views;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @author zwhui
+ * @date 2023/10/13 12:11
+ */
+@Getter
+@Setter
+public class SearchView {
+    private List<GoodsFrontListView> goodsList;
+    private List<InformationListView> informationList;
+}

+ 25 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ShoppingCartDonPayDetailView.java

@@ -0,0 +1,25 @@
+package com.cyksj.model.views;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: ShoppingCartDonPayDetailView
+ * 创建者: JavaZou
+ * 创建时间:2023/10/12 16:16
+ */
+@Getter
+@Setter
+public class ShoppingCartDonPayDetailView {
+	private String orderNo;
+
+	private BigDecimal money;
+
+	private String payTitle;
+
+	private Date createdTime;
+}

+ 41 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ShoppingCartDonView.java

@@ -0,0 +1,41 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: ShoppingCartDonView
+ * 创建者: JavaZou
+ * 创建时间:2023/10/12 16:06
+ */
+@Getter
+@Setter
+@SearchBean(tables = "(select * from shopping_cart_don :uid:) sc left join goods_don g on g.id = sc.goods_id" +
+		" left join goods_don_sku sku on sku.id = sc.sku_id :uid:")
+public class ShoppingCartDonView {
+	@DbField("sc.id")
+	private Long shopCartId;
+
+	@DbField("sc.goods_id")
+	private Long goodsId;
+
+	@DbField("g.title")
+	private String title;
+
+	@DbField("sc.sku_id")
+	private Long skuId;
+
+	@DbField("sku.spec_val")
+	private String specVal;
+
+	@DbField("sc.num")
+	private Integer num;
+
+	@DbField("sc.created_time")
+	private Date createdTime;
+}

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/views/UserPersonalView.java

@@ -50,4 +50,9 @@ public class UserPersonalView {
 	private Integer numOfGiftCard;
 
 	private String phone;
+
+	/**
+	 * 银河币
+	 */
+	private BigDecimal galaxycoin;
 }

+ 11 - 0
netflix-dao/src/main/resources/mapper/InformationCategoryMapper.xml

@@ -0,0 +1,11 @@
+<?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="com.cyksj.mapper.InformationCategoryMapper">
+
+
+    <select id="getInformationCategory" resultType="com.cyksj.model.entity.InformationCategory">
+        select ic.* from information_category ic, information i where JSON_CONTAINS(i.category_ids, CONCAT('"',ic.id,'"')) = 1 GROUP BY id,sort_by order by sort_by
+    </select>
+
+</mapper>

+ 28 - 0
netflix-dao/src/main/resources/mapper/InformationMapper.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="com.cyksj.mapper.InformationMapper">
+
+
+    <select id="getInformation" resultType="com.cyksj.model.views.InformationListView">
+        select id,title,thumbnail,created_time,content from information where status is true and deleted is true
+        <choose>
+            <when test="categoryId != null">
+                and JSON_CONTAINS(category_ids,'"${categoryId}"') = 1
+            </when>
+            <otherwise>
+                and recommend is true
+            </otherwise>
+        </choose>
+        order by case when top is true then 1 else 2 end,created_time desc
+    </select>
+
+    <select id="getInformationByTitle" resultType="com.cyksj.model.views.InformationListView">
+        select id,title,thumbnail,created_time,content
+        from information
+        where title like '%${title}%'
+          and status is true
+          and deleted is true
+        order by created_time desc
+    </select>
+</mapper>

+ 10 - 0
netflix-dao/src/main/resources/mapper/OrderMasterDonMapper.xml

@@ -0,0 +1,10 @@
+<?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="com.cyksj.mapper.order.OrderMasterDonMapper">
+
+    <select id="getOrderPayTitle" resultType="java.lang.String">
+        select group_concat(g.title)
+        from (select distinct goods_id from order_don where m_oid = #{mOid} o)
+                 left join goods_don g on g.id = o.goods_id
+    </select>
+</mapper>

+ 2 - 1
netflix-service/src/main/java/com/cyksj/redis/RedisService.java

@@ -663,8 +663,9 @@ public class RedisService {
 
         CORP_CUSTOMER_ACQUISTION_CLICKID("corp:customer:post:%s","巨量投放,获客链接 跳转存储点击id",60*60*24),
         //获客链接 到企业微信内将平台标识与unionId 对应
-        CORP_CUSTOMER_ACQUISTION_UNIONID_CLICKID("corp:customer:unionId:%s","unionid 对应的clickId",60*60*24)
+        CORP_CUSTOMER_ACQUISTION_UNIONID_CLICKID("corp:customer:unionId:%s","unionid 对应的clickId",60*60*24),
 
+        INFORMATION_KEY("information_key:", "文章", 30 * 60L),
         ;
 
         private String name;

+ 21 - 5
netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java

@@ -19,6 +19,7 @@ import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.*;
 import com.cyksj.mapper.manage.exchange.ExchangeCodeMapper;
 import com.cyksj.mapper.market.draw.LuckyDrawRecordMapper;
+import com.cyksj.mapper.order.OrderMasterDonMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.excel.ExcelExchangeCodeData;
 import com.cyksj.model.request.ExchangeCodeReq;
@@ -69,6 +70,8 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 
 	private final OrderDonMapper orderDonMapper;
 
+	private final OrderMasterDonMapper orderMasterDonMapper;
+
 	private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
 	private final LuckyDrawRecordMapper luckyDrawRecordMapper;
@@ -291,11 +294,24 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 				}
 			}
 		} else {
+			StringBuilder payTitle = new StringBuilder();
+			payTitle.append(goodsDon.getTitle());
+			payTitle.append(sku.getSpecVal());
+
+			OrderMasterDon orderMasterDon = new OrderMasterDon();
 			/* 生成订单 */
 			String donNo = SEQUENCE.nextId().toString();
+			orderMasterDon.setOrderNo(donNo);
+			orderMasterDon.setOpenId(user.getOpenId());
+			orderMasterDon.setMoney(BigDecimal.ZERO);
+			orderMasterDon.setStatus(OrderMasterDon.Status.hasPayment);
+			orderMasterDon.setYhsId(yhsId);
+			orderMasterDon.setType(OrderMasterDon.Type.getType(orderDonTye.getType()));
+			orderMasterDon.setUserId(user.getId());
+			orderMasterDon.setPayTitle(payTitle.toString());
+
+
 			orderDon = new OrderDon();
-			orderDon.setOrderNo(donNo);
-			orderDon.setOpenId(user.getOpenId());
 			orderDon.setMoney(BigDecimal.ZERO);
 			orderDon.setSkuId(sku.getId());
 			orderDon.setRelationId(relationId);
@@ -308,15 +324,15 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 				orderDon.setStatus(OrderDon.Status.hasPayment);
 			}
 			if (relation != null && relation.getStatus() == GroupsRelation.Status.outside) {
+				orderMasterDon.setIsOt(true);
 				orderDon.setIsOt(true);
 			}
 			//兑换码兑换
 			orderDon.setType(orderDonTye);
 			orderDon.setUserId(user.getId());
-			StringBuilder payTitle = new StringBuilder();
-			payTitle.append(goodsDon.getTitle());
-			payTitle.append(sku.getSpecVal());
 			orderDon.setPayTitle(payTitle.toString());
+			//主订单
+			orderMasterDonMapper.insert(orderMasterDon);
 			orderDonMapper.insert(orderDon);
 			log.info("用户{}兑换规格:{}车位成功", user.getId(), orderDon.getSkuId());
 		}

+ 16 - 0
netflix-service/src/main/java/com/cyksj/service/home/impl/ClickRecordFrontServiceImpl.java

@@ -5,6 +5,7 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.mapper.GoodsClickUserRecordMapper;
 import com.cyksj.mapper.GoodsDonCategoryMapper;
 import com.cyksj.mapper.GoodsDonMapper;
+import com.cyksj.mapper.InformationClickUserRecordMapper;
 import com.cyksj.mapper.manage.home.HomeManagementConfigMapper;
 import com.cyksj.mapper.manage.home.HomeManagementConfigUserClickRecordMapper;
 import com.cyksj.model.entity.*;
@@ -35,6 +36,8 @@ public class ClickRecordFrontServiceImpl implements ClickRecordFrontService {
 
 	private final GoodsClickUserRecordMapper goodsClickUserRecordMapper;
 
+	private final InformationClickUserRecordMapper informationClickUserRecordMapper;
+
 
 	@Override
 	public void click(Long userId, ClickRecordReq request) {
@@ -47,6 +50,9 @@ public class ClickRecordFrontServiceImpl implements ClickRecordFrontService {
 			clickGoodsCategoryOrGoods(userId, request.getGoodsId(), request.getCategory());
 			return;
 		}
+		if (request.getType() == 3) {
+			clickInformation(userId,request.getGoodsId(),request.getInfoId());
+		}
 	}
 
 	public void clickHomePage(Long userId, Long configId) {
@@ -88,4 +94,14 @@ public class ClickRecordFrontServiceImpl implements ClickRecordFrontService {
 			}
 		}
 	}
+	public void clickInformation(Long userId,Long goodsId,Long infoId){
+		if (infoId == null && goodsId == null) {
+			throw BusinessRuntimeException.getInstance("参数错误");
+		}
+		InformationClickUserRecord record = new InformationClickUserRecord();
+		record.setUserId(userId);
+		record.setGoodsId(goodsId);
+		record.setInfoId(infoId);
+		informationClickUserRecordMapper.insert(record);
+	}
 }

+ 5 - 0
netflix-service/src/main/java/com/cyksj/service/home/impl/HomeManagementConfigServiceImpl.java

@@ -36,6 +36,11 @@ public class HomeManagementConfigServiceImpl extends ServiceImpl<HomeManagementC
 			Assert.notEmpty(config.getTitle(), "标题不为空");
 			HomeManagementConfig homeManagementConfig = new HomeManagementConfig();
 			BeanUtil.copyProperties(config, homeManagementConfig);
+			if (config.getType() == HomeManagementConfig.Type.ad) {
+				if (config.getAdType() == null) {
+					throw BusinessRuntimeException.getInstance("请选择对应的广告配置类型");
+				}
+			}
 			this.saveOrUpdate(homeManagementConfig);
 			return;
 		}

+ 14 - 0
netflix-service/src/main/java/com/cyksj/service/information/InformationCategoryService.java

@@ -0,0 +1,14 @@
+package com.cyksj.service.information;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.InformationCategory;
+
+import java.util.List;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 15:48
+ */
+public interface InformationCategoryService extends IService<InformationCategory> {
+    List<InformationCategory> getInformationCategory();
+}

+ 17 - 0
netflix-service/src/main/java/com/cyksj/service/information/InformationService.java

@@ -0,0 +1,17 @@
+package com.cyksj.service.information;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.Information;
+import com.cyksj.model.views.InformationListView;
+
+import java.util.List;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 14:39
+ */
+public interface InformationService extends IService<Information> {
+    IPage<InformationListView> getInformation(Long categoryId, Integer start, Integer limit);
+    List<InformationListView> getInformationByTitle(String name);
+}

+ 21 - 0
netflix-service/src/main/java/com/cyksj/service/information/impl/InformationCategoryServiceImpl.java

@@ -0,0 +1,21 @@
+package com.cyksj.service.information.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.mapper.InformationCategoryMapper;
+import com.cyksj.model.entity.InformationCategory;
+import com.cyksj.service.information.InformationCategoryService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 15:48
+ */
+@Service
+public class InformationCategoryServiceImpl extends ServiceImpl<InformationCategoryMapper, InformationCategory> implements InformationCategoryService {
+    @Override
+    public List<InformationCategory> getInformationCategory() {
+        return baseMapper.getInformationCategory();
+    }
+}

+ 32 - 0
netflix-service/src/main/java/com/cyksj/service/information/impl/InformationServiceImpl.java

@@ -0,0 +1,32 @@
+package com.cyksj.service.information.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.mapper.InformationMapper;
+import com.cyksj.model.entity.Information;
+import com.cyksj.model.views.InformationListView;
+import com.cyksj.service.information.InformationService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 14:40
+ */
+@Service
+public class InformationServiceImpl extends ServiceImpl<InformationMapper, Information> implements InformationService {
+
+
+    @Override
+    public IPage<InformationListView> getInformation(Long categoryId, Integer start, Integer limit) {
+        return baseMapper.getInformation(new Page<>(start,limit),categoryId);
+    }
+
+
+    @Override
+    public List<InformationListView> getInformationByTitle(String name) {
+        return baseMapper.getInformationByTitle(name);
+    }
+}

+ 13 - 0
netflix-service/src/main/java/com/cyksj/service/order/OrderMasterDonService.java

@@ -0,0 +1,13 @@
+package com.cyksj.service.order;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.OrderMasterDon;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderMasterDonService
+ * 创建者: JavaZou
+ * 创建时间:2023/10/13 18:08
+ */
+public interface OrderMasterDonService extends IService<OrderMasterDon> {
+}

+ 18 - 0
netflix-service/src/main/java/com/cyksj/service/order/ShoppingCartDonService.java

@@ -0,0 +1,18 @@
+package com.cyksj.service.order;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.ShoppingCartDon;
+import com.cyksj.model.request.UnifiedOrderPayReq;
+import com.cyksj.model.views.ShoppingCartDonPayDetailView;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: ShoppingCartDonService
+ * 创建者: JavaZou
+ * 创建时间:2023/10/12 16:01
+ */
+public interface ShoppingCartDonService extends IService<ShoppingCartDon> {
+	void addGoodsShoppingCart(ShoppingCartDon goodsCartDon);
+
+	ShoppingCartDonPayDetailView unifiedPayShoppingCartGoods(UnifiedOrderPayReq unifiedOrderPayReq);
+}

+ 3 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -255,6 +255,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final UserPayOrderBlockMapper userPayOrderBlockMapper;
 
+	private final InformationClickUserRecordMapper informationClickUserRecordMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -446,6 +448,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		orderDon.setCouponExCode(payRequest.getCouponExCode());
 		//店铺id
 		orderDon.setYhsId(yhsId);
+		orderDon.setInfoId(payRequest.getInfoId());
 		if (relation != null && relation.getStatus() == GroupsRelation.Status.outside) {
 			orderDon.setIsOt(true);
 		}

+ 17 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderMasterDonServiceImpl.java

@@ -0,0 +1,17 @@
+package com.cyksj.service.order.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.mapper.order.OrderMasterDonMapper;
+import com.cyksj.model.entity.OrderMasterDon;
+import com.cyksj.service.order.OrderMasterDonService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderMasterDonServiceImpl
+ * 创建者: JavaZou
+ * 创建时间:2023/10/13 18:08
+ */
+@Service
+public class OrderMasterDonServiceImpl extends ServiceImpl<OrderMasterDonMapper, OrderMasterDon> implements OrderMasterDonService {
+}

+ 79 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/ShoppingCartOrderServiceImpl.java

@@ -0,0 +1,79 @@
+package com.cyksj.service.order.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.mapper.order.ShoppingCartDonMapper;
+import com.cyksj.model.entity.ShoppingCartDon;
+import com.cyksj.model.request.OrderPayRequest;
+import com.cyksj.model.request.UnifiedOrderPayReq;
+import com.cyksj.model.views.GoodsDonSkuDetailView;
+import com.cyksj.model.views.ShoppingCartDonPayDetailView;
+import com.cyksj.service.order.OrderDonService;
+import com.cyksj.service.order.ShoppingCartDonService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: ShoppingCartOrderServiceImpl
+ * 创建者: JavaZou
+ * 创建时间:2023/10/12 16:01
+ */
+@Service
+@RequiredArgsConstructor
+public class ShoppingCartOrderServiceImpl extends ServiceImpl<ShoppingCartDonMapper, ShoppingCartDon> implements ShoppingCartDonService {
+	private final BeanSearcher beanSearcher;
+
+	private final OrderDonService orderDonService;
+	@Override
+	public void addGoodsShoppingCart(ShoppingCartDon goodsCartDon) {
+		//最多添加购物车数量30
+		int count = this.count(Wrappers.lambdaQuery(ShoppingCartDon.class)
+				.eq(ShoppingCartDon::getUserId, goodsCartDon.getUserId()));
+		if (count >= 30) {
+			throw BusinessRuntimeException.getInstance("最多添加30件商品至购物车");
+		}
+		Long skuId = goodsCartDon.getSkuId();
+		if (skuId == null) {
+			throw BusinessRuntimeException.getInstance("请指定商品添加至购物车");
+		}
+		GoodsDonSkuDetailView goodsDonSkuDetailView = beanSearcher.searchFirst(GoodsDonSkuDetailView.class, MapUtils.builder()
+				.field(GoodsDonSkuDetailView::getSkuId, skuId).build());
+		if (goodsDonSkuDetailView == null) {
+			throw BusinessRuntimeException.getInstance("该商品已不存在..");
+		}
+		if (!goodsDonSkuDetailView.getGoodsStatus()) {
+			throw BusinessRuntimeException.getInstance("该商品已下架..");
+		}
+		if (!goodsDonSkuDetailView.getGoodsSkuStatus()) {
+			throw BusinessRuntimeException.getInstance("该商品规格已下架..");
+		}
+		if (goodsCartDon.getNum() == null) {
+			goodsCartDon.setNum(1);
+		}
+		goodsCartDon.setGoodsId(goodsDonSkuDetailView.getGoodsId());
+		goodsCartDon.setSkuId(skuId);
+		this.save(goodsCartDon);
+	}
+
+	@Override
+	public ShoppingCartDonPayDetailView unifiedPayShoppingCartGoods(UnifiedOrderPayReq unifiedOrderPayReq) {
+		Long userId = unifiedOrderPayReq.getUserId();
+		//处理订单
+		List<OrderPayRequest> payGoods = unifiedOrderPayReq.getPayGoods();
+		if (CollUtil.isEmpty(payGoods)) {
+			throw BusinessRuntimeException.getInstance("请选择商品后再进行下单..");
+		}
+		ShoppingCartDonPayDetailView payDetailView = new ShoppingCartDonPayDetailView();
+//		String orderNo = ;
+//		String payTitle = ;
+//		orderDonService.submit();
+		return null;
+	}
+}

+ 21 - 9
netflix-service/src/main/java/com/cyksj/service/paypal/PayPalService.java

@@ -1,14 +1,17 @@
 package com.cyksj.service.paypal;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.enums.GatewayApiCode;
 import com.cyksj.model.entity.OrderDon;
+import com.cyksj.model.entity.OrderMasterDon;
 import com.cyksj.model.entity.PaypalPayConfig;
 import com.cyksj.model.request.OrderRefundReq;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.order.OrderDonService;
+import com.cyksj.service.order.OrderMasterDonService;
 import com.paypal.api.payments.*;
 import com.paypal.api.payments.Currency;
 import com.paypal.base.rest.APIContext;
@@ -44,6 +47,8 @@ public class PayPalService{
 
     private final RedisService redisService;
 
+    private final OrderMasterDonService orderMasterDonService;
+
 
     private static final String SANDBOX_URL = "https://api-m.sandbox.paypal.com";
     private static final String LIVE_URL = "https://api-m.paypal.com";
@@ -66,15 +71,22 @@ public class PayPalService{
             Sale sale = payment.getTransactions().get(0).getRelatedResources().get(0).getSale();
             Currency transactionFee = sale.getTransactionFee();
             String transationId = sale.getId();
-            String orderId = payment.getTransactions().get(0).getCustom();
+
+            String mOid = payment.getTransactions().get(0).getCustom();
+            OrderMasterDon masterDon = orderMasterDonService.getById(mOid);
             //更新订单支付状态
-            OrderDon orderDon = orderDonService.getById(orderId);
-            orderDon.setTransactionId(transationId);
-            orderDon.setPayTime(new Date());
-            orderDon.setAbroadTransactionFee(new BigDecimal(transactionFee.getValue()).multiply(BigDecimal.valueOf(100)));
-            orderDonService.orderNotify(orderDon);
-            log.info("支付成功订单:"+orderId+",支付交易号:"+transationId);
-            log.info("支付成功订单:"+orderId+",返回参数:"+Jsons.toJson(payment));
+            masterDon.setTransactionId(transationId);
+            masterDon.setPayTime(new Date());
+            masterDon.setAbroadTransactionFee(new BigDecimal(transactionFee.getValue()).multiply(BigDecimal.valueOf(100)));
+            log.info("支付成功订单:"+mOid+",支付交易号:"+transationId);
+            log.info("支付成功订单:"+mOid+",返回参数:"+Jsons.toJson(payment));
+
+            //子订单
+            List<OrderDon> orderDonList = orderDonService.list(Wrappers.lambdaQuery(OrderDon.class)
+                    .eq(OrderDon::getMOid, mOid));
+            orderDonList.forEach(orderDon -> {
+                orderDonService.orderNotify(orderDon);
+            });
 
             THREAD_POOL.execute(()->{
                 try {
@@ -101,7 +113,7 @@ public class PayPalService{
 
             });
 
-            return redisService.getStr(RedisService.key.ABROAD_SUCCESS_URL.getName() + orderId);
+            return redisService.getStr(RedisService.key.ABROAD_SUCCESS_URL.getName() + mOid);
         }
         log.info("支付失败返回参数:"+ Jsons.toJson(payment));
         return paypalPayConfig.getCancelUrl();

+ 25 - 14
netflix-service/src/main/java/com/cyksj/service/stripe/StripeService.java

@@ -1,14 +1,17 @@
 package com.cyksj.service.stripe;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.enums.GatewayApiCode;
 import com.cyksj.mapper.StripePayConfigMapper;
 import com.cyksj.model.entity.OrderDon;
+import com.cyksj.model.entity.OrderMasterDon;
 import com.cyksj.model.entity.StripePayConfig;
 import com.cyksj.model.request.OrderRefundReq;
 import com.cyksj.service.order.OrderDonService;
+import com.cyksj.service.order.OrderMasterDonService;
 import com.stripe.Stripe;
 import com.stripe.exception.StripeException;
 import com.stripe.model.*;
@@ -23,6 +26,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 
 /**
  * @author zwhui
@@ -41,9 +45,11 @@ public class StripeService {
 
     private final StripePayConfigMapper stripePayConfigMapper;
 
+    private final OrderMasterDonService orderMasterDonService;
 
 
-   public String checkOutStripe(Long orderId,String successUrl) throws Exception{
+
+    public String checkOutStripe(Long orderId,String successUrl) throws Exception{
        OrderDon orderDon = orderDonService.getById(orderId);
        BigDecimal money = orderDon.getMoney();
        orderDon.setType(OrderDon.Type.STRIPE);
@@ -87,16 +93,17 @@ public class StripeService {
            log.error("支付回调失败");
            return;
        }
-       String orderId = session.getClientReferenceId();
+       String mOid = session.getClientReferenceId();
        if (!"paid".equals(session.getPaymentStatus())){
            return;
        }
-       OrderDon orderDon = orderDonService.getById(orderId);
-       if (orderDon == null){
+       OrderMasterDon masterDon = orderMasterDonService.getById(mOid);
+
+       if (masterDon == null){
            return;
        }
-       if (orderDon.getStatus().equals(OrderDon.Status.hasPayment)) {
-           log.info("已回调,重复修改状态 id:{}", orderDon.getId());
+       if (!masterDon.getStatus().equals(OrderMasterDon.Status.noPayment) && !masterDon.getStatus().equals(OrderMasterDon.Status.close)) {
+           log.info("支付宝已回调,重复修改状态 id:{}", masterDon.getId());
            return;
        }
        String paymentIntentId = session.getPaymentIntent();
@@ -104,14 +111,18 @@ public class StripeService {
        String chargeId = paymentIntent.getLatestCharge();
        BalanceTransaction balanceTransaction = BalanceTransaction.retrieve(Charge.retrieve(chargeId).getBalanceTransaction());
        //更新订单支付状态
-
-       orderDon.setTransactionId(chargeId);
-       orderDon.setAbroadTransactionFee(BigDecimal.valueOf(balanceTransaction.getFee()));
-       orderDon.setPayTime(new Date());
-       orderDonService.orderNotify(orderDon);
-       log.info("支付成功订单:"+orderId+",支付交易号:"+chargeId);
-       log.info("支付成功订单:"+orderId+",返回参数:"+Jsons.toJson(session));
-
+       masterDon.setTransactionId(chargeId);
+       masterDon.setAbroadTransactionFee(BigDecimal.valueOf(balanceTransaction.getFee()));
+       masterDon.setPayTime(new Date());
+       log.info("支付成功订单:"+mOid+",支付交易号:"+chargeId);
+       log.info("支付成功订单:"+mOid+",返回参数:"+Jsons.toJson(session));
+
+       //子订单
+       List<OrderDon> orderDonList = orderDonService.list(Wrappers.lambdaQuery(OrderDon.class)
+               .eq(OrderDon::getMOid, mOid));
+       orderDonList.forEach(orderDon->{
+           orderDonService.orderNotify(orderDon);
+       });
    }
 
 

+ 6 - 0
netflix-service/src/main/java/com/cyksj/service/user/UserBenefitsService.java

@@ -1,6 +1,7 @@
 package com.cyksj.service.user;
 
 import com.cyksj.model.entity.UserBalanceSourceRecord;
+import com.cyksj.model.entity.UserGalaxycoinRecord;
 
 import java.math.BigDecimal;
 
@@ -44,4 +45,9 @@ public interface UserBenefitsService {
 	 * 扣除店铺主用户 提成金额
 	 */
 	void deductYhShopTakeMoney(Long orderId, Long shopUserId, BigDecimal deductMoney);
+
+	/**
+	 * 修改用户银河币
+	 */
+	void updateGalaxycoin(Long userId, BigDecimal addGalaxycoin, UserGalaxycoinRecord.Source source);
 }

+ 11 - 0
netflix-service/src/main/java/com/cyksj/service/user/UserGalaxycoinRecordService.java

@@ -0,0 +1,11 @@
+package com.cyksj.service.user;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.UserGalaxycoinRecord;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 13:34
+ */
+public interface UserGalaxycoinRecordService extends IService<UserGalaxycoinRecord> {
+}

+ 24 - 4
netflix-service/src/main/java/com/cyksj/service/user/impl/UserBenefitsServiceImpl.java

@@ -4,12 +4,10 @@ import com.cyksj.common.EnvCommonService;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.mapper.DistributeOrdersDeductPointsRecordMapper;
 import com.cyksj.mapper.UserBalanceSourceRecordMapper;
+import com.cyksj.mapper.UserGalaxycoinRecordMapper;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.mapper.shop.YhShopDistributeOrdersDeductPointsRecordMapper;
-import com.cyksj.model.entity.DistributeOrdersDeductPointsRecord;
-import com.cyksj.model.entity.User;
-import com.cyksj.model.entity.UserBalanceSourceRecord;
-import com.cyksj.model.entity.YhShopDistributeOrdersDeductPointsRecord;
+import com.cyksj.model.entity.*;
 import com.cyksj.service.sms.SmsService;
 import com.cyksj.service.user.UserBenefitsService;
 import lombok.RequiredArgsConstructor;
@@ -39,6 +37,8 @@ public class UserBenefitsServiceImpl implements UserBenefitsService {
 
 	private final YhShopDistributeOrdersDeductPointsRecordMapper yhShopDistributeOrdersDeductPointsRecordMapper;
 
+	private final UserGalaxycoinRecordMapper userGalaxycoinRecordMapper;
+
 	@Override
 	public void deductDistributePoints(Long orderId, Long userId, BigDecimal deductPoints) {
 		if (deductPoints.compareTo(BigDecimal.ZERO) <= 0) {
@@ -178,4 +178,24 @@ public class UserBenefitsServiceImpl implements UserBenefitsService {
 
 		}
 	}
+
+
+	@Override
+	public void updateGalaxycoin(Long userId, BigDecimal addGalaxycoin, UserGalaxycoinRecord.Source source) {
+		if (addGalaxycoin.compareTo(BigDecimal.ZERO) == 0) {
+			return;
+		}
+		while (true) {
+			User user = userMapper.selectById(userId);
+			if (user == null) break;
+			Integer success = userMapper.updateGalaxycoin(user.getId(), addGalaxycoin, user.getGalaxycoin());
+			if (success == 1) break;
+			UserGalaxycoinRecord record = new UserGalaxycoinRecord();
+			record.setUserId(userId);
+			record.setGalaxycoin(addGalaxycoin);
+			record.setSource(source);
+			record.setRemark(source.getDesc());
+			userGalaxycoinRecordMapper.insert(record);
+		}
+	}
 }

+ 17 - 0
netflix-service/src/main/java/com/cyksj/service/user/impl/UserGalaxycoinRecordServiceImpl.java

@@ -0,0 +1,17 @@
+package com.cyksj.service.user.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.mapper.UserGalaxycoinRecordMapper;
+import com.cyksj.model.entity.UserGalaxycoinRecord;
+import com.cyksj.service.user.UserGalaxycoinRecordService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 13:35
+ */
+@Service
+@RequiredArgsConstructor
+public class UserGalaxycoinRecordServiceImpl extends ServiceImpl<UserGalaxycoinRecordMapper, UserGalaxycoinRecord> implements UserGalaxycoinRecordService {
+}

+ 92 - 0
netflix-web/src/main/java/com/cyksj/web/controller/information/InformationController.java

@@ -0,0 +1,92 @@
+package com.cyksj.web.controller.information;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.util.Jsons;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.model.entity.Information;
+import com.cyksj.model.entity.InformationCategory;
+import com.cyksj.model.views.GoodsFrontListView;
+import com.cyksj.model.views.InformationDetailView;
+import com.cyksj.model.views.InformationListView;
+import com.cyksj.redis.RedisService;
+import com.cyksj.service.information.InformationCategoryService;
+import com.cyksj.service.information.InformationService;
+import com.cyksj.web.util.StpUserUtil;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.param.Operator;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 17:20
+ */
+@Slf4j
+@RestController
+@RequestMapping("/applets/information")
+@RequiredArgsConstructor
+public class InformationController {
+    private final BeanSearcher beanSearcher;
+
+    private final InformationCategoryService informationCategoryService;
+
+    private final InformationService informationService;
+
+    private final HttpServletRequest request;
+
+    private final RedisService redisService;
+
+    /**
+     * 查询发现页文章列表
+     */
+    @GetMapping("/get")
+    public Result<IPage<InformationListView>> getInformation(Long categoryId, @RequestParam(defaultValue = "0") Integer start, @RequestParam(defaultValue = "5") Integer limit){
+        String key = RedisService.key.INFORMATION_KEY.getEnvName() + "categoryId:" + categoryId;
+        IPage<InformationListView> information = (IPage<InformationListView>) redisService.get(key);
+        if (information == null) {
+            information = informationService.getInformation(categoryId, start, limit);
+            redisService.setNx(key, information, RedisService.key.INFORMATION_KEY.getTimeout());
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult(information);
+    }
+
+
+    /**
+     * 查询分类
+     */
+    @GetMapping("/get/category")
+    public Result<List<InformationCategory>> getInformationCategory() {
+        return GatewayResponse.SUCCESS.newBuilder().toResult(informationCategoryService.getInformationCategory());
+    }
+
+    /**
+     * 获取文章详情
+     */
+    @GetMapping("/get/detail/{id}")
+    public Result<InformationDetailView> getInformation(@PathVariable Long id) {
+        String key = RedisService.key.INFORMATION_KEY.getEnvName() + "id:" + id;
+        InformationDetailView view = (InformationDetailView) redisService.get(key);
+        if (view == null){
+            view = beanSearcher.searchFirst(InformationDetailView.class, MapUtils.flatBuilder(request.getParameterMap())
+                    .field(InformationDetailView::getId, id).build());
+            try {
+                List<Long> goodsIds = Jsons.parseList(view.getGoodsIds(), Long.class);
+                List<GoodsFrontListView> goodsList = beanSearcher.searchAll(GoodsFrontListView.class, MapUtils.flatBuilder(request.getParameterMap()).field(GoodsFrontListView::getId,goodsIds).op(Operator.InList).build());
+                view.setGoods(goodsList);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            redisService.setNx(key, view, RedisService.key.INFORMATION_KEY.getTimeout());
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult(view);
+    }
+}

+ 0 - 6
netflix-web/src/main/java/com/cyksj/web/controller/manage/home/HomeManageConfigController.java

@@ -6,7 +6,6 @@ import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.model.entity.GoodsDonCategory;
 import com.cyksj.model.entity.HomeManagementConfig;
-import com.cyksj.model.entity.HomeManagementConfigUserClickRecord;
 import com.cyksj.model.request.HomeManageConfigReq;
 import com.cyksj.model.views.HomeManagementAvailableGoodsView;
 import com.cyksj.model.views.HomeManagementConfigView;
@@ -138,11 +137,6 @@ public class HomeManageConfigController {
 		SearchResult<HomeManagementConfigView> search = beanSearcher.search(HomeManagementConfigView.class, MapUtils.flatBuilder(request.getParameterMap())
 				.field(HomeManagementConfigView::getType, type.name())
 				.build());
-		search.getDataList().forEach(data -> {
-			Number number = beanSearcher.searchCount(HomeManagementConfigUserClickRecord.class, MapUtils.builder()
-					.field(HomeManagementConfigUserClickRecord::getConfigId, data.getId()).build());
-			data.setClick(number.intValue());
-		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
 

+ 175 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/information/CmsInformationController.java

@@ -0,0 +1,175 @@
+package com.cyksj.web.controller.manage.information;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.Jsons;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.GoodsDonMapper;
+import com.cyksj.mapper.InformationClickUserRecordMapper;
+import com.cyksj.mapper.OrderDonMapper;
+import com.cyksj.model.entity.*;
+import com.cyksj.model.views.InformationView;
+import com.cyksj.redis.RedisService;
+import com.cyksj.service.information.InformationCategoryService;
+import com.cyksj.service.information.InformationService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 14:41
+ */
+@Slf4j
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/manage/information")
+public class CmsInformationController {
+    private final InformationService informationService;
+
+    private final BeanSearcher beanSearcher;
+
+    private final HttpServletRequest request;
+
+    private final InformationCategoryService informationCategoryService;
+
+    private final GoodsDonMapper goodsDonMapper;
+
+    private final RedisService redisService;
+
+    private final InformationClickUserRecordMapper informationClickUserRecordMapper;
+
+    private final OrderDonMapper orderDonMapper;
+
+    /**
+     * 保存文章
+     */
+    @PostMapping("/post")
+    public Result<String> saveInformation(@RequestBody Information information) {
+        informationService.save(information);
+        Set<String> keys = redisService.keys(RedisService.key.INFORMATION_KEY.getName() + "*");
+        redisService.del(keys.toArray(String[]::new));
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 修改文章
+     */
+    @PutMapping("/put")
+    public Result<String> updateInformation(@RequestBody Information information) {
+        if (information.getId() == null) {
+            throw BusinessRuntimeException.getInstance("请指定要修改的文章");
+        }
+        informationService.updateById(information);
+        Set<String> keys = redisService.keys(RedisService.key.INFORMATION_KEY.getName() + "*");
+        redisService.del(keys.toArray(String[]::new));
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 获取文章
+     */
+    @GetMapping("/get")
+    public Result<SearchResult<InformationView>> getInformation() {
+        SearchResult<InformationView> list = beanSearcher.search(InformationView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+        list.getDataList().forEach(data -> {
+            try {
+                List<Long> goodsIds = Jsons.parseList(data.getGoodsIds(), Long.class);
+                data.setGoodsTitles(goodsDonMapper.selectList(Wrappers.lambdaQuery(GoodsDon.class)
+                        .select(GoodsDon::getTitle)
+                        .in(GoodsDon::getId, goodsIds)
+                        .eq(GoodsDon::getStatus, true)
+                        .eq(GoodsDon::getDeleted,true)).stream().map(GoodsDon::getTitle).collect(Collectors.toList()));
+                List<Long> categoryIds = Jsons.parseList(data.getCategoryIds(), Long.class);
+                data.setCategoryNames(informationCategoryService.list(Wrappers.lambdaQuery(InformationCategory.class)
+                        .select(InformationCategory::getName)
+                        .in(InformationCategory::getId,categoryIds)).stream().map(InformationCategory::getName).collect(Collectors.toList()));
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+        });
+        return GatewayResponse.SUCCESS.newBuilder().toResult(list);
+    }
+
+    /**
+     * 修改文章状态
+     */
+    @PutMapping("/update/status")
+    public Result<String> updateStatus(@RequestBody Information information) {
+        if (information.getId() == null) {
+            throw BusinessRuntimeException.getInstance("请指定要修改的文章");
+        }
+        informationService.updateById(information);
+        Set<String> keys = redisService.keys(RedisService.key.INFORMATION_KEY.getName() + "*");
+        redisService.del(keys.toArray(String[]::new));
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 删除文章
+     */
+    @DeleteMapping("/del/{id}")
+    public Result<String> delById(@PathVariable Long id) {
+        Information byId = informationService.getById(id);
+        if (byId == null) {
+            return GatewayResponse.SUCCESS.newBuilder().toResult();
+        }
+        byId.setDeleted(false);
+        informationService.updateById(byId);
+        Set<String> keys = redisService.keys(RedisService.key.INFORMATION_KEY.getName() + "*");
+        redisService.del(keys.toArray(String[]::new));
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+
+    /**
+     * 保存文章类型
+     */
+    @PostMapping("/post/category")
+    public Result<String> saveInformationCategory(@RequestBody List<InformationCategory> informationCategorys) {
+        log.info("保存文章类型 categorys:{}",informationCategorys);
+        informationCategoryService.saveBatch(informationCategorys);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 修改文章类型
+     */
+    @PutMapping("/put/category")
+    public Result<String> updateInformationCategory(@RequestBody List<InformationCategory> informationCategorys) {
+        informationCategoryService.updateBatchById(informationCategorys);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 获取文章类型
+     */
+    @GetMapping("/get/category")
+    public Result<List<InformationCategory>> getInformationCategory() {
+        return GatewayResponse.SUCCESS.newBuilder().toResult(informationCategoryService.list(Wrappers.lambdaQuery(InformationCategory.class).orderByAsc(InformationCategory::getSortBy)));
+    }
+
+    /**
+     * 删除文章类型
+     */
+    @DeleteMapping("/del/category/{id}")
+    public Result<String> delCategoryById(@PathVariable Long id) {
+        int count = informationService.count(Wrappers.lambdaQuery(Information.class).apply("JSON_CONTAINS(category_ids,'\"" + id + "\"')").eq(Information::getDeleted, true));
+        if (count > 0){
+            throw BusinessRuntimeException.getInstance("该类型下存在文章,无法删除");
+        }
+        informationCategoryService.removeById(id);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+}

+ 100 - 0
netflix-web/src/main/java/com/cyksj/web/controller/payment/OrderShopCartController.java

@@ -0,0 +1,100 @@
+package com.cyksj.web.controller.payment;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.model.entity.ShoppingCartDon;
+import com.cyksj.model.request.OrderPayRequest;
+import com.cyksj.model.request.UnifiedOrderPayReq;
+import com.cyksj.model.views.ShoppingCartDonPayDetailView;
+import com.cyksj.model.views.ShoppingCartDonView;
+import com.cyksj.service.order.ShoppingCartDonService;
+import com.cyksj.web.util.StpUserUtil;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapBuilder;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: OrderShopCartController
+ * 创建者: JavaZou
+ * 创建时间:2023/10/12 11:05
+ */
+@RestController
+@RequestMapping("/applet/order/shopCart")
+@RequiredArgsConstructor
+public class OrderShopCartController {
+	private final ShoppingCartDonService shoppingCartDonService;
+
+	private final BeanSearcher beanSearcher;
+
+	private final HttpServletRequest request;
+
+	/**
+	 * 将商品添加至购物车
+	 */
+	@PostMapping("/add")
+	public Result<String> addGoodsShoppingCart(@RequestBody ShoppingCartDon goods) {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		goods.setUserId(userId);
+		shoppingCartDonService.addGoodsShoppingCart(goods);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+
+	/**
+	 * 将商品 移除购物车
+	 */
+	@DeleteMapping("/remove/{id}")
+	public Result<String> removeShoppingCartGoodsById(@PathVariable Long id) {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		shoppingCartDonService.remove(Wrappers.lambdaQuery(ShoppingCartDon.class)
+				.eq(ShoppingCartDon::getUserId, userId)
+				.eq(ShoppingCartDon::getId, id));
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 一键清空 购物车
+	 */
+	@DeleteMapping("/clean")
+	public Result<String> cleanShoppingCart() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		shoppingCartDonService.remove(Wrappers.lambdaQuery(ShoppingCartDon.class)
+				.eq(ShoppingCartDon::getUserId, userId));
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+
+	/**
+	 * 个人 购物车列表
+	 */
+	@DeleteMapping("/get")
+	public Result<SearchResult<ShoppingCartDonView>> getShoppingCartGoods() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+		builder.put("uid", String.format(" where user_id = %s", userId));
+		SearchResult<ShoppingCartDonView> search = beanSearcher.search(ShoppingCartDonView.class, builder.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
+
+	/**
+	 * 购物车 下单
+	 */
+	@PostMapping("/unified/pay")
+	public Result<ShoppingCartDonPayDetailView> unifiedPayShoppingCartGoods(@RequestBody UnifiedOrderPayReq unifiedOrderPayReq) {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		unifiedOrderPayReq.setUserId(userId);
+		ShoppingCartDonPayDetailView payDetailView = shoppingCartDonService.unifiedPayShoppingCartGoods(unifiedOrderPayReq);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(payDetailView);
+	}
+
+
+}

+ 84 - 0
netflix-web/src/main/java/com/cyksj/web/controller/search/SearchController.java

@@ -0,0 +1,84 @@
+package com.cyksj.web.controller.search;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.SearchHistoryMapper;
+import com.cyksj.model.entity.SearchHistory;
+import com.cyksj.model.views.GoodsFrontListView;
+import com.cyksj.model.views.InformationListView;
+import com.cyksj.model.views.SearchView;
+import com.cyksj.service.information.InformationService;
+import com.cyksj.web.util.StpUserUtil;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.operator.Contain;
+import com.ejlchina.searcher.param.Operator;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * @author zwhui
+ * @date 2023/10/12 17:13
+ */
+@Slf4j
+@RestController
+@RequestMapping("/applets/search")
+@RequiredArgsConstructor
+public class SearchController {
+
+    private final BeanSearcher beanSearcher;
+
+    private final InformationService informationService;
+
+    private final SearchHistoryMapper searchHistoryMapper;
+
+    private final HttpServletRequest request;
+
+    /**
+     * 查询搜索结果
+     */
+    @GetMapping("/get")
+    public Result<SearchView> search(String name){
+        Long userId = StpUserUtil.getUserIdAfterLogin();
+        if (userId != null){
+            SearchHistory searchHistory = new SearchHistory();
+            searchHistory.setName(name);
+            searchHistory.setUserId(userId);
+            searchHistoryMapper.insert(searchHistory);
+        }
+        List<GoodsFrontListView> goodsList = beanSearcher.searchAll(GoodsFrontListView.class, MapUtils.flatBuilder(request.getParameterMap()).field(GoodsFrontListView::getTitle,name).op(Operator.Contain).build());
+        List<InformationListView> informationList = informationService.getInformationByTitle(name);
+        SearchView view = new SearchView();
+        view.setGoodsList(goodsList);
+        view.setInformationList(informationList);
+        return GatewayResponse.SUCCESS.newBuilder().toResult(view);
+    }
+
+
+    /**
+     * 查询搜索历史
+     */
+    @GetMapping("/get/searchHistory")
+    public Result<List<SearchHistory>> getSearchHistory(){
+        Long userId = StpUserUtil.getUserIdAfterLogin();
+        if (userId != null){
+            return GatewayResponse.SUCCESS.newBuilder().toResult(searchHistoryMapper.selectList(Wrappers.lambdaQuery(SearchHistory.class).eq(SearchHistory::getUserId,userId).orderByDesc(SearchHistory::getCreatedTime).last("limit 10")));
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 删除搜索历史
+     */
+    @DeleteMapping("/delete/history")
+    private Result<Void> delHistory(Long id){
+        long userId = StpUserUtil.getLoginIdAsLong();
+        searchHistoryMapper.delete(Wrappers.lambdaQuery(SearchHistory.class).eq(id != null,SearchHistory::getId,id).eq(SearchHistory::getUserId,userId));
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+}