Quellcode durchsuchen

分库分表改造

yubin vor 3 Wochen
Ursprung
Commit
bc93de35e0
32 geänderte Dateien mit 1696 neuen und 1405 gelöschten Zeilen
  1. 256 319
      mall-api/src/main/java/com/txz/mall/dto/DailySalesSummaryOfProductsDTO.java
  2. 3 0
      mall-service/src/main/java/com/txz/mall/business/OrderServiceBusiness.java
  3. 103 2
      mall-service/src/main/java/com/txz/mall/business/impl/OrderServiceBusinessImpl.java
  4. 527 85
      mall-service/src/main/java/com/txz/mall/configurer/DatabaseShardingAlgorithm.java
  5. 2 2
      mall-service/src/main/java/com/txz/mall/configurer/StoreOrderInfoDatabaseShardingAlgorithm.java
  6. 2 2
      mall-service/src/main/java/com/txz/mall/configurer/StoreOrderStatusDatabaseShardingAlgorithm.java
  7. 2 2
      mall-service/src/main/java/com/txz/mall/configurer/StorePinkSummaryDatabaseShardingAlgorithm.java
  8. 86 23
      mall-service/src/main/java/com/txz/mall/configurer/TableShardingAlgorithm.java
  9. 2 2
      mall-service/src/main/java/com/txz/mall/configurer/UserSignDatabaseShardingAlgorithm.java
  10. 4 4
      mall-service/src/main/java/com/txz/mall/controller/OrderController.java
  11. 4 4
      mall-service/src/main/java/com/txz/mall/controller/PinkController.java
  12. 1 1
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppCombinationController.java
  13. 4 4
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppOrderController.java
  14. 2 2
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppPinkController.java
  15. 20 0
      mall-service/src/main/java/com/txz/mall/dao/DailySalesSummaryOfProductsMapper.java
  16. 20 0
      mall-service/src/main/java/com/txz/mall/dao/impl/DailySalesSummaryOfProductsMapperImpl.java
  17. 96 650
      mall-service/src/main/java/com/txz/mall/model/DailySalesSummaryOfProducts.java
  18. 12 1
      mall-service/src/main/java/com/txz/mall/service/DailySalesSummaryOfProductsService.java
  19. 4 4
      mall-service/src/main/java/com/txz/mall/service/StoreOrderService.java
  20. 2 2
      mall-service/src/main/java/com/txz/mall/service/StorePinkService.java
  21. 1 1
      mall-service/src/main/java/com/txz/mall/service/StorePinkSummaryService.java
  22. 43 1
      mall-service/src/main/java/com/txz/mall/service/impl/DailySalesSummaryOfProductsServiceImpl.java
  23. 173 82
      mall-service/src/main/java/com/txz/mall/service/impl/StoreOrderServiceImpl.java
  24. 94 32
      mall-service/src/main/java/com/txz/mall/service/impl/StorePinkServiceImpl.java
  25. 25 15
      mall-service/src/main/java/com/txz/mall/service/impl/StorePinkSummaryServiceImpl.java
  26. 22 5
      mall-service/src/main/java/com/txz/mall/task/GeneralJob.java
  27. 131 130
      mall-service/src/main/java/com/txz/mall/web/mng/DailySalesSummaryOfProductsController.java
  28. 8 1
      mall-service/src/main/java/dto/StoreOrderAppDTO.java
  29. 3 1
      mall-service/src/main/resources/i18n/messages_en_US.properties
  30. 2 0
      mall-service/src/main/resources/i18n/messages_zh_CN.properties
  31. 41 27
      mall-service/src/main/resources/mapper/DailySalesSummaryOfProductsMapper.xml
  32. 1 1
      mall-service/src/test/java/CodeGenerator.java

+ 256 - 319
mall-api/src/main/java/com/txz/mall/dto/DailySalesSummaryOfProductsDTO.java

@@ -2,7 +2,7 @@
 *
 * DailySalesSummaryOfProductsDTO.java
 * Copyright(C) 2017-2020 fendo公司
-* @date 2025-10-20
+* @date 2025-10-21
 */
 package com.txz.mall.dto;
 
@@ -12,159 +12,144 @@ import java.util.Date;
 
 public class DailySalesSummaryOfProductsDTO implements Serializable {
     /**
-     * 商品id
+     * 拼团ID
      */
     private Long id;
 
     /**
-     * 商户Id(0为总后台管理员创建,不为0的时候是商户后台创建)
+     * 用户id
      */
-    private Byte merId;
+    private Long uid;
 
     /**
-     * 商品图片(主图)
+     * 拼团汇总表id
      */
-    private String image;
+    private Long spsId;
 
     /**
-     * 商品名称
+     * 订单号
      */
-    private String storeName;
+    private String orderId;
 
     /**
-     * 商品简介
+     * 订单id  数据库
      */
-    private String storeInfo;
+    private Long orderIdKey;
 
     /**
-     * 关键字(副标题)
+     * 购买商品个数
      */
-    private String keyword;
+    private Integer totalNum;
 
     /**
-     * 分类id
+     * 购买总金额
      */
-    private String cateId;
+    private BigDecimal totalPrice;
 
     /**
-     * 商品价格
+     * 拼团商品id
      */
-    private BigDecimal price;
+    private Long cid;
 
     /**
-     * 会员价格
+     * 商品id
      */
-    private BigDecimal vipPrice;
+    private Long pid;
 
     /**
-     * 市场价
+     * 拼图总人数
      */
-    private BigDecimal otPrice;
+    private Integer people;
 
     /**
-     * 邮费
+     * 拼团商品单价
      */
-    private BigDecimal postage;
+    private BigDecimal price;
 
     /**
-     * 单位名
+     * 开始时间
      */
-    private String unitName;
+    private Date addTime;
 
     /**
-     * 每日销量快照
+     * 结束时间
      */
-    private Integer sales;
+    private Date stopTime;
 
     /**
-     * 每日销量增量
+     * 天选 默认0  1为天选
      */
-    private Integer daySales;
+    private Integer lId;
 
     /**
-     * 每日库存快照
+     * 团长id 0为团长
      */
-    private Integer stock;
+    private Integer kId;
 
     /**
-     * 每日库存增量
+     * 是否发送模板消息  0未发送  1已发送
      */
-    private Integer dayStock;
+    private Byte isTpl;
 
     /**
-     * 每日虚拟销量快照
+     * 是否退款  0未退款 1已退款
      */
-    private Integer ficti;
+    private Byte isRefund;
 
     /**
-     * 每日虚拟销量增量
+     * 状态  1进行中  2已支付 3未完成
      */
-    private Integer dayFicti;
+    private Byte status;
 
     /**
-     * 主图视频链接
+     * 订单状态
      */
-    private String videoLink;
+    private Byte orderStatus;
 
     /**
-     * 规格 0单 1多
+     * 是否拼团锁定 1锁定0未锁定
      */
-    private Boolean specType;
+    private Boolean isVirtual;
 
     /**
-     * 活动显示排序0=默认, 1=秒杀,2=砍价,3=拼团
+     * 用户昵称
      */
-    private String activity;
+    private String nickname;
 
     /**
-     * 创建人id
+     * 用户头像
      */
-    private Long createUserId;
+    private String avatar;
 
     /**
      * 创建时间
      */
     private Date createTime;
 
-    /**
-     * 统计时间
-     */
-    private Date statisticalDate;
-
-    /**
-     * 更新人id
-     */
-    private Long updateUserId;
-
     /**
      * 更新时间
      */
     private Date updateTime;
 
     /**
-     * 货号
-     */
-    private String itemNumber;
-
-    /**
-     * 品牌
+     * 创建人id
      */
-    private String itemBrand;
+    private Long createUserId;
 
     /**
-     * 版本号
+     * 更新人id
      */
-    private Integer version;
+    private Long updateUserId;
 
     /**
-     * 轮播图(白底图)
+     * 是否删除
      */
-    private String sliderImage;
+    private Byte isDelete;
 
     /**
-     * 展示图(详情图)
+     * 拼团汇总表编码
      */
-    private String flatPattern;
+    private String spsCode;
 
     /**
      * m_daily_sales_summary_of_products
@@ -172,355 +157,355 @@ public class DailySalesSummaryOfProductsDTO implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 商品id
-     * @return id 商品id
+     * 拼团ID
+     * @return id 拼团ID
      */
     public Long getId() {
         return id;
     }
 
     /**
-     * 商品id
-     * @param id 商品id
+     * 拼团ID
+     * @param id 拼团ID
      */
     public void setId(Long id) {
         this.id = id;
     }
 
     /**
-     * 商户Id(0为总后台管理员创建,不为0的时候是商户后台创建)
-     * @return mer_id 商户Id(0为总后台管理员创建,不为0的时候是商户后台创建)
+     * 用户id
+     * @return uid 用户id
      */
-    public Byte getMerId() {
-        return merId;
+    public Long getUid() {
+        return uid;
     }
 
     /**
-     * 商户Id(0为总后台管理员创建,不为0的时候是商户后台创建)
-     * @param merId 商户Id(0为总后台管理员创建,不为0的时候是商户后台创建)
+     * 用户id
+     * @param uid 用户id
      */
-    public void setMerId(Byte merId) {
-        this.merId = merId;
+    public void setUid(Long uid) {
+        this.uid = uid;
     }
 
     /**
-     * 商品图片(主图)
-     * @return image 商品图片(主图)
+     * 拼团汇总表id
+     * @return sps_id 拼团汇总表id
      */
-    public String getImage() {
-        return image;
+    public Long getSpsId() {
+        return spsId;
     }
 
     /**
-     * 商品图片(主图)
-     * @param image 商品图片(主图)
+     * 拼团汇总表id
+     * @param spsId 拼团汇总表id
      */
-    public void setImage(String image) {
-        this.image = image;
+    public void setSpsId(Long spsId) {
+        this.spsId = spsId;
     }
 
     /**
-     * 商品名称
-     * @return store_name 商品名称
+     * 订单号
+     * @return order_id 订单号
      */
-    public String getStoreName() {
-        return storeName;
+    public String getOrderId() {
+        return orderId;
     }
 
     /**
-     * 商品名称
-     * @param storeName 商品名称
+     * 订单号
+     * @param orderId 订单号
      */
-    public void setStoreName(String storeName) {
-        this.storeName = storeName;
+    public void setOrderId(String orderId) {
+        this.orderId = orderId;
     }
 
     /**
-     * 商品简介
-     * @return store_info 商品简介
+     * 订单id  数据库
+     * @return order_id_key 订单id  数据库
      */
-    public String getStoreInfo() {
-        return storeInfo;
+    public Long getOrderIdKey() {
+        return orderIdKey;
     }
 
     /**
-     * 商品简介
-     * @param storeInfo 商品简介
+     * 订单id  数据库
+     * @param orderIdKey 订单id  数据库
      */
-    public void setStoreInfo(String storeInfo) {
-        this.storeInfo = storeInfo;
+    public void setOrderIdKey(Long orderIdKey) {
+        this.orderIdKey = orderIdKey;
     }
 
     /**
-     * 关键字(副标题)
-     * @return keyword 关键字(副标题)
+     * 购买商品个数
+     * @return total_num 购买商品个数
      */
-    public String getKeyword() {
-        return keyword;
+    public Integer getTotalNum() {
+        return totalNum;
     }
 
     /**
-     * 关键字(副标题)
-     * @param keyword 关键字(副标题)
+     * 购买商品个数
+     * @param totalNum 购买商品个数
      */
-    public void setKeyword(String keyword) {
-        this.keyword = keyword;
+    public void setTotalNum(Integer totalNum) {
+        this.totalNum = totalNum;
     }
 
     /**
-     * 分类id
-     * @return cate_id 分类id
+     * 购买总金额
+     * @return total_price 购买总金额
      */
-    public String getCateId() {
-        return cateId;
+    public BigDecimal getTotalPrice() {
+        return totalPrice;
     }
 
     /**
-     * 分类id
-     * @param cateId 分类id
+     * 购买总金额
+     * @param totalPrice 购买总金额
      */
-    public void setCateId(String cateId) {
-        this.cateId = cateId;
+    public void setTotalPrice(BigDecimal totalPrice) {
+        this.totalPrice = totalPrice;
     }
 
     /**
-     * 商品价格
-     * @return price 商品价格
+     * 拼团商品id
+     * @return cid 拼团商品id
      */
-    public BigDecimal getPrice() {
-        return price;
+    public Long getCid() {
+        return cid;
     }
 
     /**
-     * 商品价格
-     * @param price 商品价格
+     * 拼团商品id
+     * @param cid 拼团商品id
      */
-    public void setPrice(BigDecimal price) {
-        this.price = price;
+    public void setCid(Long cid) {
+        this.cid = cid;
     }
 
     /**
-     * 会员价格
-     * @return vip_price 会员价格
+     * 商品id
+     * @return pid 商品id
      */
-    public BigDecimal getVipPrice() {
-        return vipPrice;
+    public Long getPid() {
+        return pid;
     }
 
     /**
-     * 会员价格
-     * @param vipPrice 会员价格
+     * 商品id
+     * @param pid 商品id
      */
-    public void setVipPrice(BigDecimal vipPrice) {
-        this.vipPrice = vipPrice;
+    public void setPid(Long pid) {
+        this.pid = pid;
     }
 
     /**
-     * 市场价
-     * @return ot_price 市场价
+     * 拼图总人数
+     * @return people 拼图总人数
      */
-    public BigDecimal getOtPrice() {
-        return otPrice;
+    public Integer getPeople() {
+        return people;
     }
 
     /**
-     * 市场价
-     * @param otPrice 市场价
+     * 拼图总人数
+     * @param people 拼图总人数
      */
-    public void setOtPrice(BigDecimal otPrice) {
-        this.otPrice = otPrice;
+    public void setPeople(Integer people) {
+        this.people = people;
     }
 
     /**
-     * 邮费
-     * @return postage 邮费
+     * 拼团商品单价
+     * @return price 拼团商品单价
      */
-    public BigDecimal getPostage() {
-        return postage;
+    public BigDecimal getPrice() {
+        return price;
     }
 
     /**
-     * 邮费
-     * @param postage 邮费
+     * 拼团商品单价
+     * @param price 拼团商品单价
      */
-    public void setPostage(BigDecimal postage) {
-        this.postage = postage;
+    public void setPrice(BigDecimal price) {
+        this.price = price;
     }
 
     /**
-     * 单位名
-     * @return unit_name 单位名
+     * 开始时间
+     * @return add_time 开始时间
      */
-    public String getUnitName() {
-        return unitName;
+    public Date getAddTime() {
+        return addTime;
     }
 
     /**
-     * 单位名
-     * @param unitName 单位名
+     * 开始时间
+     * @param addTime 开始时间
      */
-    public void setUnitName(String unitName) {
-        this.unitName = unitName;
+    public void setAddTime(Date addTime) {
+        this.addTime = addTime;
     }
 
     /**
-     * 每日销量快照
-     * @return sales 每日销量快照
+     * 结束时间
+     * @return stop_time 结束时间
      */
-    public Integer getSales() {
-        return sales;
+    public Date getStopTime() {
+        return stopTime;
     }
 
     /**
-     * 每日销量快照
-     * @param sales 每日销量快照
+     * 结束时间
+     * @param stopTime 结束时间
      */
-    public void setSales(Integer sales) {
-        this.sales = sales;
+    public void setStopTime(Date stopTime) {
+        this.stopTime = stopTime;
     }
 
     /**
-     * 每日销量增量
-     * @return day_sales 每日销量增量
+     * 天选 默认0  1为天选
+     * @return l_id 天选 默认0  1为天选
      */
-    public Integer getDaySales() {
-        return daySales;
+    public Integer getlId() {
+        return lId;
     }
 
     /**
-     * 每日销量增量
-     * @param daySales 每日销量增量
+     * 天选 默认0  1为天选
+     * @param lId 天选 默认0  1为天选
      */
-    public void setDaySales(Integer daySales) {
-        this.daySales = daySales;
+    public void setlId(Integer lId) {
+        this.lId = lId;
     }
 
     /**
-     * 每日库存快照
-     * @return stock 每日库存快照
+     * 团长id 0为团长
+     * @return k_id 团长id 0为团长
      */
-    public Integer getStock() {
-        return stock;
+    public Integer getkId() {
+        return kId;
     }
 
     /**
-     * 每日库存快照
-     * @param stock 每日库存快照
+     * 团长id 0为团长
+     * @param kId 团长id 0为团长
      */
-    public void setStock(Integer stock) {
-        this.stock = stock;
+    public void setkId(Integer kId) {
+        this.kId = kId;
     }
 
     /**
-     * 每日库存增量
-     * @return day_stock 每日库存增量
+     * 是否发送模板消息  0未发送  1已发送
+     * @return is_tpl 是否发送模板消息  0未发送  1已发送
      */
-    public Integer getDayStock() {
-        return dayStock;
+    public Byte getIsTpl() {
+        return isTpl;
     }
 
     /**
-     * 每日库存增量
-     * @param dayStock 每日库存增量
+     * 是否发送模板消息  0未发送  1已发送
+     * @param isTpl 是否发送模板消息  0未发送  1已发送
      */
-    public void setDayStock(Integer dayStock) {
-        this.dayStock = dayStock;
+    public void setIsTpl(Byte isTpl) {
+        this.isTpl = isTpl;
     }
 
     /**
-     * 每日虚拟销量快照
-     * @return ficti 每日虚拟销量快照
+     * 是否退款  0未退款 1已退款
+     * @return is_refund 是否退款  0未退款 1已退款
      */
-    public Integer getFicti() {
-        return ficti;
+    public Byte getIsRefund() {
+        return isRefund;
     }
 
     /**
-     * 每日虚拟销量快照
-     * @param ficti 每日虚拟销量快照
+     * 是否退款  0未退款 1已退款
+     * @param isRefund 是否退款  0未退款 1已退款
      */
-    public void setFicti(Integer ficti) {
-        this.ficti = ficti;
+    public void setIsRefund(Byte isRefund) {
+        this.isRefund = isRefund;
     }
 
     /**
-     * 每日虚拟销量增量
-     * @return day_ficti 每日虚拟销量增量
+     * 状态  1进行中  2已支付 3未完成
+     * @return status 状态  1进行中  2已支付 3未完成
      */
-    public Integer getDayFicti() {
-        return dayFicti;
+    public Byte getStatus() {
+        return status;
     }
 
     /**
-     * 每日虚拟销量增量
-     * @param dayFicti 每日虚拟销量增量
+     * 状态  1进行中  2已支付 3未完成
+     * @param status 状态  1进行中  2已支付 3未完成
      */
-    public void setDayFicti(Integer dayFicti) {
-        this.dayFicti = dayFicti;
+    public void setStatus(Byte status) {
+        this.status = status;
     }
 
     /**
-     * 主图视频链接
-     * @return video_link 主图视频链接
+     * 订单状态
+     * @return order_status 订单状态
      */
-    public String getVideoLink() {
-        return videoLink;
+    public Byte getOrderStatus() {
+        return orderStatus;
     }
 
     /**
-     * 主图视频链接
-     * @param videoLink 主图视频链接
+     * 订单状态
+     * @param orderStatus 订单状态
      */
-    public void setVideoLink(String videoLink) {
-        this.videoLink = videoLink;
+    public void setOrderStatus(Byte orderStatus) {
+        this.orderStatus = orderStatus;
     }
 
     /**
-     * 规格 0单 1多
-     * @return spec_type 规格 0单 1多
+     * 是否拼团锁定 1锁定0未锁定
+     * @return is_virtual 是否拼团锁定 1锁定0未锁定
      */
-    public Boolean getSpecType() {
-        return specType;
+    public Boolean getIsVirtual() {
+        return isVirtual;
     }
 
     /**
-     * 规格 0单 1多
-     * @param specType 规格 0单 1多
+     * 是否拼团锁定 1锁定0未锁定
+     * @param isVirtual 是否拼团锁定 1锁定0未锁定
      */
-    public void setSpecType(Boolean specType) {
-        this.specType = specType;
+    public void setIsVirtual(Boolean isVirtual) {
+        this.isVirtual = isVirtual;
     }
 
     /**
-     * 活动显示排序0=默认, 1=秒杀,2=砍价,3=拼团
-     * @return activity 活动显示排序0=默认, 1=秒杀,2=砍价,3=拼团
+     * 用户昵称
+     * @return nickname 用户昵称
      */
-    public String getActivity() {
-        return activity;
+    public String getNickname() {
+        return nickname;
     }
 
     /**
-     * 活动显示排序0=默认, 1=秒杀,2=砍价,3=拼团
-     * @param activity 活动显示排序0=默认, 1=秒杀,2=砍价,3=拼团
+     * 用户昵称
+     * @param nickname 用户昵称
      */
-    public void setActivity(String activity) {
-        this.activity = activity;
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
     }
 
     /**
-     * 创建人id
-     * @return create_user_id 创建人id
+     * 用户头像
+     * @return avatar 用户头像
      */
-    public Long getCreateUserId() {
-        return createUserId;
+    public String getAvatar() {
+        return avatar;
     }
 
     /**
-     * 创建人id
-     * @param createUserId 创建人id
+     * 用户头像
+     * @param avatar 用户头像
      */
-    public void setCreateUserId(Long createUserId) {
-        this.createUserId = createUserId;
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
     }
 
     /**
@@ -539,38 +524,6 @@ public class DailySalesSummaryOfProductsDTO implements Serializable {
         this.createTime = createTime;
     }
 
-    /**
-     * 统计时间
-     * @return statistical_date 统计时间
-     */
-    public Date getStatisticalDate() {
-        return statisticalDate;
-    }
-
-    /**
-     * 统计时间
-     * @param statisticalDate 统计时间
-     */
-    public void setStatisticalDate(Date statisticalDate) {
-        this.statisticalDate = statisticalDate;
-    }
-
-    /**
-     * 更新人id
-     * @return update_user_id 更新人id
-     */
-    public Long getUpdateUserId() {
-        return updateUserId;
-    }
-
-    /**
-     * 更新人id
-     * @param updateUserId 更新人id
-     */
-    public void setUpdateUserId(Long updateUserId) {
-        this.updateUserId = updateUserId;
-    }
-
     /**
      * 更新时间
      * @return update_time 更新时间
@@ -588,82 +541,66 @@ public class DailySalesSummaryOfProductsDTO implements Serializable {
     }
 
     /**
-     * 货号
-     * @return item_number 货号
-     */
-    public String getItemNumber() {
-        return itemNumber;
-    }
-
-    /**
-     * 货号
-     * @param itemNumber 货号
-     */
-    public void setItemNumber(String itemNumber) {
-        this.itemNumber = itemNumber;
-    }
-
-    /**
-     * 品牌
-     * @return item_brand 品牌
+     * 创建人id
+     * @return create_user_id 创建人id
      */
-    public String getItemBrand() {
-        return itemBrand;
+    public Long getCreateUserId() {
+        return createUserId;
     }
 
     /**
-     * 品牌
-     * @param itemBrand 品牌
+     * 创建人id
+     * @param createUserId 创建人id
      */
-    public void setItemBrand(String itemBrand) {
-        this.itemBrand = itemBrand;
+    public void setCreateUserId(Long createUserId) {
+        this.createUserId = createUserId;
     }
 
     /**
-     * 版本号
-     * @return version 版本号
+     * 更新人id
+     * @return update_user_id 更新人id
      */
-    public Integer getVersion() {
-        return version;
+    public Long getUpdateUserId() {
+        return updateUserId;
     }
 
     /**
-     * 版本号
-     * @param version 版本号
+     * 更新人id
+     * @param updateUserId 更新人id
      */
-    public void setVersion(Integer version) {
-        this.version = version;
+    public void setUpdateUserId(Long updateUserId) {
+        this.updateUserId = updateUserId;
     }
 
     /**
-     * 轮播图(白底图)
-     * @return slider_image 轮播图(白底图)
+     * 是否删除
+     * @return is_delete 是否删除
      */
-    public String getSliderImage() {
-        return sliderImage;
+    public Byte getIsDelete() {
+        return isDelete;
     }
 
     /**
-     * 轮播图(白底图)
-     * @param sliderImage 轮播图(白底图)
+     * 是否删除
+     * @param isDelete 是否删除
      */
-    public void setSliderImage(String sliderImage) {
-        this.sliderImage = sliderImage;
+    public void setIsDelete(Byte isDelete) {
+        this.isDelete = isDelete;
     }
 
     /**
-     * 展示图(详情图)
-     * @return flat_pattern 展示图(详情图)
+     * 拼团汇总表编码
+     * @return sps_code 拼团汇总表编码
      */
-    public String getFlatPattern() {
-        return flatPattern;
+    public String getSpsCode() {
+        return spsCode;
     }
 
     /**
-     * 展示图(详情图)
-     * @param flatPattern 展示图(详情图)
+     * 拼团汇总表编码
+     * @param spsCode 拼团汇总表编码
      */
-    public void setFlatPattern(String flatPattern) {
-        this.flatPattern = flatPattern;
+    public void setSpsCode(String spsCode) {
+        this.spsCode = spsCode;
     }
 }

+ 3 - 0
mall-service/src/main/java/com/txz/mall/business/OrderServiceBusiness.java

@@ -23,4 +23,7 @@ public interface OrderServiceBusiness {
      * 排行榜
      */
     List<StoreCombinationRankVO> getRank();
+
+
+    List<StoreCombinationRankVO> getRankNew();
 }

+ 103 - 2
mall-service/src/main/java/com/txz/mall/business/impl/OrderServiceBusinessImpl.java

@@ -1,6 +1,6 @@
 package com.txz.mall.business.impl;
 
-import cn.hutool.core.date.DateUtil;
+
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.txz.cif.dto.EarningsDTO;
@@ -8,6 +8,7 @@ import com.txz.cif.dto.OrderParam;
 import com.txz.mall.business.OrderServiceBusiness;
 import com.txz.mall.core.RedisUtil;
 import com.txz.mall.core.ServiceException;
+import com.txz.mall.dao.DailySalesSummaryOfProductsMapper;
 import com.txz.mall.dao.StoreOrderMapper;
 import com.txz.mall.dao.StorePinkMapper;
 import com.txz.mall.dubbo.client.CifRedEnvelopeDubboServiceClient;
@@ -29,6 +30,8 @@ import tk.mybatis.mapper.entity.SqlsCriteria;
 import vo.StoreCombinationRankVO;
 import vo.StoreOrderVO;
 
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -170,6 +173,7 @@ public class OrderServiceBusinessImpl implements OrderServiceBusiness {
     //        redisUtil.set(key, list);
     //        return list;
     //    }
+    @Resource
     private StorePinkMapper storePinkMapper;
 
     @Override
@@ -214,7 +218,7 @@ public class OrderServiceBusinessImpl implements OrderServiceBusiness {
        if(!CollectionUtils.isEmpty(isvalidProductIdList)) {
            log.info("getRank.isvalidProductIdList"+JSONObject.toJSONString(isvalidProductIdList));
            Date date = new Date();
-           Date date1 = DateUtils.addDays(date, -7);
+           Date date1 = DateUtils.addDays(date, -6);
            // List<Map<String, Object>> rank = storeOrderMapper.getRank(date1);
            List<Map<String, Object>> rank = storePinkMapper.getRank(date1,isvalidProductIdList);
 
@@ -265,4 +269,101 @@ public class OrderServiceBusinessImpl implements OrderServiceBusiness {
     }
 
 
+
+    @Resource
+    private DailySalesSummaryOfProductsMapper dailySalesSummaryOfProductsMapper;
+
+    /**
+     * 重构后的top7   先建立daily_sales_summary_table_of_products   每日凌晨通过定时任务汇总一次当天的各个商品的销量,,然后top7就汇总过去7天的数据即可
+     * @return
+     */
+    @Override
+    public List<StoreCombinationRankVO> getRankNew() {
+        List<StoreCombinationRankVO> list = new ArrayList<>();
+//        String key = "order:rank:";
+//        boolean exists = redisUtil.hasKey("order:rank");
+//        if (exists) {
+//            String orderVoString = redisUtil.get(key).toString();
+//            list = JSONObject.parseArray(orderVoString, StoreCombinationRankVO.class);
+//            return list;
+//        }
+
+        Set<Long> isvalidProductIdList = new HashSet<>();
+        //提取有效的参与活动的商品id
+        Condition storeCombinationCondition = new Condition(StoreCombination.class);
+        Example.Criteria StoreCombinationCriteria = storeCombinationCondition.createCriteria();
+        StoreCombinationCriteria.andEqualTo("isDelete", 0);
+        StoreCombinationCriteria.andEqualTo("isShow", 1);
+        List<StoreCombination> combinationList = storeCombinationService.findByCondition(storeCombinationCondition);
+
+        if(!CollectionUtils.isEmpty(combinationList)){
+            log.info("getRank.storeCombinationService.findByCondition"+JSONObject.toJSONString(combinationList));
+            List<Long> productIdList1 = combinationList.stream().map(StoreCombination::getProductId).collect(Collectors.toList());
+            isvalidProductIdList.addAll(productIdList1);
+        }
+
+
+//        Condition storeProductondition = new Condition(StoreProduct.class);
+//        Example.Criteria storeProductCriteria = storeProductondition.createCriteria();
+//        storeProductCriteria.andEqualTo("isDelete", 0);
+//        storeProductCriteria.andEqualTo("isShow", 1);
+//        List<StoreProduct> storeProductList = storeProductService.findByCondition(storeProductondition);
+//        if(!CollectionUtils.isEmpty(storeProductList)){
+//            List<Long> productIdList2 = storeProductList.stream().map(StoreProduct::getId).collect(Collectors.toList());
+//            isvalidProductIdList.addAll(productIdList2);
+//        }
+
+
+        if(!CollectionUtils.isEmpty(isvalidProductIdList)) {
+            log.info("getRank.isvalidProductIdList"+JSONObject.toJSONString(isvalidProductIdList));
+            Date date = new Date();
+            Date date1 = DateUtils.addDays(date, -6);
+            // List<Map<String, Object>> rank = storeOrderMapper.getRank(date1);
+            List<Map<String, Object>> rank = dailySalesSummaryOfProductsMapper.getRankNew(date1,isvalidProductIdList);
+
+
+            if (!CollectionUtils.isEmpty(rank)) {
+                log.info("rank"+JSONObject.toJSONString(rank));
+                Map<Long, Map<String, Object>> saleMap = rank.stream().collect(Collectors.toMap(a -> Long.valueOf(a.get("pid") + ""), a -> a, (b, c) -> c));
+                List<Long> pidList = rank.stream().map(a -> Long.valueOf(a.get("pid") + "")).collect(Collectors.toList());
+
+//               Condition storeCombinationCondition = new Condition(StoreCombination.class);
+//               Example.Criteria storeCombinationCriteria = storeCombinationCondition.createCriteria();
+//               storeCombinationCriteria.andIn("productId", pidList);
+//               List<StoreCombination> combinationList = storeCombinationService.findByCondition(storeCombinationCondition);
+                Map<Long, StoreCombination> storeCombinationMap = new HashMap<>();
+                if (!CollectionUtils.isEmpty(combinationList)) {
+                    log.info("getRank.combinationList"+JSONObject.toJSONString(combinationList));
+                    storeCombinationMap = combinationList.stream().collect(Collectors.toMap(StoreCombination::getProductId, a -> a, (b, c) -> c));
+                }
+                for (Map<String, Object> stringObjectMap : rank) {
+
+
+                    Object pid = stringObjectMap.get("pid");
+                    Object num = stringObjectMap.get("num");
+                    log.info("getRank.pid"+JSONObject.toJSONString(pid));
+                    StoreCombination storeCombination = storeCombinationMap.get(Long.parseLong(pid + ""));
+                    log.info("getRank.storeCombination"+JSONObject.toJSONString(storeCombination));
+                    StoreCombinationRankVO rankVO = new StoreCombinationRankVO();
+                    rankVO.setProductId(storeCombination.getProductId());
+                    rankVO.setProductName(storeCombination.getProductName());
+                    rankVO.setSales(Integer.valueOf(num + ""));
+                    rankVO.setFicti(Integer.valueOf(num + ""));
+                    rankVO.setImage(storeCombination.getImage());
+                    rankVO.setPrice(storeCombination.getPrice());
+                    list.add(rankVO);
+                }
+
+                if (!CollectionUtils.isEmpty(list)) {
+                    log.info("getRank.list"+JSONObject.toJSONString(list));
+                    list = list.stream().sorted(Comparator.comparing(StoreCombinationRankVO::getSales).reversed()).collect(Collectors.toList());
+                }
+
+            }
+
+        }
+
+        // redisUtil.set(key, list);
+        return list;
+    }
 }

+ 527 - 85
mall-service/src/main/java/com/txz/mall/configurer/DatabaseShardingAlgorithm.java

@@ -1,7 +1,9 @@
 package com.txz.mall.configurer;
 
+import com.google.common.collect.Range;
 import org.apache.shardingsphere.api.sharding.complex.ComplexKeysShardingAlgorithm;
 import org.apache.shardingsphere.api.sharding.complex.ComplexKeysShardingValue;
+import org.springframework.util.ObjectUtils;
 
 
 import java.text.ParseException;
@@ -11,158 +13,598 @@ import java.util.*;
 public class DatabaseShardingAlgorithm implements ComplexKeysShardingAlgorithm<Comparable<?>> {
 
 
+//    private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//    private static final SimpleDateFormat SDFORDERNO = new SimpleDateFormat("yyyyMMdd");
+//    private static final Set<Integer> FIRST_HALF_MONTHS = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6));
+//    private static final Set<Integer> SECOND_HALF_MONTHS = new HashSet<>(Arrays.asList(7, 8, 9, 10, 11, 12));
+//
+//    @Override
+//    public Collection<String> doSharding(Collection<String> availableTargets, ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+//        // 判断操作类型
+//        boolean isInsert = isInsertOperation(shardingValue);
+//
+//        // 提取分片键
+//        Date createTime = getCreateTime(shardingValue);
+//        Long userId = getUserId(shardingValue);
+//
+//
+//
+//        // 插入操作必须包含create_time和user_id
+//        if (isInsert && (createTime == null || userId == null)) {
+//          //  throw new IllegalArgumentException("插入数据必须包含create_time和user_id");
+//        }
+//
+//        // 1-6月数据处理(维持原逻辑)
+//        if (createTime != null && isFirstHalfYear(createTime)) {
+//            return routeFirstHalf(availableTargets, userId);
+//        }
+//
+//        // 7-12月数据处理
+//        if (createTime != null && isSecondHalfYear(createTime)) {
+//            return routeSecondHalf(availableTargets, userId);
+//        }
+//
+//        // 查询时无create_time:扫描所有符合条件的库
+//        return filterAllDatabases(availableTargets, userId);
+//    }
+//
+//    // 1-6月路由逻辑(维持原逻辑:mall_0/mall_1)
+//    private Collection<String> routeFirstHalf(Collection<String> availableTargets, Long userId) {
+//        if (userId != null) {
+//           // String lastFour = getLastFourDigits(userId);
+//            long dbIndex = userId % 2; // 0→mall_0,1→mall_1
+//            String targetDb = "ds" + dbIndex;
+//            if (availableTargets.contains(targetDb)) {
+//                return Collections.singleton(targetDb);
+//            }
+//        }
+//        // 查询时无user_id:扫描1-6月的库
+//        return Arrays.asList("ds0", "ds1");
+//    }
+//
+//    // 7-12月路由逻辑(mall_1/mall_2)
+//    private Collection<String> routeSecondHalf(Collection<String> availableTargets, Long userId) {
+//        if (userId != null) {
+//            //String lastFour = getLastFourDigits(userId);
+//            long dbIndex = 2 + (userId % 2); // 1→mall_1,2→mall_2
+//            String targetDb = "ds" + dbIndex;
+//            if (availableTargets.contains(targetDb)) {
+//                return Collections.singleton(targetDb);
+//            }
+//        }
+//        // 查询时无user_id:扫描7-12月的库
+//        return Arrays.asList("ds2", "ds3");
+//    }
+//
+//    // 判断是否为插入操作
+//    private boolean isInsertOperation(ComplexKeysShardingValue<?> shardingValue) {
+//        //return shardingValue.getSqlType() != null && shardingValue.getSqlType().name().startsWith("INSERT");
+//
+//        //shardingValue
+//        return true;
+//    }
+//
+//    // 提取并解析create_time
+//    private Date getCreateTime(ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+//        Map<String, Collection<Comparable<?>>> values = shardingValue.getColumnNameAndShardingValuesMap();
+//        if (values.containsKey("create_time") && !values.get("create_time").isEmpty()) {
+//            Object value = values.get("create_time").iterator().next();
+//            if (value instanceof Date) return (Date) value;
+//            try {
+//                return SDF.parse(value.toString());
+//            } catch (ParseException e) {
+//                throw new RuntimeException("create_time格式错误,应为yyyy-MM-dd HH:mm:ss");
+//            }
+//        }
+//
+//
+//        if (values.containsKey("order_id") && !values.get("order_id").isEmpty()) {
+//            String  orderId = (String) values.get("order_id").iterator().next();
+//            // 提取日期位并转换为Date类型
+//            String dateStr = "20"+orderId.substring(2, 8);
+//            try {
+//                return SDFORDERNO.parse(dateStr);
+//            } catch (ParseException e) {
+//                throw new RuntimeException("从订单号中提取日期错误"+dateStr);
+//            }
+//
+//        }
+//
+//
+//        return null;
+//    }
+//
+//    // 提取user_id
+//    private Long getUserId(ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+//        Map<String, Collection<Comparable<?>>> values = shardingValue.getColumnNameAndShardingValuesMap();
+//        if (values.containsKey("uid") && !values.get("uid").isEmpty()) {
+//            Long uid = (Long) values.get("uid").iterator().next();
+//            return uid % 10000;
+//        }
+//
+//        if (values.containsKey("order_id") && !values.get("order_id").isEmpty()) {
+//            String  orderId = (String) values.get("order_id").iterator().next();
+//            // 提取后4位并转换为long类型
+//            String lastFourStr = orderId.substring(orderId.length() - 4);
+//            return Long.parseLong(lastFourStr);
+//        }
+//
+//
+//        return null;
+//    }
+//
+//    // 判断是否为1-6月
+//    private boolean isFirstHalfYear(Date date) {
+//        Calendar calendar = Calendar.getInstance();
+//        calendar.setTime(date);
+//        return FIRST_HALF_MONTHS.contains(calendar.get(Calendar.MONTH) + 1);
+//    }
+//
+//    // 判断是否为7-12月
+//    private boolean isSecondHalfYear(Date date) {
+//        Calendar calendar = Calendar.getInstance();
+//        calendar.setTime(date);
+//        return SECOND_HALF_MONTHS.contains(calendar.get(Calendar.MONTH) + 1);
+//    }
+//
+//    // 获取user_id后四位
+//    private String getLastFourDigits(String value) {
+//        if (value == null || value.isEmpty()) return "0";
+//        return value.substring(Math.max(0, value.length() - 4));
+//    }
+//
+//    // 无create_time时的全量库过滤
+//    private Collection<String> filterAllDatabases(Collection<String> availableTargets, Long userId) {
+//        if (userId != null) {
+//            // 有user_id但无时间时,需扫描所有可能的库(mall_0/mall_1/mall_2)
+//            return Arrays.asList("ds0", "ds1", "ds2","ds3");
+//        }
+//        // 无任何条件时扫描所有库
+//        return availableTargets;
+//    }
+
+//哥几个鸡
+//    private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//    private static final SimpleDateFormat SDF_ORDER_NO = new SimpleDateFormat("yyyyMMdd");
+//    private static final Set<Integer> FIRST_HALF_MONTHS = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6));
+//    private static final Set<Integer> SECOND_HALF_MONTHS = new HashSet<>(Arrays.asList(7, 8, 9, 10, 11, 12));
+//
+//    @Override
+//    public Collection<String> doSharding(Collection<String> availableTargets, ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+//        // 获取所有order_id对应的分库条件(时间+用户ID)
+//        Map<String, List<Long>> orderIdDbMap = getOrderIdDbMap(shardingValue);
+//        if (orderIdDbMap.isEmpty()) {
+//            // 无order_id时按原逻辑处理(如uid)
+//            return handleNonOrderIdSharding(availableTargets, shardingValue);
+//        }
+//
+//        // 收集所有匹配的数据库
+//        Set<String> targetDbs = new HashSet<>();
+//        for (List<Long> params : orderIdDbMap.values()) {
+//            Date createTime = new Date(params.get(0)); // 时间毫秒值
+//            Long userId = params.get(1);
+//            targetDbs.addAll(routeByTimeAndUserId(availableTargets, createTime, userId));
+//        }
+//
+//        return targetDbs.isEmpty() ? availableTargets : targetDbs;
+//    }
+//
+//    /**
+//     * 解析所有order_id,提取每个对应的时间(毫秒)和用户ID(后4位)
+//     */
+//    private Map<String, List<Long>> getOrderIdDbMap(ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+//        Map<String, Collection<Comparable<?>>> values = shardingValue.getColumnNameAndShardingValuesMap();
+//        Map<String, List<Long>> result = new HashMap<>();
+//
+//        if (values.containsKey("order_id") && !values.get("order_id").isEmpty()) {
+//            for (Comparable<?> val : values.get("order_id")) {
+//                String orderId = (String) val;
+//                try {
+//                    // 1. 从order_id提取时间(格式:BH2510193430008 → 251019 → 2025-10-19)
+//                    String dateStr = "20" + orderId.substring(2, 8); // 取第2-8位(251019)
+//                    Date createTime = SDF_ORDER_NO.parse(dateStr);
+//                    // 2. 从order_id提取用户ID(后4位)
+//                    String lastFour = orderId.substring(orderId.length() - 4);
+//                    Long userId = Long.parseLong(lastFour);
+//                    // 存储:orderId → [时间毫秒值, 用户ID]
+//                    result.put(orderId, Arrays.asList(createTime.getTime(), userId));
+//                } catch (ParseException | StringIndexOutOfBoundsException e) {
+//                    throw new RuntimeException("解析order_id分库条件失败: " + orderId, e);
+//                }
+//            }
+//        }
+//        return result;
+//    }
+//
+//    /**
+//     * 处理无order_id的情况(如按uid和create_time分库)
+//     */
+//    private Collection<String> handleNonOrderIdSharding(Collection<String> availableTargets, ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+//        Date createTime = getCreateTime(shardingValue);
+//        Long userId = getUserId(shardingValue);
+//
+//        if (createTime != null && isFirstHalfYear(createTime)) {
+//            return routeFirstHalf(availableTargets, userId);
+//        }
+//        if (createTime != null && isSecondHalfYear(createTime)) {
+//            return routeSecondHalf(availableTargets, userId);
+//        }
+//        return filterAllDatabases(availableTargets, userId);
+//    }
+//
+//    /**
+//     * 根据时间和用户ID路由到具体数据库
+//     */
+//    private Collection<String> routeByTimeAndUserId(Collection<String> availableTargets, Date createTime, Long userId) {
+//        if (isFirstHalfYear(createTime)) {
+//            return routeFirstHalf(availableTargets, userId);
+//        } else if (isSecondHalfYear(createTime)) {
+//            return routeSecondHalf(availableTargets, userId);
+//        }
+//        return availableTargets;
+//    }
+//
+//    // 1-6月路由(ds0/ds1)
+//    private Collection<String> routeFirstHalf(Collection<String> availableTargets, Long userId) {
+//        if (userId != null) {
+//            long dbIndex = userId % 2;
+//            String targetDb = "ds" + dbIndex;
+//            if (availableTargets.contains(targetDb)) {
+//                return Collections.singleton(targetDb);
+//            }
+//        }
+//        return Arrays.asList("ds0", "ds1");
+//    }
+//
+//    // 7-12月路由(ds2/ds3)
+//    private Collection<String> routeSecondHalf(Collection<String> availableTargets, Long userId) {
+//        if (userId != null) {
+//            long dbIndex = 2 + (userId % 2); // 2或3
+//            String targetDb = "ds" + dbIndex;
+//            if (availableTargets.contains(targetDb)) {
+//                return Collections.singleton(targetDb);
+//            }
+//        }
+//        return Arrays.asList("ds2", "ds3");
+//    }
+//
+//    // 提取create_time(非order_id场景)
+//    private Date getCreateTime(ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+//        Map<String, Collection<Comparable<?>>> values = shardingValue.getColumnNameAndShardingValuesMap();
+//        if (values.containsKey("create_time") && !values.get("create_time").isEmpty()) {
+//            Object value = values.get("create_time").iterator().next();
+//            if (value instanceof Date) return (Date) value;
+//            try {
+//                return SDF.parse(value.toString());
+//            } catch (ParseException e) {
+//                throw new RuntimeException("create_time格式错误: " + value);
+//            }
+//        }
+//        return null;
+//    }
+//
+//    // 提取uid(非order_id场景)
+//    private Long getUserId(ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+//        Map<String, Collection<Comparable<?>>> values = shardingValue.getColumnNameAndShardingValuesMap();
+//        if (values.containsKey("uid") && !values.get("uid").isEmpty()) {
+//            Long uid = (Long) values.get("uid").iterator().next();
+//            return uid % 10000;
+//        }
+//        return null;
+//    }
+//
+//    // 判断1-6月
+//    private boolean isFirstHalfYear(Date date) {
+//        Calendar calendar = Calendar.getInstance();
+//        calendar.setTime(date);
+//        return FIRST_HALF_MONTHS.contains(calendar.get(Calendar.MONTH) + 1);
+//    }
+//
+//    // 判断7-12月
+//    private boolean isSecondHalfYear(Date date) {
+//        Calendar calendar = Calendar.getInstance();
+//        calendar.setTime(date);
+//        return SECOND_HALF_MONTHS.contains(calendar.get(Calendar.MONTH) + 1);
+//    }
+//
+//    // 无时间条件时的全库过滤
+//    private Collection<String> filterAllDatabases(Collection<String> availableTargets, Long userId) {
+//        if (userId != null) {
+//            return Arrays.asList("ds0", "ds1", "ds2", "ds3");
+//        }
+//        return availableTargets;
+//    }
+
+
     private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-    private static final SimpleDateFormat SDFORDERNO = new SimpleDateFormat("yyyyMMdd");
+    private static final SimpleDateFormat SDF_ORDER_NO = new SimpleDateFormat("yyyyMMdd");
     private static final Set<Integer> FIRST_HALF_MONTHS = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6));
     private static final Set<Integer> SECOND_HALF_MONTHS = new HashSet<>(Arrays.asList(7, 8, 9, 10, 11, 12));
 
     @Override
     public Collection<String> doSharding(Collection<String> availableTargets, ComplexKeysShardingValue<Comparable<?>> shardingValue) {
-        // 判断操作类型
-        boolean isInsert = isInsertOperation(shardingValue);
+        // 优先处理order_id IN条件
+        Map<String, List<Long>> orderIdDbMap = getOrderIdDbMap(shardingValue);
+        if (!orderIdDbMap.isEmpty()) {
+            Set<String> targetDbs = new HashSet<>();
+            for (List<Long> params : orderIdDbMap.values()) {
+                Date createTime = new Date(params.get(0));
+                Long userId = params.get(1);
+                targetDbs.addAll(routeByTimeAndUserId(availableTargets, createTime, userId));
+            }
+            return targetDbs.isEmpty() ? availableTargets : targetDbs;
+        }
+
+        // 处理无order_id的情况(如uid+create_time范围)
+        return handleNonOrderIdSharding(availableTargets, shardingValue);
+    }
+
+    /**
+     * 解析所有order_id,提取时间和用户ID
+     */
+    private Map<String, List<Long>> getOrderIdDbMap(ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+        Map<String, Collection<Comparable<?>>> values = shardingValue.getColumnNameAndShardingValuesMap();
+        Map<String, List<Long>> result = new HashMap<>();
+
+        if (values.containsKey("order_id") && !values.get("order_id").isEmpty()) {
+            for (Comparable<?> val : values.get("order_id")) {
+                String orderId = (String) val;
+                try {
+                    String dateStr = "20" + orderId.substring(2, 8);
+                    Date createTime = SDF_ORDER_NO.parse(dateStr);
+                    String lastFour = orderId.substring(orderId.length() - 4);
+                    Long userId = Long.parseLong(lastFour);
+                    result.put(orderId, Arrays.asList(createTime.getTime(), userId));
+                } catch (ParseException | StringIndexOutOfBoundsException e) {
+                    throw new RuntimeException("解析order_id分库条件失败: " + orderId, e);
+                }
+            }
+        }
+        return result;
+    }
 
-        // 提取分片键
-        Date createTime = getCreateTime(shardingValue);
+    /**
+     * 处理无order_id的情况(支持create_time范围查询)
+     */
+    private Collection<String> handleNonOrderIdSharding(Collection<String> availableTargets, ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+        // 提取create_time的范围(start和end)
+        DateRange createTimeRange = getCreateTimeRange(shardingValue);
         Long userId = getUserId(shardingValue);
 
+        // 有时间范围时,按范围路由
+        if (createTimeRange != null) {
+            Set<String> targetDbs = new HashSet<>();
+            // 判断是否与1-6月重叠
+            if (isRangeOverlapFirstHalf(createTimeRange)) {
+                targetDbs.addAll(routeFirstHalf(availableTargets, userId));
+            }
+            // 判断是否与7-12月重叠
+            if (isRangeOverlapSecondHalf(createTimeRange)) {
+                targetDbs.addAll(routeSecondHalf(availableTargets, userId));
+            }
+            return targetDbs.isEmpty() ? availableTargets : targetDbs;
+        }
 
+        // 无时间范围时,全库扫描
+        return filterAllDatabases(availableTargets, userId);
+    }
 
-        // 插入操作必须包含create_time和user_id
-        if (isInsert && (createTime == null || userId == null)) {
-          //  throw new IllegalArgumentException("插入数据必须包含create_time和user_id");
+    /**
+     * 提取create_time的范围值(支持>=和<=)
+     */
+    private DateRange getCreateTimeRange(ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+        // 1. 从范围条件集合中获取create_time的范围值
+        Map<String, com.google.common.collect.Range<Comparable<?>>> rangeValuesMap = shardingValue.getColumnNameAndRangeValuesMap();
+        com.google.common.collect.Range<Comparable<?>> createTimeRanges = rangeValuesMap.get("create_time");
+
+        Date start = null;
+        Date end = null;
+        // 若没有create_time的范围条件,返回null
+//        if (createTimeRanges == null || createTimeRanges.isEmpty()) {
+//            return null;
+//        }
+        if(!ObjectUtils.isEmpty(createTimeRanges)){
+            if (createTimeRanges.hasLowerBound()) {
+                Comparable<?> lowerVal = createTimeRanges.lowerEndpoint();
+                start = parseDate(lowerVal);
+            }
+            // 提取上界(<=)
+            if (createTimeRanges.hasUpperBound()) {
+                Comparable<?> upperVal = createTimeRanges.upperEndpoint();
+                end = parseDate(upperVal);
+            }
         }
 
-        // 1-6月数据处理(维持原逻辑)
-        if (createTime != null && isFirstHalfYear(createTime)) {
-            return routeFirstHalf(availableTargets, userId);
+
+        // 3. 兼容等值条件(如果存在create_time = ?,从精确值中提取)
+        if (start == null && end == null) {
+            Map<String, Collection<Comparable<?>>> preciseValuesMap = shardingValue.getColumnNameAndShardingValuesMap();
+            Collection<Comparable<?>> createTimePrecise = preciseValuesMap.get("create_time");
+            if (createTimePrecise != null && !createTimePrecise.isEmpty()) {
+                Comparable<?> preciseVal = createTimePrecise.iterator().next();
+                Date date = parseDate(preciseVal);
+                start = date;
+                end = date;
+            }
         }
 
-        // 7-12月数据处理
-        if (createTime != null && isSecondHalfYear(createTime)) {
-            return routeSecondHalf(availableTargets, userId);
+        return (start != null || end != null) ? new DateRange(start, end) : null;
+    }
+
+    /**
+     * 判断时间范围是否与1-6月重叠
+     */
+    private boolean isRangeOverlapFirstHalf(DateRange range) {
+        Calendar firstHalfStart = Calendar.getInstance();
+        firstHalfStart.set(Calendar.MONTH, 0); // 1月
+        firstHalfStart.set(Calendar.DAY_OF_MONTH, 1);
+        firstHalfStart.set(Calendar.HOUR_OF_DAY, 0);
+        firstHalfStart.set(Calendar.MINUTE, 0);
+        firstHalfStart.set(Calendar.SECOND, 0);
+
+        Calendar firstHalfEnd = Calendar.getInstance();
+        firstHalfEnd.set(Calendar.MONTH, 5); // 6月
+        firstHalfEnd.set(Calendar.DAY_OF_MONTH, 30);
+        firstHalfEnd.set(Calendar.HOUR_OF_DAY, 23);
+        firstHalfEnd.set(Calendar.MINUTE, 59);
+        firstHalfEnd.set(Calendar.SECOND, 59);
+
+        return isOverlap(range, new DateRange(firstHalfStart.getTime(), firstHalfEnd.getTime()));
+    }
+
+    /**
+     * 判断时间范围是否与7-12月重叠
+     */
+    private boolean isRangeOverlapSecondHalf(DateRange range) {
+        Calendar secondHalfStart = Calendar.getInstance();
+        secondHalfStart.set(Calendar.MONTH, 6); // 7月
+        secondHalfStart.set(Calendar.DAY_OF_MONTH, 1);
+        secondHalfStart.set(Calendar.HOUR_OF_DAY, 0);
+        secondHalfStart.set(Calendar.MINUTE, 0);
+        secondHalfStart.set(Calendar.SECOND, 0);
+
+        Calendar secondHalfEnd = Calendar.getInstance();
+        secondHalfEnd.set(Calendar.MONTH, 11); // 12月
+        secondHalfEnd.set(Calendar.DAY_OF_MONTH, 31);
+        secondHalfEnd.set(Calendar.HOUR_OF_DAY, 23);
+        secondHalfEnd.set(Calendar.MINUTE, 59);
+        secondHalfEnd.set(Calendar.SECOND, 59);
+
+        return isOverlap(range, new DateRange(secondHalfStart.getTime(), secondHalfEnd.getTime()));
+    }
+
+    /**
+     * 判断两个时间范围是否重叠
+     */
+    private boolean isOverlap(DateRange range1, DateRange range2) {
+        // 范围1在范围2之前(不重叠)
+        if (range1.getEnd() != null && range2.getStart() != null
+                && range1.getEnd().before(range2.getStart())) {
+            return false;
         }
+        // 范围1在范围2之后(不重叠)
+        if (range1.getStart() != null && range2.getEnd() != null
+                && range1.getStart().after(range2.getEnd())) {
+            return false;
+        }
+        // 其他情况均重叠
+        return true;
+    }
 
-        // 查询时无create_time:扫描所有符合条件的库
-        return filterAllDatabases(availableTargets, userId);
+    /**
+     * 根据时间和用户ID路由数据库
+     */
+    private Collection<String> routeByTimeAndUserId(Collection<String> availableTargets, Date createTime, Long userId) {
+        if (isFirstHalfYear(createTime)) {
+            return routeFirstHalf(availableTargets, userId);
+        } else if (isSecondHalfYear(createTime)) {
+            return routeSecondHalf(availableTargets, userId);
+        }
+        return availableTargets;
     }
 
-    // 1-6月路由逻辑(维持原逻辑:mall_0/mall_1)
+    /**
+     * 1-6月路由(ds0/ds1)
+     */
     private Collection<String> routeFirstHalf(Collection<String> availableTargets, Long userId) {
         if (userId != null) {
-           // String lastFour = getLastFourDigits(userId);
-            long dbIndex = userId % 2; // 0→mall_0,1→mall_1
+            long dbIndex = userId % 2;
             String targetDb = "ds" + dbIndex;
             if (availableTargets.contains(targetDb)) {
                 return Collections.singleton(targetDb);
             }
         }
-        // 查询时无user_id:扫描1-6月的库
         return Arrays.asList("ds0", "ds1");
     }
 
-    // 7-12月路由逻辑(mall_1/mall_2)
+    /**
+     * 7-12月路由(ds2/ds3)
+     */
     private Collection<String> routeSecondHalf(Collection<String> availableTargets, Long userId) {
         if (userId != null) {
-            //String lastFour = getLastFourDigits(userId);
-            long dbIndex = 1 + (userId % 2); // 1→mall_1,2→mall_2
+            long dbIndex = 2 + (userId % 2); // 2或3
             String targetDb = "ds" + dbIndex;
             if (availableTargets.contains(targetDb)) {
                 return Collections.singleton(targetDb);
             }
         }
-        // 查询时无user_id:扫描7-12月的库
-        return Arrays.asList("ds1", "ds2");
-    }
-
-    // 判断是否为插入操作
-    private boolean isInsertOperation(ComplexKeysShardingValue<?> shardingValue) {
-        //return shardingValue.getSqlType() != null && shardingValue.getSqlType().name().startsWith("INSERT");
-
-        //shardingValue
-        return true;
-    }
-
-    // 提取并解析create_time
-    private Date getCreateTime(ComplexKeysShardingValue<Comparable<?>> shardingValue) {
-        Map<String, Collection<Comparable<?>>> values = shardingValue.getColumnNameAndShardingValuesMap();
-        if (values.containsKey("create_time") && !values.get("create_time").isEmpty()) {
-            Object value = values.get("create_time").iterator().next();
-            if (value instanceof Date) return (Date) value;
-            try {
-                return SDF.parse(value.toString());
-            } catch (ParseException e) {
-                throw new RuntimeException("create_time格式错误,应为yyyy-MM-dd HH:mm:ss");
-            }
-        }
-
-
-        if (values.containsKey("order_id") && !values.get("order_id").isEmpty()) {
-            String  orderId = (String) values.get("order_id").iterator().next();
-            // 提取日期位并转换为Date类型
-            String dateStr = "20"+orderId.substring(2, 8);
-            try {
-                return SDFORDERNO.parse(dateStr);
-            } catch (ParseException e) {
-                throw new RuntimeException("从订单号中提取日期错误"+dateStr);
-            }
-
-        }
-
-
-        return null;
+        return Arrays.asList("ds2", "ds3");
     }
 
-    // 提取user_id
+    /**
+     * 提取uid(非order_id场景)
+     */
     private Long getUserId(ComplexKeysShardingValue<Comparable<?>> shardingValue) {
         Map<String, Collection<Comparable<?>>> values = shardingValue.getColumnNameAndShardingValuesMap();
         if (values.containsKey("uid") && !values.get("uid").isEmpty()) {
             Long uid = (Long) values.get("uid").iterator().next();
             return uid % 10000;
         }
-
-        if (values.containsKey("order_id") && !values.get("order_id").isEmpty()) {
-            String  orderId = (String) values.get("order_id").iterator().next();
-            // 提取后4位并转换为long类型
-            String lastFourStr = orderId.substring(orderId.length() - 4);
-            return Long.parseLong(lastFourStr);
-        }
-
-
         return null;
     }
 
-    // 判断是否为1-6月
+    /**
+     * 判断是否为1-6月
+     */
     private boolean isFirstHalfYear(Date date) {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
         return FIRST_HALF_MONTHS.contains(calendar.get(Calendar.MONTH) + 1);
     }
 
-    // 判断是否为7-12月
+    /**
+     * 判断是否为7-12月
+     */
     private boolean isSecondHalfYear(Date date) {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
         return SECOND_HALF_MONTHS.contains(calendar.get(Calendar.MONTH) + 1);
     }
 
-    // 获取user_id后四位
-    private String getLastFourDigits(String value) {
-        if (value == null || value.isEmpty()) return "0";
-        return value.substring(Math.max(0, value.length() - 4));
-    }
-
-    // 无create_time时的全量库过滤
+    /**
+     * 无时间条件时的全库过滤
+     */
     private Collection<String> filterAllDatabases(Collection<String> availableTargets, Long userId) {
         if (userId != null) {
-            // 有user_id但无时间时,需扫描所有可能的库(mall_0/mall_1/mall_2)
-            return Arrays.asList("ds0", "ds1", "ds2","ds3");
+            return Arrays.asList("ds0", "ds1", "ds2", "ds3");
         }
-        // 无任何条件时扫描所有库
         return availableTargets;
     }
 
+    /**
+     * 解析时间对象为Date
+     */
+    private Date parseDate(Object value) {
+        if (value instanceof Date) {
+            return (Date) value;
+        }
+        try {
+            return SDF.parse(value.toString());
+        } catch (ParseException e) {
+            throw new RuntimeException("时间格式错误: " + value, e);
+        }
+    }
 
+    /**
+     * 内部类:表示时间范围(start <= create_time <= end)
+     */
+    private static class DateRange {
+        private final Date start;
+        private final Date end;
+
+        public DateRange(Date start, Date end) {
+            this.start = start;
+            this.end = end;
+        }
 
+        public Date getStart() {
+            return start;
+        }
+
+        public Date getEnd() {
+            return end;
+        }
+    }
 
 
 

+ 2 - 2
mall-service/src/main/java/com/txz/mall/configurer/StoreOrderInfoDatabaseShardingAlgorithm.java

@@ -63,14 +63,14 @@ public class StoreOrderInfoDatabaseShardingAlgorithm implements ComplexKeysShard
     private Collection<String> routeSecondHalf(Collection<String> availableTargets, Long userId) {
         if (userId != null) {
             //String lastFour = getLastFourDigits(userId);
-            long dbIndex = 1 + (userId % 2); // 1→mall_1,2→mall_2
+            long dbIndex = 2 + (userId % 2); // 1→mall_1,2→mall_2
             String targetDb = "ds" + dbIndex;
             if (availableTargets.contains(targetDb)) {
                 return Collections.singleton(targetDb);
             }
         }
         // 查询时无user_id:扫描7-12月的库
-        return Arrays.asList("ds1", "ds2");
+        return Arrays.asList("ds2", "ds3");
     }
 
     // 判断是否为插入操作

+ 2 - 2
mall-service/src/main/java/com/txz/mall/configurer/StoreOrderStatusDatabaseShardingAlgorithm.java

@@ -63,14 +63,14 @@ public class StoreOrderStatusDatabaseShardingAlgorithm implements ComplexKeysSha
     private Collection<String> routeSecondHalf(Collection<String> availableTargets, Long userId) {
         if (userId != null) {
             //String lastFour = getLastFourDigits(userId);
-            long dbIndex = 1 + (userId % 2); // 1→mall_1,2→mall_2
+            long dbIndex = 2 + (userId % 2); // 1→mall_1,2→mall_2
             String targetDb = "ds" + dbIndex;
             if (availableTargets.contains(targetDb)) {
                 return Collections.singleton(targetDb);
             }
         }
         // 查询时无user_id:扫描7-12月的库
-        return Arrays.asList("ds1", "ds2");
+        return Arrays.asList("ds2", "ds3");
     }
 
     // 判断是否为插入操作

+ 2 - 2
mall-service/src/main/java/com/txz/mall/configurer/StorePinkSummaryDatabaseShardingAlgorithm.java

@@ -63,14 +63,14 @@ public class StorePinkSummaryDatabaseShardingAlgorithm implements ComplexKeysSha
     private Collection<String> routeSecondHalf(Collection<String> availableTargets, Long userId) {
         if (userId != null) {
             //String lastFour = getLastFourDigits(userId);
-            long dbIndex = 1 + (userId % 2); // 1→mall_1,2→mall_2
+            long dbIndex = 2 + (userId % 2); // 1→mall_1,2→mall_2
             String targetDb = "ds" + dbIndex;
             if (availableTargets.contains(targetDb)) {
                 return Collections.singleton(targetDb);
             }
         }
         // 查询时无user_id:扫描7-12月的库
-        return Arrays.asList("ds1", "ds2");
+        return Arrays.asList("ds2", "ds3");
     }
 
     // 判断是否为插入操作

+ 86 - 23
mall-service/src/main/java/com/txz/mall/configurer/TableShardingAlgorithm.java

@@ -9,42 +9,105 @@ import java.util.*;
 
 public class TableShardingAlgorithm implements ComplexKeysShardingAlgorithm<Comparable<?>> {
 
-    @Override
-    public Collection<String> doSharding(Collection<String> availableTargets, ComplexKeysShardingValue<Comparable<?>> shardingValue) {
-        Long userId = getUserId(shardingValue);
-        // 查询时无create_time:扫描所有符合条件的库
-        return filterAllTable(availableTargets, userId);
-    }
-
+//    @Override
+//    public Collection<String> doSharding(Collection<String> availableTargets, ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+//        Long userId = getUserId(shardingValue);
+//        // 查询时无create_time:扫描所有符合条件的库
+//        return filterAllTable(availableTargets, userId);
+//    }
+//
+//
+//    private Long getUserId(ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+//        Map<String, Collection<Comparable<?>>> values = shardingValue.getColumnNameAndShardingValuesMap();
+//        if (values.containsKey("uid") && !values.get("uid").isEmpty()) {
+//            Long uid = (Long) values.get("uid").iterator().next();
+//            return uid % 10000;
+//        }
+//
+//        if (values.containsKey("order_id") && !values.get("order_id").isEmpty()) {
+//            String  orderId = (String) values.get("order_id").iterator().next();
+//            // 提取后4位并转换为long类型
+//            String lastFourStr = orderId.substring(orderId.length() - 4);
+//            return Long.parseLong(lastFourStr);
+//        }
+//
+//        return null;
+//    }
+//
+//    private Collection<String> filterAllTable(Collection<String> availableTargets, Long userId) {
+//        //这个模树要拎出去形成配置项
+//        long mod = userId % 5;
+//        for (String tableName : availableTargets) {
+//            if (tableName.endsWith(String.valueOf(mod))) {
+//                List<String> list = Arrays.asList(tableName);
+//                return list;
+//            }
+//        }
+//        throw new IllegalArgumentException("未找到匹配的表: " + availableTargets + ", 分片值: " + userId);
+//
+//    }
 
-    private Long getUserId(ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+    // 步骤1:修改getUserId,返回所有order_id对应的分表键(后4位)
+    private Collection<Long> getShardingKeys(ComplexKeysShardingValue<Comparable<?>> shardingValue) {
         Map<String, Collection<Comparable<?>>> values = shardingValue.getColumnNameAndShardingValuesMap();
+        Collection<Long> shardingKeys = new ArrayList<>();
+
+        // 优先处理uid(如果有)
         if (values.containsKey("uid") && !values.get("uid").isEmpty()) {
-            Long uid = (Long) values.get("uid").iterator().next();
-            return uid % 10000;
+            for (Comparable<?> val : values.get("uid")) {
+                Long uid = (Long) val;
+                shardingKeys.add(uid % 10000);
+            }
+            return shardingKeys;
         }
 
+        // 核心:处理order_id的IN条件,遍历所有order_id
         if (values.containsKey("order_id") && !values.get("order_id").isEmpty()) {
-            String  orderId = (String) values.get("order_id").iterator().next();
-            // 提取后4位并转换为long类型
-            String lastFourStr = orderId.substring(orderId.length() - 4);
-            return Long.parseLong(lastFourStr);
+            for (Comparable<?> val : values.get("order_id")) {
+                String orderId = (String) val;
+                // 提取每个order_id的后4位,作为分表键
+                String lastFourStr = orderId.substring(orderId.length() - 4);
+                shardingKeys.add(Long.parseLong(lastFourStr));
+            }
+            return shardingKeys;
         }
 
-        return null;
+        return shardingKeys;
     }
 
-    private Collection<String> filterAllTable(Collection<String> availableTargets, Long userId) {
-        //这个模树要拎出去形成配置项
-        long mod = userId % 5;
-        for (String tableName : availableTargets) {
-            if (tableName.endsWith(String.valueOf(mod))) {
-                List<String> list = Arrays.asList(tableName);
-                return list;
+    // 步骤2:修改doSharding,返回所有匹配的表
+    @Override
+    public Collection<String> doSharding(Collection<String> availableTargets, ComplexKeysShardingValue<Comparable<?>> shardingValue) {
+       // String logicTableName = shardingValue.getLogicTableName();
+
+        // 1. 获取所有分表键(每个order_id对应一个)
+        Collection<Long> shardingKeys = getShardingKeys(shardingValue);
+        if (shardingKeys.isEmpty()) {
+            throw new IllegalArgumentException("分表键不能为空(需uid或order_id)");
+        }
+
+        // 2. 每个分表键对应一个表,收集所有匹配的表
+        Collection<String> resultTables = new ArrayList<>();
+        for (Long key : shardingKeys) {
+            // 计算分区(和你原逻辑一致:key % 5)
+            long tableSuffix = key % 5;
+            // 匹配可用表(如m_store_pink_3)
+            for (String targetTable : availableTargets) {
+                if (targetTable.endsWith(String.valueOf(tableSuffix))) {
+                    resultTables.add(targetTable);
+                    break; // 找到对应表就跳出,避免重复
+                }
             }
         }
-        throw new IllegalArgumentException("未找到匹配的表: " + availableTargets + ", 分片值: " + userId);
 
+        // 3. 若没有匹配的表,抛出异常
+        if (resultTables.isEmpty()) {
+            throw new IllegalArgumentException("未找到匹配的表: " + availableTargets + ", 分表键: " + shardingKeys);
+        }
+
+        return resultTables;
     }
 
+
+
 }

+ 2 - 2
mall-service/src/main/java/com/txz/mall/configurer/UserSignDatabaseShardingAlgorithm.java

@@ -63,14 +63,14 @@ public class UserSignDatabaseShardingAlgorithm implements ComplexKeysShardingAlg
     private Collection<String> routeSecondHalf(Collection<String> availableTargets, Long userId) {
         if (userId != null) {
             //String lastFour = getLastFourDigits(userId);
-            long dbIndex = 1 + (userId % 2); // 1→mall_1,2→mall_2
+            long dbIndex = 2 + (userId % 2); // 1→mall_1,2→mall_2
             String targetDb = "ds" + dbIndex;
             if (availableTargets.contains(targetDb)) {
                 return Collections.singleton(targetDb);
             }
         }
         // 查询时无user_id:扫描7-12月的库
-        return Arrays.asList("ds1", "ds2");
+        return Arrays.asList("ds2", "ds3");
     }
 
     // 判断是否为插入操作

+ 4 - 4
mall-service/src/main/java/com/txz/mall/controller/OrderController.java

@@ -167,8 +167,8 @@ public class OrderController {
 
     @ApiOperation("关闭订单")
     @PostMapping("/close")
-    public Result close(@RequestParam("id") Long id) {
-        storeOrderService.close(id);
+    public Result close(@RequestParam("orderNo") String orderNo) {
+        storeOrderService.close(orderNo);
         return Result.success();
     }
 
@@ -185,8 +185,8 @@ public class OrderController {
 
     @ApiOperation("取消订单")
     @PostMapping("/cancel")
-    public Result cancel(@RequestParam("id") Long id) {
-        storeOrderService.cancel(id);
+    public Result cancel(@RequestParam("orderNo") String orderNo) {
+        storeOrderService.cancel(orderNo);
         return Result.success();
     }
 

+ 4 - 4
mall-service/src/main/java/com/txz/mall/controller/PinkController.java

@@ -175,9 +175,9 @@ public class PinkController {
      */
     @ApiOperation(value = "拼团成功")
     @PostMapping(value = "/pinkSuccess")
-    public Result pinkSuccess(@RequestParam("id") Long id) {
+    public Result pinkSuccess(@RequestParam("orderNo") String orderNo) {
         StoreOrder storeOrder = new StoreOrder();
-        storePinkService.pinkSuccess(id,storeOrder);
+        storePinkService.pinkSuccess(orderNo,storeOrder);
         return Result.success();
     }
 
@@ -196,8 +196,8 @@ public class PinkController {
      */
     @ApiOperation(value = "天选")
     @PostMapping(value = "/theSelection")
-    public Result theSelection(@RequestParam("id") Long orderId) {
-        storePinkService.theSelection(orderId,new Date());
+    public Result theSelection(@RequestParam("spsCode") String spsCode) {
+        storePinkService.theSelection(spsCode,new Date());
         return Result.success();
     }
     @Resource

+ 1 - 1
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppCombinationController.java

@@ -316,7 +316,7 @@ public class AppCombinationController {
       //  PageHelper.startPage(page, size);
         PageInfo pageInfo = null;
         try {
-            List<StoreCombinationRankVO> list = orderServiceBusiness.getRank();
+            List<StoreCombinationRankVO> list = orderServiceBusiness.getRankNew();
             pageInfo = new PageInfo(list);
         } catch (Exception e) {
             log.error("查询对象操作异常e:{}", e);

+ 4 - 4
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppOrderController.java

@@ -196,15 +196,15 @@ public class AppOrderController {
     
     @ApiOperation("关闭订单")
     @PostMapping("/close")
-    public Result close(@RequestParam("id") Long id) {
-        storeOrderService.close(id);
+    public Result close(@RequestParam("orderNo") String orderNo) {
+        storeOrderService.close(orderNo);
         return Result.success();
     }
     
     @ApiOperation("取消订单")
     @PostMapping("/cancel")
-    public Result cancel(@RequestParam("id") Long id) {
-        storeOrderService.cancel(id);
+    public Result cancel(@RequestParam("orderNo") String orderNo) {
+        storeOrderService.cancel(orderNo);
         return Result.success();
     }
     

+ 2 - 2
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppPinkController.java

@@ -161,9 +161,9 @@ public class AppPinkController {
      */
     @ApiOperation(value = "拼团成功")
     @PostMapping(value = "/pinkSuccess")
-    public Result pinkSuccess(@RequestParam("id") Long id) {
+    public Result pinkSuccess(@RequestParam("orderNo") String orderNo) {
         StoreOrder storeOrder = new StoreOrder();
-        storePinkService.pinkSuccess(id,storeOrder);
+        storePinkService.pinkSuccess(orderNo,storeOrder);
         return Result.success();
     }
 

+ 20 - 0
mall-service/src/main/java/com/txz/mall/dao/DailySalesSummaryOfProductsMapper.java

@@ -1,7 +1,27 @@
 package com.txz.mall.dao;
 
 import com.txz.mall.core.Mapper;
+import com.txz.mall.dao.impl.DailySalesSummaryOfProductsMapperImpl;
+import com.txz.mall.dao.impl.StorePinkMapperImpl;
 import com.txz.mall.model.DailySalesSummaryOfProducts;
+import dto.ProductCarouselDTO;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.SelectProvider;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 public interface DailySalesSummaryOfProductsMapper extends Mapper<DailySalesSummaryOfProducts> {
+
+
+    List<Map<String,Object>> getRankNew(@Param("date") Date date, @Param("productSet") Set<Long> productSet);
+
+
+    @SelectProvider(type = DailySalesSummaryOfProductsMapperImpl.class, method = "pinkByProductId")
+    List<ProductCarouselDTO> pinkByProductId(Long productId);
+
+
+
 }

+ 20 - 0
mall-service/src/main/java/com/txz/mall/dao/impl/DailySalesSummaryOfProductsMapperImpl.java

@@ -0,0 +1,20 @@
+package com.txz.mall.dao.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/8/27
+ */
+
+public class DailySalesSummaryOfProductsMapperImpl {
+    
+    public String pinkByProductId(Long productId) {
+        if (ObjectUtil.isNotEmpty(productId)) {
+            return "SELECT uid, k_id FROM m_daily_sales_summary_of_products WHERE pid = #{productId} GROUP BY uid ORDER BY create_time DESC LIMIT 10";
+        } else {
+            return "SELECT uid, k_id FROM m_daily_sales_summary_of_products GROUP BY uid ORDER BY create_time DESC LIMIT 10";
+        }
+        
+    }
+}

+ 96 - 650
mall-service/src/main/java/com/txz/mall/model/DailySalesSummaryOfProducts.java

@@ -1,5 +1,8 @@
 package com.txz.mall.model;
 
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
 import java.math.BigDecimal;
 import java.util.Date;
 import javax.persistence.*;
@@ -8,132 +11,146 @@ import javax.persistence.*;
  * 表名:m_daily_sales_summary_of_products
  * 表注释:商品每日销量汇总表
 */
+@Data
 @Table(name = "m_daily_sales_summary_of_products")
 public class DailySalesSummaryOfProducts {
     /**
-     * 商品id
+     * 拼团ID
      */
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
 
     /**
-     * 商户Id(0为总后台管理员创建,不为0的时候是商户后台创建)
+     * 用户id
      */
-    @Column(name = "mer_id")
-    private Byte merId;
+    @ApiModelProperty(value = "用户id")
+    private Long uid;
 
-    /**
-     * 商品图片(主图)
-     */
-    private String image;
 
     /**
-     * 商品名称
+     * 拼团汇总表id
      */
-    @Column(name = "store_name")
-    private String storeName;
+    @ApiModelProperty(value = "拼团汇总表id")
+    @Column(name = "sps_id")
+    private Long spsId;
 
     /**
-     * 商品简介
+     * 订单id 生成
      */
-    @Column(name = "store_info")
-    private String storeInfo;
+    @ApiModelProperty(value = "订单id 生成")
+    @Column(name = "order_id")
+    private String orderId;
 
     /**
-     * 关键字(副标题)
+     * 订单id  数据库
      */
-    private String keyword;
+    @ApiModelProperty(value = "订单id  数据库")
+    @Column(name = "order_id_key")
+    private Long orderIdKey;
 
     /**
-     * 分类id
+     * 购买商品个数
      */
-    @Column(name = "cate_id")
-    private String cateId;
+    @ApiModelProperty(value = "购买商品个数")
+    @Column(name = "total_num")
+    private Integer totalNum;
 
     /**
-     * 商品价格
+     * 购买总金额
      */
-    private BigDecimal price;
+    @ApiModelProperty(value = "购买总金额")
+    @Column(name = "total_price")
+    private BigDecimal totalPrice;
 
     /**
-     * 会员价格
+     * 拼团商品id
      */
-    @Column(name = "vip_price")
-    private BigDecimal vipPrice;
+    @ApiModelProperty(value = "拼团商品id")
+    private Long cid;
 
     /**
-     * 市场价
+     * 商品id
      */
-    @Column(name = "ot_price")
-    private BigDecimal otPrice;
+    @ApiModelProperty(value = "商品id")
+    private Long pid;
 
     /**
-     * 邮费
+     * 拼图总人数
      */
-    private BigDecimal postage;
+    @ApiModelProperty(value = "拼图总人数")
+    private Integer people;
 
     /**
-     * 单位名
+     * 拼团商品单价
      */
-    @Column(name = "unit_name")
-    private String unitName;
+    @ApiModelProperty(value = "拼团商品单价")
+    private BigDecimal price;
 
     /**
-     * 每日销量快照
+     * 开始时间
      */
-    private Integer sales;
+    @ApiModelProperty(value = "开始时间")
+    @Column(name = "add_time")
+    private Date addTime;
 
     /**
-     * 每日销量增量
+     * 结束时间
      */
-    @Column(name = "day_sales")
-    private Integer daySales;
+    @ApiModelProperty(value = "结束时间")
+    @Column(name = "stop_time")
+    private Date stopTime;
 
     /**
-     * 每日库存快照
+     * 团长id 0为团长
      */
-    private Integer stock;
+    @ApiModelProperty(value = "团长id 0为团长 1不是")
+    @Column(name = "k_id")
+    private Integer kId;
 
-    /**
-     * 每日库存增量
-     */
-    @Column(name = "day_stock")
-    private Integer dayStock;
+    @ApiModelProperty(value = "幸运儿 默认0  1为幸运儿   (//团长不能是天选)")
+    @Column(name = "l_id")
+    private Integer lId;
 
-    /**
-     * 每日虚拟销量快照
-     */
-    private Integer ficti;
+//    /**
+//     * 是否发送模板消息0未发送1已发送
+//     */
+//    @ApiModelProperty(value = "是否发送模板消息 0未发送 1已发送")
+//    @Column(name = "is_tpl")
+//    private Integer isTpl;
 
     /**
-     * 每日虚拟销量增量
+     * 是否退款 0未退款 1已退款
      */
-    @Column(name = "day_ficti")
-    private Integer dayFicti;
+    @ApiModelProperty(value = "是否退款 0未退款 1已退款")
+    @Column(name = "is_refund")
+    private Integer isRefund;
 
     /**
-     * 主图视频链接
+     * 状态1进行中2已完成3未完成
      */
-    @Column(name = "video_link")
-    private String videoLink;
+    @ApiModelProperty(value = "状态 1进行中 2已完成 3未完成")
+    @Column(name = "status")
+    private Integer status;
 
-    /**
-     * 规格 0单 1多
-     */
-    @Column(name = "spec_type")
-    private Boolean specType;
+//    /**
+//     * 是否虚拟拼团
+//     */
+//    @ApiModelProperty(value = "是否虚拟拼团")
+//    @Column(name = "is_virtual")
+//    private Integer isVirtual;
 
     /**
-     * 活动显示排序0=默认, 1=秒杀,2=砍价,3=拼团
+     * 用户昵称
      */
-    private String activity;
+    @ApiModelProperty(value = "用户昵称")
+    private String nickname;
 
     /**
-     * 创建人id
+     * 用户头像
      */
-    @Column(name = "create_user_id")
-    private Long createUserId;
+    @ApiModelProperty(value = "用户头像")
+    private String avatar;
 
     /**
      * 创建时间
@@ -141,18 +158,6 @@ public class DailySalesSummaryOfProducts {
     @Column(name = "create_time")
     private Date createTime;
 
-    /**
-     * 统计时间
-     */
-    @Column(name = "statistical_date")
-    private Date statisticalDate;
-
-    /**
-     * 更新人id
-     */
-    @Column(name = "update_user_id")
-    private Long updateUserId;
-
     /**
      * 更新时间
      */
@@ -160,589 +165,30 @@ public class DailySalesSummaryOfProducts {
     private Date updateTime;
 
     /**
-     * 货号
-     */
-    @Column(name = "item_number")
-    private String itemNumber;
-
-    /**
-     * 品牌
-     */
-    @Column(name = "item_brand")
-    private String itemBrand;
-
-    /**
-     * 版本号
-     */
-    private Integer version;
-
-    /**
-     * 轮播图(白底图)
-     */
-    @Column(name = "slider_image")
-    private String sliderImage;
-
-    /**
-     * 展示图(详情图)
-     */
-    @Column(name = "flat_pattern")
-    private String flatPattern;
-
-    /**
-     * 获取商品id
-     *
-     * @return id - 商品id
-     */
-    public Long getId() {
-        return id;
-    }
-
-    /**
-     * 设置商品id
-     *
-     * @param id 商品id
-     */
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    /**
-     * 获取商户Id(0为总后台管理员创建,不为0的时候是商户后台创建)
-     *
-     * @return merId - 商户Id(0为总后台管理员创建,不为0的时候是商户后台创建)
-     */
-    public Byte getMerId() {
-        return merId;
-    }
-
-    /**
-     * 设置商户Id(0为总后台管理员创建,不为0的时候是商户后台创建)
-     *
-     * @param merId 商户Id(0为总后台管理员创建,不为0的时候是商户后台创建)
-     */
-    public void setMerId(Byte merId) {
-        this.merId = merId;
-    }
-
-    /**
-     * 获取商品图片(主图)
-     *
-     * @return image - 商品图片(主图)
-     */
-    public String getImage() {
-        return image;
-    }
-
-    /**
-     * 设置商品图片(主图)
-     *
-     * @param image 商品图片(主图)
-     */
-    public void setImage(String image) {
-        this.image = image;
-    }
-
-    /**
-     * 获取商品名称
-     *
-     * @return storeName - 商品名称
-     */
-    public String getStoreName() {
-        return storeName;
-    }
-
-    /**
-     * 设置商品名称
-     *
-     * @param storeName 商品名称
-     */
-    public void setStoreName(String storeName) {
-        this.storeName = storeName;
-    }
-
-    /**
-     * 获取商品简介
-     *
-     * @return storeInfo - 商品简介
-     */
-    public String getStoreInfo() {
-        return storeInfo;
-    }
-
-    /**
-     * 设置商品简介
-     *
-     * @param storeInfo 商品简介
-     */
-    public void setStoreInfo(String storeInfo) {
-        this.storeInfo = storeInfo;
-    }
-
-    /**
-     * 获取关键字(副标题)
-     *
-     * @return keyword - 关键字(副标题)
-     */
-    public String getKeyword() {
-        return keyword;
-    }
-
-    /**
-     * 设置关键字(副标题)
-     *
-     * @param keyword 关键字(副标题)
-     */
-    public void setKeyword(String keyword) {
-        this.keyword = keyword;
-    }
-
-    /**
-     * 获取分类id
-     *
-     * @return cateId - 分类id
-     */
-    public String getCateId() {
-        return cateId;
-    }
-
-    /**
-     * 设置分类id
-     *
-     * @param cateId 分类id
-     */
-    public void setCateId(String cateId) {
-        this.cateId = cateId;
-    }
-
-    /**
-     * 获取商品价格
-     *
-     * @return price - 商品价格
-     */
-    public BigDecimal getPrice() {
-        return price;
-    }
-
-    /**
-     * 设置商品价格
-     *
-     * @param price 商品价格
-     */
-    public void setPrice(BigDecimal price) {
-        this.price = price;
-    }
-
-    /**
-     * 获取会员价格
-     *
-     * @return vipPrice - 会员价格
-     */
-    public BigDecimal getVipPrice() {
-        return vipPrice;
-    }
-
-    /**
-     * 设置会员价格
-     *
-     * @param vipPrice 会员价格
-     */
-    public void setVipPrice(BigDecimal vipPrice) {
-        this.vipPrice = vipPrice;
-    }
-
-    /**
-     * 获取市场价
-     *
-     * @return otPrice - 市场价
-     */
-    public BigDecimal getOtPrice() {
-        return otPrice;
-    }
-
-    /**
-     * 设置市场价
-     *
-     * @param otPrice 市场价
-     */
-    public void setOtPrice(BigDecimal otPrice) {
-        this.otPrice = otPrice;
-    }
-
-    /**
-     * 获取邮费
-     *
-     * @return postage - 邮费
-     */
-    public BigDecimal getPostage() {
-        return postage;
-    }
-
-    /**
-     * 设置邮费
-     *
-     * @param postage 邮费
-     */
-    public void setPostage(BigDecimal postage) {
-        this.postage = postage;
-    }
-
-    /**
-     * 获取单位名
-     *
-     * @return unitName - 单位名
-     */
-    public String getUnitName() {
-        return unitName;
-    }
-
-    /**
-     * 设置单位名
-     *
-     * @param unitName 单位名
-     */
-    public void setUnitName(String unitName) {
-        this.unitName = unitName;
-    }
-
-    /**
-     * 获取每日销量快照
-     *
-     * @return sales - 每日销量快照
-     */
-    public Integer getSales() {
-        return sales;
-    }
-
-    /**
-     * 设置每日销量快照
-     *
-     * @param sales 每日销量快照
-     */
-    public void setSales(Integer sales) {
-        this.sales = sales;
-    }
-
-    /**
-     * 获取每日销量增量
-     *
-     * @return daySales - 每日销量增量
-     */
-    public Integer getDaySales() {
-        return daySales;
-    }
-
-    /**
-     * 设置每日销量增量
-     *
-     * @param daySales 每日销量增量
-     */
-    public void setDaySales(Integer daySales) {
-        this.daySales = daySales;
-    }
-
-    /**
-     * 获取每日库存快照
-     *
-     * @return stock - 每日库存快照
-     */
-    public Integer getStock() {
-        return stock;
-    }
-
-    /**
-     * 设置每日库存快照
-     *
-     * @param stock 每日库存快照
-     */
-    public void setStock(Integer stock) {
-        this.stock = stock;
-    }
-
-    /**
-     * 获取每日库存增量
-     *
-     * @return dayStock - 每日库存增量
-     */
-    public Integer getDayStock() {
-        return dayStock;
-    }
-
-    /**
-     * 设置每日库存增量
-     *
-     * @param dayStock 每日库存增量
-     */
-    public void setDayStock(Integer dayStock) {
-        this.dayStock = dayStock;
-    }
-
-    /**
-     * 获取每日虚拟销量快照
-     *
-     * @return ficti - 每日虚拟销量快照
-     */
-    public Integer getFicti() {
-        return ficti;
-    }
-
-    /**
-     * 设置每日虚拟销量快照
-     *
-     * @param ficti 每日虚拟销量快照
-     */
-    public void setFicti(Integer ficti) {
-        this.ficti = ficti;
-    }
-
-    /**
-     * 获取每日虚拟销量增量
-     *
-     * @return dayFicti - 每日虚拟销量增量
-     */
-    public Integer getDayFicti() {
-        return dayFicti;
-    }
-
-    /**
-     * 设置每日虚拟销量增量
-     *
-     * @param dayFicti 每日虚拟销量增量
-     */
-    public void setDayFicti(Integer dayFicti) {
-        this.dayFicti = dayFicti;
-    }
-
-    /**
-     * 获取主图视频链接
-     *
-     * @return videoLink - 主图视频链接
-     */
-    public String getVideoLink() {
-        return videoLink;
-    }
-
-    /**
-     * 设置主图视频链接
-     *
-     * @param videoLink 主图视频链接
-     */
-    public void setVideoLink(String videoLink) {
-        this.videoLink = videoLink;
-    }
-
-    /**
-     * 获取规格 0单 1多
-     *
-     * @return specType - 规格 0单 1多
-     */
-    public Boolean getSpecType() {
-        return specType;
-    }
-
-    /**
-     * 设置规格 0单 1多
-     *
-     * @param specType 规格 0单 1多
-     */
-    public void setSpecType(Boolean specType) {
-        this.specType = specType;
-    }
-
-    /**
-     * 获取活动显示排序0=默认, 1=秒杀,2=砍价,3=拼团
-     *
-     * @return activity - 活动显示排序0=默认, 1=秒杀,2=砍价,3=拼团
-     */
-    public String getActivity() {
-        return activity;
-    }
-
-    /**
-     * 设置活动显示排序0=默认, 1=秒杀,2=砍价,3=拼团
-     *
-     * @param activity 活动显示排序0=默认, 1=秒杀,2=砍价,3=拼团
-     */
-    public void setActivity(String activity) {
-        this.activity = activity;
-    }
-
-    /**
-     * 获取创建人id
-     *
-     * @return createUserId - 创建人id
-     */
-    public Long getCreateUserId() {
-        return createUserId;
-    }
-
-    /**
-     * 设置创建人id
-     *
-     * @param createUserId 创建人id
-     */
-    public void setCreateUserId(Long createUserId) {
-        this.createUserId = createUserId;
-    }
-
-    /**
-     * 获取创建时间
-     *
-     * @return createTime - 创建时间
-     */
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    /**
-     * 设置创建时间
-     *
-     * @param createTime 创建时间
-     */
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    /**
-     * 获取统计时间
-     *
-     * @return statisticalDate - 统计时间
-     */
-    public Date getStatisticalDate() {
-        return statisticalDate;
-    }
-
-    /**
-     * 设置统计时间
-     *
-     * @param statisticalDate 统计时间
-     */
-    public void setStatisticalDate(Date statisticalDate) {
-        this.statisticalDate = statisticalDate;
-    }
-
-    /**
-     * 获取更新人id
-     *
-     * @return updateUserId - 更新人id
-     */
-    public Long getUpdateUserId() {
-        return updateUserId;
-    }
-
-    /**
-     * 设置更新人id
-     *
-     * @param updateUserId 更新人id
-     */
-    public void setUpdateUserId(Long updateUserId) {
-        this.updateUserId = updateUserId;
-    }
-
-    /**
-     * 获取更新时间
-     *
-     * @return updateTime - 更新时间
-     */
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    /**
-     * 设置更新时间
-     *
-     * @param updateTime 更新时间
-     */
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    /**
-     * 获取货号
-     *
-     * @return itemNumber - 货号
-     */
-    public String getItemNumber() {
-        return itemNumber;
-    }
-
-    /**
-     * 设置货号
-     *
-     * @param itemNumber 货号
-     */
-    public void setItemNumber(String itemNumber) {
-        this.itemNumber = itemNumber;
-    }
-
-    /**
-     * 获取品牌
-     *
-     * @return itemBrand - 品牌
-     */
-    public String getItemBrand() {
-        return itemBrand;
-    }
-
-    /**
-     * 设置品牌
-     *
-     * @param itemBrand 品牌
+     * 创建人id
      */
-    public void setItemBrand(String itemBrand) {
-        this.itemBrand = itemBrand;
-    }
+    @Column(name = "create_user_id")
+    private Long createUserId;
 
     /**
-     * 获取版本号
-     *
-     * @return version - 版本号
+     * 更新人id
      */
-    public Integer getVersion() {
-        return version;
-    }
+    @Column(name = "update_user_id")
+    private Long updateUserId;
 
     /**
-     * 设置版本号
-     *
-     * @param version 版本号
+     * 是否删除
      */
-    public void setVersion(Integer version) {
-        this.version = version;
-    }
+    @Column(name = "is_delete")
+    private Integer isDelete;
 
-    /**
-     * 获取轮播图(白底图)
-     *
-     * @return sliderImage - 轮播图(白底图)
-     */
-    public String getSliderImage() {
-        return sliderImage;
-    }
 
-    /**
-     * 设置轮播图(白底图)
-     *
-     * @param sliderImage 轮播图(白底图)
-     */
-    public void setSliderImage(String sliderImage) {
-        this.sliderImage = sliderImage;
-    }
+    @ApiModelProperty(value = "订单状态")
+    @Column(name = "order_status")
+    private Integer orderStatus;
 
-    /**
-     * 获取展示图(详情图)
-     *
-     * @return flatPattern - 展示图(详情图)
-     */
-    public String getFlatPattern() {
-        return flatPattern;
-    }
 
-    /**
-     * 设置展示图(详情图)
-     *
-     * @param flatPattern 展示图(详情图)
-     */
-    public void setFlatPattern(String flatPattern) {
-        this.flatPattern = flatPattern;
-    }
+    @ApiModelProperty(value = "拼团汇总编码")
+    @Column(name = "sps_code")
+    private String spsCode;
 }

+ 12 - 1
mall-service/src/main/java/com/txz/mall/service/DailySalesSummaryOfProductsService.java

@@ -1,11 +1,22 @@
 package com.txz.mall.service;
 import com.txz.mall.model.DailySalesSummaryOfProducts;
 import com.txz.mall.core.Service;
+import com.txz.mall.model.StorePink;
+import org.springframework.beans.BeanUtils;
 
 
 /**
- * Created by CodeGenerator on 2025/10/20.
+ * Created by CodeGenerator on 2025/10/21.
  */
 public interface DailySalesSummaryOfProductsService extends Service<DailySalesSummaryOfProducts> {
 
+
+   void saveDailySalesSummaryOfProducts(StorePink storePink);
+
+
+   void updateDailySalesSummaryOfProducts(String orderNo,StorePink storePink);
+
+
+   void dailyDataCleaning();
+
 }

+ 4 - 4
mall-service/src/main/java/com/txz/mall/service/StoreOrderService.java

@@ -125,7 +125,7 @@ public interface StoreOrderService extends Service<StoreOrder> {
      *
      * @param id 订单编号
      */
-    void close(Long id);
+    void close(String orderNo);
 
 
     /**
@@ -137,9 +137,9 @@ public interface StoreOrderService extends Service<StoreOrder> {
     /**
      * 订单取消
      *
-     * @param id 订单编号
+     * @param orderNo 订单编号
      */
-    void cancel(Long id);
+    void cancel(String orderNo);
 
 
     void orderTimeoutAutomaticCancel();
@@ -157,7 +157,7 @@ public interface StoreOrderService extends Service<StoreOrder> {
     /**
      * 订单状态机
      */
-    void updateOrderStatus(Long id, Integer status);
+    void updateOrderStatus(String orderNo, Integer status);
 
 
 

+ 2 - 2
mall-service/src/main/java/com/txz/mall/service/StorePinkService.java

@@ -27,7 +27,7 @@ public interface StorePinkService extends Service<StorePink> {
     /**
      * 拼团成功
      */
-    void pinkSuccess(Long id, StoreOrder storeOrder);
+    void pinkSuccess(String orderNo, StoreOrder storeOrder);
 
     /**
      * 天选之子
@@ -36,7 +36,7 @@ public interface StorePinkService extends Service<StorePink> {
      */
   //  void theSelection(String orderId);
 
-    void theSelection(Long spsId, Date date);
+    void theSelection(String spsCode, Date date);
     /**
      * 已存在拼团列表
      */

+ 1 - 1
mall-service/src/main/java/com/txz/mall/service/StorePinkSummaryService.java

@@ -10,7 +10,7 @@ public interface StorePinkSummaryService extends Service<StorePinkSummary> {
 
 
 
-    Boolean maintainQuantityStatusOfTheStorePinkSummary(Long id);
+    Boolean maintainQuantityStatusOfTheStorePinkSummary(String  spsCode);
 
     Boolean maintainOrderNoSetOfTheStorePinkSummary(String spsCode,String orderNo);
 

+ 43 - 1
mall-service/src/main/java/com/txz/mall/service/impl/DailySalesSummaryOfProductsServiceImpl.java

@@ -1,17 +1,24 @@
 package com.txz.mall.service.impl;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import com.txz.mall.dao.DailySalesSummaryOfProductsMapper;
 import com.txz.mall.model.DailySalesSummaryOfProducts;
+import com.txz.mall.model.StorePink;
 import com.txz.mall.service.DailySalesSummaryOfProductsService;
 import com.txz.mall.core.AbstractService;
+import org.apache.commons.lang.time.DateUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import tk.mybatis.mapper.entity.Condition;
 
 import javax.annotation.Resource;
+import java.util.Date;
 
 
 /**
- * Created by CodeGenerator on 2025/10/20.
+ * Created by CodeGenerator on 2025/10/21.
  */
 @Service
 @Transactional
@@ -19,4 +26,39 @@ public class DailySalesSummaryOfProductsServiceImpl extends AbstractService<Dail
     @Resource
     private DailySalesSummaryOfProductsMapper mDailySalesSummaryOfProductsMapper;
 
+
+    @Override
+    public void saveDailySalesSummaryOfProducts(StorePink storePink) {
+        //每日统计表数据维护
+        DailySalesSummaryOfProducts dailySalesSummaryOfProducts = new DailySalesSummaryOfProducts();
+        BeanUtils.copyProperties(storePink,dailySalesSummaryOfProducts);
+        int insert = mDailySalesSummaryOfProductsMapper.insert(dailySalesSummaryOfProducts);
+
+    }
+
+    @Override
+    public void updateDailySalesSummaryOfProducts(String orderNo, StorePink storePink) {
+
+        DailySalesSummaryOfProducts dailySalesSummaryOfProducts = new DailySalesSummaryOfProducts();
+        BeanUtils.copyProperties(storePink,dailySalesSummaryOfProducts);
+        Condition updateCondition = new Condition(DailySalesSummaryOfProducts.class);
+        updateCondition.createCriteria().andEqualTo("orderId",orderNo);
+        int i = mDailySalesSummaryOfProductsMapper.updateByConditionSelective(dailySalesSummaryOfProducts,updateCondition);
+    }
+
+
+    /**
+     * 保留近3个月的数据
+     */
+    @Override
+    public void dailyDataCleaning() {
+
+        Date date = new Date();
+        DateTime dateTime = DateUtil.offsetDay(date, -30);
+        Condition deleteConditon = new Condition(DailySalesSummaryOfProducts.class);
+        deleteConditon.createCriteria().andLessThanOrEqualTo("createTime",dateTime);
+        int i = mDailySalesSummaryOfProductsMapper.deleteByCondition(deleteConditon);
+
+
+    }
 }

+ 173 - 82
mall-service/src/main/java/com/txz/mall/service/impl/StoreOrderServiceImpl.java

@@ -3,6 +3,7 @@ package com.txz.mall.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.lang.Snowflake;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -65,6 +66,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.txz.mall.util.OrderUtils.getDateTime;
+import static org.springframework.data.jpa.domain.AbstractPersistable_.id;
 
 
 /**
@@ -179,6 +181,9 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     //        storeOrder.setPinkId(storePink.getId());
     //        update(storeOrder);
     //    }
+
+    @Resource
+    private DailySalesSummaryOfProductsService dailySalesSummaryOfProductsService;
     @Override
     public void goOpen(String orderId) {
         StoreOrder storeOrder = findBy("orderId", orderId);
@@ -188,6 +193,8 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         }
         UserDTO user = userDubboServiceClient.getUser(storeOrder.getUid());
         StorePink storePink = new StorePink();
+        long storePinkId = IdUtil.getSnowflake(1, 3).nextId();
+        storePink.setId(storePinkId);
         if (!ObjectUtils.isEmpty(user)) {
             storePink.setAvatar(user.getHeadPic());
             storePink.setNickname(user.getName());
@@ -203,11 +210,12 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         storePink.setPid(storeCombination.getProductId());
         storePink.setPeople(storeCombination.getPeople());
         storePink.setPrice(storeCombination.getPrice());
-        Date date = new Date();
+        Date date = storeOrder.getCreateTime();
         Integer effectiveTime = storeCombination.getEffectiveTime();
         storePink.setAddTime(date);
         storePink.setStopTime(DateUtils.addMinutes(date, effectiveTime));
         storePink.setKId(0);
+        storePink.setLId(0);
         storePink.setUid(storeOrder.getUid());
         storePink.setIsRefund(0);
         storePink.setStatus(1);
@@ -215,7 +223,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 
         // 插入拼团汇总表
         StorePinkSummary storePinkSummary = new StorePinkSummary();
-        long storePinkSummaryId = IdUtil.getSnowflake(1, 1).nextId();
+        long storePinkSummaryId = IdUtil.getSnowflake(1, 2).nextId();
         storePinkSummary.setId(storePinkSummaryId);
         storePinkSummary.setTotalPrice(storeOrder.getTotalPrice());
         storePinkSummary.setCid(storeCombination.getId());
@@ -245,12 +253,15 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         // 插入拼团详情表
         storePink.setSpsId(storePinkSummary.getId());
         storePink.setSpsCode(storePinkSummary.getCode());
+        EasyToUseUtil.appCreateAssignment(date, storePink);
         storePinkService.save(storePink);
 
+        //插入每日统计表
+        dailySalesSummaryOfProductsService.saveDailySalesSummaryOfProducts(storePink);
+
         // 如果是开团,需要更新订单数据
         storeOrder.setPinkId(storePink.getId());
 
-
         Example exampleStoreOrder = new Example(StoreOrder.class);
         exampleStoreOrder.createCriteria().andEqualTo("orderId", orderId);
         storeOrder.setOrderId(null);
@@ -370,6 +381,8 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         StorePink storePink = new StorePink();
         BeanUtils.copyProperties(teamPink, storePink);
         storePink.setId(null);
+        long l = IdUtil.getSnowflake(1, 3).nextId();
+        storePink.setId(l);
         storePink.setSpsId(dto.getSpsId());
         storePink.setOrderId(dto.getOrderId());
         storePink.setOrderIdKey(dto.getOrderIdKey());
@@ -388,15 +401,21 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 
         storePink.setCreateTime(date);
         storePinkService.save(storePink);
-
-        Boolean b = storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary(teamPink.getSpsId());
+        //插入每日统计表s
+        dailySalesSummaryOfProductsService.saveDailySalesSummaryOfProducts(storePink);
+        //**分库整改
+        Boolean b1 = storePinkSummaryService.maintainOrderNoSetOfTheStorePinkSummary(teamPink.getSpsCode(), dto.getOrderId());
+        Boolean b = storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary(teamPink.getSpsCode());
 
         StoreOrder storeOrder = new StoreOrder();
-        storeOrder.setId(dto.getOrderIdKey());
-
+       // storeOrder.setId(dto.getOrderIdKey());
         // 需要更新订单数据
         storeOrder.setPinkId(storePink.getId());
-        update(storeOrder);
+        Condition storeOrderCondition = new Condition(StoreOrder.class);
+        storeOrderCondition.createCriteria().andEqualTo("orderId",dto.getOrderId());
+        storeOrderMapper.updateByConditionSelective(storeOrder,storeOrderCondition);
+        //**分库整改
+       // update(storeOrder);
         //        if(!b){
         //            throw new ServiceException("拼团超员请选择新的拼团");
         //        }
@@ -436,15 +455,32 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
             throw new ServiceException(I18nUtil.get("there.is.no.group.to.join.temporarily"));
         }
 
+        List<String> orderNoSetListStr = pinkSummaryList.stream().map(StorePinkSummary::getOrderNoSet).filter(orderNoSet ->!ObjectUtils.isEmpty(orderNoSet)).collect(Collectors.toList());
+
+        List<String> allOrderNo = new ArrayList<>();
+        if(!ObjectUtils.isEmpty(orderNoSetListStr)){
+            for (String s : orderNoSetListStr) {
+                List<String> orderNoSet = JSONObject.parseArray(s, String.class);
+                allOrderNo.addAll(orderNoSet);
+            }
+        }
+        log.info("allOrderNo:" + JSONObject.toJSONString(allOrderNo));
+        if(ObjectUtils.isEmpty(allOrderNo)){
+            throw new ServiceException(I18nUtil.get("cid.store.pink.summary.order.no.set.not.exist")+dto.getCid());
+        }
+
         List<Long> storePinkSummaryId = pinkSummaryList.stream().map(StorePinkSummary::getId).collect(Collectors.toList());
         log.info("storePinkSummaryId:" + storePinkSummaryId.toString());
         Condition pinkCondition = new Condition(StorePink.class);
         Example.Criteria pinkCriteria = pinkCondition.createCriteria();
         pinkCriteria.andEqualTo("isDelete", 0);
-        pinkCriteria.andEqualTo("cid", dto.getCid());
+        //这个条件应该是没啥用的,因为下面已经有spsId了
+       // pinkCriteria.andEqualTo("cid", dto.getCid());
         List<Integer> orderStatusList = CollUtil.newArrayList(PinkOrderStatusEnum.GROUP_ORDER_TO_PAY.getKey(), PinkOrderStatusEnum.GROUP_ORDER_PAID.getKey());
+        pinkCriteria.andIn("orderId", allOrderNo);
         pinkCriteria.andIn("orderStatus", orderStatusList);
-        pinkCriteria.andIn("spsId", storePinkSummaryId);
+        //**分库整改
+       // pinkCriteria.andIn("spsId", storePinkSummaryId);
         List<StorePink> pinkList = storePinkService.findByCondition(pinkCondition);
         log.info("pinkList:" + pinkList.toString());
 
@@ -610,7 +646,8 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
             Example exampleStorePink = new Example(StorePink.class);
             exampleStorePink.createCriteria().andEqualTo("orderId", storeOrder.getOrderId());
             storePinkMapper.updateByConditionSelective(storePinkForUpdate, exampleStorePink);
-
+            //维护每日统计表
+            dailySalesSummaryOfProductsService.updateDailySalesSummaryOfProducts(storeOrder.getOrderId(),storePinkForUpdate);
             noticeService.addOrderNotice(NoticeEnum.ORDER_SHIPPED_SUCCESS, storeOrder.getOrderId(), storeOrder.getUid());
         }
 
@@ -1342,13 +1379,19 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         Condition condition = new Condition(StoreOrder.class);
         Example.Criteria criteria = condition.createCriteria();
         criteria.andEqualTo("isDelete", 0);
-        condition.setOrderByClause("create_time DESC");
         criteria.andEqualTo("uid", dto.getUserId());
+       // criteria.andBetween("createTime",)
+        criteria.andGreaterThanOrEqualTo("createTime",dto.getStartDate());
+        criteria.andLessThanOrEqualTo("createTime",dto.getEndDate());
+
+        condition.setOrderByClause("create_time DESC");
 
         Condition pinkCondition = new Condition(StorePink.class);
         Example.Criteria pinkCriteria = pinkCondition.createCriteria();
         pinkCriteria.andEqualTo("isDelete", 0);
         pinkCriteria.andEqualTo("uid", dto.getUserId());
+        pinkCriteria.andGreaterThanOrEqualTo("createTime",dto.getStartDate());
+        pinkCriteria.andLessThanOrEqualTo("createTime",dto.getEndDate());
 
         List<StorePink> pinkList = new ArrayList<>();
 
@@ -1371,7 +1414,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 pinkCriteria.andIn("orderStatus", Arrays.asList(PinkOrderStatusEnum.GROUP_ORDER_PAID.getKey()));
                 pinkList = storePinkService.findByCondition(pinkCondition);
                 if (CollUtil.isNotEmpty(pinkList)) {
-                    criteria.andIn("id", pinkList.stream().map(StorePink::getOrderIdKey).collect(Collectors.toList()));
+                    criteria.andIn("orderId", pinkList.stream().map(StorePink::getOrderId).collect(Collectors.toList()));
                     list = findByCondition(condition);
                 }
                 break;
@@ -1381,7 +1424,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 //   pinkCriteria.andIn("orderStatus", Arrays.asList(3));
                 pinkList = storePinkService.findByCondition(pinkCondition);
                 if (CollUtil.isNotEmpty(pinkList)) {
-                    criteria.andIn("id", pinkList.stream().map(StorePink::getOrderIdKey).collect(Collectors.toList()));
+                    criteria.andIn("orderId", pinkList.stream().map(StorePink::getOrderId).collect(Collectors.toList()));
                     list = findByCondition(condition);
                 }
                 break;
@@ -1390,7 +1433,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 pinkCriteria.andIn("orderStatus", Arrays.asList(PinkOrderStatusEnum.GROUP_ORDER_TO_SHIP.getKey(), PinkOrderStatusEnum.GROUP_ORDER_TO_RECEIVE.getKey(), PinkOrderStatusEnum.GROUP_ORDER_COMPLETED.getKey()));
                 pinkList = storePinkService.findByCondition(pinkCondition);
                 if (CollUtil.isNotEmpty(pinkList)) {
-                    criteria.andIn("id", pinkList.stream().map(StorePink::getOrderIdKey).collect(Collectors.toList()));
+                    criteria.andIn("orderId", pinkList.stream().map(StorePink::getOrderId).collect(Collectors.toList()));
                     list = findByCondition(condition);
                 }
                 break;
@@ -1406,12 +1449,12 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
             Condition infoCondition = new Condition(StoreOrderInfo.class);
             Example.Criteria infoCriteria = infoCondition.createCriteria();
             infoCriteria.andEqualTo("isDelete", 0);
-            infoCriteria.andIn("orderId", list.stream().map(StoreOrder::getId).collect(Collectors.toList()));
+            infoCriteria.andIn("orderNo", list.stream().map(StoreOrder::getOrderId).collect(Collectors.toList()));
             infoArrayList = storeOrderInfoService.findByCondition(infoCondition);
 
             Condition statusCondition = new Condition(StoreOrderStatus.class);
             Example.Criteria statusCriteria = statusCondition.createCriteria();
-            statusCriteria.andIn("oid", list.stream().map(StoreOrder::getId).collect(Collectors.toList()));
+            statusCriteria.andIn("orderId", list.stream().map(StoreOrder::getOrderId).collect(Collectors.toList()));
             statusList = storeOrderStatusService.findByCondition(statusCondition);
 
             Condition addressCondition = new Condition(UserAddress.class);
@@ -1817,9 +1860,9 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
             if (!result1.getCode().equals("200")) {
                 throw new ServiceException(I18nUtil.get("payment.failed") + result1.getMessage());
             }
-            updateOrderStatus(storeOrder.getId(), pinkOrderStatusEnum.getKey());
+            updateOrderStatus(storeOrder.getOrderId(), pinkOrderStatusEnum.getKey());
             log.info("pinkSuccess storeOrder1" + storeOrder);
-            storePinkService.pinkSuccess(storeOrder.getPinkId(), storeOrder);
+            storePinkService.pinkSuccess(storeOrder.getOrderId(), storeOrder);
             log.info("pinkSuccess storeOrder2" + storeOrder);
             // goOpen(dto.getOrderId());
         }
@@ -1837,9 +1880,9 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
             if (!result1.getCode().equals("200")) {
                 throw new ServiceException(I18nUtil.get("payment.failed") + result1.getMessage());
             }
-            updateOrderStatus(storeOrder.getId(), pinkOrderStatusEnum.getKey());
+            updateOrderStatus(storeOrder.getOrderId(), pinkOrderStatusEnum.getKey());
             log.info("storePinkService.pinkSuccess1 :" + storeOrder);
-            storePinkService.pinkSuccess(storeOrder.getPinkId(), storeOrder);
+            storePinkService.pinkSuccess(storeOrder.getOrderId(), storeOrder);
             log.info("storePinkService.pinkSuccess2 :" + storeOrder);
             // goPink(dto);
         }
@@ -1905,7 +1948,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         if (!equals) {
             throw new ServiceException(I18nUtil.get("refund.failed.please.initiate.again"));
         }
-        updateOrderStatus(storeOrder.getId(), pinkOrderStatusEnum.getKey());
+        updateOrderStatus(storeOrder.getOrderId(), pinkOrderStatusEnum.getKey());
         // 订单状态回退
         // 拼团状态回退
 
@@ -1915,7 +1958,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         storePinkForUpdate.setOrderStatus(pinkOrderStatusEnum.getKey());
         storePinkService.update(storePinkForUpdate);
         // 拼团汇总数量维护以及锁单标识维护
-        Boolean b = storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary(storePink.getSpsId());
+        Boolean b = storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary(storePink.getSpsCode());
         // 拼团商品数量以及m_store_combination
         storeCombinationService.operationStock(storePink.getCid(), storePink.getTotalNum(), "add");
         // 拼团商品规格扣库存
@@ -1930,7 +1973,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 
     //    关闭指系统层面的自动结束  如活动时间超时或者拼团超时由定时任务触发  不暴露给客户端
     @Override
-    public void close(Long id) {
+    public void close(String orderNo) {
 
 
         // PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_FAIL, null);
@@ -1940,9 +1983,9 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 
         try {
 
-            StoreOrder storeOrder = findById(id);
+            StoreOrder storeOrder = findBy("orderId",orderNo);
             if (ObjectUtils.isEmpty(storeOrder)) {
-                throw new ServiceException("订单不存在id:" + id);
+                throw new ServiceException(I18nUtil.get("order.is.empty.orderid") + orderNo);
             }
 
             if (PinkOrderStatusEnum.GROUP_ORDER_TO_PAY.getKey().equals(storeOrder.getStatus())) {
@@ -1954,20 +1997,26 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                     throw new ServiceException(I18nUtil.get("current.status.does.not.support.cancellation"));
                 }
                 // 订单状态回退
-                updateOrderStatus(storeOrder.getId(), pinkOrderStatusEnum.getKey());
+                updateOrderStatus(storeOrder.getOrderId(), pinkOrderStatusEnum.getKey());
 
                 // 拼团状态回退
-                StorePink storePink = storePinkService.findById(storeOrder.getPinkId());
+                StorePink storePink = storePinkService.findBy("orderId",orderNo);
                 if (ObjectUtils.isEmpty(storePink)) {
-                    throw new ServiceException(I18nUtil.get("group.buying.information.does.not.exist.when.canceling.the.order.id") + storeOrder.getPinkId());
+                    throw new ServiceException(I18nUtil.get("group.buying.information.does.not.exist.when.canceling.the.order.id") + orderNo);
                 }
                 StorePink storePinkForUpdate = new StorePink();
-                storePinkForUpdate.setId(storeOrder.getPinkId());
+               // storePinkForUpdate.setId(storeOrder.getPinkId());
                 storePinkForUpdate.setStatus(StorePinkStatusEnum.LOTTERY_FAILED.getKey());
                 storePinkForUpdate.setOrderStatus(pinkOrderStatusEnum.getKey());
-                storePinkService.update(storePinkForUpdate);
+                Condition condition = new Condition(StorePink.class);
+                condition.createCriteria().andEqualTo("orderId",orderNo);
+                storePinkMapper.updateByConditionSelective(storePinkForUpdate,condition);
+                //维护每日统计表
+                dailySalesSummaryOfProductsService.updateDailySalesSummaryOfProducts(orderNo,storePinkForUpdate);
+                //**分库整改
+                //storePinkService.update(storePinkForUpdate);
                 // 拼团汇总数量维护以及锁单标识维护
-                Boolean b = storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary(storePink.getSpsId());
+                Boolean b = storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary(storePink.getSpsCode());
                 // 拼团商品数量以及m_store_combination
                 storeCombinationService.operationStock(storePink.getCid(), storePink.getTotalNum(), "add");
                 // 拼团商品规格扣库存
@@ -1985,10 +2034,10 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 
                 // 订单状态回退
                 // 拼团状态回退
-                StorePink storePink = storePinkService.findById(storeOrder.getPinkId());
+                StorePink storePink = storePinkService.findBy("orderId",orderNo);
 
                 if (ObjectUtils.isEmpty(storePink)) {
-                    throw new ServiceException(I18nUtil.get("group.buying.information.does.not.exist.when.initiating.active.refund.id") + storeOrder.getPinkId());
+                    throw new ServiceException(I18nUtil.get("group.buying.information.does.not.exist.when.initiating.active.refund.id") + orderNo);
                 }
 
                 Date date = new Date();
@@ -2006,15 +2055,20 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                     throw new ServiceException(I18nUtil.get("refund.failed.please.initiate.again.orderid") + storeOrder.getOrderId());
                 }
 
-                updateOrderStatus(storeOrder.getId(), pinkOrderStatusEnum.getKey());
+                updateOrderStatus(storeOrder.getOrderId(), pinkOrderStatusEnum.getKey());
 
                 StorePink storePinkForUpdate = new StorePink();
-                storePinkForUpdate.setId(storeOrder.getPinkId());
+                //storePinkForUpdate.setId(storeOrder.getPinkId());
                 storePinkForUpdate.setStatus(StorePinkStatusEnum.LOTTERY_FAILED.getKey());   // 定时任务触发的拼团失败导致的订单退款需要设置这个状态为拼团失败状态
                 storePinkForUpdate.setOrderStatus(pinkOrderStatusEnum.getKey());
-                storePinkService.update(storePinkForUpdate);
+                Condition condition = new Condition(StorePink.class);
+                condition.createCriteria().andEqualTo("orderId",orderNo);
+                storePinkMapper.updateByConditionSelective(storePinkForUpdate,condition);
+                //维护每日统计表
+                dailySalesSummaryOfProductsService.updateDailySalesSummaryOfProducts(orderNo,storePinkForUpdate);
+                //storePinkService.update(storePinkForUpdate);
                 // 拼团汇总数量维护以及锁单标识维护
-                Boolean b = storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary(storePink.getSpsId());
+                Boolean b = storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary(storePink.getSpsCode());
                 // 拼团商品数量以及m_store_combination
                 storeCombinationService.operationStock(storePink.getCid(), storePink.getTotalNum(), "add");
                 // 拼团商品规格扣库存
@@ -2024,10 +2078,10 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 noticeService.addOrderNotice(NoticeEnum.ORDER_GROUP_BUY_FAIL, storeOrder.getOrderId(), storeOrder.getUid());
 
             } else {
-                throw new ServiceException(I18nUtil.get("current.status.does.not.support.refund.cancellationid") + id);
+                throw new ServiceException(I18nUtil.get("current.status.does.not.support.refund.cancellationid") + orderNo);
             }
         } catch (Exception e) {
-            log.error(I18nUtil.get("scheduled.task.failed.to.close.the.order.order.id") + id, e);
+            log.error(I18nUtil.get("scheduled.task.failed.to.close.the.order.order.id") + orderNo, e);
         }
 
         // 如果是已支付状态状态推到拼团失败退款状态
@@ -2047,7 +2101,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     public void scheduledTaskStorePinkSummaryClose() {
 
         Date date = new Date();
-        PageHelper.startPage(1, 10);
+        PageHelper.startPage(1, 50);
         Condition pinkSummaryCondition = new Condition(StorePinkSummary.class);
         Example.Criteria pinkSummaryCriteria = pinkSummaryCondition.createCriteria();
         pinkSummaryCriteria.andEqualTo("isDelete", 0);
@@ -2059,34 +2113,45 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 
 
         if (!CollectionUtils.isEmpty(byCondition)) {
-            List<Long> storePinkSummaryidList = byCondition.stream().map(StorePinkSummary::getId).collect(Collectors.toList());
-
-            Condition condition = new Condition(StorePink.class);
-            Example.Criteria criteria = condition.createCriteria();
-            criteria.andIn("spsId", storePinkSummaryidList);
+           // List<Long> storePinkSummaryidList = byCondition.stream().map(StorePinkSummary::getId).collect(Collectors.toList());
+            List<String> getOrderNoSetList = byCondition.stream().map(StorePinkSummary::getOrderNoSet).filter(a -> !ObjectUtils.isEmpty(a)).collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(getOrderNoSetList)) {
+                for (String s : getOrderNoSetList) {
+                    List<String> strings = JSONObject.parseArray(s, String.class);
+                    if(!CollectionUtils.isEmpty(strings)) {
+                        Condition condition = new Condition(StorePink.class);
+                        Example.Criteria criteria = condition.createCriteria();
+                        criteria.andIn("orderId", strings);
+
+                        criteria.andEqualTo("isDelete", 0);
+                        // 找出拼团待支付 和 拼团已支付的数据进行 关闭
+                        List<Integer> statusList = CollUtil.newArrayList(
+                                PinkOrderStatusEnum.GROUP_ORDER_TO_PAY.getKey()
+                                , PinkOrderStatusEnum.GROUP_ORDER_PAID.getKey()
+                        );
+                        criteria.andIn("orderStatus", statusList);
+
+                        List<StorePink> storePinkListForUpdate = storePinkService.findByCondition(condition);
+                        if (!CollectionUtils.isEmpty(storePinkListForUpdate)) {
+                            storePinkListForUpdate.forEach(a ->
+                                    close(a.getOrderId())
+                            );
+                        }
+                    }
+                }
 
-            criteria.andEqualTo("isDelete", 0);
-            // 找出拼团待支付 和 拼团已支付的数据进行 关闭
-            List<Integer> statusList = CollUtil.newArrayList(
-                    PinkOrderStatusEnum.GROUP_ORDER_TO_PAY.getKey()
-                    , PinkOrderStatusEnum.GROUP_ORDER_PAID.getKey()
-            );
-            criteria.andIn("orderStatus", statusList);
-
-            List<StorePink> storePinkListForUpdate = storePinkService.findByCondition(condition);
-            if (!CollectionUtils.isEmpty(storePinkListForUpdate)) {
-                storePinkListForUpdate.forEach(a ->
-                        close(a.getOrderIdKey())
-                );
             }
         }
 
 
     }
 
+    @Resource
+    private StorePinkMapper storePinkMapper;
+
     @Override
-    public void cancel(Long id) {
-        StoreOrder storeOrder = findById(id);
+    public void cancel(String orderNo) {
+        StoreOrder storeOrder = findBy("orderId",orderNo);
         if (ObjectUtils.isEmpty(storeOrder)) {
             throw new ServiceException(I18nUtil.get("order.does.not.exist.when.canceling.the.order.id") + id);
         }
@@ -2097,22 +2162,30 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         }
 
         // 订单状态回退
-        updateOrderStatus(storeOrder.getId(), pinkOrderStatusEnum.getKey());
+        updateOrderStatus(storeOrder.getOrderId(), pinkOrderStatusEnum.getKey());
 
 
         // 拼团状态回退
-        StorePink storePink = storePinkService.findById(storeOrder.getPinkId());
+        StorePink storePink = storePinkService.findBy("orderId",storeOrder.getOrderId());
         if (ObjectUtils.isEmpty(storePink)) {
-            throw new ServiceException(I18nUtil.get("group.buying.information.does.not.exist.when.canceling.the.order.id") + storeOrder.getPinkId());
+            throw new ServiceException(I18nUtil.get("group.buying.information.does.not.exist.when.canceling.the.order.id") + storeOrder.getOrderId());
         }
         StorePink storePinkForUpdate = new StorePink();
-        storePinkForUpdate.setId(storeOrder.getPinkId());
+      //  storePinkForUpdate.setId(storeOrder.getPinkId());
         storePinkForUpdate.setOrderStatus(pinkOrderStatusEnum.getKey());
-        storePinkService.update(storePinkForUpdate);
+
+        Condition storePinkCondition = new Condition(StorePink.class);
+        storePinkCondition.createCriteria().andEqualTo("orderId",storeOrder.getOrderId());
+        storePinkMapper.updateByConditionSelective(storePinkForUpdate,storePinkCondition);
+
+        //维护每日统计
+        dailySalesSummaryOfProductsService.updateDailySalesSummaryOfProducts(storeOrder.getOrderId(),storePinkForUpdate);
+
+       // storePinkService.update(storePinkForUpdate);
 
         // 拼团汇总数量维护以及锁单标识维护
 
-        Boolean b = storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary(storePink.getSpsId());
+        Boolean b = storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary(storePink.getSpsCode());
 
         // 拼团商品数量以及m_store_combination
 
@@ -2157,7 +2230,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         if (!org.springframework.util.CollectionUtils.isEmpty(byCondition)) {
             try {
                 for (StoreOrder storeOrder : byCondition) {
-                    cancel(storeOrder.getId());
+                    cancel(storeOrder.getOrderId());
                 }
             } catch (Exception e) {
                 log.error(I18nUtil.get("failed.to.process.ordertimeoutautomaticcancel"), e);
@@ -2282,19 +2355,31 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         }
     }
 
-    @Resource
-    private StorePinkMapper storePinkMapper;
+
 
 
     @Override
-    public void updateOrderStatus(Long id, Integer status) {
-        StoreOrder storeOrder = findById(id);
-        storeOrder.setStatus(status);
+    public void updateOrderStatus(String orderNo, Integer status) {
+        //**分库整改
+        if(ObjectUtils.isEmpty(orderNo)){
+            throw new ServiceException(I18nUtil.get("order.code.is.empty")+orderNo);
+        }
+        StoreOrder storeOrderOri = findBy("orderId", orderNo);
+        if(ObjectUtils.isEmpty(storeOrderOri)){
+           throw new ServiceException(I18nUtil.get("order.does.not.exist")+orderNo);
+        }
+        StoreOrder storeOrderForUpdate = new StoreOrder();
+        storeOrderForUpdate.setStatus(status);
         if (PinkOrderStatusEnum.GROUP_ORDER_PAID.getKey().equals(status)) {
             Date date = new Date();
-            storeOrder.setPayTime(date);
+            storeOrderForUpdate.setPayTime(date);
         }
-        update(storeOrder);
+        Condition storeOrderCondition = new Condition(StoreOrder.class);
+        storeOrderCondition.createCriteria().andEqualTo("orderId",orderNo);
+
+        int i = storeOrderMapper.updateByConditionSelective(storeOrderForUpdate, storeOrderCondition);
+
+
 
         //        StorePink storePink = new StorePink();
         //        Example example = new Example(StorePink.class);
@@ -2398,11 +2483,11 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 
         Condition conditionStorePink = new Condition(StorePink.class);
         Example.Criteria criteriaStorePink = conditionStorePink.createCriteria();
-        criteriaStorePink.andEqualTo("orderIdKey", storeOrderOri.getId());
+        criteriaStorePink.andEqualTo("orderId", storeOrderOri.getOrderId());
         criteriaStorePink.andEqualTo("isDelete", 0);
         List<StorePink> storePinks = storePinkMapper.selectByCondition(conditionStorePink);
         if (CollectionUtils.isEmpty(storePinks)) {
-            throw new ServiceException(I18nUtil.get("group.buying.data.does.not.exist") + storeOrder.getId());
+            throw new ServiceException(I18nUtil.get("group.buying.data.does.not.exist") + storeOrderOri.getOrderId());
         }
         StorePink storePink = storePinks.get(0);
         Integer winner = 1;
@@ -2411,14 +2496,19 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         if (equals1 && equals) {
             PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrderOri, OrderEventsEnum.GROUP_PURCHASE_WIN, null);
             if (ObjectUtils.isEmpty(pinkOrderStatusEnum)) {
-                throw new ServiceException(I18nUtil.get("current.order.status.does.not.allow.progression.to.pending.shipment.orderid") + storeOrder.getId());
+                throw new ServiceException(I18nUtil.get("current.order.status.does.not.allow.progression.to.pending.shipment.orderid") + storeOrder.getOrderId());
             }
             storeOrder.setStatus(pinkOrderStatusEnum.getKey());
             StorePink storePinkForUpdate = new StorePink();
-            storePinkForUpdate.setId(storePink.getId());
+           // storePinkForUpdate.setId(storePink.getId());
             storePinkForUpdate.setOrderStatus(pinkOrderStatusEnum.getKey());
-
-            storePinkMapper.updateByPrimaryKeySelective(storePinkForUpdate);
+            Condition storePinkUpdateCondition = new Condition(StorePink.class);
+            storePinkUpdateCondition.createCriteria().andEqualTo("orderId",storePink.getOrderId());
+            //**分库整改
+            storePinkMapper.updateByConditionSelective(storePinkForUpdate,storePinkUpdateCondition);
+            //维护每日统计
+            dailySalesSummaryOfProductsService.updateDailySalesSummaryOfProducts(storePink.getOrderId(),storePinkForUpdate);
+           // storePinkMapper.updateByPrimaryKeySelective(storePinkForUpdate);
         }
 
 
@@ -2467,7 +2557,8 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                     Example exampleStorePink = new Example(StorePink.class);
                     exampleStorePink.createCriteria().andEqualTo("orderId", storeOrder.getOrderId());
                     storePinkMapper.updateByConditionSelective(storePinkForUpdate, exampleStorePink);
-
+                    //维护每日统计表
+                    dailySalesSummaryOfProductsService.updateDailySalesSummaryOfProducts(storeOrder.getOrderId(),storePinkForUpdate);
                 }
             }
 

+ 94 - 32
mall-service/src/main/java/com/txz/mall/service/impl/StorePinkServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.github.pagehelper.PageHelper;
@@ -14,6 +15,7 @@ import com.txz.cif.param.OrderParam;
 import com.txz.mall.constants.Constants;
 import com.txz.mall.core.AbstractService;
 import com.txz.mall.core.ServiceException;
+import com.txz.mall.dao.DailySalesSummaryOfProductsMapper;
 import com.txz.mall.dao.StoreCombinationMapper;
 import com.txz.mall.dao.StorePinkMapper;
 import com.txz.mall.dao.StoreProductMapper;
@@ -83,26 +85,36 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
 
     @Resource
     private StorePinkSummaryService storePinkSummaryService;
+    @Resource
+    private DailySalesSummaryOfProductsService dailySalesSummaryOfProductsService;
 
     @Override
     @Transactional
-    public void pinkSuccess(Long id, StoreOrder storeOrder) {
+    public void pinkSuccess(String orderNo, StoreOrder storeOrder) {
 
 
         // 现在这个方法每次支付的时候都会执行一次
         Date date = new Date();
-        if (ObjectUtil.isNull(id)) {
+        if (ObjectUtil.isNull(orderNo)) {
             return;
         }
-        StorePink teamPink = findById(id);
-        List<StorePink> memberList = getListByCidAndKid(teamPink.getCid(), id);
+        StorePink teamPink = findBy("orderId",orderNo);
+        //下面这行好像没什么用
+      //  List<StorePink> memberList = getListByCidAndKid(teamPink.getCid(), id);
         StorePink storePink2 = new StorePink();
         storePink2.setId(teamPink.getId());
        // storePink2.setStatus(2);
        // storePink2.setStopTime(date);
         storePink2.setOrderStatus(PinkOrderStatusEnum.GROUP_ORDER_PAID.getKey());
         log.info("storePink2:"+storePink2);
-        update(storePink2);
+
+        Condition updateStorePinkCondition = new Condition(StorePink.class);
+        updateStorePinkCondition.createCriteria().andEqualTo("orderId",orderNo);
+        storePinkMapper.updateByConditionSelective(storePink2,updateStorePinkCondition);
+        dailySalesSummaryOfProductsService.updateDailySalesSummaryOfProducts(orderNo,storePink2);
+
+       //**分库整改
+       // update(storePink2);
 
         storeOrderStatusService.createLog(storeOrder.getId(), storeOrder.getOrderId(),Constants.ORDER_LOG_PAY_SUCCESS, "支付成功");
         noticeService.addOrderNotice(NoticeEnum.ORDER_GROUP_BUY_PAYMENT_SUCCESS,storeOrder.getOrderId(),storeOrder.getUid());
@@ -128,7 +140,7 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
         exampleStoreCombination.createCriteria().andEqualTo("productId", pid).andEqualTo("isDelete",0);
         storeCombinationMapper.updateByConditionSelective(storeCombinationUpdate,exampleStoreCombination);
 
-        memberList.add(teamPink);
+      //  memberList.add(teamPink);
 //        memberList.forEach(i -> {
 //            i.setStatus(2);
 //            i.setStopTime(date);
@@ -137,13 +149,13 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
 
         //理论上在支付环节调用的时候不会出现拼团人数校验异常,所以这块调用这个方法的目的在于维护成团状态。 如果支付环节抛出了
         //拼团校验异常则证明在 add时就有问题,没有挡住异常的拼团数据
-        log.info("storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary SpsId"+teamPink.getSpsId());
-        Boolean b = storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary(teamPink.getSpsId());
+        log.info("storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary SpsId"+teamPink.getSpsCode());
+        Boolean b = storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary(teamPink.getSpsCode());
         log.info("storePinkSummaryService.maintainQuantityStatusOfTheStorePinkSummary b"+b);
         if(b){
 
         // 算出天选  同时推进订单状态到 代发货状态/订单关闭状态/未中奖成员退款
-        theSelection(teamPink.getSpsId(),date);
+        theSelection(teamPink.getSpsCode(),date);
 
         }
     }
@@ -196,15 +208,33 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
     private StoreOrderStatusService storeOrderStatusService;
 
     @Override
-    public void theSelection(Long spsId,Date date) {
-        log.info("theSelection"+spsId);
+    public void theSelection(String spsCode,Date date) {
+        log.info("theSelection:"+spsCode);
         // 假设只有1个用户是天选
         long luckNum = 1;
 
+        StorePinkSummary storePinkSummary = storePinkSummaryService.findBy("code", spsCode);
+        //**分库整改
+        // StorePinkSummary storePinkSummary = storePinkSummaryService.findById(spsId);
+        if(ObjectUtils.isEmpty(storePinkSummary)){
+            throw new ServiceException(I18nUtil.get("no.group.buying.summary.records")+spsCode);
+        }
+
+        List<String> orderNoSetList = new ArrayList<>();
+        String orderNoSet = storePinkSummary.getOrderNoSet();
+        if(!ObjectUtils.isEmpty(orderNoSet)){
+             orderNoSetList = JSONObject.parseArray(orderNoSet, String.class);
+        }
+        if(ObjectUtils.isEmpty(orderNoSetList)){
+            throw new ServiceException(I18nUtil.get("store.pink.summary.order.no.set.not.exist")+spsCode);
+        }
+
         Condition condition = new Condition(StorePink.class);
         Example.Criteria criteria = condition.createCriteria();
         criteria.andEqualTo("isDelete", 0);
-        criteria.andEqualTo("spsId", spsId);
+        criteria.andIn("orderId",orderNoSetList);
+        //**分库整改
+       // criteria.andEqualTo("spsId", spsId);
         // 排除团长
 //        criteria.andEqualTo("kId", 1);
         // 支付成功的
@@ -212,18 +242,15 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
         List<StorePink> list = findByCondition(condition);
         if (CollUtil.isEmpty(list)) {
             String s = I18nUtil.get("no.group.buying.orders");
-            throw new ServiceException(s+spsId);
+            throw new ServiceException(s+spsCode);
         }
         long count = list.stream().filter(i -> i.getLId().equals(1)).count();
         if (count >= luckNum) {
-            throw new ServiceException(I18nUtil.get("already.have.a.chosen.one")+spsId);
+            throw new ServiceException(I18nUtil.get("already.have.a.chosen.one")+spsCode);
         }
 
 
-        StorePinkSummary storePinkSummary = storePinkSummaryService.findById(spsId);
-        if(ObjectUtils.isEmpty(storePinkSummary)){
-            throw new ServiceException(I18nUtil.get("no.group.buying.summary.records")+spsId);
-        }
+
 
 
         Map<Long, StorePink> idStorePinkMap = list.stream().collect(Collectors.toMap(StorePink::getId, a -> a, (b, c) -> c));
@@ -241,7 +268,9 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
         randomIds.forEach(i -> {
             StorePink luckPink = new StorePink();
             StorePink storePink = idStorePinkMap.get(i);
-            StoreOrder storeOrder = storeOrderService.findById(storePink.getOrderIdKey());
+            StoreOrder storeOrder = storeOrderService.findBy("orderId", storePink.getOrderId());
+            //**分库整改
+           // StoreOrder storeOrder = storeOrderService.findById(storePink.getOrderIdKey());
             luckPink.setId(i);
             luckPink.setLId(1);
 
@@ -250,15 +279,22 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
 
             PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_WIN, null);
             if(ObjectUtils.isEmpty(pinkOrderStatusEnum)){
-                throw new ServiceException(I18nUtil.get("current.order.status.does.not.allow.progression.to.pending.shipment.orderid")+storePink.getOrderIdKey());
+                throw new ServiceException(I18nUtil.get("current.order.status.does.not.allow.progression.to.pending.shipment.orderid")+storePink.getOrderId());
             }
             if(!ObjectUtils.isEmpty(storeOrder.getAddressId())) {
                 luckPink.setOrderStatus(PinkOrderStatusEnum.GROUP_ORDER_TO_SHIP.getKey());
-                storeOrderService.updateOrderStatus(storePink.getOrderIdKey(), pinkOrderStatusEnum.getKey());
+                storeOrderService.updateOrderStatus(storePink.getOrderId(), pinkOrderStatusEnum.getKey());
             }else{
                 noticeService.addOrderNotice(NoticeEnum.ORDER_PROVIDE_SHIPPING_ADDRESS,storeOrder.getOrderId(),storeOrder.getUid());
             }
-            update(luckPink);
+            //分库整改
+            Condition storePinkUpdateCondition = new Condition(StorePink.class);
+            storePinkUpdateCondition.createCriteria().andEqualTo("orderId",storePink.getOrderId());
+            int i1 = storePinkMapper.updateByConditionSelective(luckPink, storePinkUpdateCondition);
+            //维护每日统计表
+            dailySalesSummaryOfProductsService.updateDailySalesSummaryOfProducts(storePink.getOrderId(),luckPink);
+
+            // update(luckPink);
             //推进订单状态到待发货状态
 
             storeOrderStatusService.createLog(storeOrder.getId(), storeOrder.getOrderId(),Constants.ORDER_STATUS_PINK_SUCCESS_ORDER, "拼团成功");
@@ -282,10 +318,12 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
         //将所有参团成员的status设置为 已开奖
         list.forEach(a->{
             log.info("forEach a:"+JSONObject.toJSONString(a));
-            StoreOrder storeOrder = storeOrderService.findById(a.getOrderIdKey());
+            StoreOrder storeOrder = storeOrderService.findBy("orderId",a.getOrderId());
+            //**分库整改
+           // StoreOrder storeOrder = storeOrderService.findById(a.getOrderIdKey());
             PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_NOT_WIN, null);
             if(ObjectUtils.isEmpty(pinkOrderStatusEnum)){
-                throw new ServiceException(I18nUtil.get("the.current.order.status.does.not.allow.advancement.to.the.closed.status.of.unwinning.orders.orderid")+a.getOrderIdKey());
+                throw new ServiceException(I18nUtil.get("the.current.order.status.does.not.allow.advancement.to.the.closed.status.of.unwinning.orders.orderid")+a.getOrderId());
             }
             // storePink2.setStopTime(date);
             StorePink unLuckPink = new StorePink();
@@ -293,12 +331,20 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
             unLuckPink.setStatus(StorePinkStatusEnum.RESULTS_ANNOUNCED.getKey());
             unLuckPink.setOrderStatus(pinkOrderStatusEnum.getKey());
             unLuckPink.setStopTime(date);
-            update(unLuckPink);
+            Condition storePinkConditionForUpdate = new Condition(StorePink.class);
+            storePinkConditionForUpdate.createCriteria().andEqualTo("orderId",a.getOrderId());
+            int i = storePinkMapper.updateByConditionSelective(unLuckPink, storePinkConditionForUpdate);
+            //维护每日统计表
+            dailySalesSummaryOfProductsService.updateDailySalesSummaryOfProducts(a.getOrderId(),unLuckPink);
+
+
+            //**分库整改
+            //update(unLuckPink);
 
             //推进订单状态到未中奖关闭状态
             log.info("storeOrderService.updateOrderStatus"+JSONObject.toJSONString(a));
 
-            storeOrderService.updateOrderStatus(a.getOrderIdKey(),pinkOrderStatusEnum.getKey());
+            storeOrderService.updateOrderStatus(a.getOrderId(),pinkOrderStatusEnum.getKey());
             storeOrderStatusService.createLog(storeOrder.getId(),storeOrder.getOrderId(),Constants.ORDER_STATUS_PINK_SUCCESS_ORDER, "拼团成功");
             noticeService.addOrderNotice(NoticeEnum.ORDER_GROUP_BUY_SUCCESS_LOSE,storeOrder.getOrderId(),storeOrder.getUid());
 
@@ -340,8 +386,6 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
             throw new ServiceException(I18nUtil.get("refund.failed.for.users.who.did.not.win.the.group.buying.message")+result.getMessage());
         }
 
-
-
     }
 
 
@@ -366,13 +410,28 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
 
             List<Long> spsIdList = byCondition.stream().map(StorePinkSummary::getId).collect(Collectors.toList());
 
+            List<String> orderNoSetList = byCondition.stream().map(StorePinkSummary::getOrderNoSet).filter(a->!ObjectUtils.isEmpty(a)).collect(Collectors.toList());
+            Set<String> orderNoSetForSearch = new HashSet<>();
+            log.info("ongoingList.orderNoSetList:"+orderNoSetList);
+            if(!org.springframework.util.CollectionUtils.isEmpty(orderNoSetList)){
+                for (String s : orderNoSetList) {
+                    List<String> strings = JSONObject.parseArray(s, String.class);
+                    orderNoSetForSearch.addAll(strings);
+                }
+            }
+            log.info("ongoingList.orderNoSetForSearch:"+orderNoSetForSearch);
             Condition condition = new Condition(StorePink.class);
             Example.Criteria criteria = condition.createCriteria();
             criteria.andEqualTo("isDelete", 0);
-            criteria.andEqualTo("cid", storePink.getCid());
+           // criteria.andEqualTo("cid", storePink.getCid());
             criteria.andEqualTo("orderStatus",PinkOrderStatusEnum.GROUP_ORDER_PAID.getKey());
             //  criteria.andEqualTo("kid", 0);
-            criteria.andIn("spsId", spsIdList);
+
+            if(!org.springframework.util.CollectionUtils.isEmpty(orderNoSetForSearch)){
+                criteria.andIn("orderId",orderNoSetForSearch);
+            }else{
+                criteria.andIn("spsId", spsIdList);
+            }
             List<StorePink> pinkList = findByCondition(condition);
 
             Map<Long, List<StorePink>> collect = pinkList.stream().collect(Collectors.groupingBy(StorePink::getSpsId));
@@ -397,12 +456,15 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
         return list;
     }
 
+    @Resource
+    private DailySalesSummaryOfProductsMapper dailySalesSummaryOfProductsMapper;
+
     @Override
     public List<ProductCarouselVO> carousel(Long productId) {
-        List<ProductCarouselDTO> pinks = storePinkMapper.pinkByProductId(productId);
+        List<ProductCarouselDTO> pinks = dailySalesSummaryOfProductsMapper.pinkByProductId(productId);
         // 兜底
         if (CollectionUtil.isEmpty(pinks)) {
-            pinks = storePinkMapper.pinkByProductId(null);
+            pinks = dailySalesSummaryOfProductsMapper.pinkByProductId(null);
         }
         // 还是空那也没办法了
         if (CollectionUtil.isEmpty(pinks)) {

+ 25 - 15
mall-service/src/main/java/com/txz/mall/service/impl/StorePinkSummaryServiceImpl.java

@@ -38,25 +38,32 @@ public class StorePinkSummaryServiceImpl extends AbstractService<StorePinkSummar
     private StorePinkMapper mStorePinkMapper;
 
     @Override
-    public Boolean maintainQuantityStatusOfTheStorePinkSummary(Long id) {
+    public Boolean maintainQuantityStatusOfTheStorePinkSummary(String spsCode) {
 
 
-        Condition condition = new Condition(StorePink.class);
 
-        Example.Criteria criteria = condition.createCriteria();
-
-        criteria.andEqualTo("spsId", id);
-        criteria.andEqualTo("isDelete",0);
-        List<StorePink> storePinks = mStorePinkMapper.selectByCondition(condition);
         int sumUnpayAndPaid = 0;
 
 
-
-        StorePinkSummary storePinkSummary = mStorePinkSummaryMapper.selectByPrimaryKey(id);
+        StorePinkSummary storePinkSummary = this.findBy("code", spsCode);
+       //**分库整改
+       // StorePinkSummary storePinkSummary = mStorePinkSummaryMapper.selectByPrimaryKey(id);
         if(ObjectUtils.isEmpty(storePinkSummary)){
-            throw new ServiceException(I18nUtil.get("group.buying.summary.does.not.exist.id")+id);
+            throw new ServiceException(I18nUtil.get("group.buying.summary.does.not.exist.id")+spsCode);
+        }
+        List<StorePink> storePinks = null;
+        String orderNoSet = storePinkSummary.getOrderNoSet();
+        if(!ObjectUtils.isEmpty(orderNoSet)){
+            List<String> orderNoSetList = JSONObject.parseArray(orderNoSet, String.class);
+
+            Condition condition = new Condition(StorePink.class);
+            Example.Criteria criteria = condition.createCriteria();
+            criteria.andIn("orderId", orderNoSetList);
+            criteria.andEqualTo("isDelete",0);
+            storePinks = mStorePinkMapper.selectByCondition(condition);
         }
 
+
         Integer status = storePinkSummary.getStatus();
         boolean successFlag = false;
 
@@ -97,14 +104,14 @@ public class StorePinkSummaryServiceImpl extends AbstractService<StorePinkSummar
 
 
             if(stipulatedNumber < sumUnpayAndPaid){
-                throw new ServiceException(I18nUtil.get("group.buying.overcrowded.id")+id);
+                throw new ServiceException(I18nUtil.get("group.buying.overcrowded.id")+spsCode);
             }
 
 
             //成团标识只有成团后才返回true
 
             StorePinkSummary storePinkSummaryForUpdate = new StorePinkSummary();
-            storePinkSummaryForUpdate.setId(id);
+          //  storePinkSummaryForUpdate.setId(id);
             storePinkSummaryForUpdate.setPeopleCount(sumUnpayAndPaid);
 
 
@@ -144,8 +151,11 @@ public class StorePinkSummaryServiceImpl extends AbstractService<StorePinkSummar
            }
 
 
-
-            mStorePinkSummaryMapper.updateByPrimaryKeySelective(storePinkSummaryForUpdate);
+           //**分库整改
+            Condition conditionStorePinkSummaryForUpdate = new Condition(StorePinkSummary.class);
+            conditionStorePinkSummaryForUpdate.createCriteria().andEqualTo("code",spsCode);
+            mStorePinkSummaryMapper.updateByConditionSelective(storePinkSummaryForUpdate, conditionStorePinkSummaryForUpdate);
+            //  mStorePinkSummaryMapper.updateByPrimaryKeySelective(storePinkSummaryForUpdate);
         }
 
 
@@ -157,7 +167,7 @@ public class StorePinkSummaryServiceImpl extends AbstractService<StorePinkSummar
     public Boolean maintainOrderNoSetOfTheStorePinkSummary(String spsCode, String orderNo) {
 
         Condition storePinkSummarycCondition = new Condition(StorePinkSummary.class);
-        storePinkSummarycCondition.createCriteria().andEqualTo("spsCode",spsCode);
+        storePinkSummarycCondition.createCriteria().andEqualTo("code",spsCode);
         List<StorePinkSummary> storePinkSummaries = mStorePinkSummaryMapper.selectByCondition(storePinkSummarycCondition);
         if(CollectionUtils.isEmpty(storePinkSummaries)){
             throw new ServiceException(I18nUtil.get("group.buying.summary.does.not.exist.id")+spsCode);

+ 22 - 5
mall-service/src/main/java/com/txz/mall/task/GeneralJob.java

@@ -1,18 +1,18 @@
 package com.txz.mall.task;
 
-import cn.hutool.core.collection.CollUtil;
+
+import com.txz.mall.service.DailySalesSummaryOfProductsService;
 import com.txz.mall.service.StoreFlashActivityService;
 import com.txz.mall.service.StoreOrderService;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.extern.slf4j.Slf4j;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
 import org.springframework.stereotype.Component;
-import tk.mybatis.mapper.entity.Condition;
+
 
 import javax.annotation.Resource;
-import java.util.List;
+
 
 /**
  * 常规job
@@ -37,6 +37,9 @@ public class GeneralJob {
     @Resource
     private StoreFlashActivityService storeFlashActivityService;
 
+    @Resource
+    private DailySalesSummaryOfProductsService dailySalesSummaryOfProductsService;
+
     /**
      * 1、简单任务示例(Bean模式)
      */
@@ -97,4 +100,18 @@ public class GeneralJob {
     }
 
 
+    @XxlJob("dailySalesSummaryOfProductsDailyDataCleaning")
+    public ReturnT<String> dailySalesSummaryOfProductsDailyDataCleaning(String param) throws Exception {
+        try {
+            log.info("dailySalesSummaryOfProductsDailyDataCleaning start");
+            dailySalesSummaryOfProductsService.dailyDataCleaning();
+            log.info("dailySalesSummaryOfProductsDailyDataCleaning end");
+        } catch (Exception e) {
+            log.error("dailySalesSummaryOfProductsDailyDataCleaning:e{}", e);
+            return ReturnT.FAIL;
+        }
+        return ReturnT.SUCCESS;
+    }
+
+
 }

+ 131 - 130
mall-service/src/main/java/com/txz/mall/web/mng/DailySalesSummaryOfProductsController.java

@@ -1,130 +1,131 @@
-package com.txz.mall.web.mng;
-import com.txz.mall.core.Result;
-import com.txz.mall.model.DailySalesSummaryOfProducts;
-import com.txz.mall.service.DailySalesSummaryOfProductsService;
-
-import com.txz.mall.core.ResultCode;
-
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import tk.mybatis.mapper.entity.Condition;
-import tk.mybatis.mapper.entity.Example.Criteria;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.validation.annotation.Validated;
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.Date;
-
-/**
-* Created by CodeGenerator on 2025/10/20.
-*/
-@Api(tags = "[后台]dailySalesSummaryOfProducts管理")
-@RestController
-@RequestMapping("/daily/sales/summary/of/products")
-public class DailySalesSummaryOfProductsController {
-
-	private static Logger log = LoggerFactory.getLogger(DailySalesSummaryOfProductsController.class);
-
-    @Resource
-    private DailySalesSummaryOfProductsService dailySalesSummaryOfProductsService;
-
-    @PostMapping("/add")
-	@ApiOperation(value = "dailySalesSummaryOfProducts新增")
-	public Result add(@RequestBody DailySalesSummaryOfProducts dailySalesSummaryOfProducts) {
-    	if(dailySalesSummaryOfProducts == null){
-    		return Result.fail(ResultCode.OBJECT_IS_NULL);
-    	}
-    	try {
-    		dailySalesSummaryOfProducts.setCreateTime(new Date());
-//            dailySalesSummaryOfProducts.setCreateUserId(userId);
-    		dailySalesSummaryOfProductsService.save(dailySalesSummaryOfProducts);
-		} catch (Exception e) {
-			log.error("新增对象操作异常e:{}",e);
-			return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
-		}
-        return Result.success();
-    }
-
-    @DeleteMapping("/delete")
-	@ApiOperation(value = "dailySalesSummaryOfProducts删除")
-	public Result delete(@RequestParam Long id) {
-    	if(id == null){
-    		return Result.fail(ResultCode.ID_IS_NULL);
-    	}
-    	try {
-            DailySalesSummaryOfProducts dailySalesSummaryOfProducts = new DailySalesSummaryOfProducts();
-			dailySalesSummaryOfProducts.setId(id);
-			dailySalesSummaryOfProducts.setIsDelete(1);
-			dailySalesSummaryOfProductsService.update(dailySalesSummaryOfProducts);
-		} catch (Exception e) {
-			log.error("删除对象操作异常e:{}",e);
-			return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
-		}
-        return Result.success();
-    }
-
-    @PutMapping("/update")
-	@ApiOperation(value = "dailySalesSummaryOfProducts更新")
-	public Result update(@RequestBody DailySalesSummaryOfProducts dailySalesSummaryOfProducts) {
-    	if(dailySalesSummaryOfProducts == null){
-    		return Result.fail(ResultCode.OBJECT_IS_NULL);
-    	}
-    	if(dailySalesSummaryOfProducts.getId() == null){
-    		return Result.fail(ResultCode.ID_IS_NULL);
-    	}
-    	try {
-    		dailySalesSummaryOfProducts.setUpdateTime(new Date());
-//            dailySalesSummaryOfProducts.setUpdateUserId(userId);
-    		dailySalesSummaryOfProductsService.update(dailySalesSummaryOfProducts);
-		} catch (Exception e) {
-			log.error("更新对象操作异常e:{}",e);
-			return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
-		}
-        return Result.success();
-    }
-
-    @GetMapping("/detail")
-	@ApiOperation(value = "dailySalesSummaryOfProducts获取详情")
-	public Result<DailySalesSummaryOfProducts> detail(@RequestParam Long id) {
-    	if(id == null){
-    		return Result.fail(ResultCode.ID_IS_NULL);
-    	}
-    	DailySalesSummaryOfProducts dailySalesSummaryOfProducts = null;
-    	try {
-    		dailySalesSummaryOfProducts = dailySalesSummaryOfProductsService.findById(id);
-		} catch (Exception e) {
-			log.error("查询对象操作异常e:{}",e);
-			return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
-		}
-        return Result.success(dailySalesSummaryOfProducts);
-    }
-
-    @PostMapping("/list")
-	@ApiOperation(value = "dailySalesSummaryOfProducts获取列表")
-	public Result<List<DailySalesSummaryOfProducts>> list(@Validated @RequestBody DailySalesSummaryOfProductsDTO dto) {
-        PageHelper.startPage(dto.getPage(), dto.getSize());
-
-        Condition condition = new Condition(DailySalesSummaryOfProducts.class);
-        Criteria criteria = condition.createCriteria();
-		criteria.andEqualTo("isDelete", 0);
-		condition.setOrderByClause("create_time DESC");
-		PageInfo pageInfo = null;
-		try {
-    		 List<DailySalesSummaryOfProducts> list = dailySalesSummaryOfProductsService.findByCondition(condition);
-    		 pageInfo = new PageInfo(list);
-		} catch (Exception e) {
-			log.error("查询对象操作异常e:{}",e);
-			return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
-		}
-        return Result.success(pageInfo);
-    }
-}
+//package com.txz.mall.web.mng;
+//import com.txz.mall.core.Result;
+//import com.txz.mall.dto.DailySalesSummaryOfProductsDTO;
+//import com.txz.mall.model.DailySalesSummaryOfProducts;
+//import com.txz.mall.service.DailySalesSummaryOfProductsService;
+//
+//import com.txz.mall.core.ResultCode;
+//
+//import com.github.pagehelper.PageHelper;
+//import com.github.pagehelper.PageInfo;
+//import org.springframework.web.bind.annotation.PostMapping;
+//import org.springframework.web.bind.annotation.RequestBody;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RequestParam;
+//import org.springframework.web.bind.annotation.RestController;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import io.swagger.annotations.Api;
+//import io.swagger.annotations.ApiOperation;
+//import tk.mybatis.mapper.entity.Condition;
+//import tk.mybatis.mapper.entity.Example.Criteria;
+//import org.springframework.web.bind.annotation.*;
+//import org.springframework.validation.annotation.Validated;
+//import javax.annotation.Resource;
+//import java.util.List;
+//import java.util.Date;
+//
+///**
+//* Created by CodeGenerator on 2025/10/21.
+//*/
+//@Api(tags = "[后台]dailySalesSummaryOfProducts管理")
+//@RestController
+//@RequestMapping("/daily/sales/summary/of/products")
+//public class DailySalesSummaryOfProductsController {
+//
+//	private static Logger log = LoggerFactory.getLogger(DailySalesSummaryOfProductsController.class);
+//
+//    @Resource
+//    private DailySalesSummaryOfProductsService dailySalesSummaryOfProductsService;
+//
+//    @PostMapping("/add")
+//	@ApiOperation(value = "dailySalesSummaryOfProducts新增")
+//	public Result add(@RequestBody DailySalesSummaryOfProducts dailySalesSummaryOfProducts) {
+//    	if(dailySalesSummaryOfProducts == null){
+//    		return Result.fail(ResultCode.OBJECT_IS_NULL);
+//    	}
+//    	try {
+//    		dailySalesSummaryOfProducts.setCreateTime(new Date());
+////            dailySalesSummaryOfProducts.setCreateUserId(userId);
+//    		dailySalesSummaryOfProductsService.save(dailySalesSummaryOfProducts);
+//		} catch (Exception e) {
+//			log.error("新增对象操作异常e:{}",e);
+//			return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+//		}
+//        return Result.success();
+//    }
+//
+//    @DeleteMapping("/delete")
+//	@ApiOperation(value = "dailySalesSummaryOfProducts删除")
+//	public Result delete(@RequestParam Long id) {
+//    	if(id == null){
+//    		return Result.fail(ResultCode.ID_IS_NULL);
+//    	}
+//    	try {
+//            DailySalesSummaryOfProducts dailySalesSummaryOfProducts = new DailySalesSummaryOfProducts();
+//			dailySalesSummaryOfProducts.setId(id);
+//			dailySalesSummaryOfProducts.setIsDelete(1);
+//			dailySalesSummaryOfProductsService.update(dailySalesSummaryOfProducts);
+//		} catch (Exception e) {
+//			log.error("删除对象操作异常e:{}",e);
+//			return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+//		}
+//        return Result.success();
+//    }
+//
+//    @PutMapping("/update")
+//	@ApiOperation(value = "dailySalesSummaryOfProducts更新")
+//	public Result update(@RequestBody DailySalesSummaryOfProducts dailySalesSummaryOfProducts) {
+//    	if(dailySalesSummaryOfProducts == null){
+//    		return Result.fail(ResultCode.OBJECT_IS_NULL);
+//    	}
+//    	if(dailySalesSummaryOfProducts.getId() == null){
+//    		return Result.fail(ResultCode.ID_IS_NULL);
+//    	}
+//    	try {
+//    		dailySalesSummaryOfProducts.setUpdateTime(new Date());
+////            dailySalesSummaryOfProducts.setUpdateUserId(userId);
+//    		dailySalesSummaryOfProductsService.update(dailySalesSummaryOfProducts);
+//		} catch (Exception e) {
+//			log.error("更新对象操作异常e:{}",e);
+//			return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+//		}
+//        return Result.success();
+//    }
+//
+//    @GetMapping("/detail")
+//	@ApiOperation(value = "dailySalesSummaryOfProducts获取详情")
+//	public Result<DailySalesSummaryOfProducts> detail(@RequestParam Long id) {
+//    	if(id == null){
+//    		return Result.fail(ResultCode.ID_IS_NULL);
+//    	}
+//    	DailySalesSummaryOfProducts dailySalesSummaryOfProducts = null;
+//    	try {
+//    		dailySalesSummaryOfProducts = dailySalesSummaryOfProductsService.findById(id);
+//		} catch (Exception e) {
+//			log.error("查询对象操作异常e:{}",e);
+//			return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+//		}
+//        return Result.success(dailySalesSummaryOfProducts);
+//    }
+//
+//    @PostMapping("/list")
+//	@ApiOperation(value = "dailySalesSummaryOfProducts获取列表")
+//	public Result<List<DailySalesSummaryOfProducts>> list(@Validated @RequestBody DailySalesSummaryOfProductsDTO dto) {
+//        PageHelper.startPage(dto.getPage(), dto.getSize());
+//
+//        Condition condition = new Condition(DailySalesSummaryOfProducts.class);
+//        Criteria criteria = condition.createCriteria();
+//		criteria.andEqualTo("isDelete", 0);
+//		condition.setOrderByClause("create_time DESC");
+//		PageInfo pageInfo = null;
+//		try {
+//    		 List<DailySalesSummaryOfProducts> list = dailySalesSummaryOfProductsService.findByCondition(condition);
+//    		 pageInfo = new PageInfo(list);
+//		} catch (Exception e) {
+//			log.error("查询对象操作异常e:{}",e);
+//			return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+//		}
+//        return Result.success(pageInfo);
+//    }
+//}

+ 8 - 1
mall-service/src/main/java/dto/StoreOrderAppDTO.java

@@ -10,7 +10,8 @@ import com.txz.mall.web.param.BasePageParam;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.io.Serializable;
+
+import java.util.Date;
 
 @Data
 public class StoreOrderAppDTO extends BasePageParam {
@@ -19,4 +20,10 @@ public class StoreOrderAppDTO extends BasePageParam {
     private Integer type;
 
     private Long userId;
+
+    @ApiModelProperty(value = "开始时间")
+    private Date startDate;
+
+    @ApiModelProperty(value = "结束时间")
+    private Date endDate;
 }

+ 3 - 1
mall-service/src/main/resources/i18n/messages_en_US.properties

@@ -169,4 +169,6 @@ method=method
 exception.summary=exception summary:
 yixiashixinzengshuju
 the.group.buying.summary.data.does.not.exist=the group buying summary data does not exist
-store.pink.summary.order.no.set.not.exist=store pink summary order no set not exist
+store.pink.summary.order.no.set.not.exist=store pink summary order no set not exist
+order.code.is.empty=order code is empty
+cid.store.pink.summary.order.no.set.not.exist=cid store pink summary order no set not exist 

+ 2 - 0
mall-service/src/main/resources/i18n/messages_zh_CN.properties

@@ -166,4 +166,6 @@ method=\u65B9\u6CD5
 exception.summary=\u5F02\u5E38\u6982\u8981:
 the.group.buying.summary.data.does.not.exist=\u62FC\u56E2\u6C47\u603B\u6570\u636E\u4E0D\u5B58\u5728
 store.pink.summary.order.no.set.not.exist=\u62FC\u56E2\u6C47\u603B\u8868\u65E0\u8BA2\u5355\u7F16\u7801\u96C6
+order.code.is.empty=\u8BA2\u5355\u7F16\u7801\u4E3A\u7A7A
+cid.store.pink.summary.order.no.set.not.exist=\u4F7F\u7528cid\u7684\u67E5\u8BE2pinksummary\u83B7\u53D6\u5230\u5230orderNoSet\u5168\u4E3A\u7A7A
 

+ 41 - 27
mall-service/src/main/resources/mapper/DailySalesSummaryOfProductsMapper.xml

@@ -6,35 +6,49 @@
       WARNING - @mbg.generated
     -->
     <id column="id" jdbcType="BIGINT" property="id" />
-    <result column="mer_id" jdbcType="TINYINT" property="merId" />
-    <result column="image" jdbcType="VARCHAR" property="image" />
-    <result column="store_name" jdbcType="VARCHAR" property="storeName" />
-    <result column="store_info" jdbcType="VARCHAR" property="storeInfo" />
-    <result column="keyword" jdbcType="VARCHAR" property="keyword" />
-    <result column="cate_id" jdbcType="VARCHAR" property="cateId" />
+    <result column="uid" jdbcType="BIGINT" property="uid" />
+    <result column="sps_id" jdbcType="BIGINT" property="spsId" />
+    <result column="order_id" jdbcType="VARCHAR" property="orderId" />
+    <result column="order_id_key" jdbcType="BIGINT" property="orderIdKey" />
+    <result column="total_num" jdbcType="INTEGER" property="totalNum" />
+    <result column="total_price" jdbcType="DECIMAL" property="totalPrice" />
+    <result column="cid" jdbcType="BIGINT" property="cid" />
+    <result column="pid" jdbcType="BIGINT" property="pid" />
+    <result column="people" jdbcType="INTEGER" property="people" />
     <result column="price" jdbcType="DECIMAL" property="price" />
-    <result column="vip_price" jdbcType="DECIMAL" property="vipPrice" />
-    <result column="ot_price" jdbcType="DECIMAL" property="otPrice" />
-    <result column="postage" jdbcType="DECIMAL" property="postage" />
-    <result column="unit_name" jdbcType="VARCHAR" property="unitName" />
-    <result column="sales" jdbcType="INTEGER" property="sales" />
-    <result column="day_sales" jdbcType="INTEGER" property="daySales" />
-    <result column="stock" jdbcType="INTEGER" property="stock" />
-    <result column="day_stock" jdbcType="INTEGER" property="dayStock" />
-    <result column="ficti" jdbcType="INTEGER" property="ficti" />
-    <result column="day_ficti" jdbcType="INTEGER" property="dayFicti" />
-    <result column="video_link" jdbcType="VARCHAR" property="videoLink" />
-    <result column="spec_type" jdbcType="BIT" property="specType" />
-    <result column="activity" jdbcType="VARCHAR" property="activity" />
-    <result column="create_user_id" jdbcType="BIGINT" property="createUserId" />
+    <result column="add_time" jdbcType="TIMESTAMP" property="addTime" />
+    <result column="stop_time" jdbcType="TIMESTAMP" property="stopTime" />
+    <result column="l_id" jdbcType="INTEGER" property="lId" />
+    <result column="k_id" jdbcType="INTEGER" property="kId" />
+    <result column="is_tpl" jdbcType="TINYINT" property="isTpl" />
+    <result column="is_refund" jdbcType="TINYINT" property="isRefund" />
+    <result column="status" jdbcType="TINYINT" property="status" />
+    <result column="order_status" jdbcType="TINYINT" property="orderStatus" />
+    <result column="is_virtual" jdbcType="BIT" property="isVirtual" />
+    <result column="nickname" jdbcType="VARCHAR" property="nickname" />
+    <result column="avatar" jdbcType="VARCHAR" property="avatar" />
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
-    <result column="statistical_date" jdbcType="DATE" property="statisticalDate" />
-    <result column="update_user_id" jdbcType="BIGINT" property="updateUserId" />
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
-    <result column="item_number" jdbcType="VARCHAR" property="itemNumber" />
-    <result column="item_brand" jdbcType="VARCHAR" property="itemBrand" />
-    <result column="version" jdbcType="INTEGER" property="version" />
-    <result column="slider_image" jdbcType="LONGVARCHAR" property="sliderImage" />
-    <result column="flat_pattern" jdbcType="LONGVARCHAR" property="flatPattern" />
+    <result column="create_user_id" jdbcType="BIGINT" property="createUserId" />
+    <result column="update_user_id" jdbcType="BIGINT" property="updateUserId" />
+    <result column="is_delete" jdbcType="TINYINT" property="isDelete" />
+    <result column="sps_code" jdbcType="VARCHAR" property="spsCode" />
   </resultMap>
+
+
+  <select id="getRankNew" resultType="map">
+
+    select pid as pid ,count(*) as num
+    from m_daily_sales_summary_of_products
+    where order_status in (3,4,5,6,7,8)
+    and pid in
+    <foreach collection='productSet' item='item' open='(' separator=',' close=')'>
+      #{item}
+    </foreach>
+    and create_time > #{date}
+    group by pid
+    ORDER BY num desc limit 20
+
+  </select>
+
 </mapper>

+ 1 - 1
mall-service/src/test/java/CodeGenerator.java

@@ -47,7 +47,7 @@ public class CodeGenerator {
 	public static void main(String[] args) {
 //		genCode("o_lottery","o_lottery_prize","o_lottery_record");
 		// genCode("输入表名","输入自定义Model名称");
-		genCode("m_create_sequence");
+		// genCode("m_daily_sales_summary_of_products");
 		//genCode("c_member_coupon");
 	}