Browse Source

合并代码

lyx 3 weeks ago
parent
commit
e705da1b9a
25 changed files with 551 additions and 103 deletions
  1. 3 1
      alien-entity/src/main/java/shop/alien/entity/store/LifeCollect.java
  2. 77 0
      alien-entity/src/main/java/shop/alien/entity/store/LifeCoupon.java
  3. 7 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeCouponVo.java
  4. 145 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreHotelGroupRoomInfo.java
  5. 5 0
      alien-entity/src/main/java/shop/alien/mapper/PlatformStoreCouponMapper.java
  6. 11 0
      alien-entity/src/main/java/shop/alien/mapper/StoreClockInMapper.java
  7. 127 11
      alien-store/src/main/java/shop/alien/store/controller/LifeCollectController.java
  8. 7 4
      alien-store/src/main/java/shop/alien/store/controller/LifeCouponController.java
  9. 3 3
      alien-store/src/main/java/shop/alien/store/controller/LifeGroupPackageController.java
  10. 11 9
      alien-store/src/main/java/shop/alien/store/controller/PlatformStoreCouponController.java
  11. 5 5
      alien-store/src/main/java/shop/alien/store/controller/UserStoreController.java
  12. 1 1
      alien-store/src/main/java/shop/alien/store/service/LifeCouponService.java
  13. 1 1
      alien-store/src/main/java/shop/alien/store/service/LifeGroupPackageService.java
  14. 1 1
      alien-store/src/main/java/shop/alien/store/service/LifeStoreService.java
  15. 60 9
      alien-store/src/main/java/shop/alien/store/service/LifeUserStoreService.java
  16. 3 5
      alien-store/src/main/java/shop/alien/store/service/PlatformStoreCouponService.java
  17. 4 1
      alien-store/src/main/java/shop/alien/store/service/StoreClockInService.java
  18. 14 13
      alien-store/src/main/java/shop/alien/store/service/impl/LifeCouponServiceImpl.java
  19. 8 0
      alien-store/src/main/java/shop/alien/store/service/impl/LifeDiscountCouponServiceImpl.java
  20. 0 2
      alien-store/src/main/java/shop/alien/store/service/impl/LifeDiscountCouponStoreFriendServiceImpl.java
  21. 12 4
      alien-store/src/main/java/shop/alien/store/service/impl/LifeGroupPackageServiceImpl.java
  22. 1 1
      alien-store/src/main/java/shop/alien/store/service/impl/LifeMessageServiceImpl.java
  23. 28 26
      alien-store/src/main/java/shop/alien/store/service/impl/PlatformStoreCouponServiceImpl.java
  24. 12 1
      alien-store/src/main/java/shop/alien/store/service/impl/StoreClockInServiceImpl.java
  25. 5 5
      alien-store/src/main/java/shop/alien/store/service/impl/StoreInfoServiceImpl.java

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

@@ -23,7 +23,9 @@ public class LifeCollect {
 
     private String userId;
 
-    private String goodsId;
+    @ApiModelProperty(value = "团购id")
+    @TableField("coupon_id")
+    private String couponId;
 
     private String businessId;
 

+ 77 - 0
alien-entity/src/main/java/shop/alien/entity/store/LifeCoupon.java

@@ -535,4 +535,81 @@ public class LifeCoupon {
     @ApiModelProperty(value = "有效期时间段")
     @TableField("validity_period")
     private String validityPeriod;
+
+    @ApiModelProperty(value = "是否可与其它优惠券叠加使用 0:否,1:是")
+    @TableField("stacking_type")
+    private String stackingType;
+
+    @ApiModelProperty(value = "全场通用 0:否,1:是")
+    @TableField("general_type")
+    private String generalType;
+
+    @ApiModelProperty(value = "单次可用数量")
+    @TableField("single_can_use")
+    private String singleCanUse;
+
+    @ApiModelProperty(value = "适用标识:1:适用范围,2:不适用范围")
+    @TableField("apply_type")
+    private String applyType;
+
+    @ApiModelProperty(value = "适用描述")
+    @TableField("apply_desc")
+    private String applyDesc;
+
+    @ApiModelProperty(value = "有效期类型,1:指定天数,2:指定时间段")
+    @TableField("expiration_type")
+    private String expirationType;
+
+    @ApiModelProperty(value = "不可用类型,1:全部日期,2:限制日期,3:自定义")
+    @TableField("unused_type")
+    private String unusedType;
+
+    // 房屋类型
+    @ApiModelProperty(value = "房屋类型")
+    @TableField("house_type")
+    private String houseType;
+
+    @ApiModelProperty(value = "房屋卧室")
+    @TableField("house_type_b")
+    private String houseTypeB;
+
+    @ApiModelProperty(value = "房屋客厅")
+    @TableField("house_type_l")
+    private String houseTypeL;
+
+    @ApiModelProperty(value = "房屋厨房")
+    @TableField("house_type_k")
+    private String houseTypeK;
+
+    @ApiModelProperty(value = "房屋卫生间")
+    @TableField("house_type_t")
+    private String houseTypeT;
+
+    @ApiModelProperty(value = "销售时间str")
+    @TableField("sale_time_str")
+    private String saleTimeStr;
+
+    @ApiModelProperty(value = "结束销售时间str")
+    @TableField("sale_time_end")
+    private String saleTimeEnd;
+
+    @ApiModelProperty(value = "标签日期不可用")
+    @TableField("unavai_lable_date")
+    private String unavaiLableDate;
+
+    @ApiModelProperty(value = "房间类型str")
+    @TableField("room_type_str")
+    private String roomTypeStr;
+
+    @ApiModelProperty(value = "时间范围")
+    @TableField("time_range")
+    private String timeRange;
+
+    @ApiModelProperty(value = "取消政策str")
+    @TableField("cancellation_policy_str")
+    private String cancellationPolicyStr;
+
+    @ApiModelProperty(value = "优惠卷有效期str")
+    @TableField("validity_periodyh_str")
+    private String validityPeriodyhStr;
 }

+ 7 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeCouponVo.java

@@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
 import shop.alien.entity.store.LifeCoupon;
 import shop.alien.entity.store.StoreGroupInfo;
 
+
 import java.util.Date;
 import java.util.List;
 
@@ -571,5 +572,11 @@ public class LifeCouponVo extends LifeCoupon {
     @ApiModelProperty(value = "团购子表")
     private List<StoreGroupInfo> storeGroupInfos;
 
+    @ApiModelProperty(value = "酒店团购子表")
+    private List<StoreHotelGroupRoomInfo> storeHotelGroupRoomInfos;
+
+    @ApiModelProperty(value = "是否收藏")
+    private String isCollect;
+
     private Integer count;
 }

+ 145 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreHotelGroupRoomInfo.java

@@ -0,0 +1,145 @@
+package shop.alien.entity.store.vo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 酒店团购子表
+ * </p>
+ *
+ * @author zhangchen
+ * @since 2025-07-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="StoreHotelGroupRoomInfo对象", description="酒店团购子表")
+public class StoreHotelGroupRoomInfo extends Model<StoreHotelGroupRoomInfo> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private String id;
+
+    @ApiModelProperty(value = "团购id")
+    @TableField("group_id")
+    private String groupId;
+
+    @ApiModelProperty(value = "面积")
+    @TableField("area")
+    private Double area;
+
+    @ApiModelProperty(value = "床尺寸code")
+    @TableField("bed_size_code")
+    private String bedSizeCode;
+
+    @ApiModelProperty(value = "床尺寸")
+    @TableField("bed_size")
+    private String bedSize;
+
+    @ApiModelProperty(value = "床数量")
+    @TableField("bed_num")
+    private Integer bedNum;
+
+    @ApiModelProperty(value = "窗:0:否,1:是")
+    @TableField("window_flag")
+    private Integer windowFlag;
+
+    @ApiModelProperty(value = "独立卫生间: 0:否,1:是")
+    @TableField("bathroom_flag")
+    private Integer bathroomFlag;
+
+    @ApiModelProperty(value = "wifi: 0:否,1:是")
+    @TableField("wifi_flag")
+    private Integer wifiFlag;
+
+    @ApiModelProperty(value = "早餐: 0:否,1:是")
+    @TableField("breakfast_flag")
+    private Integer breakfastFlag;
+
+    @ApiModelProperty(value = "起始楼层")
+    @TableField("floor_str")
+    private String floorStr;
+
+    @ApiModelProperty(value = "最低楼层")
+    @TableField("floor_end")
+    private String floorEnd;
+
+    @ApiModelProperty(value = "居住人数")
+    @TableField("residence_num")
+    private Integer residenceNum;
+
+    @ApiModelProperty(value = "吸烟:0:否,1:是")
+    @TableField("smoking_flag")
+    private Integer smokingFlag;
+
+    @ApiModelProperty(value = "删除状态")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    private Date createdTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField(value = "created_user_id", fill = FieldFill.INSERT)
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField(value = "updated_user_id", fill = FieldFill.INSERT_UPDATE)
+    private Integer updatedUserId;
+
+    @ApiModelProperty(value = "类别")
+    @TableField("category")
+    private String category;
+
+    @ApiModelProperty(value = "服务名称")
+    @TableField("service_name")
+    private String serviceName;
+
+    @ApiModelProperty(value = "数量")
+    @TableField("num")
+    private Integer num;
+
+    @ApiModelProperty(value = "分组名")
+    @TableField("group_name")
+    private String groupName;
+
+    @ApiModelProperty(value = "时长")
+    @TableField("duration")
+    private String duration;
+
+    @ApiModelProperty(value = "sonOrder")
+    @TableField("son_order")
+    private Integer sonOrder;
+
+    @ApiModelProperty(value = "fatherOrder")
+    @TableField("father_order")
+    private Integer fatherOrder;
+
+    @ApiModelProperty(value = "早餐说明")
+    @TableField("break_fast_str")
+    private String breakFastStr;
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

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

@@ -28,4 +28,9 @@ public interface PlatformStoreCouponMapper extends BaseMapper<LifeCoupon> {
             "${ew.customSqlSegment}")
     List<LifeCouponVo> getCouponList(@Param(Constants.WRAPPER) QueryWrapper<LifeCouponVo> wrapper);
 
+    @Select("select lc.*,si.store_name,si.store_tel phone\n" +
+            "from life_coupon lc \n" +
+            "left join store_info si on si.id = lc.store_id \n" +
+            "where lc.id = ${id}")
+    LifeCouponVo getCouponById(Integer id);
 }

+ 11 - 0
alien-entity/src/main/java/shop/alien/mapper/StoreClockInMapper.java

@@ -9,6 +9,9 @@ import org.apache.ibatis.annotations.Select;
 import shop.alien.entity.store.StoreClockIn;
 import shop.alien.entity.store.vo.StoreClockInVo;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 店铺打卡 Mapper 接口
@@ -38,4 +41,12 @@ public interface StoreClockInMapper extends BaseMapper<StoreClockIn> {
             "left join store_dictionary dict on dict.type_name = 'storeType' and store.store_type = dict.dict_id and dict.delete_flag = 0 " +
             "${ew.customSqlSegment} ")
     IPage<StoreClockInVo> getStoreClockInList(IPage<StoreClockIn> page, @Param(Constants.WRAPPER) QueryWrapper<StoreClockIn> queryWrapper);
+
+    /**
+     * 获取门店打卡次数
+     *
+     * @return list
+     */
+    @Select("SELECT store_id as storeId, count(store_id) as count FROM `store_clock_in` where delete_flag = 0 GROUP BY store_id ")
+    List<Map<Integer, Integer>> getStoreClockInCount();
 }

+ 127 - 11
alien-store/src/main/java/shop/alien/store/controller/LifeCollectController.java

@@ -13,17 +13,16 @@ import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
 import shop.alien.entity.second.SecondGoods;
 import shop.alien.entity.store.LifeCollect;
+import shop.alien.entity.store.LifeCoupon;
+import shop.alien.entity.store.StoreImg;
 import shop.alien.entity.store.vo.StoreInfoVo;
+import shop.alien.mapper.*;
 import shop.alien.mapper.second.SecondGoodsMapper;
 import shop.alien.store.config.GaoDeMapUtil;
-import shop.alien.mapper.LifeCollectMapper;
-import shop.alien.mapper.StoreInfoMapper;
 import shop.alien.util.common.ListToPage;
 
 import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -45,33 +44,92 @@ public class LifeCollectController {
 
     private final GaoDeMapUtil gaoDeMapUtil;
 
+    private final LifeCouponMapper lifeCouponMapper;
+
+    private final StoreEvaluationMapper storeEvaluationMapper;
+
+    private final LifeUserOrderMapper lifeUserOrderMapper;
+
+    private final StoreImgMapper storeImgMapper;
+
     @ApiOperation("收藏列表")
     @ApiOperationSupport(order = 1)
     @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "分页页数", dataType = "String", paramType = "query", required = true),
             @ApiImplicitParam(name = "size", value = "分页条数", dataType = "String", paramType = "query", required = true),
             @ApiImplicitParam(name = "userId", value = "用户id", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "jingdu", value = "jingdu", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "weidu", value = "weidu", dataType = "String", paramType = "query")})
+            @ApiImplicitParam(name = "weidu", value = "weidu", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "businessSection", value = "经营板块", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "keyword", value = "关键词", dataType = "String", paramType = "query")
+    })
     @GetMapping("selectCollectList")
     public R<IPage<StoreInfoVo>> selectCollectList(@RequestParam(defaultValue = "1") int page,
                                                    @RequestParam(defaultValue = "10") int size,
                                                    @RequestParam String userId,
                                                    @RequestParam String jingdu,
-                                                   @RequestParam String weidu) {
-        log.info("LifeCollectController.selectCollectList?userId={},page={},size={},jingdu={},weidu={}", userId, page, size, jingdu, weidu);
+                                                   @RequestParam String weidu,
+                                                   @RequestParam String businessSection,
+                                                   @RequestParam String keyword
+    ) {
+        log.info("LifeCollectController.selectCollectList?userId={},page={},size={},jingdu={},weidu={},businessSection={},keyword={}", userId, page, size, jingdu, weidu,businessSection,keyword);
         LambdaUpdateWrapper<LifeCollect> wrapper = new LambdaUpdateWrapper<>();
         wrapper.eq(LifeCollect::getUserId, userId);
-        wrapper.eq(LifeCollect::getDeleteFlag, 0).orderByDesc(LifeCollect::getCreatedTime);
+        wrapper.eq(LifeCollect::getDeleteFlag, 0).isNotNull(LifeCollect::getStoreId).orderByDesc(LifeCollect::getCreatedTime);
         List<LifeCollect> lifeCollectList = lifeCollectMapper.selectList(wrapper);
         List<StoreInfoVo> storeVoList = new ArrayList<>();
+
         if (!CollectionUtils.isEmpty(lifeCollectList)) {
-            List<String> ids = lifeCollectList.stream().map(LifeCollect::getStoreId).collect(Collectors.toList());
+            // 获取收藏的店铺id
+            List<String> ids = lifeCollectList.stream().filter(x->null != x.getStoreId()).map(LifeCollect::getStoreId).collect(Collectors.toList());
             QueryWrapper<StoreInfoVo> queryWrapper = new QueryWrapper<>();
             queryWrapper.in("a.id", ids).eq("a.delete_flag", 0);
+            // 查询店铺团购信息
+            LambdaUpdateWrapper<LifeCoupon> quanWrapper = new LambdaUpdateWrapper<>();
+            quanWrapper.in(LifeCoupon::getStoreId, ids)
+                    .eq(LifeCoupon::getStatus, 1)
+                    .orderByDesc(LifeCoupon::getCreatedTime);
+            List<LifeCoupon> quanList = lifeCouponMapper.selectList(quanWrapper);
+            // 八大类分类
+            if (!StringUtils.isEmpty(businessSection)) {
+                queryWrapper.eq("a.business_section", businessSection);
+            }
+            // 关键词查询
+            if (!StringUtils.isEmpty(keyword)) {
+                queryWrapper.like("a.store_name", keyword);
+            }
+            // 计算店铺平均分 和 人均花销
+            Map<Object, List<Map<String, Object>>> avgScoreMap = storeEvaluationMapper.allStoreAvgScore().stream().collect(Collectors.groupingBy(o -> o.get("store_id")));
+            Map<Object, List<Map<String, Object>>> avgPriceMap =  lifeUserOrderMapper.allStoreAvgPrice().stream().collect(Collectors.groupingBy(o -> o.get("store_id")));
             List<StoreInfoVo> storeInfoVoList = storeInfoMapper.getStoreInfoVoList(queryWrapper);
             lifeCollectList.forEach(a -> {
                 storeInfoVoList.forEach(b -> {
                     if (a.getStoreId().equals(b.getId().toString())) {
+                        // 团购券设置
+                        List<Map<String, Object>> quanMapList = new ArrayList<>();
+                        if (!quanList.isEmpty()) {
+                            for (LifeCoupon quan : quanList) {
+                                if (b.getId().toString().equals(quan.getStoreId())) {
+                                    Map<String, Object> quanMap = new HashMap<>();
+                                    quanMap.put("quanType", quan.getType());
+                                    quanMap.put("name", quan.getName());
+                                    quanMap.put("price", quan.getPrice());
+                                    // 折扣价
+                                    quanMap.put("offprice", quan.getOffprice());
+                                    quanMap.put("quanId", quan.getId());
+                                    quanMapList.add(quanMap);
+                                }
+                            }
+                        }
+                        b.setQuanList(quanMapList);
+                        // 得分,人均
+                        b.setAvgScore("0");
+                        b.setAvgPrice("0");
+                        if (avgScoreMap.containsKey(String.valueOf(b.getId()))) {
+                            b.setAvgScore(String.valueOf(avgScoreMap.get(String.valueOf(b.getId())).get(0).get("avg_score")));
+                        }
+                        if (avgPriceMap.containsKey(String.valueOf(b.getId()))) {
+                            b.setAvgPrice(String.valueOf(avgPriceMap.get(String.valueOf(b.getId())).get(0).get("avg_price")));
+                        }
                         if ((jingdu != null && !jingdu.isEmpty()) && (weidu != null && !weidu.isEmpty())) {
                             String[] split = b.getStorePosition().split(",");
                             double storeDistance;
@@ -91,6 +149,58 @@ public class LifeCollectController {
         return R.data(ListToPage.setPage(storeVoList, page, size));
     }
 
+    @ApiOperation("团购收藏列表")
+    @ApiOperationSupport(order = 1)
+    @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "分页页数", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "size", value = "分页条数", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "userId", value = "用户id", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "businessSection", value = "经营板块", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "keyword", value = "关键词", dataType = "String", paramType = "query")
+    })
+    @GetMapping("selectCouponCollectList")
+    public R<IPage<LifeCoupon>> selectCouponCollectList(@RequestParam(defaultValue = "1") int page,
+                                                        @RequestParam(defaultValue = "10") int size,
+                                                        @RequestParam String userId,
+                                                        @RequestParam String businessSection,
+                                                        @RequestParam String keyword){
+        log.info("LifeCollectController.selectCouponCollectList?userId={},page={},size={},businessSection={},keyword={}", userId, page, size,businessSection,keyword);
+        LambdaUpdateWrapper<LifeCollect> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(LifeCollect::getUserId, userId);
+        wrapper.eq(LifeCollect::getDeleteFlag, 0).isNotNull(LifeCollect::getCouponId).orderByDesc(LifeCollect::getCreatedTime);
+        List<LifeCollect> lifeCollectList = lifeCollectMapper.selectList(wrapper);
+        List<LifeCoupon> lifeCoupons = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(lifeCollectList)) {
+            // 获取收藏的优惠券id
+            List<String> ids = lifeCollectList.stream().map(LifeCollect::getCouponId).collect(Collectors.toList());
+            QueryWrapper<LifeCoupon> queryWrapper = new QueryWrapper<>();
+            queryWrapper.in("id", ids).eq("delete_flag", 0).orderByDesc("created_time");
+            // 八大类分类
+            if (!StringUtils.isEmpty(businessSection)) {
+                queryWrapper.eq("store_type", businessSection);
+            }
+            // 关键词查询
+            if (!StringUtils.isEmpty(keyword)) {
+                queryWrapper.like("name", keyword);
+            }
+            lifeCoupons = lifeCouponMapper.selectList(queryWrapper);
+            // 设置团购券图片
+            List<String> imagesId = lifeCoupons.stream().map(LifeCoupon::getImagePath).collect(Collectors.toList());
+            if ( !CollectionUtils.isEmpty(imagesId) ){
+                QueryWrapper<StoreImg> imgQueryWrapper = new QueryWrapper<>();
+                imgQueryWrapper.in("id", imagesId);
+                List<StoreImg> storeImgs = storeImgMapper.selectList(imgQueryWrapper);
+                Map<String, List<StoreImg>> collect = storeImgs.stream().collect(Collectors.groupingBy(x -> String.valueOf(x.getId())));
+                lifeCoupons.forEach(coupon -> {
+                    String imgId = coupon.getImagePath().split(",")[0];
+                    if ( collect.containsKey(imgId) ){
+                        coupon.setImagePath(collect.get(imgId).get(0).getImgUrl());
+                    }
+                });
+            }
+        }
+        return R.data(ListToPage.setPage(lifeCoupons, page, size));
+    }
+
     @ApiOperation("添加收藏")
     @ApiOperationSupport(order = 2)
     @PostMapping("addCollect")
@@ -120,10 +230,16 @@ public class LifeCollectController {
             @RequestParam(value = "userId", required = false) String userId,
             @RequestParam(value = "storeId", required = false) String storeId,
             @RequestParam(value = "businessId", required = false) String businessId,
-            @RequestParam(value = "businessType", required = false) String businessType) {
+            @RequestParam(value = "businessType", required = false) String businessType,
+            @RequestParam(value = "couponId", required = false) String couponId) {
         log.info("LifeCollectController.cancelCollect?userId={},storeId={}", userId, storeId);
         LambdaUpdateWrapper<LifeCollect> wrapper = new LambdaUpdateWrapper<>();
         wrapper.eq(LifeCollect::getUserId, userId);
+        if(!StringUtils.isEmpty(storeId)) {
+            wrapper.eq(LifeCollect::getStoreId, storeId);
+        } else if (!StringUtils.isEmpty(couponId)){
+            wrapper.eq(LifeCollect::getCouponId, couponId);
+        }
         if (StringUtil.isBlank(businessType) && businessType.equals(1)) {
             wrapper.eq(LifeCollect::getBusinessId, businessId);
             wrapper.eq(LifeCollect::getBusinessType, businessType);

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

@@ -41,14 +41,17 @@ public class LifeCouponController {
     @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "页数", dataType = "Integer", paramType = "query", required = true),
             @ApiImplicitParam(name = "size", value = "页容", dataType = "Integer", paramType = "query", required = true),
             @ApiImplicitParam(name = "storeId", value = "门店id", dataType = "Integer", paramType = "query", required = true),
-            @ApiImplicitParam(name = "status", value = "状态", dataType = "Integer", paramType = "query", required = true)})
+            @ApiImplicitParam(name = "status", value = "状态", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "name", value = "名称", dataType = "Integer", paramType = "query", required = false)
+    })
     @GetMapping("/getCouponList")
     private R<IPage<LifeCoupon>> getCouponList(@RequestParam(value = "page", defaultValue = "1") int page,
                                                @RequestParam(value = "size", defaultValue = "10") int size,
                                                @RequestParam("storeId") String storeId,
-                                               @RequestParam("status") String status) {
-        log.info("LifeCouponController.getCouponList?page={},size={},storeId={},status={}", page, size, storeId, status);
-        return R.data(lifeCouponService.getCouponList(page, size, storeId, status));
+                                               @RequestParam("status") String status,
+                                               @RequestParam(value = "name",required = false) String name) {
+        log.info("LifeCouponController.getCouponList?page={},size={},storeId={},status={},name={}", page, size, storeId, status, name);
+        return R.data(lifeCouponService.getCouponList(page, size, storeId, status, name));
     }
 
     @ApiOperation("暂停恢复优惠券")

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

@@ -116,9 +116,9 @@ public class LifeGroupPackageController {
 
     @ApiOperation("团购详情")
     @GetMapping("/getGroupPackageDetail")
-    private R<Map<String, Object>> getGroupPackageDetail(@RequestParam("id") String id) {
-        log.info("LifeGroupPackageController.getGroupPackageDetail?id={}", id);
-        return R.data(lifeGroupPackageService.getGroupPackageDetail(id));
+    private R<Map<String, Object>> getGroupPackageDetail(@RequestParam("id") String id, @RequestParam("userId") String userId) {
+        log.info("LifeGroupPackageController.getGroupPackageDetail?id={}&userId={}", id, userId);
+        return R.data(lifeGroupPackageService.getGroupPackageDetail(id,userId));
     }
 
     @ApiOperation("猜你喜欢")

+ 11 - 9
alien-store/src/main/java/shop/alien/store/controller/PlatformStoreCouponController.java

@@ -22,18 +22,20 @@ public class PlatformStoreCouponController {
 
     private final PlatformStoreCouponService platformStoreCouponService;
 
-    @ApiOperation("套餐列表")
+    @ApiOperation("套餐/代金券列表")
     @ApiOperationSupport(order = 1)
     @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "分页页数", dataType = "Integer", paramType = "query", required = true),
             @ApiImplicitParam(name = "size", value = "分页条数", dataType = "Integer", paramType = "query", required = true),
             @ApiImplicitParam(name = "storeName", value = "商家名称", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "createdTime", value = "商家名称", dataType = "Date", paramType = "query"),
-            @ApiImplicitParam(name = "status", value = "审核状态", dataType = "String", paramType = "query")})
+            @ApiImplicitParam(name = "createdTime", value = "创建时间", dataType = "Date", paramType = "query"),
+            @ApiImplicitParam(name = "status", value = "审核状态", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "type", value = "类型   1-代金券  2-团购(套餐)", dataType = "String", paramType = "query")
+    })
     @GetMapping("/getCouponList")
-    public R<IPage<LifeCouponVo>> getCouponList(Integer page, Integer size, String storeName, String status, @RequestParam(value = "createdTime", required = false) String createdTime, String phone) {
-        log.info("PlatformStoreCouponController.getCouponList?page={},size={},name={},status={},createdTime={}", page, size, storeName, status, createdTime);
-        return R.data(platformStoreCouponService.getCouponList(page, size, storeName, status, createdTime, phone));
+    public R<IPage<LifeCouponVo>> getCouponList(Integer page, Integer size, String storeName, String status, @RequestParam(value = "createdTime", required = false) String createdTime, String phone, @RequestParam(defaultValue = "2") String type) {
+        log.info("PlatformStoreCouponController.getCouponList?page={},size={},name={},status={},createdTime={},type={}", page, size, storeName, status, createdTime, type);
+        return R.data(platformStoreCouponService.getCouponList(page, size, storeName, status, createdTime, phone, type));
     }
 
     /**
@@ -81,16 +83,16 @@ public class PlatformStoreCouponController {
         return platformStoreCouponService.deleteCouponStatus(id);
     }
 
-    @ApiOperation("套餐详情")
+    @ApiOperation("套餐/代金券详情")
     @ApiOperationSupport(order = 2)
     @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "主键id", dataType = "Integer", paramType = "query", required = true)})
     @GetMapping("/getCouponById")
-    public R<LifeCoupon> getCouponById(Integer id) {
+    public R<LifeCouponVo> getCouponById(Integer id) {
         log.info("PlatformStoreCouponController.getCouponById?id={}", id);
         return R.data(platformStoreCouponService.getCouponById(id));
     }
 
-    @ApiOperation("套餐审核")
+    @ApiOperation("套餐/代金券审核")
     @ApiOperationSupport(order = 2)
     @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "主键id", dataType = "Integer", paramType = "query", required = true),
             @ApiImplicitParam(name = "status", value = "状态", dataType = "String", paramType = "query"),

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

@@ -29,19 +29,19 @@ public class UserStoreController {
     @ApiOperationSupport(order = 1)
     @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "分页页数", dataType = "String", paramType = "query", required = true),
             @ApiImplicitParam(name = "size", value = "分页条数", dataType = "String", paramType = "query", required = true),
-            @ApiImplicitParam(name = "storeType", value = "storeType", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "storeType", value = "storeType", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "storeName", value = "storeName", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "distance", value = "distance", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "distance", value = "distance", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "jingdu", value = "jingdu", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "weidu", value = "weidu", dataType = "String", paramType = "query")})
     @GetMapping("/getStoreList")
     public R<IPage<Map<String, Object>>> getStoreList(@RequestParam("storeType") String storeType,
                                                       @RequestParam("storeName") String storeName,
-                                                      @RequestParam("distance") String distance,
+                                                      @RequestParam("distance") Integer distance,
                                                       @RequestParam("jingdu") String jingdu,
                                                       @RequestParam("weidu") String weidu,
-                                                      @RequestParam(value = "page", defaultValue = "1") int page,
-                                                      @RequestParam(value = "size", defaultValue = "10") int size) {
+                                                      @RequestParam(value = "page", defaultValue = "1") Integer page,
+                                                      @RequestParam(value = "size", defaultValue = "10") Integer size) {
         log.info("LifeUserStoreController.getStoreList?page={},size={},storeType={},storeName={},distance={},jingdu={},weidu={}", page, size, storeType, storeName, distance, jingdu, weidu);
         List<Map<String, Object>> result = lifeUserStoreService.getStoreList(storeType, storeName, distance, jingdu, weidu, page, size);
         return R.data(ListToPage.setPage(result, page, size));

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

@@ -13,7 +13,7 @@ public interface LifeCouponService extends IService<LifeCoupon> {
 
     boolean addOrUpdateCoupon(LifeCoupon lifeCoupon);
 
-    IPage<LifeCoupon> getCouponList(int page, int size, String storeId, String status);
+    IPage<LifeCoupon> getCouponList(int page, int size, String storeId, String status, String name);
 
     int updateCoupon(String id, Integer status);
 

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

@@ -19,6 +19,6 @@ public interface LifeGroupPackageService extends IService<LifeGroupPackage> {
 
     int updateGroupPackageStatus(String id, Integer status);
 
-    Map<String, Object> getGroupPackageDetail(String id);
+    Map<String, Object> getGroupPackageDetail(String id, String userId);
 
 }

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

@@ -390,7 +390,7 @@ public class LifeStoreService {
         return storeImgService.update(null, updateWrapper);
     }
 
-    // TODO 效率太低,想办法通过sql直接查询。 通过在循环外查询初步优化
+
     private void filterBlocked(String fansId, IPage<LifeFansVo> myFollowed) {
 
         // 判断自己的拉黑type

+ 60 - 9
alien-store/src/main/java/shop/alien/store/service/LifeUserStoreService.java

@@ -47,6 +47,8 @@ public class LifeUserStoreService {
 
     private final GaoDeMapUtil gaoDeMapUtil;
 
+    private final StoreClockInService storeClockInService;
+
     /**
      * 门店列表
      *
@@ -59,63 +61,95 @@ public class LifeUserStoreService {
      * @param size      页容
      * @return 门店列表
      */
-    public List<Map<String, Object>> getStoreList(String storeType, String storeName, String distance, String jingdu, String weidu, int page, int size) {
+    public List<Map<String, Object>> getStoreList(String storeType, String storeName, Integer distance, String jingdu, String weidu, int page, int size) {
         try {
+            // 初始化返回结果列表
             List<Map<String, Object>> returnMaps = new ArrayList<>();
+            // 构建查询条件对象
             QueryWrapper<StoreInfoVo> wrapper = new QueryWrapper<>();
-            wrapper.eq(!storeType.isEmpty(), "a.store_type", storeType);
+            // 添加门店类型筛选条件()
+//            wrapper.in(null != storeType, "a.business_section", storeType);
+            // 添加门店名称或相关菜品名称模糊搜索条件
             wrapper.like(!storeName.isEmpty(), "a.store_name", storeName).or().like(!storeName.isEmpty(), "c.dish_name", storeName);
+            // 过滤已删除的门店
             wrapper.eq("a.delete_flag", 0);
-            wrapper.eq("a.business_section", 1);
+            // 过滤非营业中的门店
+            wrapper.in(null != storeType && !"".equals(storeType), "a.business_section", Arrays.asList(storeType.split(",")));
             // 过滤掉永久关门的店铺
             wrapper.ne("a.business_status", 99);
+            // 根据构建的条件查询门店信息
             List<StoreInfoVo> storeInfoVoList = storeInfoMapper.getStoreInfoVoList(wrapper);
+            // 如果查询结果为空,则直接返回空列表
             if (storeInfoVoList.isEmpty()) {
                 return returnMaps;
             }
+            // 提取所有符合条件的门店ID
             List<Integer> storeIds = storeInfoVoList.stream().map(StoreInfoVo::getId).collect(Collectors.toList());
+            // 构建查询优惠券的条件对象
             LambdaUpdateWrapper<LifeCoupon> quanWrapper = new LambdaUpdateWrapper<>();
+            // 添加门店ID筛选条件
             quanWrapper.in(LifeCoupon::getStoreId, storeIds)
+                    // 添加优惠券状态筛选条件
                     .eq(LifeCoupon::getStatus, 1)
+                    // 按照创建时间降序排序
                     .orderByDesc(LifeCoupon::getCreatedTime);
+            // 查询符合条件的优惠券列表
             List<LifeCoupon> quanList = lifeCouponMapper.selectList(quanWrapper);
             // 获取全部店铺的评分与平均花销
             Map<Object, List<Map<String, Object>>> avgScoreMap = storeEvaluationMapper.allStoreAvgScore().stream().collect(Collectors.groupingBy(o -> o.get("store_id")));
-
+            // 获取用户订单信息,用于计算平均消费
             Map<Object, List<Map<String, Object>>> avgPriceMap = lifeUserOrderMapper.allStoreAvgPrice().stream().collect(Collectors.groupingBy(o -> o.get("store_id")));
-
+            // 获取所有店铺的打卡次数
+            List<Map<Integer, Integer>> storeClockInCountList = storeClockInService.getStoreClockInCount();
+            // 遍历所有门店信息,构造返回结果
             for (StoreInfoVo store : storeInfoVoList) {
                 Map<String, Object> storeMap = new HashMap<>();
+                // 如果用户提供了经纬度信息,则计算并添加门店到用户的距离
                 if ((jingdu != null && !jingdu.isEmpty()) && (weidu != null && !weidu.isEmpty())) {
                     double storeJing = Double.parseDouble(store.getStorePosition().split(",")[0]);
                     double storeWei = Double.parseDouble(store.getStorePosition().split(",")[1]);
                     double storeDistance = DistanceUtil.haversineCalculateDistance(Double.parseDouble(jingdu), Double.parseDouble(weidu), storeJing, storeWei);
                     storeMap.put("distance", storeDistance);
                 } else {
+                    // 否则,返回提示信息
                     storeMap.put("distance", "没有位置信息");
                 }
+                // 添加门店的业务状态及其描述
                 storeMap.put("businessStatus", store.getBusinessStatus());
                 storeMap.put("businessStatusStr", store.getBusinessStatusStr());
+                // 添加门店ID
                 storeMap.put("storeId", store.getId());
+                // 如果存在评分数据,则添加评分、平均消费及评价总数
                 if (avgScoreMap.containsKey(String.valueOf(store.getId()))) {
                     storeMap.put("avgScore", avgScoreMap.get(String.valueOf(store.getId())).get(0).get("avg_score"));
                     storeMap.put("avgPrice", avgPriceMap.get(String.valueOf(store.getId())).get(0).get("avg_price"));
-                    //条数
+                    // 条数
                     storeMap.put("totalNum", avgScoreMap.get(String.valueOf(store.getId())).get(0).get("total_num"));
                 } else {
+                    // 否则,设置默认值
                     storeMap.put("avgScore", 0);
                     storeMap.put("avgPrice", 0);
                     storeMap.put("totalNum", 0);
-
                 }
+                // 添加门店名称
                 storeMap.put("storeName", store.getStoreName());
+                // 添加门店地址
                 storeMap.put("storeAddress", store.getStoreAddress());
+                // 添加门店类型
                 storeMap.put("storeType", store.getStoreType());
+                // 添加门店入口图片
                 storeMap.put("entranceImage", store.getEntranceImage());
+                // 添加门店图片
                 storeMap.put("storeImage", store.getImgUrl());
+                // 解析并添加门店经纬度
+                String[] position = store.getStorePosition().split(",");
+                storeMap.put("longitude", position.length == 2 ? position[0] : "");
+                storeMap.put("latitude", position.length == 2 ? position[1] : "");
+                // 构造该门店的优惠券列表
                 List<Map<String, Object>> quanMapList = new ArrayList<>();
                 if (!quanList.isEmpty()) {
                     for (LifeCoupon quan : quanList) {
+                        // 如果优惠券的门店ID与当前门店ID匹配,则添加到优惠券列表中
                         if (store.getId().toString().equals(quan.getStoreId())) {
                             Map<String, Object> quanMap = new HashMap<>();
                             quanMap.put("quanType", quan.getType());
@@ -127,13 +161,28 @@ public class LifeUserStoreService {
                             quanMapList.add(quanMap);
                         }
                     }
+                    // 将优惠券列表添加到门店信息中
                     storeMap.put("quanList", quanMapList);
                 }
+                // 添加门店类型的描述
                 storeMap.put("storeTypeStr", store.getStoreTypeStr());
+                // 遍历打卡次数列表,找到当前门店的打卡次数并添加到门店信息中
+                storeClockInCountList.forEach(b -> {
+                    Integer storeId = b.get("storeId");
+                    if (Objects.equals(storeId, store.getId())) {
+                        storeMap.put("storeClockInCount", b.get("count"));
+                    }
+                });
+                // 如果未找到打卡次数,则设置为0
+                if (null == storeMap.get("storeClockInCount")) {
+                    storeMap.put("storeClockInCount", 0);
+                }
+                // 将当前门店的信息添加到返回结果列表中
                 returnMaps.add(storeMap);
             }
-            if (distance != null && !distance.isEmpty()) {
-                double maxDistance = Double.parseDouble(distance);
+            // 如果用户提供了距离阈值,则根据距离过滤结果,并按距离升序排序
+            if (distance != null) {
+                double maxDistance = distance;
                 returnMaps = returnMaps.stream()
                         .filter(storeMap -> {
                             Object distanceObj = storeMap.get("distance");
@@ -146,8 +195,10 @@ public class LifeUserStoreService {
                         .sorted(Comparator.comparingDouble(storeMap -> (double) storeMap.get("distance")))
                         .collect(Collectors.toList());
             }
+            // 返回最终结果列表
             return returnMaps;
         } catch (Exception e) {
+            // 捕获并抛出运行时异常
             throw new RuntimeException(e);
         }
     }

+ 3 - 5
alien-store/src/main/java/shop/alien/store/service/PlatformStoreCouponService.java

@@ -8,17 +8,15 @@ import java.io.IOException;
 
 public interface PlatformStoreCouponService {
 
-    IPage<LifeCouponVo> getCouponList(Integer page, Integer size, String storeName, String status, String createdTime, String phone);
+    IPage<LifeCouponVo> getCouponList(Integer page, Integer size, String storeName, String status, String createdTime, String phone, String type);
 
     IPage<LifeCouponVo> getCouponStatusList(Integer page, Integer size, String status, String expiredState);
 
-    LifeCoupon getCouponById(Integer id);
+    LifeCouponVo getCouponById(Integer id);
 
     int approvalCoupon(Integer id, Integer status, String comment);
 
-    String couponStatusExport(String status, String expiredState) throws IOException;
-
-    ;
+    String couponStatusExport(String status, String expiredState) throws IOException;;
 
     int deleteCouponStatus(Integer id);
 }

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

@@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import shop.alien.entity.store.StoreClockIn;
 import shop.alien.entity.store.vo.StoreClockInVo;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 店铺打卡 服务类
@@ -25,5 +28,5 @@ public interface StoreClockInService extends IService<StoreClockIn> {
 
     int setImg(int id, String img);
 
-
+    List<Map<Integer, Integer>> getStoreClockInCount();
 }

+ 14 - 13
alien-store/src/main/java/shop/alien/store/service/impl/LifeCouponServiceImpl.java

@@ -74,18 +74,18 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
             lifeCoupon.setDiscountTagName(String.join(",", businessTypeNames));
         }
 
-        int status = 0;
-        Date now = new Date();
-        Date startDate = lifeCoupon.getStartDate();
-        Date endDate = lifeCoupon.getEndDate();
-        if (now.compareTo(startDate) >= 0 && now.compareTo(endDate) <= 0) {
-            status = 1;
-        } else if (now.compareTo(startDate) < 0) {
-            status = 0;
-        } else if (now.compareTo(endDate) >= 0) {
-            status = 3;
-        }
-        lifeCoupon.setStatus(status);
+//        int status = 0;
+//        Date now = new Date();
+//        Date startDate = lifeCoupon.getStartDate();
+//        Date endDate = lifeCoupon.getEndDate();
+//        if (now.compareTo(startDate) >= 0 && now.compareTo(endDate) <= 0) {
+//            status = 1;
+//        } else if (now.compareTo(startDate) < 0) {
+//            status = 0;
+//        } else if (now.compareTo(endDate) >= 0) {
+//            status = 3;
+//        }
+        lifeCoupon.setStatus(-1);
         if (StringUtils.isEmpty(lifeCoupon.getId())) {
             lifeCoupon.setType(1);
             lifeCoupon.setCouponCode(UniqueRandomNumGenerator.generateUniqueCode(12));
@@ -96,10 +96,11 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
     }
 
     @Override
-    public IPage<LifeCoupon> getCouponList(int page, int size, String storeId, String status) {
+    public IPage<LifeCoupon> getCouponList(int page, int size, String storeId, String status, String name) {
         LambdaUpdateWrapper<LifeCoupon> wrapper = new LambdaUpdateWrapper<>();
         wrapper.eq(storeId != null && !storeId.isEmpty(), LifeCoupon::getStoreId, storeId);
         wrapper.eq(status != null && !status.isEmpty(), LifeCoupon::getStatus, status);
+        wrapper.like(name != null && !name.isEmpty(), LifeCoupon::getName, name);
         wrapper.eq(LifeCoupon::getType, 1);
         wrapper.orderByDesc(LifeCoupon::getCreatedTime);
         IPage<LifeCoupon> lifeCouponIPage = new Page<>(page, size);

+ 8 - 0
alien-store/src/main/java/shop/alien/store/service/impl/LifeDiscountCouponServiceImpl.java

@@ -158,6 +158,14 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
         LifeDiscountCoupon lifeDiscountCoupon = lifeDiscountCouponMapper.selectById(counponId);
         lifeDiscountCoupon.setGetStatus(lifeDiscountCoupon.getGetStatus() == Integer.parseInt(DiscountCouponEnum.NO_GET.getValue())
                 ? Integer.parseInt(DiscountCouponEnum.CAN_GET.getValue()) : Integer.parseInt(DiscountCouponEnum.NO_GET.getValue()));
+        Date now = new Date();
+        Instant instant = now.toInstant();
+        ZoneId zoneId = ZoneId.systemDefault();
+        LocalDate localNow = instant.atZone(zoneId).toLocalDate();
+        if (localNow.compareTo(lifeDiscountCoupon.getStartDate()) < 0) {
+            lifeDiscountCoupon.setStartDate(localNow);
+            lifeDiscountCoupon.setGetStatus(Integer.parseInt(DiscountCouponEnum.CAN_GET.getValue()));
+        }
         lifeDiscountCouponMapper.updateById(lifeDiscountCoupon);
         return true;
     }

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

@@ -181,7 +181,6 @@ public class LifeDiscountCouponStoreFriendServiceImpl extends ServiceImpl<LifeDi
                 lifeDiscountCoupon.setSingleQty(lifeDiscountCoupon.getSingleQty() - couponDto.getSingleQty());
                 // 更新数据库中的优惠券库存信息
                 lifeDiscountCouponMapper.updateById(lifeDiscountCoupon);
-                // TODO 发送优惠券发放成功的通知
             }
             // 如果所有优惠券都成功处理,返回 true
             return true;
@@ -317,7 +316,6 @@ public class LifeDiscountCouponStoreFriendServiceImpl extends ServiceImpl<LifeDi
             lifeNotice.setNoticeType(1);
             lifeNoticeMapper.insert(lifeNotice);
 
-            // TODO 加系统消息通知给用户
         }
         // 返回成功发放的优惠券信息列表
         return result;

+ 12 - 4
alien-store/src/main/java/shop/alien/store/service/impl/LifeGroupPackageServiceImpl.java

@@ -46,6 +46,7 @@ public class LifeGroupPackageServiceImpl extends ServiceImpl<LifeGroupPackageMap
     private final StoreInfoMapper storeInfoMapper;
     private final StoreGroupInfoMapper storeGroupInfoMapper;
     private final StoreImgMapper storeImgMapper;
+    private final LifeCollectMapper lifeCollectMapper;
 
 
     @Override
@@ -234,7 +235,7 @@ public class LifeGroupPackageServiceImpl extends ServiceImpl<LifeGroupPackageMap
     }
 
     @Override
-    public Map<String, Object> getGroupPackageDetail(String id) {
+    public Map<String, Object> getGroupPackageDetail(String id, String userId) {
         Map<String, Object> returnMap = new HashMap<>();
         LifeCoupon tuangou = lifeCouponMapper.selectById(id);
         LambdaUpdateWrapper<LifeGroupPackage> updateWrapper = new LambdaUpdateWrapper<>();
@@ -242,6 +243,8 @@ public class LifeGroupPackageServiceImpl extends ServiceImpl<LifeGroupPackageMap
         List<LifeGroupPackage> tuangouPackageList = lifeGroupPackageMapper.selectList(updateWrapper);
         Map<String, List<LifeGroupPackage>> groupedPackages = tuangouPackageList.stream().collect(Collectors.groupingBy(LifeGroupPackage::getGroupName));
         List<Map<String, Object>> resultList = new ArrayList<>();
+        // 是否收藏了该团购
+        LifeCollect lifeCollect = lifeCollectMapper.selectOne(new QueryWrapper<LifeCollect>().eq("user_id", userId).eq("coupon_id", id));
         for (Map.Entry<String, List<LifeGroupPackage>> entry : groupedPackages.entrySet()) {
             String groupName = entry.getKey();
             List<LifeGroupPackage> packageList = entry.getValue();
@@ -252,7 +255,7 @@ public class LifeGroupPackageServiceImpl extends ServiceImpl<LifeGroupPackageMap
 
                 packageMap.put("qty", pkg.getQty());
                 packageMap.put("price", pkg.getPrice());
-                packageMap.put("unit", pkg.getUnit());
+                packageMap.put("unit",pkg.getUnit());
                 packageListFormatted.add(packageMap);
             }
             Map<String, Object> groupMap = new HashMap<>();
@@ -271,14 +274,19 @@ public class LifeGroupPackageServiceImpl extends ServiceImpl<LifeGroupPackageMap
         lifeCouponVo.setStoreName(storeUser.getStoreName());
 
         LifeCouponVo tuangouVO = new LifeCouponVo();
-        BeanUtils.copyProperties(tuangou, tuangouVO);
+        BeanUtils.copyProperties(tuangou,tuangouVO);
+
+        tuangouVO.setIsCollect("0");
+        if(!Objects.isNull(lifeCollect)){
+            tuangouVO.setIsCollect("1");
+        }
 
         if (StringUtils.isNotEmpty(tuangou.getUploadedPiclist())) {
             List<String> collect = Arrays.stream(tuangou.getUploadedPiclist().split(","))
                     .map(String::trim)
                     .collect(Collectors.toList());
             List<StoreImg> storeImgs = storeImgMapper.selectList(new LambdaQueryWrapper<StoreImg>().in(StoreImg::getId, collect));
-            if (storeImgs != null) {
+            if (storeImgs!=null) {
                 String imgs = storeImgs.stream()
                         .map(StoreImg::getImgUrl)
                         .collect(Collectors.joining(","));

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

@@ -195,7 +195,7 @@ public class LifeMessageServiceImpl extends ServiceImpl<LifeMessageMapper, LifeM
 
     @Override
     public List<LifeMessageVo> getMessageListByReceiverId(String receiverId, String senderId) {
-        // TODO 优化查询图像问题优化,主要是因为Store_ 还是 User_ 前缀问题
+
 
         // 获取发送方与接收方头像
         LifeUser lifeUser1 = null;

+ 28 - 26
alien-store/src/main/java/shop/alien/store/service/impl/PlatformStoreCouponServiceImpl.java

@@ -42,15 +42,16 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
     private String fileUrl;
 
     @Override
-    public IPage<LifeCouponVo> getCouponList(Integer page, Integer size, String storeName, String status, String createdTime, String phone) {
+    public IPage<LifeCouponVo> getCouponList(Integer page, Integer size, String storeName, String status, String createdTime, String phone, String type) {
         QueryWrapper<LifeCouponVo> wrapper = new QueryWrapper<>();
         wrapper.like(StringUtils.isNotEmpty(storeName), "store.store_name", storeName);
         wrapper.eq(StringUtils.isNotEmpty(status), "coupon.status", status);
+        wrapper.eq(StringUtils.isNotEmpty(type), "coupon.type", type);
         wrapper.eq("coupon.delete_flag", 0);
         wrapper.eq("store.delete_flag", 0);
         wrapper.eq("user.delete_flag", 0);
-        wrapper.like(StringUtils.isNotEmpty(createdTime), "coupon.created_time", createdTime);
-        wrapper.like(StringUtils.isNotEmpty(phone), "user.phone", phone);
+        wrapper.like(StringUtils.isNotEmpty(createdTime),"coupon.created_time", createdTime);
+        wrapper.like(StringUtils.isNotEmpty(phone),"user.phone", phone);
         wrapper.isNotNull("coupon.status");
         wrapper.orderByDesc("coupon.created_time");
         IPage<LifeCouponVo> lifeCouponVo = platformStoreCouponMapper.getCouponList(new Page<>(page, size), wrapper);
@@ -65,7 +66,7 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
 // expiredState 赋值逻辑(修正版)
             LocalDateTime now = LocalDateTime.now(); // 获取当前时间
             Date endDate = item.getEndDate();
-            if (endDate != null) {
+            if (endDate != null){
                 LocalDateTime endDateTime = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
                 // 核心逻辑:未过期时赋 0,已过期赋 1(与前端枚举定义一致)
                 if (now.isBefore(endDateTime)) {
@@ -88,18 +89,18 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
 
 
         // 定义允许的状态值
-        List<String> allowedStatus = Arrays.asList("1", "2", "3");
+        List<String> allowedStatus = Arrays.asList( "1","2", "3");
         if ("-3".equals(status)) { // 已售罄(逻辑状态,状态为进行中但是余量为0的)
             wrapper.eq("coupon.status", "1");
             wrapper.eq("coupon.stock_qty", 0);
-        } else if ("1".equals(status)) {
+        }else if ("1".equals(status)) {
             wrapper.eq("coupon.status", "1");
             wrapper.ne("coupon.stock_qty", 0);
-        } else if ("4".equals(status)) {
+        }else if ("4".equals(status)){
             wrapper.eq("coupon.status", "1");
-            wrapper.gt("coupon.start_date", new Date());
-        } else {
-            if (StringUtils.isNotEmpty(status)) {
+            wrapper.gt("coupon.start_date",new Date());
+        }else{
+            if (StringUtils.isNotEmpty(status)){
                 wrapper.eq("coupon.status", status);
             }
         }
@@ -114,9 +115,9 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
         wrapper.orderByDesc("coupon.created_time");
 
         Date currentDate = new Date();
-        if ("0".equals(expiredState)) {
+        if ("0".equals(expiredState)){
             wrapper.ge("coupon.end_date", currentDate);
-        } else if ("1".equals(expiredState)) {
+        }else if ("1".equals(expiredState)){
             wrapper.lt("coupon.end_date", currentDate);
         }
 
@@ -133,7 +134,7 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
             // expiredState 赋值逻辑(修正版)
             LocalDateTime now = LocalDateTime.now(); // 获取当前时间
             Date endDate = item.getEndDate(); // 假设 endDate 是 Date 类型
-            if (endDate != null) {
+            if (endDate != null){
                 LocalDateTime endDateTime = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
                 // 核心逻辑:未过期时赋 0,已过期赋 1(与前端枚举定义一致)
                 if (now.isBefore(endDateTime)) {
@@ -147,8 +148,9 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
             if (item.getStatus() == 1 && item.getStockQty() == 0) {
                 item.setStatus(-3);
             }
+
             //判断是否为未开始
-            if (item.getStatus() == 1 && item.getStartDate().after(new Date())) {
+            if (item.getStatus() == 1 && item.getStartDate().after( new Date())){
                 item.setStatus(4);
             }
         });
@@ -166,8 +168,8 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
     }
 
     @Override
-    public LifeCoupon getCouponById(Integer id) {
-        return platformStoreCouponMapper.selectById(id);
+    public LifeCouponVo getCouponById(Integer id) {
+        return platformStoreCouponMapper.getCouponById(id);
     }
 
     @Override
@@ -191,7 +193,7 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
     }
 
     @Override
-    public String couponStatusExport(String status, String expiredState) throws IOException {
+    public String couponStatusExport(String status, String expiredState) throws IOException  {
 
         QueryWrapper<LifeCouponVo> wrapper = new QueryWrapper<>();
         // 定义允许的状态值
@@ -199,12 +201,12 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
 //        wrapper.like(StringUtils.isNotEmpty(storeName), "store.store_name", storeName);
         if (StringUtils.isNotEmpty(status) && status.equals("-3")) {
             status = "1";
-            wrapper.eq("coupon.single_qty", 0);
+            wrapper.eq("coupon.single_qty",0);
         }
         if (StringUtils.isNotEmpty(status) && allowedStatus.indexOf(status) != -1) {
             wrapper.eq(StringUtils.isNotEmpty(status), "coupon.status", status);
-        } else {
-            wrapper.in("coupon.status", allowedStatus);
+        }else {
+            wrapper.in( "coupon.status", allowedStatus);
         }
         wrapper.eq("coupon.delete_flag", 0);
         wrapper.eq("store.delete_flag", 0);
@@ -216,9 +218,9 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
         wrapper.orderByDesc("coupon.created_time");
 
         Date currentDate = new Date();
-        if ("0".equals(expiredState)) {
+        if ("0".equals(expiredState)){
             wrapper.ge("coupon.end_date", currentDate);
-        } else if ("1".equals(expiredState)) {
+        }else if ("1".equals(expiredState)){
             wrapper.lt("coupon.end_date", currentDate);
         }
 
@@ -226,7 +228,7 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
         lifeCouponVo.forEach(item -> {
             if (item.getStatus() == 1 && item.getStockQty() > 0) {
                 item.setCouponState("进行中");
-            } else if (item.getStatus() == 1 && item.getStockQty() == 0) {
+            }else if (item.getStatus() == 1 && item.getStockQty() == 0) {
                 item.setCouponState("已售罄");
             } else if (item.getStatus() == 2) {
                 item.setCouponState("已暂停");
@@ -244,7 +246,7 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
             // 格式化日期
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
             String formattedEndDate = "";
-            if (endDate != null) {
+            if (endDate != null){
                 LocalDateTime endDateTime = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
                 // 调整结束时间为前一天的23:59:59
                 endDateTime = endDateTime.minusDays(1).withHour(23).withMinute(59).withSecond(59);
@@ -292,9 +294,9 @@ public class PlatformStoreCouponServiceImpl implements PlatformStoreCouponServic
             storeCouponStatusVo.setId(String.valueOf(index++)); // 设置序号
             storeCouponStatusVos.add(storeCouponStatusVo);
         }
-        String fileName = UUID.randomUUID().toString().replace("-", "");
+        String fileName = UUID.randomUUID().toString().replace("-","");
 
-        ExcelGenerator.generateExcel(excelPath + excelGeneratePath + fileName + ".xlsx", storeCouponStatusVos, StoreCouponStatusVo.class);
+        ExcelGenerator.generateExcel(excelPath + excelGeneratePath + fileName + ".xlsx",storeCouponStatusVos,StoreCouponStatusVo.class);
         return fileUrl + "excel" + excelGeneratePath + fileName + ".xlsx";
     }
 

+ 12 - 1
alien-store/src/main/java/shop/alien/store/service/impl/StoreClockInServiceImpl.java

@@ -15,6 +15,7 @@ import shop.alien.store.service.StoreClockInService;
 import shop.alien.store.service.StoreCommentService;
 
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -139,7 +140,7 @@ public class StoreClockInServiceImpl extends ServiceImpl<StoreClockInMapper, Sto
 //            vo.setClockInStoreNum(clockInStoreNumMap.get(vo.getStoreId()));
 //            // 打卡次数
 //            vo.setClockInNum(clockInNum);
-            vo.setCommentCount(Integer.parseInt(storeCommentService.getCommitCountAndScore(vo.getId(), 4, vo.getUserId()).get("commitCount")));
+            vo.setCommentCount(Integer.parseInt(storeCommentService.getCommitCountAndScore(vo.getId(), 4, vo.getStoreId()).get("commitCount")));
         });
 
 
@@ -167,4 +168,14 @@ public class StoreClockInServiceImpl extends ServiceImpl<StoreClockInMapper, Sto
         wrapper.eq(StoreClockIn::getId, id);
         return storeClockInMapper.update(null, wrapper);
     }
+
+    /**
+     * 获取门店打卡次数
+     *
+     * @return list
+     */
+    @Override
+    public List<Map<Integer, Integer>> getStoreClockInCount() {
+        return storeClockInMapper.getStoreClockInCount();
+    }
 }

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

@@ -102,8 +102,6 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
 
     private final StoreInfoDraftMapper storeInfoDraftMapper;
 
-    private final LifeUserOrderService lifeUserOrderService;
-
     @Value("${spring.web.resources.excel-path}")
     private String excelPath;
 
@@ -217,7 +215,8 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
                 .eq(StringUtils.isNotEmpty(businessSection), "a.business_section", businessSection)
                 .eq(StringUtils.isNotEmpty(storeStatus), "a.store_status", storeStatus)
                 .like(StringUtils.isNotEmpty(id), "a.id", id)
-                .in("a.business_status", Arrays.asList(0, 2))
+                .eq("a.delete_flag", 0)
+                .eq("b.delete_flag", 0)
                 .orderByDesc("a.created_time");
         //如果查询未过期
         // 获取当前时刻
@@ -866,7 +865,7 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
         result.setStorePositionLatitude(result.getStorePosition().split(",")[1]);
 
         // 设置距离
-        if (StringUtils.isNotEmpty(jingdu) && StringUtils.isNotEmpty(weidu)) {
+        if ((jingdu != null && !jingdu.isEmpty()) && (weidu != null && !weidu.isEmpty())) {
             double storeJing = Double.parseDouble(result.getStorePosition().split(",")[0]);
             double storeWei = Double.parseDouble(result.getStorePosition().split(",")[1]);
             double storeDistance = DistanceUtil.haversineCalculateDistance(Double.parseDouble(jingdu), Double.parseDouble(weidu), storeJing, storeWei);
@@ -898,6 +897,7 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
         LifeCollect shouCang = lifeCollectMapper.selectOne(shouCangWrapper);
         if (null == shouCang) {
             result.setCollection(0);
+        } else {
             result.setCollection(1);
         }
 
@@ -1237,7 +1237,7 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
                         .map(item -> String.valueOf(item.getStoreId()))
                         .collect(Collectors.toList());
             }
-            if (!CollectionUtils.isEmpty(storeIds)) {
+            if(!CollectionUtils.isEmpty(storeIds)) {
                 LambdaQueryWrapper<StoreInfo> queryWrapper = new LambdaQueryWrapper<>();
                 queryWrapper.in(StoreInfo::getId, storeIds);
                 storeInfoIPage = storeInfoMapper.selectPage(page, queryWrapper);